testmode.h 5.7 KB

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