/** @file NorFlashBlockIoDxe.c\r
\r
- Copyright (c) 2011-2012, ARM Ltd. All rights reserved.<BR>\r
+ Copyright (c) 2011-2013, ARM Ltd. All rights reserved.<BR>\r
\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
{\r
NOR_FLASH_INSTANCE *Instance;\r
EFI_STATUS Status;\r
+ EFI_BLOCK_IO_MEDIA *Media;\r
+\r
+ if (This == NULL) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
\r
Instance = INSTANCE_FROM_BLKIO_THIS(This);\r
+ Media = This->Media;\r
\r
DEBUG ((DEBUG_BLKIO, "NorFlashBlockIoReadBlocks(MediaId=0x%x, Lba=%ld, BufferSize=0x%x bytes (%d kB), BufferPtr @ 0x%08x)\n", MediaId, Lba, BufferSizeInBytes, Buffer));\r
\r
- if( !This->Media->MediaPresent ) {\r
+ if (!Media) {\r
+ Status = EFI_INVALID_PARAMETER;\r
+ } else if (!Media->MediaPresent) {\r
Status = EFI_NO_MEDIA;\r
- } else if( This->Media->MediaId != MediaId ) {\r
+ } else if (Media->MediaId != MediaId) {\r
Status = EFI_MEDIA_CHANGED;\r
+ } else if ((Media->IoAlign > 2) && (((UINTN)Buffer & (Media->IoAlign - 1)) != 0)) {\r
+ Status = EFI_INVALID_PARAMETER;\r
} else {\r
- Status = NorFlashReadBlocks (Instance,Lba,BufferSizeInBytes,Buffer);\r
+ Status = NorFlashReadBlocks (Instance, Lba, BufferSizeInBytes, Buffer);\r
}\r
\r
return Status;\r
/** @file NorFlashDxe.c\r
\r
- Copyright (c) 2011-2012, ARM Ltd. All rights reserved.<BR>\r
+ Copyright (c) 2011-2013, ARM Ltd. All rights reserved.<BR>\r
\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
UINT32 NumBlocks;\r
UINTN StartAddress;\r
\r
+ DEBUG((DEBUG_BLKIO, "NorFlashReadBlocks: BufferSize=0x%xB BlockSize=0x%xB LastBlock=%ld, Lba=%ld.\n",\r
+ BufferSizeInBytes, Instance->Media.BlockSize, Instance->Media.LastBlock, Lba));\r
+\r
// The buffer must be valid\r
if (Buffer == NULL) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- // We must have some bytes to read\r
- DEBUG((DEBUG_BLKIO, "NorFlashReadBlocks: BufferSize=0x%x bytes.\n", BufferSizeInBytes));\r
- if(BufferSizeInBytes == 0) {\r
- return EFI_BAD_BUFFER_SIZE;\r
+ // Return if we have not any byte to read \r
+ if (BufferSizeInBytes == 0) {\r
+ return EFI_SUCCESS;\r
}\r
\r
// The size of the buffer must be a multiple of the block size\r
- DEBUG((DEBUG_BLKIO, "NorFlashReadBlocks: BlockSize=0x%x bytes.\n", Instance->Media.BlockSize));\r
if ((BufferSizeInBytes % Instance->Media.BlockSize) != 0) {\r
return EFI_BAD_BUFFER_SIZE;\r
}\r
// All blocks must be within the device\r
NumBlocks = ((UINT32)BufferSizeInBytes) / Instance->Media.BlockSize ;\r
\r
- DEBUG((DEBUG_BLKIO, "NorFlashReadBlocks: NumBlocks=%d, LastBlock=%ld, Lba=%ld\n", NumBlocks, Instance->Media.LastBlock, Lba));\r
-\r
if ((Lba + NumBlocks) > (Instance->Media.LastBlock + 1)) {\r
DEBUG((EFI_D_ERROR, "NorFlashReadBlocks: ERROR - Read will exceed last block\n"));\r
return EFI_INVALID_PARAMETER;\r