blob: 5bb4f9d77957e8127d9aae441744101b8101f668 [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,
39};
40
41enum mtk_vendor_attr_csi_ctrl {
42 MTK_VENDOR_ATTR_CSI_CTRL_UNSPEC,
43
44 MTK_VENDOR_ATTR_CSI_CTRL_CFG,
45 MTK_VENDOR_ATTR_CSI_CTRL_CFG_MODE,
46 MTK_VENDOR_ATTR_CSI_CTRL_CFG_TYPE,
47 MTK_VENDOR_ATTR_CSI_CTRL_CFG_VAL1,
48 MTK_VENDOR_ATTR_CSI_CTRL_CFG_VAL2,
49 MTK_VENDOR_ATTR_CSI_CTRL_MAC_ADDR,
developer175704f2021-06-22 17:33:53 +080050 MTK_VENDOR_ATTR_CSI_CTRL_INTERVAL,
developerfd40db22021-04-29 10:08:25 +080051
52 MTK_VENDOR_ATTR_CSI_CTRL_DUMP_NUM,
53
54 MTK_VENDOR_ATTR_CSI_CTRL_DATA,
55
56 /* keep last */
57 NUM_MTK_VENDOR_ATTRS_CSI_CTRL,
58 MTK_VENDOR_ATTR_CSI_CTRL_MAX =
59 NUM_MTK_VENDOR_ATTRS_CSI_CTRL - 1
60};
61
62enum mtk_vendor_attr_csi_data {
63 MTK_VENDOR_ATTR_CSI_DATA_UNSPEC,
64 MTK_VENDOR_ATTR_CSI_DATA_PAD,
65
66 MTK_VENDOR_ATTR_CSI_DATA_VER,
67 MTK_VENDOR_ATTR_CSI_DATA_TS,
68 MTK_VENDOR_ATTR_CSI_DATA_RSSI,
69 MTK_VENDOR_ATTR_CSI_DATA_SNR,
70 MTK_VENDOR_ATTR_CSI_DATA_BW,
71 MTK_VENDOR_ATTR_CSI_DATA_CH_IDX,
72 MTK_VENDOR_ATTR_CSI_DATA_TA,
73 MTK_VENDOR_ATTR_CSI_DATA_I,
74 MTK_VENDOR_ATTR_CSI_DATA_Q,
75 MTK_VENDOR_ATTR_CSI_DATA_INFO,
76 MTK_VENDOR_ATTR_CSI_DATA_RSVD1,
77 MTK_VENDOR_ATTR_CSI_DATA_RSVD2,
78 MTK_VENDOR_ATTR_CSI_DATA_RSVD3,
79 MTK_VENDOR_ATTR_CSI_DATA_RSVD4,
80 MTK_VENDOR_ATTR_CSI_DATA_TX_ANT,
81 MTK_VENDOR_ATTR_CSI_DATA_RX_ANT,
82 MTK_VENDOR_ATTR_CSI_DATA_MODE,
83 MTK_VENDOR_ATTR_CSI_DATA_H_IDX,
84
85 /* keep last */
86 NUM_MTK_VENDOR_ATTRS_CSI_DATA,
87 MTK_VENDOR_ATTR_CSI_DATA_MAX =
88 NUM_MTK_VENDOR_ATTRS_CSI_DATA - 1
89};
90
developere53f0872021-07-23 11:13:49 +080091enum mtk_vendor_attr_mnt_ctrl {
92 MTK_VENDOR_ATTR_AMNT_CTRL_UNSPEC,
93
94 MTK_VENDOR_ATTR_AMNT_CTRL_SET,
95 MTK_VENDOR_ATTR_AMNT_CTRL_DUMP,
96 /* keep last */
97 NUM_MTK_VENDOR_ATTRS_AMNT_CTRL,
98 MTK_VENDOR_ATTR_AMNT_CTRL_MAX =
99 NUM_MTK_VENDOR_ATTRS_AMNT_CTRL - 1
100};
101
102enum mtk_vendor_attr_mnt_set {
103 MTK_VENDOR_ATTR_AMNT_SET_UNSPEC,
104
105 MTK_VENDOR_ATTR_AMNT_SET_INDEX,
106 MTK_VENDOR_ATTR_AMNT_SET_MACADDR,
107
108 /* keep last */
109 NUM_MTK_VENDOR_ATTRS_AMNT_SET,
110 MTK_VENDOR_ATTR_AMNT_SET_MAX =
111 NUM_MTK_VENDOR_ATTRS_AMNT_SET - 1
112};
113
114enum mtk_vendor_attr_mnt_dump {
115 MTK_VENDOR_ATTR_AMNT_DUMP_UNSPEC,
116
117 MTK_VENDOR_ATTR_AMNT_DUMP_INDEX,
118 MTK_VENDOR_ATTR_AMNT_DUMP_LEN,
119 MTK_VENDOR_ATTR_AMNT_DUMP_RESULT,
120
121 /* keep last */
122 NUM_MTK_VENDOR_ATTRS_AMNT_DUMP,
123 MTK_VENDOR_ATTR_AMNT_DUMP_MAX =
124 NUM_MTK_VENDOR_ATTRS_AMNT_DUMP - 1
125};
126
developerfd40db22021-04-29 10:08:25 +0800127#define CSI_MAX_COUNT 256
128#define ETH_ALEN 6
129
130struct csi_data {
131 s16 data_i[CSI_MAX_COUNT];
132 s16 data_q[CSI_MAX_COUNT];
133 s8 rssi;
134 u8 snr;
developera1e20de2021-06-17 10:33:53 +0800135 u32 ts;
developerfd40db22021-04-29 10:08:25 +0800136 u8 data_bw;
137 u8 pri_ch_idx;
138 u8 ta[ETH_ALEN];
139 u32 info;
140 u8 rx_mode;
141 u32 h_idx;
142 u16 tx_idx;
143 u16 rx_idx;
144};
145
developere53f0872021-07-23 11:13:49 +0800146struct amnt_data {
147 u8 idx;
148 u8 addr[ETH_ALEN];
149 s8 rssi[4];
150 u32 last_seen;
151};
152
developerfd40db22021-04-29 10:08:25 +0800153extern struct unl unl;
developerfd40db22021-04-29 10:08:25 +0800154
developer175704f2021-06-22 17:33:53 +0800155int mt76_csi_set(int idx, int argc, char **argv);
156int mt76_csi_dump(int idx, int argc, char **argv);
developerfd40db22021-04-29 10:08:25 +0800157
developere53f0872021-07-23 11:13:49 +0800158int mt76_amnt_set(int idx, int argc, char **argv);
159int mt76_amnt_dump(int idx, int argc, char **argv);
160
developerfd40db22021-04-29 10:08:25 +0800161#endif