]> git.proxmox.com Git - mirror_edk2.git/commit
OvmfPkg: QemuBootOrderLib: parse OFW device path nodes of PCI bridges
authorLaszlo Ersek <lersek@redhat.com>
Fri, 8 May 2015 18:12:44 +0000 (18:12 +0000)
committerlersek <lersek@Edk2>
Fri, 8 May 2015 18:12:44 +0000 (18:12 +0000)
commitfeca17fa4bf15b5994d520969a6756fff8f809fb
treeca409b48dcc353c84cf9c576b438c678c6b2c1f4
parent2946ffb6ed1482378d3bf0cab8e75362286260e4
OvmfPkg: QemuBootOrderLib: parse OFW device path nodes of PCI bridges

When the Q35 machine type(s) of QEMU are used with libvirt, libvirt tends
to place some devices behind PCI bridges. This is then reflected in the
"bootorder" fw_cfg file. For example:

  /pci@i0cf8/pci-bridge@1e/pci-bridge@1/scsi@5/disk@0,0
  /pci@i0cf8/pci-bridge@1e/pci-bridge@1/scsi@3/channel@0/disk@0,0

As yet QemuBootOrderLib doesn't support such OFW device paths.

Add code that translates a sequence of pci-bridge nodes.

In practice libvirt seems to insert two such nodes (*), hence increment
EXAMINED_OFW_NODES with the same number.

(* Background, paraphrasing Laine Stump's words:

When the machine type is Q35, we create a dmi-to-pci bridge coming off of
the pcie root controller, and a pci-to-pci bridge coming off of that, then
attach most devices to the pci-to-pci bridge. This is done because you
can't hotplug into pcie-root, can't (or at least shouldn't) plug a
pci-to-pci bridge into pcie-root (so the next one has to be
dmi-to-pci-bridge), and can't hotplug into dmi-to-pci-bridge (so you need
to have a pci-to-pci bridge).)

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://svn.code.sf.net/p/edk2/code/trunk/edk2@17385 6f19259b-4bc3-4df7-8a09-765794883524
OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c