Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: ISC */
0002 /*
0003  * Copyright (C) 2020 Felix Fietkau <nbd@nbd.name>
0004  */
0005 #ifndef __MT76_TESTMODE_H
0006 #define __MT76_TESTMODE_H
0007 
0008 #define MT76_TM_TIMEOUT 10
0009 
0010 #include <net/netlink.h>
0011 
0012 /**
0013  * enum mt76_testmode_attr - testmode attributes inside NL80211_ATTR_TESTDATA
0014  *
0015  * @MT76_TM_ATTR_UNSPEC: (invalid attribute)
0016  *
0017  * @MT76_TM_ATTR_RESET: reset parameters to default (flag)
0018  * @MT76_TM_ATTR_STATE: test state (u32), see &enum mt76_testmode_state
0019  *
0020  * @MT76_TM_ATTR_MTD_PART: mtd partition used for eeprom data (string)
0021  * @MT76_TM_ATTR_MTD_OFFSET: offset of eeprom data within the partition (u32)
0022  *
0023  * @MT76_TM_ATTR_TX_COUNT: configured number of frames to send when setting
0024  *  state to MT76_TM_STATE_TX_FRAMES (u32)
0025  * @MT76_TM_ATTR_TX_PENDING: pending frames during MT76_TM_STATE_TX_FRAMES (u32)
0026  * @MT76_TM_ATTR_TX_LENGTH: packet tx mpdu length (u32)
0027  * @MT76_TM_ATTR_TX_RATE_MODE: packet tx mode (u8, see &enum mt76_testmode_tx_mode)
0028  * @MT76_TM_ATTR_TX_RATE_NSS: packet tx number of spatial streams (u8)
0029  * @MT76_TM_ATTR_TX_RATE_IDX: packet tx rate/MCS index (u8)
0030  * @MT76_TM_ATTR_TX_RATE_SGI: packet tx use short guard interval (u8)
0031  * @MT76_TM_ATTR_TX_RATE_LDPC: packet tx enable LDPC (u8)
0032  * @MT76_TM_ATTR_TX_RATE_STBC: packet tx enable STBC (u8)
0033  * @MT76_TM_ATTR_TX_LTF: packet tx LTF, set 0 to 2 for 1x, 2x, and 4x LTF (u8)
0034  *
0035  * @MT76_TM_ATTR_TX_ANTENNA: tx antenna mask (u8)
0036  * @MT76_TM_ATTR_TX_POWER_CONTROL: enable tx power control (u8)
0037  * @MT76_TM_ATTR_TX_POWER: per-antenna tx power array (nested, u8 attrs)
0038  *
0039  * @MT76_TM_ATTR_FREQ_OFFSET: RF frequency offset (u32)
0040  *
0041  * @MT76_TM_ATTR_STATS: statistics (nested, see &enum mt76_testmode_stats_attr)
0042  *
0043  * @MT76_TM_ATTR_TX_SPE_IDX: tx spatial extension index (u8)
0044  *
0045  * @MT76_TM_ATTR_TX_DUTY_CYCLE: packet tx duty cycle (u8)
0046  * @MT76_TM_ATTR_TX_IPG: tx inter-packet gap, in unit of us (u32)
0047  * @MT76_TM_ATTR_TX_TIME: packet transmission time, in unit of us (u32)
0048  *
0049  * @MT76_TM_ATTR_DRV_DATA: driver specific netlink attrs (nested)
0050  *
0051  * @MT76_TM_ATTR_MAC_ADDRS: array of nested MAC addresses (nested)
0052  */
0053 enum mt76_testmode_attr {
0054     MT76_TM_ATTR_UNSPEC,
0055 
0056     MT76_TM_ATTR_RESET,
0057     MT76_TM_ATTR_STATE,
0058 
0059     MT76_TM_ATTR_MTD_PART,
0060     MT76_TM_ATTR_MTD_OFFSET,
0061 
0062     MT76_TM_ATTR_TX_COUNT,
0063     MT76_TM_ATTR_TX_LENGTH,
0064     MT76_TM_ATTR_TX_RATE_MODE,
0065     MT76_TM_ATTR_TX_RATE_NSS,
0066     MT76_TM_ATTR_TX_RATE_IDX,
0067     MT76_TM_ATTR_TX_RATE_SGI,
0068     MT76_TM_ATTR_TX_RATE_LDPC,
0069     MT76_TM_ATTR_TX_RATE_STBC,
0070     MT76_TM_ATTR_TX_LTF,
0071 
0072     MT76_TM_ATTR_TX_ANTENNA,
0073     MT76_TM_ATTR_TX_POWER_CONTROL,
0074     MT76_TM_ATTR_TX_POWER,
0075 
0076     MT76_TM_ATTR_FREQ_OFFSET,
0077 
0078     MT76_TM_ATTR_STATS,
0079 
0080     MT76_TM_ATTR_TX_SPE_IDX,
0081 
0082     MT76_TM_ATTR_TX_DUTY_CYCLE,
0083     MT76_TM_ATTR_TX_IPG,
0084     MT76_TM_ATTR_TX_TIME,
0085 
0086     MT76_TM_ATTR_DRV_DATA,
0087 
0088     MT76_TM_ATTR_MAC_ADDRS,
0089 
0090     /* keep last */
0091     NUM_MT76_TM_ATTRS,
0092     MT76_TM_ATTR_MAX = NUM_MT76_TM_ATTRS - 1,
0093 };
0094 
0095 /**
0096  * enum mt76_testmode_state - statistics attributes
0097  *
0098  * @MT76_TM_STATS_ATTR_TX_PENDING: pending tx frames (u32)
0099  * @MT76_TM_STATS_ATTR_TX_QUEUED: queued tx frames (u32)
0100  * @MT76_TM_STATS_ATTR_TX_QUEUED: completed tx frames (u32)
0101  *
0102  * @MT76_TM_STATS_ATTR_RX_PACKETS: number of rx packets (u64)
0103  * @MT76_TM_STATS_ATTR_RX_FCS_ERROR: number of rx packets with FCS error (u64)
0104  * @MT76_TM_STATS_ATTR_LAST_RX: information about the last received packet
0105  *  see &enum mt76_testmode_rx_attr
0106  */
0107 enum mt76_testmode_stats_attr {
0108     MT76_TM_STATS_ATTR_UNSPEC,
0109     MT76_TM_STATS_ATTR_PAD,
0110 
0111     MT76_TM_STATS_ATTR_TX_PENDING,
0112     MT76_TM_STATS_ATTR_TX_QUEUED,
0113     MT76_TM_STATS_ATTR_TX_DONE,
0114 
0115     MT76_TM_STATS_ATTR_RX_PACKETS,
0116     MT76_TM_STATS_ATTR_RX_FCS_ERROR,
0117     MT76_TM_STATS_ATTR_LAST_RX,
0118 
0119     /* keep last */
0120     NUM_MT76_TM_STATS_ATTRS,
0121     MT76_TM_STATS_ATTR_MAX = NUM_MT76_TM_STATS_ATTRS - 1,
0122 };
0123 
0124 
0125 /**
0126  * enum mt76_testmode_rx_attr - packet rx information
0127  *
0128  * @MT76_TM_RX_ATTR_FREQ_OFFSET: frequency offset (s32)
0129  * @MT76_TM_RX_ATTR_RCPI: received channel power indicator (array, u8)
0130  * @MT76_TM_RX_ATTR_IB_RSSI: internal inband RSSI (array, s8)
0131  * @MT76_TM_RX_ATTR_WB_RSSI: internal wideband RSSI (array, s8)
0132  * @MT76_TM_RX_ATTR_SNR: signal-to-noise ratio (u8)
0133  */
0134 enum mt76_testmode_rx_attr {
0135     MT76_TM_RX_ATTR_UNSPEC,
0136 
0137     MT76_TM_RX_ATTR_FREQ_OFFSET,
0138     MT76_TM_RX_ATTR_RCPI,
0139     MT76_TM_RX_ATTR_IB_RSSI,
0140     MT76_TM_RX_ATTR_WB_RSSI,
0141     MT76_TM_RX_ATTR_SNR,
0142 
0143     /* keep last */
0144     NUM_MT76_TM_RX_ATTRS,
0145     MT76_TM_RX_ATTR_MAX = NUM_MT76_TM_RX_ATTRS - 1,
0146 };
0147 
0148 /**
0149  * enum mt76_testmode_state - phy test state
0150  *
0151  * @MT76_TM_STATE_OFF: test mode disabled (normal operation)
0152  * @MT76_TM_STATE_IDLE: test mode enabled, but idle
0153  * @MT76_TM_STATE_TX_FRAMES: send a fixed number of test frames
0154  * @MT76_TM_STATE_RX_FRAMES: receive packets and keep statistics
0155  * @MT76_TM_STATE_TX_CONT: waveform tx without time gap
0156  * @MT76_TM_STATE_ON: test mode enabled used in offload firmware
0157  */
0158 enum mt76_testmode_state {
0159     MT76_TM_STATE_OFF,
0160     MT76_TM_STATE_IDLE,
0161     MT76_TM_STATE_TX_FRAMES,
0162     MT76_TM_STATE_RX_FRAMES,
0163     MT76_TM_STATE_TX_CONT,
0164     MT76_TM_STATE_ON,
0165 
0166     /* keep last */
0167     NUM_MT76_TM_STATES,
0168     MT76_TM_STATE_MAX = NUM_MT76_TM_STATES - 1,
0169 };
0170 
0171 /**
0172  * enum mt76_testmode_tx_mode - packet tx phy mode
0173  *
0174  * @MT76_TM_TX_MODE_CCK: legacy CCK mode
0175  * @MT76_TM_TX_MODE_OFDM: legacy OFDM mode
0176  * @MT76_TM_TX_MODE_HT: 802.11n MCS
0177  * @MT76_TM_TX_MODE_VHT: 802.11ac MCS
0178  * @MT76_TM_TX_MODE_HE_SU: 802.11ax single-user MIMO
0179  * @MT76_TM_TX_MODE_HE_EXT_SU: 802.11ax extended-range SU
0180  * @MT76_TM_TX_MODE_HE_TB: 802.11ax trigger-based
0181  * @MT76_TM_TX_MODE_HE_MU: 802.11ax multi-user MIMO
0182  */
0183 enum mt76_testmode_tx_mode {
0184     MT76_TM_TX_MODE_CCK,
0185     MT76_TM_TX_MODE_OFDM,
0186     MT76_TM_TX_MODE_HT,
0187     MT76_TM_TX_MODE_VHT,
0188     MT76_TM_TX_MODE_HE_SU,
0189     MT76_TM_TX_MODE_HE_EXT_SU,
0190     MT76_TM_TX_MODE_HE_TB,
0191     MT76_TM_TX_MODE_HE_MU,
0192 
0193     /* keep last */
0194     NUM_MT76_TM_TX_MODES,
0195     MT76_TM_TX_MODE_MAX = NUM_MT76_TM_TX_MODES - 1,
0196 };
0197 
0198 extern const struct nla_policy mt76_tm_policy[NUM_MT76_TM_ATTRS];
0199 
0200 #endif