blob: d309f6a84d06fed6a2cb6c969e18f6d72caede4c [file] [log] [blame]
developere0cba192023-07-28 07:08:38 +08001From 2f32a2318ed334c191f9336560e20d75bc1332ca Mon Sep 17 00:00:00 2001
developer14bd31c2023-03-08 06:38:53 +08002From: Yi-Chia Hsieh <yi-chia.hsieh@mediatek.com>
3Date: Wed, 8 Mar 2023 06:23:55 +0800
developere0cba192023-07-28 07:08:38 +08004Subject: [PATCH 15/19] mac80211: mtk: track obss color bitmap
developer14bd31c2023-03-08 06:38:53 +08005
6Track OBSS BSS color when receive their beacon.
7
8Adding 2 tracepoint for debug, usage:
9echo 1 > /sys/kernel/debug/tracing/events/mac80211/bss_color_bitmap/enable
10echo 1 > /sys/kernel/debug/tracing/events/mac80211/bss_color_collision/enable
11---
12 include/net/mac80211.h | 5 +++--
13 net/mac80211/cfg.c | 4 ++--
developere0cba192023-07-28 07:08:38 +080014 net/mac80211/rx.c | 7 ++++++-
developer14bd31c2023-03-08 06:38:53 +080015 net/mac80211/trace.h | 21 +++++++++++++++++++++
developere0cba192023-07-28 07:08:38 +080016 4 files changed, 32 insertions(+), 5 deletions(-)
developer14bd31c2023-03-08 06:38:53 +080017
18diff --git a/include/net/mac80211.h b/include/net/mac80211.h
developere0cba192023-07-28 07:08:38 +080019index 7d824de..ba19152 100644
developer14bd31c2023-03-08 06:38:53 +080020--- a/include/net/mac80211.h
21+++ b/include/net/mac80211.h
22@@ -699,6 +699,7 @@ struct ieee80211_bss_conf {
23 } he_oper;
24 struct ieee80211_he_obss_pd he_obss_pd;
25 struct cfg80211_he_bss_color he_bss_color;
26+ u64 used_color_bitmap;
27 struct ieee80211_fils_discovery fils_discovery;
28 u32 unsol_bcast_probe_resp_interval;
29 bool s1g;
developered7222c2023-04-14 07:19:52 +080030@@ -6881,7 +6882,7 @@ ieee80211_get_unsol_bcast_probe_resp_tmpl(struct ieee80211_hw *hw,
developer14bd31c2023-03-08 06:38:53 +080031 struct ieee80211_vif *vif);
32
33 /**
34- * ieeee80211_obss_color_collision_notify - notify userland about a BSS color
35+ * ieee80211_obss_color_collision_notify - notify userland about a BSS color
36 * collision.
37 *
38 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
developere0cba192023-07-28 07:08:38 +080039@@ -6890,7 +6891,7 @@ ieee80211_get_unsol_bcast_probe_resp_tmpl(struct ieee80211_hw *hw,
40 * @gfp: allocation flags
developer14bd31c2023-03-08 06:38:53 +080041 */
42 void
43-ieeee80211_obss_color_collision_notify(struct ieee80211_vif *vif,
44+ieee80211_obss_color_collision_notify(struct ieee80211_vif *vif,
developere0cba192023-07-28 07:08:38 +080045 u64 color_bitmap, gfp_t gfp);
developer14bd31c2023-03-08 06:38:53 +080046
47 /**
48diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
developere0cba192023-07-28 07:08:38 +080049index 2a173dd..81cfaa6 100644
developer14bd31c2023-03-08 06:38:53 +080050--- a/net/mac80211/cfg.c
51+++ b/net/mac80211/cfg.c
52@@ -4435,7 +4435,7 @@ void ieee80211_color_change_finish(struct ieee80211_vif *vif)
53 EXPORT_SYMBOL_GPL(ieee80211_color_change_finish);
54
55 void
56-ieeee80211_obss_color_collision_notify(struct ieee80211_vif *vif,
57+ieee80211_obss_color_collision_notify(struct ieee80211_vif *vif,
developere0cba192023-07-28 07:08:38 +080058 u64 color_bitmap, gfp_t gfp)
developer14bd31c2023-03-08 06:38:53 +080059 {
60 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
61@@ -4445,7 +4445,7 @@ ieeee80211_obss_color_collision_notify(struct ieee80211_vif *vif,
62
developere0cba192023-07-28 07:08:38 +080063 cfg80211_obss_color_collision_notify(sdata->dev, color_bitmap, gfp);
developer14bd31c2023-03-08 06:38:53 +080064 }
65-EXPORT_SYMBOL_GPL(ieeee80211_obss_color_collision_notify);
66+EXPORT_SYMBOL_GPL(ieee80211_obss_color_collision_notify);
67
68 static int
69 ieee80211_color_change(struct wiphy *wiphy, struct net_device *dev,
70diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
developere0cba192023-07-28 07:08:38 +080071index 230c4b0..feb9f90 100644
developer14bd31c2023-03-08 06:38:53 +080072--- a/net/mac80211/rx.c
73+++ b/net/mac80211/rx.c
developere0cba192023-07-28 07:08:38 +080074@@ -3219,8 +3219,13 @@ ieee80211_rx_check_bss_color_collision(struct ieee80211_rx_data *rx)
developer14bd31c2023-03-08 06:38:53 +080075
76 color = le32_get_bits(he_oper->he_oper_params,
77 IEEE80211_HE_OPERATION_BSS_COLOR_MASK);
78+
79+ bss_conf->used_color_bitmap |= BIT_ULL(color);
80+
81+ trace_bss_color_bitmap(color, bss_conf->used_color_bitmap);
82+
83 if (color == bss_conf->he_bss_color.color)
84- ieeee80211_obss_color_collision_notify(&rx->sdata->vif,
developer14bd31c2023-03-08 06:38:53 +080085+ ieee80211_obss_color_collision_notify(&rx->sdata->vif,
developere0cba192023-07-28 07:08:38 +080086 BIT_ULL(color),
87 GFP_ATOMIC);
developer14bd31c2023-03-08 06:38:53 +080088 }
developer14bd31c2023-03-08 06:38:53 +080089diff --git a/net/mac80211/trace.h b/net/mac80211/trace.h
developered7222c2023-04-14 07:19:52 +080090index c34067c..d15dadd 100644
developer14bd31c2023-03-08 06:38:53 +080091--- a/net/mac80211/trace.h
92+++ b/net/mac80211/trace.h
developered7222c2023-04-14 07:19:52 +080093@@ -2908,6 +2908,27 @@ DEFINE_EVENT(sta_event, drv_net_fill_forward_path,
developer14bd31c2023-03-08 06:38:53 +080094 );
95 #endif
96
97+TRACE_EVENT(bss_color_bitmap,
98+ TP_PROTO(u8 color,
99+ u64 color_bitmap),
100+
101+ TP_ARGS(color, color_bitmap),
102+
103+ TP_STRUCT__entry(
104+ __field(u8, color)
105+ __field(u64, color_bitmap)
106+ ),
107+
108+ TP_fast_assign(
109+ __entry->color = color;
110+ __entry->color_bitmap = color_bitmap;
111+ ),
112+
113+ TP_printk(
114+ "color=%u color_bitmap=0x%llx", __entry->color, __entry->color_bitmap
115+ )
116+);
117+
118 #endif /* !__MAC80211_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */
119
120 #undef TRACE_INCLUDE_PATH
121--
developered7222c2023-04-14 07:19:52 +08001222.18.0
developer14bd31c2023-03-08 06:38:53 +0800123