aboutsummaryrefslogtreecommitdiffstats
path: root/src/boot.c
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2011-01-10 00:48:45 -0500
committerKevin O'Connor <kevin@koconnor.net>2011-01-10 00:48:45 -0500
commitd08eb9c968e519a0b1ba63702acb2115ad536318 (patch)
treeddfcaf5dc860cb47e1885a2dd86befa52ee5599f /src/boot.c
parent89a1efd95c4f3ee349fa36c31526ae880820ce19 (diff)
downloadseabios-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.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/boot.c b/src/boot.c
index b59794ed..05fb3ddf 100644
--- a/src/boot.c
+++ b/src/boot.c
@@ -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;