[ath9k-devel] [PATCH 3/3] ath9k: check for Rx-STBC flag and pass it to ieee80211

2013-05-19 Thread Oleksij Rempel
Signed-off-by: Oleksij Rempel li...@rempel-privat.de
---
 drivers/net/wireless/ath/ath9k/mac.c | 5 +
 drivers/net/wireless/ath/ath9k/mac.h | 3 ++-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/ath/ath9k/mac.c 
b/drivers/net/wireless/ath/ath9k/mac.c
index a52081d..d055e38 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,
(ads.ds_rxstatus3  AR_GI) ? RX_FLAG_SHORT_GI : 0;
rs-flag |=
(ads.ds_rxstatus3  AR_2040) ? RX_FLAG_40MHZ : 0;
+   if (AR_SREV_9280_20_OR_LATER(ah))
+   rs-flag |=
+   (ads.ds_rxstatus3  AR_STBC) ?
+   /* we can only Nss=1 STBC */
+   (1  RX_FLAG_STBC_SHIFT) : 0;
 
if (ads.ds_rxstatus8  AR_PreDelimCRCErr)
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 3f1e775..b02dfce 100644
--- a/drivers/net/wireless/ath/ath9k/mac.h
+++ b/drivers/net/wireless/ath/ath9k/mac.h
@@ -534,7 +534,8 @@ struct ar5416_desc {
 #define AR_2040 0x0002
 #define AR_Parallel40   0x0004
 #define AR_Parallel40_S 2
-#define AR_RxStatusRsvd30   0x00f8
+#define AR_STBC 0x0008 /* on ar9280 and later */
+#define AR_RxStatusRsvd30   0x00f0
 #define AR_RxAntenna   0xff00
 #define AR_RxAntenna_S 8
 
-- 
1.8.1.2

___
ath9k-devel mailing list
ath9k-devel@lists.ath9k.org
https://lists.ath9k.org/mailman/listinfo/ath9k-devel


[ath9k-devel] [PATCH 0/3] Work on STBC Rx monitoring

2013-05-19 Thread Oleksij Rempel
This patch set will pass RxSTBC flags from ath9k to ieee80211
and to radiotap.
This field is now a part of radiotap specification:
http://www.radiotap.org/defined-fields/MCS

Oleksij Rempel (3):
  mac80211: add STBC flag for radiotap
  ath9k: remove useless flag conversation.
  ath9k: check for Rx-STBC flag and pass it to ieee80211

 drivers/net/wireless/ath/ath9k/ar9003_mac.c |  5 +++--
 drivers/net/wireless/ath/ath9k/mac.c| 16 
 drivers/net/wireless/ath/ath9k/mac.h|  4 +++-
 drivers/net/wireless/ath/ath9k/recv.c   |  5 +
 include/net/ieee80211_radiotap.h|  7 +++
 include/net/mac80211.h  |  4 
 net/mac80211/main.c |  3 ++-
 net/mac80211/rx.c   |  4 
 net/mac80211/status.c   |  3 ++-
 9 files changed, 38 insertions(+), 13 deletions(-)

-- 
1.8.1.2

___
ath9k-devel mailing list
ath9k-devel@lists.ath9k.org
https://lists.ath9k.org/mailman/listinfo/ath9k-devel


[ath9k-devel] [PATCH 1/3] mac80211: add STBC flag for radiotap

2013-05-19 Thread Oleksij Rempel
Signed-off-by: Oleksij Rempel li...@rempel-privat.de
---
 include/net/ieee80211_radiotap.h | 7 +++
 include/net/mac80211.h   | 4 
 net/mac80211/main.c  | 3 ++-
 net/mac80211/rx.c| 4 
 net/mac80211/status.c| 3 ++-
 5 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/include/net/ieee80211_radiotap.h b/include/net/ieee80211_radiotap.h
index c399963..c6d07cb 100644
--- a/include/net/ieee80211_radiotap.h
+++ b/include/net/ieee80211_radiotap.h
@@ -269,6 +269,7 @@ enum ieee80211_radiotap_type {
 #define IEEE80211_RADIOTAP_MCS_HAVE_GI 0x04
 #define IEEE80211_RADIOTAP_MCS_HAVE_FMT0x08
 #define IEEE80211_RADIOTAP_MCS_HAVE_FEC0x10
+#define IEEE80211_RADIOTAP_MCS_HAVE_STBC   0x20
 
 #define IEEE80211_RADIOTAP_MCS_BW_MASK 0x03
 #defineIEEE80211_RADIOTAP_MCS_BW_200
@@ -278,6 +279,12 @@ enum ieee80211_radiotap_type {
 #define IEEE80211_RADIOTAP_MCS_SGI 0x04
 #define IEEE80211_RADIOTAP_MCS_FMT_GF  0x08
 #define IEEE80211_RADIOTAP_MCS_FEC_LDPC0x10
+#define IEEE80211_RADIOTAP_MCS_STBC_MASK   0x60
+#defineIEEE80211_RADIOTAP_MCS_STBC_1   1
+#defineIEEE80211_RADIOTAP_MCS_STBC_2   2
+#defineIEEE80211_RADIOTAP_MCS_STBC_3   3
+
+#define IEEE80211_RADIOTAP_MCS_STBC_SHIFT  5
 
 /* For IEEE80211_RADIOTAP_AMPDU_STATUS */
 #define IEEE80211_RADIOTAP_AMPDU_REPORT_ZEROLEN0x0001
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 885898a..16705a9 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -805,6 +805,7 @@ ieee80211_tx_info_clear_status(struct ieee80211_tx_info 
*info)
  * on this subframe
  * @RX_FLAG_AMPDU_DELIM_CRC_KNOWN: The delimiter CRC field is known (the CRC
  * is stored in the @ampdu_delimiter_crc field)
+ * @RX_FLAG_STBC_MASK: STBC 2 bit bitmask. 1 - Nss=1, 2 - Nss=2, 3 - Nss=3
  */
 enum mac80211_rx_flags {
RX_FLAG_MMIC_ERROR  = BIT(0),
@@ -832,8 +833,11 @@ enum mac80211_rx_flags {
RX_FLAG_80MHZ   = BIT(23),
RX_FLAG_80P80MHZ= BIT(24),
RX_FLAG_160MHZ  = BIT(25),
+   RX_FLAG_STBC_MASK   = BIT(26) | BIT(27),
 };
 
+#define RX_FLAG_STBC_SHIFT 26
+
 /**
  * struct ieee80211_rx_status - receive status
  *
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
index 8a7bfc4..44191a3 100644
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -589,7 +589,8 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t 
priv_data_len,
local-hw.conf.short_frame_max_tx_count = wiphy-retry_short;
local-hw.radiotap_mcs_details = IEEE80211_RADIOTAP_MCS_HAVE_MCS |
 IEEE80211_RADIOTAP_MCS_HAVE_GI |
-IEEE80211_RADIOTAP_MCS_HAVE_BW;
+IEEE80211_RADIOTAP_MCS_HAVE_BW |
+IEEE80211_RADIOTAP_MCS_HAVE_STBC;
local-hw.radiotap_vht_details = IEEE80211_RADIOTAP_VHT_KNOWN_GI |
 IEEE80211_RADIOTAP_VHT_KNOWN_BANDWIDTH;
local-hw.uapsd_queues = IEEE80211_DEFAULT_UAPSD_QUEUES;
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 8e29526..22bb2af 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -258,6 +258,7 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local 
*local,
pos += 2;
 
if (status-flag  RX_FLAG_HT) {
+   unsigned int stbc = status-flag  RX_FLAG_STBC_MASK;
rthdr-it_present |= cpu_to_le32(1  IEEE80211_RADIOTAP_MCS);
*pos++ = local-hw.radiotap_mcs_details;
*pos = 0;
@@ -267,6 +268,9 @@ ieee80211_add_rx_radiotap_header(struct ieee80211_local 
*local,
*pos |= IEEE80211_RADIOTAP_MCS_BW_40;
if (status-flag  RX_FLAG_HT_GF)
*pos |= IEEE80211_RADIOTAP_MCS_FMT_GF;
+   if (stbc)
+   *pos |= (stbc  RX_FLAG_STBC_SHIFT)
+IEEE80211_RADIOTAP_MCS_STBC_SHIFT;
pos++;
*pos++ = status-rate_idx;
}
diff --git a/net/mac80211/status.c b/net/mac80211/status.c
index 4343920..41143f8 100644
--- a/net/mac80211/status.c
+++ b/net/mac80211/status.c
@@ -312,7 +312,8 @@ static void ieee80211_add_tx_radiotap_header(struct 
ieee80211_supported_band
rthdr-it_present |= cpu_to_le32(1  IEEE80211_RADIOTAP_MCS);
pos[0] = IEEE80211_RADIOTAP_MCS_HAVE_MCS |
 IEEE80211_RADIOTAP_MCS_HAVE_GI |
-IEEE80211_RADIOTAP_MCS_HAVE_BW;
+IEEE80211_RADIOTAP_MCS_HAVE_BW |
+IEEE80211_RADIOTAP_MCS_HAVE_STBC;
if (info-status.rates[0].flags  IEEE80211_TX_RC_SHORT_GI)
   

[ath9k-devel] [PATCH 2/3] ath9k: remove useless flag conversation.

2013-05-19 Thread Oleksij Rempel
some flags used only outside of ath9k - In this case we can use
enum mac80211_rx_flags and pass it upstream without extra
conversation.

Signed-off-by: Oleksij Rempel li...@rempel-privat.de
---
 drivers/net/wireless/ath/ath9k/ar9003_mac.c |  5 +++--
 drivers/net/wireless/ath/ath9k/mac.c| 11 +++
 drivers/net/wireless/ath/ath9k/mac.h|  1 +
 drivers/net/wireless/ath/ath9k/recv.c   |  5 +
 4 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/ar9003_mac.c 
b/drivers/net/wireless/ath/ath9k/ar9003_mac.c
index 301bf72..5163abd 100644
--- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c
+++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c
@@ -469,6 +469,7 @@ int ath9k_hw_process_rxdesc_edma(struct ath_hw *ah, struct 
ath_rx_status *rxs,
 
rxs-rs_status = 0;
rxs-rs_flags =  0;
+   rxs-flag =  0;
 
rxs-rs_datalen = rxsp-status2  AR_DataLen;
rxs-rs_tstamp =  rxsp-status3;
@@ -493,8 +494,8 @@ int ath9k_hw_process_rxdesc_edma(struct ath_hw *ah, struct 
ath_rx_status *rxs,
rxs-rs_isaggr = (rxsp-status11  AR_RxAggr) ? 1 : 0;
rxs-rs_moreaggr = (rxsp-status11  AR_RxMoreAggr) ? 1 : 0;
rxs-rs_antenna = (MS(rxsp-status4, AR_RxAntenna)  0x7);
-   rxs-rs_flags  = (rxsp-status4  AR_GI) ? ATH9K_RX_GI : 0;
-   rxs-rs_flags  |= (rxsp-status4  AR_2040) ? ATH9K_RX_2040 : 0;
+   rxs-flag  |= (rxsp-status4  AR_GI) ? RX_FLAG_SHORT_GI : 0;
+   rxs-flag  |= (rxsp-status4  AR_2040) ? RX_FLAG_40MHZ : 0;
 
rxs-evm0 = rxsp-status6;
rxs-evm1 = rxsp-status7;
diff --git a/drivers/net/wireless/ath/ath9k/mac.c 
b/drivers/net/wireless/ath/ath9k/mac.c
index 498fee0..a52081d 100644
--- a/drivers/net/wireless/ath/ath9k/mac.c
+++ b/drivers/net/wireless/ath/ath9k/mac.c
@@ -547,6 +547,7 @@ int ath9k_hw_rxprocdesc(struct ath_hw *ah, struct ath_desc 
*ds,
 
rs-rs_status = 0;
rs-rs_flags = 0;
+   rs-flag = 0;
 
rs-rs_datalen = ads.ds_rxstatus1  AR_DataLen;
rs-rs_tstamp = ads.AR_RcvTimestamp;
@@ -586,10 +587,12 @@ int ath9k_hw_rxprocdesc(struct ath_hw *ah, struct 
ath_desc *ds,
rs-rs_moreaggr =
(ads.ds_rxstatus8  AR_RxMoreAggr) ? 1 : 0;
rs-rs_antenna = MS(ads.ds_rxstatus3, AR_RxAntenna);
-   rs-rs_flags =
-   (ads.ds_rxstatus3  AR_GI) ? ATH9K_RX_GI : 0;
-   rs-rs_flags |=
-   (ads.ds_rxstatus3  AR_2040) ? ATH9K_RX_2040 : 0;
+
+   /* directly mapped flags for ieee80211_rx_status */
+   rs-flag |=
+   (ads.ds_rxstatus3  AR_GI) ? RX_FLAG_SHORT_GI : 0;
+   rs-flag |=
+   (ads.ds_rxstatus3  AR_2040) ? RX_FLAG_40MHZ : 0;
 
if (ads.ds_rxstatus8  AR_PreDelimCRCErr)
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 5865f92..3f1e775 100644
--- a/drivers/net/wireless/ath/ath9k/mac.h
+++ b/drivers/net/wireless/ath/ath9k/mac.h
@@ -149,6 +149,7 @@ struct ath_rx_status {
u32 evm2;
u32 evm3;
u32 evm4;
+   u32 flag; /* see enum mac80211_rx_flags */
 };
 
 struct ath_htc_rx_status {
diff --git a/drivers/net/wireless/ath/ath9k/recv.c 
b/drivers/net/wireless/ath/ath9k/recv.c
index 8be2b5d..b4b758d 100644
--- a/drivers/net/wireless/ath/ath9k/recv.c
+++ b/drivers/net/wireless/ath/ath9k/recv.c
@@ -868,10 +868,7 @@ static int ath9k_process_rate(struct ath_common *common,
if (rx_stats-rs_rate  0x80) {
/* HT rate */
rxs-flag |= RX_FLAG_HT;
-   if (rx_stats-rs_flags  ATH9K_RX_2040)
-   rxs-flag |= RX_FLAG_40MHZ;
-   if (rx_stats-rs_flags  ATH9K_RX_GI)
-   rxs-flag |= RX_FLAG_SHORT_GI;
+   rxs-flag |= rx_stats-flag;
rxs-rate_idx = rx_stats-rs_rate  0x7f;
return 0;
}
-- 
1.8.1.2

___
ath9k-devel mailing list
ath9k-devel@lists.ath9k.org
https://lists.ath9k.org/mailman/listinfo/ath9k-devel