blob: 9ff8a4f4b88faebbb3375d92836bb3301516d300 [file] [log] [blame]
developer27057f82023-07-10 17:23:13 +08001From 69b54dc64a95701f5e949e55399dacb598d23142 Mon Sep 17 00:00:00 2001
developer683be522023-05-11 14:24:50 +08002From: Evelyn Tsai <evelyn.tsai@mediatek.com>
3Date: Fri, 17 Mar 2023 16:17:14 +0800
developer27057f82023-07-10 17:23:13 +08004Subject: [PATCH 23/32] hostapd: mtk: Add vendor for CAPI certification
developer683be522023-05-11 14:24:50 +08005 commands
6
7---
8 hostapd/ctrl_iface.c | 95 +++++++++++++++++++++++++++++++
9 src/ap/ap_drv_ops.c | 21 +++++++
10 src/ap/ap_drv_ops.h | 3 +
developer5adb5c52023-06-09 13:30:58 +080011 src/common/mtk_vendor.h | 33 +----------
developer683be522023-05-11 14:24:50 +080012 src/drivers/driver.h | 22 +++++++
developer5adb5c52023-06-09 13:30:58 +080013 src/drivers/driver_nl80211.c | 55 ++++++++++++++++++
developer683be522023-05-11 14:24:50 +080014 src/drivers/driver_nl80211.h | 1 +
15 src/drivers/driver_nl80211_capa.c | 3 +
developer5adb5c52023-06-09 13:30:58 +080016 8 files changed, 202 insertions(+), 31 deletions(-)
developer683be522023-05-11 14:24:50 +080017
18diff --git a/hostapd/ctrl_iface.c b/hostapd/ctrl_iface.c
developer27057f82023-07-10 17:23:13 +080019index 3abf06a09..e0ed700db 100644
developer683be522023-05-11 14:24:50 +080020--- a/hostapd/ctrl_iface.c
21+++ b/hostapd/ctrl_iface.c
22@@ -70,6 +70,7 @@
23 #include "ctrl_iface.h"
24 #include "config_file.h"
25
26+#include "common/mtk_vendor.h"
27
28 #define HOSTAPD_CLI_DUP_VALUE_MAX_LEN 256
29
developer27057f82023-07-10 17:23:13 +080030@@ -3837,6 +3838,96 @@ hostapd_ctrl_iface_get_aval_color_bmp(struct hostapd_data *hapd, char *buf,
developer683be522023-05-11 14:24:50 +080031 return pos - buf;
32 }
33
34+static int
35+hostapd_ctrl_iface_ap_wireless(struct hostapd_data *hapd, char *cmd,
36+ char *buf, size_t buflen)
37+{
38+ char *pos, *value, *config = cmd;
39+ enum mtk_vendor_attr_wireless_ctrl sub_cmd;
40+
41+ pos = os_strchr(config, '=');
42+ if (pos == NULL)
43+ return -1;
44+ *pos++ = '\0';
45+
46+ if(pos == NULL)
47+ return -1;
48+ value = pos;
49+
50+ if (os_strncmp(config, "fixed_mcs", 9) == 0)
51+ sub_cmd = MTK_VENDOR_ATTR_WIRELESS_CTRL_FIXED_MCS;
52+ else if (os_strncmp(config, "ofdma", 5) == 0)
53+ sub_cmd = MTK_VENDOR_ATTR_WIRELESS_CTRL_FIXED_OFDMA;
54+ else if (os_strncmp(config, "ppdu_type", 9) == 0)
55+ sub_cmd = MTK_VENDOR_ATTR_WIRELESS_CTRL_PPDU_TX_TYPE;
56+ else if (os_strncmp(config, "nusers_ofdma", 12) == 0)
57+ sub_cmd = MTK_VENDOR_ATTR_WIRELESS_CTRL_NUSERS_OFDMA;
58+ else if (os_strncmp(config, "add_ba_req_bufsize", 18) == 0)
59+ sub_cmd = MTK_VENDOR_ATTR_WIRELESS_CTRL_BA_BUFFER_SIZE;
60+ else if (os_strncmp(config, "mimo", 4) == 0)
61+ sub_cmd = MTK_VENDOR_ATTR_WIRELESS_CTRL_MIMO;
62+ else if (os_strncmp(config, "cert", 4) == 0)
63+ sub_cmd = MTK_VENDOR_ATTR_WIRELESS_CTRL_CERT ;
64+ else {
65+ wpa_printf(MSG_ERROR,
66+ "Unsupported parameter %s for ap_wireless", config);
67+ return -1;
68+ }
69+
70+ if (hostapd_drv_ap_wireless(hapd, (u8) sub_cmd, atoi(value)) != 0)
71+ return -1;
72+
73+ return os_snprintf(buf, buflen, "OK\n");
74+}
75+
76+static int
77+hostapd_ctrl_iface_ap_rfeatures(struct hostapd_data *hapd, char *cmd,
78+ char *buf, size_t buflen)
79+{
80+ char *pos, *value, *type, *config = cmd;
81+ enum mtk_vendor_attr_rfeature_ctrl sub_cmd;
82+
83+ pos = os_strchr(config, '=');
84+ if (pos == NULL)
85+ return -1;
86+ *pos++ = '\0';
87+
88+ if(pos == NULL)
89+ return -1;
90+ value = pos;
91+
92+ if (os_strncmp(config, "he_gi", 5) == 0)
93+ sub_cmd = MTK_VENDOR_ATTR_RFEATURE_CTRL_HE_GI;
94+ else if (os_strncmp(config, "he_ltf", 6) == 0)
95+ sub_cmd = MTK_VENDOR_ATTR_RFEATURE_CTRL_HE_LTF;
96+ else if (os_strncmp(config, "trig_type", 9) == 0) {
97+ pos = os_strchr(value, ',');
98+ if (pos == NULL)
99+ return -1;
100+ *pos++ = '\0';
101+ if(pos == NULL)
102+ return -1;
103+ type = pos;
104+ goto trigtype;
105+ } else if (os_strcmp(config, "ack_policy") == 0)
106+ sub_cmd = MTK_VENDOR_ATTR_RFEATURE_CTRL_ACK_PLCY;
107+ else {
108+ wpa_printf(MSG_ERROR,
109+ "Unsupported parameter %s for ap_rfeatures", config);
110+ return -1;
111+ }
112+
113+ if (hostapd_drv_ap_rfeatures(hapd, (u8) sub_cmd, atoi(value)) != 0)
114+ return -1;
115+ goto exit;
116+
117+trigtype:
118+ if (hostapd_drv_ap_trig_type(hapd, atoi(value), atoi(type)) != 0)
119+ return -1;
120+
121+exit:
122+ return os_snprintf(buf, buflen, "OK\n");
123+}
124
125 static int hostapd_ctrl_iface_receive_process(struct hostapd_data *hapd,
126 char *buf, char *reply,
developer27057f82023-07-10 17:23:13 +0800127@@ -4417,6 +4508,10 @@ static int hostapd_ctrl_iface_receive_process(struct hostapd_data *hapd,
developer683be522023-05-11 14:24:50 +0800128 reply_len = hostapd_ctrl_iface_get_bss_color(hapd, reply, reply_size);
129 } else if (os_strncmp(buf, "AVAL_COLOR_BMP", 14) == 0) {
130 reply_len = hostapd_ctrl_iface_get_aval_color_bmp(hapd, reply, reply_size);
131+ } else if (os_strncmp(buf, "ap_wireless ", 12) == 0) {
132+ reply_len = hostapd_ctrl_iface_ap_wireless(hapd, buf + 12, reply, reply_size);
133+ } else if (os_strncmp(buf, "ap_rfeatures ", 13) == 0) {
134+ reply_len = hostapd_ctrl_iface_ap_rfeatures(hapd, buf + 13, reply, reply_size);
135 } else {
136 os_memcpy(reply, "UNKNOWN COMMAND\n", 16);
137 reply_len = 16;
138diff --git a/src/ap/ap_drv_ops.c b/src/ap/ap_drv_ops.c
developer27057f82023-07-10 17:23:13 +0800139index 9615ca8ce..11444c7eb 100644
developer683be522023-05-11 14:24:50 +0800140--- a/src/ap/ap_drv_ops.c
141+++ b/src/ap/ap_drv_ops.c
developer27057f82023-07-10 17:23:13 +0800142@@ -1222,3 +1222,24 @@ int hostapd_drv_get_aval_bss_color_bmp(struct hostapd_data *hapd, u64 *aval_colo
developer683be522023-05-11 14:24:50 +0800143 return 0;
144 return hapd->driver->get_aval_color_bmp(hapd->drv_priv, aval_color_bmp);
145 }
146+
147+int hostapd_drv_ap_wireless(struct hostapd_data *hapd, u8 sub_vendor_id, int value)
148+{
149+ if (!hapd->driver || !hapd->driver->ap_wireless)
150+ return 0;
151+ return hapd->driver->ap_wireless(hapd->drv_priv, sub_vendor_id, value);
152+}
153+
154+int hostapd_drv_ap_rfeatures(struct hostapd_data *hapd, u8 sub_vendor_id, int value)
155+{
156+ if (!hapd->driver || !hapd->driver->ap_rfeatures)
157+ return 0;
158+ return hapd->driver->ap_rfeatures(hapd->drv_priv, sub_vendor_id, value);
159+}
160+
161+int hostapd_drv_ap_trig_type(struct hostapd_data *hapd, u8 enable, u8 type)
162+{
163+ if (!hapd->driver || !hapd->driver->ap_trigtype)
164+ return 0;
165+ return hapd->driver->ap_trigtype(hapd->drv_priv, enable, type);
166+}
167diff --git a/src/ap/ap_drv_ops.h b/src/ap/ap_drv_ops.h
developer27057f82023-07-10 17:23:13 +0800168index 136ea2349..946ee2d68 100644
developer683be522023-05-11 14:24:50 +0800169--- a/src/ap/ap_drv_ops.h
170+++ b/src/ap/ap_drv_ops.h
171@@ -157,6 +157,9 @@ int hostapd_drv_amsdu_ctrl(struct hostapd_data *hapd);
172 int hostapd_drv_amsdu_dump(struct hostapd_data *hapd, u8 *amsdu);
173 int hostapd_drv_get_aval_bss_color_bmp(struct hostapd_data *hapd,
174 u64 *aval_color_bmp);
175+int hostapd_drv_ap_wireless(struct hostapd_data *hapd, u8 sub_vendor_id, int value);
176+int hostapd_drv_ap_rfeatures(struct hostapd_data *hapd, u8 sub_vendor_id, int value);
177+int hostapd_drv_ap_trig_type(struct hostapd_data *hapd, u8 enable, u8 type);
178
179 #include "drivers/driver.h"
180
181diff --git a/src/common/mtk_vendor.h b/src/common/mtk_vendor.h
developer27057f82023-07-10 17:23:13 +0800182index e27fe69b3..0b23c76ad 100644
developer683be522023-05-11 14:24:50 +0800183--- a/src/common/mtk_vendor.h
184+++ b/src/common/mtk_vendor.h
developer5adb5c52023-06-09 13:30:58 +0800185@@ -50,17 +50,6 @@ enum mtk_vendor_attr_edcca_dump {
developer683be522023-05-11 14:24:50 +0800186 NUM_MTK_VENDOR_ATTRS_EDCCA_DUMP - 1
187 };
188
189-
190-static struct nla_policy edcca_ctrl_policy[NUM_MTK_VENDOR_ATTRS_EDCCA_CTRL] = {
191- [MTK_VENDOR_ATTR_EDCCA_CTRL_MODE] = { .type = NLA_U8 },
192- [MTK_VENDOR_ATTR_EDCCA_CTRL_PRI20_VAL] = { .type = NLA_U8 },
193- [MTK_VENDOR_ATTR_EDCCA_CTRL_SEC20_VAL] = { .type = NLA_U8 },
194- [MTK_VENDOR_ATTR_EDCCA_CTRL_SEC40_VAL] = { .type = NLA_U8 },
195- [MTK_VENDOR_ATTR_EDCCA_CTRL_SEC80_VAL] = { .type = NLA_U8 },
196- [MTK_VENDOR_ATTR_EDCCA_CTRL_COMPENSATE] = { .type = NLA_U8 },
developer5adb5c52023-06-09 13:30:58 +0800197- [MTK_VENDOR_ATTR_EDCCA_CTRL_SEC160_VAL] = { .type = NLA_U8 },
developer683be522023-05-11 14:24:50 +0800198-};
199-
200 enum mtk_vendor_attr_3wire_ctrl {
201 MTK_VENDOR_ATTR_3WIRE_CTRL_UNSPEC,
202
developer5adb5c52023-06-09 13:30:58 +0800203@@ -72,10 +61,6 @@ enum mtk_vendor_attr_3wire_ctrl {
developer683be522023-05-11 14:24:50 +0800204 NUM_MTK_VENDOR_ATTRS_3WIRE_CTRL - 1
205 };
206
207-static struct nla_policy three_wire_ctrl_policy[NUM_MTK_VENDOR_ATTRS_3WIRE_CTRL] = {
208- [MTK_VENDOR_ATTR_3WIRE_CTRL_MODE] = {.type = NLA_U8 },
209-};
210-
211 enum mtk_vendor_attr_csi_ctrl {
212 MTK_VENDOR_ATTR_CSI_CTRL_UNSPEC,
213
developer5adb5c52023-06-09 13:30:58 +0800214@@ -172,7 +157,7 @@ enum mtk_vendor_attr_wireless_ctrl {
developer683be522023-05-11 14:24:50 +0800215 MTK_VENDOR_ATTR_WIRELESS_CTRL_BA_BUFFER_SIZE,
216 MTK_VENDOR_ATTR_WIRELESS_CTRL_MIMO,
217 MTK_VENDOR_ATTR_WIRELESS_CTRL_AMSDU,
218- MTK_VENDOR_ATTR_WIRELESS_CTRL_CERT,
219+ MTK_VENDOR_ATTR_WIRELESS_CTRL_CERT = 9,
220 MTK_VENDOR_ATTR_WIRELESS_CTRL_RTS_SIGTA,
221
222 /* keep last */
developer5adb5c52023-06-09 13:30:58 +0800223@@ -192,11 +177,6 @@ enum mtk_vendor_attr_wireless_dump {
developer683be522023-05-11 14:24:50 +0800224 NUM_MTK_VENDOR_ATTRS_WIRELESS_DUMP - 1
225 };
226
227-static const struct nla_policy
228-wireless_dump_policy[NUM_MTK_VENDOR_ATTRS_WIRELESS_DUMP] = {
229- [MTK_VENDOR_ATTR_WIRELESS_DUMP_AMSDU] = { .type = NLA_U8 },
230-};
231-
232 enum mtk_vendor_attr_rfeature_ctrl {
233 MTK_VENDOR_ATTR_RFEATURE_CTRL_UNSPEC,
234
developer5adb5c52023-06-09 13:30:58 +0800235@@ -206,6 +186,7 @@ enum mtk_vendor_attr_rfeature_ctrl {
developer683be522023-05-11 14:24:50 +0800236 MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TYPE_EN,
237 MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TYPE,
238 MTK_VENDOR_ATTR_RFEATURE_CTRL_ACK_PLCY,
239+ MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TXBF,
240
241 /* keep last */
242 NUM_MTK_VENDOR_ATTRS_RFEATURE_CTRL,
developer5adb5c52023-06-09 13:30:58 +0800243@@ -247,16 +228,6 @@ enum mtk_vendor_attr_ibf_dump {
developer683be522023-05-11 14:24:50 +0800244 NUM_MTK_VENDOR_ATTRS_IBF_DUMP - 1
245 };
246
247-static struct nla_policy
248-ibf_ctrl_policy[NUM_MTK_VENDOR_ATTRS_IBF_CTRL] = {
249- [MTK_VENDOR_ATTR_IBF_CTRL_ENABLE] = { .type = NLA_U8 },
250-};
251-
252-static struct nla_policy
253-ibf_dump_policy[NUM_MTK_VENDOR_ATTRS_IBF_DUMP] = {
254- [MTK_VENDOR_ATTR_IBF_DUMP_ENABLE] = { .type = NLA_U8 },
255-};
256-
257 enum mtk_vendor_attr_bss_color_ctrl {
258 MTK_VENDOR_ATTR_BSS_COLOR_CTRL_UNSPEC,
259
260diff --git a/src/drivers/driver.h b/src/drivers/driver.h
developer27057f82023-07-10 17:23:13 +0800261index 91cb475ac..3efea9f68 100644
developer683be522023-05-11 14:24:50 +0800262--- a/src/drivers/driver.h
263+++ b/src/drivers/driver.h
developer27057f82023-07-10 17:23:13 +0800264@@ -5141,6 +5141,28 @@ struct wpa_driver_ops {
developer683be522023-05-11 14:24:50 +0800265 *
266 */
267 int (*get_aval_color_bmp)(void *priv, u64 *aval_color_bmp);
268+
269+ /**
270+ * ap_wireless - set wireless command
271+ * @priv: Private driver interface data
272+ * @value: value
273+ */
274+ int (*ap_wireless)(void *priv, u8 mode, int value);
275+
276+ /**
277+ * ap_rfeatures - set ap rf features command
278+ * @priv: Private driver interface data
279+ * @value: value
280+ */
281+ int (*ap_rfeatures)(void *priv, u8 mode, int value);
282+
283+ /**
284+ * ap_trigtype - set trigger type
285+ * @priv: Private driver interface data
286+ * @enable: enable or disable
287+ * @type: trigger type
288+ */
289+ int (*ap_trigtype)(void *priv, u8 enable, u8 type);
290 };
291
292 /**
293diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
developer27057f82023-07-10 17:23:13 +0800294index b8730472d..642d75bd1 100644
developer683be522023-05-11 14:24:50 +0800295--- a/src/drivers/driver_nl80211.c
296+++ b/src/drivers/driver_nl80211.c
developer5adb5c52023-06-09 13:30:58 +0800297@@ -76,6 +76,58 @@ enum nlmsgerr_attrs {
developer683be522023-05-11 14:24:50 +0800298 #endif /* ANDROID */
299
300
301+static struct nla_policy
302+ibf_ctrl_policy[NUM_MTK_VENDOR_ATTRS_IBF_CTRL] = {
303+ [MTK_VENDOR_ATTR_IBF_CTRL_ENABLE] = { .type = NLA_U8 },
304+};
305+
306+static struct nla_policy
307+ibf_dump_policy[NUM_MTK_VENDOR_ATTRS_IBF_DUMP] = {
308+ [MTK_VENDOR_ATTR_IBF_DUMP_ENABLE] = { .type = NLA_U8 },
309+};
310+
311+static struct nla_policy three_wire_ctrl_policy[NUM_MTK_VENDOR_ATTRS_3WIRE_CTRL] = {
312+ [MTK_VENDOR_ATTR_3WIRE_CTRL_MODE] = {.type = NLA_U8 },
313+};
314+
315+static struct nla_policy edcca_ctrl_policy[NUM_MTK_VENDOR_ATTRS_EDCCA_CTRL] = {
316+ [MTK_VENDOR_ATTR_EDCCA_CTRL_MODE] = { .type = NLA_U8 },
317+ [MTK_VENDOR_ATTR_EDCCA_CTRL_PRI20_VAL] = { .type = NLA_U8 },
318+ [MTK_VENDOR_ATTR_EDCCA_CTRL_SEC20_VAL] = { .type = NLA_U8 },
319+ [MTK_VENDOR_ATTR_EDCCA_CTRL_SEC40_VAL] = { .type = NLA_U8 },
320+ [MTK_VENDOR_ATTR_EDCCA_CTRL_SEC80_VAL] = { .type = NLA_U8 },
321+ [MTK_VENDOR_ATTR_EDCCA_CTRL_COMPENSATE] = { .type = NLA_U8 },
developer5adb5c52023-06-09 13:30:58 +0800322+ [MTK_VENDOR_ATTR_EDCCA_CTRL_SEC160_VAL] = { .type = NLA_U8 },
developer683be522023-05-11 14:24:50 +0800323+};
324+
325+static const struct nla_policy
326+wireless_dump_policy[NUM_MTK_VENDOR_ATTRS_WIRELESS_DUMP] = {
327+ [MTK_VENDOR_ATTR_WIRELESS_DUMP_AMSDU] = { .type = NLA_U8 },
328+};
329+
330+static const struct nla_policy
331+rfeature_ctrl_policy[NUM_MTK_VENDOR_ATTRS_RFEATURE_CTRL] = {
332+ [MTK_VENDOR_ATTR_RFEATURE_CTRL_HE_GI] = {.type = NLA_U8 },
333+ [MTK_VENDOR_ATTR_RFEATURE_CTRL_HE_LTF] = { .type = NLA_U8 },
334+ [MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TYPE_CFG] = { .type = NLA_NESTED },
335+ [MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TYPE_EN] = { .type = NLA_U8 },
336+ [MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TYPE] = { .type = NLA_U8 },
337+ [MTK_VENDOR_ATTR_RFEATURE_CTRL_ACK_PLCY] = { .type = NLA_U8 },
338+ [MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TXBF] = { .type = NLA_U8 },
339+};
340+
341+static const struct nla_policy
342+wireless_ctrl_policy[NUM_MTK_VENDOR_ATTRS_WIRELESS_CTRL] = {
343+ [MTK_VENDOR_ATTR_WIRELESS_CTRL_FIXED_MCS] = {.type = NLA_U8 },
344+ [MTK_VENDOR_ATTR_WIRELESS_CTRL_FIXED_OFDMA] = {.type = NLA_U8 },
345+ [MTK_VENDOR_ATTR_WIRELESS_CTRL_PPDU_TX_TYPE] = {.type = NLA_U8 },
346+ [MTK_VENDOR_ATTR_WIRELESS_CTRL_NUSERS_OFDMA] = {.type = NLA_U8 },
347+ [MTK_VENDOR_ATTR_WIRELESS_CTRL_MIMO] = {.type = NLA_U8 },
348+ [MTK_VENDOR_ATTR_WIRELESS_CTRL_BA_BUFFER_SIZE] = {.type = NLA_U16 },
349+ [MTK_VENDOR_ATTR_WIRELESS_CTRL_AMSDU] = {.type = NLA_U8 },
350+ [MTK_VENDOR_ATTR_WIRELESS_CTRL_CERT] = {.type = NLA_U8 },
351+};
352+
353 static struct nl_sock * nl_create_handle(struct nl_cb *cb, const char *dbg)
354 {
355 struct nl_sock *handle;
developer27057f82023-07-10 17:23:13 +0800356@@ -14525,4 +14577,7 @@ const struct wpa_driver_ops wpa_driver_nl80211_ops = {
developer683be522023-05-11 14:24:50 +0800357 .amsdu_ctrl = nl80211_enable_amsdu,
358 .amsdu_dump = nl80211_dump_amsdu,
359 .get_aval_color_bmp = nl80211_get_aval_color_bmp,
360+ .ap_wireless = nl80211_ap_wireless,
361+ .ap_rfeatures = nl80211_ap_rfeatures,
362+ .ap_trigtype = nl80211_ap_trigtype,
363 };
364diff --git a/src/drivers/driver_nl80211.h b/src/drivers/driver_nl80211.h
developer27057f82023-07-10 17:23:13 +0800365index fd1e57cc2..fc5217d61 100644
developer683be522023-05-11 14:24:50 +0800366--- a/src/drivers/driver_nl80211.h
367+++ b/src/drivers/driver_nl80211.h
developer27057f82023-07-10 17:23:13 +0800368@@ -208,6 +208,7 @@ struct wpa_driver_nl80211_data {
developer683be522023-05-11 14:24:50 +0800369 unsigned int mtk_ibf_vendor_cmd_avail:1;
370 unsigned int mtk_wireless_vendor_cmd_avail:1;
371 unsigned int mtk_bss_color_vendor_cmd_avail:1;
372+ unsigned int mtk_rfeatures_vendor_cmd_avail:1;
373
374 u64 vendor_scan_cookie;
375 u64 remain_on_chan_cookie;
376diff --git a/src/drivers/driver_nl80211_capa.c b/src/drivers/driver_nl80211_capa.c
developer27057f82023-07-10 17:23:13 +0800377index 4f8e92024..c1cf5b533 100644
developer683be522023-05-11 14:24:50 +0800378--- a/src/drivers/driver_nl80211_capa.c
379+++ b/src/drivers/driver_nl80211_capa.c
developer27057f82023-07-10 17:23:13 +0800380@@ -1128,6 +1128,9 @@ static int wiphy_info_handler(struct nl_msg *msg, void *arg)
developer683be522023-05-11 14:24:50 +0800381 case MTK_NL80211_VENDOR_SUBCMD_BSS_COLOR_CTRL :
382 drv->mtk_bss_color_vendor_cmd_avail = 1;
383 break;
384+ case MTK_NL80211_VENDOR_SUBCMD_RFEATURE_CTRL:
385+ drv->mtk_rfeatures_vendor_cmd_avail = 1;
386+ break;
387 }
388 }
389
390--
developer27057f82023-07-10 17:23:13 +08003912.39.2
developer683be522023-05-11 14:24:50 +0800392