In many cases, the second node in /pci@i0cf8/XYZ@DD,FF node is enough
to match a UEFI device path; a typical cases is a NIC that is assigned
from the host to the guest.  Add a catch-all case for PCI devices, and
reuse it for NICs since it works well for those too.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Paolo Bonzini <[email protected]>
---
 OvmfPkg/Library/PlatformBdsLib/QemuBootOrder.c | 24 +++++++-----------------
 1 file changed, 7 insertions(+), 17 deletions(-)

diff --git a/OvmfPkg/Library/PlatformBdsLib/QemuBootOrder.c 
b/OvmfPkg/Library/PlatformBdsLib/QemuBootOrder.c
index 7f81fc3..bd0fb76 100644
--- a/OvmfPkg/Library/PlatformBdsLib/QemuBootOrder.c
+++ b/OvmfPkg/Library/PlatformBdsLib/QemuBootOrder.c
@@ -763,37 +763,27 @@ TranslateOfwNodes (
       TargetLun[0],
       TargetLun[1]
       );
-  } else if (NumNodes >= 3 &&
-             SubstringEq (OfwNode[1].DriverName, "ethernet") &&
-             SubstringEq (OfwNode[2].DriverName, "ethernet-phy")
-             ) {
+  } else {
     //
-    // OpenFirmware device path (Ethernet NIC):
+    // Generic OpenFirmware device path for PCI devices:
     //
-    //   /pci@i0cf8/ethernet@3[,2]/ethernet-phy@0
-    //        ^              ^                  ^
-    //        |              |                  fixed
+    //   /pci@i0cf8/ethernet@3[,2]
+    //        ^              ^
     //        |              PCI slot[, function] holding Ethernet card
     //        PCI root at system bus port, PIO
     //
     // UEFI device path prefix (dependent on presence of nonzero PCI function):
     //
-    //   PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400E15EEF,0x1)
-    //   PciRoot(0x0)/Pci(0x3,0x2)/MAC(525400E15EEF,0x1)
-    //                                 ^            ^
-    //                                 MAC address  IfType (1 == Ethernet)
-    //
-    // (Some UEFI NIC drivers don't set 0x1 for IfType.)
+    //   PciRoot(0x0)/Pci(0x3,0x0)
+    //   PciRoot(0x0)/Pci(0x3,0x2)
     //
     Written = UnicodeSPrintAsciiFormat (
       Translated,
       *TranslatedSize * sizeof (*Translated), // BufferSize in bytes
-      "PciRoot(0x0)/Pci(0x%x,0x%x)/MAC",
+      "PciRoot(0x0)/Pci(0x%x,0x%x)",
       PciDevFun[0],
       PciDevFun[1]
       );
-  } else {
-    return RETURN_UNSUPPORTED;
   }
 
   //
-- 
1.9.0


------------------------------------------------------------------------------
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to