* [PATCH 0/3] ath9k patches
@ 2014-09-05 4:20 Sujith Manoharan
2014-09-05 4:20 ` [PATCH 1/3] ath9k: Use a subroutine to assign HW queues Sujith Manoharan
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Sujith Manoharan @ 2014-09-05 4:20 UTC (permalink / raw)
To: John Linville; +Cc: linux-wireless, ath9k-devel
From: Sujith Manoharan <c_manoha@qca.qualcomm.com>
A few more MCC fixes for 3.18.
Sujith Manoharan (3):
ath9k: Use a subroutine to assign HW queues
ath9k: Fix offchannel operation
ath9k: Fix MCC scanning
drivers/net/wireless/ath/ath9k/ath9k.h | 1 +
drivers/net/wireless/ath/ath9k/channel.c | 8 +++++++-
drivers/net/wireless/ath/ath9k/init.c | 2 +-
drivers/net/wireless/ath/ath9k/main.c | 33 ++++++++++++++++----------------
4 files changed, 26 insertions(+), 18 deletions(-)
--
2.1.0
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH 1/3] ath9k: Use a subroutine to assign HW queues
2014-09-05 4:20 [PATCH 0/3] ath9k patches Sujith Manoharan
@ 2014-09-05 4:20 ` Sujith Manoharan
2014-09-05 4:20 ` [PATCH 2/3] ath9k: Fix offchannel operation Sujith Manoharan
2014-09-05 4:20 ` [PATCH 3/3] ath9k: Fix MCC scanning Sujith Manoharan
2 siblings, 0 replies; 7+ messages in thread
From: Sujith Manoharan @ 2014-09-05 4:20 UTC (permalink / raw)
To: John Linville; +Cc: linux-wireless, ath9k-devel
From: Sujith Manoharan <c_manoha@qca.qualcomm.com>
Reduces code duplication.
Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath9k/init.c | 2 +-
drivers/net/wireless/ath/ath9k/main.c | 33 +++++++++++++++++----------------
2 files changed, 18 insertions(+), 17 deletions(-)
diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
index 1950c04..156a944 100644
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
@@ -811,7 +811,7 @@ static void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
/* allow 4 queues per channel context +
* 1 cab queue + 1 offchannel tx queue
*/
- hw->queues = 10;
+ hw->queues = ATH9K_NUM_TX_QUEUES;
/* last queue for offchannel */
hw->offchannel_tx_hw_queue = hw->queues - 1;
hw->max_rates = 4;
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index cdf1e7d..1bc2369 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -1104,6 +1104,20 @@ void ath9k_calculate_summary_state(struct ath_softc *sc,
ath9k_ps_restore(sc);
}
+static void ath9k_assign_hw_queues(struct ieee80211_hw *hw,
+ struct ieee80211_vif *vif)
+{
+ int i;
+
+ for (i = 0; i < IEEE80211_NUM_ACS; i++)
+ vif->hw_queue[i] = i;
+
+ if (vif->type == NL80211_IFTYPE_AP)
+ vif->cab_queue = hw->queues - 2;
+ else
+ vif->cab_queue = IEEE80211_INVAL_HW_QUEUE;
+}
+
static int ath9k_add_interface(struct ieee80211_hw *hw,
struct ieee80211_vif *vif)
{
@@ -1112,7 +1126,6 @@ static int ath9k_add_interface(struct ieee80211_hw *hw,
struct ath_common *common = ath9k_hw_common(ah);
struct ath_vif *avp = (void *)vif->drv_priv;
struct ath_node *an = &avp->mcast_node;
- int i;
mutex_lock(&sc->mutex);
@@ -1135,12 +1148,8 @@ static int ath9k_add_interface(struct ieee80211_hw *hw,
avp->chanctx = sc->cur_chan;
list_add_tail(&avp->list, &avp->chanctx->vifs);
}
- for (i = 0; i < IEEE80211_NUM_ACS; i++)
- vif->hw_queue[i] = i;
- if (vif->type == NL80211_IFTYPE_AP)
- vif->cab_queue = hw->queues - 2;
- else
- vif->cab_queue = IEEE80211_INVAL_HW_QUEUE;
+
+ ath9k_assign_hw_queues(hw, vif);
an->sc = sc;
an->sta = NULL;
@@ -1160,7 +1169,6 @@ static int ath9k_change_interface(struct ieee80211_hw *hw,
struct ath_softc *sc = hw->priv;
struct ath_common *common = ath9k_hw_common(sc->sc_ah);
struct ath_vif *avp = (void *)vif->drv_priv;
- int i;
mutex_lock(&sc->mutex);
@@ -1180,14 +1188,7 @@ static int ath9k_change_interface(struct ieee80211_hw *hw,
if (ath9k_uses_beacons(vif->type))
ath9k_beacon_assign_slot(sc, vif);
- for (i = 0; i < IEEE80211_NUM_ACS; i++)
- vif->hw_queue[i] = i;
-
- if (vif->type == NL80211_IFTYPE_AP)
- vif->cab_queue = hw->queues - 2;
- else
- vif->cab_queue = IEEE80211_INVAL_HW_QUEUE;
-
+ ath9k_assign_hw_queues(hw, vif);
ath9k_calculate_summary_state(sc, avp->chanctx);
mutex_unlock(&sc->mutex);
--
2.1.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH 2/3] ath9k: Fix offchannel operation
2014-09-05 4:20 [PATCH 0/3] ath9k patches Sujith Manoharan
2014-09-05 4:20 ` [PATCH 1/3] ath9k: Use a subroutine to assign HW queues Sujith Manoharan
@ 2014-09-05 4:20 ` Sujith Manoharan
2014-09-05 4:20 ` [PATCH 3/3] ath9k: Fix MCC scanning Sujith Manoharan
2 siblings, 0 replies; 7+ messages in thread
From: Sujith Manoharan @ 2014-09-05 4:20 UTC (permalink / raw)
To: John Linville; +Cc: linux-wireless, ath9k-devel
From: Sujith Manoharan <c_manoha@qca.qualcomm.com>
When multiple channel contexts are active, an offchannel
request will not be handled immediately, but will be
queued to be handled later. But, currently, the channel definition
is not copied to the local offchannel state. This
breaks operation like scanning when MCC is active.
Fix this by storing the offchannel parameters properly.
Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath9k/channel.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/net/wireless/ath/ath9k/channel.c b/drivers/net/wireless/ath/ath9k/channel.c
index e73d305..a31f526 100644
--- a/drivers/net/wireless/ath/ath9k/channel.c
+++ b/drivers/net/wireless/ath/ath9k/channel.c
@@ -588,7 +588,11 @@ static void ath_chanctx_switch(struct ath_softc *sc, struct ath_chanctx *ctx,
if (test_bit(ATH_OP_MULTI_CHANNEL, &common->op_flags) &&
(sc->cur_chan != ctx) && (ctx == &sc->offchannel.chan)) {
sc->sched.offchannel_pending = true;
+ if (chandef)
+ ctx->chandef = *chandef;
spin_unlock_bh(&sc->chan_lock);
+ ath_dbg(common, CHAN_CTX,
+ "Set offchannel_pending to true\n");
return;
}
--
2.1.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH 3/3] ath9k: Fix MCC scanning
2014-09-05 4:20 [PATCH 0/3] ath9k patches Sujith Manoharan
2014-09-05 4:20 ` [PATCH 1/3] ath9k: Use a subroutine to assign HW queues Sujith Manoharan
2014-09-05 4:20 ` [PATCH 2/3] ath9k: Fix offchannel operation Sujith Manoharan
@ 2014-09-05 4:20 ` Sujith Manoharan
2 siblings, 0 replies; 7+ messages in thread
From: Sujith Manoharan @ 2014-09-05 4:20 UTC (permalink / raw)
To: John Linville; +Cc: linux-wireless, ath9k-devel
From: Sujith Manoharan <c_manoha@qca.qualcomm.com>
Scanning is curently broken when two channel contexts
are active. For example in a P2P-GO/STA setup, the
offchannel timer allows HZ / 10 to elapse before initiating
a switch to the next scan channel from the current operating
channel, which in this case would be the P2P-GO context.
But, the channel context timer might decide to switch
to the STA context when an SWBA comes early and a beacon
is sent out. Since pending offchannel requests are processed
in EVENT_BEACON_PREPARE, this causes inconsistent scanning.
Fix this by making sure that a context switch happens
before processing the pending offchannel request. This
also makes sure that active channel contexts will always
have higher priority than offchannel operations and the
scan sequence looks like this:
p2p-go, sta, p2p-go, offchannel, p2p-go, sta, p2p-go, offchannel,.....
The oper-channel is p2p-go, so the STA context has to
switch to p2p-go again before switching offchannel.
Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath9k/ath9k.h | 1 +
drivers/net/wireless/ath/ath9k/channel.c | 4 +++-
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h
index 46a1d2e..0c071b0 100644
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
@@ -378,6 +378,7 @@ enum ath_chanctx_state {
struct ath_chanctx_sched {
bool beacon_pending;
bool offchannel_pending;
+ bool wait_switch;
enum ath_chanctx_state state;
u8 beacon_miss;
diff --git a/drivers/net/wireless/ath/ath9k/channel.c b/drivers/net/wireless/ath/ath9k/channel.c
index a31f526..522894b 100644
--- a/drivers/net/wireless/ath/ath9k/channel.c
+++ b/drivers/net/wireless/ath/ath9k/channel.c
@@ -333,7 +333,7 @@ void ath_chanctx_event(struct ath_softc *sc, struct ieee80211_vif *vif,
break;
}
- if (sc->sched.offchannel_pending) {
+ if (sc->sched.offchannel_pending && !sc->sched.wait_switch) {
sc->sched.offchannel_pending = false;
sc->next_chan = &sc->offchannel.chan;
sc->sched.state = ATH_CHANCTX_STATE_WAIT_FOR_BEACON;
@@ -490,6 +490,7 @@ void ath_chanctx_event(struct ath_softc *sc, struct ieee80211_vif *vif,
"Move chanctx state to WAIT_FOR_TIMER (event SWITCH)\n");
sc->sched.state = ATH_CHANCTX_STATE_WAIT_FOR_TIMER;
+ sc->sched.wait_switch = false;
tsf_time = TU_TO_USEC(cur_conf->beacon_interval) / 2;
if (sc->sched.beacon_miss >= 2) {
@@ -588,6 +589,7 @@ static void ath_chanctx_switch(struct ath_softc *sc, struct ath_chanctx *ctx,
if (test_bit(ATH_OP_MULTI_CHANNEL, &common->op_flags) &&
(sc->cur_chan != ctx) && (ctx == &sc->offchannel.chan)) {
sc->sched.offchannel_pending = true;
+ sc->sched.wait_switch = true;
if (chandef)
ctx->chandef = *chandef;
spin_unlock_bh(&sc->chan_lock);
--
2.1.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 0/3] ath9k patches
@ 2014-10-08 3:42 Sujith Manoharan
0 siblings, 0 replies; 7+ messages in thread
From: Sujith Manoharan @ 2014-10-08 3:42 UTC (permalink / raw)
To: John Linville; +Cc: linux-wireless, ath9k-devel
From: Sujith Manoharan <c_manoha@qca.qualcomm.com>
Fixes related to reset.
Sujith Manoharan (3):
ath9k: Unify reset API
ath9k: Set ATH_OP_HW_RESET before HW reset
ath9k: Disable beacon tasklet during reset
drivers/net/wireless/ath/ath9k/ath9k.h | 3 +--
drivers/net/wireless/ath/ath9k/channel.c | 2 +-
drivers/net/wireless/ath/ath9k/main.c | 26 +++++++++++++++++++++-----
drivers/net/wireless/ath/ath9k/tx99.c | 4 ++--
4 files changed, 25 insertions(+), 10 deletions(-)
--
2.1.2
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 0/3] ath9k patches
@ 2014-02-04 3:07 Sujith Manoharan
0 siblings, 0 replies; 7+ messages in thread
From: Sujith Manoharan @ 2014-02-04 3:07 UTC (permalink / raw)
To: John Linville; +Cc: linux-wireless, ath9k-devel
From: Sujith Manoharan <c_manoha@qca.qualcomm.com>
Hi,
Pending patches for ath9k, rebased over 3.14.0-rc1.
Sujith
Sujith Manoharan (3):
ath9k: Fix build error on ARM
ath9k: Do not support PowerSave by default
ath9k: Fix TX power calculation
drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | 4 ++++
drivers/net/wireless/ath/ath9k/hw.c | 5 ++---
drivers/net/wireless/ath/ath9k/init.c | 8 +++++++-
3 files changed, 13 insertions(+), 4 deletions(-)
--
1.8.5.3
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 0/3] ath9k patches
@ 2013-06-24 6:08 Sujith Manoharan
0 siblings, 0 replies; 7+ messages in thread
From: Sujith Manoharan @ 2013-06-24 6:08 UTC (permalink / raw)
To: John Linville; +Cc: linux-wireless
From: Sujith Manoharan <c_manoha@qca.qualcomm.com>
This series adds initial support for AR9462 2.1
Sujith Manoharan (3):
ath9k: Add version macros for AR9462 2.1
ath9k: Add initvals for AR9462 2.1
ath9k: Program initvals for AR9462 2.1
drivers/net/wireless/ath/ath9k/ar9003_hw.c | 59 +-
.../net/wireless/ath/ath9k/ar9462_2p1_initvals.h | 1774 ++++++++++++++++++++
drivers/net/wireless/ath/ath9k/reg.h | 13 +-
3 files changed, 1842 insertions(+), 4 deletions(-)
create mode 100644 drivers/net/wireless/ath/ath9k/ar9462_2p1_initvals.h
--
1.8.3.1
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2014-10-08 3:41 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-09-05 4:20 [PATCH 0/3] ath9k patches Sujith Manoharan
2014-09-05 4:20 ` [PATCH 1/3] ath9k: Use a subroutine to assign HW queues Sujith Manoharan
2014-09-05 4:20 ` [PATCH 2/3] ath9k: Fix offchannel operation Sujith Manoharan
2014-09-05 4:20 ` [PATCH 3/3] ath9k: Fix MCC scanning Sujith Manoharan
-- strict thread matches above, loose matches on Subject: below --
2014-10-08 3:42 [PATCH 0/3] ath9k patches Sujith Manoharan
2014-02-04 3:07 Sujith Manoharan
2013-06-24 6:08 Sujith Manoharan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox