Handle the Linksys USB100H1 like the other Linksys adapters.

Restructure the code a little.
This commit is contained in:
augustss 2000-05-06 20:38:59 +00:00
parent 20e0a208fb
commit 26f708a5a3
2 changed files with 44 additions and 36 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: if_aue.c,v 1.40 2000/05/06 18:28:01 augustss Exp $ */
/* $NetBSD: if_aue.c,v 1.41 2000/05/06 20:38:59 augustss Exp $ */
/*
* Copyright (c) 1997, 1998, 1999, 2000
* Bill Paul <wpaul@ee.columbia.edu>. All rights reserved.
@ -178,23 +178,31 @@ int auedebug = 0;
/*
* Various supported device vendors/products.
*/
struct aue_type {
u_int16_t aue_vid;
u_int16_t aue_did;
char aue_linksys;
};
Static struct aue_type aue_devs[] = {
{ USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USB100 },
{ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUATX },
{ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB100TX },
{ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB100H1 },
{ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10TA },
{ USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUS },
{ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX },
{ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX_PNA },
{ USB_VENDOR_SMC, USB_PRODUCT_SMC_2202USB },
{ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB_TX },
{ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBETTX },
{ 0, 0 }
{ USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USB100, 0 },
{ USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUATX, 0 },
{ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB100TX, 1 },
{ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB100H1, 1 },
{ USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10TA, 1 },
{ USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUS, 0 },
{ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX, 1 },
{ USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX_PNA, 0 },
{ USB_VENDOR_SMC, USB_PRODUCT_SMC_2202USB, 0 },
{ USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB_TX, 0 },
{ USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBETTX, 0 },
{ 0, 0, 0 }
};
USB_DECLARE_DRIVER(aue);
Static struct aue_type *aue_lookup __P((u_int16_t vendor, u_int16_t product));
Static int aue_tx_list_init __P((struct aue_softc *));
Static int aue_rx_list_init __P((struct aue_softc *));
Static int aue_newbuf __P((struct aue_softc *, struct aue_chain *,
@ -585,12 +593,8 @@ aue_miibus_statchg(dev)
* This turns on the 'dual link LED' bin in the auxmode
* register of the Broadcom PHY.
*/
if ((sc->aue_vendor == USB_VENDOR_LINKSYS &&
(sc->aue_product == USB_PRODUCT_LINKSYS_USB100TX ||
sc->aue_product == USB_PRODUCT_LINKSYS_USB10TA)) ||
(sc->aue_vendor == USB_VENDOR_DLINK &&
sc->aue_product == USB_PRODUCT_DLINK_DSB650TX)) {
u_int16_t auxmode;
if (sc->aue_linksys) {
u_int16_t auxmode;
auxmode = aue_miibus_readreg(dev, 0, 0x1b);
aue_miibus_writereg(dev, 0, 0x1b, auxmode | 0x04);
}
@ -708,11 +712,7 @@ aue_reset(sc)
AUE_GPIO_OUT0 | AUE_GPIO_SEL0 | AUE_GPIO_SEL1);
/* Grrr. LinkSys has to be different from everyone else. */
if ((sc->aue_vendor == USB_VENDOR_LINKSYS &&
(sc->aue_product == USB_PRODUCT_LINKSYS_USB100TX ||
sc->aue_product == USB_PRODUCT_LINKSYS_USB10TA)) ||
(sc->aue_vendor == USB_VENDOR_DLINK &&
sc->aue_product == USB_PRODUCT_DLINK_DSB650TX)) {
if (sc->aue_linksys) {
aue_csr_write_1(sc, AUE_GPIO0,
AUE_GPIO_SEL0 | AUE_GPIO_SEL1);
aue_csr_write_1(sc, AUE_GPIO0,
@ -723,22 +723,31 @@ aue_reset(sc)
delay(10000); /* XXX */
}
Static struct aue_type *
aue_lookup(vendor, product)
u_int16_t vendor;
u_int16_t product;
{
struct aue_type *t;
for (t = aue_devs; t->aue_vid != 0; t++)
if (vendor == t->aue_vid && product == t->aue_did)
return (t);
return (NULL);
}
/*
* Probe for a Pegasus chip.
*/
USB_MATCH(aue)
{
USB_MATCH_START(aue, uaa);
struct aue_type *t;
if (uaa->iface != NULL)
return (UMATCH_NONE);
for (t = aue_devs; t->aue_vid != 0; t++)
if (uaa->vendor == t->aue_vid && uaa->product == t->aue_did)
return (UMATCH_VENDOR_PRODUCT);
return (UMATCH_NONE);
return (aue_lookup(uaa->vendor, uaa->product) != NULL ?
UMATCH_VENDOR_PRODUCT : UMATCH_NONE);
}
/*
@ -784,6 +793,8 @@ USB_ATTACH(aue)
USB_ATTACH_ERROR_RETURN;
}
sc->aue_linksys = aue_lookup(uaa->vendor, uaa->product)->aue_linksys;
sc->aue_udev = dev;
sc->aue_iface = iface;
sc->aue_product = uaa->product;

View File

@ -1,4 +1,4 @@
/* $NetBSD: if_auereg.h,v 1.12 2000/04/04 20:16:19 augustss Exp $ */
/* $NetBSD: if_auereg.h,v 1.13 2000/05/06 20:38:59 augustss Exp $ */
/*
* Copyright (c) 1997, 1998, 1999
* Bill Paul <wpaul@ee.columbia.edu>. All rights reserved.
@ -197,11 +197,6 @@ struct aue_rxpkt {
/*************** The rest belongs in if_auevar.h *************/
struct aue_type {
u_int16_t aue_vid;
u_int16_t aue_did;
};
#define AUE_TX_LIST_CNT 1
#define AUE_RX_LIST_CNT 1
@ -263,6 +258,8 @@ struct aue_softc {
int aue_if_flags;
struct aue_cdata aue_cdata;
char aue_linksys;
char aue_dying;
char aue_attached;
u_int aue_rx_errs;