blob: 6be10567c8c4c81cc9df3d482bd9fb6b4e47f319 [file] [log] [blame]
developer8fb759f2022-02-21 16:39:38 +08001// SPDX-License-Identifier: ISC
2/* Copyright (C) 2020 Felix Fietkau <nbd@nbd.name> */
3#ifndef __MT76_VENDOR_H
4#define __MT76_VENDOR_H
5
6#include <errno.h>
7#include <linux/nl80211.h>
8#include <netlink/attr.h>
9#include <stdbool.h>
10#include <stdint.h>
11#include <stdio.h>
12#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_vendor_attr_csi_ctrl {
37 MTK_VENDOR_ATTR_CSI_CTRL_UNSPEC,
38
39 MTK_VENDOR_ATTR_CSI_CTRL_CFG,
40 MTK_VENDOR_ATTR_CSI_CTRL_CFG_MODE,
41 MTK_VENDOR_ATTR_CSI_CTRL_CFG_TYPE,
42 MTK_VENDOR_ATTR_CSI_CTRL_CFG_VAL1,
43 MTK_VENDOR_ATTR_CSI_CTRL_CFG_VAL2,
44 MTK_VENDOR_ATTR_CSI_CTRL_MAC_ADDR,
45 MTK_VENDOR_ATTR_CSI_CTRL_INTERVAL,
46
47 MTK_VENDOR_ATTR_CSI_CTRL_DUMP_NUM,
48
49 MTK_VENDOR_ATTR_CSI_CTRL_DATA,
50
51 /* keep last */
52 NUM_MTK_VENDOR_ATTRS_CSI_CTRL,
53 MTK_VENDOR_ATTR_CSI_CTRL_MAX =
54 NUM_MTK_VENDOR_ATTRS_CSI_CTRL - 1
55};
56
57enum mtk_vendor_attr_csi_data {
58 MTK_VENDOR_ATTR_CSI_DATA_UNSPEC,
59 MTK_VENDOR_ATTR_CSI_DATA_PAD,
60
61 MTK_VENDOR_ATTR_CSI_DATA_VER,
62 MTK_VENDOR_ATTR_CSI_DATA_TS,
63 MTK_VENDOR_ATTR_CSI_DATA_RSSI,
64 MTK_VENDOR_ATTR_CSI_DATA_SNR,
65 MTK_VENDOR_ATTR_CSI_DATA_BW,
66 MTK_VENDOR_ATTR_CSI_DATA_CH_IDX,
67 MTK_VENDOR_ATTR_CSI_DATA_TA,
68 MTK_VENDOR_ATTR_CSI_DATA_I,
69 MTK_VENDOR_ATTR_CSI_DATA_Q,
70 MTK_VENDOR_ATTR_CSI_DATA_INFO,
71 MTK_VENDOR_ATTR_CSI_DATA_RSVD1,
72 MTK_VENDOR_ATTR_CSI_DATA_RSVD2,
73 MTK_VENDOR_ATTR_CSI_DATA_RSVD3,
74 MTK_VENDOR_ATTR_CSI_DATA_RSVD4,
75 MTK_VENDOR_ATTR_CSI_DATA_TX_ANT,
76 MTK_VENDOR_ATTR_CSI_DATA_RX_ANT,
77 MTK_VENDOR_ATTR_CSI_DATA_MODE,
78 MTK_VENDOR_ATTR_CSI_DATA_H_IDX,
79
80 /* keep last */
81 NUM_MTK_VENDOR_ATTRS_CSI_DATA,
82 MTK_VENDOR_ATTR_CSI_DATA_MAX =
83 NUM_MTK_VENDOR_ATTRS_CSI_DATA - 1
84};
85
86enum mtk_vendor_attr_mnt_ctrl {
87 MTK_VENDOR_ATTR_AMNT_CTRL_UNSPEC,
88
89 MTK_VENDOR_ATTR_AMNT_CTRL_SET,
90 MTK_VENDOR_ATTR_AMNT_CTRL_DUMP,
91 /* keep last */
92 NUM_MTK_VENDOR_ATTRS_AMNT_CTRL,
93 MTK_VENDOR_ATTR_AMNT_CTRL_MAX =
94 NUM_MTK_VENDOR_ATTRS_AMNT_CTRL - 1
95};
96
97enum mtk_vendor_attr_mnt_set {
98 MTK_VENDOR_ATTR_AMNT_SET_UNSPEC,
99
100 MTK_VENDOR_ATTR_AMNT_SET_INDEX,
101 MTK_VENDOR_ATTR_AMNT_SET_MACADDR,
102
103 /* keep last */
104 NUM_MTK_VENDOR_ATTRS_AMNT_SET,
105 MTK_VENDOR_ATTR_AMNT_SET_MAX =
106 NUM_MTK_VENDOR_ATTRS_AMNT_SET - 1
107};
108
109enum mtk_vendor_attr_mnt_dump {
110 MTK_VENDOR_ATTR_AMNT_DUMP_UNSPEC,
111
112 MTK_VENDOR_ATTR_AMNT_DUMP_INDEX,
113 MTK_VENDOR_ATTR_AMNT_DUMP_LEN,
114 MTK_VENDOR_ATTR_AMNT_DUMP_RESULT,
115
116 /* keep last */
117 NUM_MTK_VENDOR_ATTRS_AMNT_DUMP,
118 MTK_VENDOR_ATTR_AMNT_DUMP_MAX =
119 NUM_MTK_VENDOR_ATTRS_AMNT_DUMP - 1
120};
121
122enum mtk_vendor_attr_wireless_ctrl {
123 MTK_VENDOR_ATTR_WIRELESS_CTRL_UNSPEC,
124
125 MTK_VENDOR_ATTR_WIRELESS_CTRL_FIXED_MCS,
126 MTK_VENDOR_ATTR_WIRELESS_CTRL_FIXED_OFDMA,
127 MTK_VENDOR_ATTR_WIRELESS_CTRL_PPDU_TX_TYPE,
128 MTK_VENDOR_ATTR_WIRELESS_CTRL_NUSERS_OFDMA,
129 MTK_VENDOR_ATTR_WIRELESS_CTRL_BA_BUFFER_SIZE,
130 MTK_VENDOR_ATTR_WIRELESS_CTRL_MIMO,
131 MTK_VENDOR_ATTR_WIRELESS_CTRL_AMPDU,
132 MTK_VENDOR_ATTR_WIRELESS_CTRL_AMSDU,
133 MTK_VENDOR_ATTR_WIRELESS_CTRL_CERT,
134
135 /* keep last */
136 NUM_MTK_VENDOR_ATTRS_WIRELESS_CTRL,
137 MTK_VENDOR_ATTR_WIRELESS_CTRL_MAX =
138 NUM_MTK_VENDOR_ATTRS_WIRELESS_CTRL - 1
139};
140
141enum mtk_vendor_attr_rfeature_ctrl {
142 MTK_VENDOR_ATTR_RFEATURE_CTRL_UNSPEC,
143
144 MTK_VENDOR_ATTR_RFEATURE_CTRL_HE_GI,
145 MTK_VENDOR_ATTR_RFEATURE_CTRL_HE_LTF,
146 MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TYPE_CFG,
147 MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TYPE_EN,
148 MTK_VENDOR_ATTR_RFEATURE_CTRL_TRIG_TYPE,
149 MTK_VENDOR_ATTR_RFEATURE_CTRL_ACK_PLCY,
150
151 /* keep last */
152 NUM_MTK_VENDOR_ATTRS_RFEATURE_CTRL,
153 MTK_VENDOR_ATTR_RFEATURE_CTRL_MAX =
154 NUM_MTK_VENDOR_ATTRS_RFEATURE_CTRL - 1
155};
156
157#define CSI_MAX_COUNT 256
158#define ETH_ALEN 6
159
160struct csi_data {
161 s16 data_i[CSI_MAX_COUNT];
162 s16 data_q[CSI_MAX_COUNT];
163 s8 rssi;
164 u8 snr;
165 u32 ts;
166 u8 data_bw;
167 u8 pri_ch_idx;
168 u8 ta[ETH_ALEN];
169 u32 info;
170 u8 rx_mode;
171 u32 h_idx;
172 u16 tx_idx;
173 u16 rx_idx;
174};
175
176struct amnt_data {
177 u8 idx;
178 u8 addr[ETH_ALEN];
179 s8 rssi[4];
180 u32 last_seen;
181};
182
183extern struct unl unl;
184
185int mt76_csi_set(struct nl_msg *msg, int argc,
186 char **argv, void *ctx);
187int mt76_csi_dump(struct nl_msg *nlmsg, int argc,
188 char **argv, void *ctx);
189
190int mt76_amnt_set(struct nl_msg *msg, int argc,
191 char **argv, void *ctx);
192int mt76_amnt_dump(struct nl_msg *msg, int argc,
193 char **argv, void *ctx);
194
195int mt76_ap_rfeatures_set(struct nl_msg *msg, int argc,
196 char **argv, void *ctx);
197int mt76_ap_wireless_set(struct nl_msg *msg, int argc,
198 char **argv, void *ctx);
199
200int handle_set_command(struct nl_msg *msg, int argc,
201 char **argv, void *ctx);
202
203#endif