xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/mediatek/mt76/testmode.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: ISC */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (C) 2020 Felix Fietkau <nbd@nbd.name>
4*4882a593Smuzhiyun  */
5*4882a593Smuzhiyun #ifndef __MT76_TESTMODE_H
6*4882a593Smuzhiyun #define __MT76_TESTMODE_H
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun /**
9*4882a593Smuzhiyun  * enum mt76_testmode_attr - testmode attributes inside NL80211_ATTR_TESTDATA
10*4882a593Smuzhiyun  *
11*4882a593Smuzhiyun  * @MT76_TM_ATTR_UNSPEC: (invalid attribute)
12*4882a593Smuzhiyun  *
13*4882a593Smuzhiyun  * @MT76_TM_ATTR_RESET: reset parameters to default (flag)
14*4882a593Smuzhiyun  * @MT76_TM_ATTR_STATE: test state (u32), see &enum mt76_testmode_state
15*4882a593Smuzhiyun  *
16*4882a593Smuzhiyun  * @MT76_TM_ATTR_MTD_PART: mtd partition used for eeprom data (string)
17*4882a593Smuzhiyun  * @MT76_TM_ATTR_MTD_OFFSET: offset of eeprom data within the partition (u32)
18*4882a593Smuzhiyun  *
19*4882a593Smuzhiyun  * @MT76_TM_ATTR_TX_COUNT: configured number of frames to send when setting
20*4882a593Smuzhiyun  *	state to MT76_TM_STATE_TX_FRAMES (u32)
21*4882a593Smuzhiyun  * @MT76_TM_ATTR_TX_PENDING: pending frames during MT76_TM_STATE_TX_FRAMES (u32)
22*4882a593Smuzhiyun  * @MT76_TM_ATTR_TX_LENGTH: packet tx msdu length (u32)
23*4882a593Smuzhiyun  * @MT76_TM_ATTR_TX_RATE_MODE: packet tx mode (u8, see &enum mt76_testmode_tx_mode)
24*4882a593Smuzhiyun  * @MT76_TM_ATTR_TX_RATE_NSS: packet tx number of spatial streams (u8)
25*4882a593Smuzhiyun  * @MT76_TM_ATTR_TX_RATE_IDX: packet tx rate/MCS index (u8)
26*4882a593Smuzhiyun  * @MT76_TM_ATTR_TX_RATE_SGI: packet tx use short guard interval (u8)
27*4882a593Smuzhiyun  * @MT76_TM_ATTR_TX_RATE_LDPC: packet tx enable LDPC (u8)
28*4882a593Smuzhiyun  *
29*4882a593Smuzhiyun  * @MT76_TM_ATTR_TX_ANTENNA: tx antenna mask (u8)
30*4882a593Smuzhiyun  * @MT76_TM_ATTR_TX_POWER_CONTROL: enable tx power control (u8)
31*4882a593Smuzhiyun  * @MT76_TM_ATTR_TX_POWER: per-antenna tx power array (nested, u8 attrs)
32*4882a593Smuzhiyun  *
33*4882a593Smuzhiyun  * @MT76_TM_ATTR_FREQ_OFFSET: RF frequency offset (u32)
34*4882a593Smuzhiyun  *
35*4882a593Smuzhiyun  * @MT76_TM_ATTR_STATS: statistics (nested, see &enum mt76_testmode_stats_attr)
36*4882a593Smuzhiyun  */
37*4882a593Smuzhiyun enum mt76_testmode_attr {
38*4882a593Smuzhiyun 	MT76_TM_ATTR_UNSPEC,
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun 	MT76_TM_ATTR_RESET,
41*4882a593Smuzhiyun 	MT76_TM_ATTR_STATE,
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun 	MT76_TM_ATTR_MTD_PART,
44*4882a593Smuzhiyun 	MT76_TM_ATTR_MTD_OFFSET,
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun 	MT76_TM_ATTR_TX_COUNT,
47*4882a593Smuzhiyun 	MT76_TM_ATTR_TX_LENGTH,
48*4882a593Smuzhiyun 	MT76_TM_ATTR_TX_RATE_MODE,
49*4882a593Smuzhiyun 	MT76_TM_ATTR_TX_RATE_NSS,
50*4882a593Smuzhiyun 	MT76_TM_ATTR_TX_RATE_IDX,
51*4882a593Smuzhiyun 	MT76_TM_ATTR_TX_RATE_SGI,
52*4882a593Smuzhiyun 	MT76_TM_ATTR_TX_RATE_LDPC,
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun 	MT76_TM_ATTR_TX_ANTENNA,
55*4882a593Smuzhiyun 	MT76_TM_ATTR_TX_POWER_CONTROL,
56*4882a593Smuzhiyun 	MT76_TM_ATTR_TX_POWER,
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun 	MT76_TM_ATTR_FREQ_OFFSET,
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun 	MT76_TM_ATTR_STATS,
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun 	/* keep last */
63*4882a593Smuzhiyun 	NUM_MT76_TM_ATTRS,
64*4882a593Smuzhiyun 	MT76_TM_ATTR_MAX = NUM_MT76_TM_ATTRS - 1,
65*4882a593Smuzhiyun };
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun /**
68*4882a593Smuzhiyun  * enum mt76_testmode_state - statistics attributes
69*4882a593Smuzhiyun  *
70*4882a593Smuzhiyun  * @MT76_TM_STATS_ATTR_TX_PENDING: pending tx frames (u32)
71*4882a593Smuzhiyun  * @MT76_TM_STATS_ATTR_TX_QUEUED: queued tx frames (u32)
72*4882a593Smuzhiyun  * @MT76_TM_STATS_ATTR_TX_QUEUED: completed tx frames (u32)
73*4882a593Smuzhiyun  *
74*4882a593Smuzhiyun  * @MT76_TM_STATS_ATTR_RX_PACKETS: number of rx packets (u64)
75*4882a593Smuzhiyun  * @MT76_TM_STATS_ATTR_RX_FCS_ERROR: number of rx packets with FCS error (u64)
76*4882a593Smuzhiyun  * @MT76_TM_STATS_ATTR_LAST_RX: information about the last received packet
77*4882a593Smuzhiyun  *	see &enum mt76_testmode_rx_attr
78*4882a593Smuzhiyun  */
79*4882a593Smuzhiyun enum mt76_testmode_stats_attr {
80*4882a593Smuzhiyun 	MT76_TM_STATS_ATTR_UNSPEC,
81*4882a593Smuzhiyun 	MT76_TM_STATS_ATTR_PAD,
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun 	MT76_TM_STATS_ATTR_TX_PENDING,
84*4882a593Smuzhiyun 	MT76_TM_STATS_ATTR_TX_QUEUED,
85*4882a593Smuzhiyun 	MT76_TM_STATS_ATTR_TX_DONE,
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun 	MT76_TM_STATS_ATTR_RX_PACKETS,
88*4882a593Smuzhiyun 	MT76_TM_STATS_ATTR_RX_FCS_ERROR,
89*4882a593Smuzhiyun 	MT76_TM_STATS_ATTR_LAST_RX,
90*4882a593Smuzhiyun 
91*4882a593Smuzhiyun 	/* keep last */
92*4882a593Smuzhiyun 	NUM_MT76_TM_STATS_ATTRS,
93*4882a593Smuzhiyun 	MT76_TM_STATS_ATTR_MAX = NUM_MT76_TM_STATS_ATTRS - 1,
94*4882a593Smuzhiyun };
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun /**
98*4882a593Smuzhiyun  * enum mt76_testmode_rx_attr - packet rx information
99*4882a593Smuzhiyun  *
100*4882a593Smuzhiyun  * @MT76_TM_RX_ATTR_FREQ_OFFSET: frequency offset (s32)
101*4882a593Smuzhiyun  * @MT76_TM_RX_ATTR_RCPI: received channel power indicator (array, u8)
102*4882a593Smuzhiyun  * @MT76_TM_RX_ATTR_IB_RSSI: internal inband RSSI (s8)
103*4882a593Smuzhiyun  * @MT76_TM_RX_ATTR_WB_RSSI: internal wideband RSSI (s8)
104*4882a593Smuzhiyun  */
105*4882a593Smuzhiyun enum mt76_testmode_rx_attr {
106*4882a593Smuzhiyun 	MT76_TM_RX_ATTR_UNSPEC,
107*4882a593Smuzhiyun 
108*4882a593Smuzhiyun 	MT76_TM_RX_ATTR_FREQ_OFFSET,
109*4882a593Smuzhiyun 	MT76_TM_RX_ATTR_RCPI,
110*4882a593Smuzhiyun 	MT76_TM_RX_ATTR_IB_RSSI,
111*4882a593Smuzhiyun 	MT76_TM_RX_ATTR_WB_RSSI,
112*4882a593Smuzhiyun 
113*4882a593Smuzhiyun 	/* keep last */
114*4882a593Smuzhiyun 	NUM_MT76_TM_RX_ATTRS,
115*4882a593Smuzhiyun 	MT76_TM_RX_ATTR_MAX = NUM_MT76_TM_RX_ATTRS - 1,
116*4882a593Smuzhiyun };
117*4882a593Smuzhiyun 
118*4882a593Smuzhiyun /**
119*4882a593Smuzhiyun  * enum mt76_testmode_state - phy test state
120*4882a593Smuzhiyun  *
121*4882a593Smuzhiyun  * @MT76_TM_STATE_OFF: test mode disabled (normal operation)
122*4882a593Smuzhiyun  * @MT76_TM_STATE_IDLE: test mode enabled, but idle
123*4882a593Smuzhiyun  * @MT76_TM_STATE_TX_FRAMES: send a fixed number of test frames
124*4882a593Smuzhiyun  * @MT76_TM_STATE_RX_FRAMES: receive packets and keep statistics
125*4882a593Smuzhiyun  */
126*4882a593Smuzhiyun enum mt76_testmode_state {
127*4882a593Smuzhiyun 	MT76_TM_STATE_OFF,
128*4882a593Smuzhiyun 	MT76_TM_STATE_IDLE,
129*4882a593Smuzhiyun 	MT76_TM_STATE_TX_FRAMES,
130*4882a593Smuzhiyun 	MT76_TM_STATE_RX_FRAMES,
131*4882a593Smuzhiyun 
132*4882a593Smuzhiyun 	/* keep last */
133*4882a593Smuzhiyun 	NUM_MT76_TM_STATES,
134*4882a593Smuzhiyun 	MT76_TM_STATE_MAX = NUM_MT76_TM_STATES - 1,
135*4882a593Smuzhiyun };
136*4882a593Smuzhiyun 
137*4882a593Smuzhiyun /**
138*4882a593Smuzhiyun  * enum mt76_testmode_tx_mode - packet tx phy mode
139*4882a593Smuzhiyun  *
140*4882a593Smuzhiyun  * @MT76_TM_TX_MODE_CCK: legacy CCK mode
141*4882a593Smuzhiyun  * @MT76_TM_TX_MODE_OFDM: legacy OFDM mode
142*4882a593Smuzhiyun  * @MT76_TM_TX_MODE_HT: 802.11n MCS
143*4882a593Smuzhiyun  * @MT76_TM_TX_MODE_VHT: 802.11ac MCS
144*4882a593Smuzhiyun  */
145*4882a593Smuzhiyun enum mt76_testmode_tx_mode {
146*4882a593Smuzhiyun 	MT76_TM_TX_MODE_CCK,
147*4882a593Smuzhiyun 	MT76_TM_TX_MODE_OFDM,
148*4882a593Smuzhiyun 	MT76_TM_TX_MODE_HT,
149*4882a593Smuzhiyun 	MT76_TM_TX_MODE_VHT,
150*4882a593Smuzhiyun 
151*4882a593Smuzhiyun 	/* keep last */
152*4882a593Smuzhiyun 	NUM_MT76_TM_TX_MODES,
153*4882a593Smuzhiyun 	MT76_TM_TX_MODE_MAX = NUM_MT76_TM_TX_MODES - 1,
154*4882a593Smuzhiyun };
155*4882a593Smuzhiyun 
156*4882a593Smuzhiyun #endif
157