wifi: cfg80211: Add link_id to cfg80211_ch_switch_started_notify()

Add link_id parameter to cfg80211_ch_switch_started_notify() to allow
driver to indicate on which link channel switch started on MLD.

Send the data to userspace so it knows as well.

Signed-off-by: Veerendranath Jakkam <quic_vjakkam@quicinc.com>
Link: https://lore.kernel.org/r/20220722131143.3438042-1-quic_vjakkam@quicinc.com
Link: https://lore.kernel.org/r/20220722131143.3438042-2-quic_vjakkam@quicinc.com
[squash two patches]
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
Veerendranath Jakkam 2022-07-22 18:41:42 +05:30 committed by Johannes Berg
parent 7a77cd47ec
commit b8c9024e0e
5 changed files with 26 additions and 11 deletions

View File

@ -8281,6 +8281,7 @@ void cfg80211_ch_switch_notify(struct net_device *dev,
* cfg80211_ch_switch_started_notify - notify channel switch start * cfg80211_ch_switch_started_notify - notify channel switch start
* @dev: the device on which the channel switch started * @dev: the device on which the channel switch started
* @chandef: the future channel definition * @chandef: the future channel definition
* @link_id: the link ID for MLO, must be 0 for non-MLO
* @count: the number of TBTTs until the channel switch happens * @count: the number of TBTTs until the channel switch happens
* @quiet: whether or not immediate quiet was requested by the AP * @quiet: whether or not immediate quiet was requested by the AP
* *
@ -8290,7 +8291,8 @@ void cfg80211_ch_switch_notify(struct net_device *dev,
*/ */
void cfg80211_ch_switch_started_notify(struct net_device *dev, void cfg80211_ch_switch_started_notify(struct net_device *dev,
struct cfg80211_chan_def *chandef, struct cfg80211_chan_def *chandef,
u8 count, bool quiet); unsigned int link_id, u8 count,
bool quiet);
/** /**
* ieee80211_operating_class_to_band - convert operating class to band * ieee80211_operating_class_to_band - convert operating class to band

View File

@ -3815,7 +3815,7 @@ __ieee80211_channel_switch(struct wiphy *wiphy, struct net_device *dev,
IEEE80211_QUEUE_STOP_REASON_CSA); IEEE80211_QUEUE_STOP_REASON_CSA);
cfg80211_ch_switch_started_notify(sdata->dev, cfg80211_ch_switch_started_notify(sdata->dev,
&sdata->deflink.csa_chandef, &sdata->deflink.csa_chandef, 0,
params->count, params->block_tx); params->count, params->block_tx);
if (changed) { if (changed) {

View File

@ -1911,7 +1911,7 @@ ieee80211_sta_process_chanswitch(struct ieee80211_link_data *link,
IEEE80211_QUEUE_STOP_REASON_CSA); IEEE80211_QUEUE_STOP_REASON_CSA);
mutex_unlock(&local->mtx); mutex_unlock(&local->mtx);
cfg80211_ch_switch_started_notify(sdata->dev, &csa_ie.chandef, cfg80211_ch_switch_started_notify(sdata->dev, &csa_ie.chandef, 0,
csa_ie.count, csa_ie.mode); csa_ie.count, csa_ie.mode);
if (local->ops->channel_switch) { if (local->ops->channel_switch) {

View File

@ -18932,11 +18932,13 @@ EXPORT_SYMBOL(cfg80211_pmksa_candidate_notify);
static void nl80211_ch_switch_notify(struct cfg80211_registered_device *rdev, static void nl80211_ch_switch_notify(struct cfg80211_registered_device *rdev,
struct net_device *netdev, struct net_device *netdev,
unsigned int link_id,
struct cfg80211_chan_def *chandef, struct cfg80211_chan_def *chandef,
gfp_t gfp, gfp_t gfp,
enum nl80211_commands notif, enum nl80211_commands notif,
u8 count, bool quiet) u8 count, bool quiet)
{ {
struct wireless_dev *wdev = netdev->ieee80211_ptr;
struct sk_buff *msg; struct sk_buff *msg;
void *hdr; void *hdr;
@ -18953,6 +18955,10 @@ static void nl80211_ch_switch_notify(struct cfg80211_registered_device *rdev,
if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex)) if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex))
goto nla_put_failure; goto nla_put_failure;
if (wdev->valid_links &&
nla_put_u8(msg, NL80211_ATTR_MLO_LINK_ID, link_id))
goto nla_put_failure;
if (nl80211_send_chandef(msg, chandef)) if (nl80211_send_chandef(msg, chandef))
goto nla_put_failure; goto nla_put_failure;
@ -19012,22 +19018,26 @@ void cfg80211_ch_switch_notify(struct net_device *dev,
cfg80211_sched_dfs_chan_update(rdev); cfg80211_sched_dfs_chan_update(rdev);
nl80211_ch_switch_notify(rdev, dev, chandef, GFP_KERNEL, nl80211_ch_switch_notify(rdev, dev, link_id, chandef, GFP_KERNEL,
NL80211_CMD_CH_SWITCH_NOTIFY, 0, false); NL80211_CMD_CH_SWITCH_NOTIFY, 0, false);
} }
EXPORT_SYMBOL(cfg80211_ch_switch_notify); EXPORT_SYMBOL(cfg80211_ch_switch_notify);
void cfg80211_ch_switch_started_notify(struct net_device *dev, void cfg80211_ch_switch_started_notify(struct net_device *dev,
struct cfg80211_chan_def *chandef, struct cfg80211_chan_def *chandef,
u8 count, bool quiet) unsigned int link_id, u8 count,
bool quiet)
{ {
struct wireless_dev *wdev = dev->ieee80211_ptr; struct wireless_dev *wdev = dev->ieee80211_ptr;
struct wiphy *wiphy = wdev->wiphy; struct wiphy *wiphy = wdev->wiphy;
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
trace_cfg80211_ch_switch_started_notify(dev, chandef); ASSERT_WDEV_LOCK(wdev);
WARN_INVALID_LINK_ID(wdev, link_id);
nl80211_ch_switch_notify(rdev, dev, chandef, GFP_KERNEL, trace_cfg80211_ch_switch_started_notify(dev, chandef, link_id);
nl80211_ch_switch_notify(rdev, dev, link_id, chandef, GFP_KERNEL,
NL80211_CMD_CH_SWITCH_STARTED_NOTIFY, NL80211_CMD_CH_SWITCH_STARTED_NOTIFY,
count, quiet); count, quiet);
} }

View File

@ -3263,18 +3263,21 @@ TRACE_EVENT(cfg80211_ch_switch_notify,
TRACE_EVENT(cfg80211_ch_switch_started_notify, TRACE_EVENT(cfg80211_ch_switch_started_notify,
TP_PROTO(struct net_device *netdev, TP_PROTO(struct net_device *netdev,
struct cfg80211_chan_def *chandef), struct cfg80211_chan_def *chandef,
TP_ARGS(netdev, chandef), unsigned int link_id),
TP_ARGS(netdev, chandef, link_id),
TP_STRUCT__entry( TP_STRUCT__entry(
NETDEV_ENTRY NETDEV_ENTRY
CHAN_DEF_ENTRY CHAN_DEF_ENTRY
__field(unsigned int, link_id)
), ),
TP_fast_assign( TP_fast_assign(
NETDEV_ASSIGN; NETDEV_ASSIGN;
CHAN_DEF_ASSIGN(chandef); CHAN_DEF_ASSIGN(chandef);
__entry->link_id = link_id;
), ),
TP_printk(NETDEV_PR_FMT ", " CHAN_DEF_PR_FMT, TP_printk(NETDEV_PR_FMT ", " CHAN_DEF_PR_FMT ", link:%d",
NETDEV_PR_ARG, CHAN_DEF_PR_ARG) NETDEV_PR_ARG, CHAN_DEF_PR_ARG, __entry->link_id)
); );
TRACE_EVENT(cfg80211_radar_event, TRACE_EVENT(cfg80211_radar_event,