iwlwifi: publish STBC support in HT
authorEyal Shapira <eyal@wizery.com>
Tue, 12 Nov 2013 20:37:28 +0000 (22:37 +0200)
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Tue, 17 Dec 2013 17:39:38 +0000 (19:39 +0200)
Not all chips support STBC so allow this to be
another config parameter per chip type. If STBC
is supported then publish it in the HT caps.

Since 7260/7265/3160 chips support it - set the stbc
support bit.

Signed-off-by: Eyal Shapira <eyal@wizery.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
drivers/net/wireless/iwlwifi/iwl-7000.c
drivers/net/wireless/iwlwifi/iwl-config.h
drivers/net/wireless/iwlwifi/iwl-eeprom-parse.c

index 3c34a72a5d64769b8bbf156f9a74d4748fcb0228..5efc6d1f3512a50ff908505be2a909a73cea93fa 100644 (file)
@@ -108,6 +108,7 @@ static const struct iwl_base_params iwl7000_base_params = {
 };
 
 static const struct iwl_ht_params iwl7000_ht_params = {
+       .stbc = true,
        .use_rts_for_aggregation = true, /* use rts/cts protection */
        .ht40_bands = BIT(IEEE80211_BAND_2GHZ) | BIT(IEEE80211_BAND_5GHZ),
 };
index 0b916249669ed25139db177649e5adcd98f74b7b..e05440ff5cd46d2c4add28faab7255b97c88b7f2 100644 (file)
@@ -162,12 +162,14 @@ struct iwl_base_params {
 };
 
 /*
+ * @stbc: support Tx STBC and 1*SS Rx STBC
  * @use_rts_for_aggregation: use rts/cts protection for HT traffic
  * @ht40_bands: bitmap of bands (using %IEEE80211_BAND_*) that support HT40
  */
 struct iwl_ht_params {
        enum ieee80211_smps_mode smps_mode;
        const bool ht_greenfield_support; /* if used set to true */
+       const bool stbc;
        bool use_rts_for_aggregation;
        u8 ht40_bands;
 };
index f4a6d317a023aad241ac4f15351a1cc2deae7a2c..4380c16580ebe4303b6bd8a679686c2c6ef94cc4 100644 (file)
@@ -751,6 +751,13 @@ void iwl_init_ht_hw_capab(const struct iwl_cfg *cfg,
        ht_info->ht_supported = true;
        ht_info->cap = IEEE80211_HT_CAP_DSSSCCK40;
 
+       if (cfg->ht_params->stbc) {
+               ht_info->cap |= (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT);
+
+               if (tx_chains > 1)
+                       ht_info->cap |= IEEE80211_HT_CAP_TX_STBC;
+       }
+
        if (iwlwifi_mod_params.amsdu_size_8K)
                ht_info->cap |= IEEE80211_HT_CAP_MAX_AMSDU;