diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2011-01-10 00:48:45 -0500 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2011-01-10 00:48:45 -0500 |
commit | d08eb9c968e519a0b1ba63702acb2115ad536318 (patch) | |
tree | ddfcaf5dc860cb47e1885a2dd86befa52ee5599f /src/boot.c | |
parent | 89a1efd95c4f3ee349fa36c31526ae880820ce19 (diff) | |
download | seabios-d08eb9c968e519a0b1ba63702acb2115ad536318.tar.gz |
Add ability to track PCI paths and add to build_pci_path().
Improve device path descriptions of devices on PCI buses.
Diffstat (limited to 'src/boot.c')
-rw-r--r-- | src/boot.c | 17 |
1 files changed, 12 insertions, 5 deletions
@@ -99,13 +99,20 @@ build_pci_path(char *buf, int max, const char *devname, int bdf) { // Build the string path of a bdf - for example: /pci@i0cf8/isa@1,2 char *p = buf; - int bus = pci_bdf_to_bus(bdf); - if (bus) - // XXX - this isn't the correct path syntax - p += snprintf(p, max, "/bus%x", bus); + int parent = pci_bdf_to_bus(bdf); + if (PCIpaths) + parent = PCIpaths[parent]; + int parentdev = parent & 0xffff; + if (parent & PP_PCIBRIDGE) { + p = build_pci_path(p, max, "pci-bridge", parentdev); + } else { + if (parentdev) + p += snprintf(p, max, "/pci-root@%x", parentdev); + p += snprintf(p, buf+max-p, "%s", FW_PCI_DOMAIN); + } int dev = pci_bdf_to_dev(bdf), fn = pci_bdf_to_fn(bdf); - p += snprintf(p, buf+max-p, "%s/%s@%x", FW_PCI_DOMAIN, devname, dev); + p += snprintf(p, buf+max-p, "/%s@%x", devname, dev); if (fn) p += snprintf(p, buf+max-p, ",%x", fn); return p; |