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