|
@@ -225,7 +225,7 @@ int ath_set_channel(struct ath_softc *sc, struct ieee80211_hw *hw,
|
|
|
|
|
|
ath_cache_conf_rate(sc, &hw->conf);
|
|
|
ath_update_txpow(sc);
|
|
|
- ath9k_hw_set_interrupts(ah, sc->imask);
|
|
|
+ ath9k_hw_set_interrupts(ah, ah->imask);
|
|
|
|
|
|
ps_restore:
|
|
|
ath9k_ps_restore(sc);
|
|
@@ -434,7 +434,7 @@ void ath9k_tasklet(unsigned long data)
|
|
|
ath_gen_timer_isr(sc->sc_ah);
|
|
|
|
|
|
/* re-enable hardware interrupt */
|
|
|
- ath9k_hw_set_interrupts(ah, sc->imask);
|
|
|
+ ath9k_hw_set_interrupts(ah, ah->imask);
|
|
|
ath9k_ps_restore(sc);
|
|
|
}
|
|
|
|
|
@@ -477,7 +477,7 @@ irqreturn_t ath_isr(int irq, void *dev)
|
|
|
* value to insure we only process bits we requested.
|
|
|
*/
|
|
|
ath9k_hw_getisr(ah, &status); /* NB: clears ISR too */
|
|
|
- status &= sc->imask; /* discard unasked-for bits */
|
|
|
+ status &= ah->imask; /* discard unasked-for bits */
|
|
|
|
|
|
/*
|
|
|
* If there are no status bits set, then this interrupt was not
|
|
@@ -518,7 +518,7 @@ irqreturn_t ath_isr(int irq, void *dev)
|
|
|
* the interrupt.
|
|
|
*/
|
|
|
ath9k_hw_procmibevent(ah);
|
|
|
- ath9k_hw_set_interrupts(ah, sc->imask);
|
|
|
+ ath9k_hw_set_interrupts(ah, ah->imask);
|
|
|
}
|
|
|
|
|
|
if (!(ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP))
|
|
@@ -536,7 +536,7 @@ chip_reset:
|
|
|
|
|
|
if (sched) {
|
|
|
/* turn off every interrupt except SWBA */
|
|
|
- ath9k_hw_set_interrupts(ah, (sc->imask & ATH9K_INT_SWBA));
|
|
|
+ ath9k_hw_set_interrupts(ah, (ah->imask & ATH9K_INT_SWBA));
|
|
|
tasklet_schedule(&sc->intr_tq);
|
|
|
}
|
|
|
|
|
@@ -887,7 +887,7 @@ void ath_radio_enable(struct ath_softc *sc, struct ieee80211_hw *hw)
|
|
|
ath_beacon_config(sc, NULL); /* restart beacons */
|
|
|
|
|
|
/* Re-Enable interrupts */
|
|
|
- ath9k_hw_set_interrupts(ah, sc->imask);
|
|
|
+ ath9k_hw_set_interrupts(ah, ah->imask);
|
|
|
|
|
|
/* Enable LED */
|
|
|
ath9k_hw_cfg_output(ah, ah->led_pin,
|
|
@@ -977,7 +977,7 @@ int ath_reset(struct ath_softc *sc, bool retry_tx)
|
|
|
if (sc->sc_flags & SC_OP_BEACONS)
|
|
|
ath_beacon_config(sc, NULL); /* restart beacons */
|
|
|
|
|
|
- ath9k_hw_set_interrupts(ah, sc->imask);
|
|
|
+ ath9k_hw_set_interrupts(ah, ah->imask);
|
|
|
|
|
|
if (retry_tx) {
|
|
|
int i;
|
|
@@ -1162,23 +1162,23 @@ static int ath9k_start(struct ieee80211_hw *hw)
|
|
|
}
|
|
|
|
|
|
/* Setup our intr mask. */
|
|
|
- sc->imask = ATH9K_INT_RX | ATH9K_INT_TX
|
|
|
+ ah->imask = ATH9K_INT_RX | ATH9K_INT_TX
|
|
|
| ATH9K_INT_RXEOL | ATH9K_INT_RXORN
|
|
|
| ATH9K_INT_FATAL | ATH9K_INT_GLOBAL;
|
|
|
|
|
|
if (ah->caps.hw_caps & ATH9K_HW_CAP_GTT)
|
|
|
- sc->imask |= ATH9K_INT_GTT;
|
|
|
+ ah->imask |= ATH9K_INT_GTT;
|
|
|
|
|
|
if (ah->caps.hw_caps & ATH9K_HW_CAP_HT)
|
|
|
- sc->imask |= ATH9K_INT_CST;
|
|
|
+ ah->imask |= ATH9K_INT_CST;
|
|
|
|
|
|
ath_cache_conf_rate(sc, &hw->conf);
|
|
|
|
|
|
sc->sc_flags &= ~SC_OP_INVALID;
|
|
|
|
|
|
/* Disable BMISS interrupt when we're not associated */
|
|
|
- sc->imask &= ~(ATH9K_INT_SWBA | ATH9K_INT_BMISS);
|
|
|
- ath9k_hw_set_interrupts(ah, sc->imask);
|
|
|
+ ah->imask &= ~(ATH9K_INT_SWBA | ATH9K_INT_BMISS);
|
|
|
+ ath9k_hw_set_interrupts(ah, ah->imask);
|
|
|
|
|
|
ieee80211_wake_queues(hw);
|
|
|
|
|
@@ -1372,14 +1372,15 @@ static int ath9k_add_interface(struct ieee80211_hw *hw,
|
|
|
{
|
|
|
struct ath_wiphy *aphy = hw->priv;
|
|
|
struct ath_softc *sc = aphy->sc;
|
|
|
- struct ath_common *common = ath9k_hw_common(sc->sc_ah);
|
|
|
+ struct ath_hw *ah = sc->sc_ah;
|
|
|
+ struct ath_common *common = ath9k_hw_common(ah);
|
|
|
struct ath_vif *avp = (void *)vif->drv_priv;
|
|
|
enum nl80211_iftype ic_opmode = NL80211_IFTYPE_UNSPECIFIED;
|
|
|
int ret = 0;
|
|
|
|
|
|
mutex_lock(&sc->mutex);
|
|
|
|
|
|
- if (!(sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_BSSIDMASK) &&
|
|
|
+ if (!(ah->caps.hw_caps & ATH9K_HW_CAP_BSSIDMASK) &&
|
|
|
sc->nvifs > 0) {
|
|
|
ret = -ENOBUFS;
|
|
|
goto out;
|
|
@@ -1414,19 +1415,19 @@ static int ath9k_add_interface(struct ieee80211_hw *hw,
|
|
|
|
|
|
sc->nvifs++;
|
|
|
|
|
|
- if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_BSSIDMASK)
|
|
|
+ if (ah->caps.hw_caps & ATH9K_HW_CAP_BSSIDMASK)
|
|
|
ath9k_set_bssid_mask(hw);
|
|
|
|
|
|
if (sc->nvifs > 1)
|
|
|
goto out; /* skip global settings for secondary vif */
|
|
|
|
|
|
if (ic_opmode == NL80211_IFTYPE_AP) {
|
|
|
- ath9k_hw_set_tsfadjust(sc->sc_ah, 1);
|
|
|
+ ath9k_hw_set_tsfadjust(ah, 1);
|
|
|
sc->sc_flags |= SC_OP_TSF_RESET;
|
|
|
}
|
|
|
|
|
|
/* Set the device opmode */
|
|
|
- sc->sc_ah->opmode = ic_opmode;
|
|
|
+ ah->opmode = ic_opmode;
|
|
|
|
|
|
/*
|
|
|
* Enable MIB interrupts when there are hardware phy counters.
|
|
@@ -1435,11 +1436,11 @@ static int ath9k_add_interface(struct ieee80211_hw *hw,
|
|
|
if ((vif->type == NL80211_IFTYPE_STATION) ||
|
|
|
(vif->type == NL80211_IFTYPE_ADHOC) ||
|
|
|
(vif->type == NL80211_IFTYPE_MESH_POINT)) {
|
|
|
- sc->imask |= ATH9K_INT_MIB;
|
|
|
- sc->imask |= ATH9K_INT_TSFOOR;
|
|
|
+ ah->imask |= ATH9K_INT_MIB;
|
|
|
+ ah->imask |= ATH9K_INT_TSFOOR;
|
|
|
}
|
|
|
|
|
|
- ath9k_hw_set_interrupts(sc->sc_ah, sc->imask);
|
|
|
+ ath9k_hw_set_interrupts(ah, ah->imask);
|
|
|
|
|
|
if (vif->type == NL80211_IFTYPE_AP ||
|
|
|
vif->type == NL80211_IFTYPE_ADHOC ||
|
|
@@ -1495,15 +1496,16 @@ static void ath9k_remove_interface(struct ieee80211_hw *hw,
|
|
|
|
|
|
void ath9k_enable_ps(struct ath_softc *sc)
|
|
|
{
|
|
|
+ struct ath_hw *ah = sc->sc_ah;
|
|
|
+
|
|
|
sc->ps_enabled = true;
|
|
|
- if (!(sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) {
|
|
|
- if ((sc->imask & ATH9K_INT_TIM_TIMER) == 0) {
|
|
|
- sc->imask |= ATH9K_INT_TIM_TIMER;
|
|
|
- ath9k_hw_set_interrupts(sc->sc_ah,
|
|
|
- sc->imask);
|
|
|
+ if (!(ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) {
|
|
|
+ if ((ah->imask & ATH9K_INT_TIM_TIMER) == 0) {
|
|
|
+ ah->imask |= ATH9K_INT_TIM_TIMER;
|
|
|
+ ath9k_hw_set_interrupts(ah, ah->imask);
|
|
|
}
|
|
|
}
|
|
|
- ath9k_hw_setrxabort(sc->sc_ah, 1);
|
|
|
+ ath9k_hw_setrxabort(ah, 1);
|
|
|
}
|
|
|
|
|
|
static int ath9k_config(struct ieee80211_hw *hw, u32 changed)
|
|
@@ -1580,10 +1582,10 @@ static int ath9k_config(struct ieee80211_hw *hw, u32 changed)
|
|
|
PS_WAIT_FOR_CAB |
|
|
|
PS_WAIT_FOR_PSPOLL_DATA |
|
|
|
PS_WAIT_FOR_TX_ACK);
|
|
|
- if (sc->imask & ATH9K_INT_TIM_TIMER) {
|
|
|
- sc->imask &= ~ATH9K_INT_TIM_TIMER;
|
|
|
+ if (ah->imask & ATH9K_INT_TIM_TIMER) {
|
|
|
+ ah->imask &= ~ATH9K_INT_TIM_TIMER;
|
|
|
ath9k_hw_set_interrupts(sc->sc_ah,
|
|
|
- sc->imask);
|
|
|
+ ah->imask);
|
|
|
}
|
|
|
}
|
|
|
}
|