]> git.proxmox.com Git - mirror_edk2.git/commitdiff
PciLib:
authorqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 6 Jul 2006 10:37:49 +0000 (10:37 +0000)
committerqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 6 Jul 2006 10:37:49 +0000 (10:37 +0000)
For PciRead/WriteBuffer(): A fix to handle boundary cases when Size is 0;
DevicePathLib:
For FileDevicePath(): Change to use AppendDevicePath () in place of AppendDevicePathNode().
PrintLib:
For type %p, according to current MWG, it should ignore flag 0, +, space, l, & L
Misc:
Fix a bug in EBC interpreter for Ia32.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@796 6f19259b-4bc3-4df7-8a09-765794883524

EdkModulePkg/Universal/Ebc/Dxe/Ia32/Ia32Math.asm
MdePkg/Library/BasePciCf8Lib/PciLib.c
MdePkg/Library/BasePciExpressLib/PciLib.c
MdePkg/Library/BasePrintLib/PrintLib.c
MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.c
MdePkg/Library/UefiDevicePathLibDevicePathProtocol/UefiDevicePathLib.c

index 4c91a2730b1995794d47d73f1cf8353a53525b03..1d0bd2f2e608c2250a3a31b655232a5693c93bd4 100644 (file)
@@ -134,8 +134,8 @@ _RightShiftU64_Calc:
   mov    eax, dword ptr Operand[0]\r
   mov    edx, dword ptr Operand[4]\r
   \r
   mov    eax, dword ptr Operand[0]\r
   mov    edx, dword ptr Operand[4]\r
   \r
-  shrd   edx, eax, cl\r
-  shr    eax, cl\r
+  shrd   eax, edx, cl\r
+  shr    edx, cl\r
   cmp    ecx, 32\r
   jc     short _RightShiftU64_Done\r
   \r
   cmp    ecx, 32\r
   jc     short _RightShiftU64_Done\r
   \r
index a3897bfaa4314941fd7bdba099b1d8dd2718b5c5..9421d8b99d3cb4ba942e8153491d08901e33265e 100644 (file)
@@ -1299,11 +1299,16 @@ PciCf8ReadBuffer (
 \r
   ASSERT_INVALID_PCI_ADDRESS (StartAddress, 0);\r
   ASSERT (((StartAddress & 0xFFF) + Size) <= 0x100);\r
 \r
   ASSERT_INVALID_PCI_ADDRESS (StartAddress, 0);\r
   ASSERT (((StartAddress & 0xFFF) + Size) <= 0x100);\r
-  ASSERT ((Buffer != NULL) || (Size == 0));\r
+\r
+  if (Size == 0) {\r
+    return 0;\r
+  }\r
+\r
+  ASSERT (Buffer != NULL);\r
 \r
   EndAddress = StartAddress + Size;\r
 \r
 \r
   EndAddress = StartAddress + Size;\r
 \r
-  if ((StartAddress < EndAddress) && ((StartAddress & 1) != 0)) {\r
+  if ((StartAddress & 1) != 0) {\r
     //\r
     // Read a byte if StartAddress is byte aligned\r
     //\r
     //\r
     // Read a byte if StartAddress is byte aligned\r
     //\r
@@ -1386,11 +1391,16 @@ PciCf8WriteBuffer (
 \r
   ASSERT_INVALID_PCI_ADDRESS (StartAddress, 0);\r
   ASSERT (((StartAddress & 0xFFF) + Size) <= 0x100);\r
 \r
   ASSERT_INVALID_PCI_ADDRESS (StartAddress, 0);\r
   ASSERT (((StartAddress & 0xFFF) + Size) <= 0x100);\r
-  ASSERT ((Buffer != NULL) || (Size == 0));\r
+\r
+  if (Size == 0) {\r
+    return 0;\r
+  }\r
+\r
+  ASSERT (Buffer != 0);\r
 \r
   EndAddress = StartAddress + Size;\r
 \r
 \r
   EndAddress = StartAddress + Size;\r
 \r
-  if ((StartAddress < EndAddress) && ((StartAddress & 1)!= 0)) {\r
+  if ((StartAddress & 1)!= 0) {\r
     //\r
     // Write a byte if StartAddress is byte aligned\r
     //\r
     //\r
     // Write a byte if StartAddress is byte aligned\r
     //\r
index 036994aa7b95f04660573bbe6e1bccb78867dac0..acd31034835f90d56efc381afbb92889a3766c0f 100644 (file)
@@ -1196,11 +1196,16 @@ PciExpressReadBuffer (
 \r
   ASSERT_INVALID_PCI_ADDRESS (StartAddress);\r
   ASSERT (((StartAddress & 0xFFF) + Size) <= 0x1000);\r
 \r
   ASSERT_INVALID_PCI_ADDRESS (StartAddress);\r
   ASSERT (((StartAddress & 0xFFF) + Size) <= 0x1000);\r
-  ASSERT ((Buffer != NULL) || (Size == 0));\r
+\r
+  if (Size == 0) {\r
+    return 0;\r
+  }\r
+\r
+  ASSERT (Buffer != NULL);\r
 \r
   EndAddress = StartAddress + Size;\r
 \r
 \r
   EndAddress = StartAddress + Size;\r
 \r
-  if ((StartAddress < EndAddress) && ((StartAddress & 1) != 0)) {\r
+  if ((StartAddress & 1) != 0) {\r
     //\r
     // Read a byte if StartAddress is byte aligned\r
     //\r
     //\r
     // Read a byte if StartAddress is byte aligned\r
     //\r
@@ -1282,11 +1287,16 @@ PciExpressWriteBuffer (
 \r
   ASSERT_INVALID_PCI_ADDRESS (StartAddress);\r
   ASSERT (((StartAddress & 0xFFF) + Size) <= 0x1000);\r
 \r
   ASSERT_INVALID_PCI_ADDRESS (StartAddress);\r
   ASSERT (((StartAddress & 0xFFF) + Size) <= 0x1000);\r
-  ASSERT ((Buffer != NULL) || (Size == 0));\r
+\r
+  if (Size == 0) {\r
+    return 0;\r
+  }\r
+\r
+  ASSERT (Buffer != NULL);\r
 \r
   EndAddress = StartAddress + Size;\r
 \r
 \r
   EndAddress = StartAddress + Size;\r
 \r
-  if ((StartAddress < EndAddress) && ((StartAddress & 1) != 0)) {\r
+  if ((StartAddress & 1) != 0) {\r
     //\r
     // Write a byte if StartAddress is byte aligned\r
     //\r
     //\r
     // Write a byte if StartAddress is byte aligned\r
     //\r
index d33f49d3882aa32f08541cd361e2176ef162e6cc..33da6cb6b07795e7f56ec7a56d0a868b2c495c61 100644 (file)
@@ -236,7 +236,7 @@ BasePrintLibVSPrint (
           Format   -= BytesPerFormatCharacter;\r
           Precision = 0;\r
           //\r
           Format   -= BytesPerFormatCharacter;\r
           Precision = 0;\r
           //\r
-          // break skiped on purpose.\r
+          // break skipped on purpose.\r
           //\r
         default:\r
           Done = TRUE;\r
           //\r
         default:\r
           Done = TRUE;\r
@@ -256,18 +256,22 @@ BasePrintLibVSPrint (
       //\r
       switch (FormatCharacter) {\r
       case 'p':\r
       //\r
       switch (FormatCharacter) {\r
       case 'p':\r
+        //\r
+        // Flag space, +, 0, L & l are invalid for type p.\r
+        //\r
+        Flags &= ~(PREFIX_BLANK | PREFIX_SIGN | PREFIX_ZERO | LONG_TYPE);\r
         if (sizeof (VOID *) > 4) {\r
           Flags |= LONG_TYPE;\r
         }\r
       case 'X':\r
         Flags |= PREFIX_ZERO;\r
         //\r
         if (sizeof (VOID *) > 4) {\r
           Flags |= LONG_TYPE;\r
         }\r
       case 'X':\r
         Flags |= PREFIX_ZERO;\r
         //\r
-        // break skiped on purpose\r
+        // break skipped on purpose\r
         //\r
       case 'x':\r
         Flags |= RADIX_HEX;\r
         //\r
         //\r
       case 'x':\r
         Flags |= RADIX_HEX;\r
         //\r
-        // break skiped on purpose\r
+        // break skipped on purpose\r
         //\r
       case 'd':\r
         if ((Flags & LONG_TYPE) == 0) {\r
         //\r
       case 'd':\r
         if ((Flags & LONG_TYPE) == 0) {\r
index 31a0462f079beaffd47e9a8ed8fac8572b9da1e9..e05736bbb7bebff8afbf10321f609b3ebed7540a 100644 (file)
@@ -496,24 +496,26 @@ FileDevicePath (
   UINTN                     Size;\r
   FILEPATH_DEVICE_PATH      *FilePath;\r
   EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
   UINTN                     Size;\r
   FILEPATH_DEVICE_PATH      *FilePath;\r
   EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *FileDevicePathNode;\r
+  EFI_DEVICE_PATH_PROTOCOL  *FileDevicePath;\r
 \r
   DevicePath = NULL;\r
 \r
   Size = StrSize (FileName);\r
 \r
   DevicePath = NULL;\r
 \r
   Size = StrSize (FileName);\r
-  FileDevicePathNode = CreateDeviceNode (\r
-                         MEDIA_DEVICE_PATH,\r
-                         MEDIA_FILEPATH_DP,\r
-                         (UINT16) (Size + SIZE_OF_FILEPATH_DEVICE_PATH)\r
-                         );\r
-  if (FileDevicePathNode != NULL) {\r
-    FilePath = (FILEPATH_DEVICE_PATH *) FileDevicePathNode;\r
+  FileDevicePath = AllocatePool (Size + SIZE_OF_FILEPATH_DEVICE_PATH + EFI_END_DEVICE_PATH_LENGTH);\r
+  if (FileDevicePath != NULL) {\r
+    FilePath = (FILEPATH_DEVICE_PATH *) FileDevicePath;\r
+    FilePath->Header.Type    = MEDIA_DEVICE_PATH;\r
+    FilePath->Header.SubType = MEDIA_FILEPATH_DP;\r
     CopyMem (&FilePath->PathName, FileName, Size);\r
     CopyMem (&FilePath->PathName, FileName, Size);\r
+    SetDevicePathNodeLength (&FilePath->Header, Size + SIZE_OF_FILEPATH_DEVICE_PATH);\r
+    SetDevicePathEndNode (NextDevicePathNode (&FilePath->Header));\r
+\r
     if (Device != NULL) {\r
       DevicePath = DevicePathFromHandle (Device);\r
     }\r
     if (Device != NULL) {\r
       DevicePath = DevicePathFromHandle (Device);\r
     }\r
-    DevicePath = AppendDevicePathNode (DevicePath, FileDevicePathNode);\r
-    FreePool (FileDevicePathNode);\r
+\r
+    DevicePath = AppendDevicePath (DevicePath, FileDevicePath);\r
+    FreePool (FileDevicePath);\r
   }\r
 \r
   return DevicePath;\r
   }\r
 \r
   return DevicePath;\r
index ec4325cf3934f7287d08cc405c1ec9f1959fc0dd..ec9b4aa3213b816b2e970ff1c8002ff99c060291 100644 (file)
@@ -321,24 +321,26 @@ FileDevicePath (
   UINTN                     Size;\r
   FILEPATH_DEVICE_PATH      *FilePath;\r
   EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
   UINTN                     Size;\r
   FILEPATH_DEVICE_PATH      *FilePath;\r
   EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL  *FileDevicePathNode;\r
+  EFI_DEVICE_PATH_PROTOCOL  *FileDevicePath;\r
 \r
   DevicePath = NULL;\r
 \r
   Size = StrSize (FileName);\r
 \r
   DevicePath = NULL;\r
 \r
   Size = StrSize (FileName);\r
-  FileDevicePathNode = CreateDeviceNode (\r
-                         MEDIA_DEVICE_PATH,\r
-                         MEDIA_FILEPATH_DP,\r
-                         (UINT16) (Size + SIZE_OF_FILEPATH_DEVICE_PATH)\r
-                         );\r
-  if (FileDevicePathNode != NULL) {\r
-    FilePath = (FILEPATH_DEVICE_PATH *) FileDevicePathNode;\r
+  FileDevicePath = AllocatePool (Size + SIZE_OF_FILEPATH_DEVICE_PATH + EFI_END_DEVICE_PATH_LENGTH);\r
+  if (FileDevicePath != NULL) {\r
+    FilePath = (FILEPATH_DEVICE_PATH *) FileDevicePath;\r
+    FilePath->Header.Type    = MEDIA_DEVICE_PATH;\r
+    FilePath->Header.SubType = MEDIA_FILEPATH_DP;\r
     CopyMem (&FilePath->PathName, FileName, Size);\r
     CopyMem (&FilePath->PathName, FileName, Size);\r
+    SetDevicePathNodeLength (&FilePath->Header, Size + SIZE_OF_FILEPATH_DEVICE_PATH);\r
+    SetDevicePathEndNode (NextDevicePathNode (&FilePath->Header));\r
+\r
     if (Device != NULL) {\r
       DevicePath = DevicePathFromHandle (Device);\r
     }\r
     if (Device != NULL) {\r
       DevicePath = DevicePathFromHandle (Device);\r
     }\r
-    DevicePath = AppendDevicePathNode (DevicePath, FileDevicePathNode);\r
-    FreePool (FileDevicePathNode);\r
+\r
+    DevicePath = AppendDevicePath (DevicePath, FileDevicePath);\r
+    FreePool (FileDevicePath);\r
   }\r
 \r
   return DevicePath;\r
   }\r
 \r
   return DevicePath;\r