summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorichiro <ichiro@NetBSD.org>2002-04-05 00:54:51 +0000
committerichiro <ichiro@NetBSD.org>2002-04-05 00:54:51 +0000
commit7d1236beff8fad1ae6ee582b238dcb04e8ec6ea4 (patch)
treed7756836ab05ccd0dd03ad9ad85d15da0128ba63 /sys/dev
parent2239aed3bdef339b0f4d9a28835d38541f53188d (diff)
fix minor bugs for lucent cards. (point out from Warner Losh)
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/ic/wi.c52
-rw-r--r--sys/dev/ic/wireg.h12
-rw-r--r--sys/dev/ic/wivar.h9
3 files changed, 43 insertions, 30 deletions
diff --git a/sys/dev/ic/wi.c b/sys/dev/ic/wi.c
index 01d222a8961..76a0c79ea17 100644
--- a/sys/dev/ic/wi.c
+++ b/sys/dev/ic/wi.c
@@ -1,4 +1,4 @@
-/* $NetBSD: wi.c,v 1.66 2002/04/04 17:43:31 jdolecek Exp $ */
+/* $NetBSD: wi.c,v 1.67 2002/04/05 00:54:51 ichiro Exp $ */
/*
* Copyright (c) 1997, 1998, 1999
@@ -70,7 +70,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: wi.c,v 1.66 2002/04/04 17:43:31 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: wi.c,v 1.67 2002/04/05 00:54:51 ichiro Exp $");
#define WI_HERMES_AUTOINC_WAR /* Work around data write autoinc bug. */
#define WI_HERMES_STATS_WAR /* Work around stats counter bug. */
@@ -148,16 +148,18 @@ static int wi_get_pm(struct wi_softc *, struct ieee80211_power *);
struct wi_card_ident wi_card_ident[] = {
/* CARD_ID CARD_NAME FIRM_TYPE */
- { WI_NIC_LUCENT_ID, WI_NIC_LUCENT_STR, WI_LUCENT },
- { WI_NIC_EVB2_ID, WI_NIC_EVB2_STR, WI_INTERSIL },
- { WI_NIC_HWB3763_ID, WI_NIC_HWB3763_STR, WI_INTERSIL },
- { WI_NIC_HWB3163_ID, WI_NIC_HWB3163_STR, WI_INTERSIL },
- { WI_NIC_HWB3163B_ID, WI_NIC_HWB3163B_STR, WI_INTERSIL },
- { WI_NIC_EVB3_ID, WI_NIC_EVB3_STR, WI_INTERSIL },
- { WI_NIC_HWB1153_ID, WI_NIC_HWB1153_STR, WI_INTERSIL },
- { WI_NIC_P2_SST_ID, WI_NIC_P2_SST_STR, WI_INTERSIL },
- { WI_NIC_EVB2_SST_ID, WI_NIC_EVB2_SST_STR, WI_INTERSIL },
- { WI_NIC_3842_EVA_ID, WI_NIC_3842_EVA_STR, WI_INTERSIL },
+ { WI_NIC_LUCENT_ID, WI_NIC_LUCENT_STR, WI_LUCENT },
+ { WI_NIC_SONY_ID, WI_NIC_SONY_STR, WI_LUCENT },
+ { WI_NIC_LUCENT_EMB_ID, WI_NIC_LUCENT_EMB_STR, WI_LUCENT },
+ { WI_NIC_EVB2_ID, WI_NIC_EVB2_STR, WI_INTERSIL },
+ { WI_NIC_HWB3763_ID, WI_NIC_HWB3763_STR, WI_INTERSIL },
+ { WI_NIC_HWB3163_ID, WI_NIC_HWB3163_STR, WI_INTERSIL },
+ { WI_NIC_HWB3163B_ID, WI_NIC_HWB3163B_STR, WI_INTERSIL },
+ { WI_NIC_EVB3_ID, WI_NIC_EVB3_STR, WI_INTERSIL },
+ { WI_NIC_HWB1153_ID, WI_NIC_HWB1153_STR, WI_INTERSIL },
+ { WI_NIC_P2_SST_ID, WI_NIC_P2_SST_STR, WI_INTERSIL },
+ { WI_NIC_EVB2_SST_ID, WI_NIC_EVB2_SST_STR, WI_INTERSIL },
+ { WI_NIC_3842_EVA_ID, WI_NIC_3842_EVA_STR, WI_INTERSIL },
{ WI_NIC_3842_PCMCIA_AMD_ID, WI_NIC_3842_PCMCIA_STR, WI_INTERSIL },
{ WI_NIC_3842_PCMCIA_SST_ID, WI_NIC_3842_PCMCIA_STR, WI_INTERSIL },
{ WI_NIC_3842_PCMCIA_ATM_ID, WI_NIC_3842_PCMCIA_STR, WI_INTERSIL },
@@ -1983,7 +1985,7 @@ wi_get_id(sc)
wi_read_record(sc, (struct wi_ltv_gen *)&ver);
printf("%s: using ", sc->sc_dev.dv_xname);
- sc->sc_firmware_type = NULL;
+ sc->sc_firmware_type = WI_NOTYPE;
for (id = wi_card_ident; id->card_name != NULL; id++) {
if (le16toh(ver.wi_ver[0]) == id->card_id) {
printf("%s", id->card_name);
@@ -1991,7 +1993,7 @@ wi_get_id(sc)
break;
}
}
- if (!sc->sc_firmware_type) {
+ if (sc->sc_firmware_type == WI_NOTYPE) {
if (le16toh(ver.wi_ver[0]) & 0x8000) {
printf("Unknown PRISM2 chip");
sc->sc_firmware_type = WI_INTERSIL;
@@ -2001,16 +2003,18 @@ wi_get_id(sc)
}
}
- /* get primary firmware version */
- memset(&ver, 0, sizeof(ver));
- ver.wi_type = WI_RID_PRI_IDENTITY;
- ver.wi_len = 5;
- wi_read_record(sc, (struct wi_ltv_gen *)&ver);
- LE16TOH(ver.wi_ver[1]);
- LE16TOH(ver.wi_ver[2]);
- LE16TOH(ver.wi_ver[3]);
- sc->sc_pri_firmware_ver = ver.wi_ver[2] * 10000 +
- ver.wi_ver[3] * 100 + ver.wi_ver[1];
+ /* get primary firmware version (Only Prism chips) */
+ if (sc->sc_firware_type != WI_LUCENT) {
+ memset(&ver, 0, sizeof(ver));
+ ver.wi_type = WI_RID_PRI_IDENTITY;
+ ver.wi_len = 5;
+ wi_read_record(sc, (struct wi_ltv_gen *)&ver);
+ LE16TOH(ver.wi_ver[1]);
+ LE16TOH(ver.wi_ver[2]);
+ LE16TOH(ver.wi_ver[3]);
+ sc->sc_pri_firmware_ver = ver.wi_ver[2] * 10000 +
+ ver.wi_ver[3] * 100 + ver.wi_ver[1];
+ }
/* get station firmware version */
memset(&ver, 0, sizeof(ver));
diff --git a/sys/dev/ic/wireg.h b/sys/dev/ic/wireg.h
index d5770b1058e..a94a4ed56ca 100644
--- a/sys/dev/ic/wireg.h
+++ b/sys/dev/ic/wireg.h
@@ -1,4 +1,4 @@
-/* $NetBSD: wireg.h,v 1.29 2002/04/04 07:15:17 ichiro Exp $ */
+/* $NetBSD: wireg.h,v 1.30 2002/04/05 00:54:52 ichiro Exp $ */
/*
* Copyright (c) 1997, 1998, 1999
@@ -425,9 +425,17 @@ struct wi_ltv_ver {
};
/* define card ident */
-#define WI_NIC_LUCENT_ID 0x0005
+/* Lucent */
+#define WI_NIC_LUCENT_ID 0x0001
#define WI_NIC_LUCENT_STR "Lucent Technologies, WaveLAN/IEEE"
+#define WI_NIC_SONY_ID 0x0002
+#define WI_NIC_SONY_STR "Sony WaveLAN/IEEE"
+
+#define WI_NIC_LUCENT_EMB_ID 0x0005
+#define WI_NIC_LUCENT_EMB_STR "Lucent Embedded WaveLAN/IEEE"
+
+/* Intersil */
#define WI_NIC_EVB2_ID 0x8000
#define WI_NIC_EVB2_STR "RF:PRISM2 MAC:HFA3841"
diff --git a/sys/dev/ic/wivar.h b/sys/dev/ic/wivar.h
index a45c4041463..b36cd9cbf63 100644
--- a/sys/dev/ic/wivar.h
+++ b/sys/dev/ic/wivar.h
@@ -1,4 +1,4 @@
-/* $NetBSD: wivar.h,v 1.13 2002/04/04 17:43:32 jdolecek Exp $ */
+/* $NetBSD: wivar.h,v 1.14 2002/04/05 00:54:52 ichiro Exp $ */
/*
* Copyright (c) 1997, 1998, 1999
@@ -49,9 +49,10 @@ struct wi_softc {
int sc_attached;
int sc_enabled;
int sc_firmware_type;
-#define WI_LUCENT 0
-#define WI_INTERSIL 1
-#define WI_SYMBOL 2
+#define WI_NOTYPE 0
+#define WI_LUCENT 1
+#define WI_INTERSIL 2
+#define WI_SYMBOL 3
int sc_pri_firmware_ver; /* Primary firmware version */
int sc_sta_firmware_ver; /* Station firmware version */
int sc_pci; /* attach to PCI-Bus */