Commit 85f0d9e8 authored by Wey-Yi Guy's avatar Wey-Yi Guy Committed by John W. Linville

iwlwifi: validate enhanced tx power entry

Validate enhanced tx power entry read from EEPROM before applying the
tx power value. Different versions of EEPROM might contain different size
of table; always a good idea to make sure the entry is valid before
applying to the targeted channel.
Signed-off-by: default avatarWey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: default avatarReinette Chatre <reinette.chatre@intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent dfef948e
...@@ -913,6 +913,16 @@ void iwlcore_eeprom_enhanced_txpower(struct iwl_priv *priv) ...@@ -913,6 +913,16 @@ void iwlcore_eeprom_enhanced_txpower(struct iwl_priv *priv)
enhanced_txpower = (struct iwl_eeprom_enhanced_txpwr *) enhanced_txpower = (struct iwl_eeprom_enhanced_txpwr *)
iwl_eeprom_query_addr(priv, offset); iwl_eeprom_query_addr(priv, offset);
/*
* check for valid entry -
* different version of EEPROM might contain different set
* of enhanced tx power table
* always check for valid entry before process
* the information
*/
if (!enhanced_txpower->common || enhanced_txpower->reserved)
continue;
for (element = 0; element < eeprom_section_count; element++) { for (element = 0; element < eeprom_section_count; element++) {
if (enhinfo[section].is_common) if (enhinfo[section].is_common)
max_txpower_avg = max_txpower_avg =
......
...@@ -127,19 +127,21 @@ struct iwl_eeprom_channel { ...@@ -127,19 +127,21 @@ struct iwl_eeprom_channel {
* Enhanced regulatory tx power portion of eeprom image can be broken down * Enhanced regulatory tx power portion of eeprom image can be broken down
* into individual structures; each one is 8 bytes in size and contain the * into individual structures; each one is 8 bytes in size and contain the
* following information * following information
* @common: (desc + channel) not used by driver, should _NOT_ be "zero"
* @chain_a_max_pwr: chain a max power in 1/2 dBm * @chain_a_max_pwr: chain a max power in 1/2 dBm
* @chain_b_max_pwr: chain b max power in 1/2 dBm * @chain_b_max_pwr: chain b max power in 1/2 dBm
* @chain_c_max_pwr: chain c max power in 1/2 dBm * @chain_c_max_pwr: chain c max power in 1/2 dBm
* @reserved: not used, should be "zero"
* @mimo2_max_pwr: mimo2 max power in 1/2 dBm * @mimo2_max_pwr: mimo2 max power in 1/2 dBm
* @mimo3_max_pwr: mimo3 max power in 1/2 dBm * @mimo3_max_pwr: mimo3 max power in 1/2 dBm
* *
*/ */
struct iwl_eeprom_enhanced_txpwr { struct iwl_eeprom_enhanced_txpwr {
u16 reserved; u16 common;
s8 chain_a_max; s8 chain_a_max;
s8 chain_b_max; s8 chain_b_max;
s8 chain_c_max; s8 chain_c_max;
s8 reserved1; s8 reserved;
s8 mimo2_max; s8 mimo2_max;
s8 mimo3_max; s8 mimo3_max;
} __attribute__ ((packed)); } __attribute__ ((packed));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment