summaryrefslogtreecommitdiffstats
path: root/OvmfPkg/Library
diff options
context:
space:
mode:
authorjljusten <jljusten@6f19259b-4bc3-4df7-8a09-765794883524>2013-05-15 18:21:08 +0000
committerjljusten <jljusten@6f19259b-4bc3-4df7-8a09-765794883524>2013-05-15 18:21:08 +0000
commite7a7e480364a9ce71283745386a3316ae9843b27 (patch)
tree3ee9122a7de9119d87ec19cdca609e8cef0a5408 /OvmfPkg/Library
parent7628b0f5aaa2b46ffcd3df2e574e6bb487268b92 (diff)
downloadedk2-e7a7e480364a9ce71283745386a3316ae9843b27.tar.gz
edk2-e7a7e480364a9ce71283745386a3316ae9843b27.tar.bz2
edk2-e7a7e480364a9ce71283745386a3316ae9843b27.zip
OvmfPkg: QemuBootOrder: recognize Ethernet OFW device paths
Tested with the e1000, ne2k_pci, pcnet, rtl8139, and virtio iPXE UEFI oprom drivers distributed with qemu-1.5.0-rc1. Also tested with Intel's e1000 driver. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@14367 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'OvmfPkg/Library')
-rw-r--r--OvmfPkg/Library/PlatformBdsLib/QemuBootOrder.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/OvmfPkg/Library/PlatformBdsLib/QemuBootOrder.c b/OvmfPkg/Library/PlatformBdsLib/QemuBootOrder.c
index d2d60c389f..9f94e2424a 100644
--- a/OvmfPkg/Library/PlatformBdsLib/QemuBootOrder.c
+++ b/OvmfPkg/Library/PlatformBdsLib/QemuBootOrder.c
@@ -677,6 +677,35 @@ TranslateOfwNodes (
TargetLun[0],
TargetLun[1]
);
+ } else if (NumNodes >= 3 &&
+ SubstringEq (OfwNode[1].DriverName, "ethernet") &&
+ SubstringEq (OfwNode[2].DriverName, "ethernet-phy")
+ ) {
+ //
+ // OpenFirmware device path (Ethernet NIC):
+ //
+ // /pci@i0cf8/ethernet@3[,2]/ethernet-phy@0
+ // ^ ^ ^
+ // | | fixed
+ // | 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.)
+ //
+ Written = UnicodeSPrintAsciiFormat (
+ Translated,
+ *TranslatedSize * sizeof (*Translated), // BufferSize in bytes
+ "PciRoot(0x0)/Pci(0x%x,0x%x)/MAC",
+ PciDevFun[0],
+ PciDevFun[1]
+ );
} else {
return RETURN_UNSUPPORTED;
}