Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@14263
6f19259b-4bc3-4df7-8a09-
765794883524
/** @file NorFlashBlockIoDxe.c\r
\r
/** @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
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
{\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
\r
Instance = INSTANCE_FROM_BLKIO_THIS(This);\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
\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
- } else if( This->Media->MediaId != MediaId ) {\r
+ } else if (Media->MediaId != MediaId) {\r
Status = EFI_MEDIA_CHANGED;\r
Status = EFI_MEDIA_CHANGED;\r
+ } else if ((Media->IoAlign > 2) && (((UINTN)Buffer & (Media->IoAlign - 1)) != 0)) {\r
+ Status = EFI_INVALID_PARAMETER;\r
- Status = NorFlashReadBlocks (Instance,Lba,BufferSizeInBytes,Buffer);\r
+ Status = NorFlashReadBlocks (Instance, Lba, BufferSizeInBytes, Buffer);\r
/** @file NorFlashDxe.c\r
\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
\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
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
// 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
}\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
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
// 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
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