ath5k: Put power_level where it belongs and rename it
Put power_level to ah_txpower struct with the rest tx power infos and also rename it to txp_requested to make more sense. v2 make sure we don't memset it to zero on reset Signed-off-by: Nick Kossifidis <mickflemm@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
493ca5ef4e
commit
987af54fa9
@ -1331,7 +1331,6 @@ struct ath5k_hw {
|
|||||||
unsigned int nexttbtt; /* next beacon time in TU */
|
unsigned int nexttbtt; /* next beacon time in TU */
|
||||||
struct ath5k_txq *cabq; /* content after beacon */
|
struct ath5k_txq *cabq; /* content after beacon */
|
||||||
|
|
||||||
int power_level; /* Requested tx power in dBm */
|
|
||||||
bool assoc; /* associate state */
|
bool assoc; /* associate state */
|
||||||
bool enable_beacon; /* true if beacons are on */
|
bool enable_beacon; /* true if beacons are on */
|
||||||
|
|
||||||
@ -1425,6 +1424,7 @@ struct ath5k_hw {
|
|||||||
/* Value in dB units */
|
/* Value in dB units */
|
||||||
s16 txp_cck_ofdm_pwr_delta;
|
s16 txp_cck_ofdm_pwr_delta;
|
||||||
bool txp_setup;
|
bool txp_setup;
|
||||||
|
int txp_requested; /* Requested tx power in dBm */
|
||||||
} ah_txpower;
|
} ah_txpower;
|
||||||
|
|
||||||
struct ath5k_nfcal_hist ah_nfcal_hist;
|
struct ath5k_nfcal_hist ah_nfcal_hist;
|
||||||
|
@ -723,7 +723,7 @@ ath5k_txbuf_setup(struct ath5k_hw *ah, struct ath5k_buf *bf,
|
|||||||
ret = ah->ah_setup_tx_desc(ah, ds, pktlen,
|
ret = ah->ah_setup_tx_desc(ah, ds, pktlen,
|
||||||
ieee80211_get_hdrlen_from_skb(skb), padsize,
|
ieee80211_get_hdrlen_from_skb(skb), padsize,
|
||||||
get_hw_packet_type(skb),
|
get_hw_packet_type(skb),
|
||||||
(ah->power_level * 2),
|
(ah->ah_txpower.txp_requested * 2),
|
||||||
hw_rate,
|
hw_rate,
|
||||||
info->control.rates[0].count, keyidx, ah->ah_tx_ant, flags,
|
info->control.rates[0].count, keyidx, ah->ah_tx_ant, flags,
|
||||||
cts_rate, duration);
|
cts_rate, duration);
|
||||||
@ -1778,7 +1778,8 @@ ath5k_beacon_setup(struct ath5k_hw *ah, struct ath5k_buf *bf)
|
|||||||
ds->ds_data = bf->skbaddr;
|
ds->ds_data = bf->skbaddr;
|
||||||
ret = ah->ah_setup_tx_desc(ah, ds, skb->len,
|
ret = ah->ah_setup_tx_desc(ah, ds, skb->len,
|
||||||
ieee80211_get_hdrlen_from_skb(skb), padsize,
|
ieee80211_get_hdrlen_from_skb(skb), padsize,
|
||||||
AR5K_PKT_TYPE_BEACON, (ah->power_level * 2),
|
AR5K_PKT_TYPE_BEACON,
|
||||||
|
(ah->ah_txpower.txp_requested * 2),
|
||||||
ieee80211_get_tx_rate(ah->hw, info)->hw_value,
|
ieee80211_get_tx_rate(ah->hw, info)->hw_value,
|
||||||
1, AR5K_TXKEYIX_INVALID,
|
1, AR5K_TXKEYIX_INVALID,
|
||||||
antenna, flags, 0, 0);
|
antenna, flags, 0, 0);
|
||||||
|
@ -207,8 +207,8 @@ ath5k_config(struct ieee80211_hw *hw, u32 changed)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((changed & IEEE80211_CONF_CHANGE_POWER) &&
|
if ((changed & IEEE80211_CONF_CHANGE_POWER) &&
|
||||||
(ah->power_level != conf->power_level)) {
|
(ah->ah_txpower.txp_requested != conf->power_level)) {
|
||||||
ah->power_level = conf->power_level;
|
ah->ah_txpower.txp_requested = conf->power_level;
|
||||||
|
|
||||||
/* Half dB steps */
|
/* Half dB steps */
|
||||||
ath5k_hw_set_txpower_limit(ah, (conf->power_level * 2));
|
ath5k_hw_set_txpower_limit(ah, (conf->power_level * 2));
|
||||||
|
@ -3652,10 +3652,17 @@ ath5k_hw_txpower(struct ath5k_hw *ah, struct ieee80211_channel *channel,
|
|||||||
if (!ah->ah_txpower.txp_setup ||
|
if (!ah->ah_txpower.txp_setup ||
|
||||||
(channel->hw_value != curr_channel->hw_value) ||
|
(channel->hw_value != curr_channel->hw_value) ||
|
||||||
(channel->center_freq != curr_channel->center_freq)) {
|
(channel->center_freq != curr_channel->center_freq)) {
|
||||||
/* Reset TX power values */
|
/* Reset TX power values but preserve requested
|
||||||
|
* tx power from above */
|
||||||
|
int requested_txpower = ah->ah_txpower.txp_requested;
|
||||||
|
|
||||||
memset(&ah->ah_txpower, 0, sizeof(ah->ah_txpower));
|
memset(&ah->ah_txpower, 0, sizeof(ah->ah_txpower));
|
||||||
|
|
||||||
|
/* Restore TPC setting and requested tx power */
|
||||||
ah->ah_txpower.txp_tpc = AR5K_TUNE_TPC_TXPOWER;
|
ah->ah_txpower.txp_tpc = AR5K_TUNE_TPC_TXPOWER;
|
||||||
|
|
||||||
|
ah->ah_txpower.txp_requested = requested_txpower;
|
||||||
|
|
||||||
/* Calculate the powertable */
|
/* Calculate the powertable */
|
||||||
ret = ath5k_setup_channel_powertable(ah, channel,
|
ret = ath5k_setup_channel_powertable(ah, channel,
|
||||||
ee_mode, type);
|
ee_mode, type);
|
||||||
@ -3802,8 +3809,9 @@ ath5k_hw_phy_init(struct ath5k_hw *ah, struct ieee80211_channel *channel,
|
|||||||
* RF buffer settings on 5211/5212+ so that we
|
* RF buffer settings on 5211/5212+ so that we
|
||||||
* properly set curve indices.
|
* properly set curve indices.
|
||||||
*/
|
*/
|
||||||
ret = ath5k_hw_txpower(ah, channel, ah->power_level ?
|
ret = ath5k_hw_txpower(ah, channel, ah->ah_txpower.txp_requested ?
|
||||||
ah->power_level * 2 : AR5K_TUNE_MAX_TXPOWER);
|
ah->ah_txpower.txp_requested * 2 :
|
||||||
|
AR5K_TUNE_MAX_TXPOWER);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user