@ -1258,7 +1258,7 @@ static void ath9k_hw_def_set_txpower(struct ath_hw *ah,
u16 cfgCtl ,
u8 twiceAntennaReduction ,
u8 twiceMaxRegulatoryPower ,
u8 powerLimit )
u8 powerLimit , bool test )
{
# define RT_AR_DELTA(x) (ratesArray[x] - cck_ofdm_delta)
struct ath_regulatory * regulatory = ath9k_hw_regulatory ( ah ) ;
@ -1285,12 +1285,44 @@ static void ath9k_hw_def_set_txpower(struct ath_hw *ah,
ath9k_hw_set_def_power_cal_table ( ah , chan , & txPowerIndexOffset ) ;
regulatory - > max_power_level = 0 ;
for ( i = 0 ; i < ARRAY_SIZE ( ratesArray ) ; i + + ) {
ratesArray [ i ] = ( int16_t ) ( txPowerIndexOffset + ratesArray [ i ] ) ;
if ( ratesArray [ i ] > AR5416_MAX_RATE_POWER )
ratesArray [ i ] = AR5416_MAX_RATE_POWER ;
if ( ratesArray [ i ] > regulatory - > max_power_level )
regulatory - > max_power_level = ratesArray [ i ] ;
}
if ( ! test ) {
i = rate6mb ;
if ( IS_CHAN_HT40 ( chan ) )
i = rateHt40_0 ;
else if ( IS_CHAN_HT20 ( chan ) )
i = rateHt20_0 ;
regulatory - > max_power_level = ratesArray [ i ] ;
}
switch ( ar5416_get_ntxchains ( ah - > txchainmask ) ) {
case 1 :
break ;
case 2 :
regulatory - > max_power_level + = INCREASE_MAXPOW_BY_TWO_CHAIN ;
break ;
case 3 :
regulatory - > max_power_level + = INCREASE_MAXPOW_BY_THREE_CHAIN ;
break ;
default :
ath_print ( ath9k_hw_common ( ah ) , ATH_DBG_EEPROM ,
" Invalid chainmask configuration \n " ) ;
break ;
}
if ( test )
return ;
if ( AR_SREV_9280_20_OR_LATER ( ah ) ) {
for ( i = 0 ; i < Ar5416RateSize ; i + + ) {
int8_t pwr_table_offset ;
@ -1387,34 +1419,6 @@ static void ath9k_hw_def_set_txpower(struct ath_hw *ah,
REG_WRITE ( ah , AR_PHY_POWER_TX_SUB ,
ATH9K_POW_SM ( pModal - > pwrDecreaseFor3Chain , 6 )
| ATH9K_POW_SM ( pModal - > pwrDecreaseFor2Chain , 0 ) ) ;
i = rate6mb ;
if ( IS_CHAN_HT40 ( chan ) )
i = rateHt40_0 ;
else if ( IS_CHAN_HT20 ( chan ) )
i = rateHt20_0 ;
if ( AR_SREV_9280_20_OR_LATER ( ah ) )
regulatory - > max_power_level =
ratesArray [ i ] + AR5416_PWR_TABLE_OFFSET_DB * 2 ;
else
regulatory - > max_power_level = ratesArray [ i ] ;
switch ( ar5416_get_ntxchains ( ah - > txchainmask ) ) {
case 1 :
break ;
case 2 :
regulatory - > max_power_level + = INCREASE_MAXPOW_BY_TWO_CHAIN ;
break ;
case 3 :
regulatory - > max_power_level + = INCREASE_MAXPOW_BY_THREE_CHAIN ;
break ;
default :
ath_print ( ath9k_hw_common ( ah ) , ATH_DBG_EEPROM ,
" Invalid chainmask configuration \n " ) ;
break ;
}
}
static u8 ath9k_hw_def_get_num_ant_config ( struct ath_hw * ah ,