mac80211: Add extended ROC support for 40-80 MHz bandwidth
Subsystems (16)
v3 cover mac80211: Add extended ROC support for 40-80 MHz bandwidth
This patch add extended roc support for 40 and 80 Mhz bandwidth. It helps to handle remain on channel for wide band scan in ath11k.
---
v3:
- addressed Johannes comment to use ROC instead of SCAN command and changed cover letter title from 'add Wide Band Scan support' to 'mac80211: Add extended ROC support for 40-80 MHz bandwidth'
v2:
- updated message on cover letter.
---
P Praneesh (3):
nl80211: Extended ROC support for 40-80 MHz bandwidth
ath11k: Refactor update channel list function
ath11k: Add ROC support for wide band scan
drivers/net/wireless/ath/ath10k/mac.c | 3 +- drivers/net/wireless/ath/ath11k/core.c | 1 + drivers/net/wireless/ath/ath11k/mac.c | 203 ++++++++++++++++++--- drivers/net/wireless/ath/ath11k/reg.c | 99 +--------- drivers/net/wireless/ath/ath11k/reg.h | 1 - drivers/net/wireless/ath/ath11k/wmi.c | 160 +++++++++++++++- drivers/net/wireless/ath/ath11k/wmi.h | 31 +++- drivers/net/wireless/ath/ath6kl/cfg80211.c | 3 +- drivers/net/wireless/ath/ath9k/main.c | 4 +- drivers/net/wireless/ath/wil6210/cfg80211.c | 3 +- .../net/wireless/broadcom/brcm80211/brcmfmac/p2p.c | 3 +- .../net/wireless/broadcom/brcm80211/brcmfmac/p2p.h | 2 +- drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 3 +- drivers/net/wireless/mac80211_hwsim.c | 3 +- drivers/net/wireless/marvell/mwifiex/cfg80211.c | 3 +- drivers/net/wireless/mediatek/mt76/mt7615/main.c | 3 +- drivers/net/wireless/microchip/wilc1000/cfg80211.c | 3 +- drivers/net/wireless/rsi/rsi_91x_mac80211.c | 3 +- drivers/net/wireless/ti/wlcore/main.c | 3 +- include/net/cfg80211.h | 2 +- include/net/mac80211.h | 2 +- net/mac80211/driver-ops.h | 6 +- net/mac80211/ieee80211_i.h | 4 +- net/mac80211/offchannel.c | 56 ++++-- net/mac80211/trace.h | 11 +- net/wireless/nl80211.c | 2 +- net/wireless/rdev-ops.h | 6 +- net/wireless/trace.h | 6 +- 28 files changed, 452 insertions(+), 177 deletions(-)
Signature · 1 line
2.7.4
PATCH v3 1/3 nl80211: Extended ROC support for 40-80 MHz bandwidth
Replace struct ieee80211_channel with struct cfg80211_chan_def in remain on channel apis, because the channel width information is needed to handle centre frequency of 80MHz, and it is available in cfg80211_chan_def.
--- drivers/net/wireless/ath/ath10k/mac.c | 3 +- drivers/net/wireless/ath/ath6kl/cfg80211.c | 3 +- drivers/net/wireless/ath/ath9k/main.c | 4 +- drivers/net/wireless/ath/wil6210/cfg80211.c | 3 +- .../net/wireless/broadcom/brcm80211/brcmfmac/p2p.c | 3 +- .../net/wireless/broadcom/brcm80211/brcmfmac/p2p.h | 2 +- drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 3 +- drivers/net/wireless/mac80211_hwsim.c | 3 +- drivers/net/wireless/marvell/mwifiex/cfg80211.c | 3 +- drivers/net/wireless/mediatek/mt76/mt7615/main.c | 3 +- drivers/net/wireless/microchip/wilc1000/cfg80211.c | 3 +- drivers/net/wireless/rsi/rsi_91x_mac80211.c | 3 +- drivers/net/wireless/ti/wlcore/main.c | 3 +- include/net/cfg80211.h | 2 +- include/net/mac80211.h | 2 +- net/mac80211/driver-ops.h | 6 +-- net/mac80211/ieee80211_i.h | 4 +- net/mac80211/offchannel.c | 56 ++++++++++++++-------- net/mac80211/trace.h | 11 +++-- net/wireless/nl80211.c | 2 +- net/wireless/rdev-ops.h | 6 +-- net/wireless/trace.h | 6 +-- 22 files changed, 82 insertions(+), 52 deletions(-)
drivers/net/wireless/ath/ath10k/mac.c +2 -1
@@ -7805,12 +7805,13 @@ static int ath10k_conf_tx(struct ieee80211_hw *hw,static int ath10k_remain_on_channel (struct ieee80211_hw *hw,struct ieee80211_vif *vif, -struct ieee80211_channel *chan, +struct cfg80211_chan_def *chandef,int duration,enum ieee80211_roc_type type) {struct ath10k *ar = hw->priv;struct ath10k_vif *arvif = (void *)vif->drv_priv; +struct ieee80211_channel *chan = chandef->chan;struct wmi_start_scan_arg arg;int ret =0 ;u32 scan_time_msec;
drivers/net/wireless/ath/ath6kl/cfg80211.c +2 -1
@@ -3023,12 +3023,13 @@ static int ath6kl_change_station(struct wiphy *wiphy, struct net_device *dev,static int ath6kl_remain_on_channel (struct wiphy *wiphy,struct wireless_dev *wdev, -struct ieee80211_channel *chan, +struct cfg80211_chan_def *chandef,unsigned int duration,u64 *cookie) {struct ath6kl_vif *vif =ath6kl_vif_from_wdev (wdev);struct ath6kl *ar =ath6kl_priv (vif->ndev); +struct ieee80211_channel *chan = chandef->chan;u32 id;/* TODO: if already pending or ongoing remain-on-channel,
drivers/net/wireless/ath/ath9k/main.c +3 -1
@@ -2466,11 +2466,13 @@ static void ath9k_cancel_hw_scan(struct ieee80211_hw *hw,static int ath9k_remain_on_channel (struct ieee80211_hw *hw,struct ieee80211_vif *vif, -struct ieee80211_channel *chan,int duration, +struct cfg80211_chan_def *chandef, +int duration,enum ieee80211_roc_type type) {struct ath_softc *sc = hw->priv;struct ath_common *common =ath9k_hw_common (sc->sc_ah); +struct ieee80211_channel *chan = chandef->chan;int ret =0 ;mutex_lock (&sc->mutex);
drivers/net/wireless/ath/wil6210/cfg80211.c +2 -1
@@ -1734,11 +1734,12 @@ static int wil_cfg80211_set_default_key(struct wiphy *wiphy,static int wil_remain_on_channel (struct wiphy *wiphy,struct wireless_dev *wdev, -struct ieee80211_channel *chan, +struct cfg80211_chan_def *chandef,unsigned int duration,u64 *cookie) {struct wil6210_priv *wil =wiphy_to_wil (wiphy); +struct ieee80211_channel *chan = chandef->chan;int rc; wil_dbg_misc(wil,
drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c +2 -1
@@ -972,10 +972,11 @@ brcmf_p2p_discover_listen(struct brcmf_p2p_info *p2p, u16 channel, u32 duration)* @cookie: cookie. */ int brcmf_p2p_remain_on_channel (struct wiphy *wiphy,struct wireless_dev *wdev, -struct ieee80211_channel *channel, +struct cfg80211_chan_def *chandef,unsigned int duration,u64 *cookie) {struct brcmf_cfg80211_info *cfg =wiphy_to_cfg (wiphy); +struct ieee80211_channel *channel = chandef->chan;struct brcmf_p2p_info *p2p = &cfg->p2p;s32 err;u16 channel_nr;
drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.h +1 -1
@@ -156,7 +156,7 @@ int brcmf_p2p_scan_prep(struct wiphy *wiphy,struct cfg80211_scan_request *request, struct brcmf_cfg80211_vif *vif);int brcmf_p2p_remain_on_channel (struct wiphy *wiphy,struct wireless_dev *wdev, -struct ieee80211_channel *channel, +struct cfg80211_chan_def *chandef,unsigned int duration,u64 *cookie); int brcmf_p2p_notify_listen_complete(struct brcmf_if *ifp, const struct brcmf_event_msg *e,
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +2 -1
@@ -3792,7 +3792,7 @@ static int iwl_mvm_send_aux_roc_cmd(struct iwl_mvm *mvm,static int iwl_mvm_roc (struct ieee80211_hw *hw,struct ieee80211_vif *vif, -struct ieee80211_channel *channel, +struct cfg80211_chan_def *chandefcfg,int duration,enum ieee80211_roc_type type) {
@@ -3800,6 +3800,7 @@ static int iwl_mvm_roc(struct ieee80211_hw *hw,struct iwl_mvm_vif *mvmvif =iwl_mvm_vif_from_mac80211 (vif);struct cfg80211_chan_def chandef;struct iwl_mvm_phy_ctxt *phy_ctxt; +struct ieee80211_channel *channel = chandefcfg->chan;bool band_change_removal;int ret, i;
drivers/net/wireless/mac80211_hwsim.c +2 -1
@@ -2475,11 +2475,12 @@ static void hw_roc_done(struct work_struct *work)static int mac80211_hwsim_roc (struct ieee80211_hw *hw,struct ieee80211_vif *vif, -struct ieee80211_channel *chan, +struct cfg80211_chan_def *chandef,int duration,enum ieee80211_roc_type type) {struct mac80211_hwsim_data *hwsim = hw->priv; +struct ieee80211_channel *chan = chandef->chan;mutex_lock (&hwsim->mutex);if (WARN_ON (hwsim->tmp_chan || hwsim->hw_scan_request)) {
drivers/net/wireless/marvell/mwifiex/cfg80211.c +2 -1
@@ -292,10 +292,11 @@ mwifiex_cfg80211_update_mgmt_frame_registrations(struct wiphy *wiphy,static int mwifiex_cfg80211_remain_on_channel (struct wiphy *wiphy,struct wireless_dev *wdev, -struct ieee80211_channel *chan, +struct cfg80211_chan_def *chandef,unsigned int duration,u64 *cookie) {struct mwifiex_private *priv =mwifiex_netdev_get_priv (wdev->netdev); +struct ieee80211_channel *chan = chandef->chan;int ret;if (!chan || !cookie) {
drivers/net/wireless/mediatek/mt76/mt7615/main.c +2 -1
@@ -1128,11 +1128,12 @@ mt7615_stop_sched_scan(struct ieee80211_hw *hw, struct ieee80211_vif *vif)static int mt7615_remain_on_channel (struct ieee80211_hw *hw,struct ieee80211_vif *vif, -struct ieee80211_channel *chan, +struct cfg80211_chan_def *chandef,int duration,enum ieee80211_roc_type type) {struct mt7615_phy *phy =mt7615_hw_phy (hw); +struct ieee80211_channel *chan = chandef->chan;int err;if (test_and_set_bit (MT76_STATE_ROC , &phy->mt76->state))
drivers/net/wireless/microchip/wilc1000/cfg80211.c +2 -1
@@ -1060,12 +1060,13 @@ static void wilc_wfi_remain_on_channel_expired(void *data, u64 cookie)static int remain_on_channel (struct wiphy *wiphy,struct wireless_dev *wdev, -struct ieee80211_channel *chan, +struct cfg80211_chan_def *chandef,unsigned int duration,u64 *cookie) {int ret =0 ;struct wilc_vif *vif =netdev_priv (wdev->netdev);struct wilc_priv *priv = &vif->priv; +struct ieee80211_channel *chan = chandef->chan;u64 id;if (wdev->iftype ==NL80211_IFTYPE_AP ) {
drivers/net/wireless/rsi/rsi_91x_mac80211.c +2 -1
@@ -1788,11 +1788,12 @@ void rsi_roc_timeout(struct timer_list *t) }static int rsi_mac80211_roc (struct ieee80211_hw *hw,struct ieee80211_vif *vif, -struct ieee80211_channel *chan,int duration, +struct cfg80211_chan_def *chandef,int duration,enum ieee80211_roc_type type) {struct rsi_hw *adapter = (struct rsi_hw *)hw->priv;struct rsi_common *common = (struct rsi_common *)adapter->priv; +struct ieee80211_channel *chan = chandef->chan;int status =0 ;rsi_dbg (INFO_ZONE ,"***** Remain on channel *****\n" );
drivers/net/wireless/ti/wlcore/main.c +2 -1
@@ -5640,13 +5640,14 @@ static void wlcore_op_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,static int wlcore_op_remain_on_channel (struct ieee80211_hw *hw,struct ieee80211_vif *vif, -struct ieee80211_channel *chan, +struct cfg80211_chan_def *chandef,int duration,enum ieee80211_roc_type type) {struct wl12xx_vif *wlvif =wl12xx_vif_to_data (vif);struct wl1271 *wl = hw->priv;int channel, active_roc, ret =0 ; +struct ieee80211_channel *chan = chandef->chan; channel =ieee80211_frequency_to_channel (chan->center_freq);
include/net/cfg80211.h +1 -1
@@ -4181,7 +4181,7 @@ struct cfg80211_ops {int (*remain_on_channel)(struct wiphy *wiphy,struct wireless_dev *wdev, -struct ieee80211_channel *chan, +struct cfg80211_chan_def *chandef,unsigned int duration,u64 *cookie); int (*cancel_remain_on_channel)(struct wiphy *wiphy,
include/net/mac80211.h +1 -1
@@ -4107,7 +4107,7 @@ struct ieee80211_ops {int (*remain_on_channel)(struct ieee80211_hw *hw,struct ieee80211_vif *vif, -struct ieee80211_channel *chan, +struct cfg80211_chan_def *chandef,int duration,enum ieee80211_roc_type type); int (*cancel_remain_on_channel)(struct ieee80211_hw *hw,
net/mac80211/driver-ops.h +3 -3
@@ -675,7 +675,7 @@ static inline int drv_get_antenna(struct ieee80211_local *local,static inline int drv_remain_on_channel (struct ieee80211_local *local,struct ieee80211_sub_if_data *sdata, -struct ieee80211_channel *chan, +struct cfg80211_chan_def *chandef,unsigned int duration,enum ieee80211_roc_type type) {
@@ -683,9 +683,9 @@ static inline int drv_remain_on_channel(struct ieee80211_local *local,might_sleep (); -trace_drv_remain_on_channel (local, sdata, chan, duration, type); +trace_drv_remain_on_channel (local, sdata, chandef, duration, type); ret = local->ops->remain_on_channel (&local->hw, &sdata->vif, - chan, duration, type); + chandef, duration, type);trace_drv_return_int (local, ret);return ret;
net/mac80211/ieee80211_i.h +2 -2
@@ -337,7 +337,7 @@ struct ieee80211_roc_work {struct ieee80211_sub_if_data *sdata; -struct ieee80211_channel *chan; +struct cfg80211_chan_def chandef;bool started, abort, hw_begun, notified;bool on_channel;
@@ -1886,7 +1886,7 @@ void ieee80211_start_next_roc(struct ieee80211_local *local);void ieee80211_roc_purge (struct ieee80211_local *local,struct ieee80211_sub_if_data *sdata);int ieee80211_remain_on_channel (struct wiphy *wiphy,struct wireless_dev *wdev, -struct ieee80211_channel *chan, +struct cfg80211_chan_def *chandef,unsigned int duration,u64 *cookie);int ieee80211_cancel_remain_on_channel (struct wiphy *wiphy,struct wireless_dev *wdev,u64 cookie);
net/mac80211/offchannel.c +36 -20
187 lines not on this page · raw message
net/mac80211/trace.h +6 -5
@@ -1226,17 +1226,17 @@ TRACE_EVENT(drv_get_antenna, TRACE_EVENT(drv_remain_on_channel, TP_PROTO(struct ieee80211_local *local, struct ieee80211_sub_if_data *sdata, - struct ieee80211_channel *chan, + struct cfg80211_chan_def *chandef, unsigned int duration, enum ieee80211_roc_type type), - TP_ARGS(local, sdata, chan, duration, type), + TP_ARGS(local, sdata, chandef, duration, type), TP_STRUCT__entry( LOCAL_ENTRY VIF_ENTRY + CHANDEF_ENTRY __field(int, center_freq) - __field(int, freq_offset) __field(unsigned int, duration) __field(u32, type) ),
@@ -1244,8 +1244,9 @@ TRACE_EVENT(drv_remain_on_channel,TP_fast_assign ( LOCAL_ASSIGN;VIF_ASSIGN ; - __entry->center_freq = chan->center_freq; - __entry->freq_offset = chan->freq_offset; +CHANDEF_ASSIGN (chandef); + __entry->center_freq = chandef->chan->center_freq; + __entry->freq_offset = chandef->chan->freq_offset; __entry->duration = duration; __entry->type = type; ),
net/wireless/nl80211.c +1 -1
@@ -11282,7 +11282,7 @@ static int nl80211_remain_on_channel(struct sk_buff *skb, goto free_msg; } - err =rdev_remain_on_channel (rdev, wdev, chandef.chan, + err =rdev_remain_on_channel (rdev, wdev, &chandef, duration, &cookie);if (err)
net/wireless/rdev-ops.h +3 -3
@@ -710,12 +710,12 @@ static inline int rdev_flush_pmksa(struct cfg80211_registered_device *rdev,static inline int rdev_remain_on_channel (struct cfg80211_registered_device *rdev,struct wireless_dev *wdev, -struct ieee80211_channel *chan, +struct cfg80211_chan_def *chandef,unsigned int duration,u64 *cookie) {int ret; -trace_rdev_remain_on_channel (&rdev->wiphy, wdev, chan, duration); - ret = rdev->ops->remain_on_channel (&rdev->wiphy, wdev, chan, +trace_rdev_remain_on_channel (&rdev->wiphy, wdev, chandef, duration); + ret = rdev->ops->remain_on_channel (&rdev->wiphy, wdev, chandef, duration, cookie);trace_rdev_return_int_cookie (&rdev->wiphy, ret, *cookie);return ret;
net/wireless/trace.h +3 -3
@@ -1900,9 +1900,9 @@ DEFINE_EVENT(rdev_pmksa, rdev_del_pmksa, TRACE_EVENT(rdev_remain_on_channel, TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev, - struct ieee80211_channel *chan, + struct cfg80211_chan_def *chandef, unsigned int duration), - TP_ARGS(wiphy, wdev, chan, duration), + TP_ARGS(wiphy, wdev, chandef, duration), TP_STRUCT__entry( WIPHY_ENTRY WDEV_ENTRY
@@ -1912,7 +1912,7 @@ TRACE_EVENT(rdev_remain_on_channel,TP_fast_assign ( WIPHY_ASSIGN;WDEV_ASSIGN ; -CHAN_ASSIGN (chan); +CHAN_ASSIGN (chandef->chan); __entry->duration = duration; ), TP_printk(WIPHY_PR_FMT ", " WDEV_PR_FMT ", " CHAN_PR_FMT ", duration: %u",
Signature · 1 line
2.7.4
Johannes Berg
maintainerRe: [PATCH v3 1/3] nl80211: Extended ROC support for 40-80 MHz bandwidth
Quoted 12 lines · P Praneesh
include/net/cfg80211.h +0
-0@@ -4181,7 +4181,7 @@ struct cfg80211_ops {int (*remain_on_channel)(struct wiphy *wiphy,
structwireless_dev*wdev,include/net/cfg80211.h +1
-1- struct ieee80211_channel *chan, + struct cfg80211_chan_def *chandef,
Quoted 2 lines
unsigned int duration, u64 *cookie);
I find it's odd you update this, but
Quoted 7 lines
if (!roc->mgmt_tx_cookie) cfg80211_remain_on_channel_expired(&roc->sdata->wdev,
include/net/cfg80211.h +2
-1- roc->cookie, roc->chan, + roc->cookie, + roc->chandef.chan,
GFP_KERNEL);
not the reporting API? Would seem better to pass back the whole thing?
include/net/cfg80211.h static unsigned long ieee80211_end_finished_rocs(struct ieee80211_local *local, · line 217
Quoted 7 lines
include/net/cfg80211.h +1
-0@@ -211,6 +212,7 @@ static unsigned long ieee80211_end_finished_rocs(struct ieee80211_local *local,* ROC session before the actual requested time. In such a case * end the ROC session (disregarding the remaining time). */ + if (roc->abort || roc->hw_begun || remaining <= 0) ieee80211_roc_notify_destroy(roc);
spurious change?
include/net/cfg80211.h static void _ieee80211_start_next_roc(struct ieee80211_local *local) · line 320
Quoted 7 lines
include/net/cfg80211.h +1
-1@@ -311,7 +316,7 @@ static void _ieee80211_start_next_roc(struct ieee80211_local *local) list_for_each_entry(tmp, &local->roc_list, list) { if (tmp == roc) continue; -if (tmp->sdata != roc->sdata || tmp->chan != roc->chan) +if (tmp->sdata != roc->sdata || tmp->chandef.chan != roc->chandef.chan) break;
This really doesn't work - you need to actually compare the chandefs for being identical or at least compatible when merging etc. happens here.
At least if we want mac80211 to support this feature (more on that later)
Quoted 7 lines
include/net/cfg80211.h +0
-0@@ -331,7 +337,7 @@ static void _ieee80211_start_next_roc(struct ieee80211_local *local)*/ list_for_each_entry(tmp, &local->roc_list, list) {if (
tmp->sdata!=roc->sdata||include/net/cfg80211.h +1
-1- tmp->chan != roc->chan) + tmp->chandef.chan != roc->chandef.chan)break;
likewise
include/net/cfg80211.h
Quoted 4 lines
include/net/cfg80211.h +4
-0+ roc->chandef.chan = chandef->chan; + roc->chandef.width = chandef->width; + roc->chandef.center_freq1 = chandef->center_freq1; + roc->chandef.center_freq2 = chandef->center_freq2;
That probably should use a struct assignment - there are some more struct members you're now not setting.
include/net/cfg80211.h
Quoted 10 lines
mutex_lock(&local->mtx);include/net/cfg80211.h +5
-3- ret =ieee80211_start_roc_work (local, sdata, chan, - duration, cookie,NULL , -IEEE80211_ROC_TYPE_NORMAL ); +if (chandef) { + ret =ieee80211_start_roc_work (local, sdata, chandef, + duration, cookie,NULL , +IEEE80211_ROC_TYPE_NORMAL ); + }
No need for braces, but how would that actually be NULL?!
include/net/cfg80211.h
Quoted 2 lines
include/net/cfg80211.h +1
-0+ chandef.chan = params->chan;
Uh, well, the other fields of a stack struct really want to be initialized too :)
include/net/cfg80211.h
Quoted 9 lines
include/net/cfg80211.h +0
-0@@ -1244,8 +1244,9 @@ TRACE_EVENT(drv_remain_on_channel,TP_fast_assign(
LOCAL_ASSIGN;
VIF_ASSIGN;include/net/cfg80211.h +3
-2- __entry->center_freq = chan->center_freq; - __entry->freq_offset = chan->freq_offset; +CHANDEF_ASSIGN (chandef); + __entry->center_freq = chandef->chan->center_freq; + __entry->freq_offset = chandef->chan->freq_offset;
Why would we need center_freq/freq_offset if we have a whole chandef?
We're not usually taking much care with compatibility here with tracing.
Quoted 11 lines
net/wireless/nl80211.c +1
-1@@ -11282,7 +11282,7 @@ static int nl80211_remain_on_channel(structsk_buff *skb, goto free_msg; } - err =rdev_remain_on_channel (rdev, wdev, chandef.chan, + err =rdev_remain_on_channel (rdev, wdev, &chandef, duration, &cookie);
Quoted 2 lines
if (err)
Really though, the biggest issue I see with this that you added no feature advertisement, no checks for the channel even being valid, nothing?
Seems like we should have some kind of feature check, at least to reject 40/80/160/whatever bandwidths with all the existing drivers you only updated the API on, but didn't actually implement the new changes? I.e. this really needs to be opt-in somehow.
And for mac80211 we need to implement some different merge logic, etc., it seems.
johannes
Signature · 3 lines
ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k
PATCH v3 2/3 ath11k: Refactor update channel list function
In reply to P PraneeshFor sending scan channel list command to firmware through wmi, remain on channel's scan request parameter needs to be updated. Add scan_req_params as an argument to the existing update_scan_chan_list to update scan request parameter through wmi. Also, rename regulatory update scan channel list to the ath11k_wmi_update_scan_chan_list since it is moved to wmi file.
--- drivers/net/wireless/ath/ath11k/mac.c | 2 +- drivers/net/wireless/ath/ath11k/reg.c | 96 +------------------------------- drivers/net/wireless/ath/ath11k/reg.h | 1 - drivers/net/wireless/ath/ath11k/wmi.c | 101 ++++++++++++++++++++++++++++++++++ drivers/net/wireless/ath/ath11k/wmi.h | 4 ++ 5 files changed, 107 insertions(+), 97 deletions(-)
drivers/net/wireless/ath/ath11k/mac.c +1 -1
@@ -5256,7 +5256,7 @@ static int ath11k_mac_op_start(struct ieee80211_hw *hw)/* TODO: Do we need to enable ANI? */ -ath11k_reg_update_chan_list (ar); +ath11k_wmi_update_scan_chan_list (ar,NULL ); ar->num_started_vdevs =0 ; ar->num_created_vdevs =0 ;
drivers/net/wireless/ath/ath11k/reg.c +1 -95
108 lines not on this page · raw message
drivers/net/wireless/ath/ath11k/reg.h +0 -1
@@ -32,5 +32,4 @@ struct ieee80211_regdomain * ath11k_reg_build_regd(struct ath11k_base *ab, struct cur_regulatory_info *reg_info, bool intersect);int ath11k_regd_update (struct ath11k *ar); -int ath11k_reg_update_chan_list (struct ath11k *ar);#endif
drivers/net/wireless/ath/ath11k/wmi.c +101 -0
107 lines not on this page · raw message
drivers/net/wireless/ath/ath11k/wmi.h +4 -0
@@ -3311,6 +3311,9 @@ struct scan_req_params {u32 num_hint_bssid;struct hint_short_ssid hint_s_ssid[WLAN_SCAN_MAX_HINT_S_SSID ];struct hint_bssid hint_bssid[WLAN_SCAN_MAX_HINT_BSSID ]; +u32 phymode; +u32 freq; +struct cfg80211_chan_def *chandef; };struct wmi_ssid_arg {
@@ -5378,6 +5381,7 @@ int ath11k_wmi_send_peer_delete_cmd(struct ath11k *ar, const u8 *peer_addr, u8 vdev_id);int ath11k_wmi_vdev_delete (struct ath11k *ar,u8 vdev_id);void ath11k_wmi_start_scan_init (struct ath11k *ar,struct scan_req_params *arg); +int ath11k_wmi_update_scan_chan_list (struct ath11k *ar,struct scan_req_params *arg);int ath11k_wmi_send_scan_start_cmd (struct ath11k *ar,struct scan_req_params *params); int ath11k_wmi_send_scan_stop_cmd(struct ath11k *ar,
Signature · 1 line
2.7.4
Re: [PATCH v3 2/3] ath11k: Refactor update channel list function
Quoted 9 lines · P Praneesh
For sending scan channel list command to firmware through wmi, remain on channel's scan request parameter needs to be updated. Add
scan_req_paramsas an argument to the existingupdate_scan_chan_listto update scan request parameter through wmi. Also, rename regulatory update scan channel list to theath11k_wmi_update_scan_chan_listsince it is moved to wmi file.Co-developed-by Karthikeyan Periyasamy <[email protected]>Signed-off-by Karthikeyan Periyasamy <[email protected]>Signed-off-by P Praneesh <[email protected]>
Why is ath11k_reg_update_chan_list() moved to wmi.c? I couldn't figure out what's the reason for that.
2 patches set to Changes Requested.
12577691 [v3,2/3] ath11k: Refactor update channel list function 12577693 [v3,2/3] ath11k: Add ROC support for wide band scan
Signature · 3 lines
https://patchwork.kernel.org/project/linux-wireless/patch/[email protected]/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
Re: [PATCH v3 2/3] ath11k: Refactor update channel list function
In reply to P PraneeshOn 10/22/2021 8:37 PM, P Praneesh wrote:
...
Quoted 5 lines
---
...(quoted diff) +0
-3- ch->maxpower = channel->max_power * 2; - ch->maxregpower = channel->max_reg_power * 2; - ch->antennamax = channel->max_antenna_gain * 2;
Review
Quoted 10 lines
(quoted diff) +6
-0+int ath11k_wmi_update_scan_chan_list(struct ath11k *ar, + struct scan_req_params *arg) + ch->maxpower = channel->max_power; + ch->maxregpower = channel->max_reg_power; + ch->antennamax = channel->max_antenna_gain; +
I see it also have another patch to remove the "*2" for power.
https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/commit/?id=9212c1b9e80a869e732769a4fe7f82d392b219be
ath11k: send proper txpower and maxregpower values to firmware.
so are you the same reason to remove "*2" ?
Re: [PATCH v3 2/3] ath11k: Refactor update channel list function
Quoted 22 lines · Wen Gong
On 10/22/2021 8:37 PM, P Praneesh wrote:
...
Quoted 4 lines
---
...(quoted diff) +0
-2- ch->maxpower = channel->max_power * 2; - ch->maxregpower = channel->max_reg_power * 2;Review
Quoted 10 lines
(quoted diff) +5
-1- ch->antennamax = channel->max_antenna_gain * 2; +int ath11k_wmi_update_scan_chan_list(struct ath11k *ar, + struct scan_req_params *arg) + ch->maxpower = channel->max_power; + ch->maxregpower = channel->max_reg_power; + ch->antennamax = channel->max_antenna_gain; +I see it also have another patch to remove the "*2" for power.
https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/commit/?id=9212c1b9e80a869e732769a4fe7f82d392b219be
Quoted 3 lines
ath11k: send proper txpower and maxregpower values to firmware.
so are you the same reason to remove "*2" ?
I'm not quite getting what you are saying, can you elaborate more? Did this patch break something?
Signature · 3 lines
https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
Re: [PATCH v3 2/3] ath11k: Refactor update channel list function
Quoted 23 lines · Kalle Valo
Quoted 21 lines · Wen Gong
On 10/22/2021 8:37 PM, P Praneesh wrote:
...
Quoted 4 lines
---
...(quoted diff) +0
-2- ch->maxpower = channel->max_power * 2; - ch->maxregpower = channel->max_reg_power * 2;Review
Quoted 10 lines
(quoted diff) +5
-1- ch->antennamax = channel->max_antenna_gain * 2; +int ath11k_wmi_update_scan_chan_list(struct ath11k *ar, + struct scan_req_params *arg) + ch->maxpower = channel->max_power; + ch->maxregpower = channel->max_reg_power; + ch->antennamax = channel->max_antenna_gain; +I see it also have another patch to remove the "*2" for power.
https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/commit/?id=9212c1b9e80a869e732769a4fe7f82d392b219be
Quoted 5 lines
Quoted 3 lines
ath11k: send proper txpower and maxregpower values to firmware.
so are you the same reason to remove "*2" ?
I'm not quite getting what you are saying, can you elaborate more? Did this patch break something?
Oh. Not see break anything.
I just want to know why remove the "*2". Did you see any issue if NOT remove "*2"?
Quoted 1 line
Re: [PATCH v3 2/3] ath11k: Refactor update channel list function
Quoted 26 lines · Wen Gong
Quoted 25 lines · Kalle Valo
Quoted 23 lines · Wen Gong
On 10/22/2021 8:37 PM, P Praneesh wrote:
...
Quoted 4 lines
---
...(quoted diff) +0
-2- ch->maxpower = channel->max_power * 2; - ch->maxregpower = channel->max_reg_power * 2;Review
Quoted 10 lines
(quoted diff) +5
-1- ch->antennamax = channel->max_antenna_gain * 2; +int ath11k_wmi_update_scan_chan_list(struct ath11k *ar, + struct scan_req_params *arg) + ch->maxpower = channel->max_power; + ch->maxregpower = channel->max_reg_power; + ch->antennamax = channel->max_antenna_gain; +I see it also have another patch to remove the "*2" for power.
https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/commit/?id=9212c1b9e80a869e732769a4fe7f82d392b219beath11k: send proper txpower and maxregpower values to firmware.
Quoted 8 lines
Quoted 3 lines
Quoted 1 line
so are you the same reason to remove "*2" ?
I'm not quite getting what you are saying, can you elaborate more? Did this patch break something?
Oh. Not see break anything.
I just want to know why remove the "*2". Did you see any issue if NOT remove "*2"?
All I know is that commit 9212c1b9e80a ("ath11k: send proper txpower and maxregpower values to firmware") mentions about cca getting stuck:
ath11k: send proper txpower and maxregpower values to firmware
Set proper values for max_regpower, max_power, max_antenna_gain as it is because firmware will convert power values to 0.5dbm steps by multiplying it with 2.
If txpower is not set, it will lead to cca stuck resulting in latency issues for QCN9074.
Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.4.0.1-01386-QCAHKSWPL_SILICONZ-1
Signature · 3 lines
https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
PATCH v3 2/3 ath11k: Add ROC support for wide band scan
In reply to P PraneeshWide Band Scan allows to perform off-channel scan on requested channel/ frequency along with corresponding phy mode/bandwidth (40MHz, 80MHz).
Doing wide band scan instead of normal 20MHz scan before spectral dump, allows to fetch FFT reports for the complete requested bandwidth (40MHz, 80MHz).
Below are the FW expectations and configs from host to request Wide Band Scan,
1. SCAN_PHYMODE_SUPPORT WMI service bit advertised from FW.
2. SCAN_CHAN_LIST_CMD updated with the phymode and other channel params of the requested channel to do wide band scan.
3. START_SCAN_CMD updated with all the seven supported TLVs and PHYMODE TLV being the last. PHYMODE TLV holds the (wmi_phy_mode + 1) value corresponding to wide band scan channel. Scan flags scan_f_wide_band and scan_f_passive need to be set for wide band scan request from host.
This new ops callback (ath11k_mac_op_remain_on_channel) for ROC will holds the cfg80211_chan_def of the requested channel from which we update the center frequencies and phymode params needed for SCAN_CHAN_LIST_CMD and START_SCAN_CMD to FW.
Below are use cases of Wide Band Scan,
1. In case of phy running both AP and monitor vifs, wide band scan on a different channel along with phymode (40MHz, 80MHz) captures those off-channel data frames to monitor vif.
2. Doing wide band scan instead of normal 20MHz scan before spectral dump, allows to fetch FFT reports for the complete requested bandwidth (40MHz, 80MHz).
Since wide band scan is the AP mode feature and this support is enabled when firmware advertise SCAN_PHYMODE_SUPPORT wmi service bit, it will not affect QCA6390.
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-00156-QCAHKSWPL_SILICONZ-1
--- drivers/net/wireless/ath/ath11k/core.c | 1 + drivers/net/wireless/ath/ath11k/mac.c | 201 +++++++++++++++++++++++++++++---- drivers/net/wireless/ath/ath11k/wmi.c | 59 +++++++++- drivers/net/wireless/ath/ath11k/wmi.h | 27 ++++- 4 files changed, 263 insertions(+), 25 deletions(-)
drivers/net/wireless/ath/ath11k/core.c +1 -0
@@ -1033,6 +1033,7 @@ static void ath11k_core_restart(struct work_struct *work)complete (&ar->vdev_delete_done);complete (&ar->bss_survey_done);complete (&ar->thermal.wmi_sync); +complete (&ar->scan.on_channel);wake_up (&ar->dp.tx_empty_waitq); idr_for_each(&ar->txmgmt_idr,
drivers/net/wireless/ath/ath11k/mac.c +181 -20
253 lines not on this page · raw message
drivers/net/wireless/ath/ath11k/wmi.c +56 -3
110 lines not on this page · raw message
drivers/net/wireless/ath/ath11k/wmi.h +25 -2
@@ -3094,6 +3094,12 @@ struct wlan_ssid { };#define WMI_IE_BITMAP_SIZE 8 +#define PROBE_REQ_MAX_OUIS 16 + +struct wmi_vendor_oui { +u32 tlv_header; +u32 oui_type_subtype;/* vendor OUI type and subtype */ +};#define WMI_SCAN_MAX_NUM_SSID 0x0A/* prefix used by scan requestor ids on the host */
@@ -3228,6 +3234,22 @@ struct hint_bssid {struct wmi_mac_addr bssid; }; +struct wmi_chan_info { +u32 freq; +u32 phymode; +}; + +struct wmi_chan_list { +u32 num_chan; +struct wmi_chan_info chan[WLAN_SCAN_MAX_NUM_CHANNELS ]; +}; + +struct wmi_probe_req_whitelist { +u32 ie_bitmap[WMI_IE_BITMAP_SIZE ]; +u32 num_vendor_oui; +u32 voui[PROBE_REQ_MAX_OUIS ]; +}; +struct scan_req_params {u32 scan_id;u32 scan_req_id;
@@ -3290,7 +3312,7 @@ struct scan_req_params { scan_f_forced:1, scan_f_2ghz:1, scan_f_5ghz:1, - scan_f_80mhz:1; + scan_f_wide_band:1; };u32 scan_flags; };
@@ -3300,7 +3322,7 @@ struct scan_req_params {u32 num_bssid;u32 num_ssids;u32 n_probes; -u32 chan_list[WLAN_SCAN_MAX_NUM_CHANNELS ]; +struct wmi_chan_list chan_list;u32 notify_scan_events;struct wlan_ssid ssid[WLAN_SCAN_MAX_NUM_SSID ];struct wmi_mac_addr bssid_list[WLAN_SCAN_MAX_NUM_BSSID ];
@@ -3314,6 +3336,7 @@ struct scan_req_params {u32 phymode;u32 freq;struct cfg80211_chan_def *chandef; +struct wmi_probe_req_whitelist ie_whitelist; };struct wmi_ssid_arg {
Signature · 1 line
2.7.4
Johannes Berg
maintainerRe: [PATCH v3 2/3] ath11k: Add ROC support for wide band scan
FWIW, not sure how this patch got mislabeled as 2/3 when it should be 3/3, but that caused patchwork to drop it. Might want to fix that when you resend so that Kalle can actually see both.
johannes
Signature · 3 lines
ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k