Requires the pciutils-devel-2.0-2 rpm currently in playpen (static lib + headers). Probably will get moved into dist-6.1 soon. Use is as follows: -- /* pciprobe.h */ struct pciDevice { unsigned int vendor, device, type; char * driver; char * desc; }; int probePciReadDrivers(const char *fn); struct pciDevice **probePci(unsigned int type, int all); -- probePciReadDrivers is same as before. probePci returns a null-terminated list of pciDevice *. 'type' is a base class/subclass type (look in /usr/include/pci/header.h under 'Device classes and subclasses' for constants to use, or you can hard-code them....). 'all=0' means return only those for which there are drivers (which means entries where the drivers are *not* 'unknown' or 'ignore'.) 'all=anything else' means return everything. Currently, the pcitable is more-or-less the same as before: 0xvendor 0xdevice "description" It's generated from the pci.ids file by the 'makeids' command, which reads the driver mappings from the *current* pcitable file in the current directory. Basically, to change a driver, edit the pcitable and commit; rerunning makeids will simply merge in any new PCI ids in the pci.ids file, and change any changed descriptions. testprobe currently prints (more-or-less) the results of probePci(0,1);