aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>2013-05-22 06:16:23 -0400
committerJohannes Berg <johannes.berg@intel.com>2013-05-29 03:03:23 -0400
commit9ce4fa7291ff797f04849075a2ee3cf60f752aee (patch)
treec116332e4e075357de9b6878ea6b03d23f9e0dec /drivers
parent1bd2d1755054c0cc13e2dc7766f2f2ead7d15444 (diff)
iwlwifi: take valid ant for HT caps from TLV
I forgot to take them from TLV and took them from the NVM instead. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Reviewed-by: Ilan Peer <ilan.peer@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-eeprom-parse.c15
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-eeprom-parse.h3
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-nvm-parse.c14
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-nvm-parse.h2
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/nvm.c4
5 files changed, 22 insertions, 16 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-eeprom-parse.c b/drivers/net/wireless/iwlwifi/iwl-eeprom-parse.c
index 600c9fdd7f71..4c887f365908 100644
--- a/drivers/net/wireless/iwlwifi/iwl-eeprom-parse.c
+++ b/drivers/net/wireless/iwlwifi/iwl-eeprom-parse.c
@@ -732,17 +732,16 @@ int iwl_init_sband_channels(struct iwl_nvm_data *data,
732void iwl_init_ht_hw_capab(const struct iwl_cfg *cfg, 732void iwl_init_ht_hw_capab(const struct iwl_cfg *cfg,
733 struct iwl_nvm_data *data, 733 struct iwl_nvm_data *data,
734 struct ieee80211_sta_ht_cap *ht_info, 734 struct ieee80211_sta_ht_cap *ht_info,
735 enum ieee80211_band band) 735 enum ieee80211_band band,
736 u8 tx_chains, u8 rx_chains)
736{ 737{
737 int max_bit_rate = 0; 738 int max_bit_rate = 0;
738 u8 rx_chains;
739 u8 tx_chains;
740 739
741 tx_chains = hweight8(data->valid_tx_ant); 740 tx_chains = hweight8(tx_chains);
742 if (cfg->rx_with_siso_diversity) 741 if (cfg->rx_with_siso_diversity)
743 rx_chains = 1; 742 rx_chains = 1;
744 else 743 else
745 rx_chains = hweight8(data->valid_rx_ant); 744 rx_chains = hweight8(rx_chains);
746 745
747 if (!(data->sku_cap_11n_enable) || !cfg->ht_params) { 746 if (!(data->sku_cap_11n_enable) || !cfg->ht_params) {
748 ht_info->ht_supported = false; 747 ht_info->ht_supported = false;
@@ -806,7 +805,8 @@ static void iwl_init_sbands(struct device *dev, const struct iwl_cfg *cfg,
806 sband->n_bitrates = N_RATES_24; 805 sband->n_bitrates = N_RATES_24;
807 n_used += iwl_init_sband_channels(data, sband, n_channels, 806 n_used += iwl_init_sband_channels(data, sband, n_channels,
808 IEEE80211_BAND_2GHZ); 807 IEEE80211_BAND_2GHZ);
809 iwl_init_ht_hw_capab(cfg, data, &sband->ht_cap, IEEE80211_BAND_2GHZ); 808 iwl_init_ht_hw_capab(cfg, data, &sband->ht_cap, IEEE80211_BAND_2GHZ,
809 data->valid_tx_ant, data->valid_rx_ant);
810 810
811 sband = &data->bands[IEEE80211_BAND_5GHZ]; 811 sband = &data->bands[IEEE80211_BAND_5GHZ];
812 sband->band = IEEE80211_BAND_5GHZ; 812 sband->band = IEEE80211_BAND_5GHZ;
@@ -814,7 +814,8 @@ static void iwl_init_sbands(struct device *dev, const struct iwl_cfg *cfg,
814 sband->n_bitrates = N_RATES_52; 814 sband->n_bitrates = N_RATES_52;
815 n_used += iwl_init_sband_channels(data, sband, n_channels, 815 n_used += iwl_init_sband_channels(data, sband, n_channels,
816 IEEE80211_BAND_5GHZ); 816 IEEE80211_BAND_5GHZ);
817 iwl_init_ht_hw_capab(cfg, data, &sband->ht_cap, IEEE80211_BAND_5GHZ); 817 iwl_init_ht_hw_capab(cfg, data, &sband->ht_cap, IEEE80211_BAND_5GHZ,
818 data->valid_tx_ant, data->valid_rx_ant);
818 819
819 if (n_channels != n_used) 820 if (n_channels != n_used)
820 IWL_ERR_DEV(dev, "EEPROM: used only %d of %d channels\n", 821 IWL_ERR_DEV(dev, "EEPROM: used only %d of %d channels\n",
diff --git a/drivers/net/wireless/iwlwifi/iwl-eeprom-parse.h b/drivers/net/wireless/iwlwifi/iwl-eeprom-parse.h
index 37f115390b19..d73304a23ec2 100644
--- a/drivers/net/wireless/iwlwifi/iwl-eeprom-parse.h
+++ b/drivers/net/wireless/iwlwifi/iwl-eeprom-parse.h
@@ -133,6 +133,7 @@ int iwl_init_sband_channels(struct iwl_nvm_data *data,
133void iwl_init_ht_hw_capab(const struct iwl_cfg *cfg, 133void iwl_init_ht_hw_capab(const struct iwl_cfg *cfg,
134 struct iwl_nvm_data *data, 134 struct iwl_nvm_data *data,
135 struct ieee80211_sta_ht_cap *ht_info, 135 struct ieee80211_sta_ht_cap *ht_info,
136 enum ieee80211_band band); 136 enum ieee80211_band band,
137 u8 tx_chains, u8 rx_chains);
137 138
138#endif /* __iwl_eeprom_parse_h__ */ 139#endif /* __iwl_eeprom_parse_h__ */
diff --git a/drivers/net/wireless/iwlwifi/iwl-nvm-parse.c b/drivers/net/wireless/iwlwifi/iwl-nvm-parse.c
index 8f2a4e922346..acd2665afb8c 100644
--- a/drivers/net/wireless/iwlwifi/iwl-nvm-parse.c
+++ b/drivers/net/wireless/iwlwifi/iwl-nvm-parse.c
@@ -292,7 +292,7 @@ static void iwl_init_vht_hw_capab(const struct iwl_cfg *cfg,
292 292
293static void iwl_init_sbands(struct device *dev, const struct iwl_cfg *cfg, 293static void iwl_init_sbands(struct device *dev, const struct iwl_cfg *cfg,
294 struct iwl_nvm_data *data, const __le16 *nvm_sw, 294 struct iwl_nvm_data *data, const __le16 *nvm_sw,
295 bool enable_vht) 295 bool enable_vht, u8 tx_chains, u8 rx_chains)
296{ 296{
297 int n_channels = iwl_init_channel_map(dev, cfg, data, 297 int n_channels = iwl_init_channel_map(dev, cfg, data,
298 &nvm_sw[NVM_CHANNELS]); 298 &nvm_sw[NVM_CHANNELS]);
@@ -305,7 +305,8 @@ static void iwl_init_sbands(struct device *dev, const struct iwl_cfg *cfg,
305 sband->n_bitrates = N_RATES_24; 305 sband->n_bitrates = N_RATES_24;
306 n_used += iwl_init_sband_channels(data, sband, n_channels, 306 n_used += iwl_init_sband_channels(data, sband, n_channels,
307 IEEE80211_BAND_2GHZ); 307 IEEE80211_BAND_2GHZ);
308 iwl_init_ht_hw_capab(cfg, data, &sband->ht_cap, IEEE80211_BAND_2GHZ); 308 iwl_init_ht_hw_capab(cfg, data, &sband->ht_cap, IEEE80211_BAND_2GHZ,
309 tx_chains, rx_chains);
309 310
310 sband = &data->bands[IEEE80211_BAND_5GHZ]; 311 sband = &data->bands[IEEE80211_BAND_5GHZ];
311 sband->band = IEEE80211_BAND_5GHZ; 312 sband->band = IEEE80211_BAND_5GHZ;
@@ -313,7 +314,8 @@ static void iwl_init_sbands(struct device *dev, const struct iwl_cfg *cfg,
313 sband->n_bitrates = N_RATES_52; 314 sband->n_bitrates = N_RATES_52;
314 n_used += iwl_init_sband_channels(data, sband, n_channels, 315 n_used += iwl_init_sband_channels(data, sband, n_channels,
315 IEEE80211_BAND_5GHZ); 316 IEEE80211_BAND_5GHZ);
316 iwl_init_ht_hw_capab(cfg, data, &sband->ht_cap, IEEE80211_BAND_5GHZ); 317 iwl_init_ht_hw_capab(cfg, data, &sband->ht_cap, IEEE80211_BAND_5GHZ,
318 tx_chains, rx_chains);
317 if (enable_vht) 319 if (enable_vht)
318 iwl_init_vht_hw_capab(cfg, data, &sband->vht_cap); 320 iwl_init_vht_hw_capab(cfg, data, &sband->vht_cap);
319 321
@@ -325,7 +327,7 @@ static void iwl_init_sbands(struct device *dev, const struct iwl_cfg *cfg,
325struct iwl_nvm_data * 327struct iwl_nvm_data *
326iwl_parse_nvm_data(struct device *dev, const struct iwl_cfg *cfg, 328iwl_parse_nvm_data(struct device *dev, const struct iwl_cfg *cfg,
327 const __le16 *nvm_hw, const __le16 *nvm_sw, 329 const __le16 *nvm_hw, const __le16 *nvm_sw,
328 const __le16 *nvm_calib) 330 const __le16 *nvm_calib, u8 tx_chains, u8 rx_chains)
329{ 331{
330 struct iwl_nvm_data *data; 332 struct iwl_nvm_data *data;
331 u8 hw_addr[ETH_ALEN]; 333 u8 hw_addr[ETH_ALEN];
@@ -381,8 +383,8 @@ iwl_parse_nvm_data(struct device *dev, const struct iwl_cfg *cfg,
381 data->hw_addr[4] = hw_addr[5]; 383 data->hw_addr[4] = hw_addr[5];
382 data->hw_addr[5] = hw_addr[4]; 384 data->hw_addr[5] = hw_addr[4];
383 385
384 iwl_init_sbands(dev, cfg, data, nvm_sw, 386 iwl_init_sbands(dev, cfg, data, nvm_sw, sku & NVM_SKU_CAP_11AC_ENABLE,
385 sku & NVM_SKU_CAP_11AC_ENABLE); 387 tx_chains, rx_chains);
386 388
387 data->calib_version = 255; /* TODO: 389 data->calib_version = 255; /* TODO:
388 this value will prevent some checks from 390 this value will prevent some checks from
diff --git a/drivers/net/wireless/iwlwifi/iwl-nvm-parse.h b/drivers/net/wireless/iwlwifi/iwl-nvm-parse.h
index e57fb989661e..3325059c52d4 100644
--- a/drivers/net/wireless/iwlwifi/iwl-nvm-parse.h
+++ b/drivers/net/wireless/iwlwifi/iwl-nvm-parse.h
@@ -75,6 +75,6 @@
75struct iwl_nvm_data * 75struct iwl_nvm_data *
76iwl_parse_nvm_data(struct device *dev, const struct iwl_cfg *cfg, 76iwl_parse_nvm_data(struct device *dev, const struct iwl_cfg *cfg,
77 const __le16 *nvm_hw, const __le16 *nvm_sw, 77 const __le16 *nvm_hw, const __le16 *nvm_sw,
78 const __le16 *nvm_calib); 78 const __le16 *nvm_calib, u8 tx_chains, u8 rx_chains);
79 79
80#endif /* __iwl_nvm_parse_h__ */ 80#endif /* __iwl_nvm_parse_h__ */
diff --git a/drivers/net/wireless/iwlwifi/mvm/nvm.c b/drivers/net/wireless/iwlwifi/mvm/nvm.c
index 2cd669c3c47a..edb94ea31654 100644
--- a/drivers/net/wireless/iwlwifi/mvm/nvm.c
+++ b/drivers/net/wireless/iwlwifi/mvm/nvm.c
@@ -251,7 +251,9 @@ iwl_parse_nvm_sections(struct iwl_mvm *mvm)
251 hw = (const __le16 *)sections[NVM_SECTION_TYPE_HW].data; 251 hw = (const __le16 *)sections[NVM_SECTION_TYPE_HW].data;
252 sw = (const __le16 *)sections[NVM_SECTION_TYPE_SW].data; 252 sw = (const __le16 *)sections[NVM_SECTION_TYPE_SW].data;
253 calib = (const __le16 *)sections[NVM_SECTION_TYPE_CALIBRATION].data; 253 calib = (const __le16 *)sections[NVM_SECTION_TYPE_CALIBRATION].data;
254 return iwl_parse_nvm_data(mvm->trans->dev, mvm->cfg, hw, sw, calib); 254 return iwl_parse_nvm_data(mvm->trans->dev, mvm->cfg, hw, sw, calib,
255 iwl_fw_valid_tx_ant(mvm->fw),
256 iwl_fw_valid_rx_ant(mvm->fw));
255} 257}
256 258
257#define MAX_NVM_FILE_LEN 16384 259#define MAX_NVM_FILE_LEN 16384