Module Name: src
Committed By: thorpej
Date: Sat May 8 00:27:02 UTC 2021
Modified Files:
src/sys/dev/pci: if_bwfm_pci.c if_bwi_pci.c if_cas.c if_dge.c if_et.c
if_fxp_pci.c if_iwi.c if_iwn.c if_jme.c if_kse.c if_malo_pci.c
if_msk.c if_mtd_pci.c if_rge.c if_sk.c if_tlp_pci.c if_vr.c
Log Message:
Use pci_compatible_match().
To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/sys/dev/pci/if_bwfm_pci.c
cvs rdiff -u -r1.16 -r1.17 src/sys/dev/pci/if_bwi_pci.c
cvs rdiff -u -r1.44 -r1.45 src/sys/dev/pci/if_cas.c
cvs rdiff -u -r1.58 -r1.59 src/sys/dev/pci/if_dge.c
cvs rdiff -u -r1.32 -r1.33 src/sys/dev/pci/if_et.c
cvs rdiff -u -r1.85 -r1.86 src/sys/dev/pci/if_fxp_pci.c
cvs rdiff -u -r1.114 -r1.115 src/sys/dev/pci/if_iwi.c
cvs rdiff -u -r1.94 -r1.95 src/sys/dev/pci/if_iwn.c
cvs rdiff -u -r1.49 -r1.50 src/sys/dev/pci/if_jme.c
cvs rdiff -u -r1.56 -r1.57 src/sys/dev/pci/if_kse.c
cvs rdiff -u -r1.7 -r1.8 src/sys/dev/pci/if_malo_pci.c
cvs rdiff -u -r1.115 -r1.116 src/sys/dev/pci/if_msk.c
cvs rdiff -u -r1.21 -r1.22 src/sys/dev/pci/if_mtd_pci.c
cvs rdiff -u -r1.18 -r1.19 src/sys/dev/pci/if_rge.c
cvs rdiff -u -r1.107 -r1.108 src/sys/dev/pci/if_sk.c
cvs rdiff -u -r1.129 -r1.130 src/sys/dev/pci/if_tlp_pci.c
cvs rdiff -u -r1.133 -r1.134 src/sys/dev/pci/if_vr.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/pci/if_bwfm_pci.c
diff -u src/sys/dev/pci/if_bwfm_pci.c:1.9 src/sys/dev/pci/if_bwfm_pci.c:1.10
--- src/sys/dev/pci/if_bwfm_pci.c:1.9 Sat May 30 15:55:47 2020
+++ src/sys/dev/pci/if_bwfm_pci.c Sat May 8 00:27:02 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: if_bwfm_pci.c,v 1.9 2020/05/30 15:55:47 jdolecek Exp $ */
+/* $NetBSD: if_bwfm_pci.c,v 1.10 2021/05/08 00:27:02 thorpej Exp $ */
/* $OpenBSD: if_bwfm_pci.c,v 1.18 2018/02/08 05:00:38 patrick Exp $ */
/*
* Copyright (c) 2010-2016 Broadcom Corporation
@@ -366,12 +366,14 @@ static const struct bwfm_firmware_select
BWFM_FW_ENTRY_END
};
-static const struct bwfm_pci_matchid {
- pci_vendor_id_t bwfm_vendor;
- pci_product_id_t bwfm_product;
-} bwfm_pci_devices[] = {
- { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM43602 },
- { PCI_VENDOR_BROADCOM, PCI_PRODUCT_BROADCOM_BCM4350 },
+static const struct device_compatible_entry compat_data[] = {
+ { .id = PCI_ID_CODE(PCI_VENDOR_BROADCOM,
+ PCI_PRODUCT_BROADCOM_BCM43602), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_BROADCOM,
+ PCI_PRODUCT_BROADCOM_BCM4350), },
+
+ PCI_COMPAT_EOL
};
static struct mbuf *
@@ -397,14 +399,7 @@ bwfm_pci_match(device_t parent, cfdata_t
{
struct pci_attach_args *pa = aux;
- if (PCI_VENDOR(pa->pa_id) != PCI_VENDOR_BROADCOM)
- return 0;
-
- for (size_t i = 0; i < __arraycount(bwfm_pci_devices); i++)
- if (PCI_PRODUCT(pa->pa_id) == bwfm_pci_devices[i].bwfm_product)
- return 1;
-
- return 0;
+ return pci_compatible_match(pa, compat_data);
}
void
Index: src/sys/dev/pci/if_bwi_pci.c
diff -u src/sys/dev/pci/if_bwi_pci.c:1.16 src/sys/dev/pci/if_bwi_pci.c:1.17
--- src/sys/dev/pci/if_bwi_pci.c:1.16 Sun Dec 9 11:14:02 2018
+++ src/sys/dev/pci/if_bwi_pci.c Sat May 8 00:27:02 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: if_bwi_pci.c,v 1.16 2018/12/09 11:14:02 jdolecek Exp $ */
+/* $NetBSD: if_bwi_pci.c,v 1.17 2021/05/08 00:27:02 thorpej Exp $ */
/* $OpenBSD: if_bwi_pci.c,v 1.6 2008/02/14 22:10:02 brad Exp $ */
/*
@@ -24,7 +24,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_bwi_pci.c,v 1.16 2018/12/09 11:14:02 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_bwi_pci.c,v 1.17 2021/05/08 00:27:02 thorpej Exp $");
#include <sys/param.h>
#include <sys/callout.h>
@@ -74,31 +74,52 @@ struct bwi_pci_softc {
CFATTACH_DECL_NEW(bwi_pci, sizeof(struct bwi_pci_softc),
bwi_pci_match, bwi_pci_attach, bwi_pci_detach, NULL);
+static const struct device_compatible_entry compat_data[] = {
+ { .id = PCI_ID_CODE(PCI_VENDOR_BROADCOM,
+ PCI_PRODUCT_BROADCOM_BCM4303), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_BROADCOM,
+ PCI_PRODUCT_BROADCOM_BCM4306), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_BROADCOM,
+ PCI_PRODUCT_BROADCOM_BCM4306_2), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_BROADCOM,
+ PCI_PRODUCT_BROADCOM_BCM4307), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_BROADCOM,
+ PCI_PRODUCT_BROADCOM_BCM4309), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_BROADCOM,
+ PCI_PRODUCT_BROADCOM_BCM4311), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_BROADCOM,
+ PCI_PRODUCT_BROADCOM_BCM4312), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_BROADCOM,
+ PCI_PRODUCT_BROADCOM_BCM4318), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_BROADCOM,
+ PCI_PRODUCT_BROADCOM_BCM4319), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_BROADCOM,
+ PCI_PRODUCT_BROADCOM_BCM4322), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_BROADCOM,
+ PCI_PRODUCT_BROADCOM_BCM43XG), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_BROADCOM,
+ PCI_PRODUCT_BROADCOM_BCM4328), },
+
+ PCI_COMPAT_EOL
+};
+
static int
bwi_pci_match(device_t parent, cfdata_t match, void *aux)
{
struct pci_attach_args *pa = aux;
- if (PCI_VENDOR(pa->pa_id) != PCI_VENDOR_BROADCOM)
- return (0);
-
- switch (PCI_PRODUCT(pa->pa_id)) {
- case PCI_PRODUCT_BROADCOM_BCM4303:
- case PCI_PRODUCT_BROADCOM_BCM4306:
- case PCI_PRODUCT_BROADCOM_BCM4306_2:
- case PCI_PRODUCT_BROADCOM_BCM4307:
- case PCI_PRODUCT_BROADCOM_BCM4309:
- case PCI_PRODUCT_BROADCOM_BCM4311:
- case PCI_PRODUCT_BROADCOM_BCM4312:
- case PCI_PRODUCT_BROADCOM_BCM4318:
- case PCI_PRODUCT_BROADCOM_BCM4319:
- case PCI_PRODUCT_BROADCOM_BCM4322:
- case PCI_PRODUCT_BROADCOM_BCM43XG:
- case PCI_PRODUCT_BROADCOM_BCM4328:
- return (1);
- }
-
- return (0);
+ return pci_compatible_match(pa, compat_data);
}
static void
Index: src/sys/dev/pci/if_cas.c
diff -u src/sys/dev/pci/if_cas.c:1.44 src/sys/dev/pci/if_cas.c:1.45
--- src/sys/dev/pci/if_cas.c:1.44 Tue Sep 15 08:33:40 2020
+++ src/sys/dev/pci/if_cas.c Sat May 8 00:27:02 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: if_cas.c,v 1.44 2020/09/15 08:33:40 mrg Exp $ */
+/* $NetBSD: if_cas.c,v 1.45 2021/05/08 00:27:02 thorpej Exp $ */
/* $OpenBSD: if_cas.c,v 1.29 2009/11/29 16:19:38 kettenis Exp $ */
/*
@@ -44,7 +44,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_cas.c,v 1.44 2020/09/15 08:33:40 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_cas.c,v 1.45 2021/05/08 00:27:02 thorpej Exp $");
#ifndef _MODULE
#include "opt_inet.h"
@@ -163,14 +163,16 @@ int cas_intr(void *);
#define DPRINTF(sc, x) /* nothing */
#endif
-static const struct cas_pci_dev {
- uint16_t cpd_vendor;
- uint16_t cpd_device;
- int cpd_variant;
-} cas_pci_devlist[] = {
- { PCI_VENDOR_SUN, PCI_PRODUCT_SUN_CASSINI, CAS_CAS },
- { PCI_VENDOR_NS, PCI_PRODUCT_NS_SATURN, CAS_SATURN },
- { 0, 0, 0 }
+static const struct device_compatible_entry compat_data[] = {
+ { .id = PCI_ID_CODE(PCI_VENDOR_SUN,
+ PCI_PRODUCT_SUN_CASSINI),
+ .value = CAS_CAS },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_NS,
+ PCI_PRODUCT_NS_SATURN),
+ .value = CAS_SATURN },
+
+ PCI_COMPAT_EOL
};
#define CAS_LOCAL_MAC_ADDRESS "local-mac-address"
@@ -182,15 +184,8 @@ int
cas_match(device_t parent, cfdata_t cf, void *aux)
{
struct pci_attach_args *pa = aux;
- int i;
-
- for (i = 0; cas_pci_devlist[i].cpd_vendor != 0; i++) {
- if ((PCI_VENDOR(pa->pa_id) == cas_pci_devlist[i].cpd_vendor) &&
- (PCI_PRODUCT(pa->pa_id) == cas_pci_devlist[i].cpd_device))
- return 1;
- }
- return 0;
+ return pci_compatible_match(pa, compat_data);
}
#define PROMHDR_PTR_DATA 0x18
@@ -403,8 +398,8 @@ void
cas_attach(device_t parent, device_t self, void *aux)
{
struct pci_attach_args *pa = aux;
+ const struct device_compatible_entry *dce;
struct cas_softc *sc = device_private(self);
- int i;
prop_data_t data;
uint8_t enaddr[ETHER_ADDR_LEN];
@@ -417,19 +412,11 @@ cas_attach(device_t parent, device_t sel
else
sc->sc_dmatag = pa->pa_dmat;
- sc->sc_variant = CAS_UNKNOWN;
- for (i = 0; cas_pci_devlist[i].cpd_vendor != 0; i++) {
- if ((PCI_VENDOR(pa->pa_id) == cas_pci_devlist[i].cpd_vendor) &&
- (PCI_PRODUCT(pa->pa_id) == cas_pci_devlist[i].cpd_device)) {
- sc->sc_variant = cas_pci_devlist[i].cpd_variant;
- break;
- }
- }
+ dce = pci_compatible_lookup(pa, compat_data);
+ KASSERT(dce != NULL);
+ sc->sc_variant = (u_int)dce->value;
+
aprint_debug_dev(sc->sc_dev, "variant = %d\n", sc->sc_variant);
- if (sc->sc_variant == CAS_UNKNOWN) {
- aprint_error_dev(sc->sc_dev, "unknown adaptor\n");
- return;
- }
#define PCI_CAS_BASEADDR 0x10
if (pci_mapreg_map(pa, PCI_CAS_BASEADDR, PCI_MAPREG_TYPE_MEM, 0,
Index: src/sys/dev/pci/if_dge.c
diff -u src/sys/dev/pci/if_dge.c:1.58 src/sys/dev/pci/if_dge.c:1.59
--- src/sys/dev/pci/if_dge.c:1.58 Sun Mar 1 15:11:31 2020
+++ src/sys/dev/pci/if_dge.c Sat May 8 00:27:02 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: if_dge.c,v 1.58 2020/03/01 15:11:31 thorpej Exp $ */
+/* $NetBSD: if_dge.c,v 1.59 2021/05/08 00:27:02 thorpej Exp $ */
/*
* Copyright (c) 2004, SUNET, Swedish University Computer Network.
@@ -80,7 +80,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_dge.c,v 1.58 2020/03/01 15:11:31 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_dge.c,v 1.59 2021/05/08 00:27:02 thorpej Exp $");
@@ -647,49 +647,41 @@ static char (*dge_txseg_evcnt_names)[DGE
/*
* Devices supported by this driver.
*/
-static const struct dge_product {
- pci_vendor_id_t dgep_vendor;
- pci_product_id_t dgep_product;
- const char *dgep_name;
- int dgep_flags;
+struct dge_product {
+ const char *name;
+ int flags;
#define DGEP_F_10G_LR 0x01
#define DGEP_F_10G_SR 0x02
-} dge_products[] = {
- { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82597EX,
- "Intel i82597EX 10GbE-LR Ethernet",
- DGEP_F_10G_LR },
-
- { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82597EX_SR,
- "Intel i82597EX 10GbE-SR Ethernet",
- DGEP_F_10G_SR },
-
- { 0, 0,
- NULL,
- 0 },
};
-static const struct dge_product *
-dge_lookup(const struct pci_attach_args *pa)
-{
- const struct dge_product *dgep;
+static const struct dge_product i82597EX_lr = {
+ .name = "Intel i82597EX 10GbE-LR Ethernet",
+ .flags = DGEP_F_10G_LR
+};
- for (dgep = dge_products; dgep->dgep_name != NULL; dgep++) {
- if (PCI_VENDOR(pa->pa_id) == dgep->dgep_vendor &&
- PCI_PRODUCT(pa->pa_id) == dgep->dgep_product)
- return dgep;
- }
- return NULL;
-}
+static const struct dge_product i82597EX_sr = {
+ .name = "Intel i82597EX 10GbE-SR Ethernet",
+ .flags = DGEP_F_10G_SR
+};
+
+static const struct device_compatible_entry compat_data[] = {
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_82597EX),
+ .data = &i82597EX_lr },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_82597EX_SR),
+ .data = &i82597EX_sr },
+
+ PCI_COMPAT_EOL
+};
static int
dge_match(device_t parent, cfdata_t cf, void *aux)
{
struct pci_attach_args *pa = aux;
- if (dge_lookup(pa) != NULL)
- return 1;
-
- return 0;
+ return pci_compatible_match(pa, compat_data);
}
static void
@@ -707,13 +699,12 @@ dge_attach(device_t parent, device_t sel
pcireg_t preg, memtype;
uint32_t reg;
char intrbuf[PCI_INTRSTR_LEN];
+ const struct device_compatible_entry *dce;
const struct dge_product *dgep;
- sc->sc_dgep = dgep = dge_lookup(pa);
- if (dgep == NULL) {
- printf("\n");
- panic("dge_attach: impossible");
- }
+ dce = pci_compatible_lookup(pa, compat_data);
+ KASSERT(dce != NULL);
+ sc->sc_dgep = dgep = dce->data;
sc->sc_dev = self;
sc->sc_pc = pa->pa_pc;
@@ -725,7 +716,7 @@ dge_attach(device_t parent, device_t sel
sc->sc_dmat = pa->pa_dmat;
pci_aprint_devinfo_fancy(pa, "Ethernet controller",
- dgep->dgep_name, 1);
+ dgep->name, 1);
memtype = pci_mapreg_type(pa->pa_pc, pa->pa_tag, DGE_PCI_BAR);
if (pci_mapreg_map(pa, DGE_PCI_BAR, memtype, 0,
@@ -914,7 +905,7 @@ dge_attach(device_t parent, device_t sel
sc->sc_ethercom.ec_ifmedia = &sc->sc_media;
ifmedia_init(&sc->sc_media, IFM_IMASK, dge_xgmii_mediachange,
dge_xgmii_mediastatus);
- if (dgep->dgep_flags & DGEP_F_10G_SR) {
+ if (dgep->flags & DGEP_F_10G_SR) {
ifmedia_add(&sc->sc_media, IFM_ETHER | IFM_10G_SR, 0, NULL);
ifmedia_set(&sc->sc_media, IFM_ETHER | IFM_10G_SR);
} else { /* XXX default is LR */
@@ -2406,7 +2397,7 @@ dge_xgmii_mediastatus(struct ifnet *ifp,
struct dge_softc *sc = ifp->if_softc;
ifmr->ifm_status = IFM_AVALID;
- if (sc->sc_dgep->dgep_flags & DGEP_F_10G_SR ) {
+ if (sc->sc_dgep->flags & DGEP_F_10G_SR ) {
ifmr->ifm_active = IFM_ETHER | IFM_10G_SR;
} else {
ifmr->ifm_active = IFM_ETHER | IFM_10G_LR;
Index: src/sys/dev/pci/if_et.c
diff -u src/sys/dev/pci/if_et.c:1.32 src/sys/dev/pci/if_et.c:1.33
--- src/sys/dev/pci/if_et.c:1.32 Sun Mar 1 15:15:49 2020
+++ src/sys/dev/pci/if_et.c Sat May 8 00:27:02 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: if_et.c,v 1.32 2020/03/01 15:15:49 thorpej Exp $ */
+/* $NetBSD: if_et.c,v 1.33 2021/05/08 00:27:02 thorpej Exp $ */
/* $OpenBSD: if_et.c,v 1.12 2008/07/11 09:29:02 kevlo $ */
/*
* Copyright (c) 2007 The DragonFly Project. All rights reserved.
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_et.c,v 1.32 2020/03/01 15:15:49 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_et.c,v 1.33 2021/05/08 00:27:02 thorpej Exp $");
#include "opt_inet.h"
#include "vlan.h"
@@ -152,12 +152,15 @@ static const struct et_bsize et_bufsize[
{ .bufsize = 0, .newbuf = et_newbuf_cluster },
};
-static const struct et_product {
- pci_vendor_id_t vendor;
- pci_product_id_t product;
-} et_devices[] = {
- { PCI_VENDOR_LUCENT, PCI_PRODUCT_LUCENT_ET1310 },
- { PCI_VENDOR_LUCENT, PCI_PRODUCT_LUCENT_ET1301 }
+static const struct device_compatible_entry compat_data[] = {
+ { .id = PCI_ID_CODE(PCI_VENDOR_LUCENT, PCI_PRODUCT_LUCENT_ET1310),
+ .value = 0 },
+
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_LUCENT, PCI_PRODUCT_LUCENT_ET1301),
+ .value = ET_FLAG_FASTETHER },
+
+ PCI_COMPAT_EOL
};
CFATTACH_DECL_NEW(et, sizeof(struct et_softc), et_match, et_attach, et_detach,
@@ -167,16 +170,8 @@ static int
et_match(device_t dev, cfdata_t match, void *aux)
{
struct pci_attach_args *pa = aux;
- const struct et_product *ep;
- int i;
- for (i = 0; i < __arraycount(et_devices); i++) {
- ep = &et_devices[i];
- if (PCI_VENDOR(pa->pa_id) == ep->vendor &&
- PCI_PRODUCT(pa->pa_id) == ep->product)
- return 1;
- }
- return 0;
+ return pci_compatible_match(pa, compat_data);
}
static void
@@ -184,6 +179,7 @@ et_attach(device_t parent, device_t self
{
struct et_softc *sc = device_private(self);
struct pci_attach_args *pa = aux;
+ const struct device_compatible_entry *dce;
pci_chipset_tag_t pc = pa->pa_pc;
pci_intr_handle_t ih;
const char *intrstr;
@@ -238,8 +234,9 @@ et_attach(device_t parent, device_t self
else
sc->sc_dmat = pa->pa_dmat;
- if (pa->pa_id == PCI_PRODUCT_LUCENT_ET1301)
- sc->sc_flags |= ET_FLAG_FASTETHER;
+ dce = pci_compatible_lookup(pa, compat_data);
+ KASSERT(dce != NULL);
+ sc->sc_flags = (uint32_t)dce->value;
error = et_bus_config(sc);
if (error)
Index: src/sys/dev/pci/if_fxp_pci.c
diff -u src/sys/dev/pci/if_fxp_pci.c:1.85 src/sys/dev/pci/if_fxp_pci.c:1.86
--- src/sys/dev/pci/if_fxp_pci.c:1.85 Wed Jan 23 06:56:19 2019
+++ src/sys/dev/pci/if_fxp_pci.c Sat May 8 00:27:02 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: if_fxp_pci.c,v 1.85 2019/01/23 06:56:19 msaitoh Exp $ */
+/* $NetBSD: if_fxp_pci.c,v 1.86 2021/05/08 00:27:02 thorpej Exp $ */
/*-
* Copyright (c) 1997, 1998, 1999, 2000, 2001 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_fxp_pci.c,v 1.85 2019/01/23 06:56:19 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_fxp_pci.c,v 1.86 2021/05/08 00:27:02 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -90,124 +90,145 @@ CFATTACH_DECL3_NEW(fxp_pci, sizeof(struc
fxp_pci_match, fxp_pci_attach, fxp_pci_detach, NULL, NULL,
null_childdetached, DVF_DETACH_SHUTDOWN);
-static const struct fxp_pci_product {
- uint32_t fpp_prodid; /* PCI product ID */
- const char *fpp_name; /* device name */
-} fxp_pci_products[] = {
- { PCI_PRODUCT_INTEL_82552,
- "Intel i82552 10/100 Network Connection" },
- { PCI_PRODUCT_INTEL_8255X,
- "Intel i8255x Ethernet" },
- { PCI_PRODUCT_INTEL_82559ER,
- "Intel i82559ER Ethernet" },
- { PCI_PRODUCT_INTEL_IN_BUSINESS,
- "Intel InBusiness Ethernet" },
- { PCI_PRODUCT_INTEL_PRO_100,
- "Intel PRO/100 Ethernet" },
- { PCI_PRODUCT_INTEL_PRO_100_VE_0,
- "Intel PRO/100 VE Network Controller" },
- { PCI_PRODUCT_INTEL_PRO_100_VE_1,
- "Intel PRO/100 VE Network Controller" },
- { PCI_PRODUCT_INTEL_PRO_100_VE_2,
- "Intel PRO/100 VE Network Controller with 82562ET/EZ PHY" },
- { PCI_PRODUCT_INTEL_PRO_100_VE_3,
- "Intel PRO/100 VE Network Controller with 82562ET/EZ (CNR) PHY" },
- { PCI_PRODUCT_INTEL_PRO_100_VE_4,
- "Intel PRO/100 VE (MOB) Network Controller" },
- { PCI_PRODUCT_INTEL_PRO_100_VE_5,
- "Intel PRO/100 VE (LOM) Network Controller" },
- { PCI_PRODUCT_INTEL_PRO_100_VE_6,
- "Intel PRO/100 VE Network Controller" },
- { PCI_PRODUCT_INTEL_PRO_100_VE_7,
- "Intel PRO/100 VE Network Controller" },
- { PCI_PRODUCT_INTEL_PRO_100_VE_8,
- "Intel PRO/100 VE Network Controller" },
- { PCI_PRODUCT_INTEL_PRO_100_VE_9,
- "Intel PRO/100 VE Network Controller" },
- { PCI_PRODUCT_INTEL_PRO_100_VE_10,
- "Intel PRO/100 VE Network Controller" },
- { PCI_PRODUCT_INTEL_PRO_100_VE_11,
- "Intel PRO/100 VE Network Controller" },
- { PCI_PRODUCT_INTEL_PRO_100_VM_0,
- "Intel PRO/100 VM Network Controller" },
- { PCI_PRODUCT_INTEL_PRO_100_VM_1,
- "Intel PRO/100 VM Network Controller" },
- { PCI_PRODUCT_INTEL_PRO_100_VM_2,
- "Intel PRO/100 VM Network Controller" },
- { PCI_PRODUCT_INTEL_PRO_100_VM_3,
- "Intel PRO/100 VM Network Controller with 82562EM/EX PHY" },
- { PCI_PRODUCT_INTEL_PRO_100_VM_4,
- "Intel PRO/100 VM Network Controller with 82562EM/EX (CNR) PHY" },
- { PCI_PRODUCT_INTEL_PRO_100_VM_5,
- "Intel PRO/100 VM (MOB) Network Controller" },
- { PCI_PRODUCT_INTEL_PRO_100_VM_6,
- "Intel PRO/100 VM Network Controller with 82562ET/EZ PHY" },
- { PCI_PRODUCT_INTEL_PRO_100_VM_7,
- "Intel PRO/100 VM Network Connection" },
- { PCI_PRODUCT_INTEL_PRO_100_VM_8,
- "Intel PRO/100 VM Network Connection" },
- { PCI_PRODUCT_INTEL_PRO_100_VM_9,
- "Intel PRO/100 VM Network Connection" },
- { PCI_PRODUCT_INTEL_PRO_100_VM_10,
- "Intel PRO/100 VM Network Connection" },
- { PCI_PRODUCT_INTEL_PRO_100_VM_11,
- "Intel PRO/100 VM Network Connection" },
- { PCI_PRODUCT_INTEL_PRO_100_VM_12,
- "Intel PRO/100 VM Network Connection" },
- { PCI_PRODUCT_INTEL_PRO_100_VM_13,
- "Intel PRO/100 VM Network Connection" },
- { PCI_PRODUCT_INTEL_PRO_100_VM_14,
- "Intel PRO/100 VM Network Connection" },
- { PCI_PRODUCT_INTEL_PRO_100_VM_15,
- "Intel PRO/100 VM Network Connection" },
- { PCI_PRODUCT_INTEL_PRO_100_VM_16,
- "Intel PRO/100 VM Network Connection" },
- { PCI_PRODUCT_INTEL_PRO_100_M,
- "Intel PRO/100 M Network Controller" },
- { PCI_PRODUCT_INTEL_82801BA_LAN,
- "Intel i82562 Ethernet" },
- { PCI_PRODUCT_INTEL_82801E_LAN_1,
- "Intel i82801E Ethernet" },
- { PCI_PRODUCT_INTEL_82801E_LAN_2,
- "Intel i82801E Ethernet" },
- { PCI_PRODUCT_INTEL_82801EB_LAN,
- "Intel 82801EB/ER (ICH5) Network Controller" },
- { PCI_PRODUCT_INTEL_82801FB_LAN,
- "Intel i82801FB LAN Controller" },
- { PCI_PRODUCT_INTEL_82801FB_LAN_2,
- "Intel i82801FB LAN Controller" },
- { PCI_PRODUCT_INTEL_82801G_LAN,
- "Intel 82801GB/GR (ICH7) Network Controller" },
- { PCI_PRODUCT_INTEL_82801GB_LAN,
- "Intel 82801GB 10/100 Network Controller" },
- { 0,
- NULL },
-};
+static const struct device_compatible_entry compat_data[] = {
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82552),
+ .data = "Intel i82552 10/100 Network Connection" },
-static const struct fxp_pci_product *
-fxp_pci_lookup(const struct pci_attach_args *pa)
-{
- const struct fxp_pci_product *fpp;
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_8255X),
+ .data = "Intel i8255x Ethernet" },
- if (PCI_VENDOR(pa->pa_id) != PCI_VENDOR_INTEL)
- return NULL;
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82559ER),
+ .data = "Intel i82559ER Ethernet" },
- for (fpp = fxp_pci_products; fpp->fpp_name != NULL; fpp++)
- if (PCI_PRODUCT(pa->pa_id) == fpp->fpp_prodid)
- return fpp;
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_IN_BUSINESS),
+ .data = "Intel InBusiness Ethernet" },
- return NULL;
-}
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100),
+ .data = "Intel PRO/100 Ethernet" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VE_0),
+ .data = "Intel PRO/100 VE Network Controller" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VE_1),
+ .data = "Intel PRO/100 VE Network Controller" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VE_2),
+ .data = "Intel PRO/100 VE Network Controller with 82562ET/EZ PHY" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VE_3),
+ .data = "Intel PRO/100 VE Network Controller with 82562ET/EZ (CNR) PHY" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VE_4),
+ .data = "Intel PRO/100 VE (MOB) Network Controller" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VE_5),
+ .data = "Intel PRO/100 VE (LOM) Network Controller" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VE_6),
+ .data = "Intel PRO/100 VE Network Controller" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VE_7),
+ .data = "Intel PRO/100 VE Network Controller" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VE_8),
+ .data = "Intel PRO/100 VE Network Controller" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VE_9),
+ .data = "Intel PRO/100 VE Network Controller" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VE_10),
+ .data = "Intel PRO/100 VE Network Controller" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VE_11),
+ .data = "Intel PRO/100 VE Network Controller" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VM_0),
+ .data = "Intel PRO/100 VM Network Controller" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VM_1),
+ .data = "Intel PRO/100 VM Network Controller" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VM_2),
+ .data = "Intel PRO/100 VM Network Controller" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VM_3),
+ .data = "Intel PRO/100 VM Network Controller with 82562EM/EX PHY" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VM_4),
+ .data = "Intel PRO/100 VM Network Controller with 82562EM/EX (CNR) PHY" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VM_5),
+ .data = "Intel PRO/100 VM (MOB) Network Controller" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VM_6),
+ .data = "Intel PRO/100 VM Network Controller with 82562ET/EZ PHY" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VM_7),
+ .data = "Intel PRO/100 VM Network Connection" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VM_8),
+ .data = "Intel PRO/100 VM Network Connection" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VM_9),
+ .data = "Intel PRO/100 VM Network Connection" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VM_10),
+ .data = "Intel PRO/100 VM Network Connection" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VM_11),
+ .data = "Intel PRO/100 VM Network Connection" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VM_12),
+ .data = "Intel PRO/100 VM Network Connection" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VM_13),
+ .data = "Intel PRO/100 VM Network Connection" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VM_14),
+ .data = "Intel PRO/100 VM Network Connection" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VM_15),
+ .data = "Intel PRO/100 VM Network Connection" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_VM_16),
+ .data = "Intel PRO/100 VM Network Connection" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_PRO_100_M),
+ .data = "Intel PRO/100 M Network Controller" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801BA_LAN),
+ .data = "Intel i82562 Ethernet" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801E_LAN_1),
+ .data = "Intel i82801E Ethernet" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801E_LAN_2),
+ .data = "Intel i82801E Ethernet" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801EB_LAN),
+ .data = "Intel 82801EB/ER (ICH5) Network Controller" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801FB_LAN),
+ .data = "Intel i82801FB LAN Controller" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801FB_LAN_2),
+ .data = "Intel i82801FB LAN Controller" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801G_LAN),
+ .data = "Intel 82801GB/GR (ICH7) Network Controller" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801GB_LAN),
+ .data = "Intel 82801GB 10/100 Network Controller" },
+
+ PCI_COMPAT_EOL
+};
static int
fxp_pci_match(device_t parent, cfdata_t match, void *aux)
{
struct pci_attach_args *pa = aux;
- if (fxp_pci_lookup(pa) != NULL)
- return 1;
-
- return 0;
+ return pci_compatible_match(pa, compat_data);
}
/*
@@ -295,7 +316,7 @@ fxp_pci_attach(device_t parent, device_t
const struct pci_attach_args *pa = aux;
pci_chipset_tag_t pc = pa->pa_pc;
pci_intr_handle_t ih;
- const struct fxp_pci_product *fpp;
+ const struct device_compatible_entry *dce;
const char *chipname = NULL;
const char *intrstr = NULL;
bus_space_tag_t iot, memt;
@@ -370,15 +391,12 @@ fxp_pci_attach(device_t parent, device_t
sc->sc_dmat = pa->pa_dmat;
- fpp = fxp_pci_lookup(pa);
- if (fpp == NULL) {
- printf("\n");
- panic("fxp_pci_attach: impossible");
- }
+ dce = pci_compatible_lookup(pa, compat_data);
+ KASSERT(dce != NULL);
sc->sc_rev = PCI_REVISION(pa->pa_class);
- switch (fpp->fpp_prodid) {
+ switch (PCI_PRODUCT(dce->id)) {
case PCI_PRODUCT_INTEL_8255X:
case PCI_PRODUCT_INTEL_IN_BUSINESS:
@@ -459,7 +477,7 @@ fxp_pci_attach(device_t parent, device_t
}
pci_aprint_devinfo_fancy(pa, "Ethernet controller",
- (chipname ? chipname : fpp->fpp_name), 1);
+ (chipname != NULL ? chipname : dce->data), 1);
/* Make sure bus-mastering is enabled. */
pci_conf_write(pc, pa->pa_tag, PCI_COMMAND_STATUS_REG,
Index: src/sys/dev/pci/if_iwi.c
diff -u src/sys/dev/pci/if_iwi.c:1.114 src/sys/dev/pci/if_iwi.c:1.115
--- src/sys/dev/pci/if_iwi.c:1.114 Fri Mar 20 13:33:23 2020
+++ src/sys/dev/pci/if_iwi.c Sat May 8 00:27:02 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: if_iwi.c,v 1.114 2020/03/20 13:33:23 thorpej Exp $ */
+/* $NetBSD: if_iwi.c,v 1.115 2021/05/08 00:27:02 thorpej Exp $ */
/* $OpenBSD: if_iwi.c,v 1.111 2010/11/15 19:11:57 damien Exp $ */
/*-
@@ -19,7 +19,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_iwi.c,v 1.114 2020/03/20 13:33:23 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_iwi.c,v 1.115 2021/05/08 00:27:02 thorpej Exp $");
/*-
* Intel(R) PRO/Wireless 2200BG/2225BG/2915ABG driver
@@ -164,21 +164,29 @@ MEM_READ_4(struct iwi_softc *sc, uint32_
CFATTACH_DECL_NEW(iwi, sizeof (struct iwi_softc), iwi_match, iwi_attach,
iwi_detach, NULL);
+static const struct device_compatible_entry compat_data[] = {
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_PRO_WL_2200BG), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_PRO_WL_2225BG), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_PRO_WL_2915ABG_1), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_PRO_WL_2915ABG_2), },
+
+
+ PCI_COMPAT_EOL
+};
+
static int
iwi_match(device_t parent, cfdata_t match, void *aux)
{
struct pci_attach_args *pa = aux;
- if (PCI_VENDOR(pa->pa_id) != PCI_VENDOR_INTEL)
- return 0;
-
- if (PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_INTEL_PRO_WL_2200BG ||
- PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_INTEL_PRO_WL_2225BG ||
- PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_INTEL_PRO_WL_2915ABG_1 ||
- PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_INTEL_PRO_WL_2915ABG_2)
- return 1;
-
- return 0;
+ return pci_compatible_match(pa, compat_data);
}
/* Base Address Register */
Index: src/sys/dev/pci/if_iwn.c
diff -u src/sys/dev/pci/if_iwn.c:1.94 src/sys/dev/pci/if_iwn.c:1.95
--- src/sys/dev/pci/if_iwn.c:1.94 Fri Mar 20 16:35:41 2020
+++ src/sys/dev/pci/if_iwn.c Sat May 8 00:27:02 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: if_iwn.c,v 1.94 2020/03/20 16:35:41 sevan Exp $ */
+/* $NetBSD: if_iwn.c,v 1.95 2021/05/08 00:27:02 thorpej Exp $ */
/* $OpenBSD: if_iwn.c,v 1.135 2014/09/10 07:22:09 dcoppa Exp $ */
/*-
@@ -22,7 +22,7 @@
* adapters.
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_iwn.c,v 1.94 2020/03/20 16:35:41 sevan Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_iwn.c,v 1.95 2021/05/08 00:27:02 thorpej Exp $");
#define IWN_USE_RBUF /* Use local storage for RX */
#undef IWN_HWCRYPTO /* XXX does not even compile yet */
@@ -75,47 +75,128 @@ __KERNEL_RCSID(0, "$NetBSD: if_iwn.c,v 1
#include <dev/pci/if_iwnreg.h>
#include <dev/pci/if_iwnvar.h>
-static const pci_product_id_t iwn_devices[] = {
- PCI_PRODUCT_INTEL_WIFI_LINK_1030_1,
- PCI_PRODUCT_INTEL_WIFI_LINK_1030_2,
- PCI_PRODUCT_INTEL_WIFI_LINK_4965_1,
- PCI_PRODUCT_INTEL_WIFI_LINK_4965_2,
- PCI_PRODUCT_INTEL_WIFI_LINK_4965_3,
- PCI_PRODUCT_INTEL_WIFI_LINK_4965_4,
- PCI_PRODUCT_INTEL_WIFI_LINK_5100_1,
- PCI_PRODUCT_INTEL_WIFI_LINK_5100_2,
- PCI_PRODUCT_INTEL_WIFI_LINK_5150_1,
- PCI_PRODUCT_INTEL_WIFI_LINK_5150_2,
- PCI_PRODUCT_INTEL_WIFI_LINK_5300_1,
- PCI_PRODUCT_INTEL_WIFI_LINK_5300_2,
- PCI_PRODUCT_INTEL_WIFI_LINK_5350_1,
- PCI_PRODUCT_INTEL_WIFI_LINK_5350_2,
- PCI_PRODUCT_INTEL_WIFI_LINK_1000_1,
- PCI_PRODUCT_INTEL_WIFI_LINK_1000_2,
- PCI_PRODUCT_INTEL_WIFI_LINK_6000_3X3_1,
- PCI_PRODUCT_INTEL_WIFI_LINK_6000_3X3_2,
- PCI_PRODUCT_INTEL_WIFI_LINK_6000_IPA_1,
- PCI_PRODUCT_INTEL_WIFI_LINK_6000_IPA_2,
- PCI_PRODUCT_INTEL_WIFI_LINK_6050_2X2_1,
- PCI_PRODUCT_INTEL_WIFI_LINK_6050_2X2_2,
- PCI_PRODUCT_INTEL_WIFI_LINK_6005_2X2_1,
- PCI_PRODUCT_INTEL_WIFI_LINK_6005_2X2_2,
- PCI_PRODUCT_INTEL_WIFI_LINK_6230_1,
- PCI_PRODUCT_INTEL_WIFI_LINK_6230_2,
- PCI_PRODUCT_INTEL_WIFI_LINK_6235,
- PCI_PRODUCT_INTEL_WIFI_LINK_6235_2,
- PCI_PRODUCT_INTEL_WIFI_LINK_100_1,
- PCI_PRODUCT_INTEL_WIFI_LINK_100_2,
- PCI_PRODUCT_INTEL_WIFI_LINK_130_1,
- PCI_PRODUCT_INTEL_WIFI_LINK_130_2,
- PCI_PRODUCT_INTEL_WIFI_LINK_2230_1,
- PCI_PRODUCT_INTEL_WIFI_LINK_2230_2,
- PCI_PRODUCT_INTEL_WIFI_LINK_2200_1,
- PCI_PRODUCT_INTEL_WIFI_LINK_2200_2,
- PCI_PRODUCT_INTEL_WIFI_LINK_135_1,
- PCI_PRODUCT_INTEL_WIFI_LINK_135_2,
- PCI_PRODUCT_INTEL_WIFI_LINK_105_1,
- PCI_PRODUCT_INTEL_WIFI_LINK_105_2,
+static const struct device_compatible_entry compat_data[] = {
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_1030_1), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_1030_2), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_4965_1), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_4965_2), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_4965_3), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_4965_4), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_5100_1), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_5100_2), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_5150_1), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_5150_2), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_5300_1), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_5300_2), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_5350_1), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_5350_2), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_1000_1), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_1000_2), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_6000_3X3_1), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_6000_3X3_2), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_6000_IPA_1), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_6000_IPA_2), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_6050_2X2_1), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_6050_2X2_2), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_6005_2X2_1), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_6005_2X2_2), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_6230_1), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_6230_2), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_6235), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_6235_2), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_100_1), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_100_2), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_130_1), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_130_2), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_2230_1), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_2230_2), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_2200_1), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_2200_2), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_135_1), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_135_2), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_105_1), },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_INTEL,
+ PCI_PRODUCT_INTEL_WIFI_LINK_105_2), },
+
+ PCI_COMPAT_EOL
};
static int iwn_match(device_t , struct cfdata *, void *);
@@ -331,16 +412,8 @@ static int
iwn_match(device_t parent, cfdata_t match __unused, void *aux)
{
struct pci_attach_args *pa = aux;
- size_t i;
-
- if (PCI_VENDOR(pa->pa_id) != PCI_VENDOR_INTEL)
- return 0;
- for (i = 0; i < __arraycount(iwn_devices); i++)
- if (PCI_PRODUCT(pa->pa_id) == iwn_devices[i])
- return 1;
-
- return 0;
+ return pci_compatible_match(pa, compat_data);
}
static void
Index: src/sys/dev/pci/if_jme.c
diff -u src/sys/dev/pci/if_jme.c:1.49 src/sys/dev/pci/if_jme.c:1.50
--- src/sys/dev/pci/if_jme.c:1.49 Sat Feb 8 07:20:41 2020
+++ src/sys/dev/pci/if_jme.c Sat May 8 00:27:02 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: if_jme.c,v 1.49 2020/02/08 07:20:41 maxv Exp $ */
+/* $NetBSD: if_jme.c,v 1.50 2021/05/08 00:27:02 thorpej Exp $ */
/*
* Copyright (c) 2008 Manuel Bouyer. All rights reserved.
@@ -58,7 +58,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_jme.c,v 1.49 2020/02/08 07:20:41 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_jme.c,v 1.50 2021/05/08 00:27:02 thorpej Exp $");
#include <sys/param.h>
@@ -111,11 +111,6 @@ __KERNEL_RCSID(0, "$NetBSD: if_jme.c,v 1
#include <dev/mii/mii.h>
#include <dev/mii/miivar.h>
-struct jme_product_desc {
- uint32_t jme_product;
- const char *jme_desc;
-};
-
/* number of entries in transmit and receive rings */
#define JME_NBUFS (PAGE_SIZE / sizeof(struct jme_desc))
@@ -222,40 +217,24 @@ static int jme_root_num;
CFATTACH_DECL_NEW(jme, sizeof(jme_softc_t),
jme_pci_match, jme_pci_attach, NULL, NULL);
-static const struct jme_product_desc jme_products[] = {
- { PCI_PRODUCT_JMICRON_JMC250,
- "JMicron JMC250 Gigabit Ethernet Controller" },
- { PCI_PRODUCT_JMICRON_JMC260,
- "JMicron JMC260 Gigabit Ethernet Controller" },
- { 0, NULL },
-};
-
-static const struct jme_product_desc *jme_lookup_product(uint32_t);
-
-static const struct jme_product_desc *
-jme_lookup_product(uint32_t id)
-{
- const struct jme_product_desc *jp;
-
- for (jp = jme_products ; jp->jme_desc != NULL; jp++)
- if (PCI_PRODUCT(id) == jp->jme_product)
- return jp;
+static const struct device_compatible_entry compat_data[] = {
+ { .id = PCI_ID_CODE(PCI_VENDOR_JMICRON,
+ PCI_PRODUCT_JMICRON_JMC250),
+ .data = "JMicron JMC250 Gigabit Ethernet Controller" },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_JMICRON,
+ PCI_PRODUCT_JMICRON_JMC260),
+ .data = "JMicron JMC260 Gigabit Ethernet Controller" },
- return NULL;
-}
+ PCI_COMPAT_EOL
+};
static int
jme_pci_match(device_t parent, cfdata_t cf, void *aux)
{
struct pci_attach_args *pa = (struct pci_attach_args *)aux;
- if (PCI_VENDOR(pa->pa_id) != PCI_VENDOR_JMICRON)
- return 0;
-
- if (jme_lookup_product(pa->pa_id) != NULL)
- return 1;
-
- return 0;
+ return pci_compatible_match(pa, compat_data);
}
static void
@@ -263,7 +242,7 @@ jme_pci_attach(device_t parent, device_t
{
jme_softc_t *sc = device_private(self);
struct pci_attach_args * const pa = (struct pci_attach_args *)aux;
- const struct jme_product_desc *jp;
+ const struct device_compatible_entry *dce;
struct ifnet * const ifp = &sc->jme_if;
struct mii_data * const mii = &sc->jme_mii;
bus_space_tag_t iot1, iot2, memt;
@@ -282,11 +261,10 @@ jme_pci_attach(device_t parent, device_t
callout_init(&sc->jme_tick_ch, 0);
callout_setfunc(&sc->jme_tick_ch, jme_ticks, sc);
- jp = jme_lookup_product(pa->pa_id);
- if (jp == NULL)
- panic("jme_pci_attach: impossible");
+ dce = pci_compatible_lookup(pa, compat_data);
+ KASSERT(dce != NULL);
- if (jp->jme_product == PCI_PRODUCT_JMICRON_JMC250)
+ if (PCI_PRODUCT(dce->id) == PCI_PRODUCT_JMICRON_JMC250)
sc->jme_flags = JME_FLAG_GIGA;
/*
@@ -347,7 +325,7 @@ jme_pci_attach(device_t parent, device_t
pci_conf_write(pa->pa_pc, pa->pa_tag, PCI_COMMAND_STATUS_REG,
csr | PCI_COMMAND_MASTER_ENABLE);
- aprint_normal_dev(self, "%s\n", jp->jme_desc);
+ aprint_normal_dev(self, "%s\n", (const char *)dce->data);
sc->jme_rev = PCI_REVISION(pa->pa_class);
Index: src/sys/dev/pci/if_kse.c
diff -u src/sys/dev/pci/if_kse.c:1.56 src/sys/dev/pci/if_kse.c:1.57
--- src/sys/dev/pci/if_kse.c:1.56 Sun Sep 20 23:48:09 2020
+++ src/sys/dev/pci/if_kse.c Sat May 8 00:27:02 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: if_kse.c,v 1.56 2020/09/20 23:48:09 nisimura Exp $ */
+/* $NetBSD: if_kse.c,v 1.57 2021/05/08 00:27:02 thorpej Exp $ */
/*-
* Copyright (c) 2006 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_kse.c,v 1.56 2020/09/20 23:48:09 nisimura Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_kse.c,v 1.57 2021/05/08 00:27:02 thorpej Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -353,18 +353,22 @@ static void stat_tick(void *);
static void zerostats(struct kse_softc *);
#endif
+static const struct device_compatible_entry compat_data[] = {
+ { .id = PCI_ID_CODE(PCI_VENDOR_MICREL,
+ PCI_PRODUCT_MICREL_KSZ8842) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MICREL,
+ PCI_PRODUCT_MICREL_KSZ8841) },
+
+ PCI_COMPAT_EOL
+};
+
static int
kse_match(device_t parent, cfdata_t match, void *aux)
{
struct pci_attach_args *pa = (struct pci_attach_args *)aux;
- if (PCI_VENDOR(pa->pa_id) == PCI_VENDOR_MICREL &&
- (PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_MICREL_KSZ8842 ||
- PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_MICREL_KSZ8841) &&
- PCI_CLASS(pa->pa_class) == PCI_CLASS_NETWORK)
- return 1;
-
- return 0;
+ return PCI_CLASS(pa->pa_class) == PCI_CLASS_NETWORK &&
+ pci_compatible_match(pa, compat_data);
}
static void
Index: src/sys/dev/pci/if_malo_pci.c
diff -u src/sys/dev/pci/if_malo_pci.c:1.7 src/sys/dev/pci/if_malo_pci.c:1.8
--- src/sys/dev/pci/if_malo_pci.c:1.7 Sun Dec 9 11:14:02 2018
+++ src/sys/dev/pci/if_malo_pci.c Sat May 8 00:27:02 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: if_malo_pci.c,v 1.7 2018/12/09 11:14:02 jdolecek Exp $ */
+/* $NetBSD: if_malo_pci.c,v 1.8 2021/05/08 00:27:02 thorpej Exp $ */
/* $OpenBSD: if_malo_pci.c,v 1.6 2010/08/28 23:19:29 deraadt Exp $ */
/*
@@ -22,7 +22,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_malo_pci.c,v 1.7 2018/12/09 11:14:02 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_malo_pci.c,v 1.8 2021/05/08 00:27:02 thorpej Exp $");
#include <sys/param.h>
#include <sys/sockio.h>
@@ -75,22 +75,23 @@ struct malo_pci_softc {
CFATTACH_DECL_NEW(malo_pci, sizeof(struct malo_pci_softc),
malo_pci_match, malo_pci_attach, malo_pci_detach, NULL);
+static const struct device_compatible_entry compat_data[] = {
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_88W8310) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_88W8335_1) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_88W8335_2) },
+
+ PCI_COMPAT_EOL
+};
+
static int
malo_pci_match(device_t parent, cfdata_t match, void *aux)
{
struct pci_attach_args *pa = aux;
- if (PCI_VENDOR(pa->pa_id) != PCI_VENDOR_MARVELL)
- return (0);
-
- switch (PCI_PRODUCT(pa->pa_id)) {
- case PCI_PRODUCT_MARVELL_88W8310:
- case PCI_PRODUCT_MARVELL_88W8335_1:
- case PCI_PRODUCT_MARVELL_88W8335_2:
- return (1);
- }
-
- return (0);
+ return pci_compatible_match(pa, compat_data);
}
static void
Index: src/sys/dev/pci/if_msk.c
diff -u src/sys/dev/pci/if_msk.c:1.115 src/sys/dev/pci/if_msk.c:1.116
--- src/sys/dev/pci/if_msk.c:1.115 Sat Apr 24 23:36:57 2021
+++ src/sys/dev/pci/if_msk.c Sat May 8 00:27:02 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: if_msk.c,v 1.115 2021/04/24 23:36:57 thorpej Exp $ */
+/* $NetBSD: if_msk.c,v 1.116 2021/05/08 00:27:02 thorpej Exp $ */
/* $OpenBSD: if_msk.c,v 1.79 2009/10/15 17:54:56 deraadt Exp $ */
/*
@@ -52,7 +52,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_msk.c,v 1.115 2021/04/24 23:36:57 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_msk.c,v 1.116 2021/05/08 00:27:02 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -153,52 +153,93 @@ static int msk_root_num;
#define MSK_ADDR_HI(x) ((uint64_t) (x) >> 32)
/* supported device vendors */
-static const struct msk_product {
- pci_vendor_id_t msk_vendor;
- pci_product_id_t msk_product;
-} msk_products[] = {
- { PCI_VENDOR_DLINK, PCI_PRODUCT_DLINK_DGE550SX },
- { PCI_VENDOR_DLINK, PCI_PRODUCT_DLINK_DGE550T_B1 },
- { PCI_VENDOR_DLINK, PCI_PRODUCT_DLINK_DGE560SX },
- { PCI_VENDOR_DLINK, PCI_PRODUCT_DLINK_DGE560T },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKONII_8021CU },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKONII_8021X },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKONII_8022CU },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKONII_8022X },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_8035 },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_8036 },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_8038 },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_8039 },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_8040 },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_8040T },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_8042 },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_8048 },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_8050 },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_8052 },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_8053 },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_8055 },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_8055_2 },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_8056 },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_8057 },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_8058 },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_8059 },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKONII_8061CU },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKONII_8061X },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKONII_8062CU },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKONII_8062X },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_8070 },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_8071 },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_8072 },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_8075 },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_8079 },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_C032 },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_C033 },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_C034 },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_C036 },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_YUKON_C042 },
- { PCI_VENDOR_SCHNEIDERKOCH, PCI_PRODUCT_SCHNEIDERKOCH_SK_9SXX },
- { PCI_VENDOR_SCHNEIDERKOCH, PCI_PRODUCT_SCHNEIDERKOCH_SK_9E21 },
- { 0, 0 }
+static const struct device_compatible_entry compat_data[] = {
+ { .id = PCI_ID_CODE(PCI_VENDOR_DLINK,
+ PCI_PRODUCT_DLINK_DGE550SX) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_DLINK,
+ PCI_PRODUCT_DLINK_DGE550T_B1) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_DLINK,
+ PCI_PRODUCT_DLINK_DGE560SX) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_DLINK,
+ PCI_PRODUCT_DLINK_DGE560T) },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKONII_8021CU) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKONII_8021X) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKONII_8022CU) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKONII_8022X) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_8035) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_8036) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_8038) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_8039) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_8040) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_8040T) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_8042) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_8048) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_8050) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_8052) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_8053) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_8055) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_8055_2) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_8056) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_8057) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_8058) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_8059) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKONII_8061CU) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKONII_8061X) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKONII_8062CU) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKONII_8062X) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_8070) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_8071) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_8072) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_8075) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_8079) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_C032) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_C033) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_C034) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_C036) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_YUKON_C042) },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_SCHNEIDERKOCH,
+ PCI_PRODUCT_SCHNEIDERKOCH_SK_9SXX) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_SCHNEIDERKOCH,
+ PCI_PRODUCT_SCHNEIDERKOCH_SK_9E21) },
+
+ PCI_COMPAT_EOL
};
static inline uint32_t
@@ -865,19 +906,6 @@ msk_update_int_mod(struct sk_softc *sc,
sc->sk_int_mod_pending = 0;
}
-static int
-msk_lookup(const struct pci_attach_args *pa)
-{
- const struct msk_product *pmsk;
-
- for ( pmsk = &msk_products[0]; pmsk->msk_vendor != 0; pmsk++) {
- if (PCI_VENDOR(pa->pa_id) == pmsk->msk_vendor &&
- PCI_PRODUCT(pa->pa_id) == pmsk->msk_product)
- return 1;
- }
- return 0;
-}
-
/*
* Probe for a SysKonnect GEnesis chip. Check the PCI vendor and device
* IDs against our list and return a device name if we find a match.
@@ -887,7 +915,7 @@ mskc_probe(device_t parent, cfdata_t mat
{
struct pci_attach_args *pa = (struct pci_attach_args *)aux;
- return msk_lookup(pa);
+ return pci_compatible_match(pa, compat_data);
}
/*
Index: src/sys/dev/pci/if_mtd_pci.c
diff -u src/sys/dev/pci/if_mtd_pci.c:1.21 src/sys/dev/pci/if_mtd_pci.c:1.22
--- src/sys/dev/pci/if_mtd_pci.c:1.21 Sun Dec 9 11:14:02 2018
+++ src/sys/dev/pci/if_mtd_pci.c Sat May 8 00:27:02 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: if_mtd_pci.c,v 1.21 2018/12/09 11:14:02 jdolecek Exp $ */
+/* $NetBSD: if_mtd_pci.c,v 1.22 2021/05/08 00:27:02 thorpej Exp $ */
/*-
* Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
/* TODO: Check why in IO space, the MII won't work. Memory mapped works */
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_mtd_pci.c,v 1.21 2018/12/09 11:14:02 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_mtd_pci.c,v 1.22 2021/05/08 00:27:02 thorpej Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -57,14 +57,10 @@ __KERNEL_RCSID(0, "$NetBSD: if_mtd_pci.c
#define PCI_IO_MAP_REG PCI_BAR(0)
#define PCI_MEM_MAP_REG PCI_BAR(1)
-struct mtd_pci_device_id {
- pci_vendor_id_t vendor; /* PCI vendor ID */
- pci_product_id_t product; /* PCI product ID */
-};
+static const struct device_compatible_entry compat_data[] = {
+ { .id = PCI_ID_CODE(PCI_VENDOR_MYSON, PCI_PRODUCT_MYSON_MTD803) },
-static struct mtd_pci_device_id mtd_ids[] = {
- { PCI_VENDOR_MYSON, PCI_PRODUCT_MYSON_MTD803 },
- { 0, 0 }
+ PCI_COMPAT_EOL
};
static int mtd_pci_match(device_t, cfdata_t, void *);
@@ -77,14 +73,8 @@ static int
mtd_pci_match(device_t parent, cfdata_t match, void *aux)
{
struct pci_attach_args *pa = aux;
- struct mtd_pci_device_id *id;
- for (id = mtd_ids; id->vendor != 0; ++id) {
- if (PCI_VENDOR(pa->pa_id) == id->vendor &&
- PCI_PRODUCT(pa->pa_id) == id->product)
- return (1);
- }
- return (0);
+ return pci_compatible_match(pa, compat_data);
}
static void
Index: src/sys/dev/pci/if_rge.c
diff -u src/sys/dev/pci/if_rge.c:1.18 src/sys/dev/pci/if_rge.c:1.19
--- src/sys/dev/pci/if_rge.c:1.18 Tue Mar 2 07:55:16 2021
+++ src/sys/dev/pci/if_rge.c Sat May 8 00:27:02 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: if_rge.c,v 1.18 2021/03/02 07:55:16 knakahara Exp $ */
+/* $NetBSD: if_rge.c,v 1.19 2021/05/08 00:27:02 thorpej Exp $ */
/* $OpenBSD: if_rge.c,v 1.9 2020/12/12 11:48:53 jan Exp $ */
/*
@@ -18,7 +18,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_rge.c,v 1.18 2021/03/02 07:55:16 knakahara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_rge.c,v 1.19 2021/05/08 00:27:02 thorpej Exp $");
#include <sys/types.h>
@@ -164,27 +164,19 @@ static const struct {
CFATTACH_DECL_NEW(rge, sizeof(struct rge_softc), rge_match, rge_attach,
NULL, NULL); /* Sevan - detach function? */
-static const struct {
- pci_vendor_id_t vendor;
- pci_product_id_t product;
-}rge_devices[] = {
- { PCI_VENDOR_REALTEK, PCI_PRODUCT_REALTEK_E3000 },
- { PCI_VENDOR_REALTEK, PCI_PRODUCT_REALTEK_RT8125 },
+static const struct device_compatible_entry compat_data[] = {
+ { .id = PCI_ID_CODE(PCI_VENDOR_REALTEK, PCI_PRODUCT_REALTEK_E3000) },
+ { .id = PCI_ID_CODE(PCI_VENDOR_REALTEK, PCI_PRODUCT_REALTEK_RT8125) },
+
+ PCI_COMPAT_EOL
};
static int
rge_match(device_t parent, cfdata_t match, void *aux)
{
struct pci_attach_args *pa =aux;
- int n;
-
- for (n =0; n < __arraycount(rge_devices); n++) {
- if (PCI_VENDOR(pa->pa_id) == rge_devices[n].vendor &&
- PCI_PRODUCT(pa->pa_id) == rge_devices[n].product)
- return 3;
- }
- return 0;
+ return pci_compatible_match(pa, compat_data);
}
void
Index: src/sys/dev/pci/if_sk.c
diff -u src/sys/dev/pci/if_sk.c:1.107 src/sys/dev/pci/if_sk.c:1.108
--- src/sys/dev/pci/if_sk.c:1.107 Sat Apr 24 23:36:57 2021
+++ src/sys/dev/pci/if_sk.c Sat May 8 00:27:02 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: if_sk.c,v 1.107 2021/04/24 23:36:57 thorpej Exp $ */
+/* $NetBSD: if_sk.c,v 1.108 2021/05/08 00:27:02 thorpej Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -115,7 +115,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_sk.c,v 1.107 2021/04/24 23:36:57 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_sk.c,v 1.108 2021/05/08 00:27:02 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -225,19 +225,32 @@ static int sk_root_num;
/* supported device vendors */
/* PCI_PRODUCT_DLINK_DGE560T_2 might belong in if_msk instead */
-static const struct sk_product {
- pci_vendor_id_t sk_vendor;
- pci_product_id_t sk_product;
-} sk_products[] = {
- { PCI_VENDOR_3COM, PCI_PRODUCT_3COM_3C940, },
- { PCI_VENDOR_DLINK, PCI_PRODUCT_DLINK_DGE530T, },
- { PCI_VENDOR_DLINK, PCI_PRODUCT_DLINK_DGE560T_2, },
- { PCI_VENDOR_LINKSYS, PCI_PRODUCT_LINKSYS_EG1064, },
- { PCI_VENDOR_SCHNEIDERKOCH, PCI_PRODUCT_SCHNEIDERKOCH_SKNET_GE, },
- { PCI_VENDOR_SCHNEIDERKOCH, PCI_PRODUCT_SCHNEIDERKOCH_SK9821v2, },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_SKNET, },
- { PCI_VENDOR_MARVELL, PCI_PRODUCT_MARVELL_BELKIN, },
- { 0, 0, }
+static const struct device_compatible_entry compat_data[] = {
+ { .id = PCI_ID_CODE(PCI_VENDOR_3COM,
+ PCI_PRODUCT_3COM_3C940) },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_DLINK,
+ PCI_PRODUCT_DLINK_DGE530T) },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_DLINK,
+ PCI_PRODUCT_DLINK_DGE560T_2) },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_LINKSYS,
+ PCI_PRODUCT_LINKSYS_EG1064) },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_SCHNEIDERKOCH,
+ PCI_PRODUCT_SCHNEIDERKOCH_SKNET_GE) },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_SCHNEIDERKOCH,
+ PCI_PRODUCT_SCHNEIDERKOCH_SK9821v2) },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_SKNET) },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_MARVELL,
+ PCI_PRODUCT_MARVELL_BELKIN) },
+
+ PCI_COMPAT_EOL
};
#define SK_LINKSYS_EG1032_SUBID 0x00151737
@@ -1108,19 +1121,6 @@ sk_update_int_mod(struct sk_softc *sc)
* The structure if the IDs match against our list.
*/
-static const struct sk_product *
-sk_lookup(const struct pci_attach_args *pa)
-{
- const struct sk_product *psk;
-
- for ( psk = &sk_products[0]; psk->sk_vendor != 0; psk++ ) {
- if (PCI_VENDOR(pa->pa_id) == psk->sk_vendor &&
- PCI_PRODUCT(pa->pa_id) == psk->sk_product)
- return psk;
- }
- return NULL;
-}
-
/*
* Probe for a SysKonnect GEnesis chip.
*/
@@ -1129,7 +1129,6 @@ static int
skc_probe(device_t parent, cfdata_t match, void *aux)
{
struct pci_attach_args *pa = (struct pci_attach_args *)aux;
- const struct sk_product *psk;
pcireg_t subid;
subid = pci_conf_read(pa->pa_pc, pa->pa_tag, PCI_SUBSYS_ID_REG);
@@ -1140,10 +1139,7 @@ skc_probe(device_t parent, cfdata_t matc
subid == SK_LINKSYS_EG1032_SUBID)
return 1;
- if ((psk = sk_lookup(pa))) {
- return 1;
- }
- return 0;
+ return pci_compatible_match(pa, compat_data);
}
/*
Index: src/sys/dev/pci/if_tlp_pci.c
diff -u src/sys/dev/pci/if_tlp_pci.c:1.129 src/sys/dev/pci/if_tlp_pci.c:1.130
--- src/sys/dev/pci/if_tlp_pci.c:1.129 Tue Jul 7 06:27:37 2020
+++ src/sys/dev/pci/if_tlp_pci.c Sat May 8 00:27:02 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: if_tlp_pci.c,v 1.129 2020/07/07 06:27:37 msaitoh Exp $ */
+/* $NetBSD: if_tlp_pci.c,v 1.130 2021/05/08 00:27:02 thorpej Exp $ */
/*-
* Copyright (c) 1998, 1999, 2000, 2002 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_tlp_pci.c,v 1.129 2020/07/07 06:27:37 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_tlp_pci.c,v 1.130 2021/05/08 00:27:02 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -111,69 +111,89 @@ CFATTACH_DECL3_NEW(tlp_pci, sizeof(struc
tlp_pci_match, tlp_pci_attach, tlp_pci_detach, NULL, NULL, NULL,
DVF_DETACH_SHUTDOWN);
-static const struct tulip_pci_product {
- uint32_t tpp_vendor; /* PCI vendor ID */
- uint32_t tpp_product; /* PCI product ID */
- tulip_chip_t tpp_chip; /* base Tulip chip type */
-} tlp_pci_products[] = {
- { PCI_VENDOR_DEC, PCI_PRODUCT_DEC_21040,
- TULIP_CHIP_21040 },
- { PCI_VENDOR_DEC, PCI_PRODUCT_DEC_21041,
- TULIP_CHIP_21041 },
- { PCI_VENDOR_DEC, PCI_PRODUCT_DEC_21140,
- TULIP_CHIP_21140 },
- { PCI_VENDOR_DEC, PCI_PRODUCT_DEC_21142,
- TULIP_CHIP_21142 },
+static const struct device_compatible_entry compat_data[] = {
+ { .id = PCI_ID_CODE(PCI_VENDOR_DEC, PCI_PRODUCT_DEC_21040),
+ .value = TULIP_CHIP_21040 },
- { PCI_VENDOR_LITEON, PCI_PRODUCT_LITEON_82C168,
- TULIP_CHIP_82C168 },
+ { .id = PCI_ID_CODE(PCI_VENDOR_DEC, PCI_PRODUCT_DEC_21041),
+ .value = TULIP_CHIP_21041 },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_DEC, PCI_PRODUCT_DEC_21140),
+ .value = TULIP_CHIP_21140 },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_DEC, PCI_PRODUCT_DEC_21142),
+ .value = TULIP_CHIP_21142 },
+
+
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_LITEON, PCI_PRODUCT_LITEON_82C168),
+ .value = TULIP_CHIP_82C168 },
/*
* Note: This is like a MX98725 with Wake-On-LAN and a
* 128-bit multicast hash table.
*/
- { PCI_VENDOR_LITEON, PCI_PRODUCT_LITEON_82C115,
- TULIP_CHIP_82C115 },
+ { .id = PCI_ID_CODE(PCI_VENDOR_LITEON, PCI_PRODUCT_LITEON_82C115),
+ .value = TULIP_CHIP_82C115 },
+
+
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_MACRONIX, PCI_PRODUCT_MACRONIX_MX98713),
+ .value = TULIP_CHIP_MX98713 },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_MACRONIX, PCI_PRODUCT_MACRONIX_MX987x5),
+ .value = TULIP_CHIP_MX98715 },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_COMPEX, PCI_PRODUCT_COMPEX_RL100TX),
+ .value = TULIP_CHIP_MX98713 },
+
+
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_WINBOND, PCI_PRODUCT_WINBOND_W89C840F),
+ .value = TULIP_CHIP_WB89C840F },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_COMPEX, PCI_PRODUCT_COMPEX_RL100ATX),
+ .value = TULIP_CHIP_WB89C840F },
+
+
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_DAVICOM, PCI_PRODUCT_DAVICOM_DM9102),
+ .value = TULIP_CHIP_DM9102 },
+
+
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_ADMTEK, PCI_PRODUCT_ADMTEK_AL981),
+ .value = TULIP_CHIP_AL981 },
- { PCI_VENDOR_MACRONIX, PCI_PRODUCT_MACRONIX_MX98713,
- TULIP_CHIP_MX98713 },
- { PCI_VENDOR_MACRONIX, PCI_PRODUCT_MACRONIX_MX987x5,
- TULIP_CHIP_MX98715 },
-
- { PCI_VENDOR_COMPEX, PCI_PRODUCT_COMPEX_RL100TX,
- TULIP_CHIP_MX98713 },
-
- { PCI_VENDOR_WINBOND, PCI_PRODUCT_WINBOND_W89C840F,
- TULIP_CHIP_WB89C840F },
- { PCI_VENDOR_COMPEX, PCI_PRODUCT_COMPEX_RL100ATX,
- TULIP_CHIP_WB89C840F },
-
- { PCI_VENDOR_DAVICOM, PCI_PRODUCT_DAVICOM_DM9102,
- TULIP_CHIP_DM9102 },
-
- { PCI_VENDOR_ADMTEK, PCI_PRODUCT_ADMTEK_AL981,
- TULIP_CHIP_AL981 },
-
- { PCI_VENDOR_ADMTEK, PCI_PRODUCT_ADMTEK_AN983,
- TULIP_CHIP_AN985 },
- { PCI_VENDOR_ADMTEK, PCI_PRODUCT_ADMTEK_ADM9511,
- TULIP_CHIP_AN985 },
- { PCI_VENDOR_ADMTEK, PCI_PRODUCT_ADMTEK_ADM9513,
- TULIP_CHIP_AN985 },
- { PCI_VENDOR_ACCTON, PCI_PRODUCT_ACCTON_EN2242,
- TULIP_CHIP_AN985 },
-
- { PCI_VENDOR_3COM, PCI_PRODUCT_3COM_3C910SOHOB,
- TULIP_CHIP_AN985 },
+ { .id = PCI_ID_CODE(PCI_VENDOR_ADMTEK, PCI_PRODUCT_ADMTEK_AN983),
+ .value = TULIP_CHIP_AN985 },
- { PCI_VENDOR_ASIX, PCI_PRODUCT_ASIX_AX88140A,
- TULIP_CHIP_AX88140 },
+ { .id = PCI_ID_CODE(PCI_VENDOR_ADMTEK, PCI_PRODUCT_ADMTEK_ADM9511),
+ .value = TULIP_CHIP_AN985 },
- { PCI_VENDOR_CONEXANT, PCI_PRODUCT_CONEXANT_LANFINITY,
- TULIP_CHIP_RS7112 },
+ { .id = PCI_ID_CODE(PCI_VENDOR_ADMTEK, PCI_PRODUCT_ADMTEK_ADM9513),
+ .value = TULIP_CHIP_AN985 },
- { 0, 0,
- TULIP_CHIP_INVALID },
+ { .id = PCI_ID_CODE(PCI_VENDOR_ACCTON, PCI_PRODUCT_ACCTON_EN2242),
+ .value = TULIP_CHIP_AN985 },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_3COM, PCI_PRODUCT_3COM_3C910SOHOB),
+ .value = TULIP_CHIP_AN985 },
+
+
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_ASIX, PCI_PRODUCT_ASIX_AX88140A),
+ .value = TULIP_CHIP_AX88140 },
+
+
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_CONEXANT,
+ PCI_PRODUCT_CONEXANT_LANFINITY),
+ .value = TULIP_CHIP_RS7112 },
+
+
+
+ PCI_COMPAT_EOL
};
struct tlp_pci_quirks {
@@ -260,25 +280,6 @@ static const struct tlp_pci_quirks tlp_p
static int tlp_pci_shared_intr(void *);
-static const struct tulip_pci_product *
-tlp_pci_lookup(const struct pci_attach_args *pa)
-{
- const struct tulip_pci_product *tpp;
-
- /* Don't match lmc cards */
- if (PCI_VENDOR(pci_conf_read(pa->pa_pc, pa->pa_tag,
- PCI_SUBSYS_ID_REG)) == PCI_VENDOR_LMC)
- return NULL;
-
- for (tpp = tlp_pci_products; tpp->tpp_chip != TULIP_CHIP_INVALID;
- tpp++) {
- if (PCI_VENDOR(pa->pa_id) == tpp->tpp_vendor &&
- PCI_PRODUCT(pa->pa_id) == tpp->tpp_product)
- return tpp;
- }
- return NULL;
-}
-
static void
tlp_pci_get_quirks(struct tulip_pci_softc *psc, const uint8_t *enaddr,
const struct tlp_pci_quirks *tpq)
@@ -332,9 +333,15 @@ tlp_pci_match(device_t parent, cfdata_t
{
struct pci_attach_args *pa = aux;
- if (tlp_pci_lookup(pa) != NULL)
+ if (pci_compatible_match(pa, compat_data)) {
+ /* Don't match lmc cards */
+ const pcireg_t subsys = pci_conf_read(pa->pa_pc, pa->pa_tag,
+ PCI_SUBSYS_ID_REG);
+ if (PCI_VENDOR(subsys) == PCI_VENDOR_LMC) {
+ return 0;
+ }
return 10; /* beat if_de.c */
-
+ }
return 0;
}
@@ -350,7 +357,7 @@ tlp_pci_attach(device_t parent, device_t
bus_space_tag_t iot, memt;
bus_space_handle_t ioh, memh;
int ioh_valid, memh_valid, i, j;
- const struct tulip_pci_product *tpp;
+ const struct device_compatible_entry *dce;
prop_data_t ea;
uint8_t enaddr[ETHER_ADDR_LEN];
uint32_t val = 0;
@@ -366,12 +373,9 @@ tlp_pci_attach(device_t parent, device_t
LIST_INIT(&psc->sc_intrslaves);
- tpp = tlp_pci_lookup(pa);
- if (tpp == NULL) {
- printf("\n");
- panic("tlp_pci_attach: impossible");
- }
- sc->sc_chip = tpp->tpp_chip;
+ dce = pci_compatible_lookup(pa, compat_data);
+ KASSERT(dce != NULL);
+ sc->sc_chip = (tulip_chip_t)dce->value;
/*
* By default, Tulip registers are 8 bytes long (4 bytes
Index: src/sys/dev/pci/if_vr.c
diff -u src/sys/dev/pci/if_vr.c:1.133 src/sys/dev/pci/if_vr.c:1.134
--- src/sys/dev/pci/if_vr.c:1.133 Fri Feb 7 00:04:28 2020
+++ src/sys/dev/pci/if_vr.c Sat May 8 00:27:02 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: if_vr.c,v 1.133 2020/02/07 00:04:28 thorpej Exp $ */
+/* $NetBSD: if_vr.c,v 1.134 2021/05/08 00:27:02 thorpej Exp $ */
/*-
* Copyright (c) 1998, 1999 The NetBSD Foundation, Inc.
@@ -97,7 +97,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_vr.c,v 1.133 2020/02/07 00:04:28 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vr.c,v 1.134 2021/05/08 00:27:02 thorpej Exp $");
@@ -140,15 +140,23 @@ __KERNEL_RCSID(0, "$NetBSD: if_vr.c,v 1.
/*
* Various supported device vendors/types and their names.
*/
-static const struct vr_type {
- pci_vendor_id_t vr_vid;
- pci_product_id_t vr_did;
-} vr_devs[] = {
- { PCI_VENDOR_VIATECH, PCI_PRODUCT_VIATECH_VT3043 },
- { PCI_VENDOR_VIATECH, PCI_PRODUCT_VIATECH_VT6102 },
- { PCI_VENDOR_VIATECH, PCI_PRODUCT_VIATECH_VT6105 },
- { PCI_VENDOR_VIATECH, PCI_PRODUCT_VIATECH_VT6105M },
- { PCI_VENDOR_VIATECH, PCI_PRODUCT_VIATECH_VT86C100A }
+static const struct device_compatible_entry compat_data[] = {
+ { .id = PCI_ID_CODE(PCI_VENDOR_VIATECH,
+ PCI_PRODUCT_VIATECH_VT3043) },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_VIATECH,
+ PCI_PRODUCT_VIATECH_VT6102) },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_VIATECH,
+ PCI_PRODUCT_VIATECH_VT6105) },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_VIATECH,
+ PCI_PRODUCT_VIATECH_VT6105M) },
+
+ { .id = PCI_ID_CODE(PCI_VENDOR_VIATECH,
+ PCI_PRODUCT_VIATECH_VT86C100A) },
+
+ PCI_COMPAT_EOL
};
/*
@@ -1433,30 +1441,12 @@ static bool vr_shutdown(device_t, int);
CFATTACH_DECL_NEW(vr, sizeof (struct vr_softc),
vr_probe, vr_attach, NULL, NULL);
-static const struct vr_type *
-vr_lookup(struct pci_attach_args *pa)
-{
- const struct vr_type *vrt;
- int i;
-
- for (i = 0; i < __arraycount(vr_devs); i++) {
- vrt = &vr_devs[i];
- if (PCI_VENDOR(pa->pa_id) == vrt->vr_vid &&
- PCI_PRODUCT(pa->pa_id) == vrt->vr_did)
- return (vrt);
- }
- return (NULL);
-}
-
static int
vr_probe(device_t parent, cfdata_t match, void *aux)
{
struct pci_attach_args *pa = (struct pci_attach_args *)aux;
- if (vr_lookup(pa) != NULL)
- return (1);
-
- return (0);
+ return pci_compatible_match(pa, compat_data);
}
/*