|
|
|
@ -1519,17 +1519,58 @@ |
|
|
|
|
ieee80211_queue_delayed_work(sc->hw, &sc->hw_pll_work,
|
|
|
|
|
msecs_to_jiffies(ATH_PLL_WORK_INTERVAL));
|
|
|
|
|
|
|
|
|
|
@@ -238,9 +237,6 @@ static bool ath_complete_reset(struct at
|
|
|
|
|
ath_restart_work(sc);
|
|
|
|
|
@@ -209,6 +208,7 @@ static bool ath_complete_reset(struct at
|
|
|
|
|
struct ath_hw *ah = sc->sc_ah;
|
|
|
|
|
struct ath_common *common = ath9k_hw_common(ah);
|
|
|
|
|
unsigned long flags;
|
|
|
|
|
+ int i;
|
|
|
|
|
|
|
|
|
|
if (ath_startrecv(sc) != 0) {
|
|
|
|
|
ath_err(common, "Unable to restart recv logic\n");
|
|
|
|
|
@@ -236,10 +236,16 @@ static bool ath_complete_reset(struct at
|
|
|
|
|
}
|
|
|
|
|
work:
|
|
|
|
|
ath_restart_work(sc);
|
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
- if ((ah->caps.hw_caps & ATH9K_HW_CAP_ANT_DIV_COMB) && sc->ant_rx != 3)
|
|
|
|
|
- ath_ant_comb_update(sc);
|
|
|
|
|
-
|
|
|
|
|
+ for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
|
|
|
|
|
+ if (!ATH_TXQ_SETUP(sc, i))
|
|
|
|
|
+ continue;
|
|
|
|
|
+
|
|
|
|
|
+ spin_lock_bh(&sc->tx.txq[i].axq_lock);
|
|
|
|
|
+ ath_txq_schedule(sc, &sc->tx.txq[i]);
|
|
|
|
|
+ spin_unlock_bh(&sc->tx.txq[i].axq_lock);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
ieee80211_wake_queues(sc->hw);
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
@@ -966,6 +962,8 @@ static int ath9k_add_interface(struct ie
|
|
|
|
|
@@ -543,21 +549,10 @@ chip_reset:
|
|
|
|
|
|
|
|
|
|
static int ath_reset(struct ath_softc *sc)
|
|
|
|
|
{
|
|
|
|
|
- int i, r;
|
|
|
|
|
+ int r;
|
|
|
|
|
|
|
|
|
|
ath9k_ps_wakeup(sc);
|
|
|
|
|
-
|
|
|
|
|
r = ath_reset_internal(sc, NULL);
|
|
|
|
|
-
|
|
|
|
|
- for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
|
|
|
|
|
- if (!ATH_TXQ_SETUP(sc, i))
|
|
|
|
|
- continue;
|
|
|
|
|
-
|
|
|
|
|
- spin_lock_bh(&sc->tx.txq[i].axq_lock);
|
|
|
|
|
- ath_txq_schedule(sc, &sc->tx.txq[i]);
|
|
|
|
|
- spin_unlock_bh(&sc->tx.txq[i].axq_lock);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
ath9k_ps_restore(sc);
|
|
|
|
|
|
|
|
|
|
return r;
|
|
|
|
|
@@ -966,6 +961,8 @@ static int ath9k_add_interface(struct ie
|
|
|
|
|
struct ath_softc *sc = hw->priv;
|
|
|
|
|
struct ath_hw *ah = sc->sc_ah;
|
|
|
|
|
struct ath_common *common = ath9k_hw_common(ah);
|
|
|
|
@ -1538,7 +1579,7 @@ |
|
|
|
|
|
|
|
|
|
mutex_lock(&sc->mutex);
|
|
|
|
|
|
|
|
|
|
@@ -979,6 +977,12 @@ static int ath9k_add_interface(struct ie
|
|
|
|
|
@@ -979,6 +976,12 @@ static int ath9k_add_interface(struct ie
|
|
|
|
|
if (ath9k_uses_beacons(vif->type))
|
|
|
|
|
ath9k_beacon_assign_slot(sc, vif);
|
|
|
|
|
|
|
|
|
@ -1551,7 +1592,7 @@ |
|
|
|
|
mutex_unlock(&sc->mutex);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
@@ -1016,6 +1020,7 @@ static void ath9k_remove_interface(struc
|
|
|
|
|
@@ -1016,6 +1019,7 @@ static void ath9k_remove_interface(struc
|
|
|
|
|
{
|
|
|
|
|
struct ath_softc *sc = hw->priv;
|
|
|
|
|
struct ath_common *common = ath9k_hw_common(sc->sc_ah);
|
|
|
|
@ -1559,7 +1600,7 @@ |
|
|
|
|
|
|
|
|
|
ath_dbg(common, CONFIG, "Detach Interface\n");
|
|
|
|
|
|
|
|
|
|
@@ -1030,6 +1035,8 @@ static void ath9k_remove_interface(struc
|
|
|
|
|
@@ -1030,6 +1034,8 @@ static void ath9k_remove_interface(struc
|
|
|
|
|
ath9k_calculate_summary_state(hw, NULL);
|
|
|
|
|
ath9k_ps_restore(sc);
|
|
|
|
|
|
|
|
|
@ -1568,7 +1609,7 @@ |
|
|
|
|
mutex_unlock(&sc->mutex);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -1193,8 +1200,6 @@ static int ath9k_config(struct ieee80211
|
|
|
|
|
@@ -1193,8 +1199,6 @@ static int ath9k_config(struct ieee80211
|
|
|
|
|
|
|
|
|
|
if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) || reset_channel) {
|
|
|
|
|
struct ieee80211_channel *curchan = hw->conf.chandef.chan;
|
|
|
|
@ -1577,7 +1618,7 @@ |
|
|
|
|
int pos = curchan->hw_value;
|
|
|
|
|
int old_pos = -1;
|
|
|
|
|
unsigned long flags;
|
|
|
|
|
@@ -1202,8 +1207,8 @@ static int ath9k_config(struct ieee80211
|
|
|
|
|
@@ -1202,8 +1206,8 @@ static int ath9k_config(struct ieee80211
|
|
|
|
|
if (ah->curchan)
|
|
|
|
|
old_pos = ah->curchan - &ah->channels[0];
|
|
|
|
|
|
|
|
|
@ -1588,7 +1629,7 @@ |
|
|
|
|
|
|
|
|
|
/* update survey stats for the old channel before switching */
|
|
|
|
|
spin_lock_irqsave(&common->cc_lock, flags);
|
|
|
|
|
@@ -1211,7 +1216,7 @@ static int ath9k_config(struct ieee80211
|
|
|
|
|
@@ -1211,7 +1215,7 @@ static int ath9k_config(struct ieee80211
|
|
|
|
|
spin_unlock_irqrestore(&common->cc_lock, flags);
|
|
|
|
|
|
|
|
|
|
ath9k_cmn_update_ichannel(&sc->sc_ah->channels[pos],
|
|
|
|
@ -1597,7 +1638,7 @@ |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* If the operating channel changes, change the survey in-use flags
|
|
|
|
|
@@ -1374,9 +1379,6 @@ static void ath9k_sta_notify(struct ieee
|
|
|
|
|
@@ -1374,9 +1378,6 @@ static void ath9k_sta_notify(struct ieee
|
|
|
|
|
struct ath_softc *sc = hw->priv;
|
|
|
|
|
struct ath_node *an = (struct ath_node *) sta->drv_priv;
|
|
|
|
|
|
|
|
|
@ -1607,7 +1648,7 @@ |
|
|
|
|
switch (cmd) {
|
|
|
|
|
case STA_NOTIFY_SLEEP:
|
|
|
|
|
an->sleeping = true;
|
|
|
|
|
@@ -2094,7 +2096,7 @@ static void ath9k_wow_add_pattern(struct
|
|
|
|
|
@@ -2094,7 +2095,7 @@ static void ath9k_wow_add_pattern(struct
|
|
|
|
|
{
|
|
|
|
|
struct ath_hw *ah = sc->sc_ah;
|
|
|
|
|
struct ath9k_wow_pattern *wow_pattern = NULL;
|
|
|
|
|