wifi: mac80211: pass link_id to channel switch ops
For CSA to work correctly in multi-link scenarios, pass the link_id to the relevant callbacks. While at it, unify/deduplicate the tracing for them. Reviewed-by: Miriam Rachel Korenblit <miriam.rachel.korenblit@intel.com> Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Link: https://msgid.link/20240228095718.b7726635c054.I0be5d00af4acb48cfbd23a9dbf067f9aeb66469d@changeid Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
8ade3356b2
commit
e6ee3a3713
|
@ -1763,8 +1763,9 @@ struct ieee80211_conf {
|
|||
* @chandef: the new channel to switch to
|
||||
* @count: the number of TBTT's until the channel switch event
|
||||
* @delay: maximum delay between the time the AP transmitted the last beacon in
|
||||
* current channel and the expected time of the first beacon in the new
|
||||
* channel, expressed in TU.
|
||||
* current channel and the expected time of the first beacon in the new
|
||||
* channel, expressed in TU.
|
||||
* @link_id: the link ID of the link doing the channel switch, 0 for non-MLO
|
||||
*/
|
||||
struct ieee80211_channel_switch {
|
||||
u64 timestamp;
|
||||
|
@ -1772,6 +1773,7 @@ struct ieee80211_channel_switch {
|
|||
bool block_tx;
|
||||
struct cfg80211_chan_def chandef;
|
||||
u8 count;
|
||||
u8 link_id;
|
||||
u32 delay;
|
||||
};
|
||||
|
||||
|
|
|
@ -3931,7 +3931,9 @@ __ieee80211_channel_switch(struct wiphy *wiphy, struct net_device *dev,
|
|||
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
struct ieee80211_chan_req chanreq = { .oper = params->chandef };
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
struct ieee80211_channel_switch ch_switch;
|
||||
struct ieee80211_channel_switch ch_switch = {
|
||||
.link_id = params->link_id,
|
||||
};
|
||||
struct ieee80211_chanctx_conf *conf;
|
||||
struct ieee80211_chanctx *chanctx;
|
||||
struct ieee80211_bss_conf *link_conf;
|
||||
|
|
|
@ -2021,7 +2021,9 @@ ieee80211_sta_process_chanswitch(struct ieee80211_link_data *link,
|
|||
struct ieee80211_chanctx *chanctx;
|
||||
enum nl80211_band current_band;
|
||||
struct ieee80211_csa_ie csa_ie;
|
||||
struct ieee80211_channel_switch ch_switch;
|
||||
struct ieee80211_channel_switch ch_switch = {
|
||||
.link_id = link->link_id,
|
||||
};
|
||||
struct ieee80211_bss *bss;
|
||||
unsigned long timeout;
|
||||
int res;
|
||||
|
|
|
@ -1209,7 +1209,7 @@ DEFINE_EVENT(sta_event, drv_flush_sta,
|
|||
TP_ARGS(local, sdata, sta)
|
||||
);
|
||||
|
||||
TRACE_EVENT(drv_channel_switch,
|
||||
DECLARE_EVENT_CLASS(chanswitch_evt,
|
||||
TP_PROTO(struct ieee80211_local *local,
|
||||
struct ieee80211_sub_if_data *sdata,
|
||||
struct ieee80211_channel_switch *ch_switch),
|
||||
|
@ -1224,6 +1224,7 @@ TRACE_EVENT(drv_channel_switch,
|
|||
__field(u32, device_timestamp)
|
||||
__field(bool, block_tx)
|
||||
__field(u8, count)
|
||||
__field(u8, link_id)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
|
@ -1234,14 +1235,24 @@ TRACE_EVENT(drv_channel_switch,
|
|||
__entry->device_timestamp = ch_switch->device_timestamp;
|
||||
__entry->block_tx = ch_switch->block_tx;
|
||||
__entry->count = ch_switch->count;
|
||||
__entry->link_id = ch_switch->link_id;
|
||||
),
|
||||
|
||||
TP_printk(
|
||||
LOCAL_PR_FMT VIF_PR_FMT " new " CHANDEF_PR_FMT " count:%d",
|
||||
LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG, __entry->count
|
||||
LOCAL_PR_FMT VIF_PR_FMT CHANDEF_PR_FMT " count:%d block_tx:%d timestamp:%llu device_ts:%u link_id:%d",
|
||||
LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG, __entry->count,
|
||||
__entry->block_tx, __entry->timestamp,
|
||||
__entry->device_timestamp, __entry->link_id
|
||||
)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(chanswitch_evt, drv_channel_switch,
|
||||
TP_PROTO(struct ieee80211_local *local,
|
||||
struct ieee80211_sub_if_data *sdata,
|
||||
struct ieee80211_channel_switch *ch_switch),
|
||||
TP_ARGS(local, sdata, ch_switch)
|
||||
);
|
||||
|
||||
TRACE_EVENT(drv_set_antenna,
|
||||
TP_PROTO(struct ieee80211_local *local, u32 tx_ant, u32 rx_ant, int ret),
|
||||
|
||||
|
@ -2121,39 +2132,11 @@ TRACE_EVENT(drv_channel_switch_beacon,
|
|||
)
|
||||
);
|
||||
|
||||
TRACE_EVENT(drv_pre_channel_switch,
|
||||
DEFINE_EVENT(chanswitch_evt, drv_pre_channel_switch,
|
||||
TP_PROTO(struct ieee80211_local *local,
|
||||
struct ieee80211_sub_if_data *sdata,
|
||||
struct ieee80211_channel_switch *ch_switch),
|
||||
|
||||
TP_ARGS(local, sdata, ch_switch),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
LOCAL_ENTRY
|
||||
VIF_ENTRY
|
||||
CHANDEF_ENTRY
|
||||
__field(u64, timestamp)
|
||||
__field(u32, device_timestamp)
|
||||
__field(bool, block_tx)
|
||||
__field(u8, count)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
LOCAL_ASSIGN;
|
||||
VIF_ASSIGN;
|
||||
CHANDEF_ASSIGN(&ch_switch->chandef)
|
||||
__entry->timestamp = ch_switch->timestamp;
|
||||
__entry->device_timestamp = ch_switch->device_timestamp;
|
||||
__entry->block_tx = ch_switch->block_tx;
|
||||
__entry->count = ch_switch->count;
|
||||
),
|
||||
|
||||
TP_printk(
|
||||
LOCAL_PR_FMT VIF_PR_FMT " prepare channel switch to "
|
||||
CHANDEF_PR_FMT " count:%d block_tx:%d timestamp:%llu",
|
||||
LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG, __entry->count,
|
||||
__entry->block_tx, __entry->timestamp
|
||||
)
|
||||
TP_ARGS(local, sdata, ch_switch)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(local_sdata_evt, drv_post_channel_switch,
|
||||
|
@ -2168,40 +2151,11 @@ DEFINE_EVENT(local_sdata_evt, drv_abort_channel_switch,
|
|||
TP_ARGS(local, sdata)
|
||||
);
|
||||
|
||||
TRACE_EVENT(drv_channel_switch_rx_beacon,
|
||||
DEFINE_EVENT(chanswitch_evt, drv_channel_switch_rx_beacon,
|
||||
TP_PROTO(struct ieee80211_local *local,
|
||||
struct ieee80211_sub_if_data *sdata,
|
||||
struct ieee80211_channel_switch *ch_switch),
|
||||
|
||||
TP_ARGS(local, sdata, ch_switch),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
LOCAL_ENTRY
|
||||
VIF_ENTRY
|
||||
CHANDEF_ENTRY
|
||||
__field(u64, timestamp)
|
||||
__field(u32, device_timestamp)
|
||||
__field(bool, block_tx)
|
||||
__field(u8, count)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
LOCAL_ASSIGN;
|
||||
VIF_ASSIGN;
|
||||
CHANDEF_ASSIGN(&ch_switch->chandef)
|
||||
__entry->timestamp = ch_switch->timestamp;
|
||||
__entry->device_timestamp = ch_switch->device_timestamp;
|
||||
__entry->block_tx = ch_switch->block_tx;
|
||||
__entry->count = ch_switch->count;
|
||||
),
|
||||
|
||||
TP_printk(
|
||||
LOCAL_PR_FMT VIF_PR_FMT
|
||||
" received a channel switch beacon to "
|
||||
CHANDEF_PR_FMT " count:%d block_tx:%d timestamp:%llu",
|
||||
LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG, __entry->count,
|
||||
__entry->block_tx, __entry->timestamp
|
||||
)
|
||||
TP_ARGS(local, sdata, ch_switch)
|
||||
);
|
||||
|
||||
TRACE_EVENT(drv_get_txpower,
|
||||
|
|
Loading…
Reference in New Issue