diff options
author | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2013-05-22 06:16:23 -0400 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-05-29 03:03:23 -0400 |
commit | 9ce4fa7291ff797f04849075a2ee3cf60f752aee (patch) | |
tree | c116332e4e075357de9b6878ea6b03d23f9e0dec /drivers | |
parent | 1bd2d1755054c0cc13e2dc7766f2f2ead7d15444 (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.c | 15 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-eeprom-parse.h | 3 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-nvm-parse.c | 14 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-nvm-parse.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/nvm.c | 4 |
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, | |||
732 | void iwl_init_ht_hw_capab(const struct iwl_cfg *cfg, | 732 | void 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, | |||
133 | void iwl_init_ht_hw_capab(const struct iwl_cfg *cfg, | 133 | void 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 | ||
293 | static void iwl_init_sbands(struct device *dev, const struct iwl_cfg *cfg, | 293 | static 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, | |||
325 | struct iwl_nvm_data * | 327 | struct iwl_nvm_data * |
326 | iwl_parse_nvm_data(struct device *dev, const struct iwl_cfg *cfg, | 328 | iwl_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 @@ | |||
75 | struct iwl_nvm_data * | 75 | struct iwl_nvm_data * |
76 | iwl_parse_nvm_data(struct device *dev, const struct iwl_cfg *cfg, | 76 | iwl_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 |