diff options
author | Damien Bergamini <damien@cvs.openbsd.org> | 2006-08-03 09:28:14 +0000 |
---|---|---|
committer | Damien Bergamini <damien@cvs.openbsd.org> | 2006-08-03 09:28:14 +0000 |
commit | 0edca7891770747d9e9f82e23e97545897a65eac (patch) | |
tree | ac19aace6b43f2ae893a42276a41cccda012801e /sys/dev/ic/rt2661.c | |
parent | f85ae19f18e2f5a368ae2ec1ee257ec9c88aab27 (diff) |
802.11a uses a 16 microseconds short interframe space.
With this change, I now have a working 802.11a ral-based AP.
Fix rt2661_set_macaddr() so that we don't override the "unicast to me"
flag in RT2661_MAC_CSR3 when setting the MAC address.
Thanks to wim@ for donating a RT2561 a/b/g adapter.
Diffstat (limited to 'sys/dev/ic/rt2661.c')
-rw-r--r-- | sys/dev/ic/rt2661.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/sys/dev/ic/rt2661.c b/sys/dev/ic/rt2661.c index adf38416660..67e28aaf16e 100644 --- a/sys/dev/ic/rt2661.c +++ b/sys/dev/ic/rt2661.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rt2661.c,v 1.24 2006/07/18 16:40:30 damien Exp $ */ +/* $OpenBSD: rt2661.c,v 1.25 2006/08/03 09:28:13 damien Exp $ */ /*- * Copyright (c) 2006 @@ -1283,8 +1283,6 @@ rt2661_intr(void *arg) #define RAL_ACK_SIZE 14 /* 10 + 4(FCS) */ #define RAL_CTS_SIZE 14 /* 10 + 4(FCS) */ -#define RAL_SIFS 10 /* us */ - /* * This function is only used by the Rx radiotap code. It returns the rate at * which a given frame was received. @@ -1529,7 +1527,7 @@ rt2661_tx_mgt(struct rt2661_softc *sc, struct mbuf *m0, flags |= RT2661_TX_NEED_ACK; dur = rt2661_txtime(RAL_ACK_SIZE, rate, ic->ic_flags) + - RAL_SIFS; + sc->sifs; *(uint16_t *)wh->i_dur = htole16(dur); /* tell hardware to set timestamp in probe responses */ @@ -1669,7 +1667,7 @@ rt2661_tx_data(struct rt2661_softc *sc, struct mbuf *m0, dur = rt2661_txtime(m0->m_pkthdr.len + 4, rate, ic->ic_flags) + rt2661_txtime(RAL_CTS_SIZE, rtsrate, ic->ic_flags) + rt2661_txtime(RAL_ACK_SIZE, ackrate, ic->ic_flags) + - 3 * RAL_SIFS; + 3 * sc->sifs; m = rt2661_get_rts(sc, wh, dur); if (m == NULL) { @@ -1800,7 +1798,7 @@ rt2661_tx_data(struct rt2661_softc *sc, struct mbuf *m0, flags |= RT2661_TX_NEED_ACK; dur = rt2661_txtime(RAL_ACK_SIZE, rt2661_ack_rate(ic, rate), - ic->ic_flags) + RAL_SIFS; + ic->ic_flags) + sc->sifs; *(uint16_t *)wh->i_dur = htole16(dur); } @@ -2197,6 +2195,9 @@ rt2661_select_band(struct rt2661_softc *sc, struct ieee80211_channel *c) else tmp |= RT2661_PA_PE_5GHZ; RAL_WRITE(sc, RT2661_PHY_CSR0, tmp); + + /* 802.11a uses a 16 microseconds short interframe space */ + sc->sifs = IEEE80211_IS_CHAN_5GHZ(c) ? 16 : 10; } void @@ -2293,7 +2294,7 @@ rt2661_set_macaddr(struct rt2661_softc *sc, const uint8_t *addr) tmp = addr[0] | addr[1] << 8 | addr[2] << 16 | addr[3] << 24; RAL_WRITE(sc, RT2661_MAC_CSR2, tmp); - tmp = addr[4] | addr[5] << 8; + tmp = addr[4] | addr[5] << 8 | 0xff << 16; RAL_WRITE(sc, RT2661_MAC_CSR3, tmp); } |