diff --git a/src/drivers/bus/pci.c b/src/drivers/bus/pci.c index 0abc1e9c..e7528e3c 100644 --- a/src/drivers/bus/pci.c +++ b/src/drivers/bus/pci.c @@ -187,7 +187,10 @@ static int pci_probe ( struct pci_device *pci ) { for ( driver = pci_drivers ; driver < pci_drivers_end ; driver++ ) { for ( i = 0 ; i < driver->id_count ; i++ ) { id = &driver->ids[i]; - if ( ( id->vendor != pci->vendor ) || + if ( ( id->vendor != PCI_ANY_ID ) && + ( id->vendor != pci->vendor ) ) + continue; + if ( ( id->device != PCI_ANY_ID ) && ( id->device != pci->device ) ) continue; pci->driver = driver; diff --git a/src/include/gpxe/pci.h b/src/include/gpxe/pci.h index 5fc21009..801bf2cc 100644 --- a/src/include/gpxe/pci.h +++ b/src/include/gpxe/pci.h @@ -239,6 +239,9 @@ struct pci_device_id { uint16_t device; }; +/** Match-anything ID */ +#define PCI_ANY_ID 0xffff + /** A PCI device */ struct pci_device { /** Generic device */