blob: b591575a8b65bf724f6979cd065b0143d7eee07b [file] [log] [blame]
developerfd40db22021-04-29 10:08:25 +08001// SPDX-License-Identifier: ISC
2/* Copyright (C) 2020 Felix Fietkau <nbd@nbd.name> */
developer175704f2021-06-22 17:33:53 +08003#ifndef __MT76_VENDOR_H
4#define __MT76_VENDOR_H
developerfd40db22021-04-29 10:08:25 +08005
developer175704f2021-06-22 17:33:53 +08006#include <errno.h>
7#include <linux/nl80211.h>
8#include <netlink/attr.h>
developerfd40db22021-04-29 10:08:25 +08009#include <stdbool.h>
10#include <stdint.h>
11#include <stdio.h>
developerfd40db22021-04-29 10:08:25 +080012#include <unl.h>
13
14typedef uint8_t u8;
15typedef uint16_t u16;
16typedef uint32_t u32;
17typedef uint64_t u64;
18typedef int8_t s8;
19typedef int16_t s16;
20typedef int32_t s32;
21typedef int64_t s64, ktime_t;
22
23#define MTK_NL80211_VENDOR_ID 0x0ce7
24
25#ifndef ARRAY_SIZE
26#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
27#endif
28
29#ifndef DIV_ROUND_UP
30#define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
31#endif
32
33struct nl_msg;
34struct nlattr;
35
36enum mtk_nl80211_vendor_subcmds {
developere53f0872021-07-23 11:13:49 +080037 MTK_NL80211_VENDOR_SUBCMD_AMNT_CTRL = 0xae,
developerfd40db22021-04-29 10:08:25 +080038 MTK_NL80211_VENDOR_SUBCMD_CSI_CTRL = 0xc2,
developer5f18e6c2021-07-28 11:55:08 +080039 MTK_NL80211_VENDOR_SUBCMD_RFEATURE_CTRL = 0xc3,
40 MTK_NL80211_VENDOR_SUBCMD_WIRELESS_CTRL = 0xc4,
developer57de9b72023-02-20 11:15:54 +080041 MTK_NL80211_VENDOR_SUBCMD_MU_CTRL = 0xc5,
developer29b831d2022-06-21 10:01:42 -070042 MTK_NL80211_VENDOR_SUBCMD_PHY_CAPA_CTRL = 0xc6,
developerfd40db22021-04-29 10:08:25 +080043};
44
45enum mtk_vendor_attr_csi_ctrl {
46 MTK_VENDOR_ATTR_CSI_CTRL_UNSPEC,
47
48 MTK_VENDOR_ATTR_CSI_CTRL_CFG,
49 MTK_VENDOR_ATTR_CSI_CTRL_CFG_MODE,
50 MTK_VENDOR_ATTR_CSI_CTRL_CFG_TYPE,
51 MTK_VENDOR_ATTR_CSI_CTRL_CFG_VAL1,
52 MTK_VENDOR_ATTR_CSI_CTRL_CFG_VAL2,
53 MTK_VENDOR_ATTR_CSI_CTRL_MAC_ADDR,
developer175704f2021-06-22 17:33:53 +080054 MTK_VENDOR_ATTR_CSI_CTRL_INTERVAL,
developer0fad8922023-11-28 20:15:39 +080055 MTK_VENDOR_ATTR_CSI_CTRL_STA_INTERVAL,
developerfd40db22021-04-29 10:08:25 +080056
57 MTK_VENDOR_ATTR_CSI_CTRL_DUMP_NUM,
58
59 MTK_VENDOR_ATTR_CSI_CTRL_DATA,
60
61 /* keep last */
62 NUM_MTK_VENDOR_ATTRS_CSI_CTRL,
63 MTK_VENDOR_ATTR_CSI_CTRL_MAX =
64 NUM_MTK_VENDOR_ATTRS_CSI_CTRL - 1
65};
66
67enum mtk_vendor_attr_csi_data {
68 MTK_VENDOR_ATTR_CSI_DATA_UNSPEC,
69 MTK_VENDOR_ATTR_CSI_DATA_PAD,
70
71 MTK_VENDOR_ATTR_CSI_DATA_VER,
72 MTK_VENDOR_ATTR_CSI_DATA_TS,
73 MTK_VENDOR_ATTR_CSI_DATA_RSSI,
74 MTK_VENDOR_ATTR_CSI_DATA_SNR,
75 MTK_VENDOR_ATTR_CSI_DATA_BW,
76 MTK_VENDOR_ATTR_CSI_DATA_CH_IDX,
77 MTK_VENDOR_ATTR_CSI_DATA_TA,
developer0fad8922023-11-28 20:15:39 +080078 MTK_VENDOR_ATTR_CSI_DATA_NUM,
developerfd40db22021-04-29 10:08:25 +080079 MTK_VENDOR_ATTR_CSI_DATA_I,
80 MTK_VENDOR_ATTR_CSI_DATA_Q,
81 MTK_VENDOR_ATTR_CSI_DATA_INFO,
82 MTK_VENDOR_ATTR_CSI_DATA_RSVD1,
83 MTK_VENDOR_ATTR_CSI_DATA_RSVD2,
84 MTK_VENDOR_ATTR_CSI_DATA_RSVD3,
85 MTK_VENDOR_ATTR_CSI_DATA_RSVD4,
86 MTK_VENDOR_ATTR_CSI_DATA_TX_ANT,
87 MTK_VENDOR_ATTR_CSI_DATA_RX_ANT,
88 MTK_VENDOR_ATTR_CSI_DATA_MODE,
developer0fad8922023-11-28 20:15:39 +080089 MTK_VENDOR_ATTR_CSI_DATA_CHAIN_INFO,
developerfd40db22021-04-29 10:08:25 +080090
91 /* keep last */
92 NUM_MTK_VENDOR_ATTRS_CSI_DATA,
93 MTK_VENDOR_ATTR_CSI_DATA_MAX =
94 NUM_MTK_VENDOR_ATTRS_CSI_DATA - 1
95};
96
developere53f0872021-07-23 11:13:49 +080097enum mtk_vendor_attr_mnt_ctrl {
98 MTK_VENDOR_ATTR_AMNT_CTRL_UNSPEC,
99
100 MTK_VENDOR_ATTR_AMNT_CTRL_SET,
101 MTK_VENDOR_ATTR_AMNT_CTRL_DUMP,
102 /* keep last */
103 NUM_MTK_VENDOR_ATTRS_AMNT_CTRL,
104 MTK_VENDOR_ATTR_AMNT_CTRL_MAX =
105 NUM_MTK_VENDOR_ATTRS_AMNT_CTRL - 1
106};
107
108enum mtk_vendor_attr_mnt_set {
109 MTK_VENDOR_ATTR_AMNT_SET_UNSPEC,
110
111 MTK_VENDOR_ATTR_AMNT_SET_INDEX,
112 MTK_VENDOR_ATTR_AMNT_SET_MACADDR,
113
114 /* keep last */
115 NUM_MTK_VENDOR_ATTRS_AMNT_SET,
116 MTK_VENDOR_ATTR_AMNT_SET_MAX =
117 NUM_MTK_VENDOR_ATTRS_AMNT_SET - 1
118};
119
120enum mtk_vendor_attr_mnt_dump {
121 MTK_VENDOR_ATTR_AMNT_DUMP_UNSPEC,
122
123 MTK_VENDOR_ATTR_AMNT_DUMP_INDEX,
124 MTK_VENDOR_ATTR_AMNT_DUMP_LEN,
125 MTK_VENDOR_ATTR_AMNT_DUMP_RESULT,
126
127 /* keep last */
128 NUM_MTK_VENDOR_ATTRS_AMNT_DUMP,
129 MTK_VENDOR_ATTR_AMNT_DUMP_MAX =
130 NUM_MTK_VENDOR_ATTRS_AMNT_DUMP - 1
131};
132
developer5f18e6c2021-07-28 11:55:08 +0800133enum mtk_vendor_attr_wireless_ctrl {
134 MTK_VENDOR_ATTR_WIRELESS_CTRL_UNSPEC,
135
136 MTK_VENDOR_ATTR_WIRELESS_CTRL_FIXED_MCS,
developer507ff0c2021-07-30 14:51:55 +0800137 MTK_VENDOR_ATTR_WIRELESS_CTRL_FIXED_OFDMA,
developerb72be592021-08-16 10:58:59 +0800138 MTK_VENDOR_ATTR_WIRELESS_CTRL_PPDU_TX_TYPE,
139 MTK_VENDOR_ATTR_WIRELESS_CTRL_NUSERS_OFDMA,
developer786d9292021-09-22 11:03:21 +0800140 MTK_VENDOR_ATTR_WIRELESS_CTRL_BA_BUFFER_SIZE,
141 MTK_VENDOR_ATTR_WIRELESS_CTRL_MIMO,
developer3a5765c2021-09-23 16:19:12 +0800142 MTK_VENDOR_ATTR_WIRELESS_CTRL_AMPDU,
143 MTK_VENDOR_ATTR_WIRELESS_CTRL_AMSDU,
developer07ede8d2021-11-16 18:31:21 +0800144 MTK_VENDOR_ATTR_WIRELESS_CTRL_CERT,
developera98a5ea2023-01-24 14:23:34 +0800145 MTK_VENDOR_ATTR_WIRELESS_CTRL_RTS_SIGTA,
developer5f18e6c2021-07-28 11:55:08 +0800146
147 /* keep last */
148 NUM_MTK_VENDOR_ATTRS_WIRELESS_CTRL,
149 MTK_VENDOR_ATTR_WIRELESS_CTRL_MAX =
150 NUM_MTK_VENDOR_ATTRS_WIRELESS_CTRL - 1
151};
152
developer57de9b72023-02-20 11:15:54 +0800153enum mtk_vendor_attr_mu_ctrl {
154 MTK_VENDOR_ATTR_MU_CTRL_UNSPEC,
developer7f1a58f2022-05-26 16:00:32 -0700155
developer57de9b72023-02-20 11:15:54 +0800156 MTK_VENDOR_ATTR_MU_CTRL_ONOFF,
developer7f1a58f2022-05-26 16:00:32 -0700157
158 /* keep last */
developer57de9b72023-02-20 11:15:54 +0800159 NUM_MTK_VENDOR_ATTRS_MU_CTRL,
160 MTK_VENDOR_ATTR_MU_CTRL_MAX =
161 NUM_MTK_VENDOR_ATTRS_MU_CTRL - 1
developer7f1a58f2022-05-26 16:00:32 -0700162};
163
developer5f18e6c2021-07-28 11:55:08 +0800164enum mtk_vendor_attr_rfeature_ctrl {
165 MTK_VENDOR_ATTR_RFEATURE_CTRL_UNSPEC,
166
167 MTK_VENDOR_ATTR_RFEATURE_CTRL_HE_GI,
168 MTK_VENDOR_ATTR_RFEATURE_CTRL_HE_LTF,
developer13aaa772021-09-27 18:09:26 +0800169 MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TYPE_CFG,
170 MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TYPE_EN,
developer31b1a282021-08-04 14:13:00 +0800171 MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TYPE,
172 MTK_VENDOR_ATTR_RFEATURE_CTRL_ACK_PLCY,
developer5f18e6c2021-07-28 11:55:08 +0800173
174 /* keep last */
175 NUM_MTK_VENDOR_ATTRS_RFEATURE_CTRL,
176 MTK_VENDOR_ATTR_RFEATURE_CTRL_MAX =
177 NUM_MTK_VENDOR_ATTRS_RFEATURE_CTRL - 1
178};
179
developer29b831d2022-06-21 10:01:42 -0700180enum mtk_vendor_attr_phy_capa_ctrl {
181 MTK_VENDOR_ATTR_PHY_CAPA_CTRL_UNSPEC,
182
183 MTK_VENDOR_ATTR_PHY_CAPA_CTRL_SET,
184 MTK_VENDOR_ATTR_PHY_CAPA_CTRL_DUMP,
185
186 /* keep last */
187 NUM_MTK_VENDOR_ATTRS_PHY_CAPA_CTRL,
188 MTK_VENDOR_ATTR_PHY_CAPA_CTRL_MAX =
189 NUM_MTK_VENDOR_ATTRS_PHY_CAPA_CTRL - 1
190};
191
192enum mtk_vendor_attr_phy_capa_dump {
193 MTK_VENDOR_ATTR_PHY_CAPA_DUMP_UNSPEC,
194
195 MTK_VENDOR_ATTR_PHY_CAPA_DUMP_MAX_SUPPORTED_BSS,
196 MTK_VENDOR_ATTR_PHY_CAPA_DUMP_MAX_SUPPORTED_STA,
197
198 /* keep last */
199 NUM_MTK_VENDOR_ATTRS_PHY_CAPA_DUMP,
200 MTK_VENDOR_ATTR_PHY_CAPA_DUMP_MAX =
201 NUM_MTK_VENDOR_ATTRS_PHY_CAPA_DUMP - 1
202};
203
developer0fad8922023-11-28 20:15:39 +0800204#define CSI_BW20_DATA_COUNT 64
205#define CSI_BW40_DATA_COUNT 128
206#define CSI_BW80_DATA_COUNT 256
207#define CSI_BW160_DATA_COUNT 512
developerfd40db22021-04-29 10:08:25 +0800208#define ETH_ALEN 6
209
210struct csi_data {
developer0fad8922023-11-28 20:15:39 +0800211 u8 ch_bw;
212 u16 data_num;
213 s16 data_i[CSI_BW160_DATA_COUNT];
214 s16 data_q[CSI_BW160_DATA_COUNT];
215 u8 band;
developerfd40db22021-04-29 10:08:25 +0800216 s8 rssi;
217 u8 snr;
developera1e20de2021-06-17 10:33:53 +0800218 u32 ts;
developerfd40db22021-04-29 10:08:25 +0800219 u8 data_bw;
220 u8 pri_ch_idx;
221 u8 ta[ETH_ALEN];
developer0fad8922023-11-28 20:15:39 +0800222 u32 ext_info;
developerfd40db22021-04-29 10:08:25 +0800223 u8 rx_mode;
developer0fad8922023-11-28 20:15:39 +0800224 u32 chain_info;
developerfd40db22021-04-29 10:08:25 +0800225 u16 tx_idx;
226 u16 rx_idx;
developer0fad8922023-11-28 20:15:39 +0800227 u32 segment_num;
228 u8 remain_last;
229 u16 pkt_sn;
230 u8 tr_stream;
developerfd40db22021-04-29 10:08:25 +0800231};
232
developere53f0872021-07-23 11:13:49 +0800233struct amnt_data {
234 u8 idx;
235 u8 addr[ETH_ALEN];
236 s8 rssi[4];
237 u32 last_seen;
238};
239
developerfd40db22021-04-29 10:08:25 +0800240extern struct unl unl;
developerfd40db22021-04-29 10:08:25 +0800241
developer175704f2021-06-22 17:33:53 +0800242int mt76_csi_set(int idx, int argc, char **argv);
243int mt76_csi_dump(int idx, int argc, char **argv);
developerfd40db22021-04-29 10:08:25 +0800244
developere53f0872021-07-23 11:13:49 +0800245int mt76_amnt_set(int idx, int argc, char **argv);
246int mt76_amnt_dump(int idx, int argc, char **argv);
247
developer5f18e6c2021-07-28 11:55:08 +0800248int mt76_ap_rfeatures_set(int idx, int argc, char **argv);
249int mt76_ap_wireless_set(int idx, int argc, char **argv);
developer7f1a58f2022-05-26 16:00:32 -0700250
developer57de9b72023-02-20 11:15:54 +0800251int mt76_mu_onoff_set(int idx, int argc, char **argv);
developer29b831d2022-06-21 10:01:42 -0700252
253int mt76_phy_capa_dump(int idx, int argc, char **argv);
developerfd40db22021-04-29 10:08:25 +0800254#endif