summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaszlo Ersek <lersek@redhat.com>2015-01-02 12:08:15 +0000
committerlersek <lersek@Edk2>2015-01-02 12:08:15 +0000
commitca0d7c98f249ab686b96c72fc88bc9b665aeb4ef (patch)
tree1a65d4e80b70903b83d81e70612fb8d2791919ff
parent73bb8e6895080f07ece26b0db0f50048713c2b93 (diff)
downloadedk2-platforms-ca0d7c98f249ab686b96c72fc88bc9b665aeb4ef.tar.xz
OvmfPkg: QemuBootOrderLib: widen ParseUnitAddressHexList() to UINT64
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
-rw-r--r--OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c30
1 files changed, 15 insertions, 15 deletions
diff --git a/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c b/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c
index 174fd1f554..3599437998 100644
--- a/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c
+++ b/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c
@@ -128,7 +128,7 @@ SubstringEq (
/**
Parse a comma-separated list of hexadecimal integers into the elements of an
- UINT32 array.
+ UINT64 array.
Whitespace, "0x" prefixes, leading or trailing commas, sequences of commas,
or an empty string are not allowed; they are rejected.
@@ -168,12 +168,12 @@ STATIC
RETURN_STATUS
ParseUnitAddressHexList (
IN SUBSTRING UnitAddress,
- OUT UINT32 *Result,
+ OUT UINT64 *Result,
IN OUT UINTN *NumResults
)
{
UINTN Entry; // number of entry currently being parsed
- UINT32 EntryVal; // value being constructed for current entry
+ UINT64 EntryVal; // value being constructed for current entry
CHAR8 PrevChr; // UnitAddress character previously checked
UINTN Pos; // current position within UnitAddress
RETURN_STATUS Status;
@@ -193,10 +193,10 @@ ParseUnitAddressHexList (
-1;
if (Val >= 0) {
- if (EntryVal > 0xFFFFFFF) {
+ if (EntryVal > 0xFFFFFFFFFFFFFFFull) {
return RETURN_INVALID_PARAMETER;
}
- EntryVal = (EntryVal << 4) | Val;
+ EntryVal = LShiftU64 (EntryVal, 4) | Val;
} else if (Chr == ',') {
if (PrevChr == ',') {
return RETURN_INVALID_PARAMETER;
@@ -578,7 +578,7 @@ TranslatePciOfwNodes (
IN OUT UINTN *TranslatedSize
)
{
- UINT32 PciDevFun[2];
+ UINT64 PciDevFun[2];
UINTN NumEntries;
UINTN Written;
@@ -622,8 +622,8 @@ TranslatePciOfwNodes (
// ^
// fixed LUN
//
- UINT32 Secondary;
- UINT32 Slave;
+ UINT64 Secondary;
+ UINT64 Slave;
NumEntries = 1;
if (ParseUnitAddressHexList (
@@ -645,7 +645,7 @@ TranslatePciOfwNodes (
Written = UnicodeSPrintAsciiFormat (
Translated,
*TranslatedSize * sizeof (*Translated), // BufferSize in bytes
- "PciRoot(0x0)/Pci(0x%x,0x%x)/Ata(%a,%a,0x0)",
+ "PciRoot(0x0)/Pci(0x%Lx,0x%Lx)/Ata(%a,%a,0x0)",
PciDevFun[0],
PciDevFun[1],
Secondary ? "Secondary" : "Primary",
@@ -672,7 +672,7 @@ TranslatePciOfwNodes (
// ^
// ACPI UID
//
- UINT32 AcpiUid;
+ UINT64 AcpiUid;
NumEntries = 1;
if (ParseUnitAddressHexList (
@@ -688,7 +688,7 @@ TranslatePciOfwNodes (
Written = UnicodeSPrintAsciiFormat (
Translated,
*TranslatedSize * sizeof (*Translated), // BufferSize in bytes
- "PciRoot(0x0)/Pci(0x%x,0x%x)/Floppy(0x%x)",
+ "PciRoot(0x0)/Pci(0x%Lx,0x%Lx)/Floppy(0x%Lx)",
PciDevFun[0],
PciDevFun[1],
AcpiUid
@@ -715,7 +715,7 @@ TranslatePciOfwNodes (
Written = UnicodeSPrintAsciiFormat (
Translated,
*TranslatedSize * sizeof (*Translated), // BufferSize in bytes
- "PciRoot(0x0)/Pci(0x%x,0x%x)/HD(",
+ "PciRoot(0x0)/Pci(0x%Lx,0x%Lx)/HD(",
PciDevFun[0],
PciDevFun[1]
);
@@ -742,7 +742,7 @@ TranslatePciOfwNodes (
// PciRoot(0x0)/Pci(0x7,0x3)/Scsi(0x2,0x3)
// -- if PCI function is present and nonzero
//
- UINT32 TargetLun[2];
+ UINT64 TargetLun[2];
TargetLun[1] = 0;
NumEntries = sizeof (TargetLun) / sizeof (TargetLun[0]);
@@ -758,7 +758,7 @@ TranslatePciOfwNodes (
Written = UnicodeSPrintAsciiFormat (
Translated,
*TranslatedSize * sizeof (*Translated), // BufferSize in bytes
- "PciRoot(0x0)/Pci(0x%x,0x%x)/Scsi(0x%x,0x%x)",
+ "PciRoot(0x0)/Pci(0x%Lx,0x%Lx)/Scsi(0x%Lx,0x%Lx)",
PciDevFun[0],
PciDevFun[1],
TargetLun[0],
@@ -781,7 +781,7 @@ TranslatePciOfwNodes (
Written = UnicodeSPrintAsciiFormat (
Translated,
*TranslatedSize * sizeof (*Translated), // BufferSize in bytes
- "PciRoot(0x0)/Pci(0x%x,0x%x)",
+ "PciRoot(0x0)/Pci(0x%Lx,0x%Lx)",
PciDevFun[0],
PciDevFun[1]
);