From 831cd78c747d792ed66379e6da5311808b63616c Mon Sep 17 00:00:00 2001 From: joe Date: Sun, 26 May 2002 23:54:37 +0000 Subject: Use aue_lookup for looking up devices. --- sys/dev/usb/if_aue.c | 144 +++++++++++++++++++++++------------------------- sys/dev/usb/if_auereg.h | 13 +---- 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; }; -- cgit v1.1