]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmPlatformPkg/NorFlashDxe: Make the driver more compliant with the UEFI specification
authoroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Sun, 14 Apr 2013 09:25:34 +0000 (09:25 +0000)
committeroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Sun, 14 Apr 2013 09:25:34 +0000 (09:25 +0000)
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

ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashBlockIoDxe.c
ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe.c

index 21fceac1dc79979cce7ee0e4f1174b97caeec9f7..279b77c75ee18e664df3195494edb559e53fc0b6 100644 (file)
@@ -1,6 +1,6 @@
 /** @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
@@ -51,17 +51,27 @@ NorFlashBlockIoReadBlocks (
 {\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
index a9c589b744c56363332dc32476b0c575d0817ce3..7953b6c9f563441a27b38a0f9049f29b0dae7d6b 100644 (file)
@@ -1,6 +1,6 @@
 /** @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
@@ -721,19 +721,20 @@ NorFlashReadBlocks (
   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
@@ -741,8 +742,6 @@ NorFlashReadBlocks (
   // 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