Index: sys/dev/bktr/bktr_os.c =================================================================== --- sys/dev/bktr/bktr_os.c +++ sys/dev/bktr/bktr_os.c @@ -211,23 +211,17 @@ static int bktr_shutdown( device_t dev ); static void bktr_intr(void *arg) { common_bktr_intr(arg); } -static struct bktr_dev { - uint16_t vendorid; - uint16_t deviceid; - uint8_t rev; - const char *description; -} bktr_devs[] = { - {PCI_VENDOR_BROOKTREE, PCI_PRODUCT_BROOKTREE_BT848, 0x12, - "BrookTree 848A"}, - {PCI_VENDOR_BROOKTREE, PCI_PRODUCT_BROOKTREE_BT848, 0, - "BrookTree 848"}, - {PCI_VENDOR_BROOKTREE, PCI_PRODUCT_BROOKTREE_BT849, 0, - "BrookTree 849A"}, - {PCI_VENDOR_BROOKTREE, PCI_PRODUCT_BROOKTREE_BT878, 0, - "BrookTree 878"}, - {PCI_VENDOR_BROOKTREE, PCI_PRODUCT_BROOKTREE_BT879, 0, - "BrookTree 879"}, - {0, 0, 0, NULL}, +struct pci_device_table bktr_devs[] = { + {PCI_DEV(PCI_VENDOR_BROOKTREE, PCI_PRODUCT_BROOKTREE_BT848), PCI_REVID(0x12), + PCI_DESCR("BrookTree 848A")}, + {PCI_DEV(PCI_VENDOR_BROOKTREE, PCI_PRODUCT_BROOKTREE_BT848), + PCI_DESCR("BrookTree 848")}, + {PCI_DEV(PCI_VENDOR_BROOKTREE, PCI_PRODUCT_BROOKTREE_BT849), + PCI_DESCR("BrookTree 849A")}, + {PCI_DEV(PCI_VENDOR_BROOKTREE, PCI_PRODUCT_BROOKTREE_BT878), + PCI_DESCR("BrookTree 878")}, + {PCI_DEV(PCI_VENDOR_BROOKTREE, PCI_PRODUCT_BROOKTREE_BT879), + PCI_DESCR("BrookTree 879")} }; static device_method_t bktr_methods[] = { @@ -293,8 +287,7 @@ MODULE_DEPEND(bktr, smbus, SMBUS_MINVER, SMBUS_MODVER, SMBUS_MAXVER); #endif DRIVER_MODULE(bktr, pci, bktr_driver, bktr_devclass, 0, 0); -MODULE_PNP_INFO("U16:vendor;U16:device", pci, bktr, bktr_devs, - sizeof(bktr_devs[0]), nitems(bktr_devs) - 1); +PCI_PNP_INFO(bktr_devs); MODULE_DEPEND(bktr, bktr_mem, 1,1,1); MODULE_VERSION(bktr, 1); @@ -305,38 +298,13 @@ static int bktr_probe( device_t dev ) { - unsigned int type = pci_get_devid(dev); - unsigned int rev = pci_get_revid(dev); - const struct bktr_dev *bktd; - uint16_t vid; - uint16_t did; - size_t i; - - vid = PCI_VENDOR(type); - did = PCI_PRODUCT(type); - - // XXX merge conflicts. Need to convert to PCI_MATCH instead. - if (BKTR_PCI_VENDOR(type) == PCI_VENDOR_BROOKTREE) - { - switch (BKTR_PCI_PRODUCT(type)) { - case PCI_PRODUCT_BROOKTREE_BT848: - if (rev == 0x12) - device_set_desc(dev, "BrookTree 848A"); - else - device_set_desc(dev, "BrookTree 848"); - return BUS_PROBE_DEFAULT; - case PCI_PRODUCT_BROOKTREE_BT849: - device_set_desc(dev, "BrookTree 849A"); - return BUS_PROBE_DEFAULT; - case PCI_PRODUCT_BROOKTREE_BT878: - device_set_desc(dev, "BrookTree 878"); - return BUS_PROBE_DEFAULT; - case PCI_PRODUCT_BROOKTREE_BT879: - device_set_desc(dev, "BrookTree 879"); - return BUS_PROBE_DEFAULT; - } - } - return ENXIO; + const struct pci_device_table *bktd; + + bktd = PCI_MATCH(dev, bktr_devs); + if (bktd == NULL) + return (ENXIO); + device_set_desc(dev, bktd->descr); + return (BUS_PROBE_DEFAULT); } Index: sys/dev/dpt/dpt_pci.c =================================================================== --- sys/dev/dpt/dpt_pci.c +++ sys/dev/dpt/dpt_pci.c @@ -64,7 +64,7 @@ struct pci_device_table dpt_devs[] = { {PCI_DEV(DPT_VENDOR_ID, DPT_DEVICE_ID), - PCI_DESCR("DPT Caching SCSI RAID Controller")}, + PCI_DESCR("DPT Caching SCSI RAID Controller")} }; static int @@ -75,7 +75,7 @@ dpd = PCI_MATCH(dev, dpt_devs); if (dpd == NULL) return (ENXIO); - device_set_desc(dev, dpd->description); + device_set_desc(dev, dpd->descr); return (BUS_PROBE_DEFAULT); } Index: sys/dev/le/if_le_pci.c =================================================================== --- sys/dev/le/if_le_pci.c +++ sys/dev/le/if_le_pci.c @@ -122,6 +122,13 @@ static device_resume_t le_pci_resume; static device_suspend_t le_pci_suspend; +struct pci_device_table le_devs[] = { + {PCI_DEV(AMD_VENDOR, AMD_PCNET_PCI), + PCI_DESCR("AMD PCnet-PCI")}, + {PCI_DEV(AMD_VENDOR, AMD_PCNET_HOME), + PCI_DESCR("AMD PCnet-Home")} +}; + static device_method_t le_pci_methods[] = { /* Device interface */ DEVMETHOD(device_probe, le_pci_probe), @@ -137,6 +144,7 @@ DEFINE_CLASS_0(le, le_pci_driver, le_pci_methods, sizeof(struct le_pci_softc)); DRIVER_MODULE(le, pci, le_pci_driver, le_devclass, 0, 0); +PCI_PNP_INFO(le_devs); MODULE_DEPEND(le, ether, 1, 1, 1); static const int le_home_supmedia[] = { @@ -276,22 +284,13 @@ static int le_pci_probe(device_t dev) { + const struct pci_device_table *led; - if (pci_get_vendor(dev) != AMD_VENDOR) - return (ENXIO); - - switch (pci_get_device(dev)) { - case AMD_PCNET_PCI: - device_set_desc(dev, "AMD PCnet-PCI"); - /* Let pcn(4) win. */ - return (BUS_PROBE_LOW_PRIORITY); - case AMD_PCNET_HOME: - device_set_desc(dev, "AMD PCnet-Home"); - /* Let pcn(4) win. */ - return (BUS_PROBE_LOW_PRIORITY); - default: + led = PCI_MATCH(dev, le_devs); + if (led == NULL) return (ENXIO); - } + device_set_desc(dev, led->descr); + return (BUS_PROBE_LOW_PRIORITY); } static int Index: sys/dev/liquidio/lio_main.c =================================================================== --- sys/dev/liquidio/lio_main.c +++ sys/dev/liquidio/lio_main.c @@ -145,28 +145,36 @@ uint8_t index; }; -static struct lio_vendor_info lio_pci_tbl[] = { +struct pci_device_table lio_pci_tbl[] = { /* CN2350 10G */ - {PCI_VENDOR_ID_CAVIUM, LIO_CN23XX_PF_VID, LIO_CN2350_10G_SUBDEVICE, - 0x02, 0}, + {PCI_DEV(PCI_VENDOR_ID_CAVIUM, LIO_CN23XX_PF_VID), + .match_flag_subdevice = 1, .subdevice = (LIO_CN2350_10G_SUBDEVICE), + PCI_REVID(0x02), .unused (0), + PCI_DESCR("LiquidIO 2350 10GbE Server Adapter")}, /* CN2350 10G */ - {PCI_VENDOR_ID_CAVIUM, LIO_CN23XX_PF_VID, LIO_CN2350_10G_SUBDEVICE1, - 0x02, 0}, + {PCI_DEV(PCI_VENDOR_ID_CAVIUM, LIO_CN23XX_PF_VID), + .match_flag_subdevice = 1, .subdevice = (LIO_CN2350_10G_SUBDEVICE1), + PCI_REVID(0x02), .unused(0), + PCI_DESCR("LiquidIO 2350 10GbE Server Adapter")}, /* CN2360 10G */ - {PCI_VENDOR_ID_CAVIUM, LIO_CN23XX_PF_VID, LIO_CN2360_10G_SUBDEVICE, - 0x02, 1}, + {PCI_DEV(PCI_VENDOR_ID_CAVIUM, LIO_CN23XX_PF_VID), + .match_flag_subdevice = 1, .subdevice = (LIO_CN2360_10G_SUBDEVICE), + PCI_REVID(0x02), .unused(1), + PCI_DESCR("LiquidIO 2360 10GbE Server Adapter")}, /* CN2350 25G */ - {PCI_VENDOR_ID_CAVIUM, LIO_CN23XX_PF_VID, LIO_CN2350_25G_SUBDEVICE, - 0x02, 2}, + {PCI_DEV(PCI_VENDOR_ID_CAVIUM, LIO_CN23XX_PF_VID), + .match_flag_subdevice = 1, .subdevice = (LIO_CN2350_25G_SUBDEVICE), + PCI_REVID(0x02), .unused(2), + PCI_DESCR("LiquidIO 2350 25GbE Server Adapter")}, /* CN2360 25G */ - {PCI_VENDOR_ID_CAVIUM, LIO_CN23XX_PF_VID, LIO_CN2360_25G_SUBDEVICE, - 0x02, 3}, - - {0, 0, 0, 0, 0} + {PCI_DEV(PCI_VENDOR_ID_CAVIUM, LIO_CN23XX_PF_VID), + .match_flag_subdevice = 1, .subdevice = (LIO_CN2360_25G_SUBDEVICE), + PCI_REVID(0x02), .unused(3), + PCI_DESCR("LiquidIO 2360 25GbE Server Adapter")} }; static char *lio_strings[] = { @@ -195,38 +203,16 @@ static int lio_probe(device_t dev) { - struct lio_vendor_info *tbl; - - uint16_t vendor_id; - uint16_t device_id; - uint16_t subdevice_id; - uint8_t revision_id; + const struct pci_device_table *liod; char device_ver[256]; - vendor_id = pci_get_vendor(dev); - if (vendor_id != PCI_VENDOR_ID_CAVIUM) + liod = PCI_MATCH(dev, lio_pci_tbl); + if (liod == NULL) return (ENXIO); - - device_id = pci_get_device(dev); - subdevice_id = pci_get_subdevice(dev); - revision_id = pci_get_revid(dev); - - tbl = lio_pci_tbl; - while (tbl->vendor_id) { - if ((vendor_id == tbl->vendor_id) && - (device_id == tbl->device_id) && - (subdevice_id == tbl->subdevice_id) && - (revision_id == tbl->revision_id)) { - sprintf(device_ver, "%s, Version - %s", - lio_strings[tbl->index], LIO_VERSION); - device_set_desc_copy(dev, device_ver); - return (BUS_PROBE_DEFAULT); - } - - tbl++; - } - - return (ENXIO); + sprintf(device_ver, "%s, Version - %s", + lio_strings[liod->unused], LIO_VERSION); + device_set_desc_copy(dev, device_ver); + return (BUS_PROBE_DEFAULT); } static int @@ -414,6 +400,7 @@ devclass_t lio_devclass; DRIVER_MODULE(lio, pci, lio_driver, lio_devclass, lio_event, 0); +PCI_PNP_INFO(lio_pci_tbl); MODULE_DEPEND(lio, pci, 1, 1, 1); MODULE_DEPEND(lio, ether, 1, 1, 1); Index: sys/dev/mpr/mpr_pci.c =================================================================== --- sys/dev/mpr/mpr_pci.c +++ sys/dev/mpr/mpr_pci.c @@ -88,9 +88,6 @@ sizeof(struct mpr_softc) }; -static devclass_t mpr_devclass; -DRIVER_MODULE(mpr, pci, mpr_pci_driver, mpr_devclass, 0, 0); -MODULE_DEPEND(mpr, cam, 1, 1, 1); struct mpr_ident { uint16_t vendor; @@ -154,6 +151,14 @@ { 0, 0, 0, 0, 0, NULL } }; + +static devclass_t mpr_devclass; +DRIVER_MODULE(mpr, pci, mpr_pci_driver, mpr_devclass, 0, 0); +MODULE_PNP_INFO("U16:vendor;U16:device;U16:subvendor;U16:subdevice;D:#", pci, mpr, + mpr_identifiers, sizeof(mpr_identifiers[0]), nitems(mpr_identifiers) - 1); + +MODULE_DEPEND(mpr, cam, 1, 1, 1); + static struct mpr_ident * mpr_find_ident(device_t dev) { Index: sys/dev/mvs/mvs_pci.c =================================================================== --- sys/dev/mvs/mvs_pci.c +++ sys/dev/mvs/mvs_pci.c @@ -521,6 +521,8 @@ sizeof(struct mvs_controller) }; DRIVER_MODULE(mvs, pci, mvs_driver, mvs_devclass, 0, 0); +MODULE_PNP_INFO("W32:vendor/device", pci, mvs, mvs_ids, + sizeof(mvs_ids[0]), nitems(mvs_ids) - 1); MODULE_VERSION(mvs, 1); MODULE_DEPEND(mvs, cam, 1, 1, 1); Index: sys/dev/my/if_my.c =================================================================== --- sys/dev/my/if_my.c +++ sys/dev/my/if_my.c @@ -163,6 +163,8 @@ static devclass_t my_devclass; DRIVER_MODULE(my, pci, my_driver, my_devclass, 0, 0); +MODULE_PNP_INFO("U16:vendor;U16:device;D:#", pci, my, my_devs, + sizeof(my_devs[0]), nitems(my_devs) - 1); MODULE_DEPEND(my, pci, 1, 1, 1); MODULE_DEPEND(my, ether, 1, 1, 1);