From 8c7f8b355129b18aec95e5e6e582b5135febd5dd Mon Sep 17 00:00:00 2001 From: Alexander Egorenkov Date: Sun, 16 May 2010 01:03:02 +0200 Subject: [PATCH] Do not use ShortGI and STBC with management frames; Atheros cards have problems with ShortGI and MGMT frames --- rt2870.c | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/rt2870.c b/rt2870.c index aa60fcc..4cacf91 100644 --- a/rt2870.c +++ b/rt2870.c @@ -4721,7 +4721,7 @@ static int rt2870_tx_mgmt(struct rt2870_softc *sc, struct ieee80211_frame *wh; struct rt2870_softc_tx_radiotap_header *tap; u_int hdrsize, hdrspace; - uint8_t rate, stbc, shortgi, mcs, pid; + uint8_t rate, mcs, pid; uint16_t len, dmalen, mpdu_len, dur; int mimops; @@ -4816,19 +4816,6 @@ static int rt2870_tx_mgmt(struct rt2870_softc *sc, RT2870_TXWI_PID_SHIFT) | ((htole16(mpdu_len) & RT2870_TXWI_MPDU_LEN_MASK) << RT2870_TXWI_MPDU_LEN_SHIFT); - stbc = sc->tx_stbc && (mcs <= 7) && (vap->iv_htcaps & IEEE80211_HTCAP_TXSTBC) && - (ni->ni_flags & IEEE80211_NODE_HT) && (ni->ni_htcap & IEEE80211_HTCAP_RXSTBC); - - shortgi = ((vap->iv_flags_ht & IEEE80211_FHT_SHORTGI20) && (ni->ni_flags & IEEE80211_NODE_SGI20) && (ni->ni_chw == 20)) || - ((vap->iv_flags_ht & IEEE80211_FHT_SHORTGI40) && (ni->ni_flags & IEEE80211_NODE_SGI40) && (ni->ni_chw == 40)); - - txwi->phymode_ifs_stbc_shortgi |= - ((stbc & RT2870_TXWI_STBC_MASK) << RT2870_TXWI_STBC_SHIFT) | - ((shortgi & RT2870_TXWI_SHORTGI_MASK) << RT2870_TXWI_SHORTGI_SHIFT); - - txwi->phymode_ifs_stbc_shortgi |= - ((shortgi & RT2870_TXWI_SHORTGI_MASK) << RT2870_TXWI_SHORTGI_SHIFT); - if (ni->ni_flags & IEEE80211_NODE_HT) { txwi->phymode_ifs_stbc_shortgi |= @@ -4903,9 +4890,6 @@ static int rt2870_tx_mgmt(struct rt2870_softc *sc, if (mcs & RT2870_TXWI_MCS_SHOTPRE) tap->flags |= IEEE80211_RADIOTAP_F_SHORTPRE; - if (shortgi) - tap->flags |= IEEE80211_RADIOTAP_F_SHORTGI; - if (wh->i_fc[1] & IEEE80211_FC1_WEP) tap->flags |= IEEE80211_RADIOTAP_F_WEP; @@ -4927,9 +4911,9 @@ static int rt2870_tx_mgmt(struct rt2870_softc *sc, RT2870_DPRINTF(sc, RT2870_DEBUG_TX, "%s: sending MGMT frame: qid=%d, hdrsize=%d, hdrspace=%d, len=%d, " - "stbc=%d, shortgi=%d, mcs=%d, mimops=%d, DMA len=%d\n", + "mcs=%d, mimops=%d, DMA len=%d\n", device_get_nameunit(sc->dev), - qid, hdrsize, hdrspace, m->m_pkthdr.len, stbc, shortgi, mcs, mimops, dmalen); + qid, hdrsize, hdrspace, m->m_pkthdr.len, mcs, mimops, dmalen); data->len = dmalen; data->m = m; -- 2.11.4.GIT