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