blob: ec25241bf6358afc3dfd547dde2e98ed3868ed8b [file] [log] [blame]
developer6873eba2023-02-17 07:30:37 +08001From 1ecc90eee785504c9671985cabd6631ff1640f64 Mon Sep 17 00:00:00 2001
2From: Yi-Chia Hsieh <yi-chia.hsieh@mediatek.com>
3Date: Thu, 26 Jan 2023 08:50:47 +0800
4Subject: [PATCH] mt76: mt7915: add vendor cmd to get available color bitmap
5
6Add a vendor cmd to notify user space available color bitmap.
7The OBSS BSS color bitmap is maintained in mac80211, so mt76 will make use of that.
8
9Signed-off-by: Yi-Chia Hsieh <yi-chia.hsieh@mediatek.com>
10---
11 mt7915/vendor.c | 37 +++++++++++++++++++++++++++++++++++++
12 mt7915/vendor.h | 11 +++++++++++
13 2 files changed, 48 insertions(+)
14
15diff --git a/mt7915/vendor.c b/mt7915/vendor.c
16index a1f526c..5cbe856 100644
17--- a/mt7915/vendor.c
18+++ b/mt7915/vendor.c
19@@ -97,6 +97,11 @@ ibf_ctrl_policy[NUM_MTK_VENDOR_ATTRS_IBF_CTRL] = {
20 [MTK_VENDOR_ATTR_IBF_CTRL_ENABLE] = { .type = NLA_U8 },
21 };
22
23+static struct nla_policy
24+bss_color_ctrl_policy[NUM_MTK_VENDOR_ATTRS_BSS_COLOR_CTRL] = {
25+ [MTK_VENDOR_ATTR_AVAL_BSS_COLOR_BMP] = { .type = NLA_U64 },
26+};
27+
28 struct csi_null_tone {
29 u8 start;
30 u8 end;
31@@ -1272,6 +1277,27 @@ mt7915_vendor_ibf_ctrl_dump(struct wiphy *wiphy, struct wireless_dev *wdev,
32 return 1;
33 }
34
35+static int
36+mt7915_vendor_bss_color_ctrl_dump(struct wiphy *wiphy, struct wireless_dev *wdev,
37+ struct sk_buff *skb, const void *data, int data_len,
38+ unsigned long *storage)
39+{
40+ struct ieee80211_vif *vif = wdev_to_ieee80211_vif(wdev);
41+ struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
42+ int len = 0;
43+
44+ if (*storage == 1)
45+ return -ENOENT;
46+ *storage = 1;
47+
48+ if (nla_put_u64_64bit(skb,
49+ MTK_VENDOR_ATTR_AVAL_BSS_COLOR_BMP,
50+ ~bss_conf->he_bss_color.used_color_bitmap, NL80211_ATTR_PAD))
51+ return -ENOMEM;
52+ len += 1;
53+
54+ return len;
55+}
56
57 static const struct wiphy_vendor_command mt7915_vendor_commands[] = {
58 {
59@@ -1378,6 +1404,17 @@ static const struct wiphy_vendor_command mt7915_vendor_commands[] = {
60 .dumpit = mt7915_vendor_ibf_ctrl_dump,
61 .policy = ibf_ctrl_policy,
62 .maxattr = MTK_VENDOR_ATTR_IBF_CTRL_MAX,
63+ },
64+ {
65+ .info = {
66+ .vendor_id = MTK_NL80211_VENDOR_ID,
67+ .subcmd = MTK_NL80211_VENDOR_SUBCMD_BSS_COLOR_CTRL,
68+ },
69+ .flags = WIPHY_VENDOR_CMD_NEED_NETDEV |
70+ WIPHY_VENDOR_CMD_NEED_RUNNING,
71+ .dumpit = mt7915_vendor_bss_color_ctrl_dump,
72+ .policy = bss_color_ctrl_policy,
73+ .maxattr = MTK_VENDOR_ATTR_BSS_COLOR_CTRL_MAX,
74 }
75 };
76
77diff --git a/mt7915/vendor.h b/mt7915/vendor.h
78index cbff910..dda1447 100644
79--- a/mt7915/vendor.h
80+++ b/mt7915/vendor.h
81@@ -14,6 +14,7 @@ enum mtk_nl80211_vendor_subcmds {
82 MTK_NL80211_VENDOR_SUBCMD_EDCCA_CTRL = 0xc7,
83 MTK_NL80211_VENDOR_SUBCMD_3WIRE_CTRL = 0xc8,
84 MTK_NL80211_VENDOR_SUBCMD_IBF_CTRL = 0xc9,
85+ MTK_NL80211_VENDOR_SUBCMD_BSS_COLOR_CTRL = 0xca,
86 };
87
88
89@@ -257,4 +258,14 @@ enum mtk_vendor_attr_ibf_dump {
90 NUM_MTK_VENDOR_ATTRS_IBF_DUMP - 1
91 };
92
93+enum mtk_vendor_attr_bss_color_ctrl {
94+ MTK_VENDOR_ATTR_BSS_COLOR_CTRL_UNSPEC,
95+
96+ MTK_VENDOR_ATTR_AVAL_BSS_COLOR_BMP,
97+
98+ /* keep last */
99+ NUM_MTK_VENDOR_ATTRS_BSS_COLOR_CTRL,
100+ MTK_VENDOR_ATTR_BSS_COLOR_CTRL_MAX =
101+ NUM_MTK_VENDOR_ATTRS_BSS_COLOR_CTRL - 1
102+};
103 #endif
104--
1052.39.0
106