Module Name: src
Committed By: thorpej
Date: Wed Jan 27 04:35:15 UTC 2021
Modified Files:
src/sys/dev/eisa: ahb.c ahc_eisa.c bha_eisa.c cac_eisa.c dpt_eisa.c
if_ep_eisa.c if_tlp_eisa.c mlx_eisa.c uha_eisa.c
Log Message:
Use eisa_compatible_{match,lookup}().
To generate a diff of this commit:
cvs rdiff -u -r1.64 -r1.65 src/sys/dev/eisa/ahb.c
cvs rdiff -u -r1.41 -r1.42 src/sys/dev/eisa/ahc_eisa.c
cvs rdiff -u -r1.37 -r1.38 src/sys/dev/eisa/bha_eisa.c
cvs rdiff -u -r1.25 -r1.26 src/sys/dev/eisa/cac_eisa.c
cvs rdiff -u -r1.23 -r1.24 src/sys/dev/eisa/dpt_eisa.c
cvs rdiff -u -r1.43 -r1.44 src/sys/dev/eisa/if_ep_eisa.c
cvs rdiff -u -r1.27 -r1.28 src/sys/dev/eisa/if_tlp_eisa.c
cvs rdiff -u -r1.26 -r1.27 src/sys/dev/eisa/mlx_eisa.c
cvs rdiff -u -r1.38 -r1.39 src/sys/dev/eisa/uha_eisa.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/eisa/ahb.c
diff -u src/sys/dev/eisa/ahb.c:1.64 src/sys/dev/eisa/ahb.c:1.65
--- src/sys/dev/eisa/ahb.c:1.64 Thu Jul 14 04:00:45 2016
+++ src/sys/dev/eisa/ahb.c Wed Jan 27 04:35:15 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: ahb.c,v 1.64 2016/07/14 04:00:45 msaitoh Exp $ */
+/* $NetBSD: ahb.c,v 1.65 2021/01/27 04:35:15 thorpej Exp $ */
/*-
* Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
@@ -46,7 +46,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ahb.c,v 1.64 2016/07/14 04:00:45 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ahb.c,v 1.65 2021/01/27 04:35:15 thorpej Exp $");
#include "opt_ddb.h"
@@ -142,6 +142,14 @@ CFATTACH_DECL_NEW(ahb, sizeof(struct ahb
#define AHB_ABORT_TIMEOUT 2000 /* time to wait for abort (mSec) */
+static const struct device_compatible_entry compat_data[] = {
+ { .compat = "ADP0000", .data = EISA_PRODUCT_ADP0000 },
+ { .compat = "ADP0001", .data = EISA_PRODUCT_ADP0001 },
+ { .compat = "ADP0002", .data = EISA_PRODUCT_ADP0002 },
+ { .compat = "ADP0400", .data = EISA_PRODUCT_ADP0400 },
+ DEVICE_COMPAT_EOL
+};
+
/*
* Check the slots looking for a board we recognise
* If we find one, note its address (slot) and call
@@ -155,11 +163,7 @@ ahbmatch(device_t parent, cfdata_t match
bus_space_handle_t ioh;
int rv;
- /* must match one of our known ID strings */
- if (strcmp(ea->ea_idstring, "ADP0000") &&
- strcmp(ea->ea_idstring, "ADP0001") &&
- strcmp(ea->ea_idstring, "ADP0002") &&
- strcmp(ea->ea_idstring, "ADP0400"))
+ if (!eisa_compatible_match(ea, compat_data))
return (0);
if (bus_space_map(iot,
@@ -182,11 +186,12 @@ ahbattach(device_t parent, device_t self
{
struct eisa_attach_args *ea = aux;
struct ahb_softc *sc = device_private(self);
+ const struct device_compatible_entry *dce;
bus_space_tag_t iot = ea->ea_iot;
bus_space_handle_t ioh;
eisa_chipset_tag_t ec = ea->ea_ec;
eisa_intr_handle_t ih;
- const char *model, *intrstr;
+ const char *intrstr;
struct ahb_probe_data apd;
struct scsipi_adapter *adapt = &sc->sc_adapter;
struct scsipi_channel *chan = &sc->sc_channel;
@@ -194,18 +199,11 @@ ahbattach(device_t parent, device_t self
sc->sc_dev = self;
- if (!strcmp(ea->ea_idstring, "ADP0000"))
- model = EISA_PRODUCT_ADP0000;
- else if (!strcmp(ea->ea_idstring, "ADP0001"))
- model = EISA_PRODUCT_ADP0001;
- else if (!strcmp(ea->ea_idstring, "ADP0002"))
- model = EISA_PRODUCT_ADP0002;
- else if (!strcmp(ea->ea_idstring, "ADP0400"))
- model = EISA_PRODUCT_ADP0400;
- else
- model = "unknown model!";
+ dce = eisa_compatible_lookup(ea, compat_data);
+ KASSERT(dce != NULL);
+
aprint_naive("\n");
- aprint_normal(": %s\n", model);
+ aprint_normal(": %s\n", (const char *)dce->data);
if (bus_space_map(iot,
EISA_SLOT_ADDR(ea->ea_slot) + AHB_EISA_SLOT_OFFSET,
Index: src/sys/dev/eisa/ahc_eisa.c
diff -u src/sys/dev/eisa/ahc_eisa.c:1.41 src/sys/dev/eisa/ahc_eisa.c:1.42
--- src/sys/dev/eisa/ahc_eisa.c:1.41 Mon Jul 11 11:31:50 2016
+++ src/sys/dev/eisa/ahc_eisa.c Wed Jan 27 04:35:15 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: ahc_eisa.c,v 1.41 2016/07/11 11:31:50 msaitoh Exp $ */
+/* $NetBSD: ahc_eisa.c,v 1.42 2021/01/27 04:35:15 thorpej Exp $ */
/*
* Product specific probe and attach routines for:
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ahc_eisa.c,v 1.41 2016/07/11 11:31:50 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ahc_eisa.c,v 1.42 2021/01/27 04:35:15 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -63,6 +63,12 @@ static void ahc_eisa_attach(device_t, de
CFATTACH_DECL_NEW(ahc_eisa, sizeof(struct ahc_softc),
ahc_eisa_match, ahc_eisa_attach, NULL, NULL);
+static const struct device_compatible_entry compat_data[] = {
+ { .compat = "ADP7770", .data = EISA_PRODUCT_ADP7770 },
+ { .compat = "ADP7771", .data = EISA_PRODUCT_ADP7771 },
+ DEVICE_COMPAT_EOL
+};
+
/*
* Check the slots looking for a board we recognise
* If we find one, note its address (slot) and call
@@ -76,9 +82,7 @@ ahc_eisa_match(device_t parent, cfdata_t
bus_space_handle_t ioh;
int irq;
- /* must match one of our known ID strings */
- if (strcmp(ea->ea_idstring, "ADP7770") &&
- strcmp(ea->ea_idstring, "ADP7771"))
+ if (!eisa_compatible_match(ea, compat_data))
return (0);
if (bus_space_map(iot, EISA_SLOT_ADDR(ea->ea_slot) +
@@ -97,6 +101,7 @@ ahc_eisa_attach(device_t parent, device_
{
struct ahc_softc *ahc = device_private(self);
struct eisa_attach_args *ea = aux;
+ const struct device_compatible_entry *dce;
eisa_chipset_tag_t ec = ea->ea_ec;
eisa_intr_handle_t ih;
bus_space_tag_t iot = ea->ea_iot;
@@ -114,6 +119,9 @@ ahc_eisa_attach(device_t parent, device_
ahc->sc_dev = self;
+ dce = eisa_compatible_lookup(ea, compat_data);
+ KASSERT(dce != NULL);
+
if (bus_space_map(iot, EISA_SLOT_ADDR(ea->ea_slot) +
AHC_EISA_SLOT_OFFSET, AHC_EISA_IOSIZE, 0, &ioh)) {
aprint_error_dev(ahc->sc_dev, "could not map I/O addresses");
@@ -124,14 +132,7 @@ ahc_eisa_attach(device_t parent, device_
goto free_io;
}
- if (strcmp(ea->ea_idstring, "ADP7770") == 0) {
- printf(": %s\n", EISA_PRODUCT_ADP7770);
- } else if (strcmp(ea->ea_idstring, "ADP7771") == 0) {
- printf(": %s\n", EISA_PRODUCT_ADP7771);
- } else {
- printf(": Unknown device type %s", ea->ea_idstring);
- goto free_io;
- }
+ printf(": %s\n", (const char *)dce->data);
ahc_set_name(ahc, device_xname(ahc->sc_dev));
ahc->parent_dmat = ea->ea_dmat;
Index: src/sys/dev/eisa/bha_eisa.c
diff -u src/sys/dev/eisa/bha_eisa.c:1.37 src/sys/dev/eisa/bha_eisa.c:1.38
--- src/sys/dev/eisa/bha_eisa.c:1.37 Sat Oct 18 08:33:27 2014
+++ src/sys/dev/eisa/bha_eisa.c Wed Jan 27 04:35:15 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: bha_eisa.c,v 1.37 2014/10/18 08:33:27 snj Exp $ */
+/* $NetBSD: bha_eisa.c,v 1.38 2021/01/27 04:35:15 thorpej Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bha_eisa.c,v 1.37 2014/10/18 08:33:27 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bha_eisa.c,v 1.38 2021/01/27 04:35:15 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -93,6 +93,12 @@ bha_eisa_address(bus_space_tag_t iot, bu
return (0);
}
+static const struct device_compatible_entry compat_data[] = {
+ { .compat = "BUS4201", .data = EISA_PRODUCT_BUS4201 },
+ { .compat = "BUS4202", .data = EISA_PRODUCT_BUS4202 },
+ DEVICE_COMPAT_EOL
+};
+
/*
* Check the slots looking for a board we recognise
* If we find one, note its address (slot) and call
@@ -107,9 +113,7 @@ bha_eisa_match(device_t parent, cfdata_t
int port;
int rv;
- /* must match one of our known ID strings */
- if (strcmp(ea->ea_idstring, "BUS4201") &&
- strcmp(ea->ea_idstring, "BUS4202"))
+ if (!eisa_compatible_match(ea, compat_data))
return (0);
if (bus_space_map(iot,
@@ -139,24 +143,22 @@ bha_eisa_attach(device_t parent, device_
{
struct eisa_attach_args *ea = aux;
struct bha_softc *sc = device_private(self);
+ const struct device_compatible_entry *dce;
bus_space_tag_t iot = ea->ea_iot;
bus_space_handle_t ioh, ioh2;
int port;
struct bha_probe_data bpd;
eisa_chipset_tag_t ec = ea->ea_ec;
eisa_intr_handle_t ih;
- const char *model, *intrstr;
+ const char *intrstr;
char intrbuf[EISA_INTRSTR_LEN];
sc->sc_dev = self;
- if (!strcmp(ea->ea_idstring, "BUS4201"))
- model = EISA_PRODUCT_BUS4201;
- else if (!strcmp(ea->ea_idstring, "BUS4202"))
- model = EISA_PRODUCT_BUS4202;
- else
- model = "unknown model!";
- printf(": %s\n", model);
+ dce = eisa_compatible_lookup(ea, compat_data);
+ KASSERT(dce != NULL);
+
+ printf(": %s\n", (const char *)dce->data);
if (bus_space_map(iot,
EISA_SLOT_ADDR(ea->ea_slot) + BHA_EISA_SLOT_OFFSET, BHA_EISA_IOSIZE,
Index: src/sys/dev/eisa/cac_eisa.c
diff -u src/sys/dev/eisa/cac_eisa.c:1.25 src/sys/dev/eisa/cac_eisa.c:1.26
--- src/sys/dev/eisa/cac_eisa.c:1.25 Tue Sep 27 03:33:32 2016
+++ src/sys/dev/eisa/cac_eisa.c Wed Jan 27 04:35:15 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: cac_eisa.c,v 1.25 2016/09/27 03:33:32 pgoyette Exp $ */
+/* $NetBSD: cac_eisa.c,v 1.26 2021/01/27 04:35:15 thorpej Exp $ */
/*-
* Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -61,7 +61,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cac_eisa.c,v 1.25 2016/09/27 03:33:32 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cac_eisa.c,v 1.26 2021/01/27 04:35:15 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -102,47 +102,68 @@ static const struct cac_linkage cac_eisa
cac_eisa_l0_submit
};
-static struct cac_eisa_type {
- const char *ct_prodstr;
+struct cac_eisa_type {
const char *ct_typestr;
const struct cac_linkage *ct_linkage;
-} cac_eisa_type[] = {
- { "CPQ4001", "IDA", &cac_eisa_l0 },
- { "CPQ4002", "IDA-2", &cac_eisa_l0 },
- { "CPQ4010", "IEAS", &cac_eisa_l0 },
- { "CPQ4020", "SMART", &cac_eisa_l0 },
- { "CPQ4030", "SMART-2/E", &cac_l0 },
+};
+
+static const struct cac_eisa_type cpq4001 = {
+ .ct_typestr = "IDA",
+ .ct_linkage = &cac_eisa_l0
+};
+
+static const struct cac_eisa_type cpq4002 = {
+ .ct_typestr = "IDA-2",
+ .ct_linkage = &cac_eisa_l0
+};
+
+static const struct cac_eisa_type cpq4010 = {
+ .ct_typestr = "IEAS",
+ .ct_linkage = &cac_eisa_l0
+};
+
+static const struct cac_eisa_type cpq4020 = {
+ .ct_typestr = "SMART",
+ .ct_linkage = &cac_eisa_l0
+};
+
+static const struct cac_eisa_type cpq4030 = {
+ .ct_typestr = "SMART-2/E",
+ .ct_linkage = &cac_l0
+};
+
+static const struct device_compatible_entry compat_data[] = {
+ { .compat = "CPQ4001", .data = &cpq4001 },
+ { .compat = "CPQ4002", .data = &cpq4002 },
+ { .compat = "CPQ4010", .data = &cpq4010 },
+ { .compat = "CPQ4020", .data = &cpq4020 },
+ { .compat = "CPQ4030", .data = &cpq4030 },
+ DEVICE_COMPAT_EOL
};
static int
cac_eisa_match(device_t parent, cfdata_t match, void *aux)
{
- struct eisa_attach_args *ea;
- int i;
+ struct eisa_attach_args *ea = aux;
- ea = aux;
-
- for (i = 0; i < sizeof(cac_eisa_type) / sizeof(cac_eisa_type[0]); i++)
- if (strcmp(ea->ea_idstring, cac_eisa_type[i].ct_prodstr) == 0)
- return (1);
-
- return (0);
+ return (eisa_compatible_match(ea, compat_data));
}
static void
cac_eisa_attach(device_t parent, device_t self, void *aux)
{
- struct eisa_attach_args *ea;
+ struct eisa_attach_args *ea = aux;
+ const struct device_compatible_entry *dce;
+ const struct cac_eisa_type *ct;
bus_space_handle_t ioh;
eisa_chipset_tag_t ec;
eisa_intr_handle_t ih;
struct cac_softc *sc;
bus_space_tag_t iot;
const char *intrstr;
- int irq, i;
+ int irq;
char intrbuf[EISA_INTRSTR_LEN];
- ea = aux;
sc = device_private(self);
iot = ea->ea_iot;
ec = ea->ea_ec;
@@ -153,6 +174,10 @@ cac_eisa_attach(device_t parent, device_
return;
}
+ dce = eisa_compatible_lookup(ea, compat_data);
+ KASSERT(dce != NULL);
+ ct = dce->data;
+
sc->sc_dev = self;
sc->sc_iot = iot;
sc->sc_ioh = ioh;
@@ -197,12 +222,8 @@ cac_eisa_attach(device_t parent, device_
/*
* Print board type and attach to the bus-independent code.
*/
- for (i = 0; i < sizeof(cac_eisa_type) / sizeof(cac_eisa_type[0]); i++)
- if (strcmp(ea->ea_idstring, cac_eisa_type[i].ct_prodstr) == 0)
- break;
-
- aprint_normal(": Compaq %s\n", cac_eisa_type[i].ct_typestr);
- memcpy(&sc->sc_cl, cac_eisa_type[i].ct_linkage, sizeof(sc->sc_cl));
+ aprint_normal(": Compaq %s\n", ct->ct_typestr);
+ memcpy(&sc->sc_cl, ct->ct_linkage, sizeof(sc->sc_cl));
cac_init(sc, intrstr, 0);
}
Index: src/sys/dev/eisa/dpt_eisa.c
diff -u src/sys/dev/eisa/dpt_eisa.c:1.23 src/sys/dev/eisa/dpt_eisa.c:1.24
--- src/sys/dev/eisa/dpt_eisa.c:1.23 Thu Jul 14 04:00:45 2016
+++ src/sys/dev/eisa/dpt_eisa.c Wed Jan 27 04:35:15 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: dpt_eisa.c,v 1.23 2016/07/14 04:00:45 msaitoh Exp $ */
+/* $NetBSD: dpt_eisa.c,v 1.24 2021/01/27 04:35:15 thorpej Exp $ */
/*
* Copyright (c) 1999, 2000, 2001 Andrew Doran <[email protected]>
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dpt_eisa.c,v 1.23 2016/07/14 04:00:45 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dpt_eisa.c,v 1.24 2021/01/27 04:35:15 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -64,21 +64,21 @@ static int dpt_eisa_match(device_t, cfda
CFATTACH_DECL_NEW(dpt_eisa, sizeof(struct dpt_softc),
dpt_eisa_match, dpt_eisa_attach, NULL, NULL);
-static const char * const dpt_eisa_boards[] = {
- "DPT2402",
- "DPTA401",
- "DPTA402",
- "DPTA410",
- "DPTA411",
- "DPTA412",
- "DPTA420",
- "DPTA501",
- "DPTA502",
- "DPTA701",
- "DPTBC01",
- "NEC8200", /* OEM */
- "ATT2408", /* OEM */
- NULL
+static const struct device_compatible_entry compat_data[] = {
+ { .compat = "DPT2402" },
+ { .compat = "DPTA401" },
+ { .compat = "DPTA402" },
+ { .compat = "DPTA410" },
+ { .compat = "DPTA411" },
+ { .compat = "DPTA412" },
+ { .compat = "DPTA420" },
+ { .compat = "DPTA501" },
+ { .compat = "DPTA502" },
+ { .compat = "DPTA701" },
+ { .compat = "DPTBC01" },
+ { .compat = "NEC8200" }, /* OEM */
+ { .compat = "ATT2408" }, /* OEM */
+ DEVICE_COMPAT_EOL
};
static int
@@ -105,16 +105,9 @@ dpt_eisa_irq(bus_space_tag_t iot, bus_sp
static int
dpt_eisa_match(device_t parent, cfdata_t match, void *aux)
{
- struct eisa_attach_args *ea;
- int i;
-
- ea = aux;
-
- for (i = 0; dpt_eisa_boards[i] != NULL; i++)
- if (strcmp(ea->ea_idstring, dpt_eisa_boards[i]) == 0)
- break;
+ struct eisa_attach_args *ea = aux;
- return (dpt_eisa_boards[i] != NULL);
+ return eisa_compatible_match(ea, compat_data);
}
static void
Index: src/sys/dev/eisa/if_ep_eisa.c
diff -u src/sys/dev/eisa/if_ep_eisa.c:1.43 src/sys/dev/eisa/if_ep_eisa.c:1.44
--- src/sys/dev/eisa/if_ep_eisa.c:1.43 Sat Mar 29 19:28:24 2014
+++ src/sys/dev/eisa/if_ep_eisa.c Wed Jan 27 04:35:15 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: if_ep_eisa.c,v 1.43 2014/03/29 19:28:24 christos Exp $ */
+/* $NetBSD: if_ep_eisa.c,v 1.44 2021/01/27 04:35:15 thorpej Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -64,7 +64,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ep_eisa.c,v 1.43 2014/03/29 19:28:24 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ep_eisa.c,v 1.44 2021/01/27 04:35:15 thorpej Exp $");
#include "opt_inet.h"
@@ -128,67 +128,104 @@ CFATTACH_DECL_NEW(ep_eisa, sizeof(struct
#define EISA_ERROR 0x02
#define EISA_ENABLE 0x01
-static const struct ep_eisa_product {
- const char *eep_eisaid; /* EISA ID */
- u_short eep_chipset; /* 3Com chipset used */
- int eep_flags; /* initial softc flags */
- const char *eep_name; /* device name */
-} ep_eisa_products[] = {
- { "TCM5090", ELINK_CHIPSET_3C509,
- 0, EISA_PRODUCT_TCM5090 },
- { "TCM5091", ELINK_CHIPSET_3C509,
- 0, EISA_PRODUCT_TCM5091 },
- { "TCM5092", ELINK_CHIPSET_3C509,
- 0, EISA_PRODUCT_TCM5092 },
- { "TCM5093", ELINK_CHIPSET_3C509,
- 0, EISA_PRODUCT_TCM5093 },
- { "TCM5094", ELINK_CHIPSET_3C509,
- 0, EISA_PRODUCT_TCM5094 },
- { "TCM5095", ELINK_CHIPSET_3C509,
- 0, EISA_PRODUCT_TCM5095 },
- { "TCM5098", ELINK_CHIPSET_3C509,
- 0, EISA_PRODUCT_TCM5098 },
-
- /*
- * Note: The 3c597 Fast Etherlink MII (TCM5972) is an
- * MII connector for an external PHY. We treat it as
- * `manual' in the core driver.
- */
- { "TCM5920", ELINK_CHIPSET_VORTEX,
- 0, EISA_PRODUCT_TCM5920 },
- { "TCM5970", ELINK_CHIPSET_VORTEX,
- 0, EISA_PRODUCT_TCM5970 },
- { "TCM5971", ELINK_CHIPSET_VORTEX,
- 0, EISA_PRODUCT_TCM5971 },
- { "TCM5972", ELINK_CHIPSET_VORTEX,
- 0, EISA_PRODUCT_TCM5972 },
+struct ep_eisa_product {
+ u_short chipset; /* 3Com chipset used */
+ int flags; /* initial softc flags */
+ const char *name; /* device name */
+};
- { NULL, 0,
- 0, NULL },
+static const struct ep_eisa_product tcm5090 = {
+ .chipset = ELINK_CHIPSET_3C509,
+ .flags = 0,
+ .name = EISA_PRODUCT_TCM5090
};
-static const struct ep_eisa_product *
-ep_eisa_lookup(const struct eisa_attach_args *ea)
-{
- const struct ep_eisa_product *eep;
+static const struct ep_eisa_product tcm5091 = {
+ .chipset = ELINK_CHIPSET_3C509,
+ .flags = 0,
+ .name = EISA_PRODUCT_TCM5091
+};
- for (eep = ep_eisa_products; eep->eep_name != NULL; eep++)
- if (strcmp(ea->ea_idstring, eep->eep_eisaid) == 0)
- return (eep);
+static const struct ep_eisa_product tcm5092 = {
+ .chipset = ELINK_CHIPSET_3C509,
+ .flags = 0,
+ .name = EISA_PRODUCT_TCM5092
+};
- return (NULL);
-}
+static const struct ep_eisa_product tcm5093 = {
+ .chipset = ELINK_CHIPSET_3C509,
+ .flags = 0,
+ .name = EISA_PRODUCT_TCM5093
+};
+
+static const struct ep_eisa_product tcm5094 = {
+ .chipset = ELINK_CHIPSET_3C509,
+ .flags = 0,
+ .name = EISA_PRODUCT_TCM5094
+};
+
+static const struct ep_eisa_product tcm5095 = {
+ .chipset = ELINK_CHIPSET_3C509,
+ .flags = 0,
+ .name = EISA_PRODUCT_TCM5095
+};
+
+static const struct ep_eisa_product tcm5098 = {
+ .chipset = ELINK_CHIPSET_3C509,
+ .flags = 0,
+ .name = EISA_PRODUCT_TCM5098
+};
+
+static const struct ep_eisa_product tcm5920 = {
+ .chipset = ELINK_CHIPSET_VORTEX,
+ .flags = 0,
+ .name = EISA_PRODUCT_TCM5920
+};
+
+static const struct ep_eisa_product tcm5970 = {
+ .chipset = ELINK_CHIPSET_VORTEX,
+ .flags = 0,
+ .name = EISA_PRODUCT_TCM5970
+};
+
+static const struct ep_eisa_product tcm5971 = {
+ .chipset = ELINK_CHIPSET_VORTEX,
+ .flags = 0,
+ .name = EISA_PRODUCT_TCM5971
+};
+
+/*
+ * Note: The 3c597 Fast Etherlink MII (TCM5972) is an
+ * MII connector for an external PHY. We treat it as
+ * `manual' in the core driver.
+ */
+static const struct ep_eisa_product tcm5972 = {
+ .chipset = ELINK_CHIPSET_VORTEX,
+ .flags = 0,
+ .name = EISA_PRODUCT_TCM5972
+};
+
+static const struct device_compatible_entry compat_data[] = {
+ { .compat = "TCM5090", .data = &tcm5090 },
+ { .compat = "TCM5091", .data = &tcm5091 },
+ { .compat = "TCM5092", .data = &tcm5092 },
+ { .compat = "TCM5093", .data = &tcm5093 },
+ { .compat = "TCM5094", .data = &tcm5094 },
+ { .compat = "TCM5095", .data = &tcm5095 },
+ { .compat = "TCM5098", .data = &tcm5098 },
+ { .compat = "TCM5920", .data = &tcm5920 },
+ { .compat = "TCM5970", .data = &tcm5970 },
+ { .compat = "TCM5971", .data = &tcm5971 },
+ { .compat = "TCM5972", .data = &tcm5972 },
+ DEVICE_COMPAT_EOL
+};
static int
ep_eisa_match(device_t parent, cfdata_t match, void *aux)
{
struct eisa_attach_args *ea = aux;
- /* must match one of our known ID strings */
- if (ep_eisa_lookup(ea) != NULL)
- return (1);
-
- return (0);
+ return (eisa_compatible_match(ea, compat_data));
}
static void
@@ -196,6 +233,7 @@ ep_eisa_attach(device_t parent, device_t
{
struct ep_softc *sc = device_private(self);
struct eisa_attach_args *ea = aux;
+ const struct device_compatible_entry *dce;
bus_space_tag_t iot = ea->ea_iot;
bus_space_handle_t ioh, ioh_cfg;
eisa_chipset_tag_t ec = ea->ea_ec;
@@ -227,11 +265,9 @@ ep_eisa_attach(device_t parent, device_t
/* Read the IRQ from the card. */
irq = bus_space_read_2(iot, ioh_cfg, EP_EISA_CFG_RESOURCE) >> 12;
- eep = ep_eisa_lookup(ea);
- if (eep == NULL) {
- printf("\n");
- panic("ep_eisa_attach: impossible");
- }
+ dce = eisa_compatible_lookup(ea, compat_data);
+ KASSERT(dce != NULL);
+ eep = dce->data;
/* we don't need access to the config registers any more, but
noone else should be able to map this space, so keep it
@@ -240,14 +276,14 @@ ep_eisa_attach(device_t parent, device_t
bus_space_unmap(iot, ioh_cfg, EP_EISA_CFG_SIZE);
#endif
- printf(": %s\n", eep->eep_name);
+ printf(": %s\n", eep->name);
sc->enable = NULL;
sc->disable = NULL;
sc->enabled = 1;
sc->bustype = ELINK_BUS_EISA;
- sc->ep_flags = eep->eep_flags;
+ sc->ep_flags = eep->flags;
if (eisa_intr_map(ec, irq, &ih)) {
aprint_error_dev(sc->sc_dev, "couldn't map interrupt (%u)\n",
@@ -267,5 +303,5 @@ ep_eisa_attach(device_t parent, device_t
if (intrstr != NULL)
aprint_normal_dev(sc->sc_dev, "interrupting at %s\n", intrstr);
- epconfig(sc, eep->eep_chipset, NULL);
+ epconfig(sc, eep->chipset, NULL);
}
Index: src/sys/dev/eisa/if_tlp_eisa.c
diff -u src/sys/dev/eisa/if_tlp_eisa.c:1.27 src/sys/dev/eisa/if_tlp_eisa.c:1.28
--- src/sys/dev/eisa/if_tlp_eisa.c:1.27 Thu Jul 14 04:00:45 2016
+++ src/sys/dev/eisa/if_tlp_eisa.c Wed Jan 27 04:35:15 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: if_tlp_eisa.c,v 1.27 2016/07/14 04:00:45 msaitoh Exp $ */
+/* $NetBSD: if_tlp_eisa.c,v 1.28 2021/01/27 04:35:15 thorpej Exp $ */
/*-
* Copyright (c) 1999, 2000 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_tlp_eisa.c,v 1.27 2016/07/14 04:00:45 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_tlp_eisa.c,v 1.28 2021/01/27 04:35:15 thorpej Exp $");
#include "opt_inet.h"
@@ -109,29 +109,20 @@ CFATTACH_DECL_NEW(tlp_eisa, sizeof(struc
static const int tlp_eisa_irqs[] = { 5, 9, 10, 11 };
-static const struct tulip_eisa_product {
- const char *tep_eisaid; /* EISA ID */
- const char *tep_name; /* device name */
- tulip_chip_t tep_chip; /* base Tulip chip type */
-} tlp_eisa_products[] = {
- { "DEC4250", "DEC DE425",
- TULIP_CHIP_DE425 },
-
- { NULL, NULL,
- TULIP_CHIP_INVALID },
+struct tulip_eisa_product {
+ const char *name; /* device name */
+ tulip_chip_t chip; /* base Tulip chip type */
};
-static const struct tulip_eisa_product *
-tlp_eisa_lookup(const struct eisa_attach_args *ea)
-{
- const struct tulip_eisa_product *tep;
+static const struct tulip_eisa_product dec4250 = {
+ .name = "DEC DE425",
+ .chip = TULIP_CHIP_DE425,
+};
- for (tep = tlp_eisa_products;
- tep->tep_chip != TULIP_CHIP_INVALID; tep++)
- if (strcmp(ea->ea_idstring, tep->tep_eisaid) == 0)
- return (tep);
- return (NULL);
-}
+static const struct device_compatible_entry compat_data[] = {
+ { .compat = "DEC4250", .data = &dec4250 },
+ DEVICE_COMPAT_EOL
+};
static int
tlp_eisa_match(device_t parent, cfdata_t match,
@@ -139,10 +130,7 @@ tlp_eisa_match(device_t parent, cfdata_t
{
struct eisa_attach_args *ea = aux;
- if (tlp_eisa_lookup(ea) != NULL)
- return (1);
-
- return (0);
+ return (eisa_compatible_match(ea, compat_data));
}
static void
@@ -153,6 +141,7 @@ tlp_eisa_attach(device_t parent, device_
struct tulip_eisa_softc *esc = device_private(self);
struct tulip_softc *sc = &esc->sc_tulip;
struct eisa_attach_args *ea = aux;
+ const struct device_compatible_entry *dce;
eisa_chipset_tag_t ec = ea->ea_ec;
eisa_intr_handle_t ih;
bus_space_tag_t iot = ea->ea_iot;
@@ -177,12 +166,11 @@ tlp_eisa_attach(device_t parent, device_
sc->sc_st = iot;
sc->sc_sh = ioh;
- tep = tlp_eisa_lookup(ea);
- if (tep == NULL) {
- aprint_normal("\n");
- panic("tlp_eisa_attach: impossible");
- }
- sc->sc_chip = tep->tep_chip;
+ dce = eisa_compatible_lookup(ea, compat_data);
+ KASSERT(dce != NULL);
+ tep = dce->data;
+
+ sc->sc_chip = tep->chip;
/*
* DE425's registers are 16 bytes long; the PCI configuration
@@ -210,7 +198,7 @@ tlp_eisa_attach(device_t parent, device_
sc->sc_rev = bus_space_read_4(iot, ioh, DE425_CFRV) & 0xff;
aprint_normal(": %s Ethernet, pass %d.%d\n",
- tep->tep_name, (sc->sc_rev >> 4) & 0xf, sc->sc_rev & 0xf);
+ tep->name, (sc->sc_rev >> 4) & 0xf, sc->sc_rev & 0xf);
sc->sc_dmat = ea->ea_dmat;
Index: src/sys/dev/eisa/mlx_eisa.c
diff -u src/sys/dev/eisa/mlx_eisa.c:1.26 src/sys/dev/eisa/mlx_eisa.c:1.27
--- src/sys/dev/eisa/mlx_eisa.c:1.26 Tue Sep 27 03:33:32 2016
+++ src/sys/dev/eisa/mlx_eisa.c Wed Jan 27 04:35:15 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: mlx_eisa.c,v 1.26 2016/09/27 03:33:32 pgoyette Exp $ */
+/* $NetBSD: mlx_eisa.c,v 1.27 2021/01/27 04:35:15 thorpej Exp $ */
/*-
* Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mlx_eisa.c,v 1.26 2016/09/27 03:33:32 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mlx_eisa.c,v 1.27 2021/01/27 04:35:15 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -80,50 +80,42 @@ static int mlx_v1_reset(struct mlx_softc
CFATTACH_DECL3_NEW(mlx_eisa, sizeof(struct mlx_softc),
mlx_eisa_match, mlx_eisa_attach, NULL, NULL, mlx_eisa_rescan, NULL, 0);
-static struct mlx_eisa_prod {
- const char *mp_idstr;
- int mp_nchan;
-} const mlx_eisa_prod[] = {
- { "MLX0070", 1 },
- { "MLX0071", 3 },
- { "MLX0072", 3 },
- { "MLX0073", 2 },
- { "MLX0074", 1 },
- { "MLX0075", 3 },
- { "MLX0076", 2 },
- { "MLX0077", 1 },
+static const struct device_compatible_entry compat_data[] = {
+ /* nchan */
+ { .compat = "MLX0070", .value = 1 },
+ { .compat = "MLX0071", .value = 3 },
+ { .compat = "MLX0072", .value = 3 },
+ { .compat = "MLX0073", .value = 2 },
+ { .compat = "MLX0074", .value = 1 },
+ { .compat = "MLX0075", .value = 3 },
+ { .compat = "MLX0076", .value = 2 },
+ { .compat = "MLX0077", .value = 1 },
+ DEVICE_COMPAT_EOL
};
static int
mlx_eisa_match(device_t parent, cfdata_t match,
void *aux)
{
- struct eisa_attach_args *ea;
- int i;
-
- ea = aux;
-
- for (i = 0; i < sizeof(mlx_eisa_prod) / sizeof(mlx_eisa_prod[0]); i++)
- if (strcmp(ea->ea_idstring, mlx_eisa_prod[i].mp_idstr) == 0)
- return (1);
+ struct eisa_attach_args *ea = aux;
- return (0);
+ return (eisa_compatible_match(ea, compat_data));
}
static void
mlx_eisa_attach(device_t parent, device_t self, void *aux)
{
- struct eisa_attach_args *ea;
+ struct eisa_attach_args *ea = aux;
+ const struct device_compatible_entry *dce;
bus_space_handle_t ioh;
eisa_chipset_tag_t ec;
eisa_intr_handle_t ih;
struct mlx_softc *mlx;
bus_space_tag_t iot;
const char *intrstr;
- int irq, i, icfg;
+ int irq, icfg;
char intrbuf[EISA_INTRSTR_LEN];
- ea = aux;
mlx = device_private(self);
iot = ea->ea_iot;
ec = ea->ea_ec;
@@ -179,11 +171,10 @@ mlx_eisa_attach(device_t parent, device_
return;
}
- for (i = 0; i < sizeof(mlx_eisa_prod) / sizeof(mlx_eisa_prod[0]); i++)
- if (strcmp(ea->ea_idstring, mlx_eisa_prod[i].mp_idstr) == 0) {
- mlx->mlx_ci.ci_nchan = mlx_eisa_prod[i].mp_nchan;
- break;
- }
+ dce = eisa_compatible_lookup(ea, compat_data);
+ KASSERT(dce != NULL);
+
+ mlx->mlx_ci.ci_nchan = (int)dce->value;
mlx->mlx_ci.ci_iftype = 1;
mlx->mlx_submit = mlx_v1_submit;
Index: src/sys/dev/eisa/uha_eisa.c
diff -u src/sys/dev/eisa/uha_eisa.c:1.38 src/sys/dev/eisa/uha_eisa.c:1.39
--- src/sys/dev/eisa/uha_eisa.c:1.38 Mon Jul 11 11:31:50 2016
+++ src/sys/dev/eisa/uha_eisa.c Wed Jan 27 04:35:15 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: uha_eisa.c,v 1.38 2016/07/11 11:31:50 msaitoh Exp $ */
+/* $NetBSD: uha_eisa.c,v 1.39 2021/01/27 04:35:15 thorpej Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uha_eisa.c,v 1.38 2016/07/11 11:31:50 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uha_eisa.c,v 1.39 2021/01/27 04:35:15 thorpej Exp $");
#include "opt_ddb.h"
@@ -73,6 +73,11 @@ static int u24_poll(struct uha_softc *,
static int u24_intr(void *);
static void u24_init(struct uha_softc *);
+static const struct device_compatible_entry compat_data[] = {
+ { .compat = "USC024?", .data = EISA_PRODUCT_USC0240 },
+ DEVICE_COMPAT_EOL
+};
+
/*
* Check the slots looking for a board we recognise
* If we find one, note its address (slot) and call
@@ -87,8 +92,7 @@ uha_eisa_match(device_t parent, cfdata_t
bus_space_handle_t ioh;
int rv;
- /* must match one of our known ID strings */
- if (strncmp(ea->ea_idstring, "USC024", 6))
+ if (!eisa_compatible_match(ea, compat_data))
return (0);
if (bus_space_map(iot, EISA_SLOT_ADDR(ea->ea_slot) +
@@ -110,20 +114,20 @@ uha_eisa_attach(device_t parent, device_
{
struct eisa_attach_args *ea = aux;
struct uha_softc *sc = device_private(self);
+ const struct device_compatible_entry *dce;
bus_space_tag_t iot = ea->ea_iot;
bus_dma_tag_t dmat = ea->ea_dmat;
bus_space_handle_t ioh;
struct uha_probe_data upd;
eisa_chipset_tag_t ec = ea->ea_ec;
eisa_intr_handle_t ih;
- const char *model, *intrstr;
+ const char *intrstr;
char intrbuf[EISA_INTRSTR_LEN];
- if (!strncmp(ea->ea_idstring, "USC024", 6))
- model = EISA_PRODUCT_USC0240;
- else
- model = "unknown model!";
- printf(": %s\n", model);
+ dce = eisa_compatible_lookup(ea, compat_data);
+ KASSERT(dce != NULL);
+
+ printf(": %s\n", (const char *)dce->data);
if (bus_space_map(iot, EISA_SLOT_ADDR(ea->ea_slot) +
UHA_EISA_SLOT_OFFSET, UHA_EISA_IOSIZE, 0, &ioh))