Commit bc7e1be7 authored by Felix Fietkau's avatar Felix Fietkau Committed by John W. Linville

ath9k: Move txpower limit to channel context

Signed-off-by: default avatarFelix Fietkau <nbd@openwrt.org>
Signed-off-by: default avatarRajkumar Manoharan <rmanohar@qti.qualcomm.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent fbbcd146
...@@ -36,10 +36,6 @@ extern int ath9k_modparam_nohwcrypt; ...@@ -36,10 +36,6 @@ extern int ath9k_modparam_nohwcrypt;
extern int led_blink; extern int led_blink;
extern bool is_ath9k_unloaded; extern bool is_ath9k_unloaded;
struct ath_config {
u16 txpowlimit;
};
/*************************/ /*************************/
/* Descriptor Management */ /* Descriptor Management */
/*************************/ /*************************/
...@@ -328,6 +324,7 @@ struct ath_rx { ...@@ -328,6 +324,7 @@ struct ath_rx {
struct ath_chanctx { struct ath_chanctx {
struct cfg80211_chan_def chandef; struct cfg80211_chan_def chandef;
struct list_head vifs; struct list_head vifs;
u16 txpower;
bool offchannel; bool offchannel;
}; };
...@@ -753,7 +750,6 @@ struct ath_softc { ...@@ -753,7 +750,6 @@ struct ath_softc {
short nvifs; short nvifs;
unsigned long ps_usecount; unsigned long ps_usecount;
struct ath_config config;
struct ath_rx rx; struct ath_rx rx;
struct ath_tx tx; struct ath_tx tx;
struct ath_beacon beacon; struct ath_beacon beacon;
......
...@@ -118,6 +118,7 @@ void ath_chanctx_init(struct ath_softc *sc) ...@@ -118,6 +118,7 @@ void ath_chanctx_init(struct ath_softc *sc)
ctx = &sc->chanctx[i]; ctx = &sc->chanctx[i];
cfg80211_chandef_create(&ctx->chandef, chan, NL80211_CHAN_HT20); cfg80211_chandef_create(&ctx->chandef, chan, NL80211_CHAN_HT20);
INIT_LIST_HEAD(&ctx->vifs); INIT_LIST_HEAD(&ctx->vifs);
ctx->txpower = ATH_TXPOWER_MAX;
} }
sc->cur_chan = &sc->chanctx[0]; sc->cur_chan = &sc->chanctx[0];
} }
......
...@@ -169,9 +169,9 @@ static void ath9k_reg_notifier(struct wiphy *wiphy, ...@@ -169,9 +169,9 @@ static void ath9k_reg_notifier(struct wiphy *wiphy,
/* Set tx power */ /* Set tx power */
if (ah->curchan) { if (ah->curchan) {
sc->config.txpowlimit = 2 * ah->curchan->chan->max_power; sc->cur_chan->txpower = 2 * ah->curchan->chan->max_power;
ath9k_ps_wakeup(sc); ath9k_ps_wakeup(sc);
ath9k_hw_set_txpowerlimit(ah, sc->config.txpowlimit, false); ath9k_hw_set_txpowerlimit(ah, sc->cur_chan->txpower, false);
sc->curtxpow = ath9k_hw_regulatory(ah)->power_limit; sc->curtxpow = ath9k_hw_regulatory(ah)->power_limit;
/* synchronize DFS detector if regulatory domain changed */ /* synchronize DFS detector if regulatory domain changed */
if (sc->dfs_detector != NULL) if (sc->dfs_detector != NULL)
...@@ -335,7 +335,6 @@ static void ath9k_init_misc(struct ath_softc *sc) ...@@ -335,7 +335,6 @@ static void ath9k_init_misc(struct ath_softc *sc)
setup_timer(&common->ani.timer, ath_ani_calibrate, (unsigned long)sc); setup_timer(&common->ani.timer, ath_ani_calibrate, (unsigned long)sc);
common->last_rssi = ATH_RSSI_DUMMY_MARKER; common->last_rssi = ATH_RSSI_DUMMY_MARKER;
sc->config.txpowlimit = ATH_TXPOWER_MAX;
memcpy(common->bssidmask, ath_bcast_mac, ETH_ALEN); memcpy(common->bssidmask, ath_bcast_mac, ETH_ALEN);
sc->beacon.slottime = ATH9K_SLOT_TIME_9; sc->beacon.slottime = ATH9K_SLOT_TIME_9;
......
...@@ -227,7 +227,7 @@ static bool ath_complete_reset(struct ath_softc *sc, bool start) ...@@ -227,7 +227,7 @@ static bool ath_complete_reset(struct ath_softc *sc, bool start)
} }
ath9k_cmn_update_txpow(ah, sc->curtxpow, ath9k_cmn_update_txpow(ah, sc->curtxpow,
sc->config.txpowlimit, &sc->curtxpow); sc->cur_chan->txpower, &sc->curtxpow);
clear_bit(ATH_OP_HW_RESET, &common->op_flags); clear_bit(ATH_OP_HW_RESET, &common->op_flags);
ath9k_hw_set_interrupts(ah); ath9k_hw_set_interrupts(ah);
...@@ -1315,9 +1315,9 @@ static int ath9k_config(struct ieee80211_hw *hw, u32 changed) ...@@ -1315,9 +1315,9 @@ static int ath9k_config(struct ieee80211_hw *hw, u32 changed)
if (changed & IEEE80211_CONF_CHANGE_POWER) { if (changed & IEEE80211_CONF_CHANGE_POWER) {
ath_dbg(common, CONFIG, "Set power: %d\n", conf->power_level); ath_dbg(common, CONFIG, "Set power: %d\n", conf->power_level);
sc->config.txpowlimit = 2 * conf->power_level; sc->cur_chan->txpower = 2 * conf->power_level;
ath9k_cmn_update_txpow(ah, sc->curtxpow, ath9k_cmn_update_txpow(ah, sc->curtxpow,
sc->config.txpowlimit, &sc->curtxpow); sc->cur_chan->txpower, &sc->curtxpow);
} }
mutex_unlock(&sc->mutex); mutex_unlock(&sc->mutex);
......
...@@ -720,7 +720,7 @@ void ath9k_mci_set_txpower(struct ath_softc *sc, bool setchannel, ...@@ -720,7 +720,7 @@ void ath9k_mci_set_txpower(struct ath_softc *sc, bool setchannel,
mci_hw->concur_tx = concur_tx; mci_hw->concur_tx = concur_tx;
if (old_concur_tx != mci_hw->concur_tx) if (old_concur_tx != mci_hw->concur_tx)
ath9k_hw_set_txpowerlimit(ah, sc->config.txpowlimit, false); ath9k_hw_set_txpowerlimit(ah, sc->cur_chan->txpower, false);
} }
static void ath9k_mci_stomp_audio(struct ath_softc *sc) static void ath9k_mci_stomp_audio(struct ath_softc *sc)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment