mirror of
https://github.com/opnsense/src.git
synced 2026-06-09 00:32:25 -04:00
MFNetBSD:
wi.c 1.64: Table driven IDs (ichiro) 1.59: Don't use magic numbers (ichiro) Also, added Sony, Lucent Embedded Ids and fix minor bugs for lucent cards (and submit those changes back to ichiro-san) Obtained from: NetBSD
This commit is contained in:
parent
80f5c8bf42
commit
dfdbc0533d
3 changed files with 125 additions and 102 deletions
|
|
@ -133,7 +133,7 @@ void wi_cache_store(struct wi_softc *, struct ether_header *,
|
|||
#endif
|
||||
|
||||
static int wi_get_cur_ssid(struct wi_softc *, char *, int *);
|
||||
static void wi_get_id(struct wi_softc *, device_t);
|
||||
static void wi_get_id(struct wi_softc *);
|
||||
static int wi_media_change(struct ifnet *);
|
||||
static void wi_media_status(struct ifnet *, struct ifmediareq *);
|
||||
|
||||
|
|
@ -142,6 +142,36 @@ static int wi_set_debug(struct wi_softc *, struct wi_req *);
|
|||
|
||||
devclass_t wi_devclass;
|
||||
|
||||
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_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 },
|
||||
{ WI_NIC_3842_MINI_AMD_ID, WI_NIC_3842_MINI_STR, WI_INTERSIL },
|
||||
{ WI_NIC_3842_MINI_SST_ID, WI_NIC_3842_MINI_STR, WI_INTERSIL },
|
||||
{ WI_NIC_3842_MINI_ATM_ID, WI_NIC_3842_MINI_STR, WI_INTERSIL },
|
||||
{ WI_NIC_3842_PCI_AMD_ID, WI_NIC_3842_PCI_STR, WI_INTERSIL },
|
||||
{ WI_NIC_3842_PCI_SST_ID, WI_NIC_3842_PCI_STR, WI_INTERSIL },
|
||||
{ WI_NIC_3842_PCI_ATM_ID, WI_NIC_3842_PCI_STR, WI_INTERSIL },
|
||||
{ WI_NIC_P3_PCMCIA_AMD_ID, WI_NIC_P3_PCMCIA_STR, WI_INTERSIL },
|
||||
{ WI_NIC_P3_PCMCIA_SST_ID, WI_NIC_P3_PCMCIA_STR, WI_INTERSIL },
|
||||
{ WI_NIC_P3_MINI_AMD_ID, WI_NIC_P3_MINI_STR, WI_INTERSIL },
|
||||
{ WI_NIC_P3_MINI_SST_ID, WI_NIC_P3_MINI_STR, WI_INTERSIL },
|
||||
{ 0, NULL, 0 },
|
||||
};
|
||||
|
||||
int
|
||||
wi_generic_detach(dev)
|
||||
device_t dev;
|
||||
|
|
@ -222,7 +252,7 @@ wi_generic_attach(device_t dev)
|
|||
|
||||
device_printf(dev, "802.11 address: %6D\n", sc->arpcom.ac_enaddr, ":");
|
||||
|
||||
wi_get_id(sc, dev);
|
||||
wi_get_id(sc);
|
||||
|
||||
ifp->if_softc = sc;
|
||||
ifp->if_unit = sc->wi_unit;
|
||||
|
|
@ -325,11 +355,11 @@ wi_generic_attach(device_t dev)
|
|||
}
|
||||
|
||||
static void
|
||||
wi_get_id(sc, dev)
|
||||
wi_get_id(sc)
|
||||
struct wi_softc *sc;
|
||||
device_t dev;
|
||||
{
|
||||
struct wi_ltv_ver ver;
|
||||
struct wi_card_ident *id;
|
||||
|
||||
/* getting chip identity */
|
||||
memset(&ver, 0, sizeof(ver));
|
||||
|
|
@ -337,74 +367,23 @@ wi_get_id(sc, dev)
|
|||
ver.wi_len = 5;
|
||||
wi_read_record(sc, (struct wi_ltv_gen *)&ver);
|
||||
device_printf(sc->dev, "using ");
|
||||
switch (le16toh(ver.wi_ver[0])) {
|
||||
case WI_NIC_EVB2:
|
||||
printf("RF:PRISM2 MAC:HFA3841");
|
||||
break;
|
||||
case WI_NIC_HWB3763:
|
||||
printf("RF:PRISM2 MAC:HFA3841 CARD:HWB3763 rev.B");
|
||||
break;
|
||||
case WI_NIC_HWB3163:
|
||||
printf("RF:PRISM2 MAC:HFA3841 CARD:HWB3163 rev.A");
|
||||
break;
|
||||
case WI_NIC_HWB3163B:
|
||||
printf("RF:PRISM2 MAC:HFA3841 CARD:HWB3163 rev.B");
|
||||
break;
|
||||
case WI_NIC_EVB3:
|
||||
case WI_NIC_3842_EVA:
|
||||
printf("RF:PRISM2 MAC:HFA3842 CARD:HFA3842 EVAL");
|
||||
break;
|
||||
case WI_NIC_HWB1153:
|
||||
printf("RF:PRISM1 MAC:HFA3841 CARD:HWB1153");
|
||||
break;
|
||||
case WI_NIC_P2_SST:
|
||||
case WI_NIC_EVB2_SST:
|
||||
printf("RF:PRISM2 MAC:HFA3841 CARD:HWB3163-SST-flash");
|
||||
break;
|
||||
case WI_NIC_3842_PCMCIA_AMD:
|
||||
case WI_NIC_3842_PCMCIA_SST:
|
||||
case WI_NIC_3842_PCMCIA_ATM:
|
||||
printf("RF:PRISM2.5 MAC:ISL3873");
|
||||
break;
|
||||
case WI_NIC_3842_MINI_AMD:
|
||||
case WI_NIC_3842_MINI_SST:
|
||||
case WI_NIC_3842_MINI_ATM:
|
||||
printf("RF:PRISM2.5 MAC:ISL3874A(Mini-PCI)");
|
||||
break;
|
||||
case WI_NIC_3842_PCI_AMD:
|
||||
case WI_NIC_3842_PCI_SST:
|
||||
case WI_NIC_3842_PCI_ATM:
|
||||
printf("RF:PRISM2.5 MAC:ISL3874A(PCI-bridge)");
|
||||
break;
|
||||
case WI_NIC_P3_PCMCIA_AMD:
|
||||
case WI_NIC_P3_PCMCIA_SST:
|
||||
printf("RF:PRISM3(PCMCIA)");
|
||||
break;
|
||||
case WI_NIC_P3_MINI_AMD:
|
||||
case WI_NIC_P3_MINI_SST:
|
||||
printf("RF:PRISM3(Mini-PCI)");
|
||||
break;
|
||||
case WI_NIC_LUCENT:
|
||||
printf("Lucent WaveLAN");
|
||||
break;
|
||||
case WI_NIC_SONY:
|
||||
printf("Sony");
|
||||
break;
|
||||
case WI_NIC_LUCENT_EMBEDDED:
|
||||
printf("Lucent WaveLAN (embedded)");
|
||||
break;
|
||||
default:
|
||||
if (le16toh(ver.wi_ver[0]) & 0x8000)
|
||||
printf("Unknown PRISM2 chip");
|
||||
else
|
||||
printf("Unknown Lucent chip");
|
||||
printf(" 0x%x", le16toh(ver.wi_ver[0]));
|
||||
break;
|
||||
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);
|
||||
sc->sc_firmware_type = id->firm_type;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (sc->sc_firmware_type == WI_NOTYPE) {
|
||||
if (le16toh(ver.wi_ver[0]) & 0x8000) {
|
||||
printf("Unknown PRISM2 chip");
|
||||
sc->sc_firmware_type = WI_INTERSIL;
|
||||
} else {
|
||||
printf("Unknown Lucent chip");
|
||||
sc->sc_firmware_type = WI_LUCENT;
|
||||
}
|
||||
}
|
||||
if (le16toh(ver.wi_ver[0]) & 0x8000)
|
||||
sc->sc_firmware_type = WI_INTERSIL;
|
||||
else
|
||||
sc->sc_firmware_type = WI_LUCENT;
|
||||
|
||||
if (sc->sc_firmware_type != WI_LUCENT) {
|
||||
/* get primary firmware version */
|
||||
|
|
@ -1066,10 +1045,12 @@ wi_write_record(sc, ltv)
|
|||
case WI_RID_ENCRYPTION:
|
||||
p2ltv.wi_type = WI_RID_P2_ENCRYPTION;
|
||||
p2ltv.wi_len = 2;
|
||||
if (ltv->wi_val)
|
||||
p2ltv.wi_val = 0x03;
|
||||
if (le16toh(ltv->wi_val))
|
||||
p2ltv.wi_val =htole16(PRIVACY_INVOKED |
|
||||
EXCLUDE_UNENCRYPTED);
|
||||
else
|
||||
p2ltv.wi_val = 0x90;
|
||||
p2ltv.wi_val =
|
||||
htole16(HOST_ENCRYPT | HOST_DECRYPT);
|
||||
ltv = &p2ltv;
|
||||
break;
|
||||
case WI_RID_TX_CRYPT_KEY:
|
||||
|
|
|
|||
|
|
@ -370,33 +370,68 @@ struct wi_ltv_ver {
|
|||
u_int16_t wi_len;
|
||||
u_int16_t wi_type;
|
||||
u_int16_t wi_ver[4];
|
||||
#define WI_NIC_LUCENT 0x0001
|
||||
#define WI_NIC_SONY 0x0002
|
||||
#define WI_NIC_LUCENT_EMBEDDED 0x0005
|
||||
#define WI_NIC_EVB2 0x8000
|
||||
#define WI_NIC_HWB3763 0x8001
|
||||
#define WI_NIC_HWB3163 0x8002
|
||||
#define WI_NIC_HWB3163B 0x8003
|
||||
#define WI_NIC_EVB3 0x8004
|
||||
#define WI_NIC_HWB1153 0x8007
|
||||
#define WI_NIC_P2_SST 0x8008 /* Prism2 with SST flush */
|
||||
#define WI_NIC_EVB2_SST 0x8009
|
||||
#define WI_NIC_3842_EVA 0x800A /* 3842 Evaluation Board */
|
||||
#define WI_NIC_3842_PCMCIA_AMD 0x800B /* Prism2.5 PCMCIA */
|
||||
#define WI_NIC_3842_PCMCIA_SST 0x800C
|
||||
#define WI_NIC_3842_PCMCIA_ATM 0x800D
|
||||
#define WI_NIC_3842_MINI_AMD 0x8012 /* Prism2.5 Mini-PCI */
|
||||
#define WI_NIC_3842_MINI_SST 0x8013
|
||||
#define WI_NIC_3842_MINI_ATM 0x8014
|
||||
#define WI_NIC_3842_PCI_AMD 0x8016 /* Prism2.5 PCI-bridge */
|
||||
#define WI_NIC_3842_PCI_SST 0x8017
|
||||
#define WI_NIC_3842_PCI_ATM 0x8018
|
||||
#define WI_NIC_P3_PCMCIA_AMD 0x801A /* Prism3 PCMCIA */
|
||||
#define WI_NIC_P3_PCMCIA_SST 0x801B
|
||||
#define WI_NIC_P3_MINI_AMD 0x8021 /* Prism3 Mini-PCI */
|
||||
#define WI_NIC_P3_MINI_SST 0x8022
|
||||
};
|
||||
|
||||
/* define card ident */
|
||||
#define WI_NIC_LUCENT_ID 0x0001
|
||||
#define WI_NIC_LUCENT_STR "Lucent Technologies, WaveLAN/IEEE"
|
||||
|
||||
#define WI_NIC_SONY_ID 0x0001
|
||||
#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"
|
||||
|
||||
#define WI_NIC_EVB2_ID 0x8000
|
||||
#define WI_NIC_EVB2_STR "RF:PRISM2 MAC:HFA3841"
|
||||
|
||||
#define WI_NIC_HWB3763_ID 0x8001
|
||||
#define WI_NIC_HWB3763_STR "RF:PRISM2 MAC:HFA3841 CARD:HWB3763 rev.B"
|
||||
|
||||
#define WI_NIC_HWB3163_ID 0x8002
|
||||
#define WI_NIC_HWB3163_STR "RF:PRISM2 MAC:HFA3841 CARD:HWB3163 rev.A"
|
||||
|
||||
#define WI_NIC_HWB3163B_ID 0x8003
|
||||
#define WI_NIC_HWB3163B_STR "RF:PRISM2 MAC:HFA3841 CARD:HWB3163 rev.B"
|
||||
|
||||
#define WI_NIC_EVB3_ID 0x8004
|
||||
#define WI_NIC_EVB3_STR "RF:PRISM2 MAC:HFA3842 CARD:HFA3842 EVAL"
|
||||
|
||||
#define WI_NIC_HWB1153_ID 0x8007
|
||||
#define WI_NIC_HWB1153_STR "RF:PRISM1 MAC:HFA3841 CARD:HWB1153"
|
||||
|
||||
#define WI_NIC_P2_SST_ID 0x8008 /* Prism2 with SST flush */
|
||||
#define WI_NIC_P2_SST_STR "RF:PRISM2 MAC:HFA3841 CARD:HWB3163-SST-flash"
|
||||
|
||||
#define WI_NIC_EVB2_SST_ID 0x8009
|
||||
#define WI_NIC_EVB2_SST_STR "RF:PRISM2 MAC:HFA3841 CARD:HWB3163-SST-flash"
|
||||
|
||||
#define WI_NIC_3842_EVA_ID 0x800A /* 3842 Evaluation Board */
|
||||
#define WI_NIC_3842_EVA_STR "RF:PRISM2 MAC:HFA3842 CARD:HFA3842 EVAL"
|
||||
|
||||
#define WI_NIC_3842_PCMCIA_AMD_ID 0x800B /* Prism2.5 PCMCIA */
|
||||
#define WI_NIC_3842_PCMCIA_SST_ID 0x800C
|
||||
#define WI_NIC_3842_PCMCIA_ATM_ID 0x800D
|
||||
#define WI_NIC_3842_PCMCIA_STR "RF:PRISM2.5 MAC:ISL3873"
|
||||
|
||||
#define WI_NIC_3842_MINI_AMD_ID 0x8012 /* Prism2.5 Mini-PCI */
|
||||
#define WI_NIC_3842_MINI_SST_ID 0x8013
|
||||
#define WI_NIC_3842_MINI_ATM_ID 0x8014
|
||||
#define WI_NIC_3842_MINI_STR "RF:PRISM2.5 MAC:ISL3874A(Mini-PCI)"
|
||||
|
||||
#define WI_NIC_3842_PCI_AMD_ID 0x8016 /* Prism2.5 PCI-bridge */
|
||||
#define WI_NIC_3842_PCI_SST_ID 0x8017
|
||||
#define WI_NIC_3842_PCI_ATM_ID 0x8018
|
||||
#define WI_NIC_3842_PCI_STR "RF:PRISM2.5 MAC:ISL3874A(PCI-bridge)"
|
||||
|
||||
#define WI_NIC_P3_PCMCIA_AMD_ID 0x801A /* Prism3 PCMCIA */
|
||||
#define WI_NIC_P3_PCMCIA_SST_ID 0x801B
|
||||
#define WI_NIC_P3_PCMCIA_STR "RF:PRISM3(PCMCIA)"
|
||||
|
||||
#define WI_NIC_P3_MINI_AMD_ID 0x8021 /* Prism3 Mini-PCI */
|
||||
#define WI_NIC_P3_MINI_SST_ID 0x8022
|
||||
#define WI_NIC_P3_MINI_STR "RF:PRISM3(Mini-PCI)"
|
||||
|
||||
/*
|
||||
* List of intended regulatory domains (0xFD11).
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -112,9 +112,10 @@ struct wi_softc {
|
|||
bus_space_tag_t wi_bmemtag;
|
||||
void * wi_intrhand;
|
||||
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 */
|
||||
int sc_sta_firmware_ver; /* Station firmware */
|
||||
int sc_enabled;
|
||||
|
|
@ -177,6 +178,12 @@ struct wi_softc {
|
|||
|
||||
};
|
||||
|
||||
struct wi_card_ident {
|
||||
u_int16_t card_id;
|
||||
char *card_name;
|
||||
u_int8_t firm_type;
|
||||
};
|
||||
|
||||
#define WI_LOCK(_sc)
|
||||
#define WI_UNLOCK(_sc)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue