Changeset 32760


Ignore:
Timestamp:
2012-07-17T01:50:54+02:00 (6 years ago)
Author:
nbd
Message:

mac80211: update to latest wireless-testing + some monitor mode fixes and some libertas driver fixes

Location:
trunk/package/mac80211
Files:
15 deleted
20 edited
4 moved

Legend:

Unmodified
Added
Removed
  • trunk/package/mac80211/Makefile

    r32655 r32760  
    1111PKG_NAME:=mac80211 
    1212 
    13 PKG_VERSION:=2012-07-06 
     13PKG_VERSION:=2012-07-16 
    1414PKG_RELEASE:=1 
    1515PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources 
    16 PKG_MD5SUM:=71e1ba84a7d1c3ab69ee1b68fa9e1269 
     16PKG_MD5SUM:=8e41a935ad147631b78f99eda7187c1f 
    1717 
    1818PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2 
  • trunk/package/mac80211/patches/300-pending_work.patch

    r32684 r32760  
     1--- a/drivers/net/wireless/ath/ath5k/mac80211-ops.c 
     2+++ b/drivers/net/wireless/ath/ath5k/mac80211-ops.c 
     3@@ -622,7 +622,7 @@ ath5k_conf_tx(struct ieee80211_hw *hw, s 
     4        qi.tqi_aifs = params->aifs; 
     5        qi.tqi_cw_min = params->cw_min; 
     6        qi.tqi_cw_max = params->cw_max; 
     7-       qi.tqi_burst_time = params->txop; 
     8+       qi.tqi_burst_time = params->txop * 32; 
     9  
     10        ATH5K_DBG(ah, ATH5K_DEBUG_ANY, 
     11                  "Configure tx [queue %d],  " 
     12--- a/drivers/net/wireless/ath/ath9k/ar9002_hw.c 
     13+++ b/drivers/net/wireless/ath/ath9k/ar9002_hw.c 
     14@@ -26,106 +26,74 @@ 
     15 static void ar9002_hw_init_mode_regs(struct ath_hw *ah) 
     16 { 
     17        if (AR_SREV_9271(ah)) { 
     18-               INIT_INI_ARRAY(&ah->iniModes, ar9271Modes_9271, 
     19-                              ARRAY_SIZE(ar9271Modes_9271), 5); 
     20-               INIT_INI_ARRAY(&ah->iniCommon, ar9271Common_9271, 
     21-                              ARRAY_SIZE(ar9271Common_9271), 2); 
     22-               INIT_INI_ARRAY(&ah->iniModes_9271_ANI_reg, ar9271Modes_9271_ANI_reg, 
     23-                              ARRAY_SIZE(ar9271Modes_9271_ANI_reg), 5); 
     24+               INIT_INI_ARRAY(&ah->iniModes, ar9271Modes_9271); 
     25+               INIT_INI_ARRAY(&ah->iniCommon, ar9271Common_9271); 
     26+               INIT_INI_ARRAY(&ah->iniModes_9271_ANI_reg, ar9271Modes_9271_ANI_reg); 
     27                return; 
     28        } 
     29  
     30        if (ah->config.pcie_clock_req) 
     31                INIT_INI_ARRAY(&ah->iniPcieSerdes, 
     32-                          ar9280PciePhy_clkreq_off_L1_9280, 
     33-                          ARRAY_SIZE(ar9280PciePhy_clkreq_off_L1_9280), 2); 
     34+                          ar9280PciePhy_clkreq_off_L1_9280); 
     35        else 
     36                INIT_INI_ARRAY(&ah->iniPcieSerdes, 
     37-                          ar9280PciePhy_clkreq_always_on_L1_9280, 
     38-                          ARRAY_SIZE(ar9280PciePhy_clkreq_always_on_L1_9280), 2); 
     39+                          ar9280PciePhy_clkreq_always_on_L1_9280); 
     40 #ifdef CONFIG_PM_SLEEP 
     41                INIT_INI_ARRAY(&ah->iniPcieSerdesWow, 
     42-                              ar9280PciePhy_awow, 
     43-                              ARRAY_SIZE(ar9280PciePhy_awow), 2); 
     44+                              ar9280PciePhy_awow); 
     45 #endif 
     46  
     47        if (AR_SREV_9287_11_OR_LATER(ah)) { 
     48-               INIT_INI_ARRAY(&ah->iniModes, ar9287Modes_9287_1_1, 
     49-                               ARRAY_SIZE(ar9287Modes_9287_1_1), 5); 
     50-               INIT_INI_ARRAY(&ah->iniCommon, ar9287Common_9287_1_1, 
     51-                               ARRAY_SIZE(ar9287Common_9287_1_1), 2); 
     52+               INIT_INI_ARRAY(&ah->iniModes, ar9287Modes_9287_1_1); 
     53+               INIT_INI_ARRAY(&ah->iniCommon, ar9287Common_9287_1_1); 
     54        } else if (AR_SREV_9285_12_OR_LATER(ah)) { 
     55-               INIT_INI_ARRAY(&ah->iniModes, ar9285Modes_9285_1_2, 
     56-                              ARRAY_SIZE(ar9285Modes_9285_1_2), 5); 
     57-               INIT_INI_ARRAY(&ah->iniCommon, ar9285Common_9285_1_2, 
     58-                              ARRAY_SIZE(ar9285Common_9285_1_2), 2); 
     59+               INIT_INI_ARRAY(&ah->iniModes, ar9285Modes_9285_1_2); 
     60+               INIT_INI_ARRAY(&ah->iniCommon, ar9285Common_9285_1_2); 
     61        } else if (AR_SREV_9280_20_OR_LATER(ah)) { 
     62-               INIT_INI_ARRAY(&ah->iniModes, ar9280Modes_9280_2, 
     63-                              ARRAY_SIZE(ar9280Modes_9280_2), 5); 
     64-               INIT_INI_ARRAY(&ah->iniCommon, ar9280Common_9280_2, 
     65-                              ARRAY_SIZE(ar9280Common_9280_2), 2); 
     66+               INIT_INI_ARRAY(&ah->iniModes, ar9280Modes_9280_2); 
     67+               INIT_INI_ARRAY(&ah->iniCommon, ar9280Common_9280_2); 
     68  
     69                INIT_INI_ARRAY(&ah->iniModesFastClock, 
     70-                              ar9280Modes_fast_clock_9280_2, 
     71-                              ARRAY_SIZE(ar9280Modes_fast_clock_9280_2), 3); 
     72+                              ar9280Modes_fast_clock_9280_2); 
     73        } else if (AR_SREV_9160_10_OR_LATER(ah)) { 
     74-               INIT_INI_ARRAY(&ah->iniModes, ar5416Modes_9160, 
     75-                              ARRAY_SIZE(ar5416Modes_9160), 5); 
     76-               INIT_INI_ARRAY(&ah->iniCommon, ar5416Common_9160, 
     77-                              ARRAY_SIZE(ar5416Common_9160), 2); 
     78+               INIT_INI_ARRAY(&ah->iniModes, ar5416Modes_9160); 
     79+               INIT_INI_ARRAY(&ah->iniCommon, ar5416Common_9160); 
     80                if (AR_SREV_9160_11(ah)) { 
     81                        INIT_INI_ARRAY(&ah->iniAddac, 
     82-                                      ar5416Addac_9160_1_1, 
     83-                                      ARRAY_SIZE(ar5416Addac_9160_1_1), 2); 
     84+                                      ar5416Addac_9160_1_1); 
     85                } else { 
     86-                       INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac_9160, 
     87-                                      ARRAY_SIZE(ar5416Addac_9160), 2); 
     88+                       INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac_9160); 
     89                } 
     90        } else if (AR_SREV_9100_OR_LATER(ah)) { 
     91-               INIT_INI_ARRAY(&ah->iniModes, ar5416Modes_9100, 
     92-                              ARRAY_SIZE(ar5416Modes_9100), 5); 
     93-               INIT_INI_ARRAY(&ah->iniCommon, ar5416Common_9100, 
     94-                              ARRAY_SIZE(ar5416Common_9100), 2); 
     95-               INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6_9100, 
     96-                              ARRAY_SIZE(ar5416Bank6_9100), 3); 
     97-               INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac_9100, 
     98-                              ARRAY_SIZE(ar5416Addac_9100), 2); 
     99+               INIT_INI_ARRAY(&ah->iniModes, ar5416Modes_9100); 
     100+               INIT_INI_ARRAY(&ah->iniCommon, ar5416Common_9100); 
     101+               INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6_9100); 
     102+               INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac_9100); 
     103        } else { 
     104-               INIT_INI_ARRAY(&ah->iniModes, ar5416Modes, 
     105-                              ARRAY_SIZE(ar5416Modes), 5); 
     106-               INIT_INI_ARRAY(&ah->iniCommon, ar5416Common, 
     107-                              ARRAY_SIZE(ar5416Common), 2); 
     108-               INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC, 
     109-                              ARRAY_SIZE(ar5416Bank6TPC), 3); 
     110-               INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac, 
     111-                              ARRAY_SIZE(ar5416Addac), 2); 
     112+               INIT_INI_ARRAY(&ah->iniModes, ar5416Modes); 
     113+               INIT_INI_ARRAY(&ah->iniCommon, ar5416Common); 
     114+               INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC); 
     115+               INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac); 
     116        } 
     117  
     118        if (!AR_SREV_9280_20_OR_LATER(ah)) { 
     119                /* Common for AR5416, AR913x, AR9160 */ 
     120-               INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain, 
     121-                              ARRAY_SIZE(ar5416BB_RfGain), 3); 
     122+               INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain); 
     123  
     124-               INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0, 
     125-                              ARRAY_SIZE(ar5416Bank0), 2); 
     126-               INIT_INI_ARRAY(&ah->iniBank1, ar5416Bank1, 
     127-                              ARRAY_SIZE(ar5416Bank1), 2); 
     128-               INIT_INI_ARRAY(&ah->iniBank2, ar5416Bank2, 
     129-                              ARRAY_SIZE(ar5416Bank2), 2); 
     130-               INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3, 
     131-                              ARRAY_SIZE(ar5416Bank3), 3); 
     132-               INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7, 
     133-                              ARRAY_SIZE(ar5416Bank7), 2); 
     134+               INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0); 
     135+               INIT_INI_ARRAY(&ah->iniBank1, ar5416Bank1); 
     136+               INIT_INI_ARRAY(&ah->iniBank2, ar5416Bank2); 
     137+               INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3); 
     138+               INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7); 
     139  
     140                /* Common for AR5416, AR9160 */ 
     141                if (!AR_SREV_9100(ah)) 
     142-                       INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6, 
     143-                                      ARRAY_SIZE(ar5416Bank6), 3); 
     144+                       INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6); 
     145  
     146                /* Common for AR913x, AR9160 */ 
     147                if (!AR_SREV_5416(ah)) 
     148-                       INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC_9100, 
     149-                                      ARRAY_SIZE(ar5416Bank6TPC_9100), 3); 
     150+                       INIT_INI_ARRAY(&ah->iniBank6TPC, 
     151+                                     ar5416Bank6TPC_9100); 
     152        } 
     153  
     154        /* iniAddac needs to be modified for these chips */ 
     155@@ -148,13 +116,9 @@ static void ar9002_hw_init_mode_regs(str 
     156        } 
     157        if (AR_SREV_9287_11_OR_LATER(ah)) { 
     158                INIT_INI_ARRAY(&ah->iniCckfirNormal, 
     159-                      ar9287Common_normal_cck_fir_coeff_9287_1_1, 
     160-                      ARRAY_SIZE(ar9287Common_normal_cck_fir_coeff_9287_1_1), 
     161-                      2); 
     162+                      ar9287Common_normal_cck_fir_coeff_9287_1_1); 
     163                INIT_INI_ARRAY(&ah->iniCckfirJapan2484, 
     164-                      ar9287Common_japan_2484_cck_fir_coeff_9287_1_1, 
     165-                      ARRAY_SIZE(ar9287Common_japan_2484_cck_fir_coeff_9287_1_1), 
     166-                      2); 
     167+                      ar9287Common_japan_2484_cck_fir_coeff_9287_1_1); 
     168        } 
     169 } 
     170  
     171@@ -168,20 +132,16 @@ static void ar9280_20_hw_init_rxgain_ini 
     172  
     173                if (rxgain_type == AR5416_EEP_RXGAIN_13DB_BACKOFF) 
     174                        INIT_INI_ARRAY(&ah->iniModesRxGain, 
     175-                       ar9280Modes_backoff_13db_rxgain_9280_2, 
     176-                       ARRAY_SIZE(ar9280Modes_backoff_13db_rxgain_9280_2), 5); 
     177+                                      ar9280Modes_backoff_13db_rxgain_9280_2); 
     178                else if (rxgain_type == AR5416_EEP_RXGAIN_23DB_BACKOFF) 
     179                        INIT_INI_ARRAY(&ah->iniModesRxGain, 
     180-                       ar9280Modes_backoff_23db_rxgain_9280_2, 
     181-                       ARRAY_SIZE(ar9280Modes_backoff_23db_rxgain_9280_2), 5); 
     182+                                      ar9280Modes_backoff_23db_rxgain_9280_2); 
     183                else 
     184                        INIT_INI_ARRAY(&ah->iniModesRxGain, 
     185-                       ar9280Modes_original_rxgain_9280_2, 
     186-                       ARRAY_SIZE(ar9280Modes_original_rxgain_9280_2), 5); 
     187+                                      ar9280Modes_original_rxgain_9280_2); 
     188        } else { 
     189                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     190-                       ar9280Modes_original_rxgain_9280_2, 
     191-                       ARRAY_SIZE(ar9280Modes_original_rxgain_9280_2), 5); 
     192+                              ar9280Modes_original_rxgain_9280_2); 
     193        } 
     194 } 
     195  
     196@@ -191,16 +151,13 @@ static void ar9280_20_hw_init_txgain_ini 
     197            AR5416_EEP_MINOR_VER_19) { 
     198                if (txgain_type == AR5416_EEP_TXGAIN_HIGH_POWER) 
     199                        INIT_INI_ARRAY(&ah->iniModesTxGain, 
     200-                       ar9280Modes_high_power_tx_gain_9280_2, 
     201-                       ARRAY_SIZE(ar9280Modes_high_power_tx_gain_9280_2), 5); 
     202+                                      ar9280Modes_high_power_tx_gain_9280_2); 
     203                else 
     204                        INIT_INI_ARRAY(&ah->iniModesTxGain, 
     205-                       ar9280Modes_original_tx_gain_9280_2, 
     206-                       ARRAY_SIZE(ar9280Modes_original_tx_gain_9280_2), 5); 
     207+                                      ar9280Modes_original_tx_gain_9280_2); 
     208        } else { 
     209                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     210-               ar9280Modes_original_tx_gain_9280_2, 
     211-               ARRAY_SIZE(ar9280Modes_original_tx_gain_9280_2), 5); 
     212+                              ar9280Modes_original_tx_gain_9280_2); 
     213        } 
     214 } 
     215  
     216@@ -208,12 +165,10 @@ static void ar9271_hw_init_txgain_ini(st 
     217 { 
     218        if (txgain_type == AR5416_EEP_TXGAIN_HIGH_POWER) 
     219                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     220-                              ar9271Modes_high_power_tx_gain_9271, 
     221-                              ARRAY_SIZE(ar9271Modes_high_power_tx_gain_9271), 5); 
     222+                              ar9271Modes_high_power_tx_gain_9271); 
     223        else 
     224                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     225-                              ar9271Modes_normal_power_tx_gain_9271, 
     226-                              ARRAY_SIZE(ar9271Modes_normal_power_tx_gain_9271), 5); 
     227+                              ar9271Modes_normal_power_tx_gain_9271); 
     228 } 
     229  
     230 static void ar9002_hw_init_mode_gain_regs(struct ath_hw *ah) 
     231@@ -222,8 +177,7 @@ static void ar9002_hw_init_mode_gain_reg 
     232  
     233        if (AR_SREV_9287_11_OR_LATER(ah)) 
     234                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     235-               ar9287Modes_rx_gain_9287_1_1, 
     236-               ARRAY_SIZE(ar9287Modes_rx_gain_9287_1_1), 5); 
     237+                              ar9287Modes_rx_gain_9287_1_1); 
     238        else if (AR_SREV_9280_20(ah)) 
     239                ar9280_20_hw_init_rxgain_ini(ah); 
     240  
     241@@ -231,8 +185,7 @@ static void ar9002_hw_init_mode_gain_reg 
     242                ar9271_hw_init_txgain_ini(ah, txgain_type); 
     243        } else if (AR_SREV_9287_11_OR_LATER(ah)) { 
     244                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     245-               ar9287Modes_tx_gain_9287_1_1, 
     246-               ARRAY_SIZE(ar9287Modes_tx_gain_9287_1_1), 5); 
     247+                              ar9287Modes_tx_gain_9287_1_1); 
     248        } else if (AR_SREV_9280_20(ah)) { 
     249                ar9280_20_hw_init_txgain_ini(ah, txgain_type); 
     250        } else if (AR_SREV_9285_12_OR_LATER(ah)) { 
     251@@ -240,26 +193,18 @@ static void ar9002_hw_init_mode_gain_reg 
     252                if (txgain_type == AR5416_EEP_TXGAIN_HIGH_POWER) { 
     253                        if (AR_SREV_9285E_20(ah)) { 
     254                                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     255-                               ar9285Modes_XE2_0_high_power, 
     256-                               ARRAY_SIZE( 
     257-                                 ar9285Modes_XE2_0_high_power), 5); 
     258+                                              ar9285Modes_XE2_0_high_power); 
     259                        } else { 
     260                                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     261-                               ar9285Modes_high_power_tx_gain_9285_1_2, 
     262-                               ARRAY_SIZE( 
     263-                                 ar9285Modes_high_power_tx_gain_9285_1_2), 5); 
     264+                                       ar9285Modes_high_power_tx_gain_9285_1_2); 
     265                        } 
     266                } else { 
     267                        if (AR_SREV_9285E_20(ah)) { 
     268                                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     269-                               ar9285Modes_XE2_0_normal_power, 
     270-                               ARRAY_SIZE( 
     271-                                 ar9285Modes_XE2_0_normal_power), 5); 
     272+                                              ar9285Modes_XE2_0_normal_power); 
     273                        } else { 
     274                                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     275-                               ar9285Modes_original_tx_gain_9285_1_2, 
     276-                               ARRAY_SIZE( 
     277-                                 ar9285Modes_original_tx_gain_9285_1_2), 5); 
     278+                                       ar9285Modes_original_tx_gain_9285_1_2); 
     279                        } 
     280                } 
     281        } 
     282--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c 
     283+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c 
     284@@ -131,8 +131,9 @@ static const struct ar9300_eeprom ar9300 
     285                .thresh62 = 28, 
     286                .papdRateMaskHt20 = LE32(0x0cf0e0e0), 
     287                .papdRateMaskHt40 = LE32(0x6cf0e0e0), 
     288+               .xlna_bias_strength = 0, 
     289                .futureModal = { 
     290-                       0, 0, 0, 0, 0, 0, 0, 0, 
     291+                       0, 0, 0, 0, 0, 0, 0, 
     292                }, 
     293         }, 
     294        .base_ext1 = { 
     295@@ -331,8 +332,9 @@ static const struct ar9300_eeprom ar9300 
     296                .thresh62 = 28, 
     297                .papdRateMaskHt20 = LE32(0x0c80c080), 
     298                .papdRateMaskHt40 = LE32(0x0080c080), 
     299+               .xlna_bias_strength = 0, 
     300                .futureModal = { 
     301-                       0, 0, 0, 0, 0, 0, 0, 0, 
     302+                       0, 0, 0, 0, 0, 0, 0, 
     303                }, 
     304         }, 
     305        .base_ext2 = { 
     306@@ -704,8 +706,9 @@ static const struct ar9300_eeprom ar9300 
     307                .thresh62 = 28, 
     308                .papdRateMaskHt20 = LE32(0x0c80c080), 
     309                .papdRateMaskHt40 = LE32(0x0080c080), 
     310+               .xlna_bias_strength = 0, 
     311                .futureModal = { 
     312-                       0, 0, 0, 0, 0, 0, 0, 0, 
     313+                       0, 0, 0, 0, 0, 0, 0, 
     314                }, 
     315         }, 
     316         .base_ext1 = { 
     317@@ -904,8 +907,9 @@ static const struct ar9300_eeprom ar9300 
     318                .thresh62 = 28, 
     319                .papdRateMaskHt20 = LE32(0x0cf0e0e0), 
     320                .papdRateMaskHt40 = LE32(0x6cf0e0e0), 
     321+               .xlna_bias_strength = 0, 
     322                .futureModal = { 
     323-                       0, 0, 0, 0, 0, 0, 0, 0, 
     324+                       0, 0, 0, 0, 0, 0, 0, 
     325                }, 
     326         }, 
     327        .base_ext2 = { 
     328@@ -1278,8 +1282,9 @@ static const struct ar9300_eeprom ar9300 
     329                .thresh62 = 28, 
     330                .papdRateMaskHt20 = LE32(0x0c80c080), 
     331                .papdRateMaskHt40 = LE32(0x0080c080), 
     332+               .xlna_bias_strength = 0, 
     333                .futureModal = { 
     334-                       0, 0, 0, 0, 0, 0, 0, 0, 
     335+                       0, 0, 0, 0, 0, 0, 0, 
     336                }, 
     337        }, 
     338        .base_ext1 = { 
     339@@ -1478,8 +1483,9 @@ static const struct ar9300_eeprom ar9300 
     340                .thresh62 = 28, 
     341                .papdRateMaskHt20 = LE32(0x0cf0e0e0), 
     342                .papdRateMaskHt40 = LE32(0x6cf0e0e0), 
     343+               .xlna_bias_strength = 0, 
     344                .futureModal = { 
     345-                       0, 0, 0, 0, 0, 0, 0, 0, 
     346+                       0, 0, 0, 0, 0, 0, 0, 
     347                }, 
     348        }, 
     349        .base_ext2 = { 
     350@@ -1852,8 +1858,9 @@ static const struct ar9300_eeprom ar9300 
     351                .thresh62 = 28, 
     352                .papdRateMaskHt20 = LE32(0x0c80c080), 
     353                .papdRateMaskHt40 = LE32(0x0080c080), 
     354+               .xlna_bias_strength = 0, 
     355                .futureModal = { 
     356-                       0, 0, 0, 0, 0, 0, 0, 0, 
     357+                       0, 0, 0, 0, 0, 0, 0, 
     358                }, 
     359        }, 
     360        .base_ext1 = { 
     361@@ -2052,8 +2059,9 @@ static const struct ar9300_eeprom ar9300 
     362                .thresh62 = 28, 
     363                .papdRateMaskHt20 = LE32(0x0cf0e0e0), 
     364                .papdRateMaskHt40 = LE32(0x6cf0e0e0), 
     365+               .xlna_bias_strength = 0, 
     366                .futureModal = { 
     367-                       0, 0, 0, 0, 0, 0, 0, 0, 
     368+                       0, 0, 0, 0, 0, 0, 0, 
     369                }, 
     370        }, 
     371        .base_ext2 = { 
     372@@ -2425,8 +2433,9 @@ static const struct ar9300_eeprom ar9300 
     373                .thresh62 = 28, 
     374                .papdRateMaskHt20 = LE32(0x0c80C080), 
     375                .papdRateMaskHt40 = LE32(0x0080C080), 
     376+               .xlna_bias_strength = 0, 
     377                .futureModal = { 
     378-                       0, 0, 0, 0, 0, 0, 0, 0, 
     379+                       0, 0, 0, 0, 0, 0, 0, 
     380                }, 
     381         }, 
     382         .base_ext1 = { 
     383@@ -2625,8 +2634,9 @@ static const struct ar9300_eeprom ar9300 
     384                .thresh62 = 28, 
     385                .papdRateMaskHt20 = LE32(0x0cf0e0e0), 
     386                .papdRateMaskHt40 = LE32(0x6cf0e0e0), 
     387+               .xlna_bias_strength = 0, 
     388                .futureModal = { 
     389-                       0, 0, 0, 0, 0, 0, 0, 0, 
     390+                       0, 0, 0, 0, 0, 0, 0, 
     391                }, 
     392         }, 
     393        .base_ext2 = { 
     394@@ -2971,14 +2981,6 @@ static u32 ath9k_hw_ar9300_get_eeprom(st 
     395                return (pBase->txrxMask >> 4) & 0xf; 
     396        case EEP_RX_MASK: 
     397                return pBase->txrxMask & 0xf; 
     398-       case EEP_DRIVE_STRENGTH: 
     399-#define AR9300_EEP_BASE_DRIV_STRENGTH  0x1 
     400-               return pBase->miscConfiguration & AR9300_EEP_BASE_DRIV_STRENGTH; 
     401-       case EEP_INTERNAL_REGULATOR: 
     402-               /* Bit 4 is internal regulator flag */ 
     403-               return (pBase->featureEnable & 0x10) >> 4; 
     404-       case EEP_SWREG: 
     405-               return le32_to_cpu(pBase->swreg); 
     406        case EEP_PAPRD: 
     407                return !!(pBase->featureEnable & BIT(5)); 
     408        case EEP_CHAIN_MASK_REDUCE: 
     409@@ -2989,8 +2991,6 @@ static u32 ath9k_hw_ar9300_get_eeprom(st 
     410                return eep->modalHeader5G.antennaGain; 
     411        case EEP_ANTENNA_GAIN_2G: 
     412                return eep->modalHeader2G.antennaGain; 
     413-       case EEP_QUICK_DROP: 
     414-               return pBase->miscConfiguration & BIT(1); 
     415        default: 
     416                return 0; 
     417        } 
     418@@ -3260,10 +3260,20 @@ static int ar9300_eeprom_restore_interna 
     419        int it; 
     420        u16 checksum, mchecksum; 
     421        struct ath_common *common = ath9k_hw_common(ah); 
     422+       struct ar9300_eeprom *eep; 
     423        eeprom_read_op read; 
     424  
     425-       if (ath9k_hw_use_flash(ah)) 
     426-               return ar9300_eeprom_restore_flash(ah, mptr, mdata_size); 
     427+       if (ath9k_hw_use_flash(ah)) { 
     428+               u8 txrx; 
     429+ 
     430+               ar9300_eeprom_restore_flash(ah, mptr, mdata_size); 
     431+ 
     432+               /* check if eeprom contains valid data */ 
     433+               eep = (struct ar9300_eeprom *) mptr; 
     434+               txrx = eep->baseEepHeader.txrxMask; 
     435+               if (txrx != 0 && txrx != 0xff) 
     436+                       return 0; 
     437+       } 
     438  
     439        word = kzalloc(2048, GFP_KERNEL); 
     440        if (!word) 
     441@@ -3493,19 +3503,20 @@ static int ath9k_hw_ar9300_get_eeprom_re 
     442        return 0; 
     443 } 
     444  
     445-static s32 ar9003_hw_xpa_bias_level_get(struct ath_hw *ah, bool is2ghz) 
     446+static struct ar9300_modal_eep_header *ar9003_modal_header(struct ath_hw *ah, 
     447+                                                          bool is2ghz) 
     448 { 
     449        struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep; 
     450  
     451        if (is2ghz) 
     452-               return eep->modalHeader2G.xpaBiasLvl; 
     453+               return &eep->modalHeader2G; 
     454        else 
     455-               return eep->modalHeader5G.xpaBiasLvl; 
     456+               return &eep->modalHeader5G; 
     457 } 
     458  
     459 static void ar9003_hw_xpa_bias_level_apply(struct ath_hw *ah, bool is2ghz) 
     460 { 
     461-       int bias = ar9003_hw_xpa_bias_level_get(ah, is2ghz); 
     462+       int bias = ar9003_modal_header(ah, is2ghz)->xpaBiasLvl; 
     463  
     464        if (AR_SREV_9485(ah) || AR_SREV_9330(ah) || AR_SREV_9340(ah)) 
     465                REG_RMW_FIELD(ah, AR_CH0_TOP2, AR_CH0_TOP2_XPABIASLVL, bias); 
     466@@ -3521,57 +3532,26 @@ static void ar9003_hw_xpa_bias_level_app 
     467        } 
     468 } 
     469  
     470-static u16 ar9003_switch_com_spdt_get(struct ath_hw *ah, bool is_2ghz) 
     471+static u16 ar9003_switch_com_spdt_get(struct ath_hw *ah, bool is2ghz) 
     472 { 
     473-       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep; 
     474-       __le16 val; 
     475- 
     476-       if (is_2ghz) 
     477-               val = eep->modalHeader2G.switchcomspdt; 
     478-       else 
     479-               val = eep->modalHeader5G.switchcomspdt; 
     480-       return le16_to_cpu(val); 
     481+       return le16_to_cpu(ar9003_modal_header(ah, is2ghz)->switchcomspdt); 
     482 } 
     483  
     484  
     485 static u32 ar9003_hw_ant_ctrl_common_get(struct ath_hw *ah, bool is2ghz) 
     486 { 
     487-       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep; 
     488-       __le32 val; 
     489- 
     490-       if (is2ghz) 
     491-               val = eep->modalHeader2G.antCtrlCommon; 
     492-       else 
     493-               val = eep->modalHeader5G.antCtrlCommon; 
     494-       return le32_to_cpu(val); 
     495+       return le32_to_cpu(ar9003_modal_header(ah, is2ghz)->antCtrlCommon); 
     496 } 
     497  
     498 static u32 ar9003_hw_ant_ctrl_common_2_get(struct ath_hw *ah, bool is2ghz) 
     499 { 
     500-       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep; 
     501-       __le32 val; 
     502- 
     503-       if (is2ghz) 
     504-               val = eep->modalHeader2G.antCtrlCommon2; 
     505-       else 
     506-               val = eep->modalHeader5G.antCtrlCommon2; 
     507-       return le32_to_cpu(val); 
     508+       return le32_to_cpu(ar9003_modal_header(ah, is2ghz)->antCtrlCommon2); 
     509 } 
     510  
     511-static u16 ar9003_hw_ant_ctrl_chain_get(struct ath_hw *ah, 
     512-                                       int chain, 
     513+static u16 ar9003_hw_ant_ctrl_chain_get(struct ath_hw *ah, int chain, 
     514                                        bool is2ghz) 
     515 { 
     516-       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep; 
     517-       __le16 val = 0; 
     518- 
     519-       if (chain >= 0 && chain < AR9300_MAX_CHAINS) { 
     520-               if (is2ghz) 
     521-                       val = eep->modalHeader2G.antCtrlChain[chain]; 
     522-               else 
     523-                       val = eep->modalHeader5G.antCtrlChain[chain]; 
     524-       } 
     525- 
     526+       __le16 val = ar9003_modal_header(ah, is2ghz)->antCtrlChain[chain]; 
     527        return le16_to_cpu(val); 
     528 } 
     529  
     530@@ -3681,11 +3661,12 @@ static void ar9003_hw_ant_ctrl_apply(str 
     531  
     532 static void ar9003_hw_drive_strength_apply(struct ath_hw *ah) 
     533 { 
     534+       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep; 
     535+       struct ar9300_base_eep_hdr *pBase = &eep->baseEepHeader; 
     536        int drive_strength; 
     537        unsigned long reg; 
     538  
     539-       drive_strength = ath9k_hw_ar9300_get_eeprom(ah, EEP_DRIVE_STRENGTH); 
     540- 
     541+       drive_strength = pBase->miscConfiguration & BIT(0); 
     542        if (!drive_strength) 
     543                return; 
     544  
     545@@ -3815,11 +3796,11 @@ static bool is_pmu_set(struct ath_hw *ah 
     546  
     547 void ar9003_hw_internal_regulator_apply(struct ath_hw *ah) 
     548 { 
     549-       int internal_regulator = 
     550-               ath9k_hw_ar9300_get_eeprom(ah, EEP_INTERNAL_REGULATOR); 
     551+       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep; 
     552+       struct ar9300_base_eep_hdr *pBase = &eep->baseEepHeader; 
     553        u32 reg_val; 
     554  
     555-       if (internal_regulator) { 
     556+       if (pBase->featureEnable & BIT(4)) { 
     557                if (AR_SREV_9330(ah) || AR_SREV_9485(ah)) { 
     558                        int reg_pmu_set; 
     559  
     560@@ -3863,11 +3844,11 @@ void ar9003_hw_internal_regulator_apply( 
     561                        if (!is_pmu_set(ah, AR_PHY_PMU2, reg_pmu_set)) 
     562                                return; 
     563                } else if (AR_SREV_9462(ah)) { 
     564-                       reg_val = ath9k_hw_ar9300_get_eeprom(ah, EEP_SWREG); 
     565+                       reg_val = le32_to_cpu(pBase->swreg); 
     566                        REG_WRITE(ah, AR_PHY_PMU1, reg_val); 
     567                } else { 
     568                        /* Internal regulator is ON. Write swreg register. */ 
     569-                       reg_val = ath9k_hw_ar9300_get_eeprom(ah, EEP_SWREG); 
     570+                       reg_val = le32_to_cpu(pBase->swreg); 
     571                        REG_WRITE(ah, AR_RTC_REG_CONTROL1, 
     572                                  REG_READ(ah, AR_RTC_REG_CONTROL1) & 
     573                                  (~AR_RTC_REG_CONTROL1_SWREG_PROGRAM)); 
     574@@ -3909,6 +3890,9 @@ static void ar9003_hw_apply_tuning_caps( 
     575        struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep; 
     576        u8 tuning_caps_param = eep->baseEepHeader.params_for_tuning_caps[0]; 
     577  
     578+       if (AR_SREV_9485(ah) || AR_SREV_9330(ah) || AR_SREV_9340(ah)) 
     579+               return; 
     580+ 
     581        if (eep->baseEepHeader.featureEnable & 0x40) { 
     582                tuning_caps_param &= 0x7f; 
     583                REG_RMW_FIELD(ah, AR_CH0_XTAL, AR_CH0_XTAL_CAPINDAC, 
     584@@ -3921,10 +3905,11 @@ static void ar9003_hw_apply_tuning_caps( 
     585 static void ar9003_hw_quick_drop_apply(struct ath_hw *ah, u16 freq) 
     586 { 
     587        struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep; 
     588-       int quick_drop = ath9k_hw_ar9300_get_eeprom(ah, EEP_QUICK_DROP); 
     589+       struct ar9300_base_eep_hdr *pBase = &eep->baseEepHeader; 
     590+       int quick_drop; 
     591        s32 t[3], f[3] = {5180, 5500, 5785}; 
     592  
     593-       if (!quick_drop) 
     594+       if (!(pBase->miscConfiguration & BIT(1))) 
     595                return; 
     596  
     597        if (freq < 4000) 
     598@@ -3938,13 +3923,11 @@ static void ar9003_hw_quick_drop_apply(s 
     599        REG_RMW_FIELD(ah, AR_PHY_AGC, AR_PHY_AGC_QUICK_DROP, quick_drop); 
     600 } 
     601  
     602-static void ar9003_hw_txend_to_xpa_off_apply(struct ath_hw *ah, u16 freq) 
     603+static void ar9003_hw_txend_to_xpa_off_apply(struct ath_hw *ah, bool is2ghz) 
     604 { 
     605-       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep; 
     606        u32 value; 
     607  
     608-       value = (freq < 4000) ? eep->modalHeader2G.txEndToXpaOff : 
     609-                               eep->modalHeader5G.txEndToXpaOff; 
     610+       value = ar9003_modal_header(ah, is2ghz)->txEndToXpaOff; 
     611  
     612        REG_RMW_FIELD(ah, AR_PHY_XPA_TIMING_CTL, 
     613                      AR_PHY_XPA_TIMING_CTL_TX_END_XPAB_OFF, value); 
     614@@ -3952,19 +3935,63 @@ static void ar9003_hw_txend_to_xpa_off_a 
     615                      AR_PHY_XPA_TIMING_CTL_TX_END_XPAA_OFF, value); 
     616 } 
     617  
     618+static void ar9003_hw_xpa_timing_control_apply(struct ath_hw *ah, bool is2ghz) 
     619+{ 
     620+       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep; 
     621+       u8 xpa_ctl; 
     622+ 
     623+       if (!(eep->baseEepHeader.featureEnable & 0x80)) 
     624+               return; 
     625+ 
     626+       if (!AR_SREV_9300(ah) && !AR_SREV_9340(ah) && !AR_SREV_9580(ah)) 
     627+               return; 
     628+ 
     629+       xpa_ctl = ar9003_modal_header(ah, is2ghz)->txFrameToXpaOn; 
     630+       if (is2ghz) 
     631+               REG_RMW_FIELD(ah, AR_PHY_XPA_TIMING_CTL, 
     632+                             AR_PHY_XPA_TIMING_CTL_FRAME_XPAB_ON, xpa_ctl); 
     633+       else 
     634+               REG_RMW_FIELD(ah, AR_PHY_XPA_TIMING_CTL, 
     635+                             AR_PHY_XPA_TIMING_CTL_FRAME_XPAA_ON, xpa_ctl); 
     636+} 
     637+ 
     638+static void ar9003_hw_xlna_bias_strength_apply(struct ath_hw *ah, bool is2ghz) 
     639+{ 
     640+       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep; 
     641+       u8 bias; 
     642+ 
     643+       if (!(eep->baseEepHeader.featureEnable & 0x40)) 
     644+               return; 
     645+ 
     646+       if (!AR_SREV_9300(ah)) 
     647+               return; 
     648+ 
     649+       bias = ar9003_modal_header(ah, is2ghz)->xlna_bias_strength; 
     650+       REG_RMW_FIELD(ah, AR_PHY_65NM_CH0_RXTX4, AR_PHY_65NM_RXTX4_XLNA_BIAS, 
     651+                     bias & 0x3); 
     652+       bias >>= 2; 
     653+       REG_RMW_FIELD(ah, AR_PHY_65NM_CH1_RXTX4, AR_PHY_65NM_RXTX4_XLNA_BIAS, 
     654+                     bias & 0x3); 
     655+       bias >>= 2; 
     656+       REG_RMW_FIELD(ah, AR_PHY_65NM_CH2_RXTX4, AR_PHY_65NM_RXTX4_XLNA_BIAS, 
     657+                     bias & 0x3); 
     658+} 
     659+ 
     660 static void ath9k_hw_ar9300_set_board_values(struct ath_hw *ah, 
     661                                             struct ath9k_channel *chan) 
     662 { 
     663-       ar9003_hw_xpa_bias_level_apply(ah, IS_CHAN_2GHZ(chan)); 
     664-       ar9003_hw_ant_ctrl_apply(ah, IS_CHAN_2GHZ(chan)); 
     665+       bool is2ghz = IS_CHAN_2GHZ(chan); 
     666+       ar9003_hw_xpa_timing_control_apply(ah, is2ghz); 
     667+       ar9003_hw_xpa_bias_level_apply(ah, is2ghz); 
     668+       ar9003_hw_ant_ctrl_apply(ah, is2ghz); 
     669        ar9003_hw_drive_strength_apply(ah); 
     670+       ar9003_hw_xlna_bias_strength_apply(ah, is2ghz); 
     671        ar9003_hw_atten_apply(ah, chan); 
     672        ar9003_hw_quick_drop_apply(ah, chan->channel); 
     673        if (!AR_SREV_9330(ah) && !AR_SREV_9340(ah) && !AR_SREV_9550(ah)) 
     674                ar9003_hw_internal_regulator_apply(ah); 
     675-       if (AR_SREV_9485(ah) || AR_SREV_9330(ah) || AR_SREV_9340(ah)) 
     676-               ar9003_hw_apply_tuning_caps(ah); 
     677-       ar9003_hw_txend_to_xpa_off_apply(ah, chan->channel); 
     678+       ar9003_hw_apply_tuning_caps(ah); 
     679+       ar9003_hw_txend_to_xpa_off_apply(ah, is2ghz); 
     680 } 
     681  
     682 static void ath9k_hw_ar9300_set_addac(struct ath_hw *ah, 
     683@@ -5100,14 +5127,9 @@ s32 ar9003_hw_get_rx_gain_idx(struct ath 
     684        return (eep->baseEepHeader.txrxgain) & 0xf; /* bits 3:0 */ 
     685 } 
     686  
     687-u8 *ar9003_get_spur_chan_ptr(struct ath_hw *ah, bool is_2ghz) 
     688+u8 *ar9003_get_spur_chan_ptr(struct ath_hw *ah, bool is2ghz) 
     689 { 
     690-       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep; 
     691- 
     692-       if (is_2ghz) 
     693-               return eep->modalHeader2G.spurChans; 
     694-       else 
     695-               return eep->modalHeader5G.spurChans; 
     696+       return ar9003_modal_header(ah, is2ghz)->spurChans; 
     697 } 
     698  
     699 unsigned int ar9003_get_paprd_scale_factor(struct ath_hw *ah, 
     700--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h 
     701+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h 
     702@@ -231,7 +231,8 @@ struct ar9300_modal_eep_header { 
     703        __le32 papdRateMaskHt20; 
     704        __le32 papdRateMaskHt40; 
     705        __le16 switchcomspdt; 
     706-       u8 futureModal[8]; 
     707+       u8 xlna_bias_strength; 
     708+       u8 futureModal[7]; 
     709 } __packed; 
     710  
     711 struct ar9300_cal_data_per_freq_op_loop { 
     712--- a/drivers/net/wireless/ath/ath9k/ar9003_hw.c 
     713+++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c 
     714@@ -44,462 +44,310 @@ static void ar9003_hw_init_mode_regs(str 
     715                ar9462_2p0_baseband_core_txfir_coeff_japan_2484 
     716        if (AR_SREV_9330_11(ah)) { 
     717                /* mac */ 
     718-               INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0); 
     719                INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE], 
     720-                               ar9331_1p1_mac_core, 
     721-                               ARRAY_SIZE(ar9331_1p1_mac_core), 2); 
     722+                               ar9331_1p1_mac_core); 
     723                INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST], 
     724-                               ar9331_1p1_mac_postamble, 
     725-                               ARRAY_SIZE(ar9331_1p1_mac_postamble), 5); 
     726+                               ar9331_1p1_mac_postamble); 
     727  
     728                /* bb */ 
     729-               INIT_INI_ARRAY(&ah->iniBB[ATH_INI_PRE], NULL, 0, 0); 
     730                INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE], 
     731-                               ar9331_1p1_baseband_core, 
     732-                               ARRAY_SIZE(ar9331_1p1_baseband_core), 2); 
     733+                               ar9331_1p1_baseband_core); 
     734                INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST], 
     735-                               ar9331_1p1_baseband_postamble, 
     736-                               ARRAY_SIZE(ar9331_1p1_baseband_postamble), 5); 
     737+                               ar9331_1p1_baseband_postamble); 
     738  
     739                /* radio */ 
     740-               INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_PRE], NULL, 0, 0); 
     741                INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE], 
     742-                               ar9331_1p1_radio_core, 
     743-                               ARRAY_SIZE(ar9331_1p1_radio_core), 2); 
     744-               INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST], NULL, 0, 0); 
     745+                               ar9331_1p1_radio_core); 
     746  
     747                /* soc */ 
     748                INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE], 
     749-                               ar9331_1p1_soc_preamble, 
     750-                               ARRAY_SIZE(ar9331_1p1_soc_preamble), 2); 
     751-               INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_CORE], NULL, 0, 0); 
     752+                               ar9331_1p1_soc_preamble); 
     753                INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST], 
     754-                               ar9331_1p1_soc_postamble, 
     755-                               ARRAY_SIZE(ar9331_1p1_soc_postamble), 2); 
     756+                               ar9331_1p1_soc_postamble); 
     757  
     758                /* rx/tx gain */ 
     759                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     760-                               ar9331_common_rx_gain_1p1, 
     761-                               ARRAY_SIZE(ar9331_common_rx_gain_1p1), 2); 
     762+                               ar9331_common_rx_gain_1p1); 
     763                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     764-                       ar9331_modes_lowest_ob_db_tx_gain_1p1, 
     765-                       ARRAY_SIZE(ar9331_modes_lowest_ob_db_tx_gain_1p1), 
     766-                       5); 
     767+                               ar9331_modes_lowest_ob_db_tx_gain_1p1); 
     768  
     769                /* additional clock settings */ 
     770                if (ah->is_clk_25mhz) 
     771                        INIT_INI_ARRAY(&ah->iniAdditional, 
     772-                                       ar9331_1p1_xtal_25M, 
     773-                                       ARRAY_SIZE(ar9331_1p1_xtal_25M), 2); 
     774+                                       ar9331_1p1_xtal_25M); 
     775                else 
     776                        INIT_INI_ARRAY(&ah->iniAdditional, 
     777-                                       ar9331_1p1_xtal_40M, 
     778-                                       ARRAY_SIZE(ar9331_1p1_xtal_40M), 2); 
     779+                                       ar9331_1p1_xtal_40M); 
     780        } else if (AR_SREV_9330_12(ah)) { 
     781                /* mac */ 
     782-               INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0); 
     783                INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE], 
     784-                               ar9331_1p2_mac_core, 
     785-                               ARRAY_SIZE(ar9331_1p2_mac_core), 2); 
     786+                               ar9331_1p2_mac_core); 
     787                INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST], 
     788-                               ar9331_1p2_mac_postamble, 
     789-                               ARRAY_SIZE(ar9331_1p2_mac_postamble), 5); 
     790+                               ar9331_1p2_mac_postamble); 
     791  
     792                /* bb */ 
     793-               INIT_INI_ARRAY(&ah->iniBB[ATH_INI_PRE], NULL, 0, 0); 
     794                INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE], 
     795-                               ar9331_1p2_baseband_core, 
     796-                               ARRAY_SIZE(ar9331_1p2_baseband_core), 2); 
     797+                               ar9331_1p2_baseband_core); 
     798                INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST], 
     799-                               ar9331_1p2_baseband_postamble, 
     800-                               ARRAY_SIZE(ar9331_1p2_baseband_postamble), 5); 
     801+                               ar9331_1p2_baseband_postamble); 
     802  
     803                /* radio */ 
     804-               INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_PRE], NULL, 0, 0); 
     805                INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE], 
     806-                               ar9331_1p2_radio_core, 
     807-                               ARRAY_SIZE(ar9331_1p2_radio_core), 2); 
     808-               INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST], NULL, 0, 0); 
     809+                               ar9331_1p2_radio_core); 
     810  
     811                /* soc */ 
     812                INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE], 
     813-                               ar9331_1p2_soc_preamble, 
     814-                               ARRAY_SIZE(ar9331_1p2_soc_preamble), 2); 
     815-               INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_CORE], NULL, 0, 0); 
     816+                               ar9331_1p2_soc_preamble); 
     817                INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST], 
     818-                               ar9331_1p2_soc_postamble, 
     819-                               ARRAY_SIZE(ar9331_1p2_soc_postamble), 2); 
     820+                               ar9331_1p2_soc_postamble); 
     821  
     822                /* rx/tx gain */ 
     823                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     824-                               ar9331_common_rx_gain_1p2, 
     825-                               ARRAY_SIZE(ar9331_common_rx_gain_1p2), 2); 
     826+                               ar9331_common_rx_gain_1p2); 
     827                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     828-                       ar9331_modes_lowest_ob_db_tx_gain_1p2, 
     829-                       ARRAY_SIZE(ar9331_modes_lowest_ob_db_tx_gain_1p2), 
     830-                       5); 
     831+                               ar9331_modes_lowest_ob_db_tx_gain_1p2); 
     832  
     833                /* additional clock settings */ 
     834                if (ah->is_clk_25mhz) 
     835                        INIT_INI_ARRAY(&ah->iniAdditional, 
     836-                                       ar9331_1p2_xtal_25M, 
     837-                                       ARRAY_SIZE(ar9331_1p2_xtal_25M), 2); 
     838+                                       ar9331_1p2_xtal_25M); 
     839                else 
     840                        INIT_INI_ARRAY(&ah->iniAdditional, 
     841-                                       ar9331_1p2_xtal_40M, 
     842-                                       ARRAY_SIZE(ar9331_1p2_xtal_40M), 2); 
     843+                                       ar9331_1p2_xtal_40M); 
     844        } else if (AR_SREV_9340(ah)) { 
     845                /* mac */ 
     846-               INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0); 
     847                INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE], 
     848-                               ar9340_1p0_mac_core, 
     849-                               ARRAY_SIZE(ar9340_1p0_mac_core), 2); 
     850+                               ar9340_1p0_mac_core); 
     851                INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST], 
     852-                               ar9340_1p0_mac_postamble, 
     853-                               ARRAY_SIZE(ar9340_1p0_mac_postamble), 5); 
     854+                               ar9340_1p0_mac_postamble); 
     855  
     856                /* bb */ 
     857-               INIT_INI_ARRAY(&ah->iniBB[ATH_INI_PRE], NULL, 0, 0); 
     858                INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE], 
     859-                               ar9340_1p0_baseband_core, 
     860-                               ARRAY_SIZE(ar9340_1p0_baseband_core), 2); 
     861+                               ar9340_1p0_baseband_core); 
     862                INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST], 
     863-                               ar9340_1p0_baseband_postamble, 
     864-                               ARRAY_SIZE(ar9340_1p0_baseband_postamble), 5); 
     865+                               ar9340_1p0_baseband_postamble); 
     866  
     867                /* radio */ 
     868-               INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_PRE], NULL, 0, 0); 
     869                INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE], 
     870-                               ar9340_1p0_radio_core, 
     871-                               ARRAY_SIZE(ar9340_1p0_radio_core), 2); 
     872+                               ar9340_1p0_radio_core); 
     873                INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST], 
     874-                               ar9340_1p0_radio_postamble, 
     875-                               ARRAY_SIZE(ar9340_1p0_radio_postamble), 5); 
     876+                               ar9340_1p0_radio_postamble); 
     877  
     878                /* soc */ 
     879                INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE], 
     880-                               ar9340_1p0_soc_preamble, 
     881-                               ARRAY_SIZE(ar9340_1p0_soc_preamble), 2); 
     882-               INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_CORE], NULL, 0, 0); 
     883+                               ar9340_1p0_soc_preamble); 
     884                INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST], 
     885-                               ar9340_1p0_soc_postamble, 
     886-                               ARRAY_SIZE(ar9340_1p0_soc_postamble), 5); 
     887+                               ar9340_1p0_soc_postamble); 
     888  
     889                /* rx/tx gain */ 
     890                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     891-                               ar9340Common_wo_xlna_rx_gain_table_1p0, 
     892-                               ARRAY_SIZE(ar9340Common_wo_xlna_rx_gain_table_1p0), 
     893-                               5); 
     894-               INIT_INI_ARRAY(&ah->iniModesTxGain, 
     895-                               ar9340Modes_high_ob_db_tx_gain_table_1p0, 
     896-                               ARRAY_SIZE(ar9340Modes_high_ob_db_tx_gain_table_1p0), 
     897-                               5); 
     898+                               ar9340Common_wo_xlna_rx_gain_table_1p0); 
     899+               INIT_INI_ARRAY(&ah->iniModesTxGain, 
     900+                               ar9340Modes_high_ob_db_tx_gain_table_1p0); 
     901  
     902                INIT_INI_ARRAY(&ah->iniModesFastClock, 
     903-                               ar9340Modes_fast_clock_1p0, 
     904-                               ARRAY_SIZE(ar9340Modes_fast_clock_1p0), 
     905-                               3); 
     906+                               ar9340Modes_fast_clock_1p0); 
     907  
     908                if (!ah->is_clk_25mhz) 
     909                        INIT_INI_ARRAY(&ah->iniAdditional, 
     910-                                      ar9340_1p0_radio_core_40M, 
     911-                                      ARRAY_SIZE(ar9340_1p0_radio_core_40M), 
     912-                                      2); 
     913+                                      ar9340_1p0_radio_core_40M); 
     914        } else if (AR_SREV_9485_11(ah)) { 
     915                /* mac */ 
     916-               INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0); 
     917                INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE], 
     918-                               ar9485_1_1_mac_core, 
     919-                               ARRAY_SIZE(ar9485_1_1_mac_core), 2); 
     920+                               ar9485_1_1_mac_core); 
     921                INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST], 
     922-                               ar9485_1_1_mac_postamble, 
     923-                               ARRAY_SIZE(ar9485_1_1_mac_postamble), 5); 
     924+                               ar9485_1_1_mac_postamble); 
     925  
     926                /* bb */ 
     927-               INIT_INI_ARRAY(&ah->iniBB[ATH_INI_PRE], ar9485_1_1, 
     928-                               ARRAY_SIZE(ar9485_1_1), 2); 
     929+               INIT_INI_ARRAY(&ah->iniBB[ATH_INI_PRE], ar9485_1_1); 
     930                INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE], 
     931-                               ar9485_1_1_baseband_core, 
     932-                               ARRAY_SIZE(ar9485_1_1_baseband_core), 2); 
     933+                               ar9485_1_1_baseband_core); 
     934                INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST], 
     935-                               ar9485_1_1_baseband_postamble, 
     936-                               ARRAY_SIZE(ar9485_1_1_baseband_postamble), 5); 
     937+                               ar9485_1_1_baseband_postamble); 
     938  
     939                /* radio */ 
     940-               INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_PRE], NULL, 0, 0); 
     941                INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE], 
     942-                               ar9485_1_1_radio_core, 
     943-                               ARRAY_SIZE(ar9485_1_1_radio_core), 2); 
     944+                               ar9485_1_1_radio_core); 
     945                INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST], 
     946-                               ar9485_1_1_radio_postamble, 
     947-                               ARRAY_SIZE(ar9485_1_1_radio_postamble), 2); 
     948+                               ar9485_1_1_radio_postamble); 
     949  
     950                /* soc */ 
     951                INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE], 
     952-                               ar9485_1_1_soc_preamble, 
     953-                               ARRAY_SIZE(ar9485_1_1_soc_preamble), 2); 
     954-               INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_CORE], NULL, 0, 0); 
     955-               INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST], NULL, 0, 0); 
     956+                               ar9485_1_1_soc_preamble); 
     957  
     958                /* rx/tx gain */ 
     959                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     960-                               ar9485Common_wo_xlna_rx_gain_1_1, 
     961-                               ARRAY_SIZE(ar9485Common_wo_xlna_rx_gain_1_1), 2); 
     962+                               ar9485Common_wo_xlna_rx_gain_1_1); 
     963                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     964-                               ar9485_modes_lowest_ob_db_tx_gain_1_1, 
     965-                               ARRAY_SIZE(ar9485_modes_lowest_ob_db_tx_gain_1_1), 
     966-                               5); 
     967+                               ar9485_modes_lowest_ob_db_tx_gain_1_1); 
     968  
     969                /* Load PCIE SERDES settings from INI */ 
     970  
     971                /* Awake Setting */ 
     972  
     973                INIT_INI_ARRAY(&ah->iniPcieSerdes, 
     974-                               ar9485_1_1_pcie_phy_clkreq_disable_L1, 
     975-                               ARRAY_SIZE(ar9485_1_1_pcie_phy_clkreq_disable_L1), 
     976-                               2); 
     977+                               ar9485_1_1_pcie_phy_clkreq_disable_L1); 
     978  
     979                /* Sleep Setting */ 
     980  
     981                INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower, 
     982-                               ar9485_1_1_pcie_phy_clkreq_disable_L1, 
     983-                               ARRAY_SIZE(ar9485_1_1_pcie_phy_clkreq_disable_L1), 
     984-                               2); 
     985+                               ar9485_1_1_pcie_phy_clkreq_disable_L1); 
     986        } else if (AR_SREV_9462_20(ah)) { 
     987  
     988-               INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0); 
     989-               INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE], ar9462_2p0_mac_core, 
     990-                               ARRAY_SIZE(ar9462_2p0_mac_core), 2); 
     991+               INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE], ar9462_2p0_mac_core); 
     992                INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST], 
     993-                               ar9462_2p0_mac_postamble, 
     994-                               ARRAY_SIZE(ar9462_2p0_mac_postamble), 5); 
     995+                               ar9462_2p0_mac_postamble); 
     996  
     997-               INIT_INI_ARRAY(&ah->iniBB[ATH_INI_PRE], NULL, 0, 0); 
     998                INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE], 
     999-                               ar9462_2p0_baseband_core, 
     1000-                               ARRAY_SIZE(ar9462_2p0_baseband_core), 2); 
     1001+                               ar9462_2p0_baseband_core); 
     1002                INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST], 
     1003-                               ar9462_2p0_baseband_postamble, 
     1004-                               ARRAY_SIZE(ar9462_2p0_baseband_postamble), 5); 
     1005+                               ar9462_2p0_baseband_postamble); 
     1006  
     1007-               INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_PRE], NULL, 0, 0); 
     1008                INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE], 
     1009-                               ar9462_2p0_radio_core, 
     1010-                               ARRAY_SIZE(ar9462_2p0_radio_core), 2); 
     1011+                               ar9462_2p0_radio_core); 
     1012                INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST], 
     1013-                               ar9462_2p0_radio_postamble, 
     1014-                               ARRAY_SIZE(ar9462_2p0_radio_postamble), 5); 
     1015+                               ar9462_2p0_radio_postamble); 
     1016                INIT_INI_ARRAY(&ah->ini_radio_post_sys2ant, 
     1017-                               ar9462_2p0_radio_postamble_sys2ant, 
     1018-                               ARRAY_SIZE(ar9462_2p0_radio_postamble_sys2ant), 
     1019-                               5); 
     1020+                               ar9462_2p0_radio_postamble_sys2ant); 
     1021  
     1022                INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE], 
     1023-                               ar9462_2p0_soc_preamble, 
     1024-                               ARRAY_SIZE(ar9462_2p0_soc_preamble), 2); 
     1025-               INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_CORE], NULL, 0, 0); 
     1026+                               ar9462_2p0_soc_preamble); 
     1027                INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST], 
     1028-                               ar9462_2p0_soc_postamble, 
     1029-                               ARRAY_SIZE(ar9462_2p0_soc_postamble), 5); 
     1030+                               ar9462_2p0_soc_postamble); 
     1031  
     1032                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     1033-                               ar9462_common_rx_gain_table_2p0, 
     1034-                               ARRAY_SIZE(ar9462_common_rx_gain_table_2p0), 2); 
     1035+                               ar9462_common_rx_gain_table_2p0); 
     1036  
     1037                /* Awake -> Sleep Setting */ 
     1038                INIT_INI_ARRAY(&ah->iniPcieSerdes, 
     1039-                               PCIE_PLL_ON_CREQ_DIS_L1_2P0, 
     1040-                               ARRAY_SIZE(PCIE_PLL_ON_CREQ_DIS_L1_2P0), 
     1041-                               2); 
     1042+                               PCIE_PLL_ON_CREQ_DIS_L1_2P0); 
     1043                /* Sleep -> Awake Setting */ 
     1044                INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower, 
     1045-                               PCIE_PLL_ON_CREQ_DIS_L1_2P0, 
     1046-                               ARRAY_SIZE(PCIE_PLL_ON_CREQ_DIS_L1_2P0), 
     1047-                               2); 
     1048+                               PCIE_PLL_ON_CREQ_DIS_L1_2P0); 
     1049  
     1050                /* Fast clock modal settings */ 
     1051                INIT_INI_ARRAY(&ah->iniModesFastClock, 
     1052-                               ar9462_modes_fast_clock_2p0, 
     1053-                               ARRAY_SIZE(ar9462_modes_fast_clock_2p0), 3); 
     1054+                               ar9462_modes_fast_clock_2p0); 
     1055  
     1056                INIT_INI_ARRAY(&ah->iniCckfirJapan2484, 
     1057-                               AR9462_BB_CTX_COEFJ(2p0), 
     1058-                               ARRAY_SIZE(AR9462_BB_CTX_COEFJ(2p0)), 2); 
     1059+                               AR9462_BB_CTX_COEFJ(2p0)); 
     1060  
     1061-               INIT_INI_ARRAY(&ah->ini_japan2484, AR9462_BBC_TXIFR_COEFFJ, 
     1062-                               ARRAY_SIZE(AR9462_BBC_TXIFR_COEFFJ), 2); 
     1063+               INIT_INI_ARRAY(&ah->ini_japan2484, AR9462_BBC_TXIFR_COEFFJ); 
     1064        } else if (AR_SREV_9550(ah)) { 
     1065                /* mac */ 
     1066-               INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0); 
     1067                INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE], 
     1068-                               ar955x_1p0_mac_core, 
     1069-                               ARRAY_SIZE(ar955x_1p0_mac_core), 2); 
     1070+                               ar955x_1p0_mac_core); 
     1071                INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST], 
     1072-                               ar955x_1p0_mac_postamble, 
     1073-                               ARRAY_SIZE(ar955x_1p0_mac_postamble), 5); 
     1074+                               ar955x_1p0_mac_postamble); 
     1075  
     1076                /* bb */ 
     1077-               INIT_INI_ARRAY(&ah->iniBB[ATH_INI_PRE], NULL, 0, 0); 
     1078                INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE], 
     1079-                               ar955x_1p0_baseband_core, 
     1080-                               ARRAY_SIZE(ar955x_1p0_baseband_core), 2); 
     1081+                               ar955x_1p0_baseband_core); 
     1082                INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST], 
     1083-                               ar955x_1p0_baseband_postamble, 
     1084-                               ARRAY_SIZE(ar955x_1p0_baseband_postamble), 5); 
     1085+                               ar955x_1p0_baseband_postamble); 
     1086  
     1087                /* radio */ 
     1088-               INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_PRE], NULL, 0, 0); 
     1089                INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE], 
     1090-                               ar955x_1p0_radio_core, 
     1091-                               ARRAY_SIZE(ar955x_1p0_radio_core), 2); 
     1092+                               ar955x_1p0_radio_core); 
     1093                INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST], 
     1094-                               ar955x_1p0_radio_postamble, 
     1095-                               ARRAY_SIZE(ar955x_1p0_radio_postamble), 5); 
     1096+                               ar955x_1p0_radio_postamble); 
     1097  
     1098                /* soc */ 
     1099                INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE], 
     1100-                               ar955x_1p0_soc_preamble, 
     1101-                               ARRAY_SIZE(ar955x_1p0_soc_preamble), 2); 
     1102-               INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_CORE], NULL, 0, 0); 
     1103+                               ar955x_1p0_soc_preamble); 
     1104                INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST], 
     1105-                               ar955x_1p0_soc_postamble, 
     1106-                               ARRAY_SIZE(ar955x_1p0_soc_postamble), 5); 
     1107+                               ar955x_1p0_soc_postamble); 
     1108  
     1109                /* rx/tx gain */ 
     1110                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     1111-                       ar955x_1p0_common_wo_xlna_rx_gain_table, 
     1112-                       ARRAY_SIZE(ar955x_1p0_common_wo_xlna_rx_gain_table), 
     1113-                       2); 
     1114+                       ar955x_1p0_common_wo_xlna_rx_gain_table); 
     1115                INIT_INI_ARRAY(&ah->ini_modes_rx_gain_bounds, 
     1116-                       ar955x_1p0_common_wo_xlna_rx_gain_bounds, 
     1117-                       ARRAY_SIZE(ar955x_1p0_common_wo_xlna_rx_gain_bounds), 
     1118-                       5); 
     1119-               INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1120-                               ar955x_1p0_modes_xpa_tx_gain_table, 
     1121-                               ARRAY_SIZE(ar955x_1p0_modes_xpa_tx_gain_table), 
     1122-                               9); 
     1123+                       ar955x_1p0_common_wo_xlna_rx_gain_bounds); 
     1124+               INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1125+                               ar955x_1p0_modes_xpa_tx_gain_table); 
     1126  
     1127                /* Fast clock modal settings */ 
     1128                INIT_INI_ARRAY(&ah->iniModesFastClock, 
     1129-                               ar955x_1p0_modes_fast_clock, 
     1130-                               ARRAY_SIZE(ar955x_1p0_modes_fast_clock), 3); 
     1131+                               ar955x_1p0_modes_fast_clock); 
     1132        } else if (AR_SREV_9580(ah)) { 
     1133                /* mac */ 
     1134-               INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0); 
     1135                INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE], 
     1136-                               ar9580_1p0_mac_core, 
     1137-                               ARRAY_SIZE(ar9580_1p0_mac_core), 2); 
     1138+                               ar9580_1p0_mac_core); 
     1139                INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST], 
     1140-                               ar9580_1p0_mac_postamble, 
     1141-                               ARRAY_SIZE(ar9580_1p0_mac_postamble), 5); 
     1142+                               ar9580_1p0_mac_postamble); 
     1143  
     1144                /* bb */ 
     1145-               INIT_INI_ARRAY(&ah->iniBB[ATH_INI_PRE], NULL, 0, 0); 
     1146                INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE], 
     1147-                               ar9580_1p0_baseband_core, 
     1148-                               ARRAY_SIZE(ar9580_1p0_baseband_core), 2); 
     1149+                               ar9580_1p0_baseband_core); 
     1150                INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST], 
     1151-                               ar9580_1p0_baseband_postamble, 
     1152-                               ARRAY_SIZE(ar9580_1p0_baseband_postamble), 5); 
     1153+                               ar9580_1p0_baseband_postamble); 
     1154  
     1155                /* radio */ 
     1156-               INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_PRE], NULL, 0, 0); 
     1157                INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE], 
     1158-                               ar9580_1p0_radio_core, 
     1159-                               ARRAY_SIZE(ar9580_1p0_radio_core), 2); 
     1160+                               ar9580_1p0_radio_core); 
     1161                INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST], 
     1162-                               ar9580_1p0_radio_postamble, 
     1163-                               ARRAY_SIZE(ar9580_1p0_radio_postamble), 5); 
     1164+                               ar9580_1p0_radio_postamble); 
     1165  
     1166                /* soc */ 
     1167                INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE], 
     1168-                               ar9580_1p0_soc_preamble, 
     1169-                               ARRAY_SIZE(ar9580_1p0_soc_preamble), 2); 
     1170-               INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_CORE], NULL, 0, 0); 
     1171+                               ar9580_1p0_soc_preamble); 
     1172                INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST], 
     1173-                               ar9580_1p0_soc_postamble, 
     1174-                               ARRAY_SIZE(ar9580_1p0_soc_postamble), 5); 
     1175+                               ar9580_1p0_soc_postamble); 
     1176  
     1177                /* rx/tx gain */ 
     1178                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     1179-                               ar9580_1p0_rx_gain_table, 
     1180-                               ARRAY_SIZE(ar9580_1p0_rx_gain_table), 2); 
     1181+                               ar9580_1p0_rx_gain_table); 
     1182                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1183-                               ar9580_1p0_low_ob_db_tx_gain_table, 
     1184-                               ARRAY_SIZE(ar9580_1p0_low_ob_db_tx_gain_table), 
     1185-                               5); 
     1186+                               ar9580_1p0_low_ob_db_tx_gain_table); 
     1187  
     1188                INIT_INI_ARRAY(&ah->iniModesFastClock, 
     1189-                               ar9580_1p0_modes_fast_clock, 
     1190-                               ARRAY_SIZE(ar9580_1p0_modes_fast_clock), 
     1191-                               3); 
     1192+                               ar9580_1p0_modes_fast_clock); 
     1193        } else { 
     1194                /* mac */ 
     1195-               INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0); 
     1196                INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE], 
     1197-                               ar9300_2p2_mac_core, 
     1198-                               ARRAY_SIZE(ar9300_2p2_mac_core), 2); 
     1199+                               ar9300_2p2_mac_core); 
     1200                INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST], 
     1201-                               ar9300_2p2_mac_postamble, 
     1202-                               ARRAY_SIZE(ar9300_2p2_mac_postamble), 5); 
     1203+                               ar9300_2p2_mac_postamble); 
     1204  
     1205                /* bb */ 
     1206-               INIT_INI_ARRAY(&ah->iniBB[ATH_INI_PRE], NULL, 0, 0); 
     1207                INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE], 
     1208-                               ar9300_2p2_baseband_core, 
     1209-                               ARRAY_SIZE(ar9300_2p2_baseband_core), 2); 
     1210+                               ar9300_2p2_baseband_core); 
     1211                INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST], 
     1212-                               ar9300_2p2_baseband_postamble, 
     1213-                               ARRAY_SIZE(ar9300_2p2_baseband_postamble), 5); 
     1214+                               ar9300_2p2_baseband_postamble); 
     1215  
     1216                /* radio */ 
     1217-               INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_PRE], NULL, 0, 0); 
     1218                INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE], 
     1219-                               ar9300_2p2_radio_core, 
     1220-                               ARRAY_SIZE(ar9300_2p2_radio_core), 2); 
     1221+                               ar9300_2p2_radio_core); 
     1222                INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST], 
     1223-                               ar9300_2p2_radio_postamble, 
     1224-                               ARRAY_SIZE(ar9300_2p2_radio_postamble), 5); 
     1225+                               ar9300_2p2_radio_postamble); 
     1226  
     1227                /* soc */ 
     1228                INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE], 
     1229-                               ar9300_2p2_soc_preamble, 
     1230-                               ARRAY_SIZE(ar9300_2p2_soc_preamble), 2); 
     1231-               INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_CORE], NULL, 0, 0); 
     1232+                               ar9300_2p2_soc_preamble); 
     1233                INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST], 
     1234-                               ar9300_2p2_soc_postamble, 
     1235-                               ARRAY_SIZE(ar9300_2p2_soc_postamble), 5); 
     1236+                               ar9300_2p2_soc_postamble); 
     1237  
     1238                /* rx/tx gain */ 
     1239                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     1240-                               ar9300Common_rx_gain_table_2p2, 
     1241-                               ARRAY_SIZE(ar9300Common_rx_gain_table_2p2), 2); 
     1242+                               ar9300Common_rx_gain_table_2p2); 
     1243                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1244-                               ar9300Modes_lowest_ob_db_tx_gain_table_2p2, 
     1245-                               ARRAY_SIZE(ar9300Modes_lowest_ob_db_tx_gain_table_2p2), 
     1246-                               5); 
     1247+                               ar9300Modes_lowest_ob_db_tx_gain_table_2p2); 
     1248  
     1249                /* Load PCIE SERDES settings from INI */ 
     1250  
     1251                /* Awake Setting */ 
     1252  
     1253                INIT_INI_ARRAY(&ah->iniPcieSerdes, 
     1254-                               ar9300PciePhy_pll_on_clkreq_disable_L1_2p2, 
     1255-                               ARRAY_SIZE(ar9300PciePhy_pll_on_clkreq_disable_L1_2p2), 
     1256-                               2); 
     1257+                               ar9300PciePhy_pll_on_clkreq_disable_L1_2p2); 
     1258  
     1259                /* Sleep Setting */ 
     1260  
     1261                INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower, 
     1262-                               ar9300PciePhy_pll_on_clkreq_disable_L1_2p2, 
     1263-                               ARRAY_SIZE(ar9300PciePhy_pll_on_clkreq_disable_L1_2p2), 
     1264-                               2); 
     1265+                               ar9300PciePhy_pll_on_clkreq_disable_L1_2p2); 
     1266  
     1267                /* Fast clock modal settings */ 
     1268                INIT_INI_ARRAY(&ah->iniModesFastClock, 
     1269-                               ar9300Modes_fast_clock_2p2, 
     1270-                               ARRAY_SIZE(ar9300Modes_fast_clock_2p2), 
     1271-                               3); 
     1272+                               ar9300Modes_fast_clock_2p2); 
     1273        } 
     1274 } 
     1275  
     1276@@ -507,156 +355,110 @@ static void ar9003_tx_gain_table_mode0(s 
     1277 { 
     1278        if (AR_SREV_9330_12(ah)) 
     1279                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1280-                       ar9331_modes_lowest_ob_db_tx_gain_1p2, 
     1281-                       ARRAY_SIZE(ar9331_modes_lowest_ob_db_tx_gain_1p2), 
     1282-                       5); 
     1283+                       ar9331_modes_lowest_ob_db_tx_gain_1p2); 
     1284        else if (AR_SREV_9330_11(ah)) 
     1285                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1286-                       ar9331_modes_lowest_ob_db_tx_gain_1p1, 
     1287-                       ARRAY_SIZE(ar9331_modes_lowest_ob_db_tx_gain_1p1), 
     1288-                       5); 
     1289+                       ar9331_modes_lowest_ob_db_tx_gain_1p1); 
     1290        else if (AR_SREV_9340(ah)) 
     1291                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1292-                       ar9340Modes_lowest_ob_db_tx_gain_table_1p0, 
     1293-                       ARRAY_SIZE(ar9340Modes_lowest_ob_db_tx_gain_table_1p0), 
     1294-                       5); 
     1295+                       ar9340Modes_lowest_ob_db_tx_gain_table_1p0); 
     1296        else if (AR_SREV_9485_11(ah)) 
     1297                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1298-                       ar9485_modes_lowest_ob_db_tx_gain_1_1, 
     1299-                       ARRAY_SIZE(ar9485_modes_lowest_ob_db_tx_gain_1_1), 
     1300-                       5); 
     1301+                       ar9485_modes_lowest_ob_db_tx_gain_1_1); 
     1302        else if (AR_SREV_9550(ah)) 
     1303                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1304-                       ar955x_1p0_modes_xpa_tx_gain_table, 
     1305-                       ARRAY_SIZE(ar955x_1p0_modes_xpa_tx_gain_table), 
     1306-                       9); 
     1307+                       ar955x_1p0_modes_xpa_tx_gain_table); 
     1308        else if (AR_SREV_9580(ah)) 
     1309                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1310-                       ar9580_1p0_lowest_ob_db_tx_gain_table, 
     1311-                       ARRAY_SIZE(ar9580_1p0_lowest_ob_db_tx_gain_table), 
     1312-                       5); 
     1313+                       ar9580_1p0_lowest_ob_db_tx_gain_table); 
     1314        else if (AR_SREV_9462_20(ah)) 
     1315                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1316-                       ar9462_modes_low_ob_db_tx_gain_table_2p0, 
     1317-                       ARRAY_SIZE(ar9462_modes_low_ob_db_tx_gain_table_2p0), 
     1318-                       5); 
     1319+                       ar9462_modes_low_ob_db_tx_gain_table_2p0); 
     1320        else 
     1321                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1322-                       ar9300Modes_lowest_ob_db_tx_gain_table_2p2, 
     1323-                       ARRAY_SIZE(ar9300Modes_lowest_ob_db_tx_gain_table_2p2), 
     1324-                       5); 
     1325+                       ar9300Modes_lowest_ob_db_tx_gain_table_2p2); 
     1326 } 
     1327  
     1328 static void ar9003_tx_gain_table_mode1(struct ath_hw *ah) 
     1329 { 
     1330        if (AR_SREV_9330_12(ah)) 
     1331                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1332-                       ar9331_modes_high_ob_db_tx_gain_1p2, 
     1333-                       ARRAY_SIZE(ar9331_modes_high_ob_db_tx_gain_1p2), 
     1334-                       5); 
     1335+                       ar9331_modes_high_ob_db_tx_gain_1p2); 
     1336        else if (AR_SREV_9330_11(ah)) 
     1337                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1338-                       ar9331_modes_high_ob_db_tx_gain_1p1, 
     1339-                       ARRAY_SIZE(ar9331_modes_high_ob_db_tx_gain_1p1), 
     1340-                       5); 
     1341+                       ar9331_modes_high_ob_db_tx_gain_1p1); 
     1342        else if (AR_SREV_9340(ah)) 
     1343                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1344-                       ar9340Modes_lowest_ob_db_tx_gain_table_1p0, 
     1345-                       ARRAY_SIZE(ar9340Modes_lowest_ob_db_tx_gain_table_1p0), 
     1346-                       5); 
     1347+                       ar9340Modes_high_ob_db_tx_gain_table_1p0); 
     1348        else if (AR_SREV_9485_11(ah)) 
     1349                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1350-                       ar9485Modes_high_ob_db_tx_gain_1_1, 
     1351-                       ARRAY_SIZE(ar9485Modes_high_ob_db_tx_gain_1_1), 
     1352-                       5); 
     1353+                       ar9485Modes_high_ob_db_tx_gain_1_1); 
     1354        else if (AR_SREV_9580(ah)) 
     1355                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1356-                       ar9580_1p0_high_ob_db_tx_gain_table, 
     1357-                       ARRAY_SIZE(ar9580_1p0_high_ob_db_tx_gain_table), 
     1358-                       5); 
     1359+                       ar9580_1p0_high_ob_db_tx_gain_table); 
     1360        else if (AR_SREV_9550(ah)) 
     1361                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1362-                       ar955x_1p0_modes_no_xpa_tx_gain_table, 
     1363-                       ARRAY_SIZE(ar955x_1p0_modes_no_xpa_tx_gain_table), 
     1364-                       9); 
     1365+                       ar955x_1p0_modes_no_xpa_tx_gain_table); 
     1366        else if (AR_SREV_9462_20(ah)) 
     1367                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1368-                       ar9462_modes_high_ob_db_tx_gain_table_2p0, 
     1369-                       ARRAY_SIZE(ar9462_modes_high_ob_db_tx_gain_table_2p0), 
     1370-                       5); 
     1371+                       ar9462_modes_high_ob_db_tx_gain_table_2p0); 
     1372        else 
     1373                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1374-                       ar9300Modes_high_ob_db_tx_gain_table_2p2, 
     1375-                       ARRAY_SIZE(ar9300Modes_high_ob_db_tx_gain_table_2p2), 
     1376-                       5); 
     1377+                       ar9300Modes_high_ob_db_tx_gain_table_2p2); 
     1378 } 
     1379  
     1380 static void ar9003_tx_gain_table_mode2(struct ath_hw *ah) 
     1381 { 
     1382        if (AR_SREV_9330_12(ah)) 
     1383                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1384-                       ar9331_modes_low_ob_db_tx_gain_1p2, 
     1385-                       ARRAY_SIZE(ar9331_modes_low_ob_db_tx_gain_1p2), 
     1386-                       5); 
     1387+                       ar9331_modes_low_ob_db_tx_gain_1p2); 
     1388        else if (AR_SREV_9330_11(ah)) 
     1389                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1390-                       ar9331_modes_low_ob_db_tx_gain_1p1, 
     1391-                       ARRAY_SIZE(ar9331_modes_low_ob_db_tx_gain_1p1), 
     1392-                       5); 
     1393+                       ar9331_modes_low_ob_db_tx_gain_1p1); 
     1394        else if (AR_SREV_9340(ah)) 
     1395                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1396-                       ar9340Modes_lowest_ob_db_tx_gain_table_1p0, 
     1397-                       ARRAY_SIZE(ar9340Modes_lowest_ob_db_tx_gain_table_1p0), 
     1398-                       5); 
     1399+                       ar9340Modes_low_ob_db_tx_gain_table_1p0); 
     1400        else if (AR_SREV_9485_11(ah)) 
     1401                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1402-                       ar9485Modes_low_ob_db_tx_gain_1_1, 
     1403-                       ARRAY_SIZE(ar9485Modes_low_ob_db_tx_gain_1_1), 
     1404-                       5); 
     1405+                       ar9485Modes_low_ob_db_tx_gain_1_1); 
     1406        else if (AR_SREV_9580(ah)) 
     1407                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1408-                       ar9580_1p0_low_ob_db_tx_gain_table, 
     1409-                       ARRAY_SIZE(ar9580_1p0_low_ob_db_tx_gain_table), 
     1410-                       5); 
     1411+                       ar9580_1p0_low_ob_db_tx_gain_table); 
     1412        else 
     1413                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1414-                       ar9300Modes_low_ob_db_tx_gain_table_2p2, 
     1415-                       ARRAY_SIZE(ar9300Modes_low_ob_db_tx_gain_table_2p2), 
     1416-                       5); 
     1417+                       ar9300Modes_low_ob_db_tx_gain_table_2p2); 
     1418 } 
     1419  
     1420 static void ar9003_tx_gain_table_mode3(struct ath_hw *ah) 
     1421 { 
     1422        if (AR_SREV_9330_12(ah)) 
     1423                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1424-                       ar9331_modes_high_power_tx_gain_1p2, 
     1425-                       ARRAY_SIZE(ar9331_modes_high_power_tx_gain_1p2), 
     1426-                       5); 
     1427+                       ar9331_modes_high_power_tx_gain_1p2); 
     1428        else if (AR_SREV_9330_11(ah)) 
     1429                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1430-                       ar9331_modes_high_power_tx_gain_1p1, 
     1431-                       ARRAY_SIZE(ar9331_modes_high_power_tx_gain_1p1), 
     1432-                       5); 
     1433+                       ar9331_modes_high_power_tx_gain_1p1); 
     1434        else if (AR_SREV_9340(ah)) 
     1435                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1436-                       ar9340Modes_lowest_ob_db_tx_gain_table_1p0, 
     1437-                       ARRAY_SIZE(ar9340Modes_lowest_ob_db_tx_gain_table_1p0), 
     1438-                       5); 
     1439+                       ar9340Modes_high_power_tx_gain_table_1p0); 
     1440        else if (AR_SREV_9485_11(ah)) 
     1441                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1442-                       ar9485Modes_high_power_tx_gain_1_1, 
     1443-                       ARRAY_SIZE(ar9485Modes_high_power_tx_gain_1_1), 
     1444-                       5); 
     1445+                       ar9485Modes_high_power_tx_gain_1_1); 
     1446        else if (AR_SREV_9580(ah)) 
     1447                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1448-                       ar9580_1p0_high_power_tx_gain_table, 
     1449-                       ARRAY_SIZE(ar9580_1p0_high_power_tx_gain_table), 
     1450-                       5); 
     1451+                       ar9580_1p0_high_power_tx_gain_table); 
     1452        else 
     1453                INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1454-                       ar9300Modes_high_power_tx_gain_table_2p2, 
     1455-                       ARRAY_SIZE(ar9300Modes_high_power_tx_gain_table_2p2), 
     1456-                       5); 
     1457+                       ar9300Modes_high_power_tx_gain_table_2p2); 
     1458+} 
     1459+ 
     1460+static void ar9003_tx_gain_table_mode4(struct ath_hw *ah) 
     1461+{ 
     1462+       if (AR_SREV_9340(ah)) 
     1463+               INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1464+                       ar9340Modes_mixed_ob_db_tx_gain_table_1p0); 
     1465+       else if (AR_SREV_9580(ah)) 
     1466+               INIT_INI_ARRAY(&ah->iniModesTxGain, 
     1467+                       ar9580_1p0_mixed_ob_db_tx_gain_table); 
     1468 } 
     1469  
     1470 static void ar9003_tx_gain_table_apply(struct ath_hw *ah) 
     1471@@ -675,6 +477,9 @@ static void ar9003_tx_gain_table_apply(s 
     1472        case 3: 
     1473                ar9003_tx_gain_table_mode3(ah); 
     1474                break; 
     1475+       case 4: 
     1476+               ar9003_tx_gain_table_mode4(ah); 
     1477+               break; 
     1478        } 
     1479 } 
     1480  
     1481@@ -682,104 +487,67 @@ static void ar9003_rx_gain_table_mode0(s 
     1482 { 
     1483        if (AR_SREV_9330_12(ah)) 
     1484                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     1485-                               ar9331_common_rx_gain_1p2, 
     1486-                               ARRAY_SIZE(ar9331_common_rx_gain_1p2), 
     1487-                               2); 
     1488+                               ar9331_common_rx_gain_1p2); 
     1489        else if (AR_SREV_9330_11(ah)) 
     1490                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     1491-                               ar9331_common_rx_gain_1p1, 
     1492-                               ARRAY_SIZE(ar9331_common_rx_gain_1p1), 
     1493-                               2); 
     1494+                               ar9331_common_rx_gain_1p1); 
     1495        else if (AR_SREV_9340(ah)) 
     1496                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     1497-                               ar9340Common_rx_gain_table_1p0, 
     1498-                               ARRAY_SIZE(ar9340Common_rx_gain_table_1p0), 
     1499-                               2); 
     1500+                               ar9340Common_rx_gain_table_1p0); 
     1501        else if (AR_SREV_9485_11(ah)) 
     1502                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     1503-                               ar9485Common_wo_xlna_rx_gain_1_1, 
     1504-                               ARRAY_SIZE(ar9485Common_wo_xlna_rx_gain_1_1), 
     1505-                               2); 
     1506+                               ar9485Common_wo_xlna_rx_gain_1_1); 
     1507        else if (AR_SREV_9550(ah)) { 
     1508                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     1509-                               ar955x_1p0_common_rx_gain_table, 
     1510-                               ARRAY_SIZE(ar955x_1p0_common_rx_gain_table), 
     1511-                               2); 
     1512+                               ar955x_1p0_common_rx_gain_table); 
     1513                INIT_INI_ARRAY(&ah->ini_modes_rx_gain_bounds, 
     1514-                               ar955x_1p0_common_rx_gain_bounds, 
     1515-                               ARRAY_SIZE(ar955x_1p0_common_rx_gain_bounds), 
     1516-                               5); 
     1517+                               ar955x_1p0_common_rx_gain_bounds); 
     1518        } else if (AR_SREV_9580(ah)) 
     1519                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     1520-                               ar9580_1p0_rx_gain_table, 
     1521-                               ARRAY_SIZE(ar9580_1p0_rx_gain_table), 
     1522-                               2); 
     1523+                               ar9580_1p0_rx_gain_table); 
     1524        else if (AR_SREV_9462_20(ah)) 
     1525                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     1526-                               ar9462_common_rx_gain_table_2p0, 
     1527-                               ARRAY_SIZE(ar9462_common_rx_gain_table_2p0), 
     1528-                               2); 
     1529+                               ar9462_common_rx_gain_table_2p0); 
     1530        else 
     1531                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     1532-                               ar9300Common_rx_gain_table_2p2, 
     1533-                               ARRAY_SIZE(ar9300Common_rx_gain_table_2p2), 
     1534-                               2); 
     1535+                               ar9300Common_rx_gain_table_2p2); 
     1536 } 
     1537  
     1538 static void ar9003_rx_gain_table_mode1(struct ath_hw *ah) 
     1539 { 
     1540        if (AR_SREV_9330_12(ah)) 
     1541                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     1542-                       ar9331_common_wo_xlna_rx_gain_1p2, 
     1543-                       ARRAY_SIZE(ar9331_common_wo_xlna_rx_gain_1p2), 
     1544-                       2); 
     1545+                       ar9331_common_wo_xlna_rx_gain_1p2); 
     1546        else if (AR_SREV_9330_11(ah)) 
     1547                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     1548-                       ar9331_common_wo_xlna_rx_gain_1p1, 
     1549-                       ARRAY_SIZE(ar9331_common_wo_xlna_rx_gain_1p1), 
     1550-                       2); 
     1551+                       ar9331_common_wo_xlna_rx_gain_1p1); 
     1552        else if (AR_SREV_9340(ah)) 
     1553                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     1554-                       ar9340Common_wo_xlna_rx_gain_table_1p0, 
     1555-                       ARRAY_SIZE(ar9340Common_wo_xlna_rx_gain_table_1p0), 
     1556-                       2); 
     1557+                       ar9340Common_wo_xlna_rx_gain_table_1p0); 
     1558        else if (AR_SREV_9485_11(ah)) 
     1559                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     1560-                       ar9485Common_wo_xlna_rx_gain_1_1, 
     1561-                       ARRAY_SIZE(ar9485Common_wo_xlna_rx_gain_1_1), 
     1562-                       2); 
     1563+                       ar9485Common_wo_xlna_rx_gain_1_1); 
     1564        else if (AR_SREV_9462_20(ah)) 
     1565                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     1566-                       ar9462_common_wo_xlna_rx_gain_table_2p0, 
     1567-                       ARRAY_SIZE(ar9462_common_wo_xlna_rx_gain_table_2p0), 
     1568-                       2); 
     1569+                       ar9462_common_wo_xlna_rx_gain_table_2p0); 
     1570        else if (AR_SREV_9550(ah)) { 
     1571                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     1572-                       ar955x_1p0_common_wo_xlna_rx_gain_table, 
     1573-                       ARRAY_SIZE(ar955x_1p0_common_wo_xlna_rx_gain_table), 
     1574-                       2); 
     1575+                       ar955x_1p0_common_wo_xlna_rx_gain_table); 
     1576                INIT_INI_ARRAY(&ah->ini_modes_rx_gain_bounds, 
     1577-                       ar955x_1p0_common_wo_xlna_rx_gain_bounds, 
     1578-                       ARRAY_SIZE(ar955x_1p0_common_wo_xlna_rx_gain_bounds), 
     1579-                       5); 
     1580+                       ar955x_1p0_common_wo_xlna_rx_gain_bounds); 
     1581        } else if (AR_SREV_9580(ah)) 
     1582                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     1583-                       ar9580_1p0_wo_xlna_rx_gain_table, 
     1584-                       ARRAY_SIZE(ar9580_1p0_wo_xlna_rx_gain_table), 
     1585-                       2); 
     1586+                       ar9580_1p0_wo_xlna_rx_gain_table); 
     1587        else 
     1588                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     1589-                       ar9300Common_wo_xlna_rx_gain_table_2p2, 
     1590-                       ARRAY_SIZE(ar9300Common_wo_xlna_rx_gain_table_2p2), 
     1591-                       2); 
     1592+                       ar9300Common_wo_xlna_rx_gain_table_2p2); 
     1593 } 
     1594  
     1595 static void ar9003_rx_gain_table_mode2(struct ath_hw *ah) 
     1596 { 
     1597        if (AR_SREV_9462_20(ah)) 
     1598                INIT_INI_ARRAY(&ah->iniModesRxGain, 
     1599-                              ar9462_common_mixed_rx_gain_table_2p0, 
     1600-                              ARRAY_SIZE(ar9462_common_mixed_rx_gain_table_2p0), 2); 
     1601+                              ar9462_common_mixed_rx_gain_table_2p0); 
     1602 } 
     1603  
     1604 static void ar9003_rx_gain_table_apply(struct ath_hw *ah) 
     1605--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c 
     1606+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c 
     1607@@ -117,8 +117,8 @@ static int ar9003_hw_set_channel(struct  
     1608                    ah->is_clk_25mhz) { 
     1609                        u32 chan_frac; 
     1610  
     1611-                       channelSel = (freq * 2) / 75; 
     1612-                       chan_frac = (((freq * 2) % 75) * 0x20000) / 75; 
     1613+                       channelSel = freq / 75; 
     1614+                       chan_frac = ((freq % 75) * 0x20000) / 75; 
     1615                        channelSel = (channelSel << 17) | chan_frac; 
     1616                } else { 
     1617                        channelSel = CHANSEL_5G(freq); 
     1618--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.h 
     1619+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.h 
     1620@@ -633,6 +633,8 @@ 
     1621 #define AR_PHY_65NM_CH0_BIAS2       0x160c4 
     1622 #define AR_PHY_65NM_CH0_BIAS4       0x160cc 
     1623 #define AR_PHY_65NM_CH0_RXTX4       0x1610c 
     1624+#define AR_PHY_65NM_CH1_RXTX4       0x1650c 
     1625+#define AR_PHY_65NM_CH2_RXTX4       0x1690c 
     1626  
     1627 #define AR_CH0_TOP     (AR_SREV_9300(ah) ? 0x16288 : \ 
     1628                                ((AR_SREV_9462(ah) ? 0x1628c : 0x16280))) 
     1629@@ -876,6 +878,9 @@ 
     1630 #define AR_PHY_65NM_CH0_RXTX4_THERM_ON          0x10000000 
     1631 #define AR_PHY_65NM_CH0_RXTX4_THERM_ON_S        28 
     1632  
     1633+#define AR_PHY_65NM_RXTX4_XLNA_BIAS            0xC0000000 
     1634+#define AR_PHY_65NM_RXTX4_XLNA_BIAS_S          30 
     1635+ 
     1636 /* 
     1637  * Channel 1 Register Map 
     1638  */ 
    11639--- a/drivers/net/wireless/ath/ath9k/ath9k.h 
    21640+++ b/drivers/net/wireless/ath/ath9k/ath9k.h 
    3 @@ -360,7 +360,7 @@ void ath_tx_aggr_sleep(struct ieee80211_ 
     1641@@ -297,6 +297,8 @@ struct ath_tx { 
     1642        struct ath_txq txq[ATH9K_NUM_TX_QUEUES]; 
     1643        struct ath_descdma txdma; 
     1644        struct ath_txq *txq_map[WME_NUM_AC]; 
     1645+       u32 txq_max_pending[WME_NUM_AC]; 
     1646+       u16 max_aggr_framelen[WME_NUM_AC][4][32]; 
     1647 }; 
     1648  
     1649 struct ath_rx_edma { 
     1650@@ -341,6 +343,7 @@ int ath_tx_init(struct ath_softc *sc, in 
     1651 void ath_tx_cleanup(struct ath_softc *sc); 
     1652 int ath_txq_update(struct ath_softc *sc, int qnum, 
     1653                   struct ath9k_tx_queue_info *q); 
     1654+void ath_update_max_aggr_framelen(struct ath_softc *sc, int queue, int txop); 
     1655 int ath_tx_start(struct ieee80211_hw *hw, struct sk_buff *skb, 
     1656                 struct ath_tx_control *txctl); 
     1657 void ath_tx_tasklet(struct ath_softc *sc); 
     1658@@ -360,7 +363,7 @@ void ath_tx_aggr_sleep(struct ieee80211_ 
    41659  
    51660 struct ath_vif { 
     
    101665        struct ath_buf *av_bcbuf; 
    111666 }; 
    12 @@ -386,6 +386,7 @@ struct ath_beacon_config { 
     1667@@ -386,6 +389,7 @@ struct ath_beacon_config { 
    131668        u16 dtim_period; 
    141669        u16 bmiss_timeout; 
     
    181673  
    191674 struct ath_beacon { 
    20 @@ -397,7 +398,6 @@ struct ath_beacon { 
     1675@@ -397,7 +401,6 @@ struct ath_beacon { 
    211676  
    221677        u32 beaconq; 
     
    261681        struct ieee80211_vif *bslot[ATH_BCBUF]; 
    271682        int slottime; 
    28 @@ -411,12 +411,14 @@ struct ath_beacon { 
     1683@@ -411,12 +414,14 @@ struct ath_beacon { 
    291684        bool tx_last; 
    301685 }; 
     
    471702  
    481703 /*******************/ 
    49 @@ -442,9 +444,12 @@ void ath_rx_poll(unsigned long data); 
     1704@@ -442,9 +447,12 @@ void ath_rx_poll(unsigned long data); 
    501705 void ath_start_rx_poll(struct ath_softc *sc, u8 nbeacon); 
    511706 void ath_paprd_calibrate(struct work_struct *work); 
     
    611716 /**********/ 
    621717 /* BTCOEX */ 
    63 @@ -613,7 +618,6 @@ enum sc_op_flags { 
     1718@@ -619,7 +627,6 @@ enum sc_op_flags { 
    641719        SC_OP_INVALID, 
    651720        SC_OP_BEACONS, 
     
    8242479-       ath9k_ps_restore(sc); 
    8252480 } 
     2481--- a/drivers/net/wireless/ath/ath9k/calib.h 
     2482+++ b/drivers/net/wireless/ath/ath9k/calib.h 
     2483@@ -30,10 +30,10 @@ struct ar5416IniArray { 
     2484        u32 ia_columns; 
     2485 }; 
     2486  
     2487-#define INIT_INI_ARRAY(iniarray, array, rows, columns) do {    \ 
     2488+#define INIT_INI_ARRAY(iniarray, array) do {   \ 
     2489                (iniarray)->ia_array = (u32 *)(array);          \ 
     2490-               (iniarray)->ia_rows = (rows);                   \ 
     2491-               (iniarray)->ia_columns = (columns);             \ 
     2492+               (iniarray)->ia_rows = ARRAY_SIZE(array);        \ 
     2493+               (iniarray)->ia_columns = ARRAY_SIZE(array[0]);  \ 
     2494        } while (0) 
     2495  
     2496 #define INI_RA(iniarray, row, column) \ 
    8262497--- a/drivers/net/wireless/ath/ath9k/debug.c 
    8272498+++ b/drivers/net/wireless/ath/ath9k/debug.c 
     
    8392510  
    8402511        return count; 
     2512@@ -1556,6 +1555,14 @@ int ath9k_init_debug(struct ath_hw *ah) 
     2513                            &fops_interrupt); 
     2514        debugfs_create_file("xmit", S_IRUSR, sc->debug.debugfs_phy, sc, 
     2515                            &fops_xmit); 
     2516+       debugfs_create_u32("qlen_bk", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, 
     2517+                          &sc->tx.txq_max_pending[WME_AC_BK]); 
     2518+       debugfs_create_u32("qlen_be", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, 
     2519+                          &sc->tx.txq_max_pending[WME_AC_BE]); 
     2520+       debugfs_create_u32("qlen_vi", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, 
     2521+                          &sc->tx.txq_max_pending[WME_AC_VI]); 
     2522+       debugfs_create_u32("qlen_vo", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, 
     2523+                          &sc->tx.txq_max_pending[WME_AC_VO]); 
     2524        debugfs_create_file("stations", S_IRUSR, sc->debug.debugfs_phy, sc, 
     2525                            &fops_stations); 
     2526        debugfs_create_file("misc", S_IRUSR, sc->debug.debugfs_phy, sc, 
    8412527--- a/drivers/net/wireless/ath/ath9k/debug.h 
    8422528+++ b/drivers/net/wireless/ath/ath9k/debug.h 
     
    8792565        struct ath_interrupt_stats istats; 
    8802566        struct ath_tx_stats txstats[ATH9K_NUM_TX_QUEUES]; 
     2567--- a/drivers/net/wireless/ath/ath9k/eeprom.h 
     2568+++ b/drivers/net/wireless/ath/ath9k/eeprom.h 
     2569@@ -241,16 +241,12 @@ enum eeprom_param { 
     2570        EEP_TEMPSENSE_SLOPE, 
     2571        EEP_TEMPSENSE_SLOPE_PAL_ON, 
     2572        EEP_PWR_TABLE_OFFSET, 
     2573-       EEP_DRIVE_STRENGTH, 
     2574-       EEP_INTERNAL_REGULATOR, 
     2575-       EEP_SWREG, 
     2576        EEP_PAPRD, 
     2577        EEP_MODAL_VER, 
     2578        EEP_ANT_DIV_CTL1, 
     2579        EEP_CHAIN_MASK_REDUCE, 
     2580        EEP_ANTENNA_GAIN_2G, 
     2581        EEP_ANTENNA_GAIN_5G, 
     2582-       EEP_QUICK_DROP 
     2583 }; 
     2584  
     2585 enum ar5416_rates { 
    8812586--- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c 
    8822587+++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c 
     
    8902595        } 
    8912596  
     2597@@ -1351,7 +1351,7 @@ static int ath9k_htc_conf_tx(struct ieee 
     2598        qi.tqi_aifs = params->aifs; 
     2599        qi.tqi_cwmin = params->cw_min; 
     2600        qi.tqi_cwmax = params->cw_max; 
     2601-       qi.tqi_burstTime = params->txop; 
     2602+       qi.tqi_burstTime = params->txop * 32; 
     2603  
     2604        qnum = get_hw_qnum(queue, priv->hwq_map); 
     2605  
    8922606--- a/drivers/net/wireless/ath/ath9k/hw.c 
    8932607+++ b/drivers/net/wireless/ath/ath9k/hw.c 
    894 @@ -2908,9 +2908,9 @@ void ath9k_hw_reset_tsf(struct ath_hw *a 
     2608@@ -671,10 +671,6 @@ static int __ath9k_hw_init(struct ath_hw 
     2609        if (!AR_SREV_9300_20_OR_LATER(ah)) 
     2610                ah->ani_function &= ~ATH9K_ANI_MRC_CCK; 
     2611  
     2612-       /* disable ANI for 9340 */ 
     2613-       if (AR_SREV_9340(ah)) 
     2614-               ah->config.enable_ani = false; 
     2615- 
     2616        ath9k_hw_init_mode_regs(ah); 
     2617  
     2618        if (!ah->is_pciexpress) 
     2619@@ -2916,9 +2912,9 @@ void ath9k_hw_reset_tsf(struct ath_hw *a 
    8952620 } 
    8962621 EXPORT_SYMBOL(ath9k_hw_reset_tsf); 
     
    9062631--- a/drivers/net/wireless/ath/ath9k/hw.h 
    9072632+++ b/drivers/net/wireless/ath/ath9k/hw.h 
    908 @@ -943,7 +943,7 @@ u32 ath9k_hw_gettsf32(struct ath_hw *ah) 
     2633@@ -994,7 +994,7 @@ u32 ath9k_hw_gettsf32(struct ath_hw *ah) 
    9092634 u64 ath9k_hw_gettsf64(struct ath_hw *ah); 
    9102635 void ath9k_hw_settsf64(struct ath_hw *ah, u64 tsf64); 
     
    9172642--- a/drivers/net/wireless/ath/ath9k/init.c 
    9182643+++ b/drivers/net/wireless/ath/ath9k/init.c 
    919 @@ -560,7 +560,7 @@ static int ath9k_init_softc(u16 devid, s 
     2644@@ -436,6 +436,7 @@ static int ath9k_init_queues(struct ath_ 
     2645        for (i = 0; i < WME_NUM_AC; i++) { 
     2646                sc->tx.txq_map[i] = ath_txq_setup(sc, ATH9K_TX_QUEUE_DATA, i); 
     2647                sc->tx.txq_map[i]->mac80211_qnum = i; 
     2648+               sc->tx.txq_max_pending[i] = ATH_MAX_QDEPTH; 
     2649        } 
     2650        return 0; 
     2651 } 
     2652@@ -560,7 +561,7 @@ static int ath9k_init_softc(u16 devid, s 
    9202653        spin_lock_init(&sc->debug.samp_lock); 
    9212654 #endif 
     
    11322865        } 
    11332866  
    1134 @@ -575,6 +566,15 @@ static int ath_reset(struct ath_softc *s 
     2867@@ -586,6 +577,15 @@ static int ath_reset(struct ath_softc *s 
    11352868        return r; 
    11362869 } 
     
    11482881 { 
    11492882        struct ath_softc *sc = container_of(work, struct ath_softc, hw_reset_work); 
    1150 @@ -841,16 +841,6 @@ bool ath9k_uses_beacons(int type) 
     2883@@ -852,16 +852,6 @@ bool ath9k_uses_beacons(int type) 
    11512884        } 
    11522885 } 
     
    11652898 { 
    11662899        struct ath9k_vif_iter_data *iter_data = data; 
    1167 @@ -918,18 +908,14 @@ static void ath9k_calculate_summary_stat 
     2900@@ -929,18 +919,14 @@ static void ath9k_calculate_summary_stat 
    11682901  
    11692902        ath9k_calculate_iter_data(hw, vif, &iter_data); 
     
    11862919                if (iter_data.nmeshes) 
    11872920                        ah->opmode = NL80211_IFTYPE_MESH_POINT; 
    1188 @@ -941,45 +927,14 @@ static void ath9k_calculate_summary_stat 
     2921@@ -952,45 +938,14 @@ static void ath9k_calculate_summary_stat 
    11892922                        ah->opmode = NL80211_IFTYPE_STATION; 
    11902923        } 
     
    12342967  
    12352968 static int ath9k_add_interface(struct ieee80211_hw *hw, 
    1236 @@ -1021,7 +976,10 @@ static int ath9k_add_interface(struct ie 
     2969@@ -1032,7 +987,10 @@ static int ath9k_add_interface(struct ie 
    12372970  
    12382971        sc->nvifs++; 
     
    12462979        mutex_unlock(&sc->mutex); 
    12472980        ath9k_ps_restore(sc); 
    1248 @@ -1038,6 +996,7 @@ static int ath9k_change_interface(struct 
     2981@@ -1049,6 +1007,7 @@ static int ath9k_change_interface(struct 
    12492982        int ret = 0; 
    12502983  
     
    12542987        ath9k_ps_wakeup(sc); 
    12552988  
    1256 @@ -1050,15 +1009,16 @@ static int ath9k_change_interface(struct 
     2989@@ -1061,15 +1020,16 @@ static int ath9k_change_interface(struct 
    12572990                } 
    12582991        } 
     
    12753008        ath9k_ps_restore(sc); 
    12763009        mutex_unlock(&sc->mutex); 
    1277 @@ -1078,9 +1038,8 @@ static void ath9k_remove_interface(struc 
     3010@@ -1089,9 +1049,8 @@ static void ath9k_remove_interface(struc 
    12783011  
    12793012        sc->nvifs--; 
     
    12863019        ath9k_calculate_summary_state(hw, NULL); 
    12873020  
    1288 @@ -1388,10 +1347,6 @@ static int ath9k_conf_tx(struct ieee8021 
     3021@@ -1388,21 +1347,18 @@ static int ath9k_conf_tx(struct ieee8021 
     3022        qi.tqi_aifs = params->aifs; 
     3023        qi.tqi_cwmin = params->cw_min; 
     3024        qi.tqi_cwmax = params->cw_max; 
     3025-       qi.tqi_burstTime = params->txop; 
     3026+       qi.tqi_burstTime = params->txop * 32; 
     3027  
     3028        ath_dbg(common, CONFIG, 
     3029                "Configure tx [queue/halq] [%d/%d], aifs: %d, cw_min: %d, cw_max: %d, txop: %d\n", 
     3030                queue, txq->axq_qnum, params->aifs, params->cw_min, 
     3031                params->cw_max, params->txop); 
     3032  
     3033+       ath_update_max_aggr_framelen(sc, queue, qi.tqi_burstTime); 
     3034        ret = ath_txq_update(sc, txq->axq_qnum, &qi); 
    12893035        if (ret) 
    12903036                ath_err(common, "TXQ Update failed\n"); 
     
    12973043        ath9k_ps_restore(sc); 
    12983044  
    1299 @@ -1460,85 +1415,36 @@ static int ath9k_set_key(struct ieee8021 
     3045@@ -1471,85 +1427,36 @@ static int ath9k_set_key(struct ieee8021 
    13003046  
    13013047        return ret; 
     
    13943140 } 
    13953141  
    1396 @@ -1547,6 +1453,11 @@ static void ath9k_bss_info_changed(struc 
     3142@@ -1558,6 +1465,11 @@ static void ath9k_bss_info_changed(struc 
    13973143                                   struct ieee80211_bss_conf *bss_conf, 
    13983144                                   u32 changed) 
     
    14063152        struct ath_hw *ah = sc->sc_ah; 
    14073153        struct ath_common *common = ath9k_hw_common(ah); 
    1408 @@ -1557,53 +1468,43 @@ static void ath9k_bss_info_changed(struc 
     3154@@ -1568,53 +1480,43 @@ static void ath9k_bss_info_changed(struc 
    14093155        mutex_lock(&sc->mutex); 
    14103156  
     
    14883234  
    14893235        if (changed & BSS_CHANGED_ERP_SLOT) { 
    1490 @@ -1625,8 +1526,13 @@ static void ath9k_bss_info_changed(struc 
     3236@@ -1636,8 +1538,13 @@ static void ath9k_bss_info_changed(struc 
    14913237                } 
    14923238        } 
     
    15023248  
    15033249 static u64 ath9k_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif) 
    1504 @@ -1855,10 +1761,11 @@ static int ath9k_tx_last_beacon(struct i 
     3250@@ -1866,10 +1773,11 @@ static int ath9k_tx_last_beacon(struct i 
    15053251        if (!vif) 
    15063252                return 0; 
     
    15163262                tasklet_disable(&sc->bcon_tasklet); 
    15173263  
     3264@@ -1923,12 +1831,29 @@ static u32 fill_chainmask(u32 cap, u32 n 
     3265        return filled; 
     3266 } 
     3267  
     3268+static bool validate_antenna_mask(struct ath_hw *ah, u32 val) 
     3269+{ 
     3270+       switch (val & 0x7) { 
     3271+       case 0x1: 
     3272+       case 0x3: 
     3273+       case 0x7: 
     3274+               return true; 
     3275+       case 0x2: 
     3276+               return (ah->caps.rx_chainmask == 1); 
     3277+       default: 
     3278+               return false; 
     3279+       } 
     3280+} 
     3281+ 
     3282 static int ath9k_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant) 
     3283 { 
     3284        struct ath_softc *sc = hw->priv; 
     3285        struct ath_hw *ah = sc->sc_ah; 
     3286  
     3287-       if (!rx_ant || !tx_ant) 
     3288+       if (ah->caps.rx_chainmask != 1) 
     3289+               rx_ant |= tx_ant; 
     3290+ 
     3291+       if (!validate_antenna_mask(ah, rx_ant) || !tx_ant) 
     3292                return -EINVAL; 
     3293  
     3294        sc->ant_rx = rx_ant; 
    15183295--- a/drivers/net/wireless/ath/ath9k/mci.c 
    15193296+++ b/drivers/net/wireless/ath/ath9k/mci.c 
     
    15403317--- a/drivers/net/wireless/ath/ath9k/xmit.c 
    15413318+++ b/drivers/net/wireless/ath/ath9k/xmit.c 
    1542 @@ -614,10 +614,8 @@ static void ath_tx_complete_aggr(struct  
     3319@@ -29,6 +29,8 @@ 
     3320 #define HT_LTF(_ns)             (4 * (_ns)) 
     3321 #define SYMBOL_TIME(_ns)        ((_ns) << 2) /* ns * 4 us */ 
     3322 #define SYMBOL_TIME_HALFGI(_ns) (((_ns) * 18 + 4) / 5)  /* ns * 3.6 us */ 
     3323+#define TIME_SYMBOLS(t)         ((t) >> 2) 
     3324+#define TIME_SYMBOLS_HALFGI(t)  (((t) * 5 - 4) / 18) 
     3325 #define NUM_SYMBOLS_PER_USEC(_usec) (_usec >> 2) 
     3326 #define NUM_SYMBOLS_PER_USEC_HALFGI(_usec) (((_usec*5)-4)/18) 
     3327  
     3328@@ -74,33 +76,6 @@ enum { 
     3329        MCS_HT40_SGI, 
     3330 }; 
     3331  
     3332-static int ath_max_4ms_framelen[4][32] = { 
     3333-       [MCS_HT20] = { 
     3334-               3212,  6432,  9648,  12864,  19300,  25736,  28952,  32172, 
     3335-               6424,  12852, 19280, 25708,  38568,  51424,  57852,  64280, 
     3336-               9628,  19260, 28896, 38528,  57792,  65532,  65532,  65532, 
     3337-               12828, 25656, 38488, 51320,  65532,  65532,  65532,  65532, 
     3338-       }, 
     3339-       [MCS_HT20_SGI] = { 
     3340-               3572,  7144,  10720,  14296,  21444,  28596,  32172,  35744, 
     3341-               7140,  14284, 21428,  28568,  42856,  57144,  64288,  65532, 
     3342-               10700, 21408, 32112,  42816,  64228,  65532,  65532,  65532, 
     3343-               14256, 28516, 42780,  57040,  65532,  65532,  65532,  65532, 
     3344-       }, 
     3345-       [MCS_HT40] = { 
     3346-               6680,  13360,  20044,  26724,  40092,  53456,  60140,  65532, 
     3347-               13348, 26700,  40052,  53400,  65532,  65532,  65532,  65532, 
     3348-               20004, 40008,  60016,  65532,  65532,  65532,  65532,  65532, 
     3349-               26644, 53292,  65532,  65532,  65532,  65532,  65532,  65532, 
     3350-       }, 
     3351-       [MCS_HT40_SGI] = { 
     3352-               7420,  14844,  22272,  29696,  44544,  59396,  65532,  65532, 
     3353-               14832, 29668,  44504,  59340,  65532,  65532,  65532,  65532, 
     3354-               22232, 44464,  65532,  65532,  65532,  65532,  65532,  65532, 
     3355-               29616, 59232,  65532,  65532,  65532,  65532,  65532,  65532, 
     3356-       } 
     3357-}; 
     3358- 
     3359 /*********************/ 
     3360 /* Aggregation logic */ 
     3361 /*********************/ 
     3362@@ -614,10 +589,8 @@ static void ath_tx_complete_aggr(struct  
    15433363  
    15443364        rcu_read_unlock(); 
     
    15533373  
    15543374 static bool ath_lookup_legacy(struct ath_buf *bf) 
    1555 @@ -1586,7 +1584,8 @@ void ath_txq_schedule(struct ath_softc * 
     3375@@ -650,6 +623,7 @@ static u32 ath_lookup_rate(struct ath_so 
     3376        struct ieee80211_tx_rate *rates; 
     3377        u32 max_4ms_framelen, frmlen; 
     3378        u16 aggr_limit, bt_aggr_limit, legacy = 0; 
     3379+       int q = tid->ac->txq->mac80211_qnum; 
     3380        int i; 
     3381  
     3382        skb = bf->bf_mpdu; 
     3383@@ -658,8 +632,7 @@ static u32 ath_lookup_rate(struct ath_so 
     3384  
     3385        /* 
     3386         * Find the lowest frame length among the rate series that will have a 
     3387-        * 4ms transmit duration. 
     3388-        * TODO - TXOP limit needs to be considered. 
     3389+        * 4ms (or TXOP limited) transmit duration. 
     3390         */ 
     3391        max_4ms_framelen = ATH_AMPDU_LIMIT_MAX; 
     3392  
     3393@@ -682,7 +655,7 @@ static u32 ath_lookup_rate(struct ath_so 
     3394                if (rates[i].flags & IEEE80211_TX_RC_SHORT_GI) 
     3395                        modeidx++; 
     3396  
     3397-               frmlen = ath_max_4ms_framelen[modeidx][rates[i].idx]; 
     3398+               frmlen = sc->tx.max_aggr_framelen[q][modeidx][rates[i].idx]; 
     3399                max_4ms_framelen = min(max_4ms_framelen, frmlen); 
     3400        } 
     3401  
     3402@@ -929,6 +902,44 @@ static u32 ath_pkt_duration(struct ath_s 
     3403        return duration; 
     3404 } 
     3405  
     3406+static int ath_max_framelen(int usec, int mcs, bool ht40, bool sgi) 
     3407+{ 
     3408+       int streams = HT_RC_2_STREAMS(mcs); 
     3409+       int symbols, bits; 
     3410+       int bytes = 0; 
     3411+ 
     3412+       symbols = sgi ? TIME_SYMBOLS_HALFGI(usec) : TIME_SYMBOLS(usec); 
     3413+       bits = symbols * bits_per_symbol[mcs % 8][ht40] * streams; 
     3414+       bits -= OFDM_PLCP_BITS; 
     3415+       bytes = bits / 8; 
     3416+       bytes -= L_STF + L_LTF + L_SIG + HT_SIG + HT_STF + HT_LTF(streams); 
     3417+       if (bytes > 65532) 
     3418+               bytes = 65532; 
     3419+ 
     3420+       return bytes; 
     3421+} 
     3422+ 
     3423+void ath_update_max_aggr_framelen(struct ath_softc *sc, int queue, int txop) 
     3424+{ 
     3425+       u16 *cur_ht20, *cur_ht20_sgi, *cur_ht40, *cur_ht40_sgi; 
     3426+       int mcs; 
     3427+ 
     3428+       /* 4ms is the default (and maximum) duration */ 
     3429+       if (!txop || txop > 4096) 
     3430+               txop = 4096; 
     3431+ 
     3432+       cur_ht20 = sc->tx.max_aggr_framelen[queue][MCS_HT20]; 
     3433+       cur_ht20_sgi = sc->tx.max_aggr_framelen[queue][MCS_HT20_SGI]; 
     3434+       cur_ht40 = sc->tx.max_aggr_framelen[queue][MCS_HT40]; 
     3435+       cur_ht40_sgi = sc->tx.max_aggr_framelen[queue][MCS_HT40_SGI]; 
     3436+       for (mcs = 0; mcs < 32; mcs++) { 
     3437+               cur_ht20[mcs] = ath_max_framelen(txop, mcs, false, false); 
     3438+               cur_ht20_sgi[mcs] = ath_max_framelen(txop, mcs, false, true); 
     3439+               cur_ht40[mcs] = ath_max_framelen(txop, mcs, true, false); 
     3440+               cur_ht40_sgi[mcs] = ath_max_framelen(txop, mcs, true, true); 
     3441+       } 
     3442+} 
     3443+ 
     3444 static void ath_buf_set_rate(struct ath_softc *sc, struct ath_buf *bf, 
     3445                             struct ath_tx_info *info, int len) 
     3446 { 
     3447@@ -1586,7 +1597,8 @@ void ath_txq_schedule(struct ath_softc * 
    15563448        struct ath_atx_ac *ac, *ac_tmp, *last_ac; 
    15573449        struct ath_atx_tid *tid, *last_tid; 
     
    15633455                return; 
    15643456  
    1565 @@ -2191,7 +2190,7 @@ static void ath_tx_processq(struct ath_s 
     3457@@ -1988,7 +2000,8 @@ int ath_tx_start(struct ieee80211_hw *hw 
     3458  
     3459        ath_txq_lock(sc, txq); 
     3460        if (txq == sc->tx.txq_map[q] && 
     3461-           ++txq->pending_frames > ATH_MAX_QDEPTH && !txq->stopped) { 
     3462+           ++txq->pending_frames > sc->tx.txq_max_pending[q] && 
     3463+           !txq->stopped) { 
     3464                ieee80211_stop_queue(sc->hw, q); 
     3465                txq->stopped = true; 
     3466        } 
     3467@@ -2047,7 +2060,8 @@ static void ath_tx_complete(struct ath_s 
     3468                if (WARN_ON(--txq->pending_frames < 0)) 
     3469                        txq->pending_frames = 0; 
     3470  
     3471-               if (txq->stopped && txq->pending_frames < ATH_MAX_QDEPTH) { 
     3472+               if (txq->stopped && 
     3473+                   txq->pending_frames < sc->tx.txq_max_pending[q]) { 
     3474                        ieee80211_wake_queue(sc->hw, q); 
     3475                        txq->stopped = false; 
     3476                } 
     3477@@ -2191,7 +2205,7 @@ static void ath_tx_processq(struct ath_s 
    15663478  
    15673479        ath_txq_lock(sc, txq); 
     
    15723484  
    15733485                if (list_empty(&txq->axq_q)) { 
    1574 @@ -2274,7 +2273,7 @@ void ath_tx_edma_tasklet(struct ath_soft 
     3486@@ -2274,7 +2288,7 @@ void ath_tx_edma_tasklet(struct ath_soft 
    15753487        int status; 
    15763488  
     
    15813493  
    15823494                status = ath9k_hw_txprocdesc(ah, NULL, (void *)&ts); 
    1583 --- a/include/net/mac80211.h 
    1584 +++ b/include/net/mac80211.h 
    1585 @@ -3596,22 +3596,6 @@ void ieee80211_request_smps(struct ieee8 
    1586                             enum ieee80211_smps_mode smps_mode); 
    1587   
    1588  /** 
    1589 - * ieee80211_key_removed - disable hw acceleration for key 
    1590 - * @key_conf: The key hw acceleration should be disabled for 
    1591 - * 
    1592 - * This allows drivers to indicate that the given key has been 
    1593 - * removed from hardware acceleration, due to a new key that 
    1594 - * was added. Don't use this if the key can continue to be used 
    1595 - * for TX, if the key restriction is on RX only it is permitted 
    1596 - * to keep the key for TX only and not call this function. 
    1597 - * 
    1598 - * Due to locking constraints, it may only be called during 
    1599 - * @set_key. This function must be allowed to sleep, and the 
    1600 - * key it tries to disable may still be used until it returns. 
    1601 - */ 
    1602 -void ieee80211_key_removed(struct ieee80211_key_conf *key_conf); 
    1603 - 
    1604 -/** 
    1605   * ieee80211_ready_on_channel - notification of remain-on-channel start 
    1606   * @hw: pointer as obtained from ieee80211_alloc_hw() 
     3495--- a/drivers/net/wireless/b43/xmit.c 
     3496+++ b/drivers/net/wireless/b43/xmit.c 
     3497@@ -663,7 +663,7 @@ void b43_rx(struct b43_wldev *dev, struc 
     3498        u32 uninitialized_var(macstat); 
     3499        u16 chanid; 
     3500        u16 phytype; 
     3501-       int padding; 
     3502+       int padding, rate_idx; 
     3503  
     3504        memset(&status, 0, sizeof(status)); 
     3505  
     3506@@ -766,16 +766,17 @@ void b43_rx(struct b43_wldev *dev, struc 
     3507        } 
     3508  
     3509        if (phystat0 & B43_RX_PHYST0_OFDM) 
     3510-               status.rate_idx = b43_plcp_get_bitrate_idx_ofdm(plcp, 
     3511+               rate_idx = b43_plcp_get_bitrate_idx_ofdm(plcp, 
     3512                                                phytype == B43_PHYTYPE_A); 
     3513        else 
     3514-               status.rate_idx = b43_plcp_get_bitrate_idx_cck(plcp); 
     3515-       if (unlikely(status.rate_idx == -1)) { 
     3516+               rate_idx = b43_plcp_get_bitrate_idx_cck(plcp); 
     3517+       if (unlikely(rate_idx == -1)) { 
     3518                /* PLCP seems to be corrupted. 
     3519                 * Drop the frame, if we are not interested in corrupted frames. */ 
     3520                if (!(dev->wl->filter_flags & FIF_PLCPFAIL)) 
     3521                        goto drop; 
     3522        } 
     3523+       status.rate_idx = rate_idx; 
     3524        status.antenna = !!(phystat0 & B43_RX_PHYST0_ANT); 
     3525  
     3526        /* 
     3527--- a/drivers/net/wireless/libertas/cfg.c 
     3528+++ b/drivers/net/wireless/libertas/cfg.c 
     3529@@ -2182,13 +2182,15 @@ int lbs_reg_notifier(struct wiphy *wiphy 
     3530                struct regulatory_request *request) 
     3531 { 
     3532        struct lbs_private *priv = wiphy_priv(wiphy); 
     3533-       int ret; 
     3534+       int ret = 0; 
     3535  
     3536        lbs_deb_enter_args(LBS_DEB_CFG80211, "cfg80211 regulatory domain " 
     3537                        "callback for domain %c%c\n", request->alpha2[0], 
     3538                        request->alpha2[1]); 
     3539  
     3540-       ret = lbs_set_11d_domain_info(priv, request, wiphy->bands); 
     3541+       memcpy(priv->country_code, request->alpha2, sizeof(request->alpha2)); 
     3542+       if (lbs_iface_active(priv)) 
     3543+               ret = lbs_set_11d_domain_info(priv); 
     3544  
     3545        lbs_deb_leave(LBS_DEB_CFG80211); 
     3546        return ret; 
     3547--- a/drivers/net/wireless/libertas/cmd.c 
     3548+++ b/drivers/net/wireless/libertas/cmd.c 
     3549@@ -733,15 +733,13 @@ int lbs_get_rssi(struct lbs_private *pri 
     3550  *  to the firmware 
     3551  * 
     3552  *  @priv:     pointer to &struct lbs_private 
     3553- *  @request:  cfg80211 regulatory request structure 
     3554- *  @bands:    the device's supported bands and channels 
     3555  * 
     3556  *  returns:   0 on success, error code on failure 
     3557 */ 
     3558-int lbs_set_11d_domain_info(struct lbs_private *priv, 
     3559-                           struct regulatory_request *request, 
     3560-                           struct ieee80211_supported_band **bands) 
     3561+int lbs_set_11d_domain_info(struct lbs_private *priv) 
     3562 { 
     3563+       struct wiphy *wiphy = priv->wdev->wiphy; 
     3564+       struct ieee80211_supported_band **bands = wiphy->bands; 
     3565        struct cmd_ds_802_11d_domain_info cmd; 
     3566        struct mrvl_ie_domain_param_set *domain = &cmd.domain; 
     3567        struct ieee80211_country_ie_triplet *t; 
     3568@@ -752,21 +750,23 @@ int lbs_set_11d_domain_info(struct lbs_p 
     3569        u8 first_channel = 0, next_chan = 0, max_pwr = 0; 
     3570        u8 i, flag = 0; 
     3571        size_t triplet_size; 
     3572-       int ret; 
     3573+       int ret = 0; 
     3574  
     3575        lbs_deb_enter(LBS_DEB_11D); 
     3576+       if (!priv->country_code[0]) 
     3577+               goto out; 
     3578  
     3579        memset(&cmd, 0, sizeof(cmd)); 
     3580        cmd.action = cpu_to_le16(CMD_ACT_SET); 
     3581  
     3582        lbs_deb_11d("Setting country code '%c%c'\n", 
     3583-                   request->alpha2[0], request->alpha2[1]); 
     3584+                   priv->country_code[0], priv->country_code[1]); 
     3585  
     3586        domain->header.type = cpu_to_le16(TLV_TYPE_DOMAIN); 
     3587  
     3588        /* Set country code */ 
     3589-       domain->country_code[0] = request->alpha2[0]; 
     3590-       domain->country_code[1] = request->alpha2[1]; 
     3591+       domain->country_code[0] = priv->country_code[0]; 
     3592+       domain->country_code[1] = priv->country_code[1]; 
     3593        domain->country_code[2] = ' '; 
     3594  
     3595        /* Now set up the channel triplets; firmware is somewhat picky here 
     3596@@ -848,6 +848,7 @@ int lbs_set_11d_domain_info(struct lbs_p 
     3597  
     3598        ret = lbs_cmd_with_response(priv, CMD_802_11D_DOMAIN_INFO, &cmd); 
     3599  
     3600+out: 
     3601        lbs_deb_leave_args(LBS_DEB_11D, "ret %d", ret); 
     3602        return ret; 
     3603 } 
     3604@@ -1019,9 +1020,9 @@ static void lbs_submit_command(struct lb 
     3605        if (ret) { 
     3606                netdev_info(priv->dev, "DNLD_CMD: hw_host_to_card failed: %d\n", 
     3607                            ret); 
     3608-               /* Let the timer kick in and retry, and potentially reset 
     3609-                  the whole thing if the condition persists */ 
     3610-               timeo = HZ/4; 
     3611+               /* Reset dnld state machine, report failure */ 
     3612+               priv->dnld_sent = DNLD_RES_RECEIVED; 
     3613+               lbs_complete_command(priv, cmdnode, ret); 
     3614        } 
     3615  
     3616        if (command == CMD_802_11_DEEP_SLEEP) { 
     3617--- a/drivers/net/wireless/libertas/cmd.h 
     3618+++ b/drivers/net/wireless/libertas/cmd.h 
     3619@@ -128,9 +128,7 @@ int lbs_set_monitor_mode(struct lbs_priv 
     3620  
     3621 int lbs_get_rssi(struct lbs_private *priv, s8 *snr, s8 *nf); 
     3622  
     3623-int lbs_set_11d_domain_info(struct lbs_private *priv, 
     3624-                           struct regulatory_request *request, 
     3625-                           struct ieee80211_supported_band **bands); 
     3626+int lbs_set_11d_domain_info(struct lbs_private *priv); 
     3627  
     3628 int lbs_get_reg(struct lbs_private *priv, u16 reg, u16 offset, u32 *value); 
     3629  
     3630--- a/drivers/net/wireless/libertas/dev.h 
     3631+++ b/drivers/net/wireless/libertas/dev.h 
     3632@@ -49,6 +49,7 @@ struct lbs_private { 
     3633        bool wiphy_registered; 
     3634        struct cfg80211_scan_request *scan_req; 
     3635        u8 assoc_bss[ETH_ALEN]; 
     3636+       u8 country_code[IEEE80211_COUNTRY_STRING_LEN]; 
     3637        u8 disassoc_reason; 
     3638  
     3639        /* Mesh */ 
     3640--- a/drivers/net/wireless/libertas/if_usb.c 
     3641+++ b/drivers/net/wireless/libertas/if_usb.c 
     3642@@ -311,7 +311,6 @@ static void if_usb_disconnect(struct usb 
     3643        cardp->surprise_removed = 1; 
     3644  
     3645        if (priv) { 
     3646-               priv->surpriseremoved = 1; 
     3647                lbs_stop_card(priv); 
     3648                lbs_remove_card(priv); 
     3649        } 
     3650--- a/drivers/net/wireless/libertas/main.c 
     3651+++ b/drivers/net/wireless/libertas/main.c 
     3652@@ -154,6 +154,12 @@ int lbs_start_iface(struct lbs_private * 
     3653                goto err; 
     3654        } 
     3655  
     3656+       ret = lbs_set_11d_domain_info(priv); 
     3657+       if (ret) { 
     3658+               lbs_deb_net("set 11d domain info failed\n"); 
     3659+               goto err; 
     3660+       } 
     3661+ 
     3662        lbs_update_channel(priv); 
     3663  
     3664        priv->iface_running = true; 
     3665--- a/include/net/cfg80211.h 
     3666+++ b/include/net/cfg80211.h 
     3667@@ -1504,8 +1504,6 @@ struct cfg80211_gtk_rekey_data { 
     3668  *     interfaces are active this callback should reject the configuration. 
     3669  *     If no interfaces are active or the device is down, the channel should 
     3670  *     be stored for when a monitor interface becomes active. 
     3671- * @set_monitor_enabled: Notify driver that there are only monitor 
     3672- *     interfaces running. 
     3673  * 
     3674  * @scan: Request to do a scan. If returning zero, the scan request is given 
     3675  *     the driver, and will be valid until passed to cfg80211_scan_done(). 
     3676@@ -1612,6 +1610,10 @@ struct cfg80211_gtk_rekey_data { 
     3677  * @get_et_strings:  Ethtool API to get a set of strings to describe stats 
     3678  *     and perhaps other supported types of ethtool data-sets. 
     3679  *     See @ethtool_ops.get_strings 
     3680+ * 
     3681+ * @get_channel: Get the current operating channel for the virtual interface. 
     3682+ *     For monitor interfaces, it should return %NULL unless there's a single 
     3683+ *     current monitoring channel. 
    16073684  */ 
     3685 struct cfg80211_ops { 
     3686        int     (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow); 
     3687@@ -1820,7 +1822,10 @@ struct cfg80211_ops { 
     3688        void    (*get_et_strings)(struct wiphy *wiphy, struct net_device *dev, 
     3689                                  u32 sset, u8 *data); 
     3690  
     3691-       void (*set_monitor_enabled)(struct wiphy *wiphy, bool enabled); 
     3692+       struct ieee80211_channel * 
     3693+               (*get_channel)(struct wiphy *wiphy, 
     3694+                              struct wireless_dev *wdev, 
     3695+                              enum nl80211_channel_type *type); 
     3696 }; 
     3697  
     3698 /* 
    16083699--- a/net/mac80211/agg-rx.c 
    16093700+++ b/net/mac80211/agg-rx.c 
     
    16293720        else if (sdata->vif.type == NL80211_IFTYPE_STATION) 
    16303721                memcpy(mgmt->bssid, sdata->u.mgd.bssid, ETH_ALEN); 
    1631 @@ -459,6 +460,7 @@ int ieee80211_start_tx_ba_session(struct 
     3722@@ -460,6 +461,7 @@ int ieee80211_start_tx_ba_session(struct 
    16323723            sdata->vif.type != NL80211_IFTYPE_MESH_POINT && 
    16333724            sdata->vif.type != NL80211_IFTYPE_AP_VLAN && 
     
    16393730--- a/net/mac80211/cfg.c 
    16403731+++ b/net/mac80211/cfg.c 
    1641 @@ -1741,6 +1741,8 @@ static int ieee80211_set_txq_params(stru 
    1642                 return -EINVAL; 
    1643         } 
    1644   
    1645 +       ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_QOS); 
    1646 + 
     3732@@ -2982,14 +2982,14 @@ static int ieee80211_probe_client(struct 
    16473733        return 0; 
    16483734 } 
    16493735  
     3736-static void ieee80211_set_monitor_enabled(struct wiphy *wiphy, bool enabled) 
     3737+static struct ieee80211_channel * 
     3738+ieee80211_cfg_get_channel(struct wiphy *wiphy, struct wireless_dev *wdev, 
     3739+                         enum nl80211_channel_type *type) 
     3740 { 
     3741        struct ieee80211_local *local = wiphy_priv(wiphy); 
     3742  
     3743-       if (enabled) 
     3744-               WARN_ON(ieee80211_add_virtual_monitor(local)); 
     3745-       else 
     3746-               ieee80211_del_virtual_monitor(local); 
     3747+       *type = local->_oper_channel_type; 
     3748+       return local->oper_channel; 
     3749 } 
     3750  
     3751 #ifdef CONFIG_PM 
     3752@@ -3066,11 +3066,11 @@ struct cfg80211_ops mac80211_config_ops  
     3753        .tdls_mgmt = ieee80211_tdls_mgmt, 
     3754        .probe_client = ieee80211_probe_client, 
     3755        .set_noack_map = ieee80211_set_noack_map, 
     3756-       .set_monitor_enabled = ieee80211_set_monitor_enabled, 
     3757 #ifdef CONFIG_PM 
     3758        .set_wakeup = ieee80211_set_wakeup, 
     3759 #endif 
     3760        .get_et_sset_count = ieee80211_get_et_sset_count, 
     3761        .get_et_stats = ieee80211_get_et_stats, 
     3762        .get_et_strings = ieee80211_get_et_strings, 
     3763+       .get_channel = ieee80211_cfg_get_channel, 
     3764 }; 
    16503765--- a/net/mac80211/debugfs_sta.c 
    16513766+++ b/net/mac80211/debugfs_sta.c 
     
    16643779                            TEST(UAPSD), TEST(SP), TEST(TDLS_PEER), 
    16653780                            TEST(TDLS_PEER_AUTH), TEST(4ADDR_EVENT), 
     3781--- a/net/mac80211/ieee80211_i.h 
     3782+++ b/net/mac80211/ieee80211_i.h 
     3783@@ -1496,10 +1496,6 @@ int ieee80211_add_srates_ie(struct ieee8 
     3784 int ieee80211_add_ext_srates_ie(struct ieee80211_sub_if_data *sdata, 
     3785                                struct sk_buff *skb, bool need_basic); 
     3786  
     3787-/* virtual monitor */ 
     3788-int ieee80211_add_virtual_monitor(struct ieee80211_local *local); 
     3789-void ieee80211_del_virtual_monitor(struct ieee80211_local *local); 
     3790- 
     3791 /* channel management */ 
     3792 enum ieee80211_chan_mode { 
     3793        CHAN_MODE_UNDEFINED, 
    16663794--- a/net/mac80211/iface.c 
    16673795+++ b/net/mac80211/iface.c 
    1668 @@ -400,7 +400,6 @@ static int ieee80211_do_open(struct net_ 
     3796@@ -331,7 +331,7 @@ static void ieee80211_set_default_queues 
     3797        sdata->vif.cab_queue = IEEE80211_INVAL_HW_QUEUE; 
     3798 } 
     3799  
     3800-int ieee80211_add_virtual_monitor(struct ieee80211_local *local) 
     3801+static int ieee80211_add_virtual_monitor(struct ieee80211_local *local) 
     3802 { 
     3803        struct ieee80211_sub_if_data *sdata; 
     3804        int ret = 0; 
     3805@@ -377,7 +377,7 @@ int ieee80211_add_virtual_monitor(struct 
     3806        return ret; 
     3807 } 
     3808  
     3809-void ieee80211_del_virtual_monitor(struct ieee80211_local *local) 
     3810+static void ieee80211_del_virtual_monitor(struct ieee80211_local *local) 
     3811 { 
     3812        struct ieee80211_sub_if_data *sdata; 
     3813  
     3814@@ -410,7 +410,6 @@ static int ieee80211_do_open(struct net_ 
    16693815 { 
    16703816        struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); 
     
    16743820        int res; 
    16753821        u32 hw_reconf_flags = 0; 
    1676 @@ -538,28 +537,6 @@ static int ieee80211_do_open(struct net_ 
     3822@@ -497,6 +496,12 @@ static int ieee80211_do_open(struct net_ 
     3823                        break; 
     3824                } 
     3825  
     3826+               if (local->monitors == 0 && local->open_count == 0) { 
     3827+                       res = ieee80211_add_virtual_monitor(local); 
     3828+                       if (res) 
     3829+                               goto err_stop; 
     3830+               } 
     3831+ 
     3832                /* must be before the call to ieee80211_configure_filter */ 
     3833                local->monitors++; 
     3834                if (local->monitors == 1) { 
     3835@@ -511,6 +516,8 @@ static int ieee80211_do_open(struct net_ 
     3836                break; 
     3837        default: 
     3838                if (coming_up) { 
     3839+                       ieee80211_del_virtual_monitor(local); 
     3840+ 
     3841                        res = drv_add_interface(local, sdata); 
     3842                        if (res) 
     3843                                goto err_stop; 
     3844@@ -548,28 +555,6 @@ static int ieee80211_do_open(struct net_ 
    16773845  
    16783846        set_bit(SDATA_STATE_RUNNING, &sdata->state); 
     
    17033871         * set_multicast_list will be invoked by the networking core 
    17043872         * which will check whether any increments here were done in 
    1705 @@ -949,6 +926,72 @@ static void ieee80211_if_setup(struct ne 
     3873@@ -750,6 +735,7 @@ static void ieee80211_do_stop(struct iee 
     3874                if (local->monitors == 0) { 
     3875                        local->hw.conf.flags &= ~IEEE80211_CONF_MONITOR; 
     3876                        hw_reconf_flags |= IEEE80211_CONF_CHANGE_MONITOR; 
     3877+                       ieee80211_del_virtual_monitor(local); 
     3878                } 
     3879  
     3880                ieee80211_adjust_monitor_flags(sdata, -1); 
     3881@@ -823,6 +809,9 @@ static void ieee80211_do_stop(struct iee 
     3882                } 
     3883        } 
     3884        spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); 
     3885+ 
     3886+       if (local->monitors == local->open_count && local->monitors > 0) 
     3887+               ieee80211_add_virtual_monitor(local); 
     3888 } 
     3889  
     3890 static int ieee80211_stop(struct net_device *dev) 
     3891@@ -959,6 +948,72 @@ static void ieee80211_if_setup(struct ne 
    17063892        dev->destructor = free_netdev; 
    17073893 } 
     
    17763962 { 
    17773963        struct ieee80211_sub_if_data *sdata = 
    1778 @@ -1053,6 +1096,9 @@ static void ieee80211_iface_work(struct  
     3964@@ -1063,6 +1118,9 @@ static void ieee80211_iface_work(struct  
    17793965                                break; 
    17803966                        ieee80211_mesh_rx_queued_mgmt(sdata, skb); 
     
    17863972                        WARN(1, "frame for unexpected interface type"); 
    17873973                        break; 
    1788 --- a/net/mac80211/key.c 
    1789 +++ b/net/mac80211/key.c 
    1790 @@ -197,26 +197,6 @@ static void ieee80211_key_disable_hw_acc 
    1791         key->flags &= ~KEY_FLAG_UPLOADED_TO_HARDWARE; 
    1792  } 
    1793   
    1794 -void ieee80211_key_removed(struct ieee80211_key_conf *key_conf) 
    1795 -{ 
    1796 -       struct ieee80211_key *key; 
    1797 - 
    1798 -       key = container_of(key_conf, struct ieee80211_key, conf); 
    1799 - 
    1800 -       might_sleep(); 
    1801 -       assert_key_lock(key->local); 
    1802 - 
    1803 -       key->flags &= ~KEY_FLAG_UPLOADED_TO_HARDWARE; 
    1804 - 
    1805 -       /* 
    1806 -        * Flush TX path to avoid attempts to use this key 
    1807 -        * after this function returns. Until then, drivers 
    1808 -        * must be prepared to handle the key. 
    1809 -        */ 
    1810 -       synchronize_rcu(); 
    1811 -} 
    1812 -EXPORT_SYMBOL_GPL(ieee80211_key_removed); 
    1813 - 
    1814  static void __ieee80211_set_default_key(struct ieee80211_sub_if_data *sdata, 
    1815                                         int idx, bool uni, bool multi) 
    1816  { 
    1817 --- a/net/mac80211/mlme.c 
    1818 +++ b/net/mac80211/mlme.c 
    1819 @@ -1108,7 +1108,7 @@ void ieee80211_dynamic_ps_timer(unsigned 
    1820  } 
    1821   
    1822  /* MLME */ 
    1823 -static void ieee80211_sta_wmm_params(struct ieee80211_local *local, 
    1824 +static bool ieee80211_sta_wmm_params(struct ieee80211_local *local, 
    1825                                      struct ieee80211_sub_if_data *sdata, 
    1826                                      u8 *wmm_param, size_t wmm_param_len) 
    1827  { 
    1828 @@ -1119,23 +1119,23 @@ static void ieee80211_sta_wmm_params(str 
    1829         u8 *pos, uapsd_queues = 0; 
    1830   
    1831         if (!local->ops->conf_tx) 
    1832 -               return; 
    1833 +               return false; 
    1834   
    1835         if (local->hw.queues < IEEE80211_NUM_ACS) 
    1836 -               return; 
    1837 +               return false; 
    1838   
    1839         if (!wmm_param) 
    1840 -               return; 
    1841 +               return false; 
    1842   
    1843         if (wmm_param_len < 8 || wmm_param[5] /* version */ != 1) 
    1844 -               return; 
    1845 +               return false; 
    1846   
    1847         if (ifmgd->flags & IEEE80211_STA_UAPSD_ENABLED) 
    1848                 uapsd_queues = ifmgd->uapsd_queues; 
    1849   
    1850         count = wmm_param[6] & 0x0f; 
    1851         if (count == ifmgd->wmm_last_param_set) 
    1852 -               return; 
    1853 +               return false; 
    1854         ifmgd->wmm_last_param_set = count; 
    1855   
    1856         pos = wmm_param + 8; 
    1857 @@ -1202,6 +1202,7 @@ static void ieee80211_sta_wmm_params(str 
    1858   
    1859         /* enable WMM or activate new settings */ 
    1860         sdata->vif.bss_conf.qos = true; 
    1861 +       return true; 
    1862  } 
    1863   
    1864  static void __ieee80211_stop_poll(struct ieee80211_sub_if_data *sdata) 
    1865 @@ -2435,14 +2436,6 @@ static void ieee80211_rx_mgmt_beacon(str 
    1866                 directed_tim = ieee80211_check_tim(elems.tim, elems.tim_len, 
    1867                                                    ifmgd->aid); 
    1868   
    1869 -       if (ncrc != ifmgd->beacon_crc || !ifmgd->beacon_crc_valid) { 
    1870 -               ieee80211_rx_bss_info(sdata, mgmt, len, rx_status, &elems, 
    1871 -                                     true); 
    1872 - 
    1873 -               ieee80211_sta_wmm_params(local, sdata, elems.wmm_param, 
    1874 -                                        elems.wmm_param_len); 
    1875 -       } 
    1876 - 
    1877         if (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) { 
    1878                 if (directed_tim) { 
    1879                         if (local->hw.conf.dynamic_ps_timeout > 0) { 
    1880 @@ -2473,6 +2466,13 @@ static void ieee80211_rx_mgmt_beacon(str 
    1881         ifmgd->beacon_crc = ncrc; 
    1882         ifmgd->beacon_crc_valid = true; 
    1883   
    1884 +       ieee80211_rx_bss_info(sdata, mgmt, len, rx_status, &elems, 
    1885 +                             true); 
    1886 + 
    1887 +       if (ieee80211_sta_wmm_params(local, sdata, elems.wmm_param, 
    1888 +                                    elems.wmm_param_len)) 
    1889 +               changed |= BSS_CHANGED_QOS; 
    1890 + 
    1891         if (elems.erp_info && elems.erp_info_len >= 1) { 
    1892                 erp_valid = true; 
    1893                 erp_value = elems.erp_info[0]; 
    1894 --- a/net/mac80211/rc80211_minstrel_ht.c 
    1895 +++ b/net/mac80211/rc80211_minstrel_ht.c 
    1896 @@ -626,8 +626,12 @@ minstrel_ht_get_rate(void *priv, struct  
    1897   
    1898  #ifdef CONFIG_MAC80211_DEBUGFS 
    1899         /* use fixed index if set */ 
    1900 -       if (mp->fixed_rate_idx != -1) 
    1901 -               sample_idx = mp->fixed_rate_idx; 
    1902 +       if (mp->fixed_rate_idx != -1) { 
    1903 +               mi->max_tp_rate = mp->fixed_rate_idx; 
    1904 +               mi->max_tp_rate2 = mp->fixed_rate_idx; 
    1905 +               mi->max_prob_rate = mp->fixed_rate_idx; 
    1906 +               sample_idx = -1; 
    1907 +       } 
    1908  #endif 
    1909   
    1910         if (sample_idx >= 0) { 
     3974--- a/net/mac80211/offchannel.c 
     3975+++ b/net/mac80211/offchannel.c 
     3976@@ -324,6 +324,7 @@ void ieee80211_sw_roc_work(struct work_s 
     3977                container_of(work, struct ieee80211_roc_work, work.work); 
     3978        struct ieee80211_sub_if_data *sdata = roc->sdata; 
     3979        struct ieee80211_local *local = sdata->local; 
     3980+       bool started; 
     3981  
     3982        mutex_lock(&local->mtx); 
     3983  
     3984@@ -366,9 +367,10 @@ void ieee80211_sw_roc_work(struct work_s 
     3985                /* finish this ROC */ 
     3986  finish: 
     3987                list_del(&roc->list); 
     3988+               started = roc->started; 
     3989                ieee80211_roc_notify_destroy(roc); 
     3990  
     3991-               if (roc->started) { 
     3992+               if (started) { 
     3993                        drv_flush(local, false); 
     3994  
     3995                        local->tmp_channel = NULL; 
     3996@@ -379,7 +381,7 @@ void ieee80211_sw_roc_work(struct work_s 
     3997  
     3998                ieee80211_recalc_idle(local); 
     3999  
     4000-               if (roc->started) 
     4001+               if (started) 
     4002                        ieee80211_start_next_roc(local); 
     4003        } 
     4004  
    19114005--- a/net/mac80211/rx.c 
    19124006+++ b/net/mac80211/rx.c 
    1913 @@ -2262,6 +2262,7 @@ ieee80211_rx_h_action(struct ieee80211_r 
     4007@@ -2239,6 +2239,7 @@ ieee80211_rx_h_action(struct ieee80211_r 
    19144008                    sdata->vif.type != NL80211_IFTYPE_MESH_POINT && 
    19154009                    sdata->vif.type != NL80211_IFTYPE_AP_VLAN && 
     
    19194013                        break; 
    19204014  
    1921 @@ -2479,14 +2480,15 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_ 
     4015@@ -2456,14 +2457,15 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_ 
    19224016  
    19234017        if (!ieee80211_vif_is_mesh(&sdata->vif) && 
     
    19374031        case cpu_to_le16(IEEE80211_STYPE_ASSOC_RESP): 
    19384032        case cpu_to_le16(IEEE80211_STYPE_REASSOC_RESP): 
    1939 @@ -2817,10 +2819,16 @@ static int prepare_for_handlers(struct i 
     4033@@ -2788,10 +2790,16 @@ static int prepare_for_handlers(struct i 
    19404034                } 
    19414035                break; 
     
    19744068        WLAN_STA_MFP, 
    19754069        WLAN_STA_BLOCK_BA, 
    1976 --- a/net/mac80211/tx.c 
    1977 +++ b/net/mac80211/tx.c 
    1978 @@ -2716,7 +2716,7 @@ EXPORT_SYMBOL(ieee80211_get_buffered_bc) 
    1979  void ieee80211_tx_skb_tid(struct ieee80211_sub_if_data *sdata, 
    1980                           struct sk_buff *skb, int tid) 
    1981  { 
    1982 -       int ac = ieee802_1d_to_ac[tid]; 
    1983 +       int ac = ieee802_1d_to_ac[tid & 7]; 
    1984   
    1985         skb_set_mac_header(skb, 0); 
    1986         skb_set_network_header(skb, 0); 
    19874070--- a/net/wireless/chan.c 
    19884071+++ b/net/wireless/chan.c 
    1989 @@ -136,9 +136,16 @@ cfg80211_get_chan_state(struct cfg80211_ 
     4072@@ -82,7 +82,6 @@ int cfg80211_set_monitor_channel(struct  
     4073                                 int freq, enum nl80211_channel_type chantype) 
     4074 { 
     4075        struct ieee80211_channel *chan; 
     4076-       int err; 
     4077  
     4078        if (!rdev->ops->set_monitor_channel) 
     4079                return -EOPNOTSUPP; 
     4080@@ -93,13 +92,7 @@ int cfg80211_set_monitor_channel(struct  
     4081        if (!chan) 
     4082                return -EINVAL; 
     4083  
     4084-       err = rdev->ops->set_monitor_channel(&rdev->wiphy, chan, chantype); 
     4085-       if (!err) { 
     4086-               rdev->monitor_channel = chan; 
     4087-               rdev->monitor_channel_type = chantype; 
     4088-       } 
     4089- 
     4090-       return err; 
     4091+       return rdev->ops->set_monitor_channel(&rdev->wiphy, chan, chantype); 
     4092 } 
     4093  
     4094 void 
     4095@@ -134,9 +127,16 @@ cfg80211_get_chan_state(struct wireless_ 
    19904096                break; 
    19914097        case NL80211_IFTYPE_AP: 
     
    20064112        case NL80211_IFTYPE_MONITOR: 
    20074113        case NL80211_IFTYPE_AP_VLAN: 
     4114--- a/net/wireless/core.c 
     4115+++ b/net/wireless/core.c 
     4116@@ -747,60 +747,14 @@ static struct device_type wiphy_type = { 
     4117 }; 
     4118 #endif 
     4119  
     4120-static struct ieee80211_channel * 
     4121-cfg80211_get_any_chan(struct cfg80211_registered_device *rdev) 
     4122-{ 
     4123-       struct ieee80211_supported_band *sband; 
     4124-       int i; 
     4125- 
     4126-       for (i = 0; i < IEEE80211_NUM_BANDS; i++) { 
     4127-               sband = rdev->wiphy.bands[i]; 
     4128-               if (sband && sband->n_channels > 0) 
     4129-                       return &sband->channels[0]; 
     4130-       } 
     4131- 
     4132-       return NULL; 
     4133-} 
     4134- 
     4135-static void cfg80211_init_mon_chan(struct cfg80211_registered_device *rdev) 
     4136-{ 
     4137-       struct ieee80211_channel *chan; 
     4138- 
     4139-       chan = cfg80211_get_any_chan(rdev); 
     4140-       if (WARN_ON(!chan)) 
     4141-               return; 
     4142- 
     4143-       mutex_lock(&rdev->devlist_mtx); 
     4144-       WARN_ON(cfg80211_set_monitor_channel(rdev, chan->center_freq, 
     4145-                                            NL80211_CHAN_NO_HT)); 
     4146-       mutex_unlock(&rdev->devlist_mtx); 
     4147-} 
     4148- 
     4149 void cfg80211_update_iface_num(struct cfg80211_registered_device *rdev, 
     4150                               enum nl80211_iftype iftype, int num) 
     4151 { 
     4152-       bool has_monitors_only_old = cfg80211_has_monitors_only(rdev); 
     4153-       bool has_monitors_only_new; 
     4154- 
     4155        ASSERT_RTNL(); 
     4156  
     4157        rdev->num_running_ifaces += num; 
     4158        if (iftype == NL80211_IFTYPE_MONITOR) 
     4159                rdev->num_running_monitor_ifaces += num; 
     4160- 
     4161-       has_monitors_only_new = cfg80211_has_monitors_only(rdev); 
     4162-       if (has_monitors_only_new != has_monitors_only_old) { 
     4163-               if (rdev->ops->set_monitor_enabled) 
     4164-                       rdev->ops->set_monitor_enabled(&rdev->wiphy, 
     4165-                                                      has_monitors_only_new); 
     4166- 
     4167-               if (!has_monitors_only_new) { 
     4168-                       rdev->monitor_channel = NULL; 
     4169-                       rdev->monitor_channel_type = NL80211_CHAN_NO_HT; 
     4170-               } else { 
     4171-                       cfg80211_init_mon_chan(rdev); 
     4172-               } 
     4173-       } 
     4174 } 
     4175  
     4176 static int cfg80211_netdev_notifier_call(struct notifier_block *nb, 
     4177@@ -932,6 +886,7 @@ static int cfg80211_netdev_notifier_call 
     4178                        mutex_unlock(&rdev->devlist_mtx); 
     4179                        dev_put(dev); 
     4180                } 
     4181+               cfg80211_update_iface_num(rdev, wdev->iftype, 1); 
     4182                cfg80211_lock_rdev(rdev); 
     4183                mutex_lock(&rdev->devlist_mtx); 
     4184                wdev_lock(wdev); 
     4185@@ -1026,7 +981,6 @@ static int cfg80211_netdev_notifier_call 
     4186                mutex_unlock(&rdev->devlist_mtx); 
     4187                if (ret) 
     4188                        return notifier_from_errno(ret); 
     4189-               cfg80211_update_iface_num(rdev, wdev->iftype, 1); 
     4190                break; 
     4191        } 
     4192  
     4193--- a/net/wireless/core.h 
     4194+++ b/net/wireless/core.h 
     4195@@ -61,9 +61,6 @@ struct cfg80211_registered_device { 
     4196        int num_running_ifaces; 
     4197        int num_running_monitor_ifaces; 
     4198  
     4199-       struct ieee80211_channel *monitor_channel; 
     4200-       enum nl80211_channel_type monitor_channel_type; 
     4201- 
     4202        /* BSSes/scanning */ 
     4203        spinlock_t bss_lock; 
     4204        struct list_head bss_list; 
     4205--- a/net/wireless/nl80211.c 
     4206+++ b/net/wireless/nl80211.c 
     4207@@ -1759,11 +1759,17 @@ static int nl80211_send_iface(struct sk_ 
     4208                        (cfg80211_rdev_list_generation << 2))) 
     4209                goto nla_put_failure; 
     4210  
     4211-       if (rdev->monitor_channel) { 
     4212-               if (nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, 
     4213-                               rdev->monitor_channel->center_freq) || 
     4214-                   nla_put_u32(msg, NL80211_ATTR_WIPHY_CHANNEL_TYPE, 
     4215-                               rdev->monitor_channel_type)) 
     4216+       if (rdev->ops->get_channel) { 
     4217+               struct ieee80211_channel *chan; 
     4218+               enum nl80211_channel_type channel_type; 
     4219+ 
     4220+               chan = rdev->ops->get_channel(&rdev->wiphy, wdev, 
     4221+                                             &channel_type); 
     4222+               if (chan && 
     4223+                   (nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, 
     4224+                                chan->center_freq) || 
     4225+                    nla_put_u32(msg, NL80211_ATTR_WIPHY_CHANNEL_TYPE, 
     4226+                                channel_type))) 
     4227                        goto nla_put_failure; 
     4228        } 
     4229  
     4230--- a/net/wireless/wext-compat.c 
     4231+++ b/net/wireless/wext-compat.c 
     4232@@ -827,6 +827,8 @@ static int cfg80211_wext_giwfreq(struct  
     4233 { 
     4234        struct wireless_dev *wdev = dev->ieee80211_ptr; 
     4235        struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); 
     4236+       struct ieee80211_channel *chan; 
     4237+       enum nl80211_channel_type channel_type; 
     4238  
     4239        switch (wdev->iftype) { 
     4240        case NL80211_IFTYPE_STATION: 
     4241@@ -834,10 +836,13 @@ static int cfg80211_wext_giwfreq(struct  
     4242        case NL80211_IFTYPE_ADHOC: 
     4243                return cfg80211_ibss_wext_giwfreq(dev, info, freq, extra); 
     4244        case NL80211_IFTYPE_MONITOR: 
     4245-               if (!rdev->monitor_channel) 
     4246+               if (!rdev->ops->get_channel) 
     4247                        return -EINVAL; 
     4248  
     4249-               freq->m = rdev->monitor_channel->center_freq; 
     4250+               chan = rdev->ops->get_channel(wdev->wiphy, wdev, &channel_type); 
     4251+               if (!chan) 
     4252+                       return -EINVAL; 
     4253+               freq->m = chan->center_freq; 
     4254                freq->e = 6; 
     4255                return 0; 
     4256        default: 
  • trunk/package/mac80211/patches/400-ath_move_debug_code.patch

    r32492 r32760  
    1313--- a/drivers/net/wireless/ath/ath.h 
    1414+++ b/drivers/net/wireless/ath/ath.h 
    15 @@ -278,13 +278,6 @@ void _ath_dbg(struct ath_common *common, 
     15@@ -280,13 +280,6 @@ void _ath_dbg(struct ath_common *common, 
    1616 #endif /* CONFIG_ATH_DEBUG */ 
    1717  
  • trunk/package/mac80211/patches/410-ath9k_allow_adhoc_and_ap.patch

    r32420 r32760  
    11--- a/drivers/net/wireless/ath/ath9k/init.c 
    22+++ b/drivers/net/wireless/ath/ath9k/init.c 
    3 @@ -666,6 +666,7 @@ static const struct ieee80211_iface_limi 
     3@@ -667,6 +667,7 @@ static const struct ieee80211_iface_limi 
    44 #ifdef CONFIG_MAC80211_MESH 
    55                                 BIT(NL80211_IFTYPE_MESH_POINT) | 
  • trunk/package/mac80211/patches/411-ath5k_allow_adhoc_and_ap.patch

    r32002 r32760  
    1919--- a/drivers/net/wireless/ath/ath5k/base.c 
    2020+++ b/drivers/net/wireless/ath/ath5k/base.c 
    21 @@ -1872,7 +1872,7 @@ ath5k_beacon_send(struct ath5k_hw *ah) 
     21@@ -1875,7 +1875,7 @@ ath5k_beacon_send(struct ath5k_hw *ah) 
    2222        } 
    2323  
     
    2828                u64 tsf = ath5k_hw_get_tsf64(ah); 
    2929                u32 tsftu = TSF_TO_TU(tsf); 
    30 @@ -1958,7 +1958,7 @@ ath5k_beacon_update_timers(struct ath5k_ 
     30@@ -1961,7 +1961,7 @@ ath5k_beacon_update_timers(struct ath5k_ 
    3131  
    3232        intval = ah->bintval & AR5K_BEACON_PERIOD; 
     
    3737                if (intval < 15) 
    3838                        ATH5K_WARN(ah, "intval %u is too low, min 15\n", 
    39 @@ -2423,6 +2423,7 @@ static const struct ieee80211_iface_limi 
     39@@ -2426,6 +2426,7 @@ static const struct ieee80211_iface_limi 
    4040 #ifdef CONFIG_MAC80211_MESH 
    4141                                 BIT(NL80211_IFTYPE_MESH_POINT) | 
  • trunk/package/mac80211/patches/412-mac80211_allow_adhoc_and_ap.patch

    r32655 r32760  
    11--- a/net/mac80211/main.c 
    22+++ b/net/mac80211/main.c 
    3 @@ -786,17 +786,11 @@ int ieee80211_register_hw(struct ieee802 
     3@@ -787,17 +787,11 @@ int ieee80211_register_hw(struct ieee802 
    44         */ 
    55        for (i = 0; i < hw->wiphy->n_iface_combinations; i++) { 
  • trunk/package/mac80211/patches/500-ath9k_eeprom_debugfs.patch

    r32655 r32760  
    5555 { 
    5656        struct ath_common *common = ath9k_hw_common(ah); 
    57 @@ -1595,5 +1642,8 @@ int ath9k_init_debug(struct ath_hw *ah) 
     57@@ -1603,5 +1650,8 @@ int ath9k_init_debug(struct ath_hw *ah) 
    5858        debugfs_create_u32("gpio_val", S_IRUSR | S_IWUSR, 
    5959                           sc->debug.debugfs_phy, &sc->sc_ah->gpio_val); 
  • trunk/package/mac80211/patches/501-ath9k-eeprom_endianess.patch

    r32655 r32760  
    7272--- a/drivers/net/wireless/ath/ath9k/hw.h 
    7373+++ b/drivers/net/wireless/ath/ath9k/hw.h 
    74 @@ -658,6 +658,7 @@ enum ath_cal_list { 
     74@@ -703,6 +703,7 @@ enum ath_cal_list { 
    7575 #define AH_USE_EEPROM   0x1 
    7676 #define AH_UNPLUGGED    0x2 /* The card has been physically removed. */ 
     
    8282--- a/drivers/net/wireless/ath/ath9k/init.c 
    8383+++ b/drivers/net/wireless/ath/ath9k/init.c 
    84 @@ -536,6 +536,8 @@ static int ath9k_init_softc(u16 devid, s 
     84@@ -537,6 +537,8 @@ static int ath9k_init_softc(u16 devid, s 
    8585                ah->is_clk_25mhz = pdata->is_clk_25mhz; 
    8686                ah->get_mac_revision = pdata->get_mac_revision; 
  • trunk/package/mac80211/patches/502-ath9k_ahb_init.patch

    r32420 r32760  
    11--- a/drivers/net/wireless/ath/ath9k/init.c 
    22+++ b/drivers/net/wireless/ath/ath9k/init.c 
    3 @@ -907,23 +907,23 @@ static int __init ath9k_init(void) 
     3@@ -926,23 +926,23 @@ static int __init ath9k_init(void) 
    44                goto err_out; 
    55        } 
  • trunk/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch

    r32655 r32760  
    11--- a/drivers/net/wireless/ath/ath9k/hw.c 
    22+++ b/drivers/net/wireless/ath/ath9k/hw.c 
    3 @@ -1956,8 +1956,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st 
     3@@ -1952,8 +1952,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st 
    44                REG_WRITE(ah, AR_OBS, 8); 
    55  
  • trunk/package/mac80211/patches/512-ath9k_channelbw_debugfs.patch

    r32655 r32760  
    11--- a/drivers/net/wireless/ath/ath9k/ath9k.h 
    22+++ b/drivers/net/wireless/ath/ath9k/ath9k.h 
    3 @@ -649,6 +649,7 @@ struct ath_softc { 
     3@@ -658,6 +658,7 @@ struct ath_softc { 
    44        struct ieee80211_hw *hw; 
    55        struct device *dev; 
     
    99        struct survey_info survey[ATH9K_NUM_CHANNELS]; 
    1010  
    11 @@ -717,6 +718,7 @@ struct ath_softc { 
    12         struct dfs_pattern_detector *dfs_detector; 
     11@@ -733,6 +734,7 @@ struct ath_softc { 
     12 #endif 
    1313 }; 
    1414  
     
    7070 { 
    7171        struct ath_common *common = ath9k_hw_common(ah); 
    72 @@ -1645,5 +1689,8 @@ int ath9k_init_debug(struct ath_hw *ah) 
     72@@ -1653,5 +1697,8 @@ int ath9k_init_debug(struct ath_hw *ah) 
    7373        debugfs_create_file("eeprom", S_IRUSR, sc->debug.debugfs_phy, sc, 
    7474                            &fops_eeprom); 
     
    8181--- a/drivers/net/wireless/ath/ath9k/main.c 
    8282+++ b/drivers/net/wireless/ath/ath9k/main.c 
    83 @@ -1084,7 +1084,7 @@ static void ath9k_disable_ps(struct ath_ 
     83@@ -1095,7 +1095,7 @@ static void ath9k_disable_ps(struct ath_ 
    8484        ath_dbg(common, PS, "PowerSave disabled\n"); 
    8585 } 
     
    9090        struct ath_softc *sc = hw->priv; 
    9191        struct ath_hw *ah = sc->sc_ah; 
    92 @@ -1138,9 +1138,11 @@ static int ath9k_config(struct ieee80211 
     92@@ -1149,9 +1149,11 @@ static int ath9k_config(struct ieee80211 
    9393  
    9494        if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) || reset_channel) { 
     
    102102                if (ah->curchan) 
    103103                        old_pos = ah->curchan - &ah->channels[0]; 
    104 @@ -1183,7 +1185,23 @@ static int ath9k_config(struct ieee80211 
     104@@ -1194,7 +1196,23 @@ static int ath9k_config(struct ieee80211 
    105105                        memset(&sc->survey[pos], 0, sizeof(struct survey_info)); 
    106106                } 
  • trunk/package/mac80211/patches/513-mac80211_reduce_txqueuelen.patch

    r32655 r32760  
    11--- a/net/mac80211/iface.c 
    22+++ b/net/mac80211/iface.c 
    3 @@ -916,6 +916,7 @@ static const struct net_device_ops ieee8 
     3@@ -938,6 +938,7 @@ static const struct net_device_ops ieee8 
    44 static void ieee80211_if_setup(struct net_device *dev) 
    55 { 
  • trunk/package/mac80211/patches/520-mac80211_cur_txpower.patch

    r32655 r32760  
    11--- a/include/net/mac80211.h 
    22+++ b/include/net/mac80211.h 
    3 @@ -829,7 +829,7 @@ enum ieee80211_smps_mode { 
     3@@ -835,7 +835,7 @@ enum ieee80211_smps_mode { 
    44  */ 
    55 struct ieee80211_conf { 
     
    1212--- a/net/mac80211/cfg.c 
    1313+++ b/net/mac80211/cfg.c 
    14 @@ -1956,7 +1956,7 @@ static int ieee80211_get_tx_power(struct 
     14@@ -1957,7 +1957,7 @@ static int ieee80211_get_tx_power(struct 
    1515 { 
    1616        struct ieee80211_local *local = wiphy_priv(wiphy); 
  • trunk/package/mac80211/patches/521-ath9k_cur_txpower.patch

    r32655 r32760  
    11--- a/drivers/net/wireless/ath/ath9k/main.c 
    22+++ b/drivers/net/wireless/ath/ath9k/main.c 
    3 @@ -1208,6 +1208,8 @@ int ath9k_config(struct ieee80211_hw *hw 
     3@@ -1219,6 +1219,8 @@ int ath9k_config(struct ieee80211_hw *hw 
    44                        return -EINVAL; 
    55                } 
     
    1010                 * The most recent snapshot of channel->noisefloor for the old 
    1111                 * channel is only available after the hardware reset. Copy it to 
    12 @@ -1222,6 +1224,7 @@ int ath9k_config(struct ieee80211_hw *hw 
     12@@ -1233,6 +1235,7 @@ int ath9k_config(struct ieee80211_hw *hw 
    1313                sc->config.txpowlimit = 2 * conf->power_level; 
    1414                ath9k_cmn_update_txpow(ah, sc->curtxpow, 
  • trunk/package/mac80211/patches/522-ath9k_per_chain_signal_strength.patch

    r32655 r32760  
    11--- a/include/net/mac80211.h 
    22+++ b/include/net/mac80211.h 
    3 @@ -697,6 +697,9 @@ enum mac80211_rx_flags { 
    4   * @mactime: value in microseconds of the 64-bit Time Synchronization Function 
    5   *     (TSF) timer when the first data symbol (MPDU) arrived at the hardware. 
    6   * @band: the active band when this frame was received 
     3@@ -706,6 +706,9 @@ enum mac80211_rx_flags { 
     4  * @signal: signal strength when receiving this frame, either in dBm, in dB or 
     5  *     unspecified depending on the hardware capabilities flags 
     6  *     @IEEE80211_HW_SIGNAL_* 
    77+ * @chains: bitmask of receive chains for which separate signal strength 
    88+ *     values were filled. 
    99+ * @chain_signal: per-chain signal strength, same format as @signal 
    10   * @freq: frequency the radio was tuned to when receiving this frame, in MHz 
    11   * @signal: signal strength when receiving this frame, either in dBm, in dB or 
    12   *     unspecified depending on the hardware capabilities flags 
    13 @@ -710,6 +713,10 @@ enum mac80211_rx_flags { 
    14  struct ieee80211_rx_status { 
    15         u64 mactime; 
    16         enum ieee80211_band band; 
     10  * @antenna: antenna used 
     11  * @rate_idx: index of data rate into band's supported rates or MCS index if 
     12  *     HT rates are use (RX_FLAG_HT) 
     13@@ -722,6 +725,9 @@ struct ieee80211_rx_status { 
     14        u8 band; 
     15        u8 antenna; 
     16        s8 signal; 
    1717+ 
    1818+       u8 chains; 
    1919+       s8 chain_signal[4]; 
    20 + 
    21         int freq; 
    22         int signal; 
    23         int antenna; 
     20 }; 
     21  
     22 /** 
    2423--- a/net/mac80211/sta_info.h 
    2524+++ b/net/mac80211/sta_info.h 
     
    3837--- a/net/mac80211/rx.c 
    3938+++ b/net/mac80211/rx.c 
    40 @@ -1254,6 +1254,7 @@ ieee80211_rx_h_sta_process(struct ieee80 
     39@@ -1231,6 +1231,7 @@ ieee80211_rx_h_sta_process(struct ieee80 
    4140        struct sk_buff *skb = rx->skb; 
    4241        struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); 
     
    4645        if (!sta) 
    4746                return RX_CONTINUE; 
    48 @@ -1298,6 +1299,19 @@ ieee80211_rx_h_sta_process(struct ieee80 
     47@@ -1275,6 +1276,19 @@ ieee80211_rx_h_sta_process(struct ieee80 
    4948                ewma_add(&sta->avg_signal, -status->signal); 
    5049        } 
     
    251250--- a/include/linux/nl80211.h 
    252251+++ b/include/linux/nl80211.h 
    253 @@ -1729,6 +1729,8 @@ enum nl80211_sta_bss_param { 
     252@@ -1734,6 +1734,8 @@ enum nl80211_sta_bss_param { 
    254253  * @NL80211_STA_INFO_STA_FLAGS: Contains a struct nl80211_sta_flag_update. 
    255254  * @NL80211_STA_INFO_BEACON_LOSS: count of times beacon loss was detected (u32) 
     
    260259  * @NL80211_STA_INFO_MAX: highest possible station info attribute 
    261260  */ 
    262 @@ -1753,6 +1755,8 @@ enum nl80211_sta_info { 
     261@@ -1758,6 +1760,8 @@ enum nl80211_sta_info { 
    263262        NL80211_STA_INFO_STA_FLAGS, 
    264263        NL80211_STA_INFO_BEACON_LOSS, 
     
    271270--- a/net/wireless/nl80211.c 
    272271+++ b/net/wireless/nl80211.c 
    273 @@ -2648,6 +2648,32 @@ nla_put_failure: 
     272@@ -2745,6 +2745,32 @@ nla_put_failure: 
    274273        return false; 
    275274 } 
     
    304303                                int flags, 
    305304                                struct cfg80211_registered_device *rdev, 
    306 @@ -2709,6 +2735,18 @@ static int nl80211_send_station(struct s 
     305@@ -2806,6 +2832,18 @@ static int nl80211_send_station(struct s 
    307306        default: 
    308307                break; 
  • trunk/package/mac80211/patches/540-ath9k_extra_leds.patch

    r32655 r32760  
    11--- a/drivers/net/wireless/ath/ath9k/ath9k.h 
    22+++ b/drivers/net/wireless/ath/ath9k/ath9k.h 
    3 @@ -528,6 +528,9 @@ static inline void ath9k_btcoex_stop_gen 
     3@@ -537,6 +537,9 @@ struct ath9k_wow_pattern { 
    44 #ifdef CONFIG_MAC80211_LEDS 
    55 void ath_init_leds(struct ath_softc *sc); 
     
    1111 static inline void ath_init_leds(struct ath_softc *sc) 
    1212 { 
    13 @@ -645,6 +648,13 @@ struct ath9k_vif_iter_data { 
     13@@ -654,6 +657,13 @@ struct ath9k_vif_iter_data { 
    1414        int nadhocs;   /* number of adhoc vifs */ 
    1515 }; 
     
    2525        struct ieee80211_hw *hw; 
    2626        struct device *dev; 
    27 @@ -686,9 +696,8 @@ struct ath_softc { 
     27@@ -695,9 +705,8 @@ struct ath_softc { 
    2828        struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS]; 
    2929  
     
    172172--- a/drivers/net/wireless/ath/ath9k/init.c 
    173173+++ b/drivers/net/wireless/ath/ath9k/init.c 
    174 @@ -792,7 +792,7 @@ int ath9k_init_device(u16 devid, struct  
     174@@ -811,7 +811,7 @@ int ath9k_init_device(u16 devid, struct  
    175175  
    176176 #ifdef CONFIG_MAC80211_LEDS 
     
    245245  
    246246 void ath9k_debug_samp_bb_mac(struct ath_softc *sc) 
    247 @@ -1680,6 +1735,11 @@ int ath9k_init_debug(struct ath_hw *ah) 
     247@@ -1688,6 +1743,11 @@ int ath9k_init_debug(struct ath_hw *ah) 
    248248                            &fops_samps); 
    249249 #endif 
  • trunk/package/mac80211/patches/550-mac80211_optimize_mcs_rate_mask.patch

    r32655 r32760  
    1212--- a/net/mac80211/cfg.c 
    1313+++ b/net/mac80211/cfg.c 
    14 @@ -2135,9 +2135,20 @@ static int ieee80211_set_bitrate_mask(st 
     14@@ -2136,9 +2136,20 @@ static int ieee80211_set_bitrate_mask(st 
    1515        } 
    1616  
     
    3535--- a/include/net/mac80211.h 
    3636+++ b/include/net/mac80211.h 
    37 @@ -3665,7 +3665,7 @@ void ieee80211_send_bar(struct ieee80211 
     37@@ -3670,7 +3670,7 @@ void ieee80211_send_bar(struct ieee80211 
    3838  *     (deprecated; this will be removed once drivers get updated to use 
    3939  *     rate_idx_mask) 
     
    4444  */ 
    4545 struct ieee80211_tx_rate_control { 
    46 @@ -3677,7 +3677,7 @@ struct ieee80211_tx_rate_control { 
     46@@ -3682,7 +3682,7 @@ struct ieee80211_tx_rate_control { 
    4747        bool rts, short_preamble; 
    4848        u8 max_rate_idx; 
     
    5555--- a/net/mac80211/tx.c 
    5656+++ b/net/mac80211/tx.c 
    57 @@ -624,9 +624,11 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021 
     57@@ -631,9 +631,11 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021 
    5858                txrc.max_rate_idx = -1; 
    5959        else 
     
    7070                    tx->sdata->vif.type == NL80211_IFTYPE_MESH_POINT || 
    7171                    tx->sdata->vif.type == NL80211_IFTYPE_ADHOC); 
    72 @@ -2454,8 +2456,6 @@ struct sk_buff *ieee80211_beacon_get_tim 
     72@@ -2464,8 +2466,6 @@ struct sk_buff *ieee80211_beacon_get_tim 
    7373                txrc.max_rate_idx = -1; 
    7474        else 
  • trunk/package/mac80211/patches/562-ath9k_add_idle_hack.patch

    r32756 r32760  
    11--- a/drivers/net/wireless/ath/ath9k/main.c 
    22+++ b/drivers/net/wireless/ath/ath9k/main.c 
    3 @@ -1044,6 +1044,7 @@ static void ath9k_remove_interface(struc 
     3@@ -1055,6 +1055,7 @@ static void ath9k_remove_interface(struc 
    44        ath9k_calculate_summary_state(hw, NULL); 
    55  
     
    99 } 
    1010  
    11 @@ -1096,7 +1097,8 @@ int ath9k_config(struct ieee80211_hw *hw 
     11@@ -1107,7 +1108,8 @@ int ath9k_config(struct ieee80211_hw *hw 
    1212        mutex_lock(&sc->mutex); 
    1313  
  • trunk/package/mac80211/patches/700-mwl8k-missing-pci-id-for-WNR854T.patch

    r32655 r32760  
    11--- a/drivers/net/wireless/mwl8k.c 
    22+++ b/drivers/net/wireless/mwl8k.c 
    3 @@ -5297,6 +5297,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw") 
     3@@ -5299,6 +5299,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw") 
    44 MODULE_FIRMWARE(MWL8K_8366_AP_FW(MWL8K_8366_AP_FW_API)); 
    55  
  • trunk/package/mac80211/patches/849-brcmsmac-add-device-found-on-some-SoCs-like-the-bcm4.patch

    r32671 r32760  
    1111--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c 
    1212+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c 
    13 @@ -734,7 +734,7 @@ static void brcms_c_ucode_bsinit(struct 
     13@@ -734,7 +734,7 @@ static void brcms_c_ucode_bsinit(struct  
    1414        brcms_c_write_mhf(wlc_hw, wlc_hw->band->mhfs); 
    1515  
     
    2020                        brcms_c_write_inits(wlc_hw, ucode->d11n0bsinitvals16); 
    2121                else 
    22 @@ -2259,7 +2259,7 @@ static void brcms_ucode_download(struct 
     22@@ -2259,7 +2259,7 @@ static void brcms_ucode_download(struct  
    2323        if (wlc_hw->ucode_loaded) 
    2424                return; 
  • trunk/package/mac80211/patches/851-brcmsmac-start-adding-support-for-core-rev-28.patch

    r32671 r32760  
    1111--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c 
    1212+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c 
    13 @@ -734,7 +734,7 @@ static void brcms_c_ucode_bsinit(struct 
     13@@ -734,7 +734,7 @@ static void brcms_c_ucode_bsinit(struct  
    1414        brcms_c_write_mhf(wlc_hw, wlc_hw->band->mhfs); 
    1515  
     
    2020                        brcms_c_write_inits(wlc_hw, ucode->d11n0bsinitvals16); 
    2121                else 
    22 @@ -2259,7 +2259,7 @@ static void brcms_ucode_download(struct 
     22@@ -2259,7 +2259,7 @@ static void brcms_ucode_download(struct  
    2323        if (wlc_hw->ucode_loaded) 
    2424                return; 
Note: See TracChangeset for help on using the changeset viewer.