Index: sys/dev/ichiic/ig4_pci.c =================================================================== --- sys/dev/ichiic/ig4_pci.c +++ sys/dev/ichiic/ig4_pci.c @@ -89,54 +89,98 @@ #define PCI_CHIP_APL_I2C_6 0x5ab88086 #define PCI_CHIP_APL_I2C_7 0x5aba8086 -struct ig4iic_pci_device { - uint32_t devid; - const char *desc; - enum ig4_vers version; -}; -static struct ig4iic_pci_device ig4iic_pci_devices[] = { - { PCI_CHIP_LYNXPT_LP_I2C_1, "Intel Lynx Point-LP I2C Controller-1", IG4_HASWELL}, - { PCI_CHIP_LYNXPT_LP_I2C_2, "Intel Lynx Point-LP I2C Controller-2", IG4_HASWELL}, - { PCI_CHIP_BRASWELL_I2C_1, "Intel Braswell Serial I/O I2C Port 1", IG4_ATOM}, - { PCI_CHIP_BRASWELL_I2C_2, "Intel Braswell Serial I/O I2C Port 2", IG4_ATOM}, - { PCI_CHIP_BRASWELL_I2C_3, "Intel Braswell Serial I/O I2C Port 3", IG4_ATOM}, - { PCI_CHIP_BRASWELL_I2C_5, "Intel Braswell Serial I/O I2C Port 5", IG4_ATOM}, - { PCI_CHIP_BRASWELL_I2C_6, "Intel Braswell Serial I/O I2C Port 6", IG4_ATOM}, - { PCI_CHIP_BRASWELL_I2C_7, "Intel Braswell Serial I/O I2C Port 7", IG4_ATOM}, - { PCI_CHIP_SKYLAKE_I2C_0, "Intel Sunrise Point-LP I2C Controller-0", IG4_SKYLAKE}, - { PCI_CHIP_SKYLAKE_I2C_1, "Intel Sunrise Point-LP I2C Controller-1", IG4_SKYLAKE}, - { PCI_CHIP_SKYLAKE_I2C_2, "Intel Sunrise Point-LP I2C Controller-2", IG4_SKYLAKE}, - { PCI_CHIP_SKYLAKE_I2C_3, "Intel Sunrise Point-LP I2C Controller-3", IG4_SKYLAKE}, - { PCI_CHIP_SKYLAKE_I2C_4, "Intel Sunrise Point-LP I2C Controller-4", IG4_SKYLAKE}, - { PCI_CHIP_SKYLAKE_I2C_5, "Intel Sunrise Point-LP I2C Controller-5", IG4_SKYLAKE}, - { PCI_CHIP_APL_I2C_0, "Intel Apollo Lake I2C Controller-0", IG4_APL}, - { PCI_CHIP_APL_I2C_1, "Intel Apollo Lake I2C Controller-1", IG4_APL}, - { PCI_CHIP_APL_I2C_2, "Intel Apollo Lake I2C Controller-2", IG4_APL}, - { PCI_CHIP_APL_I2C_3, "Intel Apollo Lake I2C Controller-3", IG4_APL}, - { PCI_CHIP_APL_I2C_4, "Intel Apollo Lake I2C Controller-4", IG4_APL}, - { PCI_CHIP_APL_I2C_5, "Intel Apollo Lake I2C Controller-5", IG4_APL}, - { PCI_CHIP_APL_I2C_6, "Intel Apollo Lake I2C Controller-6", IG4_APL}, - { PCI_CHIP_APL_I2C_7, "Intel Apollo Lake I2C Controller-7", IG4_APL}, - { 0, NULL, 0 }, +#define PCI_DEVICE_LYNXPT_LP_I2C_1 0x9c61 +#define PCI_DEVICE_LYNXPT_LP_I2C_2 0x9c62 +#define PCI_DEVICE_BRASWELL_I2C_1 0x22c1 +#define PCI_DEVICE_BRASWELL_I2C_2 0x22c2 +#define PCI_DEVICE_BRASWELL_I2C_3 0x22c3 +#define PCI_DEVICE_BRASWELL_I2C_5 0x22c5 +#define PCI_DEVICE_BRASWELL_I2C_6 0x22c6 +#define PCI_DEVICE_BRASWELL_I2C_7 0x22c7 +#define PCI_DEVICE_SKYLAKE_I2C_0 0x9d60 +#define PCI_DEVICE_SKYLAKE_I2C_1 0x9d61 +#define PCI_DEVICE_SKYLAKE_I2C_2 0x9d62 +#define PCI_DEVICE_SKYLAKE_I2C_3 0x9d63 +#define PCI_DEVICE_SKYLAKE_I2C_4 0x9d64 +#define PCI_DEVICE_SKYLAKE_I2C_5 0x9d65 +#define PCI_DEVICE_APL_I2C_0 0x5aac +#define PCI_DEVICE_APL_I2C_1 0x5aae +#define PCI_DEVICE_APL_I2C_2 0x5ab0 +#define PCI_DEVICE_APL_I2C_3 0x5ab2 +#define PCI_DEVICE_APL_I2C_4 0x5ab4 +#define PCI_DEVICE_APL_I2C_5 0x5ab6 +#define PCI_DEVICE_APL_I2C_6 0x5ab8 +#define PCI_DEVICE_APL_I2C_7 0x5aba +#define INTEL_VENDOR_ID 0x8086 + + +struct pci_device_table ig4iic_pci_devices[] = { + {PCI_DEV(INTEL_VENDOR_ID, PCI_DEVICE_LYNXPT_LP_I2C_1), + PCI_DESCR("Intel Lynx Point-LP I2C Controller-1"), .unused = (1)}, + {PCI_DEV(INTEL_VENDOR_ID, PCI_DEVICE_LYNXPT_LP_I2C_2), + PCI_DESCR("Intel Lynx Point-LP I2C Controller-2"), .unused = (1)}, + {PCI_DEV(INTEL_VENDOR_ID, PCI_DEVICE_BRASWELL_I2C_1), + PCI_DESCR("Intel Braswell Serial I/O I2C Port 1"), .unused = (2)}, + {PCI_DEV(INTEL_VENDOR_ID, PCI_DEVICE_BRASWELL_I2C_2), + PCI_DESCR("Intel Braswell Serial I/O I2C Port 2"), .unused = (2)}, + {PCI_DEV(INTEL_VENDOR_ID, PCI_DEVICE_BRASWELL_I2C_3), + PCI_DESCR("Intel Braswell Serial I/O I2C Port 3"), .unused = (2)}, + {PCI_DEV(INTEL_VENDOR_ID, PCI_DEVICE_BRASWELL_I2C_5), + PCI_DESCR("Intel Braswell Serial I/O I2C Port 5"), .unused = (2)}, + {PCI_DEV(INTEL_VENDOR_ID, PCI_DEVICE_BRASWELL_I2C_6), + PCI_DESCR("Intel Braswell Serial I/O I2C Port 6"), .unused = (2)}, + {PCI_DEV(INTEL_VENDOR_ID, PCI_DEVICE_BRASWELL_I2C_7), + PCI_DESCR("Intel Braswell Serial I/O I2C Port 7"), .unused = (2)}, + {PCI_DEV(INTEL_VENDOR_ID, PCI_DEVICE_SKYLAKE_I2C_0), + PCI_DESCR("Intel Sunrise Point-LP I2C Controller-0"), .unused = (3)}, + {PCI_DEV(INTEL_VENDOR_ID, PCI_DEVICE_SKYLAKE_I2C_1), + PCI_DESCR("Intel Sunrise Point-LP I2C Controller-1"), .unused = (3)}, + {PCI_DEV(INTEL_VENDOR_ID, PCI_DEVICE_SKYLAKE_I2C_2), + PCI_DESCR("Intel Sunrise Point-LP I2C Controller-2"), .unused = (3)}, + {PCI_DEV(INTEL_VENDOR_ID, PCI_DEVICE_SKYLAKE_I2C_3), + PCI_DESCR("Intel Sunrise Point-LP I2C Controller-3"), .unused = (3)}, + {PCI_DEV(INTEL_VENDOR_ID, PCI_DEVICE_SKYLAKE_I2C_4), + PCI_DESCR("Intel Sunrise Point-LP I2C Controller-4"), .unused = (3)}, + {PCI_DEV(INTEL_VENDOR_ID, PCI_DEVICE_SKYLAKE_I2C_5), + PCI_DESCR("Intel Sunrise Point-LP I2C Controller-5"), .unused = (3)}, + {PCI_DEV(INTEL_VENDOR_ID, PCI_DEVICE_APL_I2C_0), + PCI_DESCR("Intel Apollo Lake I2C Controller-0"), .unused = (4)}, + {PCI_DEV(INTEL_VENDOR_ID, PCI_DEVICE_APL_I2C_1), + PCI_DESCR("Intel Apollo Lake I2C Controller-1"), .unused = (4)}, + {PCI_DEV(INTEL_VENDOR_ID, PCI_DEVICE_APL_I2C_2), + PCI_DESCR("Intel Apollo Lake I2C Controller-2"), .unused = (4)}, + {PCI_DEV(INTEL_VENDOR_ID, PCI_DEVICE_APL_I2C_3), + PCI_DESCR("Intel Apollo Lake I2C Controller-3"), .unused = (4)}, + {PCI_DEV(INTEL_VENDOR_ID, PCI_DEVICE_APL_I2C_4), + PCI_DESCR("Intel Apollo Lake I2C Controller-4"), .unused = (4)}, + {PCI_DEV(INTEL_VENDOR_ID, PCI_DEVICE_APL_I2C_5), + PCI_DESCR("Intel Apollo Lake I2C Controller-5"), .unused = (4)}, + {PCI_DEV(INTEL_VENDOR_ID, PCI_DEVICE_APL_I2C_6), + PCI_DESCR("Intel Apollo Lake I2C Controller-6"), .unused = (4)}, + {PCI_DEV(INTEL_VENDOR_ID, PCI_DEVICE_APL_I2C_7), + PCI_DESCR("Intel Apollo Lake I2C Controller-7"), .unused = (4)} }; static int ig4iic_pci_probe(device_t dev) { ig4iic_softc_t *sc = device_get_softc(dev); - uint32_t devid; - int i; - - devid = pci_get_devid(dev); - for (i = 0; ig4iic_pci_devices[i].devid != 0; i++) { - if (ig4iic_pci_devices[i].devid == devid) { - device_set_desc(dev, ig4iic_pci_devices[i].desc); - sc->version = ig4iic_pci_devices[i].version; - return (BUS_PROBE_DEFAULT); - } - } - return (ENXIO); + const struct pci_device_table *ig4d; + + ig4d = PCI_MATCH(dev, ig4iic_pci_devices); + if (ig4d == NULL) + return (ENXIO); + device_set_desc(dev, ig4d->descr); + if (ig4d->unused == 1) + sc->version = IG4_HASWELL; + else if (ig4d->unused == 2) + sc->version = IG4_ATOM; + else if (ig4d->unused == 3) + sc->version = IG4_SKYLAKE; + else if (ig4d->unused == 4) + sc->version = IG4_APL; + return (BUS_PROBE_DEFAULT); } static int @@ -226,6 +270,8 @@ DRIVER_MODULE_ORDERED(ig4iic_pci, pci, ig4iic_pci_driver, ig4iic_pci_devclass, 0, 0, SI_ORDER_ANY); +PCI_PNP_INFO(ig4iic_pci_devices); + MODULE_DEPEND(ig4iic_pci, pci, 1, 1, 1); MODULE_DEPEND(ig4iic_pci, iicbus, IICBUS_MINVER, IICBUS_PREFVER, IICBUS_MAXVER); MODULE_VERSION(ig4iic_pci, 1); Index: sys/dev/ida/ida_pci.c =================================================================== --- sys/dev/ida/ida_pci.c +++ sys/dev/ida/ida_pci.c @@ -306,3 +306,5 @@ } DRIVER_MODULE(ida, pci, ida_pci_driver, ida_devclass, 0, 0); +MODULE_PNP_INFO("W32:vendor/device;D:#", pci, ida, board_id, + sizeof(board_id[0]), nitems(board_id) - 1); Index: sys/dev/iicbus/iicoc.c =================================================================== --- sys/dev/iicbus/iicoc.c +++ sys/dev/iicbus/iicoc.c @@ -68,6 +68,11 @@ int len, int *sent, int timeout); static int iicoc_repeated_start(device_t dev, u_char slave, int timeout); +struct pci_device_table iicoc_devs[] = { + {PCI_DEV(0x184e, 0x1011), + PCI_DESCR("0x1011")} +} + struct iicoc_softc { device_t dev; /* Self */ u_int reg_shift; /* Chip specific */ @@ -179,17 +184,17 @@ iicoc_probe(device_t dev) { struct iicoc_softc *sc; - + const struct pci_device_table *iicd; + sc = device_get_softc(dev); - if ((pci_get_vendor(dev) == 0x184e) && - (pci_get_device(dev) == 0x1011)) { - sc->clockfreq = XLP_I2C_CLKFREQ; - sc->i2cfreq = XLP_I2C_FREQ; - sc->reg_shift = 2; - device_set_desc(dev, "Netlogic XLP I2C Controller"); - return (BUS_PROBE_DEFAULT); - } - return (ENXIO); + iicd = PCI_MATCH(dev, iicoc_devs); + if (iicd == NULL) + return (ENXIO); + sc->clockfreq = XLP_I2C_CLKFREQ; + sc->i2cfreq = XLP_I2C_FREQ; + sc->reg_shift = 2; + device_set_desc(dev, iicd->descr); + return (BUS_PROBE_DEFAULT); } @@ -390,4 +395,5 @@ }; DRIVER_MODULE(iicoc, pci, iicoc_driver, iicoc_devclass, 0, 0); +PCI_PNP_INFO(iicoc_devs); DRIVER_MODULE(iicbus, iicoc, iicbus_driver, iicbus_devclass, 0, 0); Index: sys/dev/ipmi/ipmi_pci.c =================================================================== --- sys/dev/ipmi/ipmi_pci.c +++ sys/dev/ipmi/ipmi_pci.c @@ -51,42 +51,23 @@ static int ipmi_pci_probe(device_t dev); static int ipmi_pci_attach(device_t dev); -static struct ipmi_ident -{ - u_int16_t vendor; - u_int16_t device; - char *desc; -} ipmi_identifiers[] = { - {0x1028, 0x000d, "Dell PE2650 SMIC interface"}, - {0, 0, 0} +struct pci_device_table ipmi_identifiers[] = { + {PCI_DEV(0x1028, 0x000d), + PCI_DESCR("Dell PE2650 SMIC interface")} }; -const char * -ipmi_pci_match(uint16_t vendor, uint16_t device) -{ - struct ipmi_ident *m; - - for (m = ipmi_identifiers; m->vendor != 0; m++) - if (m->vendor == vendor && m->device == device) - return (m->desc); - return (NULL); -} - static int ipmi_pci_probe(device_t dev) { - const char *desc; + const struct pci_device_table *ipmd; if (ipmi_attached) return (ENXIO); - - desc = ipmi_pci_match(pci_get_vendor(dev), pci_get_device(dev)); - if (desc != NULL) { - device_set_desc(dev, desc); - return (BUS_PROBE_DEFAULT); - } - - return (ENXIO); + ipmd = PCI_MATCH(dev, ipmi_identifiers); + if (ipmd == NULL) + return (ENXIO); + device_set_desc(dev, ipmd->descr); + return (BUS_PROBE_DEFAULT); } static int @@ -179,20 +160,24 @@ }; DRIVER_MODULE(ipmi_pci, pci, ipmi_pci_driver, ipmi_devclass, 0, 0); +PCI_PNP_INFO(ipmi_identifiers); /* Native IPMI on PCI driver. */ +struct pci_device_table ipmi2_devs[] = { + {PCI_CLASS(PCI_SERIALBUS), PCI_SUBCLASS(PCIS_SERIALBUS_IPMI), + PCI_DESCR("IPMI System Interface")} +}; static int ipmi2_pci_probe(device_t dev) { + const struct pci_device_table *ipmi2d; - if (pci_get_class(dev) == PCIC_SERIALBUS && - pci_get_subclass(dev) == PCIS_SERIALBUS_IPMI) { - device_set_desc(dev, "IPMI System Interface"); - return (BUS_PROBE_GENERIC); - } - - return (ENXIO); + ipmi2d = PCI_MATCH(dev, ipmi2_devs); + if (ipmi2d == NULL) + return (ENXIO); + device_set_desc(dev, ipmi2d->descr); + return (BUS_PROBE_GENERIC); } static int @@ -292,3 +277,4 @@ }; DRIVER_MODULE(ipmi2_pci, pci, ipmi2_pci_driver, ipmi_devclass, 0, 0); +PCI_PNP_INFO(ipmi2_devs); Index: sys/dev/isci/isci.c =================================================================== --- sys/dev/isci/isci.c +++ sys/dev/isci/isci.c @@ -54,6 +54,7 @@ #include #include #include +#define INTEL_VENDOR_ID 0x8086 MALLOC_DEFINE(M_ISCI, "isci", "isci driver memory allocations"); @@ -85,49 +86,55 @@ sizeof(struct isci_softc), }; +struct pci_device_table isci_devs[] = { + {PCI_DEV(INTEL_VENDOR_ID, 0x1d60), + PCI_DESCR("Intel(R) C600 Series Chipset SAS Controller")}, + {PCI_DEV(INTEL_VENDOR_ID, 0x1d61), + PCI_DESCR("Intel(R) C600 Series Chipset SAS Controller (SATA mode)")}, + {PCI_DEV(INTEL_VENDOR_ID, 0x1d62), + PCI_DESCR("Intel(R) C600 Series Chipset SAS Controller")}, + {PCI_DEV(INTEL_VENDOR_ID, 0x1d63), + PCI_DESCR("Intel(R) C600 Series Chipset SAS Controller")}, + {PCI_DEV(INTEL_VENDOR_ID, 0x1d64), + PCI_DESCR("Intel(R) C600 Series Chipset SAS Controller")}, + {PCI_DEV(INTEL_VENDOR_ID, 0x1d65), + PCI_DESCR("Intel(R) C600 Series Chipset SAS Controller")}, + {PCI_DEV(INTEL_VENDOR_ID, 0x1d66), + PCI_DESCR("Intel(R) C600 Series Chipset SAS Controller")}, + {PCI_DEV(INTEL_VENDOR_ID, 0x1d67), + PCI_DESCR("Intel(R) C600 Series Chipset SAS Controller")}, + {PCI_DEV(INTEL_VENDOR_ID, 0x1d68), + PCI_DESCR("Intel(R) C600 Series Chipset SAS Controller")}, + {PCI_DEV(INTEL_VENDOR_ID, 0x1d69), + PCI_DESCR("Intel(R) C600 Series Chipset SAS Controller")}, + {PCI_DEV(INTEL_VENDOR_ID, 0x1d6a), + PCI_DESCR("Intel(R) C600 Series Chipset SAS Controller (SATA mode)")}, + {PCI_DEV(INTEL_VENDOR_ID, 0x1d6b), + PCI_DESCR("Intel(R) C600 Series Chipset SAS Controller (SATA mode)")}, + {PCI_DEV(INTEL_VENDOR_ID, 0x1d6c), + PCI_DESCR("Intel(R) C600 Series Chipset SAS Controller")}, + {PCI_DEV(INTEL_VENDOR_ID, 0x1d6d), + PCI_DESCR("Intel(R) C600 Series Chipset SAS Controller")}, + {PCI_DEV(INTEL_VENDOR_ID, 0x1d6e), + PCI_DESCR("Intel(R) C600 Series Chipset SAS Controller")}, + {PCI_DEV(INTEL_VENDOR_ID, 0x1d6f), + PCI_DESCR("Intel(R) C600 Series Chipset SAS Controller (SATA mode)")} +}; + DRIVER_MODULE(isci, pci, isci_pci_driver, isci_devclass, 0, 0); +PCI_PNP_INFO(isci_devs); MODULE_DEPEND(isci, cam, 1, 1, 1); -static struct _pcsid -{ - u_int32_t type; - const char *desc; -} pci_ids[] = { - { 0x1d608086, "Intel(R) C600 Series Chipset SAS Controller" }, - { 0x1d618086, "Intel(R) C600 Series Chipset SAS Controller (SATA mode)" }, - { 0x1d628086, "Intel(R) C600 Series Chipset SAS Controller" }, - { 0x1d638086, "Intel(R) C600 Series Chipset SAS Controller" }, - { 0x1d648086, "Intel(R) C600 Series Chipset SAS Controller" }, - { 0x1d658086, "Intel(R) C600 Series Chipset SAS Controller" }, - { 0x1d668086, "Intel(R) C600 Series Chipset SAS Controller" }, - { 0x1d678086, "Intel(R) C600 Series Chipset SAS Controller" }, - { 0x1d688086, "Intel(R) C600 Series Chipset SAS Controller" }, - { 0x1d698086, "Intel(R) C600 Series Chipset SAS Controller" }, - { 0x1d6a8086, "Intel(R) C600 Series Chipset SAS Controller (SATA mode)" }, - { 0x1d6b8086, "Intel(R) C600 Series Chipset SAS Controller (SATA mode)" }, - { 0x1d6c8086, "Intel(R) C600 Series Chipset SAS Controller" }, - { 0x1d6d8086, "Intel(R) C600 Series Chipset SAS Controller" }, - { 0x1d6e8086, "Intel(R) C600 Series Chipset SAS Controller" }, - { 0x1d6f8086, "Intel(R) C600 Series Chipset SAS Controller (SATA mode)" }, - { 0x00000000, NULL } -}; - static int isci_probe (device_t device) { - u_int32_t type = pci_get_devid(device); - struct _pcsid *ep = pci_ids; + const struct pci_device_table *iscd; - while (ep->type && ep->type != type) - ++ep; - - if (ep->desc) - { - device_set_desc(device, ep->desc); - return (BUS_PROBE_DEFAULT); - } - else + iscd = PCI_MATCH(dev, isci_devs); + if (iscd == NULL) return (ENXIO); + device_set_desc(device, iscd->descr); + return (BUS_PROBE_DEFAULT); } static int Index: sys/dev/isp/isp_pci.c =================================================================== --- sys/dev/isp/isp_pci.c +++ sys/dev/isp/isp_pci.c @@ -304,6 +304,58 @@ #define PCI_DFLT_LTNCY 0x40 #define PCI_DFLT_LNSZ 0x10 +struct pci_device_table isp_devs[] = { + {PCI_DEV(PCI_VENDOR_QLOGIC, PCI_PRODUCT_QLOGIC_ISP1020), + PCI_DESCR("Qlogic ISP 1020/1040 PCI SCSI Adapter")}, + {PCI_DEV(PCI_VENDOR_QLOGIC, PCI_PRODUCT_QLOGIC_ISP1080), + PCI_DESCR("Qlogic ISP 1080 PCI SCSI Adapter")}, + {PCI_DEV(PCI_VENDOR_QLOGIC, PCI_PRODUCT_QLOGIC_ISP1240), + PCI_DESCR("Qlogic ISP 1240 PCI SCSI Adapter")}, + {PCI_DEV(PCI_VENDOR_QLOGIC, PCI_PRODUCT_QLOGIC_ISP1280), + PCI_DESCR("Qlogic ISP 1280 PCI SCSI Adapter")}, + {PCI_DEV(PCI_VENDOR_QLOGIC, PCI_PRODUCT_QLOGIC_ISP10160), + PCI_DESCR("Qlogic ISP 10160 PCI SCSI Adapter")}, + {PCI_DEV(PCI_VENDOR_QLOGIC, PCI_PRODUCT_QLOGIC_ISP12160), + PCI_DESCR("Qlogic ISP 12160 PCI SCSI Adapter")}, + {PCI_DEV(PCI_VENDOR_QLOGIC, PCI_PRODUCT_QLOGIC_ISP1280), + PCI_DESCR("Qlogic ISP 1280 PCI SCSI Adapter")}, + {PCI_DEV(PCI_VENDOR_QLOGIC, PCI_PRODUCT_QLOGIC_ISP2100), + PCI_DESCR("Qlogic ISP 2100 PCI FC-AL Adapter")}, + {PCI_DEV(PCI_VENDOR_QLOGIC, PCI_PRODUCT_QLOGIC_ISP2200), + PCI_DESCR("Qlogic ISP 2200 PCI FC-AL Adapter")}, + {PCI_DEV(PCI_VENDOR_QLOGIC, PCI_PRODUCT_QLOGIC_ISP2300), + PCI_DESCR("Qlogic ISP 2300 PCI FC-AL Adapter")}, + {PCI_DEV(PCI_VENDOR_QLOGIC, PCI_PRODUCT_QLOGIC_ISP2312), + PCI_DESCR("Qlogic ISP 2312 PCI FC-AL Adapter")}, + {PCI_DEV(PCI_VENDOR_QLOGIC, PCI_PRODUCT_QLOGIC_ISP2322), + PCI_DESCR("Qlogic ISP 2322 PCI FC-AL Adapter")}, + {PCI_DEV(PCI_VENDOR_QLOGIC, PCI_PRODUCT_QLOGIC_ISP2422), + PCI_DESCR("Qlogic ISP 2422 PCI FC-AL Adapter")}, + {PCI_DEV(PCI_VENDOR_QLOGIC, PCI_PRODUCT_QLOGIC_ISP2432), + PCI_DESCR("Qlogic ISP 2432 PCI FC-AL Adapter")}, + {PCI_DEV(PCI_VENDOR_QLOGIC, PCI_PRODUCT_QLOGIC_ISP2532), + PCI_DESCR("Qlogic ISP 2532 PCI FC-AL Adapter")}, + {PCI_DEV(PCI_VENDOR_QLOGIC, PCI_PRODUCT_QLOGIC_ISP5432), + PCI_DESCR("Qlogic ISP 5432 PCI FC-AL Adapter")}, + {PCI_DEV(PCI_VENDOR_QLOGIC, PCI_PRODUCT_QLOGIC_ISP6312), + PCI_DESCR("Qlogic ISP 6312 PCI FC-AL Adapter")}, + {PCI_DEV(PCI_VENDOR_QLOGIC, PCI_PRODUCT_QLOGIC_ISP6322), + PCI_DESCR("Qlogic ISP 6322 PCI FC-AL Adapter")}, + {PCI_DEV(PCI_VENDOR_QLOGIC, PCI_PRODUCT_QLOGIC_ISP2031), + PCI_DESCR("Qlogic ISP 2031 PCI FC-AL Adapter")}, + {PCI_DEV(PCI_VENDOR_QLOGIC, PCI_PRODUCT_QLOGIC_ISP8031), + PCI_DESCR("Qlogic ISP 8031 PCI FCoE Adapter")}, + {PCI_DEV(PCI_VENDOR_QLOGIC, PCI_PRODUCT_QLOGIC_ISP2684), + PCI_DESCR("Qlogic ISP 2684 PCI FC Adapter")}, + {PCI_DEV(PCI_VENDOR_QLOGIC, PCI_PRODUCT_QLOGIC_ISP2692), + PCI_DESCR("Qlogic ISP 2692 PCI FC Adapter")}, + {PCI_DEV(PCI_VENDOR_QLOGIC, PCI_PRODUCT_QLOGIC_ISP2714), + PCI_DESCR("Qlogic ISP 2714 PCI FC Adapter")}, + {PCI_DEV(PCI_VENDOR_QLOGIC, PCI_PRODUCT_QLOGIC_ISP2722), + PCI_DESCR("Qlogic ISP 2722 PCI FC Adapter")} + +}; + static int isp_pci_probe (device_t); static int isp_pci_attach (device_t); static int isp_pci_detach (device_t); @@ -346,6 +398,7 @@ }; static devclass_t isp_devclass; DRIVER_MODULE(isp, pci, isp_pci_driver, isp_devclass, 0, 0); +PCI_PNP_INFO(isp_devs); MODULE_DEPEND(isp, cam, 1, 1, 1); MODULE_DEPEND(isp, firmware, 1, 1, 1); static int isp_nvports = 0; @@ -353,82 +406,15 @@ static int isp_pci_probe(device_t dev) { - switch ((pci_get_device(dev) << 16) | (pci_get_vendor(dev))) { - case PCI_QLOGIC_ISP1020: - device_set_desc(dev, "Qlogic ISP 1020/1040 PCI SCSI Adapter"); - break; - case PCI_QLOGIC_ISP1080: - device_set_desc(dev, "Qlogic ISP 1080 PCI SCSI Adapter"); - break; - case PCI_QLOGIC_ISP1240: - device_set_desc(dev, "Qlogic ISP 1240 PCI SCSI Adapter"); - break; - case PCI_QLOGIC_ISP1280: - device_set_desc(dev, "Qlogic ISP 1280 PCI SCSI Adapter"); - break; - case PCI_QLOGIC_ISP10160: - device_set_desc(dev, "Qlogic ISP 10160 PCI SCSI Adapter"); - break; - case PCI_QLOGIC_ISP12160: - if (pci_get_subvendor(dev) == AMI_RAID_SUBVENDOR_ID) { - return (ENXIO); - } - device_set_desc(dev, "Qlogic ISP 12160 PCI SCSI Adapter"); - break; - case PCI_QLOGIC_ISP2100: - device_set_desc(dev, "Qlogic ISP 2100 PCI FC-AL Adapter"); - break; - case PCI_QLOGIC_ISP2200: - device_set_desc(dev, "Qlogic ISP 2200 PCI FC-AL Adapter"); - break; - case PCI_QLOGIC_ISP2300: - device_set_desc(dev, "Qlogic ISP 2300 PCI FC-AL Adapter"); - break; - case PCI_QLOGIC_ISP2312: - device_set_desc(dev, "Qlogic ISP 2312 PCI FC-AL Adapter"); - break; - case PCI_QLOGIC_ISP2322: - device_set_desc(dev, "Qlogic ISP 2322 PCI FC-AL Adapter"); - break; - case PCI_QLOGIC_ISP2422: - device_set_desc(dev, "Qlogic ISP 2422 PCI FC-AL Adapter"); - break; - case PCI_QLOGIC_ISP2432: - device_set_desc(dev, "Qlogic ISP 2432 PCI FC-AL Adapter"); - break; - case PCI_QLOGIC_ISP2532: - device_set_desc(dev, "Qlogic ISP 2532 PCI FC-AL Adapter"); - break; - case PCI_QLOGIC_ISP5432: - device_set_desc(dev, "Qlogic ISP 5432 PCI FC-AL Adapter"); - break; - case PCI_QLOGIC_ISP6312: - device_set_desc(dev, "Qlogic ISP 6312 PCI FC-AL Adapter"); - break; - case PCI_QLOGIC_ISP6322: - device_set_desc(dev, "Qlogic ISP 6322 PCI FC-AL Adapter"); - break; - case PCI_QLOGIC_ISP2031: - device_set_desc(dev, "Qlogic ISP 2031 PCI FC-AL Adapter"); - break; - case PCI_QLOGIC_ISP8031: - device_set_desc(dev, "Qlogic ISP 8031 PCI FCoE Adapter"); - break; - case PCI_QLOGIC_ISP2684: - device_set_desc(dev, "Qlogic ISP 2684 PCI FC Adapter"); - break; - case PCI_QLOGIC_ISP2692: - device_set_desc(dev, "Qlogic ISP 2692 PCI FC Adapter"); - break; - case PCI_QLOGIC_ISP2714: - device_set_desc(dev, "Qlogic ISP 2714 PCI FC Adapter"); - break; - case PCI_QLOGIC_ISP2722: - device_set_desc(dev, "Qlogic ISP 2722 PCI FC Adapter"); - break; - default: + const struct pci_device_table *ispd; + + ispd = PCI_MATCH(dev, isp_devs); + if (ispd == NULL) return (ENXIO); - } + else if (ispd->device == PCI_PRODUCT_QLOGIC_ISP12160 && + pci_get_subvendor(dev) == AMI_RAID_SUBVENDOR_ID) + return (ENXIO); + device_set_desc(dev, ispd->descr); if (isp_announced == 0 && bootverbose) { printf("Qlogic ISP Driver, FreeBSD Version %d.%d, " "Core Version %d.%d\n", Index: sys/dev/iwi/if_iwi.c =================================================================== --- sys/dev/iwi/if_iwi.c +++ sys/dev/iwi/if_iwi.c @@ -123,13 +123,15 @@ const char *name; }; -static const struct iwi_ident iwi_ident_table[] = { - { 0x8086, 0x4220, "Intel(R) PRO/Wireless 2200BG" }, - { 0x8086, 0x4221, "Intel(R) PRO/Wireless 2225BG" }, - { 0x8086, 0x4223, "Intel(R) PRO/Wireless 2915ABG" }, - { 0x8086, 0x4224, "Intel(R) PRO/Wireless 2915ABG" }, - - { 0, 0, NULL } +struct pci_device_table iwi_devs[] = { + {PCI_DEV(0x8086, 0x4220), + PCI_DESCR("Intel(R) PRO/Wireless 2200BG")}, + {PCI_DEV(0x8086, 0x4221), + PCI_DESCR("Intel(R) PRO/Wireless 2225BG")}, + {PCI_DEV(0x8086, 0x4223), + PCI_DESCR("Intel(R) PRO/Wireless 2915ABG")}, + {PCI_DEV(0x8086, 0x4224), + PCI_DESCR("Intel(R) PRO/Wireless 2915ABG")} }; static const uint8_t def_chan_2ghz[] = @@ -247,6 +249,7 @@ static devclass_t iwi_devclass; DRIVER_MODULE(iwi, pci, iwi_driver, iwi_devclass, NULL, NULL); +PCI_PNP_INFO(iwi_devs); MODULE_VERSION(iwi, 1); @@ -267,16 +270,13 @@ static int iwi_probe(device_t dev) { - const struct iwi_ident *ident; + const struct pci_device_table *iwid; - for (ident = iwi_ident_table; ident->name != NULL; ident++) { - if (pci_get_vendor(dev) == ident->vendor && - pci_get_device(dev) == ident->device) { - device_set_desc(dev, ident->name); - return (BUS_PROBE_DEFAULT); - } - } - return ENXIO; + iwid = PCI_MATCH(dev, iwi_devs); + if (iwid == NULL) + return (ENXIO); + device_set_desc(dev, iwid->descr); + return (BUS_PROBE_DEFAULT); } static int Index: sys/dev/iwn/if_iwn.c =================================================================== --- sys/dev/iwn/if_iwn.c +++ sys/dev/iwn/if_iwn.c @@ -372,7 +372,8 @@ static devclass_t iwn_devclass; DRIVER_MODULE(iwn, pci, iwn_driver, iwn_devclass, NULL, NULL); - +MODULE_PNP_INFO("U16:vendor;U16:device;D:#", pci, iwn, iwn_ident_table, + sizeof(iwn_ident_table[0]), nitems(iwn_ident_table) - 1); MODULE_VERSION(iwn, 1); MODULE_DEPEND(iwn, firmware, 1, 1, 1); Index: sys/dev/ixl/if_ixl.c =================================================================== --- sys/dev/ixl/if_ixl.c +++ sys/dev/ixl/if_ixl.c @@ -150,6 +150,7 @@ devclass_t ixl_devclass; DRIVER_MODULE(ixl, pci, ixl_driver, ixl_devclass, 0, 0); +IFLIB_PNP_INFO(pci, ixl, ixl_vendor_info_array); MODULE_VERSION(ixl, 3); MODULE_DEPEND(ixl, pci, 1, 1, 1); Index: sys/dev/ixl/if_ixlv.c =================================================================== --- sys/dev/ixl/if_ixlv.c +++ sys/dev/ixl/if_ixlv.c @@ -149,7 +149,9 @@ devclass_t ixlv_devclass; DRIVER_MODULE(ixlv, pci, ixlv_driver, ixlv_devclass, 0, 0); - +MODULE_PNP_INFO("U32:vendor;U32:device;U32:subvendor;U32:subdevice;U32:revision", + pci, ixlv, ixlv_vendor_info_array, sizeof(ixlv_vendor_info_array[0]), + nitems(ixlv_vendor_info_array) - 1); MODULE_DEPEND(ixlv, pci, 1, 1, 1); MODULE_DEPEND(ixlv, ether, 1, 1, 1); MODULE_DEPEND(ixlv, iflib, 1, 1, 1);