summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoravos <avos@FreeBSD.org>2016-06-01 15:47:19 +0000
committeravos <avos@FreeBSD.org>2016-06-01 15:47:19 +0000
commit90a7dc76f0e314fe7fa2e6f89955e0e0e19d48f5 (patch)
treea1c151a14ae04ac56216e6300a249165aaa9cf37
parent25142bca39748a7b915f04f1eb2c60574acbc556 (diff)
downloadFreeBSD-src-90a7dc76f0e314fe7fa2e6f89955e0e0e19d48f5.zip
FreeBSD-src-90a7dc76f0e314fe7fa2e6f89955e0e0e19d48f5.tar.gz
urtwn: unbreak CTS-to-self protection mode.
Do not set HWRTSEN bit when CTS-to-self is used; CTS2SELF bit triggers CTS frame transmission by itself (and it does not work when HWRTSEN bit is set). Tested with: * RTL8188CUS, HOSTAP mode (11g) * RTL8188EU, STA mode (11g)
-rw-r--r--sys/dev/urtwn/if_urtwn.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/sys/dev/urtwn/if_urtwn.c b/sys/dev/urtwn/if_urtwn.c
index 655d611..2107fe1 100644
--- a/sys/dev/urtwn/if_urtwn.c
+++ b/sys/dev/urtwn/if_urtwn.c
@@ -2956,8 +2956,7 @@ urtwn_tx_data(struct urtwn_softc *sc, struct ieee80211_node *ni,
switch (ic->ic_protmode) {
case IEEE80211_PROT_CTSONLY:
txd->txdw4 |= htole32(
- R92C_TXDW4_CTS2SELF |
- R92C_TXDW4_HWRTSEN);
+ R92C_TXDW4_CTS2SELF);
break;
case IEEE80211_PROT_RTSCTS:
txd->txdw4 |= htole32(
@@ -3118,11 +3117,10 @@ urtwn_tx_raw(struct urtwn_softc *sc, struct ieee80211_node *ni,
params->ibp_try0));
}
if (params->ibp_flags & IEEE80211_BPF_RTS)
- txd->txdw4 |= htole32(R92C_TXDW4_RTSEN);
+ txd->txdw4 |= htole32(R92C_TXDW4_RTSEN | R92C_TXDW4_HWRTSEN);
if (params->ibp_flags & IEEE80211_BPF_CTS)
txd->txdw4 |= htole32(R92C_TXDW4_CTS2SELF);
if (txd->txdw4 & htole32(R92C_TXDW4_RTSEN | R92C_TXDW4_CTS2SELF)) {
- txd->txdw4 |= htole32(R92C_TXDW4_HWRTSEN);
txd->txdw4 |= htole32(SM(R92C_TXDW4_RTSRATE,
URTWN_RIDX_OFDM24));
}
OpenPOWER on IntegriCloud