Index: sys/dev/arcmsr/arcmsr.c =================================================================== --- sys/dev/arcmsr/arcmsr.c +++ sys/dev/arcmsr/arcmsr.c @@ -213,6 +213,96 @@ static d_close_t arcmsr_close; static d_ioctl_t arcmsr_ioctl; +static struct arcmsr_dev { + uint16_t vendorid; + uint32_t deviceid; + uint16_t subdeviceid; + char *description; +} arcmsr_devs[] = { + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1110, 0, + "Areca SATA 3G Host Adapter RAID Controller"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1200, 0, + "Areca SATA 3G Host Adapter RAID Controller"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1201, 0, + "Areca SATA 3G Host Adapter RAID Controller"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1210, 0, + "Areca SATA 3G Host Adapter RAID Controller"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1120, 0, + "Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1130, 0, + "Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1160, 0, + "Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1170, 0, + "Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1220, 0, + "Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1230, 0, + "Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1231, 0, + "Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1260, 0, + "Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1261, 0, + "Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1270, 0, + "Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1280, 0, + "Areca SATA 3G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1212, 0, + "Areca SAS 3G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1222, 0, + "Areca SAS 3G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1380, 0, + "Areca SAS 3G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1381, 0, + "Areca SAS 3G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1680, 0, + "Areca SAS 3G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1681, 0, + "Areca SAS 3G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1880, 0, + "Areca SAS 6G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1882, 0, + "Areca SAS 6G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1213, 0, + "Areca SAS 6G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1223, 0, + "Areca SAS 6G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1880, ARECA_SUB_DEV_ID_1883, + "Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1882, ARECA_SUB_DEV_ID_1883, + "Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1213, ARECA_SUB_DEV_ID_1883, + "Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1223, ARECA_SUB_DEV_ID_1883, + "Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1880, ARECA_SUB_DEV_ID_1216, + "Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1882, ARECA_SUB_DEV_ID_1216, + "Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1213, ARECA_SUB_DEV_ID_1216, + "Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1223, ARECA_SUB_DEV_ID_1216, + "Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1880, ARECA_SUB_DEV_ID_1226, + "Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1882, ARECA_SUB_DEV_ID_1226, + "Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1213, ARECA_SUB_DEV_ID_1226, + "Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1223, ARECA_SUB_DEV_ID_1226, + "Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1884, 0, + "Areca SAS 12G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1214, 0, + "Areca SATA 6G Host Adapter RAID Controller\n(RAID6 capable)"}, + {PCI_VENDOR_ID_ARECA, PCIDevVenIDARC1203, 0, + "Areca SATA 6G Host Adapter RAID Controller\n(RAID6 capable)"}, + {0, 0, 0, 0}, +}; + + static device_method_t arcmsr_methods[]={ DEVMETHOD(device_probe, arcmsr_probe), DEVMETHOD(device_attach, arcmsr_attach), @@ -234,6 +324,8 @@ static devclass_t arcmsr_devclass; DRIVER_MODULE(arcmsr, pci, arcmsr_driver, arcmsr_devclass, 0, 0); +MODULE_PNP_INFO("U16:vendor;W32:vendor/device;U16:subdevice;D:#", pci, arcmsr, + arcmsr_devs, sizeof(arcmsr_devs[0]), nitems(arcmsr_devs) - 1); MODULE_DEPEND(arcmsr, pci, 1, 1, 1); MODULE_DEPEND(arcmsr, cam, 1, 1, 1); #ifndef BUS_DMA_COHERENT @@ -4908,74 +5000,28 @@ */ static int arcmsr_probe(device_t dev) { - u_int32_t id; + const struct arcmsr_dev *arcd; + u_int32_t did; + size_t i; u_int16_t sub_device_id; - static char buf[256]; - char x_type[]={"unknown"}; - char *type; - int raid6 = 1; + char buf[256]; if (pci_get_vendor(dev) != PCI_VENDOR_ID_ARECA) { return (ENXIO); } + did = pci_get_devid(dev); sub_device_id = pci_read_config(dev, PCIR_SUBDEV_0, 2); - switch(id = pci_get_devid(dev)) { - case PCIDevVenIDARC1110: - case PCIDevVenIDARC1200: - case PCIDevVenIDARC1201: - case PCIDevVenIDARC1210: - raid6 = 0; - /*FALLTHRU*/ - case PCIDevVenIDARC1120: - case PCIDevVenIDARC1130: - case PCIDevVenIDARC1160: - case PCIDevVenIDARC1170: - case PCIDevVenIDARC1220: - case PCIDevVenIDARC1230: - case PCIDevVenIDARC1231: - case PCIDevVenIDARC1260: - case PCIDevVenIDARC1261: - case PCIDevVenIDARC1270: - case PCIDevVenIDARC1280: - type = "SATA 3G"; - break; - case PCIDevVenIDARC1212: - case PCIDevVenIDARC1222: - case PCIDevVenIDARC1380: - case PCIDevVenIDARC1381: - case PCIDevVenIDARC1680: - case PCIDevVenIDARC1681: - type = "SAS 3G"; - break; - case PCIDevVenIDARC1880: - case PCIDevVenIDARC1882: - case PCIDevVenIDARC1213: - case PCIDevVenIDARC1223: - if ((sub_device_id == ARECA_SUB_DEV_ID_1883) || - (sub_device_id == ARECA_SUB_DEV_ID_1216) || - (sub_device_id == ARECA_SUB_DEV_ID_1226)) - type = "SAS 12G"; - else - type = "SAS 6G"; - break; - case PCIDevVenIDARC1884: - type = "SAS 12G"; - break; - case PCIDevVenIDARC1214: - case PCIDevVenIDARC1203: - type = "SATA 6G"; - break; - default: - type = x_type; - raid6 = 0; - break; + for (i = 0; i < nitems(arcmsr_devs); i++) { + arcd = &arcmsr_devs[i]; + if ((arcd->deviceid == did) && + ((arcd->subdeviceid == sub_device_id) + || (arcd->subdeviceid == 0))) { + sprintf(buf, "%s\n%s\n", arcd->description, ARCMSR_DRIVER_VERSION); + device_set_desc_copy(dev, buf); + return (BUS_PROBE_DEFAULT); + } } - if(type == x_type) - return(ENXIO); - sprintf(buf, "Areca %s Host Adapter RAID Controller %s\n%s\n", - type, raid6 ? "(RAID6 capable)" : "", ARCMSR_DRIVER_VERSION); - device_set_desc_copy(dev, buf); - return (BUS_PROBE_DEFAULT); + return(ENXIO); } /* ************************************************************************ Index: sys/dev/buslogic/bt_pci.c =================================================================== --- sys/dev/buslogic/bt_pci.c +++ sys/dev/buslogic/bt_pci.c @@ -56,6 +56,18 @@ #define PCI_DEVICE_ID_BUSLOGIC_MULTIMASTER_NC 0x0140104Bul #define PCI_DEVICE_ID_BUSLOGIC_FLASHPOINT 0x8130104Bul +static struct bt_dev { + uint16_t vendorid; + uint32_t deviceid; + const char *description; +} bt_devs[] = { + {0x104B, PCI_DEVICE_ID_BUSLOGIC_MULTIMASTER, + "Buslogic Multi-Master SCSI Host Adapter"}, + {0x104B, PCI_DEVICE_ID_BUSLOGIC_MULTIMASTER_NC, + "Buslogic Multi-Master SCSI Host Adapter"}, + {0, 0, 0}, +}; + static int bt_pci_alloc_resources(device_t dev) { @@ -106,10 +118,14 @@ static int bt_pci_probe(device_t dev) { - switch (pci_get_devid(dev)) { - case PCI_DEVICE_ID_BUSLOGIC_MULTIMASTER: - case PCI_DEVICE_ID_BUSLOGIC_MULTIMASTER_NC: - { + const struct bt_dev *btd; + uint32_t did; + size_t i; + + did = pci_get_devid(dev); + for (i = 0; i < nitems(bt_devs) - 1; i++) { + btd = &bt_devs[i]; + if (btd->deviceid == did) { struct bt_softc *bt = device_get_softc(dev); pci_info_data_t pci_info; int error; @@ -128,29 +144,26 @@ /*param*/NULL, /*paramlen*/0, (u_int8_t*)&pci_info, sizeof(pci_info), DEFAULT_CMD_TIMEOUT); - if (error == 0 - && pci_info.io_port < BIO_DISABLED) { - bt_mark_probed_bio(pci_info.io_port); - if (rman_get_start(bt->port) != - bt_iop_from_bio(pci_info.io_port)) { - u_int8_t new_addr; - - new_addr = BIO_DISABLED; - bt_cmd(bt, BOP_MODIFY_IO_ADDR, - /*param*/&new_addr, - /*paramlen*/1, /*reply_buf*/NULL, - /*reply_len*/0, - DEFAULT_CMD_TIMEOUT); + if (error == 0 + && pci_info.io_port < BIO_DISABLED) { + bt_mark_probed_bio(pci_info.io_port); + if (rman_get_start(bt->port) != + bt_iop_from_bio(pci_info.io_port)) { + u_int8_t new_addr; + + new_addr = BIO_DISABLED; + bt_cmd(bt, BOP_MODIFY_IO_ADDR, + /*param*/&new_addr, + /*paramlen*/1, /*reply_buf*/NULL, + /*reply_len*/0, + DEFAULT_CMD_TIMEOUT); } - } - bt_pci_release_resources(dev); - device_set_desc(dev, "Buslogic Multi-Master SCSI Host Adapter"); - return (BUS_PROBE_DEFAULT); + } + bt_pci_release_resources(dev); + device_set_desc(dev, btd->description); + return (BUS_PROBE_DEFAULT); } - default: - break; } - return (ENXIO); } @@ -218,4 +231,6 @@ static devclass_t bt_devclass; DRIVER_MODULE(bt, pci, bt_pci_driver, bt_devclass, 0, 0); +MODULE_PNP_INFO("U16:vendor;W32:vendor/device;D:#", pci, bt, bt_devs, + sizeof(bt_devs[0]), nitems(bt_devs) - 1); MODULE_DEPEND(bt, pci, 1, 1, 1); Index: sys/dev/de/if_de.c =================================================================== --- sys/dev/de/if_de.c +++ sys/dev/de/if_de.c @@ -161,6 +161,21 @@ static void tulip_dma_map_rxbuf(void *, bus_dma_segment_t *, int, bus_size_t, int); +static struct de_dev { + uint16_t vendorid; + uint16_t deviceid; + uint8_t revid; + const char *description; +} de_devs[] = { + {DEC_VENDORID, CHIPID_21040, 0, "Digital 21040 Ethernet"}, + {DEC_VENDORID, CHIPID_21041, 0, "Digital 21041 Ethernet"}, + {DEC_VENDORID, CHIPID_21140, 0, "Digital 21140 Fast Ethernet"}, + {DEC_VENDORID, CHIPID_21140, 0x20, "Digital 21140A Fast Ethernet"}, + {DEC_VENDORID, CHIPID_21142, 0, "Digital 21142 Fast Ethernet"}, + {DEC_VENDORID, CHIPID_21142, 0x20, "Digital 21143 Fast Ethernet"}, + {0, 0, 0, 0}, +}; + static void tulip_dma_map_addr(void *arg, bus_dma_segment_t *segs, int nseg, int error) { @@ -4670,43 +4685,39 @@ static int tulip_pci_probe(device_t dev) { - const char *name = NULL; + const char *name = NULL; + const struct de_dev *ded; + uint16_t vid; + uint16_t did; + uint8_t revid; + size_t i; + + vid = pci_get_vendor(dev); + did = pci_get_device(dev); + revid = pci_get_revid(dev); + + if (vid != DEC_VENDORID) + return ENXIO; - if (pci_get_vendor(dev) != DEC_VENDORID) - return ENXIO; + /* + * Some LanMedia WAN cards use the Tulip chip, but they have + * their own driver, and we should not recognize them + */ + if (pci_get_subvendor(dev) == 0x1376) + return ENXIO; - /* - * Some LanMedia WAN cards use the Tulip chip, but they have - * their own driver, and we should not recognize them - */ - if (pci_get_subvendor(dev) == 0x1376) + for (i = 0; i < nitems(de_devs); i++) { + ded = &de_devs[i]; + if ((ded->deviceid == did) && + ((revid >= ded->revid) || (ded->revid == 0))) { + name = ded->description; + } + } + if (name) { + device_set_desc(dev, name); + return BUS_PROBE_LOW_PRIORITY; + } return ENXIO; - - switch (pci_get_device(dev)) { - case CHIPID_21040: - name = "Digital 21040 Ethernet"; - break; - case CHIPID_21041: - name = "Digital 21041 Ethernet"; - break; - case CHIPID_21140: - if (pci_get_revid(dev) >= 0x20) - name = "Digital 21140A Fast Ethernet"; - else - name = "Digital 21140 Fast Ethernet"; - break; - case CHIPID_21142: - if (pci_get_revid(dev) >= 0x20) - name = "Digital 21143 Fast Ethernet"; - else - name = "Digital 21142 Fast Ethernet"; - break; - } - if (name) { - device_set_desc(dev, name); - return BUS_PROBE_LOW_PRIORITY; - } - return ENXIO; } static int @@ -4908,6 +4919,8 @@ static devclass_t tulip_devclass; DRIVER_MODULE(de, pci, tulip_pci_driver, tulip_devclass, 0, 0); +MODULE_PNP_INFO("U16:vendor;U16:device", pci, de, de_devs, + sizeof(de_devs[0]), nitems(de_devs) - 1); #ifdef DDB void tulip_dumpring(int unit, int ring); Index: sys/dev/hifn/hifn7751.c =================================================================== --- sys/dev/hifn/hifn7751.c +++ sys/dev/hifn/hifn7751.c @@ -106,6 +106,21 @@ static int hifn_freesession(device_t, u_int64_t); static int hifn_process(device_t, struct cryptop *, int); +static struct hifn_dev { + uint16_t vendorid; + uint16_t deviceid; +} hifn_devs[] = { + {PCI_VENDOR_INVERTEX, PCI_PRODUCT_INVERTEX_AEON}, + {PCI_VENDOR_HIFN, PCI_PRODUCT_HIFN_7751}, + {PCI_VENDOR_HIFN, PCI_PRODUCT_HIFN_7951}, + {PCI_VENDOR_HIFN, PCI_PRODUCT_HIFN_7955}, + {PCI_VENDOR_HIFN, PCI_PRODUCT_HIFN_7956}, + {PCI_VENDOR_HIFN, PCI_PRODUCT_HIFN_7811}, + {PCI_VENDOR_NETSEC, PCI_PRODUCT_NETSEC_7751}, + {0, 0}, +}; + + static device_method_t hifn_methods[] = { /* Device interface */ DEVMETHOD(device_probe, hifn_probe), @@ -130,6 +145,8 @@ static devclass_t hifn_devclass; DRIVER_MODULE(hifn, pci, hifn_driver, hifn_devclass, 0, 0); +MODULE_PNP_INFO("U16:vendor;U16:device", pci, hifn, hifn_devs, + sizeof(hifn_devs[0]), nitems(hifn_devs) - 1); MODULE_DEPEND(hifn, crypto, 1, 1, 1); #ifdef HIFN_RNDTEST MODULE_DEPEND(hifn, rndtest, 1, 1, 1); @@ -205,19 +222,20 @@ static int hifn_probe(device_t dev) { - if (pci_get_vendor(dev) == PCI_VENDOR_INVERTEX && - pci_get_device(dev) == PCI_PRODUCT_INVERTEX_AEON) - return (BUS_PROBE_DEFAULT); - if (pci_get_vendor(dev) == PCI_VENDOR_HIFN && - (pci_get_device(dev) == PCI_PRODUCT_HIFN_7751 || - pci_get_device(dev) == PCI_PRODUCT_HIFN_7951 || - pci_get_device(dev) == PCI_PRODUCT_HIFN_7955 || - pci_get_device(dev) == PCI_PRODUCT_HIFN_7956 || - pci_get_device(dev) == PCI_PRODUCT_HIFN_7811)) - return (BUS_PROBE_DEFAULT); - if (pci_get_vendor(dev) == PCI_VENDOR_NETSEC && - pci_get_device(dev) == PCI_PRODUCT_NETSEC_7751) - return (BUS_PROBE_DEFAULT); + const struct hifn_dev *hifd; + size_t i; + u_int16_t vid; + u_int16_t did; + + vid = pci_get_vendor(dev); + did = pci_get_device(dev); + for (i = 0; i < nitems(hifn_devs); i++) { + hifd = &hifn_devs[i]; + if ((hifd->vendorid == vid) && + (hifd->deviceid == did)) { + return (BUS_PROBE_DEFAULT); + } + } return (ENXIO); } Index: sys/dev/hptiop/hptiop.c =================================================================== --- sys/dev/hptiop/hptiop.c +++ sys/dev/hptiop/hptiop.c @@ -1805,13 +1805,60 @@ sizeof(struct hpt_iop_hba) }; +static struct hptiop_dev { + uint16_t vendorid; + uint16_t deviceid; + const char *description; + struct hptiop_adapter_ops *ops; + int sas; +} hptiop_devs[] = { + {0x1103, 0x4520, "RocketRAID 4520 SAS Controller", + &hptiop_mvfrey_ops, 1}, + {0x1103, 0x4521, "RocketRAID 4521 SAS Controller", + &hptiop_mvfrey_ops, 1}, + {0x1103, 0x4522, "RocketRAID 4522 SAS Controller", + &hptiop_mvfrey_ops, 1}, + {0x1103, 0x3620, "RocketRAID 3620 SATA Controller", + &hptiop_mvfrey_ops, 0}, + {0x1103, 0x3622, "RocketRAID 3622 SATA Controller", + &hptiop_mvfrey_ops, 0}, + {0x1103, 0x3640, "RocketRAID 3640 SATA Controller", + &hptiop_mvfrey_ops, 0}, + {0x1103, 0x4210, "RocketRAID 4210 SAS Controller", &hptiop_itl_ops, 1}, + {0x1103, 0x4211, "RocketRAID 4211 SAS Controller", &hptiop_itl_ops, 1}, + {0x1103, 0x4310, "RocketRAID 4310 SAS Controller", &hptiop_itl_ops, 1}, + {0x1103, 0x4311, "RocketRAID 4311 SAS Controller", &hptiop_itl_ops, 1}, + {0x1103, 0x4320, "RocketRAID 4320 SAS Controller", &hptiop_itl_ops, 1}, + {0x1103, 0x4321, "RocketRAID 4321 SAS Controller", &hptiop_itl_ops, 1}, + {0x1103, 0x4322, "RocketRAID 4322 SAS Controller", &hptiop_itl_ops, 1}, + {0x1103, 0x3220, "RocketRAID 3220 SATA Controller", &hptiop_itl_ops, 0}, + {0x1103, 0x3320, "RocketRAID 3320 SATA Controller", &hptiop_itl_ops, 0}, + {0x1103, 0x3410, "RocketRAID 3410 SATA Controller", &hptiop_itl_ops, 0}, + {0x1103, 0x3520, "RocketRAID 3520 SATA Controller", &hptiop_itl_ops, 0}, + {0x1103, 0x3510, "RocketRAID 3510 SATA Controller", &hptiop_itl_ops, 0}, + {0x1103, 0x3511, "RocketRAID 3511 SATA Controller", &hptiop_itl_ops, 0}, + {0x1103, 0x3521, "RocketRAID 3521 SATA Controller", &hptiop_itl_ops, 0}, + {0x1103, 0x3522, "RocketRAID 3522 SATA Controller", &hptiop_itl_ops, 0}, + {0x1103, 0x3530, "RocketRAID 3530 SATA Controller", &hptiop_itl_ops, 0}, + {0x1103, 0x3540, "RocketRAID 3540 SATA Controller", &hptiop_itl_ops, 0}, + {0x1103, 0x3560, "RocketRAID 3560 SATA Controller", &hptiop_itl_ops, 0}, + {0x1103, 0x3020, "RocketRAID 3020 SATA Controller", &hptiop_mv_ops, 0}, + {0x1103, 0x3120, "RocketRAID 3120 SATA Controller", &hptiop_mv_ops, 0}, + {0x1103, 0x3122, "RocketRAID 3122 SATA Controller", &hptiop_mv_ops, 0}, + {0, 0, 0, 0, 0}, +}; + DRIVER_MODULE(hptiop, pci, hptiop_pci_driver, hptiop_devclass, 0, 0); +MODULE_PNP_INFO("U16:vendor;U16:device;D:#", pci, hptiop, hptiop_devs, + sizeof(hptiop_devs), nitems(hptiop_devs) - 1); MODULE_DEPEND(hptiop, cam, 1, 1, 1); static int hptiop_probe(device_t dev) { struct hpt_iop_hba *hba; - u_int32_t id; + const struct hptiop_dev *hptd; + size_t i; + u_int32_t did; static char buf[256]; int sas = 0; struct hptiop_adapter_ops *ops; @@ -1819,45 +1866,15 @@ if (pci_get_vendor(dev) != 0x1103) return (ENXIO); - id = pci_get_device(dev); - - switch (id) { - case 0x4520: - case 0x4521: - case 0x4522: - sas = 1; - case 0x3620: - case 0x3622: - case 0x3640: - ops = &hptiop_mvfrey_ops; - break; - case 0x4210: - case 0x4211: - case 0x4310: - case 0x4311: - case 0x4320: - case 0x4321: - case 0x4322: - sas = 1; - case 0x3220: - case 0x3320: - case 0x3410: - case 0x3520: - case 0x3510: - case 0x3511: - case 0x3521: - case 0x3522: - case 0x3530: - case 0x3540: - case 0x3560: - ops = &hptiop_itl_ops; - break; - case 0x3020: - case 0x3120: - case 0x3122: - ops = &hptiop_mv_ops; - break; - default: + did = pci_get_device(dev); + + for (i = 0; i < nitems(hptiop_devs); i++) { + hptd = &hptiop_devs[i]; + if (hptd->deviceid == did) { + sas = hptd->sas; + ops = hptd->ops; + } + else return (ENXIO); } @@ -1866,7 +1883,7 @@ pci_get_function(dev), pci_get_irq(dev)); sprintf(buf, "RocketRAID %x %s Controller\n", - id, sas ? "SAS" : "SATA"); + did, sas ? "SAS" : "SATA"); device_set_desc_copy(dev, buf); hba = (struct hpt_iop_hba *)device_get_softc(dev); Index: sys/dev/imcsmb/imcsmb_pci.c =================================================================== --- sys/dev/imcsmb/imcsmb_pci.c +++ sys/dev/imcsmb/imcsmb_pci.c @@ -129,22 +129,23 @@ }; static struct imcsmb_pci_device { - uint16_t id; + uint16_t vendorid; + uint16_t deviceid; char *name; } imcsmb_pci_devices[] = { - {IMCSMB_PCI_DEV_ID_IMC0_SBX, + {PCI_VENDOR_INTEL, IMCSMB_PCI_DEV_ID_IMC0_SBX, "Intel Sandybridge Xeon iMC 0 SMBus controllers" }, - {IMCSMB_PCI_DEV_ID_IMC0_IBX, + {PCI_VENDOR_INTEL, IMCSMB_PCI_DEV_ID_IMC0_IBX, "Intel Ivybridge Xeon iMC 0 SMBus controllers" }, - {IMCSMB_PCI_DEV_ID_IMC0_HSX, + {PCI_VENDOR_INTEL, IMCSMB_PCI_DEV_ID_IMC0_HSX, "Intel Haswell Xeon iMC 0 SMBus controllers" }, - {IMCSMB_PCI_DEV_ID_IMC1_HSX, + {PCI_VENDOR_INTEL, IMCSMB_PCI_DEV_ID_IMC1_HSX, "Intel Haswell Xeon iMC 1 SMBus controllers" }, - {IMCSMB_PCI_DEV_ID_IMC0_BDX, + {PCI_VENDOR_INTEL, IMCSMB_PCI_DEV_ID_IMC0_BDX, "Intel Broadwell Xeon iMC 0 SMBus controllers" }, - {IMCSMB_PCI_DEV_ID_IMC1_BDX, + {PCI_VENDOR_INTEL, IMCSMB_PCI_DEV_ID_IMC1_BDX, "Intel Broadwell Xeon iMC 1 SMBus controllers" }, - {0, NULL}, + {0, 0, NULL}, }; /* Device methods. */ @@ -247,9 +248,9 @@ pci_dev_id = pci_get_device(dev); for (pci_device = imcsmb_pci_devices; - pci_device->name != NULL; - pci_device++) { - if (pci_dev_id == pci_device->id) { + pci_device->name != NULL; + pci_device++) { + if (pci_dev_id == pci_device->deviceid) { device_set_desc(dev, pci_device->name); rc = BUS_PROBE_DEFAULT; goto out; @@ -339,6 +340,8 @@ }; DRIVER_MODULE(imcsmb_pci, pci, imcsmb_pci_driver, imcsmb_pci_devclass, 0, 0); +MODULE_PNP_INFO("U16:vendor;U16:device;D:#", pci, imcsmb_pci, imcsmb_pci_devices, + sizeof(imcsmb_pci_devices[0]), nitems(imcsmb_pci_devices) - 1); MODULE_DEPEND(imcsmb_pci, pci, 1, 1, 1); MODULE_VERSION(imcsmb_pci, 1); Index: sys/dev/pccbb/pccbb_pci.c =================================================================== --- sys/dev/pccbb/pccbb_pci.c +++ sys/dev/pccbb/pccbb_pci.c @@ -983,4 +983,6 @@ }; DRIVER_MODULE(cbb, pci, cbb_driver, cbb_devclass, 0, 0); +MODULE_PNP_INFO("W32:vendor/device;D:#", pci, cbb, yc_chipsets, + sizeof(yc_chipsets[0]), nitems(yc_chipsets) - 1); MODULE_DEPEND(cbb, exca, 1, 1, 1); Index: sys/dev/pci/fixup_pci.c =================================================================== --- sys/dev/pci/fixup_pci.c +++ sys/dev/pci/fixup_pci.c @@ -55,6 +55,15 @@ static void fixwsc_natoma(device_t dev); static void fixc1_nforce2(device_t dev); +static struct fixup_pci_dev { + uint32_t devid; + const char *description; +} fixup_pci_devs[] = { + {0x12378086, "Intel 82440FX (Natoma)"}, + {0x01e010de, "nVidia nForce2"}, + {0, 0}, +}; + static device_method_t fixup_pci_methods[] = { /* Device interface */ DEVMETHOD(device_probe, fixup_pci_probe), @@ -71,19 +80,24 @@ static devclass_t fixup_pci_devclass; DRIVER_MODULE(fixup_pci, pci, fixup_pci_driver, fixup_pci_devclass, 0, 0); +MODULE_PNP_INFO("W32:vendor/device;D:#", pci, fixup_pci, fixup_pci_devs, + sizeof(fixup_pci_devs[0]), nitems(fixup_pci_devs) - 1); static int fixup_pci_probe(device_t dev) { - switch (pci_get_devid(dev)) { - case 0x12378086: /* Intel 82440FX (Natoma) */ - fixwsc_natoma(dev); - break; - case 0x01e010de: /* nVidia nForce2 */ - fixc1_nforce2(dev); - break; - } - return(ENXIO); + const struct fixup_pci_dev *fixd; + uint32_t devid; + size_t i; + + devid = pci_get_devid(dev); + for (i = 0; i < nitems(fixup_pci_devs); i++) { + fixd = &fixup_pci_devs[i]; + if(fixd->devid == devid) { + fixwsc_natoma(dev); + } + } + return(ENXIO); } static void Index: sys/dev/sound/pci/emu10k1.c =================================================================== --- sys/dev/sound/pci/emu10k1.c +++ sys/dev/sound/pci/emu10k1.c @@ -157,6 +157,27 @@ #define A_EXTOUT_ADC_CAP_L 0x16 #define A_EXTOUT_ADC_CAP_R 0x17 +static struct emu_pci_dev { + uint32_t devid; + const char *description; + uint8_t rev; +} emu_pci_devs[] = { + {EMU10K1_PCI_ID, "Creative EMU10K1", 0}, + {EMU10K2_PCI_ID, "Creative Audigy (EMU10K2)", 0}, + {EMU10K2_PCI_ID, "Creative Audigy 2 (EMU10K2)", 0x04}, + {EMU10K3_PCI_ID, "Creative Audigy 2 (EMU10K3)", 0}, + {0, 0, 0}, +}; + +static struct emujoy_pci_dev { + uint32_t devid; + const char *description; +} emujoy_pci_devs[] = { + {0x70021102, "Creative EMU10K1 Joystick"}, + {0x70031102, "Creative EMU10K2 Joystick"}, + {0, 0}, +}; + struct emu_memblk { SLIST_ENTRY(emu_memblk) link; void *buf; @@ -2044,32 +2065,25 @@ static int emu_pci_probe(device_t dev) { - char *s = NULL; - - switch (pci_get_devid(dev)) { - case EMU10K1_PCI_ID: - s = "Creative EMU10K1"; - break; - - case EMU10K2_PCI_ID: - if (pci_get_revid(dev) == 0x04) - s = "Creative Audigy 2 (EMU10K2)"; - else - s = "Creative Audigy (EMU10K2)"; - break; - - case EMU10K3_PCI_ID: - s = "Creative Audigy 2 (EMU10K3)"; - break; - - default: - return ENXIO; + const struct emu_pci_dev *emud; + uint32_t devid; + size_t i; + uint8_t rev; + + devid = pci_get_devid(dev); + rev = pci_get_revid(dev); + for (i = 0; i < nitems(emu_pci_devs); i++) { + emud = &emu_pci_devs[i]; + if ((emud->devid == devid) && + ((emud->rev == rev) || emud->rev == 0)) { + device_set_desc(dev, emud->description); + return BUS_PROBE_LOW_PRIORITY; + } } - - device_set_desc(dev, s); - return BUS_PROBE_LOW_PRIORITY; + return ENXIO; } + static int emu_pci_attach(device_t dev) { @@ -2200,6 +2214,8 @@ }; DRIVER_MODULE(snd_emu10k1, pci, emu_driver, pcm_devclass, NULL, NULL); +MODULE_PNP_INFO("W32:vendor/device;D:#", pci, snd_emu101k1, + emu_pci_devs, sizeof(emu_pci_devs[0]), nitems(emu_pci_devs) - 1); MODULE_DEPEND(snd_emu10k1, sound, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER); MODULE_VERSION(snd_emu10k1, 1); MODULE_DEPEND(snd_emu10k1, midi, 1, 1, 1); @@ -2208,21 +2224,20 @@ static int emujoy_pci_probe(device_t dev) { - char *s = NULL; - - switch (pci_get_devid(dev)) { - case 0x70021102: - s = "Creative EMU10K1 Joystick"; - device_quiet(dev); - break; - case 0x70031102: - s = "Creative EMU10K2 Joystick"; - device_quiet(dev); - break; + const struct emujoy_pci_dev *emujd; + size_t i; + uint32_t devid; + + devid = pci_get_devid(dev); + for (i = 0; i < nitems(emujoy_pci_devs); i++) { + emujd = &emujoy_pci_devs[i]; + if(emujd->devid == devid) { + device_set_desc(dev, emujd->description); + device_quiet(dev); + return -1000; + } } - - if (s) device_set_desc(dev, s); - return s ? -1000 : ENXIO; + return ENXIO; } static int @@ -2256,3 +2271,5 @@ static devclass_t emujoy_devclass; DRIVER_MODULE(emujoy, pci, emujoy_driver, emujoy_devclass, NULL, NULL); +MODULE_PNP_INFO("W32:vendor/device;D:#", pci, emujoy, emujoy_pci_devs, + sizeof(emujoy_pci_devs[0]), nitems(emujoy_pci_devs) - 1); Index: sys/sparc64/ebus/ebus.c =================================================================== --- sys/sparc64/ebus/ebus.c +++ sys/sparc64/ebus/ebus.c @@ -200,6 +200,16 @@ BUS_PASS_BUS + 1); MODULE_DEPEND(ebus, nexus, 1, 1, 1); +static struct ebus_pci_dev { + uint16_t vendorid; + uint16_t deviceid; + const char *description; +} ebus_pci_devs[] = { + {0x108e, 0x1000, "PCI-EBus2 bridge"}, + {0x108e, 0x1100, "PCI-EBus3 bridge"}, + {0, 0, 0}, +} + static device_method_t ebus_pci_methods[] = { /* Device interface */ DEVMETHOD(device_probe, ebus_pci_probe), @@ -240,6 +250,8 @@ EARLY_DRIVER_MODULE(ebus, pci, ebus_pci_driver, ebus_devclass, 0, 0, BUS_PASS_BUS); +MODULE_PNP_INFO("U16:vendor;U16:device;D:#", pci, ebus, ebus_pci_devs, + sizeof(ebus_pci_devs[0]), nitems(ebus_pci_devs) - 1); MODULE_DEPEND(ebus, pci, 1, 1, 1); MODULE_VERSION(ebus, 1); @@ -260,19 +272,23 @@ static int ebus_pci_probe(device_t dev) { + const struct ebus_pci_dev *ebd; + uint16_t did; + size_t i; + did = pci_get_device(dev); if (pci_get_class(dev) != PCIC_BRIDGE || pci_get_vendor(dev) != 0x108e || strcmp(ofw_bus_get_name(dev), "ebus") != 0) return (ENXIO); - - if (pci_get_device(dev) == 0x1000) - device_set_desc(dev, "PCI-EBus2 bridge"); - else if (pci_get_device(dev) == 0x1100) - device_set_desc(dev, "PCI-EBus3 bridge"); - else - return (ENXIO); - return (BUS_PROBE_GENERIC); + for (i = 0; i < nitems(ebus_pci_devs) - 1; i++) { + ebd = &ebus_pci_devs[i]; + if (did == ebd->deviceid) { + device_set_desc(dev, ebd->description); + return (BUS_PROBE_GENERIC); + } + } + return (ENXIO); } static int