* [ath9k-devel] [PATCH v3 1/4] ath9k: advertise p2p dev support when chanctx
@ 2015-07-21 9:11 Janusz Dziedzic
2015-07-21 9:11 ` [ath9k-devel] [PATCH v3 2/4] ath9k: handle RoC cancel correctly Janusz Dziedzic
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Janusz Dziedzic @ 2015-07-21 9:11 UTC (permalink / raw)
To: ath9k-devel
Advertise p2p device support when ath9k loaded with
use_chanctx=1.
This will fix problem, when first interface is an AP
and next we would like to run p2p_find.
Before p2p find (scan phase) failed with EOPNOTSUPP.
Signed-off-by: Janusz Dziedzic <janusz.dziedzic@tieto.com>
---
drivers/net/wireless/ath/ath9k/init.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
index eff0e53..89a457d 100644
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
@@ -736,13 +736,14 @@ static const struct ieee80211_iface_limit if_limits_multi[] = {
BIT(NL80211_IFTYPE_P2P_CLIENT) |
BIT(NL80211_IFTYPE_P2P_GO) },
{ .max = 1, .types = BIT(NL80211_IFTYPE_ADHOC) },
+ { .max = 1, .types = BIT(NL80211_IFTYPE_P2P_DEVICE) },
};
static const struct ieee80211_iface_combination if_comb_multi[] = {
{
.limits = if_limits_multi,
.n_limits = ARRAY_SIZE(if_limits_multi),
- .max_interfaces = 2,
+ .max_interfaces = 3,
.num_different_channels = 2,
.beacon_int_infra_match = true,
},
@@ -855,6 +856,10 @@ static void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
BIT(NL80211_IFTYPE_MESH_POINT) |
BIT(NL80211_IFTYPE_WDS);
+ if (ath9k_is_chanctx_enabled())
+ hw->wiphy->interface_modes |=
+ BIT(NL80211_IFTYPE_P2P_DEVICE);
+
hw->wiphy->iface_combinations = if_comb;
hw->wiphy->n_iface_combinations = ARRAY_SIZE(if_comb);
}
--
1.9.1
^ permalink raw reply related [flat|nested] 5+ messages in thread* [ath9k-devel] [PATCH v3 2/4] ath9k: handle RoC cancel correctly 2015-07-21 9:11 [ath9k-devel] [PATCH v3 1/4] ath9k: advertise p2p dev support when chanctx Janusz Dziedzic @ 2015-07-21 9:11 ` Janusz Dziedzic 2015-07-21 9:11 ` [ath9k-devel] [PATCH v3 3/4] ath9k: setup rxfilter for all chanctx Janusz Dziedzic ` (2 subsequent siblings) 3 siblings, 0 replies; 5+ messages in thread From: Janusz Dziedzic @ 2015-07-21 9:11 UTC (permalink / raw) To: ath9k-devel In case we will get ROC cancel from mac80211 we should not call ieee80211_remain_on_channel_expired(). In other case I hit such warning on MIPS and p2p negotiation failed (tested with use_chanctx=1). ath: phy0: Starting RoC period ath: phy0: Channel definition created: 2412 MHz ath: phy0: Assigned next_chan to 2412 MHz ath: phy0: Offchannel duration for chan 2412 MHz : 506632 ath: phy0: ath_chanctx_set_next: current: 2412 MHz, next: 2412 MHz ath: phy0: Stopping current chanctx: 2412 ath: phy0: Flush timeout: 200 ath: phy0: ath_chanctx_set_next: Set channel 2412 MHz ath: phy0: Set channel: 2412 MHz width: 0 ath: phy0: Reset to 2412 MHz, HT40: 0 fastcc: 0 ath: phy0: cur_chan: 2412 MHz, event: ATH_CHANCTX_EVENT_TSF_TIMER, state: ATH_CHANCTX_STATE_IDLE ath: phy0: ath_offchannel_channel_change: offchannel state: ATH_OFFCHANNEL_ROC_START ath: phy0: cur_chan: 2412 MHz, event: ATH_CHANCTX_EVENT_SWITCH, state: ATH_CHANCTX_STATE_IDLE ath: phy0: Cancel RoC ath: phy0: RoC aborted ath: phy0: RoC request on vif: 00:03:7f:4e:a0:cd, type: 1 duration: 500 ath: phy0: Starting RoC period ath: phy0: Channel definition created: 2412 MHz ath: phy0: Assigned next_chan to 2412 MHz ath: phy0: Offchannel duration for chan 2412 MHz : 506705 ath: phy0: ath_chanctx_set_next: current: 2412 MHz, next: 2412 MHz ath: phy0: ath_offchannel_channel_change: offchannel state: ATH_OFFCHANNEL_ROC_START ath: phy0: cur_chan: 2412 MHz, event: ATH_CHANCTX_EVENT_SWITCH, state: ATH_CHANCTX_STATE_IDLE ------------[ cut here ]------------ WARNING: CPU: 0 PID: 3312 at drivers/net/wireless/ath/ath9k/main.c:2319 Modules linked in: ath9k ath9k_common ath9k_hw ath mac80211 cfg80211 Signed-off-by: Janusz Dziedzic <janusz.dziedzic@tieto.com> --- drivers/net/wireless/ath/ath9k/ath9k.h | 9 ++++++++- drivers/net/wireless/ath/ath9k/channel.c | 23 ++++++++++++++++------- drivers/net/wireless/ath/ath9k/main.c | 4 ++-- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h index a7a81b3..db7a7b6 100644 --- a/drivers/net/wireless/ath/ath9k/ath9k.h +++ b/drivers/net/wireless/ath/ath9k/ath9k.h @@ -410,6 +410,12 @@ enum ath_offchannel_state { ATH_OFFCHANNEL_ROC_DONE, }; +enum ath_roc_complete_reason { + ATH_ROC_COMPLETE_EXPIRE, + ATH_ROC_COMPLETE_ABORT, + ATH_ROC_COMPLETE_CANCEL, +}; + struct ath_offchannel { struct ath_chanctx chan; struct timer_list timer; @@ -471,7 +477,8 @@ void ath_chanctx_event(struct ath_softc *sc, struct ieee80211_vif *vif, void ath_chanctx_set_next(struct ath_softc *sc, bool force); void ath_offchannel_next(struct ath_softc *sc); void ath_scan_complete(struct ath_softc *sc, bool abort); -void ath_roc_complete(struct ath_softc *sc, bool abort); +void ath_roc_complete(struct ath_softc *sc, + enum ath_roc_complete_reason reason); struct ath_chanctx* ath_is_go_chanctx_present(struct ath_softc *sc); #else diff --git a/drivers/net/wireless/ath/ath9k/channel.c b/drivers/net/wireless/ath/ath9k/channel.c index 2066650..90f5773 100644 --- a/drivers/net/wireless/ath/ath9k/channel.c +++ b/drivers/net/wireless/ath/ath9k/channel.c @@ -915,18 +915,27 @@ void ath_offchannel_next(struct ath_softc *sc) } } -void ath_roc_complete(struct ath_softc *sc, bool abort) +void ath_roc_complete(struct ath_softc *sc, enum ath_roc_complete_reason reason) { struct ath_common *common = ath9k_hw_common(sc->sc_ah); - if (abort) + sc->offchannel.roc_vif = NULL; + sc->offchannel.roc_chan = NULL; + + switch (reason) { + case ATH_ROC_COMPLETE_ABORT: ath_dbg(common, CHAN_CTX, "RoC aborted\n"); - else + ieee80211_remain_on_channel_expired(sc->hw); + break; + case ATH_ROC_COMPLETE_EXPIRE: ath_dbg(common, CHAN_CTX, "RoC expired\n"); + ieee80211_remain_on_channel_expired(sc->hw); + break; + case ATH_ROC_COMPLETE_CANCEL: + ath_dbg(common, CHAN_CTX, "RoC canceled\n"); + break; + } - sc->offchannel.roc_vif = NULL; - sc->offchannel.roc_chan = NULL; - ieee80211_remain_on_channel_expired(sc->hw); ath_offchannel_next(sc); ath9k_ps_restore(sc); } @@ -1058,7 +1067,7 @@ static void ath_offchannel_timer(unsigned long data) case ATH_OFFCHANNEL_ROC_START: case ATH_OFFCHANNEL_ROC_WAIT: sc->offchannel.state = ATH_OFFCHANNEL_ROC_DONE; - ath_roc_complete(sc, false); + ath_roc_complete(sc, ATH_ROC_COMPLETE_EXPIRE); break; default: break; diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index cfd45cb..b7b77e0 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c @@ -2246,7 +2246,7 @@ static void ath9k_cancel_pending_offchannel(struct ath_softc *sc) del_timer_sync(&sc->offchannel.timer); if (sc->offchannel.state >= ATH_OFFCHANNEL_ROC_START) - ath_roc_complete(sc, true); + ath_roc_complete(sc, ATH_ROC_COMPLETE_ABORT); } if (test_bit(ATH_OP_SCANNING, &common->op_flags)) { @@ -2355,7 +2355,7 @@ static int ath9k_cancel_remain_on_channel(struct ieee80211_hw *hw) if (sc->offchannel.roc_vif) { if (sc->offchannel.state >= ATH_OFFCHANNEL_ROC_START) - ath_roc_complete(sc, true); + ath_roc_complete(sc, ATH_ROC_COMPLETE_CANCEL); } mutex_unlock(&sc->mutex); -- 1.9.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [ath9k-devel] [PATCH v3 3/4] ath9k: setup rxfilter for all chanctx 2015-07-21 9:11 [ath9k-devel] [PATCH v3 1/4] ath9k: advertise p2p dev support when chanctx Janusz Dziedzic 2015-07-21 9:11 ` [ath9k-devel] [PATCH v3 2/4] ath9k: handle RoC cancel correctly Janusz Dziedzic @ 2015-07-21 9:11 ` Janusz Dziedzic 2015-07-21 9:11 ` [ath9k-devel] [PATCH v3 4/4] ath9k: setup rxfilter when offchannel Janusz Dziedzic 2015-08-06 7:11 ` [ath9k-devel] [v3, 1/4] ath9k: advertise p2p dev support when chanctx Kalle Valo 3 siblings, 0 replies; 5+ messages in thread From: Janusz Dziedzic @ 2015-07-21 9:11 UTC (permalink / raw) To: ath9k-devel While mac80211 setup this per HW, set same rxfilter configuration for all chanctx. Signed-off-by: Janusz Dziedzic <janusz.dziedzic@tieto.com> --- drivers/net/wireless/ath/ath9k/main.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index b7b77e0..3de829f 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c @@ -1459,13 +1459,15 @@ static void ath9k_configure_filter(struct ieee80211_hw *hw, u64 multicast) { struct ath_softc *sc = hw->priv; + struct ath_chanctx *ctx; u32 rfilt; changed_flags &= SUPPORTED_FILTERS; *total_flags &= SUPPORTED_FILTERS; spin_lock_bh(&sc->chan_lock); - sc->cur_chan->rxfilter = *total_flags; + ath_for_each_chanctx(sc, ctx) + ctx->rxfilter = *total_flags; spin_unlock_bh(&sc->chan_lock); ath9k_ps_wakeup(sc); -- 1.9.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [ath9k-devel] [PATCH v3 4/4] ath9k: setup rxfilter when offchannel 2015-07-21 9:11 [ath9k-devel] [PATCH v3 1/4] ath9k: advertise p2p dev support when chanctx Janusz Dziedzic 2015-07-21 9:11 ` [ath9k-devel] [PATCH v3 2/4] ath9k: handle RoC cancel correctly Janusz Dziedzic 2015-07-21 9:11 ` [ath9k-devel] [PATCH v3 3/4] ath9k: setup rxfilter for all chanctx Janusz Dziedzic @ 2015-07-21 9:11 ` Janusz Dziedzic 2015-08-06 7:11 ` [ath9k-devel] [v3, 1/4] ath9k: advertise p2p dev support when chanctx Kalle Valo 3 siblings, 0 replies; 5+ messages in thread From: Janusz Dziedzic @ 2015-07-21 9:11 UTC (permalink / raw) To: ath9k-devel Setup rxfiler correctly for offchannel ctx. This fix problem we didn't configure rxfilter, next didn't receive probe requests and next failed p2p_find. This was seen when ath9k loaded with use_chanctx=1 Signed-off-by: Janusz Dziedzic <janusz.dziedzic@tieto.com> --- drivers/net/wireless/ath/ath9k/main.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index 3de829f..c27143b 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c @@ -1468,6 +1468,9 @@ static void ath9k_configure_filter(struct ieee80211_hw *hw, spin_lock_bh(&sc->chan_lock); ath_for_each_chanctx(sc, ctx) ctx->rxfilter = *total_flags; +#ifdef CONFIG_ATH9K_CHANNEL_CONTEXT + sc->offchannel.chan.rxfilter = *total_flags; +#endif spin_unlock_bh(&sc->chan_lock); ath9k_ps_wakeup(sc); -- 1.9.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [ath9k-devel] [v3, 1/4] ath9k: advertise p2p dev support when chanctx 2015-07-21 9:11 [ath9k-devel] [PATCH v3 1/4] ath9k: advertise p2p dev support when chanctx Janusz Dziedzic ` (2 preceding siblings ...) 2015-07-21 9:11 ` [ath9k-devel] [PATCH v3 4/4] ath9k: setup rxfilter when offchannel Janusz Dziedzic @ 2015-08-06 7:11 ` Kalle Valo 3 siblings, 0 replies; 5+ messages in thread From: Kalle Valo @ 2015-08-06 7:11 UTC (permalink / raw) To: ath9k-devel > Advertise p2p device support when ath9k loaded with > use_chanctx=1. > > This will fix problem, when first interface is an AP > and next we would like to run p2p_find. > Before p2p find (scan phase) failed with EOPNOTSUPP. > > Signed-off-by: Janusz Dziedzic <janusz.dziedzic@tieto.com> Thanks, 4 patches applied to wireless-drivers-next.git: eb61f9f623f7 ath9k: advertise p2p dev support when chanctx d83520b7cd6e ath9k: handle RoC cancel correctly f3771c08282a ath9k: setup rxfilter for all chanctx 1738203ee729 ath9k: setup rxfilter when offchannel Kalle Valo ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2015-08-06 7:11 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-07-21 9:11 [ath9k-devel] [PATCH v3 1/4] ath9k: advertise p2p dev support when chanctx Janusz Dziedzic 2015-07-21 9:11 ` [ath9k-devel] [PATCH v3 2/4] ath9k: handle RoC cancel correctly Janusz Dziedzic 2015-07-21 9:11 ` [ath9k-devel] [PATCH v3 3/4] ath9k: setup rxfilter for all chanctx Janusz Dziedzic 2015-07-21 9:11 ` [ath9k-devel] [PATCH v3 4/4] ath9k: setup rxfilter when offchannel Janusz Dziedzic 2015-08-06 7:11 ` [ath9k-devel] [v3, 1/4] ath9k: advertise p2p dev support when chanctx Kalle Valo
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox