diff options
author | Todd C. Miller <millert@cvs.openbsd.org> | 2004-07-15 11:53:33 +0000 |
---|---|---|
committer | Todd C. Miller <millert@cvs.openbsd.org> | 2004-07-15 11:53:33 +0000 |
commit | a4cdf0bbaeaca5aae7cd99e8bc9b456a60cd0f46 (patch) | |
tree | c2c5b93160f8862b02a76b59efc8030e92bde3a9 /sys/dev/ic/atw.c | |
parent | 2c01e409dfcdd0c67e913813b80fad4715c58eb4 (diff) |
In ad hoc mode, don't set the mysterious EA bit in the Network Access
Register. ADMtek's reference driver does not use it at all, and it
does not seem to make any difference whether we set it or not. Also
remove some dead code and test instrumentation. From NetBSD (dyoung).
Diffstat (limited to 'sys/dev/ic/atw.c')
-rw-r--r-- | sys/dev/ic/atw.c | 87 |
1 files changed, 30 insertions, 57 deletions
diff --git a/sys/dev/ic/atw.c b/sys/dev/ic/atw.c index 05d546564c6..967a337fed4 100644 --- a/sys/dev/ic/atw.c +++ b/sys/dev/ic/atw.c @@ -1,5 +1,5 @@ -/* $OpenBSD: atw.c,v 1.5 2004/07/07 19:19:37 millert Exp $ */ -/* $NetBSD: atw.c,v 1.37 2004/06/23 09:41:54 dyoung Exp $ */ +/* $OpenBSD: atw.c,v 1.6 2004/07/15 11:53:32 millert Exp $ */ +/* $NetBSD: atw.c,v 1.39 2004/07/15 05:54:13 dyoung Exp $ */ /*- * Copyright (c) 1998, 1999, 2000, 2002, 2003, 2004 The NetBSD Foundation, Inc. @@ -43,7 +43,7 @@ #include <sys/cdefs.h> #if defined(__NetBSD__) -__KERNEL_RCSID(0, "$NetBSD: atw.c,v 1.37 2004/06/23 09:41:54 dyoung Exp $"); +__KERNEL_RCSID(0, "$NetBSD: atw.c,v 1.39 2004/07/15 05:54:13 dyoung Exp $"); #endif #include "bpfilter.h" @@ -133,10 +133,6 @@ __KERNEL_RCSID(0, "$NetBSD: atw.c,v 1.37 2004/06/23 09:41:54 dyoung Exp $"); * * initialize rx/tx * - * IBSS join/create - * - * set ATW_NAR_EA (is set by ASIC?) - * * BSS join: (re)association response * * set ATW_FRCTL_AID @@ -156,11 +152,6 @@ int atw_beacon_len_adjust = 4; int atw_dwelltime = 200; #ifdef ATW_DEBUG -int atw_xhdrctl = 0; -int atw_xrtylmt = ~0; -int atw_xservice = IEEE80211_PLCP_SERVICE; -int atw_xpaylen = 0; - int atw_debug = 0; #define ATW_DPRINTF(x) if (atw_debug > 0) printf x @@ -170,9 +161,19 @@ int atw_debug = 0; #define DPRINTF2(sc, x) if ((sc)->sc_ic.ic_if.if_flags & IFF_DEBUG) ATW_DPRINTF2(x) #define DPRINTF3(sc, x) if ((sc)->sc_ic.ic_if.if_flags & IFF_DEBUG) ATW_DPRINTF3(x) void atw_print_regs(struct atw_softc *, const char *); +void atw_dump_pkt(struct ifnet *, struct mbuf *); + +/* Note well: I never got atw_rf3000_read or atw_si4126_read to work. */ +# ifdef ATW_BBPDEBUG +int atw_rf3000_read(struct atw_softc *sc, u_int, u_int *); void atw_rf3000_print(struct atw_softc *); +# endif /* ATW_BBPDEBUG */ + +# ifdef ATW_SYNDEBUG +int atw_si4126_read(struct atw_softc *, u_int, u_int *); void atw_si4126_print(struct atw_softc *); -void atw_dump_pkt(struct ifnet *, struct mbuf *); +# endif /* ATW_SYNDEBUG */ + #else #define ATW_DPRINTF(x) #define ATW_DPRINTF2(x) @@ -241,16 +242,10 @@ void atw_rfio_enable(struct atw_softc *, int); int atw_rf3000_init(struct atw_softc *); int atw_rf3000_tune(struct atw_softc *, u_int8_t); int atw_rf3000_write(struct atw_softc *, u_int, u_int); -#ifdef ATW_DEBUG -int atw_rf3000_read(struct atw_softc *sc, u_int, u_int *); -#endif /* ATW_DEBUG */ /* Silicon Laboratories Si4126 RF/IF Synthesizer */ int atw_si4126_tune(struct atw_softc *, u_int8_t); int atw_si4126_write(struct atw_softc *, u_int, u_int); -#ifdef ATW_DEBUG -int atw_si4126_read(struct atw_softc *, u_int, u_int *); -#endif /* ATW_DEBUG */ const struct atw_txthresh_tab atw_txthresh_tab_lo[] = ATW_TXTHRESH_TAB_LO_RATE; const struct atw_txthresh_tab atw_txthresh_tab_hi[] = ATW_TXTHRESH_TAB_HI_RATE; @@ -1216,15 +1211,12 @@ atw_init(struct ifnet *ifp) ic->ic_flags &= ~IEEE80211_F_IBSSON; switch (ic->ic_opmode) { case IEEE80211_M_STA: - sc->sc_opmode &= ~ATW_NAR_EA; break; case IEEE80211_M_AHDEMO: /* XXX */ case IEEE80211_M_IBSS: ic->ic_flags |= IEEE80211_F_IBSSON; /*FALLTHROUGH*/ case IEEE80211_M_HOSTAP: /* XXX */ - /* EA bit seems important for ad hoc reception. */ - sc->sc_opmode |= ATW_NAR_EA; break; case IEEE80211_M_MONITOR: /* XXX */ break; @@ -1340,7 +1332,7 @@ atw_tune(struct atw_softc *sc) return rc; } -#ifdef ATW_DEBUG +#ifdef ATW_SYNDEBUG void atw_si4126_print(struct atw_softc *sc) { @@ -1359,7 +1351,7 @@ atw_si4126_print(struct atw_softc *sc) printf("%05x\n", val); } } -#endif /* ATW_DEBUG */ +#endif /* ATW_SYNDEBUG */ /* Tune to channel chan by adjusting the Si4126 RF/IF synthesizer. * @@ -1387,9 +1379,9 @@ atw_si4126_tune(struct atw_softc *sc, u_int8_t chan) u_int32_t reg; u_int16_t gain; -#ifdef ATW_DEBUG +#ifdef ATW_SYNDEBUG atw_si4126_print(sc); -#endif /* ATW_DEBUG */ +#endif /* ATW_SYNDEBUG */ if (chan == 14) mhz = 2484; @@ -1470,9 +1462,9 @@ atw_si4126_tune(struct atw_softc *sc, u_int8_t chan) ATW_WRITE(sc, ATW_GPIO, reg); } -#ifdef ATW_DEBUG +#ifdef ATW_SYNDEBUG atw_si4126_print(sc); -#endif /* ATW_DEBUG */ +#endif /* ATW_SYNDEBUG */ out: atw_rfio_enable(sc, 0); @@ -1542,7 +1534,7 @@ out: return rc; } -#ifdef ATW_DEBUG +#ifdef ATW_BBPDEBUG void atw_rf3000_print(struct atw_softc *sc) { @@ -1561,7 +1553,7 @@ atw_rf3000_print(struct atw_softc *sc) printf("%08x\n", val); } } -#endif /* ATW_DEBUG */ +#endif /* ATW_BBPDEBUG */ /* Set the power settings on the BBP for channel `chan'. */ int @@ -1586,9 +1578,9 @@ atw_rf3000_tune(struct atw_softc *sc, u_int8_t chan) lna_gs_thresh >>= 8; } -#ifdef ATW_DEBUG +#ifdef ATW_BBPDEBUG atw_rf3000_print(sc); -#endif /* ATW_DEBUG */ +#endif /* ATW_BBPDEBUG */ DPRINTF(sc, ("%s: chan %d txpower %02x, lpf_cutoff %02x, " "lna_gs_thresh %02x\n", @@ -1613,9 +1605,9 @@ atw_rf3000_tune(struct atw_softc *sc, u_int8_t chan) ATW_PLCPHD_SERVICE_MASK); ATW_WRITE(sc, ATW_PLCPHD, reg); -#ifdef ATW_DEBUG +#ifdef ATW_BBPDEBUG atw_rf3000_print(sc); -#endif /* ATW_DEBUG */ +#endif /* ATW_BBPDEBUG */ out: atw_rfio_enable(sc, 0); @@ -1679,7 +1671,7 @@ atw_rf3000_write(struct atw_softc *sc, u_int addr, u_int val) * of the magic I have derived from a binary-only driver concerns * the "chip address" (see the RF3000 manual). */ -#ifdef ATW_DEBUG +#ifdef ATW_BBPDEBUG int atw_rf3000_read(struct atw_softc *sc, u_int addr, u_int *val) { @@ -1719,7 +1711,7 @@ atw_rf3000_read(struct atw_softc *sc, u_int addr, u_int *val) *val = MASK_AND_RSHIFT(reg, ATW_BBPCTL_DATA_MASK); return 0; } -#endif /* ATW_DEBUG */ +#endif /* ATW_BBPDEBUG */ /* Write a register on the Si4126 RF/IF synthesizer using the registers * provided by the ADM8211 for that purpose. @@ -1779,7 +1771,7 @@ atw_si4126_write(struct atw_softc *sc, u_int addr, u_int val) * XXX This does not seem to work. The ADM8211 must require more or * different magic to read the chip than to write it. */ -#ifdef ATW_DEBUG +#ifdef ATW_SYNDEBUG int atw_si4126_read(struct atw_softc *sc, u_int addr, u_int *val) { @@ -1822,7 +1814,7 @@ atw_si4126_read(struct atw_softc *sc, u_int addr, u_int *val) ATW_SYNCTL_DATA_MASK); return 0; } -#endif /* ATW_DEBUG */ +#endif /* ATW_SYNDEBUG */ /* XXX is the endianness correct? test. */ #define atw_calchash(addr) \ @@ -3491,17 +3483,7 @@ atw_start(struct ifnet *ifp) hh->atw_paylen = htole16(m0->m_pkthdr.len - sizeof(struct atw_frame)); -#if 0 - /* this virtually guaranteed that WEP-encrypted frames - * are fragmented. oops. - */ - hh->atw_fragthr = htole16(m0->m_pkthdr.len - - sizeof(struct atw_frame) + sizeof(struct ieee80211_frame)); - hh->atw_fragthr &= htole16(ATW_FRAGTHR_FRAGTHR_MASK); -#else hh->atw_fragthr = htole16(ATW_FRAGTHR_FRAGTHR_MASK); -#endif - hh->atw_rtylmt = 3; hh->atw_hdrctl = htole16(ATW_HDRCTL_UNKNOWN1); if (do_encrypt) { @@ -3522,15 +3504,6 @@ atw_start(struct ifnet *ifp) } #ifdef ATW_DEBUG - /* experimental stuff */ - if (atw_xrtylmt != ~0) - hh->atw_rtylmt = atw_xrtylmt; - if (atw_xhdrctl != 0) - hh->atw_hdrctl |= htole16(atw_xhdrctl); - if (atw_xservice != IEEE80211_PLCP_SERVICE) - hh->atw_service = atw_xservice; - if (atw_xpaylen != 0) - hh->atw_paylen = htole16(atw_xpaylen); hh->atw_fragnum = 0; if ((ifp->if_flags & IFF_DEBUG) != 0 && atw_debug > 2) { |