mirror of https://github.com/acidanthera/audk.git
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
This commit is contained in:
parent
73bb8e6895
commit
ca0d7c98f2
|
@ -128,7 +128,7 @@ SubstringEq (
|
||||||
/**
|
/**
|
||||||
|
|
||||||
Parse a comma-separated list of hexadecimal integers into the elements of an
|
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,
|
Whitespace, "0x" prefixes, leading or trailing commas, sequences of commas,
|
||||||
or an empty string are not allowed; they are rejected.
|
or an empty string are not allowed; they are rejected.
|
||||||
|
@ -168,12 +168,12 @@ STATIC
|
||||||
RETURN_STATUS
|
RETURN_STATUS
|
||||||
ParseUnitAddressHexList (
|
ParseUnitAddressHexList (
|
||||||
IN SUBSTRING UnitAddress,
|
IN SUBSTRING UnitAddress,
|
||||||
OUT UINT32 *Result,
|
OUT UINT64 *Result,
|
||||||
IN OUT UINTN *NumResults
|
IN OUT UINTN *NumResults
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINTN Entry; // number of entry currently being parsed
|
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
|
CHAR8 PrevChr; // UnitAddress character previously checked
|
||||||
UINTN Pos; // current position within UnitAddress
|
UINTN Pos; // current position within UnitAddress
|
||||||
RETURN_STATUS Status;
|
RETURN_STATUS Status;
|
||||||
|
@ -193,10 +193,10 @@ ParseUnitAddressHexList (
|
||||||
-1;
|
-1;
|
||||||
|
|
||||||
if (Val >= 0) {
|
if (Val >= 0) {
|
||||||
if (EntryVal > 0xFFFFFFF) {
|
if (EntryVal > 0xFFFFFFFFFFFFFFFull) {
|
||||||
return RETURN_INVALID_PARAMETER;
|
return RETURN_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
EntryVal = (EntryVal << 4) | Val;
|
EntryVal = LShiftU64 (EntryVal, 4) | Val;
|
||||||
} else if (Chr == ',') {
|
} else if (Chr == ',') {
|
||||||
if (PrevChr == ',') {
|
if (PrevChr == ',') {
|
||||||
return RETURN_INVALID_PARAMETER;
|
return RETURN_INVALID_PARAMETER;
|
||||||
|
@ -578,7 +578,7 @@ TranslatePciOfwNodes (
|
||||||
IN OUT UINTN *TranslatedSize
|
IN OUT UINTN *TranslatedSize
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 PciDevFun[2];
|
UINT64 PciDevFun[2];
|
||||||
UINTN NumEntries;
|
UINTN NumEntries;
|
||||||
UINTN Written;
|
UINTN Written;
|
||||||
|
|
||||||
|
@ -622,8 +622,8 @@ TranslatePciOfwNodes (
|
||||||
// ^
|
// ^
|
||||||
// fixed LUN
|
// fixed LUN
|
||||||
//
|
//
|
||||||
UINT32 Secondary;
|
UINT64 Secondary;
|
||||||
UINT32 Slave;
|
UINT64 Slave;
|
||||||
|
|
||||||
NumEntries = 1;
|
NumEntries = 1;
|
||||||
if (ParseUnitAddressHexList (
|
if (ParseUnitAddressHexList (
|
||||||
|
@ -645,7 +645,7 @@ TranslatePciOfwNodes (
|
||||||
Written = UnicodeSPrintAsciiFormat (
|
Written = UnicodeSPrintAsciiFormat (
|
||||||
Translated,
|
Translated,
|
||||||
*TranslatedSize * sizeof (*Translated), // BufferSize in bytes
|
*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[0],
|
||||||
PciDevFun[1],
|
PciDevFun[1],
|
||||||
Secondary ? "Secondary" : "Primary",
|
Secondary ? "Secondary" : "Primary",
|
||||||
|
@ -672,7 +672,7 @@ TranslatePciOfwNodes (
|
||||||
// ^
|
// ^
|
||||||
// ACPI UID
|
// ACPI UID
|
||||||
//
|
//
|
||||||
UINT32 AcpiUid;
|
UINT64 AcpiUid;
|
||||||
|
|
||||||
NumEntries = 1;
|
NumEntries = 1;
|
||||||
if (ParseUnitAddressHexList (
|
if (ParseUnitAddressHexList (
|
||||||
|
@ -688,7 +688,7 @@ TranslatePciOfwNodes (
|
||||||
Written = UnicodeSPrintAsciiFormat (
|
Written = UnicodeSPrintAsciiFormat (
|
||||||
Translated,
|
Translated,
|
||||||
*TranslatedSize * sizeof (*Translated), // BufferSize in bytes
|
*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[0],
|
||||||
PciDevFun[1],
|
PciDevFun[1],
|
||||||
AcpiUid
|
AcpiUid
|
||||||
|
@ -715,7 +715,7 @@ TranslatePciOfwNodes (
|
||||||
Written = UnicodeSPrintAsciiFormat (
|
Written = UnicodeSPrintAsciiFormat (
|
||||||
Translated,
|
Translated,
|
||||||
*TranslatedSize * sizeof (*Translated), // BufferSize in bytes
|
*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[0],
|
||||||
PciDevFun[1]
|
PciDevFun[1]
|
||||||
);
|
);
|
||||||
|
@ -742,7 +742,7 @@ TranslatePciOfwNodes (
|
||||||
// PciRoot(0x0)/Pci(0x7,0x3)/Scsi(0x2,0x3)
|
// PciRoot(0x0)/Pci(0x7,0x3)/Scsi(0x2,0x3)
|
||||||
// -- if PCI function is present and nonzero
|
// -- if PCI function is present and nonzero
|
||||||
//
|
//
|
||||||
UINT32 TargetLun[2];
|
UINT64 TargetLun[2];
|
||||||
|
|
||||||
TargetLun[1] = 0;
|
TargetLun[1] = 0;
|
||||||
NumEntries = sizeof (TargetLun) / sizeof (TargetLun[0]);
|
NumEntries = sizeof (TargetLun) / sizeof (TargetLun[0]);
|
||||||
|
@ -758,7 +758,7 @@ TranslatePciOfwNodes (
|
||||||
Written = UnicodeSPrintAsciiFormat (
|
Written = UnicodeSPrintAsciiFormat (
|
||||||
Translated,
|
Translated,
|
||||||
*TranslatedSize * sizeof (*Translated), // BufferSize in bytes
|
*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[0],
|
||||||
PciDevFun[1],
|
PciDevFun[1],
|
||||||
TargetLun[0],
|
TargetLun[0],
|
||||||
|
@ -781,7 +781,7 @@ TranslatePciOfwNodes (
|
||||||
Written = UnicodeSPrintAsciiFormat (
|
Written = UnicodeSPrintAsciiFormat (
|
||||||
Translated,
|
Translated,
|
||||||
*TranslatedSize * sizeof (*Translated), // BufferSize in bytes
|
*TranslatedSize * sizeof (*Translated), // BufferSize in bytes
|
||||||
"PciRoot(0x0)/Pci(0x%x,0x%x)",
|
"PciRoot(0x0)/Pci(0x%Lx,0x%Lx)",
|
||||||
PciDevFun[0],
|
PciDevFun[0],
|
||||||
PciDevFun[1]
|
PciDevFun[1]
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in New Issue