blob: 5e2792d81576982e69d13ca912c59d0c1aa6d4a8 [file] [log] [blame]
developer0f312e82022-11-01 12:31:52 +08001/* SPDX-License-Identifier: ISC */
2/*
3 * Copyright (C) 2020 Felix Fietkau <nbd@nbd.name>
4 */
5#ifndef __MT76_TESTMODE_H
6#define __MT76_TESTMODE_H
7
8#define MT76_TM_TIMEOUT 10
9
10/**
11 * enum mt76_testmode_attr - testmode attributes inside NL80211_ATTR_TESTDATA
12 *
13 * @MT76_TM_ATTR_UNSPEC: (invalid attribute)
14 *
15 * @MT76_TM_ATTR_RESET: reset parameters to default (flag)
16 * @MT76_TM_ATTR_STATE: test state (u32), see &enum mt76_testmode_state
17 *
18 * @MT76_TM_ATTR_MTD_PART: mtd partition used for eeprom data (string)
19 * @MT76_TM_ATTR_MTD_OFFSET: offset of eeprom data within the partition (u32)
20 *
21 * @MT76_TM_ATTR_TX_COUNT: configured number of frames to send when setting
22 * state to MT76_TM_STATE_TX_FRAMES (u32)
23 * @MT76_TM_ATTR_TX_PENDING: pending frames during MT76_TM_STATE_TX_FRAMES (u32)
24 * @MT76_TM_ATTR_TX_LENGTH: packet tx mpdu length (u32)
25 * @MT76_TM_ATTR_TX_RATE_MODE: packet tx mode (u8, see &enum mt76_testmode_tx_mode)
26 * @MT76_TM_ATTR_TX_RATE_NSS: packet tx number of spatial streams (u8)
27 * @MT76_TM_ATTR_TX_RATE_IDX: packet tx rate/MCS index (u8)
28 * @MT76_TM_ATTR_TX_RATE_SGI: packet tx use short guard interval (u8)
29 * @MT76_TM_ATTR_TX_RATE_LDPC: packet tx enable LDPC (u8)
30 * @MT76_TM_ATTR_TX_RATE_STBC: packet tx enable STBC (u8)
31 * @MT76_TM_ATTR_TX_LTF: packet tx LTF, set 0 to 2 for 1x, 2x, and 4x LTF (u8)
32 *
33 * @MT76_TM_ATTR_TX_ANTENNA: tx antenna mask (u8)
34 * @MT76_TM_ATTR_TX_POWER_CONTROL: enable tx power control (u8)
35 * @MT76_TM_ATTR_TX_POWER: per-antenna tx power array (nested, u8 attrs)
36 *
37 * @MT76_TM_ATTR_FREQ_OFFSET: RF frequency offset (u32)
38 *
39 * @MT76_TM_ATTR_STATS: statistics (nested, see &enum mt76_testmode_stats_attr)
40 *
41 * @MT76_TM_ATTR_TX_SPE_IDX: tx spatial extension index (u8)
42 *
43 * @MT76_TM_ATTR_TX_DUTY_CYCLE: packet tx duty cycle (u8)
44 * @MT76_TM_ATTR_TX_IPG: tx inter-packet gap, in unit of us (u32)
45 * @MT76_TM_ATTR_TX_TIME: packet transmission time, in unit of us (u32)
46 *
47 * @MT76_TM_ATTR_DRV_DATA: driver specific netlink attrs (nested)
48 *
49 * @MT76_TM_ATTR_MAC_ADDRS: array of nested MAC addresses (nested)
50 */
51enum mt76_testmode_attr {
52 MT76_TM_ATTR_UNSPEC,
53
54 MT76_TM_ATTR_RESET,
55 MT76_TM_ATTR_STATE,
56
57 MT76_TM_ATTR_MTD_PART,
58 MT76_TM_ATTR_MTD_OFFSET,
59
60 MT76_TM_ATTR_TX_COUNT,
61 MT76_TM_ATTR_TX_LENGTH,
62 MT76_TM_ATTR_TX_RATE_MODE,
63 MT76_TM_ATTR_TX_RATE_NSS,
64 MT76_TM_ATTR_TX_RATE_IDX,
65 MT76_TM_ATTR_TX_RATE_SGI,
66 MT76_TM_ATTR_TX_RATE_LDPC,
67 MT76_TM_ATTR_TX_RATE_STBC,
68 MT76_TM_ATTR_TX_LTF,
69
70 MT76_TM_ATTR_TX_ANTENNA,
71 MT76_TM_ATTR_TX_POWER_CONTROL,
72 MT76_TM_ATTR_TX_POWER,
73
74 MT76_TM_ATTR_FREQ_OFFSET,
75
76 MT76_TM_ATTR_STATS,
77
78 MT76_TM_ATTR_TX_SPE_IDX,
79
80 MT76_TM_ATTR_TX_DUTY_CYCLE,
81 MT76_TM_ATTR_TX_IPG,
82 MT76_TM_ATTR_TX_TIME,
83
84 MT76_TM_ATTR_DRV_DATA,
85
86 MT76_TM_ATTR_MAC_ADDRS,
87
88 /* keep last */
89 NUM_MT76_TM_ATTRS,
90 MT76_TM_ATTR_MAX = NUM_MT76_TM_ATTRS - 1,
91};
92
93/**
94 * enum mt76_testmode_state - statistics attributes
95 *
96 * @MT76_TM_STATS_ATTR_TX_PENDING: pending tx frames (u32)
97 * @MT76_TM_STATS_ATTR_TX_QUEUED: queued tx frames (u32)
98 * @MT76_TM_STATS_ATTR_TX_QUEUED: completed tx frames (u32)
99 *
100 * @MT76_TM_STATS_ATTR_RX_PACKETS: number of rx packets (u64)
101 * @MT76_TM_STATS_ATTR_RX_FCS_ERROR: number of rx packets with FCS error (u64)
102 * @MT76_TM_STATS_ATTR_LAST_RX: information about the last received packet
103 * see &enum mt76_testmode_rx_attr
104 */
105enum mt76_testmode_stats_attr {
106 MT76_TM_STATS_ATTR_UNSPEC,
107 MT76_TM_STATS_ATTR_PAD,
108
109 MT76_TM_STATS_ATTR_TX_PENDING,
110 MT76_TM_STATS_ATTR_TX_QUEUED,
111 MT76_TM_STATS_ATTR_TX_DONE,
112
113 MT76_TM_STATS_ATTR_RX_PACKETS,
114 MT76_TM_STATS_ATTR_RX_FCS_ERROR,
115 MT76_TM_STATS_ATTR_LAST_RX,
116
117 /* keep last */
118 NUM_MT76_TM_STATS_ATTRS,
119 MT76_TM_STATS_ATTR_MAX = NUM_MT76_TM_STATS_ATTRS - 1,
120};
121
122
123/**
124 * enum mt76_testmode_rx_attr - packet rx information
125 *
126 * @MT76_TM_RX_ATTR_FREQ_OFFSET: frequency offset (s32)
127 * @MT76_TM_RX_ATTR_RCPI: received channel power indicator (array, u8)
128 * @MT76_TM_RX_ATTR_IB_RSSI: internal inband RSSI (array, s8)
129 * @MT76_TM_RX_ATTR_WB_RSSI: internal wideband RSSI (array, s8)
130 * @MT76_TM_RX_ATTR_SNR: signal-to-noise ratio (u8)
131 */
132enum mt76_testmode_rx_attr {
133 MT76_TM_RX_ATTR_UNSPEC,
134
135 MT76_TM_RX_ATTR_FREQ_OFFSET,
136 MT76_TM_RX_ATTR_RCPI,
137 MT76_TM_RX_ATTR_IB_RSSI,
138 MT76_TM_RX_ATTR_WB_RSSI,
139 MT76_TM_RX_ATTR_SNR,
140
141 /* keep last */
142 NUM_MT76_TM_RX_ATTRS,
143 MT76_TM_RX_ATTR_MAX = NUM_MT76_TM_RX_ATTRS - 1,
144};
145
146/**
147 * enum mt76_testmode_state - phy test state
148 *
149 * @MT76_TM_STATE_OFF: test mode disabled (normal operation)
150 * @MT76_TM_STATE_IDLE: test mode enabled, but idle
151 * @MT76_TM_STATE_TX_FRAMES: send a fixed number of test frames
152 * @MT76_TM_STATE_RX_FRAMES: receive packets and keep statistics
153 * @MT76_TM_STATE_TX_CONT: waveform tx without time gap
154 * @MT76_TM_STATE_ON: test mode enabled used in offload firmware
155 */
156enum mt76_testmode_state {
157 MT76_TM_STATE_OFF,
158 MT76_TM_STATE_IDLE,
159 MT76_TM_STATE_TX_FRAMES,
160 MT76_TM_STATE_RX_FRAMES,
161 MT76_TM_STATE_TX_CONT,
162 MT76_TM_STATE_ON,
163
164 /* keep last */
165 NUM_MT76_TM_STATES,
166 MT76_TM_STATE_MAX = NUM_MT76_TM_STATES - 1,
167};
168
169/**
170 * enum mt76_testmode_tx_mode - packet tx phy mode
171 *
172 * @MT76_TM_TX_MODE_CCK: legacy CCK mode
173 * @MT76_TM_TX_MODE_OFDM: legacy OFDM mode
174 * @MT76_TM_TX_MODE_HT: 802.11n MCS
175 * @MT76_TM_TX_MODE_VHT: 802.11ac MCS
176 * @MT76_TM_TX_MODE_HE_SU: 802.11ax single-user MIMO
177 * @MT76_TM_TX_MODE_HE_EXT_SU: 802.11ax extended-range SU
178 * @MT76_TM_TX_MODE_HE_TB: 802.11ax trigger-based
179 * @MT76_TM_TX_MODE_HE_MU: 802.11ax multi-user MIMO
180 */
181enum mt76_testmode_tx_mode {
182 MT76_TM_TX_MODE_CCK,
183 MT76_TM_TX_MODE_OFDM,
184 MT76_TM_TX_MODE_HT,
185 MT76_TM_TX_MODE_VHT,
186 MT76_TM_TX_MODE_HE_SU,
187 MT76_TM_TX_MODE_HE_EXT_SU,
188 MT76_TM_TX_MODE_HE_TB,
189 MT76_TM_TX_MODE_HE_MU,
190
191 /* keep last */
192 NUM_MT76_TM_TX_MODES,
193 MT76_TM_TX_MODE_MAX = NUM_MT76_TM_TX_MODES - 1,
194};
195
196extern const struct nla_policy mt76_tm_policy[NUM_MT76_TM_ATTRS];
197
198#endif