The "/sys/devices/pciDDDD:bb/DDDD:bb:dd.f" path requires that you know about any bridges on the way to the device. Use "/sys/bus/pci/devices/DDDD:bb:dd.f" form instead. --- programs/Xserver/hw/xfree86/os-support/bus/linuxPci.c.orig 2006-03-05 03:43:41.000000000 -0700 +++ programs/Xserver/hw/xfree86/os-support/bus/linuxPci.c 2006-03-05 03:52:59.000000000 -0700 @@ -773,8 +773,8 @@ bus = PCI_BUS_NO_DOMAIN(PCI_BUS_FROM_TAG(Tag)); dev = PCI_DEV_FROM_TAG(Tag); func = PCI_FUNC_FROM_TAG(Tag); - sprintf(file, "/sys/devices/pci%04x:%02x/%04x:%02x:%02x.%1x/rom", - dom, bus, dom, bus, dev, func); + sprintf(file, "/sys/bus/pci/devices/%04x:%02x:%02x.%1x/rom", + dom, bus, dev, func); /* * If the caller wants the ROM and the sysfs rom interface exists, --- programs/Xserver/hw/xfree86/os-support/linux/lnx_pci.c.orig 2006-03-05 03:54:19.000000000 -0700 +++ programs/Xserver/hw/xfree86/os-support/linux/lnx_pci.c 2006-03-05 03:56:28.000000000 -0700 @@ -43,8 +43,8 @@ pciInfoFromTag(tag, &domain, &bus, &dev, &fn); - sprintf(c, "/sys/devices/pci%04x:%02x/%04x:%02x:%02x.%1x/resource", - domain, bus, domain, bus, dev, fn); + sprintf(c, "/sys/bus/pci/devices/%04x:%02x:%02x.%1x/resource", + domain, bus, dev, fn); if (file = fopen(c, "r")) { for (resource=0; resource != index; resource++) fgets(c, 0x1ff, file); @@ -134,8 +134,8 @@ pciInfoFromTag(tag, &domain, &bus, &dev, &fn); - sprintf(c, "/sys/devices/pci%04x:%02x/%04x:%02x:%02x.%1x/resource", - domain, bus, domain, bus, dev, fn); + sprintf(c, "/sys/bus/pci/devices/%04x:%02x:%02x.%1x/resource", + domain, bus, dev, fn); if (file = fopen(c, "r")) { for (resource=0; resource != index; resource++) fgets(c, 0x1ff, file); @@ -212,8 +212,8 @@ pciInfoFromTag(tag, &domain, &bus, &dev, &fn); - sprintf(c, "/sys/devices/pci%04x:%02x/%04x:%02x:%02x.%1x/resource", - domain, bus, domain, bus, dev, fn); + sprintf(c, "/sys/bus/pci/devices/%04x:%02x:%02x.%1x/resource", + domain, bus, dev, fn); if (file = fopen(c, "r")) { unsigned long savePtr; for (ndx=0; ndx < 7; ndx++) {