summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjoe <joe@FreeBSD.org>2002-05-26 23:54:37 +0000
committerjoe <joe@FreeBSD.org>2002-05-26 23:54:37 +0000
commit831cd78c747d792ed66379e6da5311808b63616c (patch)
treec0c4658188ed1453fa3719cf45fc3d22b79f4133
parent334090e93788356c92a8aa7097fb56c6dc9e8a97 (diff)
downloadFreeBSD-src-831cd78c747d792ed66379e6da5311808b63616c.zip
FreeBSD-src-831cd78c747d792ed66379e6da5311808b63616c.tar.gz
Use aue_lookup for looking up devices.
-rw-r--r--sys/dev/usb/if_aue.c144
-rw-r--r--sys/dev/usb/if_auereg.h13
2 files changed, 71 insertions, 86 deletions
diff --git a/sys/dev/usb/if_aue.c b/sys/dev/usb/if_aue.c
index ca5e517..cfe8dc0 100644
--- a/sys/dev/usb/if_aue.c
+++ b/sys/dev/usb/if_aue.c
@@ -105,58 +105,66 @@ static const char rcsid[] =
/*
* Various supported device vendors/products.
*/
-Static struct aue_type aue_devs[] = {
- { USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX1, PNA|PII },
- { USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX2, PII },
- { USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_UFE1000, LSYS },
- { USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX4, PNA },
- { USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX5, PNA },
- { USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX6, PII },
- { USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX7, PII },
- { USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX8, PII },
- { USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX9, PNA },
- { USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX10, 0 },
- { USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_DSB650TX_PNA, 0 },
- { USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_USB320_EC, 0 },
- { USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_SS1001, PII },
- { USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUS, PNA },
- { USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUSII, PII },
- { USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USB100, 0 },
- { USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USBLP100, PNA },
- { USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USBEL100, 0 },
- { USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USBE100, PII },
- { USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB_TX, 0 },
- { USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB_TXS,PII },
- { USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX4, LSYS|PII },
- { USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX1, LSYS },
- { USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX, LSYS },
- { USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX_PNA, PNA },
- { USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX3, LSYS|PII },
- { USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX2, LSYS|PII },
- { USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650, LSYS },
- { USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX0, 0 },
- { USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX1, 0 },
- { USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX2, 0 },
- { USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX3, PII },
- { USB_VENDOR_ELSA, USB_PRODUCT_ELSA_USB2ETHERNET, 0 },
- { USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBETTX, 0 },
- { USB_VENDOR_KINGSTON, USB_PRODUCT_KINGSTON_KNU101TX, 0 },
- { USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10TX1, LSYS|PII },
- { USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10T, LSYS },
- { USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB100TX, LSYS },
- { USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB100H1, LSYS|PNA },
- { USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10TA, LSYS },
- { USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10TX2, LSYS|PII },
- { USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUATX1, 0 },
- { USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUATX5, 0 },
- { USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUA2TX5, PII },
- { USB_VENDOR_SIEMENS, USB_PRODUCT_SIEMENS_SPEEDSTREAM, PII },
- { USB_VENDOR_SMARTBRIDGES, USB_PRODUCT_SMARTBRIDGES_SMARTNIC,PII },
- { USB_VENDOR_SMC, USB_PRODUCT_SMC_2202USB, 0 },
- { USB_VENDOR_SOHOWARE, USB_PRODUCT_SOHOWARE_NUB100, 0 },
- { 0, 0, 0 }
+struct aue_type {
+ struct usb_devno aue_dev;
+ u_int16_t aue_flags;
+#define LSYS 0x0001 /* use Linksys reset */
+#define PNA 0x0002 /* has Home PNA */
+#define PII 0x0004 /* Pegasus II chip */
};
+Static const struct aue_type aue_devs[] = {
+ {{ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX1}, PNA|PII },
+ {{ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX2}, PII },
+ {{ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_UFE1000}, LSYS },
+ {{ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX4}, PNA },
+ {{ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX5}, PNA },
+ {{ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX6}, PII },
+ {{ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX7}, PII },
+ {{ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX8}, PII },
+ {{ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX9}, PNA },
+ {{ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX10}, 0 },
+ {{ USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_DSB650TX_PNA}, 0 },
+ {{ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_USB320_EC}, 0 },
+ {{ USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_SS1001}, PII },
+ {{ USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUS}, PNA },
+ {{ USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUSII}, PII },
+ {{ USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USB100}, 0 },
+ {{ USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USBLP100}, PNA },
+ {{ USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USBEL100}, 0 },
+ {{ USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USBE100}, PII },
+ {{ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB_TX}, 0 },
+ {{ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB_TXS},PII },
+ {{ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX4}, LSYS|PII },
+ {{ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX1}, LSYS },
+ {{ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX}, LSYS },
+ {{ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX_PNA}, PNA },
+ {{ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX3}, LSYS|PII },
+ {{ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX2}, LSYS|PII },
+ {{ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650}, LSYS },
+ {{ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX0}, 0 },
+ {{ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX1}, 0 },
+ {{ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX2}, 0 },
+ {{ USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX3}, PII },
+ {{ USB_VENDOR_ELSA, USB_PRODUCT_ELSA_USB2ETHERNET}, 0 },
+ {{ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBETTX}, 0 },
+ {{ USB_VENDOR_KINGSTON, USB_PRODUCT_KINGSTON_KNU101TX}, 0 },
+ {{ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10TX1}, LSYS|PII },
+ {{ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10T}, LSYS },
+ {{ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB100TX}, LSYS },
+ {{ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB100H1}, LSYS|PNA },
+ {{ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10TA}, LSYS },
+ {{ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10TX2}, LSYS|PII },
+ {{ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUATX1}, 0 },
+ {{ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUATX5}, 0 },
+ {{ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUA2TX5}, PII },
+ {{ USB_VENDOR_SIEMENS, USB_PRODUCT_SIEMENS_SPEEDSTREAM}, PII },
+ {{ USB_VENDOR_SMARTBRIDGES, USB_PRODUCT_SMARTBRIDGES_SMARTNIC},PII },
+ {{ USB_VENDOR_SMC, USB_PRODUCT_SMC_2202USB}, 0 },
+ {{ USB_VENDOR_SOHOWARE, USB_PRODUCT_SOHOWARE_NUB100}, 0 },
+};
+#define aue_lookup(v, p) ((const struct aue_type *)usb_lookup(aue_devs, v, p))
+
Static struct usb_qdat aue_qdat;
Static int aue_match(device_ptr_t);
@@ -415,8 +423,8 @@ aue_miibus_readreg(device_ptr_t dev, int phy, int reg)
* happens to be configured for MII address 3,
* so we filter that out.
*/
- if (sc->aue_info->aue_vid == USB_VENDOR_ADMTEK &&
- sc->aue_info->aue_did == USB_PRODUCT_ADMTEK_PEGASUS) {
+ if (sc->aue_vendor == USB_VENDOR_ADMTEK &&
+ sc->aue_product == USB_PRODUCT_ADMTEK_PEGASUS) {
if (phy == 3)
return (0);
#ifdef notdef
@@ -493,7 +501,7 @@ aue_miibus_statchg(device_ptr_t dev)
* This turns on the 'dual link LED' bin in the auxmode
* register of the Broadcom PHY.
*/
- if (sc->aue_info->aue_flags & LSYS) {
+ if (sc->aue_flags & LSYS) {
u_int16_t auxmode;
auxmode = aue_miibus_readreg(dev, 0, 0x1b);
aue_miibus_writereg(dev, 0, 0x1b, auxmode | 0x04);
@@ -593,7 +601,7 @@ aue_reset(struct aue_softc *sc)
aue_csr_write_1(sc, AUE_GPIO0, AUE_GPIO_OUT0|AUE_GPIO_SEL0);
aue_csr_write_1(sc, AUE_GPIO0, AUE_GPIO_OUT0|AUE_GPIO_SEL0|AUE_GPIO_SEL1);
- if (sc->aue_info->aue_flags & LSYS) {
+ if (sc->aue_flags & LSYS) {
/* Grrr. LinkSys has to be different from everyone else. */
aue_csr_write_1(sc, AUE_GPIO0,
AUE_GPIO_SEL0 | AUE_GPIO_SEL1);
@@ -601,7 +609,7 @@ aue_reset(struct aue_softc *sc)
AUE_GPIO_SEL0 | AUE_GPIO_SEL1 | AUE_GPIO_OUT0);
}
- if (sc->aue_info->aue_flags & PII)
+ if (sc->aue_flags & PII)
aue_reset_pegasus_II(sc);
/* Wait a little while for the chip to get its brains in order. */
@@ -616,21 +624,12 @@ aue_reset(struct aue_softc *sc)
USB_MATCH(aue)
{
USB_MATCH_START(aue, uaa);
- struct aue_type *t;
if (uaa->iface != NULL)
return (UMATCH_NONE);
- t = aue_devs;
- while(t->aue_vid) {
- if (uaa->vendor == t->aue_vid &&
- uaa->product == t->aue_did) {
- return (UMATCH_VENDOR_PRODUCT);
- }
- t++;
- }
-
- return (UMATCH_NONE);
+ return (aue_lookup(uaa->vendor, uaa->product) != NULL ?
+ UMATCH_VENDOR_PRODUCT : UMATCH_NONE);
}
/*
@@ -648,7 +647,6 @@ USB_ATTACH(aue)
usb_interface_descriptor_t *id;
usb_endpoint_descriptor_t *ed;
int i;
- struct aue_type *t;
bzero(sc, sizeof(struct aue_softc));
@@ -671,16 +669,10 @@ USB_ATTACH(aue)
}
sc->aue_iface = iface;
+ sc->aue_flags = aue_lookup(uaa->vendor, uaa->product)->aue_flags;
- t = aue_devs;
- while(t->aue_vid) {
- if (uaa->vendor == t->aue_vid &&
- uaa->product == t->aue_did) {
- sc->aue_info = t;
- break;
- }
- t++;
- }
+ sc->aue_product = uaa->product;
+ sc->aue_vendor = uaa->vendor;
id = usbd_get_interface_descriptor(sc->aue_iface);
diff --git a/sys/dev/usb/if_auereg.h b/sys/dev/usb/if_auereg.h
index 4c45285..57ad525 100644
--- a/sys/dev/usb/if_auereg.h
+++ b/sys/dev/usb/if_auereg.h
@@ -196,15 +196,6 @@ struct aue_rxpkt {
#define AUE_RXSTAT_DRIBBLE 0x10
#define AUE_RXSTAT_MASK 0x1E
-struct aue_type {
- u_int16_t aue_vid;
- u_int16_t aue_did;
- u_int16_t aue_flags;
-#define LSYS 0x0001 /* use Linksys reset */
-#define PNA 0x0002 /* has Home PNA */
-#define PII 0x0004 /* Pegasus II chip */
-};
-
#define AUE_TX_LIST_CNT 1
#define AUE_RX_LIST_CNT 1
@@ -242,7 +233,8 @@ struct aue_softc {
device_t aue_miibus;
usbd_device_handle aue_udev;
usbd_interface_handle aue_iface;
- struct aue_type *aue_info;
+ u_int16_t aue_vendor;
+ u_int16_t aue_product;
int aue_ed[AUE_ENDPT_MAX];
usbd_pipe_handle aue_ep[AUE_ENDPT_MAX];
int aue_unit;
@@ -251,6 +243,7 @@ struct aue_softc {
struct aue_cdata aue_cdata;
struct callout_handle aue_stat_ch;
struct mtx aue_mtx;
+ u_int16_t aue_flags;
char aue_dying;
struct timeval aue_rx_notice;
};
OpenPOWER on IntegriCloud