diff options
author | avos <avos@FreeBSD.org> | 2016-06-01 15:47:19 +0000 |
---|---|---|
committer | avos <avos@FreeBSD.org> | 2016-06-01 15:47:19 +0000 |
commit | 90a7dc76f0e314fe7fa2e6f89955e0e0e19d48f5 (patch) | |
tree | a1c151a14ae04ac56216e6300a249165aaa9cf37 | |
parent | 25142bca39748a7b915f04f1eb2c60574acbc556 (diff) | |
download | FreeBSD-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.c | 6 |
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)); } |