MmcHost = MmcHostInstance->MmcHost;\r
ASSERT (MmcHost);\r
\r
+ if (This->Media->MediaId != MediaId) {\r
+ return EFI_MEDIA_CHANGED;\r
+ }\r
+\r
if ((MmcHost == 0)|| (Buffer == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- // The buffer size must not be zero and it must be an exact multiple of the block size\r
- if ((BufferSize == 0) || ((BufferSize % This->Media->BlockSize) != 0)) {\r
- return EFI_BAD_BUFFER_SIZE;\r
+ if((Transfer == MMC_IOBLOCKS_WRITE) && (This->Media->ReadOnly == TRUE)) {\r
+ return EFI_WRITE_PROTECTED;\r
}\r
\r
- if (This->Media->MediaId != MediaId) {\r
- return EFI_MEDIA_CHANGED;\r
+ // Reading 0 Byte is valid\r
+ if (BufferSize == 0) {\r
+ return EFI_SUCCESS;\r
}\r
\r
- if((Transfer == MMC_IOBLOCKS_WRITE) && (This->Media->ReadOnly == TRUE)) {\r
- return EFI_WRITE_PROTECTED;\r
+ // The buffer size must be an exact multiple of the block size\r
+ if ((BufferSize % This->Media->BlockSize) != 0) {\r
+ return EFI_BAD_BUFFER_SIZE;\r
+ }\r
+\r
+ // Check the alignment\r
+ if ((This->Media->IoAlign > 2) && (((UINTN)Buffer & (This->Media->IoAlign - 1)) != 0)) {\r
+ return EFI_INVALID_PARAMETER;\r
}\r
\r
BytesRemainingToBeTransfered = BufferSize;\r