diff options
Diffstat (limited to 'OvmfPkg')
-rw-r--r-- | OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c b/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c index 398de7f..374c6d8 100644 --- a/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c +++ b/OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c @@ -432,6 +432,8 @@ ParseOfwNode ( OUT BOOLEAN *IsFinal
)
{
+ BOOLEAN AcceptSlash = FALSE;
+
//
// A leading slash is expected. End of string is tolerated.
//
@@ -464,6 +466,21 @@ ParseOfwNode ( return RETURN_INVALID_PARAMETER;
}
+ if (SubstringEq (OfwNode->DriverName, "rom")) {
+ //
+ // bug compatibility hack
+ //
+ // qemu passes fw_cfg filenames as rom unit address.
+ // The filenames have slashes:
+ // /rom@genroms/linuxboot_dma.bin
+ //
+ // Alow slashes in the unit address to avoid the parser trip up,
+ // so we can successfully parse the following lines (the rom
+ // entries themself are ignored).
+ //
+ AcceptSlash = TRUE;
+ }
+
//
// unit-address
//
@@ -475,7 +492,7 @@ ParseOfwNode ( OfwNode->UnitAddress.Ptr = *Ptr;
OfwNode->UnitAddress.Len = 0;
- while (IsPrintNotDelim (**Ptr)) {
+ while (IsPrintNotDelim (**Ptr) || (AcceptSlash && **Ptr == '/')) {
++*Ptr;
++OfwNode->UnitAddress.Len;
}
|