]> git.proxmox.com Git - mirror_edk2.git/commitdiff
OvmfPkg: QemuBootOrderLib: widen ParseUnitAddressHexList() to UINT64
authorLaszlo Ersek <lersek@redhat.com>
Fri, 2 Jan 2015 12:08:15 +0000 (12:08 +0000)
committerlersek <lersek@Edk2>
Fri, 2 Jan 2015 12:08:15 +0000 (12:08 +0000)
The OpenFirmware device path nodes that QEMU generates for virtio-mmio
transports contain 64-bit hexadecimal values (16 nibbles) -- the base
addresses of the register blocks. In order to parse them soon,
ParseUnitAddressHexList() must parse UINT64 values.

Call sites need to be adapted, as expected.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Acked-by: Jordan Justen <jordan.l.justen@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16574 6f19259b-4bc3-4df7-8a09-765794883524

OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c

index 174fd1f5541191c294f5ac18e2d71003d841adcf..3599437998a3a7700111a63281159d9a5ccd997e 100644 (file)
@@ -128,7 +128,7 @@ SubstringEq (
 /**\r
 \r
   Parse a comma-separated list of hexadecimal integers into the elements of an\r
-  UINT32 array.\r
+  UINT64 array.\r
 \r
   Whitespace, "0x" prefixes, leading or trailing commas, sequences of commas,\r
   or an empty string are not allowed; they are rejected.\r
@@ -168,12 +168,12 @@ STATIC
 RETURN_STATUS\r
 ParseUnitAddressHexList (\r
   IN      SUBSTRING  UnitAddress,\r
-  OUT     UINT32     *Result,\r
+  OUT     UINT64     *Result,\r
   IN OUT  UINTN      *NumResults\r
   )\r
 {\r
   UINTN         Entry;    // number of entry currently being parsed\r
-  UINT32        EntryVal; // value being constructed for current entry\r
+  UINT64        EntryVal; // value being constructed for current entry\r
   CHAR8         PrevChr;  // UnitAddress character previously checked\r
   UINTN         Pos;      // current position within UnitAddress\r
   RETURN_STATUS Status;\r
@@ -193,10 +193,10 @@ ParseUnitAddressHexList (
           -1;\r
 \r
     if (Val >= 0) {\r
-      if (EntryVal > 0xFFFFFFF) {\r
+      if (EntryVal > 0xFFFFFFFFFFFFFFFull) {\r
         return RETURN_INVALID_PARAMETER;\r
       }\r
-      EntryVal = (EntryVal << 4) | Val;\r
+      EntryVal = LShiftU64 (EntryVal, 4) | Val;\r
     } else if (Chr == ',') {\r
       if (PrevChr == ',') {\r
         return RETURN_INVALID_PARAMETER;\r
@@ -578,7 +578,7 @@ TranslatePciOfwNodes (
   IN OUT  UINTN          *TranslatedSize\r
   )\r
 {\r
-  UINT32 PciDevFun[2];\r
+  UINT64 PciDevFun[2];\r
   UINTN  NumEntries;\r
   UINTN  Written;\r
 \r
@@ -622,8 +622,8 @@ TranslatePciOfwNodes (
     //                                                ^\r
     //                                                fixed LUN\r
     //\r
-    UINT32 Secondary;\r
-    UINT32 Slave;\r
+    UINT64 Secondary;\r
+    UINT64 Slave;\r
 \r
     NumEntries = 1;\r
     if (ParseUnitAddressHexList (\r
@@ -645,7 +645,7 @@ TranslatePciOfwNodes (
     Written = UnicodeSPrintAsciiFormat (\r
       Translated,\r
       *TranslatedSize * sizeof (*Translated), // BufferSize in bytes\r
-      "PciRoot(0x0)/Pci(0x%x,0x%x)/Ata(%a,%a,0x0)",\r
+      "PciRoot(0x0)/Pci(0x%Lx,0x%Lx)/Ata(%a,%a,0x0)",\r
       PciDevFun[0],\r
       PciDevFun[1],\r
       Secondary ? "Secondary" : "Primary",\r
@@ -672,7 +672,7 @@ TranslatePciOfwNodes (
     //                                    ^\r
     //                                    ACPI UID\r
     //\r
-    UINT32 AcpiUid;\r
+    UINT64 AcpiUid;\r
 \r
     NumEntries = 1;\r
     if (ParseUnitAddressHexList (\r
@@ -688,7 +688,7 @@ TranslatePciOfwNodes (
     Written = UnicodeSPrintAsciiFormat (\r
       Translated,\r
       *TranslatedSize * sizeof (*Translated), // BufferSize in bytes\r
-      "PciRoot(0x0)/Pci(0x%x,0x%x)/Floppy(0x%x)",\r
+      "PciRoot(0x0)/Pci(0x%Lx,0x%Lx)/Floppy(0x%Lx)",\r
       PciDevFun[0],\r
       PciDevFun[1],\r
       AcpiUid\r
@@ -715,7 +715,7 @@ TranslatePciOfwNodes (
     Written = UnicodeSPrintAsciiFormat (\r
       Translated,\r
       *TranslatedSize * sizeof (*Translated), // BufferSize in bytes\r
-      "PciRoot(0x0)/Pci(0x%x,0x%x)/HD(",\r
+      "PciRoot(0x0)/Pci(0x%Lx,0x%Lx)/HD(",\r
       PciDevFun[0],\r
       PciDevFun[1]\r
       );\r
@@ -742,7 +742,7 @@ TranslatePciOfwNodes (
     //   PciRoot(0x0)/Pci(0x7,0x3)/Scsi(0x2,0x3)\r
     //                                -- if PCI function is present and nonzero\r
     //\r
-    UINT32 TargetLun[2];\r
+    UINT64 TargetLun[2];\r
 \r
     TargetLun[1] = 0;\r
     NumEntries = sizeof (TargetLun) / sizeof (TargetLun[0]);\r
@@ -758,7 +758,7 @@ TranslatePciOfwNodes (
     Written = UnicodeSPrintAsciiFormat (\r
       Translated,\r
       *TranslatedSize * sizeof (*Translated), // BufferSize in bytes\r
-      "PciRoot(0x0)/Pci(0x%x,0x%x)/Scsi(0x%x,0x%x)",\r
+      "PciRoot(0x0)/Pci(0x%Lx,0x%Lx)/Scsi(0x%Lx,0x%Lx)",\r
       PciDevFun[0],\r
       PciDevFun[1],\r
       TargetLun[0],\r
@@ -781,7 +781,7 @@ TranslatePciOfwNodes (
     Written = UnicodeSPrintAsciiFormat (\r
       Translated,\r
       *TranslatedSize * sizeof (*Translated), // BufferSize in bytes\r
-      "PciRoot(0x0)/Pci(0x%x,0x%x)",\r
+      "PciRoot(0x0)/Pci(0x%Lx,0x%Lx)",\r
       PciDevFun[0],\r
       PciDevFun[1]\r
       );\r