iwlwifi: validate enhanced tx power entry
authorWey-Yi Guy <wey-yi.w.guy@intel.com>
Fri, 13 Nov 2009 19:56:23 +0000 (11:56 -0800)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 18 Nov 2009 22:09:02 +0000 (17:09 -0500)
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: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/iwlwifi/iwl-eeprom.c
drivers/net/wireless/iwlwifi/iwl-eeprom.h

index 8a0709e81a9f071ebe6f986c76937e1062f6b285..143728c6382e72161175a3b1e0a85b8739d16c9e 100644 (file)
@@ -913,6 +913,16 @@ void iwlcore_eeprom_enhanced_txpower(struct iwl_priv *priv)
                enhanced_txpower = (struct iwl_eeprom_enhanced_txpwr *)
                                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++) {
                        if (enhinfo[section].is_common)
                                max_txpower_avg =
index 5ba5a4e9e49a7b66e9c7456556668f0789c8cefd..5cd2b66bbe45235525c990f609021807704089ad 100644 (file)
@@ -127,19 +127,21 @@ struct iwl_eeprom_channel {
  *    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
  *    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_b_max_pwr: chain b 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
  * @mimo3_max_pwr: mimo3 max power in 1/2 dBm
  *
  */
 struct iwl_eeprom_enhanced_txpwr {
-       u16 reserved;
+       u16 common;
        s8 chain_a_max;
        s8 chain_b_max;
        s8 chain_c_max;
-       s8 reserved1;
+       s8 reserved;
        s8 mimo2_max;
        s8 mimo3_max;
 } __attribute__ ((packed));