aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorOleksij Rempel <linux@rempel-privat.de>2013-05-24 14:30:59 -0400
committerJohn W. Linville <linville@tuxdriver.com>2013-05-30 14:42:35 -0400
commitb0a1ae976d6cd40ff90ba87883e17eb2610dae3d (patch)
treefe131921922ea83429092629696d037ee294bc19 /drivers
parentab276103357637fb26cc851369b5abbdc42afbf4 (diff)
ath9k: check for Rx-STBC flag and pass it to ieee80211
This patch make use of STBC flag in DMA RX descriptor. Only devices after ar9280 can provide this information. If card support it we will set HAVE_STBC flag, to show clint programm thet STBC is supported but not received. Signed-off-by: Oleksij Rempel <linux@rempel-privat.de> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/ath/ath9k/init.c10
-rw-r--r--drivers/net/wireless/ath/ath9k/mac.c5
-rw-r--r--drivers/net/wireless/ath/ath9k/mac.h3
3 files changed, 15 insertions, 3 deletions
diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
index c7b888f22703..0536d442b068 100644
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
@@ -21,6 +21,7 @@
21#include <linux/ath9k_platform.h> 21#include <linux/ath9k_platform.h>
22#include <linux/module.h> 22#include <linux/module.h>
23#include <linux/relay.h> 23#include <linux/relay.h>
24#include <net/ieee80211_radiotap.h>
24 25
25#include "ath9k.h" 26#include "ath9k.h"
26 27
@@ -766,8 +767,13 @@ void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
766 IEEE80211_HW_REPORTS_TX_ACK_STATUS | 767 IEEE80211_HW_REPORTS_TX_ACK_STATUS |
767 IEEE80211_HW_SUPPORTS_RC_TABLE; 768 IEEE80211_HW_SUPPORTS_RC_TABLE;
768 769
769 if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) 770 if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) {
770 hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION; 771 hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION;
772
773 if (AR_SREV_9280_20_OR_LATER(ah))
774 hw->radiotap_mcs_details |=
775 IEEE80211_RADIOTAP_MCS_HAVE_STBC;
776 }
771 777
772 if (AR_SREV_9160_10_OR_LATER(sc->sc_ah) || ath9k_modparam_nohwcrypt) 778 if (AR_SREV_9160_10_OR_LATER(sc->sc_ah) || ath9k_modparam_nohwcrypt)
773 hw->flags |= IEEE80211_HW_MFP_CAPABLE; 779 hw->flags |= IEEE80211_HW_MFP_CAPABLE;
diff --git a/drivers/net/wireless/ath/ath9k/mac.c b/drivers/net/wireless/ath/ath9k/mac.c
index a52081d73bef..d055e389abfc 100644
--- a/drivers/net/wireless/ath/ath9k/mac.c
+++ b/drivers/net/wireless/ath/ath9k/mac.c
@@ -593,6 +593,11 @@ int ath9k_hw_rxprocdesc(struct ath_hw *ah, struct ath_desc *ds,
593 (ads.ds_rxstatus3 & AR_GI) ? RX_FLAG_SHORT_GI : 0; 593 (ads.ds_rxstatus3 & AR_GI) ? RX_FLAG_SHORT_GI : 0;
594 rs->flag |= 594 rs->flag |=
595 (ads.ds_rxstatus3 & AR_2040) ? RX_FLAG_40MHZ : 0; 595 (ads.ds_rxstatus3 & AR_2040) ? RX_FLAG_40MHZ : 0;
596 if (AR_SREV_9280_20_OR_LATER(ah))
597 rs->flag |=
598 (ads.ds_rxstatus3 & AR_STBC) ?
599 /* we can only Nss=1 STBC */
600 (1 << RX_FLAG_STBC_SHIFT) : 0;
596 601
597 if (ads.ds_rxstatus8 & AR_PreDelimCRCErr) 602 if (ads.ds_rxstatus8 & AR_PreDelimCRCErr)
598 rs->rs_flags |= ATH9K_RX_DELIM_CRC_PRE; 603 rs->rs_flags |= ATH9K_RX_DELIM_CRC_PRE;
diff --git a/drivers/net/wireless/ath/ath9k/mac.h b/drivers/net/wireless/ath/ath9k/mac.h
index 3f1e7754a1a7..b02dfce964b4 100644
--- a/drivers/net/wireless/ath/ath9k/mac.h
+++ b/drivers/net/wireless/ath/ath9k/mac.h
@@ -534,7 +534,8 @@ struct ar5416_desc {
534#define AR_2040 0x00000002 534#define AR_2040 0x00000002
535#define AR_Parallel40 0x00000004 535#define AR_Parallel40 0x00000004
536#define AR_Parallel40_S 2 536#define AR_Parallel40_S 2
537#define AR_RxStatusRsvd30 0x000000f8 537#define AR_STBC 0x00000008 /* on ar9280 and later */
538#define AR_RxStatusRsvd30 0x000000f0
538#define AR_RxAntenna 0xffffff00 539#define AR_RxAntenna 0xffffff00
539#define AR_RxAntenna_S 8 540#define AR_RxAntenna_S 8
540 541