blob: df0838e5b71dd86633861e5cc302e43048961cd2 [file] [log] [blame]
developerdb019ff2022-07-01 15:11:10 -07001Index: mt76-2022-06-24-b6e865e2/mt7915/vendor.c
developer60384cf2022-06-21 10:26:31 -07002===================================================================
developerdb019ff2022-07-01 15:11:10 -07003--- mt76-2022-06-24-b6e865e2.orig/mt7915/vendor.c
4+++ mt76-2022-06-24-b6e865e2/mt7915/vendor.c
developer60384cf2022-06-21 10:26:31 -07005@@ -50,6 +50,18 @@ rfeature_ctrl_policy[NUM_MTK_VENDOR_ATTR
6 [MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TXBF] = { .type = NLA_U8 },
7 };
8
9+static const struct nla_policy
10+phy_capa_ctrl_policy[NUM_MTK_VENDOR_ATTRS_PHY_CAPA_CTRL] = {
11+ [MTK_VENDOR_ATTR_PHY_CAPA_CTRL_SET] = { .type = NLA_NESTED },
12+ [MTK_VENDOR_ATTR_PHY_CAPA_CTRL_DUMP] = { .type = NLA_NESTED },
13+};
14+
15+static const struct nla_policy
16+phy_capa_dump_policy[NUM_MTK_VENDOR_ATTRS_PHY_CAPA_DUMP] = {
17+ [MTK_VENDOR_ATTR_PHY_CAPA_DUMP_MAX_SUPPORTED_BSS] = { .type = NLA_U16 },
18+ [MTK_VENDOR_ATTR_PHY_CAPA_DUMP_MAX_SUPPORTED_STA] = { .type = NLA_U16 },
19+};
20+
21 struct csi_null_tone {
22 u8 start;
23 u8 end;
developerdb019ff2022-07-01 15:11:10 -070024@@ -974,6 +986,35 @@ static int mt7915_vendor_hemu_ctrl(struc
developer60384cf2022-06-21 10:26:31 -070025 return 0;
26 }
27
28+static int
29+mt7915_vendor_phy_capa_ctrl_dump(struct wiphy *wiphy, struct wireless_dev *wdev,
30+ struct sk_buff *skb, const void *data, int data_len,
31+ unsigned long *storage)
32+{
33+ struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
34+ struct mt7915_phy *phy = mt7915_hw_phy(hw);
35+ struct mt7915_dev *dev = phy->dev;
36+ void *a;
37+ int len = 0;
38+
39+ if (*storage == 1)
40+ return -ENOENT;
41+ *storage = 1;
42+
43+ a = nla_nest_start(skb, MTK_VENDOR_ATTR_PHY_CAPA_CTRL_DUMP);
44+
45+ if (nla_put_u16(skb,
46+ MTK_VENDOR_ATTR_PHY_CAPA_DUMP_MAX_SUPPORTED_BSS, MT7915_MAX_BSS) ||
47+ nla_put_u16(skb,
48+ MTK_VENDOR_ATTR_PHY_CAPA_DUMP_MAX_SUPPORTED_STA, MT7915_WTBL_STA))
49+ return -ENOMEM;
50+ len += 2;
51+
52+ nla_nest_end(skb, a);
53+
54+ return len;
55+}
56+
57 static const struct wiphy_vendor_command mt7915_vendor_commands[] = {
58 {
59 .info = {
developerdb019ff2022-07-01 15:11:10 -070060@@ -1031,6 +1072,17 @@ static const struct wiphy_vendor_command
developer60384cf2022-06-21 10:26:31 -070061 .doit = mt7915_vendor_hemu_ctrl,
62 .policy = hemu_ctrl_policy,
63 .maxattr = MTK_VENDOR_ATTR_HEMU_CTRL_MAX,
64+ },
65+ {
66+ .info = {
67+ .vendor_id = MTK_NL80211_VENDOR_ID,
68+ .subcmd = MTK_NL80211_VENDOR_SUBCMD_PHY_CAPA_CTRL,
69+ },
70+ .flags = WIPHY_VENDOR_CMD_NEED_NETDEV |
71+ WIPHY_VENDOR_CMD_NEED_RUNNING,
72+ .dumpit = mt7915_vendor_phy_capa_ctrl_dump,
73+ .policy = phy_capa_ctrl_policy,
74+ .maxattr = MTK_VENDOR_ATTR_PHY_CAPA_CTRL_MAX,
75 }
76 };
77
developerdb019ff2022-07-01 15:11:10 -070078Index: mt76-2022-06-24-b6e865e2/mt7915/vendor.h
developer60384cf2022-06-21 10:26:31 -070079===================================================================
developerdb019ff2022-07-01 15:11:10 -070080--- mt76-2022-06-24-b6e865e2.orig/mt7915/vendor.h
81+++ mt76-2022-06-24-b6e865e2/mt7915/vendor.h
developer60384cf2022-06-21 10:26:31 -070082@@ -9,6 +9,7 @@ enum mtk_nl80211_vendor_subcmds {
83 MTK_NL80211_VENDOR_SUBCMD_RFEATURE_CTRL = 0xc3,
84 MTK_NL80211_VENDOR_SUBCMD_WIRELESS_CTRL = 0xc4,
85 MTK_NL80211_VENDOR_SUBCMD_HEMU_CTRL = 0xc5,
86+ MTK_NL80211_VENDOR_SUBCMD_PHY_CAPA_CTRL = 0xc6,
87 };
88
89 enum mtk_capi_control_changed {
90@@ -149,4 +150,28 @@ enum mtk_vendor_attr_mnt_dump {
91 NUM_MTK_VENDOR_ATTRS_AMNT_DUMP - 1
92 };
93
94+enum mtk_vendor_attr_phy_capa_ctrl {
95+ MTK_VENDOR_ATTR_PHY_CAPA_CTRL_UNSPEC,
96+
97+ MTK_VENDOR_ATTR_PHY_CAPA_CTRL_SET,
98+ MTK_VENDOR_ATTR_PHY_CAPA_CTRL_DUMP,
99+
100+ /* keep last */
101+ NUM_MTK_VENDOR_ATTRS_PHY_CAPA_CTRL,
102+ MTK_VENDOR_ATTR_PHY_CAPA_CTRL_MAX =
103+ NUM_MTK_VENDOR_ATTRS_PHY_CAPA_CTRL - 1
104+};
105+
106+enum mtk_vendor_attr_phy_capa_dump {
107+ MTK_VENDOR_ATTR_PHY_CAPA_DUMP_UNSPEC,
108+
109+ MTK_VENDOR_ATTR_PHY_CAPA_DUMP_MAX_SUPPORTED_BSS,
110+ MTK_VENDOR_ATTR_PHY_CAPA_DUMP_MAX_SUPPORTED_STA,
111+
112+ /* keep last */
113+ NUM_MTK_VENDOR_ATTRS_PHY_CAPA_DUMP,
114+ MTK_VENDOR_ATTR_PHY_CAPA_DUMP_MAX =
115+ NUM_MTK_VENDOR_ATTRS_PHY_CAPA_DUMP - 1
116+};
117+
118 #endif
developerdb019ff2022-07-01 15:11:10 -0700119Index: mt76-2022-06-24-b6e865e2/mt7915/mt7915.h
developer60384cf2022-06-21 10:26:31 -0700120===================================================================
developerdb019ff2022-07-01 15:11:10 -0700121--- mt76-2022-06-24-b6e865e2.orig/mt7915/mt7915.h
122+++ mt76-2022-06-24-b6e865e2/mt7915/mt7915.h
developer60384cf2022-06-21 10:26:31 -0700123@@ -11,6 +11,7 @@
124
125 #define MTK_DEBUG 1
126 #define MT7915_MAX_INTERFACES 19
127+#define MT7915_MAX_BSS 16
developer60384cf2022-06-21 10:26:31 -0700128 #define MT7915_WTBL_SIZE 288
129 #define MT7916_WTBL_SIZE 544
developerdb019ff2022-07-01 15:11:10 -0700130 #define MT7915_WTBL_RESERVED (mt7915_wtbl_size(dev) - 1)