]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg/DiskIo: Introduced 'PcdDiskIoDataBufferBlockNum'
authorOlivier Martin <olivier.martin@arm.com>
Wed, 12 Feb 2014 11:37:57 +0000 (11:37 +0000)
committeroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 12 Feb 2014 11:37:57 +0000 (11:37 +0000)
PcdDiskIoDataBufferBlockNum replaced the hardcoded value into
the Disk I/O driver.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>
Reviewed-By: Tian, Feng <feng.tian@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15235 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/MdeModulePkg.dec
MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIo.c
MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIo.h
MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf

index a557466cd0ea1c32a16282c8919222e2e0571772..9084af7b84e4f83a97718fd7e51215b6b3494790 100644 (file)
   ## This PCD specifies whether full PCI enumeration is disabled.\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration|FALSE|BOOLEAN|0x10000048\r
 \r
   ## This PCD specifies whether full PCI enumeration is disabled.\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration|FALSE|BOOLEAN|0x10000048\r
 \r
+  ## Disk I/O - Number of Data Buffer block\r
+  # Define the size in block of the pre-allocated buffer. It provide better\r
+  # performance for large Disk I/O requests\r
+  gEfiMdeModulePkgTokenSpaceGuid.PcdDiskIoDataBufferBlockNum|64|UINT32|0x30001039\r
+\r
 [PcdsPatchableInModule]\r
   ## Specify  memory size with page number for PEI code when \r
   #  the feature of Loading Module at Fixed Address is enabled\r
 [PcdsPatchableInModule]\r
   ## Specify  memory size with page number for PEI code when \r
   #  the feature of Loading Module at Fixed Address is enabled\r
index eb3edeb53cfddc2783bc4ecaa935c6902477c2f8..0658299288afa6aad95d56d669f46a712c7513f7 100644 (file)
@@ -183,7 +183,7 @@ DiskIoDriverBindingStart (
   InitializeListHead (&Instance->TaskQueue);\r
   EfiInitializeLock (&Instance->TaskQueueLock, TPL_NOTIFY);\r
   Instance->SharedWorkingBuffer = AllocateAlignedPages (\r
   InitializeListHead (&Instance->TaskQueue);\r
   EfiInitializeLock (&Instance->TaskQueueLock, TPL_NOTIFY);\r
   Instance->SharedWorkingBuffer = AllocateAlignedPages (\r
-                                    EFI_SIZE_TO_PAGES (DATA_BUFFER_BLOCK_NUM * Instance->BlockIo->Media->BlockSize),\r
+                                    EFI_SIZE_TO_PAGES (PcdGet32 (PcdDiskIoDataBufferBlockNum) * Instance->BlockIo->Media->BlockSize),\r
                                     Instance->BlockIo->Media->IoAlign\r
                                     );\r
   if (Instance->SharedWorkingBuffer == NULL) {\r
                                     Instance->BlockIo->Media->IoAlign\r
                                     );\r
   if (Instance->SharedWorkingBuffer == NULL) {\r
@@ -214,7 +214,7 @@ ErrorExit:
     if (Instance != NULL && Instance->SharedWorkingBuffer != NULL) {\r
       FreeAlignedPages (\r
         Instance->SharedWorkingBuffer,\r
     if (Instance != NULL && Instance->SharedWorkingBuffer != NULL) {\r
       FreeAlignedPages (\r
         Instance->SharedWorkingBuffer,\r
-        EFI_SIZE_TO_PAGES (DATA_BUFFER_BLOCK_NUM * Instance->BlockIo->Media->BlockSize)\r
+        EFI_SIZE_TO_PAGES (PcdGet32 (PcdDiskIoDataBufferBlockNum) * Instance->BlockIo->Media->BlockSize)\r
         );\r
     }\r
 \r
         );\r
     }\r
 \r
@@ -324,7 +324,7 @@ DiskIoDriverBindingStop (
 \r
     FreeAlignedPages (\r
       Instance->SharedWorkingBuffer,\r
 \r
     FreeAlignedPages (\r
       Instance->SharedWorkingBuffer,\r
-      EFI_SIZE_TO_PAGES (DATA_BUFFER_BLOCK_NUM * Instance->BlockIo->Media->BlockSize)\r
+      EFI_SIZE_TO_PAGES (PcdGet32 (PcdDiskIoDataBufferBlockNum) * Instance->BlockIo->Media->BlockSize)\r
       );\r
 \r
     Status = gBS->CloseProtocol (\r
       );\r
 \r
     Status = gBS->CloseProtocol (\r
@@ -655,8 +655,8 @@ DiskIoCreateSubtaskList (
         // Use the allocated buffer instead of the original buffer\r
         // to avoid alignment issue.\r
         //\r
         // Use the allocated buffer instead of the original buffer\r
         // to avoid alignment issue.\r
         //\r
-        for (; Lba < OverRunLba; Lba += DATA_BUFFER_BLOCK_NUM) {\r
-          DataBufferSize = MIN (BufferSize, DATA_BUFFER_BLOCK_NUM * BlockSize);\r
+        for (; Lba < OverRunLba; Lba += PcdGet32 (PcdDiskIoDataBufferBlockNum)) {\r
+          DataBufferSize = MIN (BufferSize, PcdGet32 (PcdDiskIoDataBufferBlockNum) * BlockSize);\r
 \r
           Subtask = DiskIoCreateSubtask (Write, Lba, 0, DataBufferSize, SharedWorkingBuffer, BufferPtr, Blocking);\r
           if (Subtask == NULL) {\r
 \r
           Subtask = DiskIoCreateSubtask (Write, Lba, 0, DataBufferSize, SharedWorkingBuffer, BufferPtr, Blocking);\r
           if (Subtask == NULL) {\r
index a08d4df799d33f4eae41ddab06d2c758febfe820..5e89684f66975ee6a7424f56cc3ec49f16bff3e3 100644 (file)
@@ -30,13 +30,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include <Library/MemoryAllocationLib.h>\r
 #include <Library/UefiBootServicesTableLib.h>\r
 \r
 #include <Library/MemoryAllocationLib.h>\r
 #include <Library/UefiBootServicesTableLib.h>\r
 \r
-//\r
-// Pre-allocate an aligned buffer of 64 blocks so very large Disk I/O requests\r
-// will be broken up into 64 * BlockSize chunks to provide better performance\r
-// than allocating an aligned 1 block buffer.\r
-//\r
-#define DATA_BUFFER_BLOCK_NUM             64\r
-\r
 #define DISK_IO_PRIVATE_DATA_SIGNATURE  SIGNATURE_32 ('d', 's', 'k', 'I')\r
 typedef struct {\r
   UINT32                          Signature;\r
 #define DISK_IO_PRIVATE_DATA_SIGNATURE  SIGNATURE_32 ('d', 's', 'k', 'I')\r
 typedef struct {\r
   UINT32                          Signature;\r
index 8cf2595dfaba19442c11daa0169468c3086dbf94..ec1f75f95441b2c25cd427f908c79cff1cf00ed9 100644 (file)
@@ -45,7 +45,7 @@
 \r
 [Packages]\r
   MdePkg/MdePkg.dec\r
 \r
 [Packages]\r
   MdePkg/MdePkg.dec\r
-\r
+  MdeModulePkg/MdeModulePkg.dec\r
 \r
 [LibraryClasses]\r
   UefiBootServicesTableLib\r
 \r
 [LibraryClasses]\r
   UefiBootServicesTableLib\r
@@ -55,7 +55,7 @@
   UefiLib\r
   UefiDriverEntryPoint\r
   DebugLib\r
   UefiLib\r
   UefiDriverEntryPoint\r
   DebugLib\r
-\r
+  PcdLib\r
 \r
 [Protocols]\r
   gEfiDiskIoProtocolGuid                        ## BY_START\r
 \r
 [Protocols]\r
   gEfiDiskIoProtocolGuid                        ## BY_START\r
@@ -63,3 +63,5 @@
   gEfiBlockIoProtocolGuid                       ## TO_START\r
   gEfiBlockIo2ProtocolGuid                      ## TO_START\r
 \r
   gEfiBlockIoProtocolGuid                       ## TO_START\r
   gEfiBlockIo2ProtocolGuid                      ## TO_START\r
 \r
+[Pcd]\r
+  gEfiMdeModulePkgTokenSpaceGuid.PcdDiskIoDataBufferBlockNum\r