tx_flush_req.h 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748
  1. /*
  2. * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
  3. *
  4. * Permission to use, copy, modify, and/or distribute this software for any
  5. * purpose with or without fee is hereby granted, provided that the above
  6. * copyright notice and this permission notice appear in all copies.
  7. *
  8. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  9. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  10. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  11. * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  12. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  13. * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  14. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  15. */
  16. #ifndef _TX_FLUSH_REQ_H_
  17. #define _TX_FLUSH_REQ_H_
  18. #if !defined(__ASSEMBLER__)
  19. #endif
  20. #define NUM_OF_DWORDS_TX_FLUSH_REQ 2
  21. #define NUM_OF_QWORDS_TX_FLUSH_REQ 1
  22. struct tx_flush_req {
  23. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  24. uint32_t flush_req_reason : 8, // [7:0]
  25. phytx_abort_reason : 8, // [15:8]
  26. flush_req_user_number_or_link_id : 6, // [21:16]
  27. mlo_abort_reason : 5, // [26:22]
  28. reserved_0a : 5; // [31:27]
  29. uint32_t tlv64_padding : 32; // [31:0]
  30. #else
  31. uint32_t reserved_0a : 5, // [31:27]
  32. mlo_abort_reason : 5, // [26:22]
  33. flush_req_user_number_or_link_id : 6, // [21:16]
  34. phytx_abort_reason : 8, // [15:8]
  35. flush_req_reason : 8; // [7:0]
  36. uint32_t tlv64_padding : 32; // [31:0]
  37. #endif
  38. };
  39. /* Description FLUSH_REQ_REASON
  40. The reason why the flush request was generated.
  41. <enum 0 reserved_code>This is included for clean implementation
  42. and verification. This code should NOT be used during a
  43. valid FLUSH. It is used as a keeper value when flush logic
  44. is idle
  45. <enum 1 txpcu_flreq_code_txop_exceeded>Flush request issued
  46. by TXPCU in case of a WCOEX abort.
  47. <enum 2 crypt_flreq_rx_int_tx>This is a corner case scenario.
  48. A situation where:
  49. a.A RX is just over and CCA indication is IDLE
  50. b.Crypt is still busy decrypting
  51. c.A TX just starts.
  52. The TX should be tried later. This situation may be rare.
  53. Just taking an extra precaution.
  54. <enum 3 txpcu_flreq_code_rts_pkt_cca_abort>This is the static
  55. BW failure happening right after start_tx for either RTS
  56. frame or data packet
  57. <enum 4 txpcu_flreq_code_cts_cca_abort>This is the static
  58. BW failure in the protection sequence (CTS).
  59. <enum 5 pdg_flreq_code_txop_abort>This is PDG signaling
  60. not enough TXOP for transmission
  61. <enum 6 sw_explicit_flush_termination>When SW issues a flush
  62. WHICH CAUSES AN ONGOING FES to terminate
  63. <enum 7 fes_stp_not_enough_txop_rem>Not enough TXOP remaining
  64. in either SW or HW mode. This checks if the remaining TXOP
  65. < a parameterized minimum time. Currently half SIFS duration
  66. (5 us).
  67. <enum 8 hwsch_sch_tlv_zero_hdr_err>HWSCH flush when Parser
  68. engine encounters a header with all zeros in the DWORD
  69. <enum 9 fes_stp_tlv_time_exceeded_bkof_exp>Issued in case
  70. TLV transmission exceeds start_tx time
  71. <enum 10 fes_stp_sw_fes_time_gt_hw>SW mode abort. When HWSCH
  72. determines that none of the SW programmed (upto 3) BW times
  73. can fit into the current TXOP remaining
  74. <enum 11 txpcu_flreq_ppdu_allow_bw_fields_not_set>Flush
  75. request issued by TXPCU in case none of the PPDU_ALLOW_BW_*
  76. fields are set in PCU_PPDU_SETUP TLV
  77. <enum 12 txpcu_false_mu_reception>Flush request issued by
  78. TXPCU if RXPCU initiates a response generation for a MU
  79. reception even though MU reception was not expected
  80. <enum 13 hwsch_coex_abort>Flush request issued by HWSCH
  81. when a coex event caused this transmit to be aborted
  82. <enum 14 hwsch_svd_rdy_timeout>Flush request issued by HWSCH
  83. when the PHY does not return the SVD_READY before a timeout
  84. expires
  85. <enum 15 num_mpdu_count_zero>Flush request issued by TXPCU
  86. when the number of MPDU counter for selected BW is zero
  87. <enum 16 unsupported_cbf>Flush request issued by TXPCU if
  88. TXPCU receives TX_PKT_END with error_unsupported_cbf during
  89. CV transfer.
  90. <enum 17 txpcu_flreq_pcu_ppdu_setup_init_not_valid>Indicates
  91. TXPCU has not received PCU_PPDU_SETUP_INIT from PDG, by
  92. the time it received PRE_START_TX from HWSCH.
  93. <enum 18 txpcu_flreq_pcu_ppdu_setup_start_not_valid>Indicates
  94. TXPCU has not received PCU_PPDU_SETUP_START from PDG, by
  95. the time it received START_TX from HWSCH.
  96. <enum 19 txpcu_flreq_tx_phy_descriptor_not_valid>Indicates
  97. TXPCU has not received TX_PHY_DESCRIPTOR within REQD_TLVS_WAIT_TIME
  98. after receiving START_TX from HWSCH.
  99. <enum 20 txpcu_req_tlvs_timeout_for_cbf>TXPCU did nor receive
  100. the CBF info TLVs from the PHY fast enough which resulted
  101. in a timeout.
  102. <enum 21 txdma_flreq_no_of_mpdu_less_than_limit_status>Indicates
  103. the total number of MPDUs that needs to be send out by
  104. TXDMA is less than the number indicated by PDG/TXPCU in
  105. the MPDU_LIMIT_STATUS
  106. <enum 22 txole_flreq_frag_en_amsdu_ampdu>Fragmentation is
  107. enabled in TX_FES_SETUP for an AMSDU or AMPDU
  108. <enum 23 txole_flreq_more_frag_set_for_last_seg>more_frag
  109. bit in TX_FES_SETUP TLV is set for the last MPDU fragment
  110. <enum 24 txpcu_flreq_start_tx_bw_mismatch>Indicates TXPCU
  111. has detected a mismatch between BWs detected at PRE_START_TX
  112. and START_TX
  113. <enum 25 txpcu_flreq_coex_bw_not_allowed>flush request and
  114. is asserted by TXPCU when the final negotiated BW from
  115. COEX is not allowed by SW
  116. <enum 26 txole_flreq_frag_en_sw_encrypted>flush request
  117. and is asserted by TXPCU when the final negotiated BW from
  118. COEX is not allowed by SW
  119. <enum 27 txole_flreq_frag_en_buffer_chaining>Fragmentation
  120. is enabled in raw mode buffer chaining mode.
  121. <enum 28 txole_flreq_pv1_type3_amsdu_error>A1 and A2 set
  122. to MAC addresses for 11ah PV1 short frame which is an AMSDU
  123. <enum 29 txole_flreq_pv1_wrong_key_type>An unsupported key_type
  124. is set for a PV1 frames. WEP, TKIP and WAPI are not supported
  125. for PV1 frames
  126. <enum 30 txole_flreq_illegal_frame>Unexpected Tx Mpdu length.
  127. Asserted if the MSDU PACKET TLV length is less than the
  128. expected WMAC header
  129. <enum 31 pdg_flreq_coex_reasons>Asserted by PDG when COEX
  130. related logic in PDG requires a flush request.
  131. <enum 32 wifi_txole_no_full_msdu_for_checksum_en>Full MSDU
  132. packet was not provided by TXDMA when checksum/TSO/fragmentation
  133. was enabled
  134. <enum 33 wifi_txole_length_mismatch_802_3_eth_frame>The
  135. length field in the incoming 802.3 ethernet frame doesn't
  136. match with the actual number of bytes in the data TLV.
  137. <enum 34 wifi_txole_pv0_amsdu_frame_err>Non-QoS frames are
  138. queued as part of AMSDU
  139. <enum 35 wifi_txole_pv0_wrong_key_type>Key type in peer
  140. table set to NO_CIPHER for protected frames
  141. <enum 36 wifi_fes_stp_cca_busy_in_pifs>This flush is initiated
  142. by scheduler when (if enabled) CCA goes busy in the middle
  143. of a PIFS burst
  144. <enum 37 prot_frame_data_underrun>This flush is initiated
  145. by TXPCU when a protection frame is send, but TXPCU has
  146. not received address fields in time.
  147. <enum 38 pdg_no_length_received>PDG generated this flush
  148. request because not one MPDU length info has been received
  149. at the required timeout (which is programmable)
  150. <enum 39 pdg_wrong_preamble_req_order>PDG generated this
  151. flush request because PHY issued an unexpected preamble
  152. request type
  153. <enum 40 txpcu_flreq_retry_for_optimal_bw>The most desired
  154. BW was not available, and TXPCU would like to try the most
  155. optimal transmit BW again after a new BO period.
  156. <enum 41 wifi_txole_incomplete_llc_frame>LLC received incomplete
  157. frame
  158. <enum 42 pdg_cts_lower_bw_fit_err>PDG received a CTS frame
  159. that reduced the BW, As a result the MPDU does not fit
  160. in the previous reserved time, the thus this transmission
  161. is aborted
  162. <enum 43 pdg_cts_shorter_dur_fit_err>PDG received a CTS
  163. frame that a reduced duration field. As a result the MPDU
  164. does not fit in the previous reserved time, the thus this
  165. transmission is aborted
  166. Note the duration field in CTS can be reduced as a result
  167. of COEX reasons
  168. <enum 44 hwsch_sch_tlv_len_oor_err>HWSCH flush when Parser
  169. engine encounters a header whose length is greater than
  170. 511 dwords. This excludes DUMMY TLVs.
  171. <enum 45 hwsch_sch_tlv_taglen_mismatch_err>HWSCH flush when
  172. Parser engine encounters a header whose TAG does not match
  173. the XML specified length. This check excludes zero length
  174. and variable length TLVs
  175. <enum 46 hwsch_sch_tlv_sfm_tracking_err>HWSCH flush when
  176. Parser engine encounters a non contiguous error check code,
  177. while reading SFM. This check is primarily to catch data
  178. write or read issues within the buffering process of scheduler
  179. TLV in SFM
  180. <enum 47 wifitx_flush_rssi_above_obss_nonsrg_thr>When HWSCH
  181. attempts to transmit a packet based on OBSS_PD non-SRG
  182. opportunity, a flush with this code is generated if "ReceivedRssi
  183. from RXPCU > Scheduler_cmd.RssiAltNonSrg".
  184. <enum 48 wifitx_flush_rssi_above_obss_srg_thr>When HWSCH
  185. attempts to transmit a packet based on OBSS_PD non-SRG
  186. opportunity, a flush with this code is generated if "ReceivedRssi
  187. from RXPCU > Scheduler_cmd.RssiAltSrg".
  188. <enum 49 wifitx_flush_rssi_above_srp_pwr_thr>When HWSCH
  189. attempts to transmit a packet within an SRP opportunity
  190. window, a flush with this code is generated if "Scheduler_cmd.SrpAltPwr
  191. > SRP_less_RSSI".
  192. <enum 50 hwsch_unexpected_sch_tlv_end_err>parse errors
  193. <enum 51 hwsch_sch_tlv_tag_oor_err>HWSCH flush when Parser
  194. engine encounters a header whose TAG is not listed in the
  195. XML TAG table
  196. <enum 52 txpcu_phytx_abort_err>An abort from PHY TX got
  197. received
  198. <enum 53 txpcu_coex_soft_abort_err>A soft from coex got
  199. received before even a single MPDU got transmitted. Therefor
  200. transmission is terminated.
  201. <enum 54 pdg_min_user_count_missed>PDG was asked to start
  202. an MU transmission, but the number of users with actual
  203. data was less then the threshold (Min_users_with_data_count)
  204. <enum 55 pdg_min_byte_count_missed>PDG was asked to start
  205. an SU transmission, but the number of bytes that PDG has
  206. been informed about that can be transmitted is less then
  207. the required threshold (min_ppdu_bytes)
  208. <enum 56 pdg_min_mpdu_count_missed>PDG was asked to start
  209. an SU transmission, but the number of MPDUs that PDG has
  210. been informed about that can be transmitted is less then
  211. the required threshold (min_mpdus_in_ppdu)
  212. <enum 57 pdg_cannot_pad_min_ppdu_time>PDG uses this code
  213. when the min PPDU time to pad up to (pad_min_ppdu_time)
  214. can not be met due to other boundary conditions (e.g. FES
  215. time/TXOP time/TBTT)
  216. <enum 58 ucode_flush_request>Flush request initiated by
  217. the ucode (M3)
  218. <enum 59 txpcu_resp_frame_flushed>TXPCU uses this code on
  219. encountering an error condition (e.g. late MACTX_PHY_DESC
  220. or CV error) while generating a response.
  221. <enum 60 hwsch_sifs_burst_svd_ready_timeout>This flush code
  222. is used by HWSCH to indicate that during SIFS bursting,
  223. an SVD_READY timeout was detected, which resulted in the
  224. SIFS burst to be aborted.
  225. <enum 61 txpcu_phy_data_request_to_early>TXPCU has not been
  226. properly initialized when the first data request from the
  227. PHY has been seen.
  228. <enum 62 txpcu_trigger_response_cs_check_fail>TXPCU found
  229. that the medium was not idle for the Carries Sense check
  230. that PDG indicated was needed for the triggered response
  231. frame.
  232. <enum 63 pdg_ofdma_max_unused_space_violation>PDG found
  233. out that when trying to assign the RUs among the available
  234. users, the number of unused RUs remained above the allowed
  235. threshold
  236. <enum 64 crypto_tx_user_capacity_exceeded>This happens when
  237. Crypto receives TLVs for more TX users than it can support
  238. at that point of time
  239. <enum 65 crypto_tx_non_mu_key_type_rcvd>This happens when
  240. Crypto receives unsupported Key types (WEP, TKIP) for MU
  241. <enum 66 txpcu_cbf_resp_abort>CBF response generation by
  242. TXPCU ran into issues due to info not being available from
  243. the PHY
  244. <enum 67 txpcu_phy_nap_received_during_tx>TXPCU received
  245. a PHY NAP TLV from rxpcu while a transmission was ongoing.
  246. The transmission will be terminated with this abort reason.
  247. <enum 68 rxpcu_trigger_with_fcs_error>RXPCU found out that
  248. the trigger frame that was received and for which the TX
  249. path has been activated to generate a response, had an
  250. FCS error.
  251. <enum 69 pdg_flreq_coex_bt_higher_priority>Asserted by PDG
  252. when COEX indicated to PDG that the transmit request is
  253. NOT granted because a higher priority BT activity is ongoing.
  254. <enum 70 txpcu_txrx_conflict_detected>TXPCU detected a conflict
  255. between an FES transmission and a self-gen response transmission.
  256. This is when the PHY + RXPCU delays cause a self-gen to
  257. overlap with the pre-backoff time from HWSCH for the next
  258. FES.
  259. <enum 71 pdg_mu_cts_ru_allocation_corruption>PDG received
  260. a MU-RTS trigger for which the CTS RU response setting
  261. is not valid
  262. <enum 72 pdg_trig_for_blocked_ru>PDG received a trigger
  263. based transmission request for an RU size that is blocked
  264. by SW.
  265. <enum 73 pdg_trig_response_mode_corruption>Asserted when
  266. PDG gets a TX_FES_SETUP with field "Fes_in_11ax_Trigger_response_config"
  267. not being in sync with what it was expecting.
  268. <enum 74 pdg_invalid_trigger_config_received>PDG received
  269. OFDMA_TRIGGER_DETAILS and the configuration in there (which
  270. RXPCU gets from the trigger frame has invalid field value
  271. combinations
  272. <enum 75 txole_msdu_too_long>This flush request will be
  273. asserted if the length of a checksum enabled MSDU is more
  274. than 2400 bytes.
  275. <enum 76 txole_inconsistent_mesh>This flush request will
  276. be asserted if mesh_enable is set for an MSDU subframe
  277. while its not set for another MSDU subframe in the same
  278. AMSDU
  279. <enum 77 txole_mesh_enable_for_ethernet>This flush request
  280. will be asserted if mesh_enable is set for an ethernet
  281. frame
  282. <enum 78 txpcu_trig_response_mode_corruption>Asserted when
  283. TXPCU gets a TX_FES_SETUP with field "ofdma_triggered_response"
  284. not being in sync with what it was expecting.
  285. <enum 79 pdg_11ax_invalid_rate_setup>PDG received an 11ax
  286. transmit set of parameters that is not allowed or not supported
  287. <enum 80 txpcu_trig_response_info_too_late>TXPCU generates
  288. this flush request because trigger response transmission
  289. setup info from the SCH was received too late
  290. <enum 81 wifitx_flush_obss_pd_disabled_for_tx>When HWSCH
  291. attempts to transmit a packet having obss_pd disabled within
  292. an obss_pd opportunity window this flush code is generated
  293. <enum 82 wifitx_flush_srp_disabled_for_tx>When HWSCH attempts
  294. to transmit a packet having SRP disabled within an obss_pd
  295. opportunity window this flush code is generated
  296. <enum 83 pdg_flreq_code_srp_sr_missed>In SRP SR, PDG will
  297. generate flush if receiving PDG_TX_REQ in a blocking window
  298. around SRP SR limit
  299. <enum 84 pdg_rbo_user_limit_no_data>PDG generates when no
  300. data can be sent for the users specified by TX_FES_SETUP
  301. field "RBO_must_have_data_user_limit."
  302. <enum 85 pdg_no_cbf_response_received>Used by PDG for an
  303. MU-MIMO sounding plus steering burst when it did not receive
  304. CBF from any recipient STA
  305. <enum 86 pdg_flreq_unexpected_notify_frame>PDG generates
  306. when encountering a 'HARD_NOTIFY' or a 'SEMI_HARD_NOTIFY'
  307. frame unless ignore_tx_notify_setting is set in 'PDG_FES_SETUP'
  308. <enum 87 pdg_flush_min_ppdu_time_missed>PDG was asked to
  309. start a transmission, but the time required to transmit
  310. the PPDU is less than the required threshold (flush_min_ppdu_time)
  311. <enum 88 txpcu_flreq_rxpcu_setup_config_error>Used by TXPCU
  312. when Tx is complete and it is about to generate 'EXPECTED_RESPONSE'
  313. but it has not got any 'RXPCU_SETUP_COMPLETE' although 'rxpcu_setup_complete_present'
  314. was set in 'TX_FES_SETUP'
  315. <enum 89 txpcu_flreq_late_trig_tlvs>Used by TXPCU when the
  316. 'RECEIVED_TRIGER_INFO' TLV is sent to SCH after the 'pre_phy_desc'
  317. timer has expired, if enabled
  318. <enum 90 pdg_flreq_notify_mpdu_late>Used by PDG when the
  319. first 'MPDU_INFO' is not available when sending 'PCU_PPDU_SETUP_START'
  320. so PDG has assumed a regular MPDU ('FW_tx_notify_frame =
  321. NO_TX_NOTIFY'), but later the MPDU turned out to be a notify
  322. frame, if enabled
  323. <enum 91 txdma_flreq_sfm_full>TXDMA generates this flush
  324. request when it gets 'MPDU_INFO's for a user that it is
  325. unable to write into SFM since its SFM allocation is full.
  326. <enum 92 txpcu_flreq_pre_phy_desc_late>Used in TXPCU for
  327. generating a flush request when 'PRE_PHY_DESC' is received
  328. late (determined by a timer)
  329. <enum 93 pdg_flreq_cannot_fit_trig_response>This flush request
  330. code is used by PDG if the trigger response MPDUs cannot
  331. be fit to avoid sending only null delimiters for e.g. unassociated
  332. UORA and colliding with another STA with valid data.
  333. <enum 94 pdg_flreq_unexpected_fes_setup>Flush request used
  334. by PDG in case of unexpected 'TX_FES_SETUP'
  335. <enum 95 pdg_flreq_code_mlo_abort>Flush request used by
  336. PDG in case of MLO constraints forcing an abort
  337. <enum 96 hwsch_bkoff_trunc_seq_abort>Flush request used
  338. by HWSCH if an MLO backoff truncation request resulted in
  339. a forced abort to avoid windows too close to transmissions
  340. <enum 97 txole_flreq_illegal_frag_settings>Flush request
  341. used by TXOLE if fragmentation is requested but the settings
  342. are illegal
  343. <enum 98 txpcu_flreq_mac_flex_overwrite_err>Flush request
  344. used by TXPCU when required overwrite TLVs are not received
  345. from microcode, or when overwrite TLVs are dropped in MAC
  346. due to SFM full condition
  347. <enum 99 txpcu_lmr_req_timeout>Flush request by TXPCU if
  348. PHY does not respond to 'MACRX_LMR_READ_REQUEST' or 'MACRX_LMR_DATA_REQUEST'
  349. on time
  350. <enum 100 txpcu_lmr_phyrx_err_abort>Flush request by TXPCU
  351. if PHY sent 'PHYRX_LMR_TRANSFER_ABORT' or 'PHYRX_LMR_READ_REQUEST_ACK'
  352. with status anything other than OK
  353. <enum 101 txpcu_rx_bitmap_ack_mismatch>Flush request by
  354. TXPCU on getting a mismatched TLV from RXPCU for 'RX_FRAME_*BITMAP_ACK' (1Kbit
  355. instead of 256-bit or vice versa)
  356. <enum 102 txpcu_rx_incorrect_ba_cnt_for_ampdu>Flush request
  357. by TXPCU on getting an 'RX_RESPONSE_REQUIRED_INFO' with
  358. A-MPDU set, VHT Ack clear and 'response_ba*_cnt' zero,
  359. to avoid a system hang
  360. <enum 103 txpcu_flreq_cbf_done_delayed>Flush request by
  361. TXPCU on not getting a 'MACTX_CBF_DONE' from RXPCU after
  362. sending 'RESPONSE_END_STATUS' TLV
  363. <enum 104 txpcu_flreq_sfm_full>Flush request by TXPCU if
  364. SFM indicates 'user_fifo_full'
  365. <enum 105 pdg_flreq_calc_psdu_length_too_low>PDG was asked
  366. to start an MU transmission, but one of the users' RU is
  367. such that within the PPDU time the PSDU length that can
  368. be fit is too low (based on a threshold in a PDG register)
  369. <enum 106 pdg_flush_min_ppdu_time_obss_sr_missed>PDG was
  370. asked to start an OBSS PD SR transmission, but the time
  371. required to transmit the PPDU is less than the required
  372. threshold (flush_min_ppdu_time_obss_pd_sr)
  373. <enum 107 pdg_flreq_code_txop_abort_obss_sr>PDG was asked
  374. to start an OBSS PD SR transmission, but the time required
  375. for the FES is more than the OBSS PPDU duration (max_fes_time_obss_pd_sr)
  376. <enum 108 pdg_flreq_cv_corr_tlv_timeout>PDG timed out waiting
  377. for CV correlation TLVs from microcode
  378. <enum 109 pdg_flreq_pri_user_cbf_fail>Flush request from
  379. PDG if CV correlation is enabled and the 'PHYTX_CV_CORR_STATUS'
  380. from microcode indicates that the primary user's CBF has
  381. failed
  382. <enum 110 hwsch_sfm_availability_check_fail>HWSCH-issued
  383. flush when the SFM availability check fails during a SIFS
  384. burst or when fetching part 2 TLVs
  385. <enum 111 pdg_cannot_pad_response_time>PDG uses this code
  386. when the response time to pad up to (required_response_time)
  387. cannot be met due to the frame length in 'PDG_RESPONSE'
  388. exceeding the calculated padded length
  389. <enum 112 ul_mu_rx_early_abort>Flush request to terminate
  390. an FES when RXPCU aborted an UL MU reception early because
  391. at the end of the "early_termination_window," the required
  392. number of users with at least one valid MPDU delimiter
  393. was not reached.
  394. <enum 113 reserved_flush_code_25>Placeholder for future
  395. needs
  396. <enum 114 reserved_flush_code_26>TXPCU uses this code when
  397. more than the configured maximum CTS2SELF are being sent.
  398. <enum 115 reserved_flush_code_27>TXPCU uses this code when
  399. at the time of the main PPDU transmission, fewer than the
  400. configured minimum CTS2SELF were sent.
  401. <enum 116 reserved_flush_code_28>TXDMA uses this code when
  402. it is about to issue zero-address or zero-length read or
  403. when it read a 'TX_MSDU_LINK' but the Buffer_type field
  404. in the uniform descriptor header does not indicate 'Transmit_MSDU_Link_descriptor'
  405. <enum 117 reserved_flush_code_29>TXPCU uses this code when
  406. it gets a 'pre_start_tx' pulse from SCH but has not yet
  407. got the 'TX_FES_SETUP' TLV
  408. <enum 118 reserved_flush_code_30>Placeholder for future
  409. needs
  410. <enum 119 reserved_flush_code_31>Placeholder for future
  411. needs
  412. <enum 120 reserved_flush_code_32>Placeholder for future
  413. needs
  414. <enum 121 reserved_flush_code_33>Placeholder for future
  415. needs
  416. <enum 122 reserved_flush_code_34>Placeholder for future
  417. needs
  418. <enum 123 reserved_flush_code_35>Placeholder for future
  419. needs
  420. <enum 124 reserved_flush_code_36>Placeholder for future
  421. needs
  422. <enum 125 reserved_flush_code_37>Placeholder for future
  423. needs
  424. <enum 126 reserved_flush_code_38>Placeholder for future
  425. needs
  426. <enum 127 unknown_flush_request_code>Used by SCH when it
  427. receives an undefined flush request reason code
  428. */
  429. #define TX_FLUSH_REQ_FLUSH_REQ_REASON_OFFSET 0x0000000000000000
  430. #define TX_FLUSH_REQ_FLUSH_REQ_REASON_LSB 0
  431. #define TX_FLUSH_REQ_FLUSH_REQ_REASON_MSB 7
  432. #define TX_FLUSH_REQ_FLUSH_REQ_REASON_MASK 0x00000000000000ff
  433. /* Description PHYTX_ABORT_REASON
  434. Field only valid when Flush_req_reason == TXPCU_PHYTX_ABORT_ERR
  435. <enum 0 no_phytx_error_reported>This value is the default
  436. value the MAC will fill in the status TLV (when not PHY
  437. abort was received).
  438. Note that when PHY generates the PHYTX_ABORT_REQUEST, this
  439. value shall never be used.
  440. <enum 1 error_txtd_ifft_underrun>PHY ran out of transmit
  441. data due to transmit underrun - this field is user-specific
  442. (see user_number field)
  443. <enum 2 error_tx_invalid_tlv>
  444. <enum 3 error_tx_unexpected_tlv>
  445. <enum 4 error_tx_pkt_end_error>
  446. <enum 5 error_tx_bw_is_gt_dyn_bw>
  447. <enum 6 error_txtd_pkt_start_error>
  448. <enum 7 error_txfd_pre_phy_tlv_ooo>
  449. <enum 8 error_txtd_mu_data_underrun>
  450. <enum 9 error_tx_legacy_rate_illegal>
  451. <enum 10 error_tx_fifo_error>
  452. <enum 11 error_tx_ack_wd_error>
  453. <enum 12 error_tx_tpc_miss>
  454. <enum 13 error_mac_tx_abort>
  455. <enum 14 error_tx_pcss_phy_desc_wdg_timeout>
  456. <enum 15 error_unsupported_cbf>
  457. <enum 16 error_cv_static_bandwidth_mismatch>
  458. <enum 17 error_cv_dynamic_bandwidth_mismatch>
  459. <enum 18 error_cv_unsupported_nss_total>
  460. <enum 19 error_nss_bf_params_mismatch>
  461. <enum 20 error_txbf_fail>
  462. <enum 21 error_txbf_snd_fail>This used to be called 'error_illegal_nss.'
  463. <enum 22 error_otp_txbf>
  464. <enum 23 error_tx_inv_chainmask>
  465. <enum 24 error_cv_index_assign_overload>This error indicates
  466. that CV prefetch command indicated a CV index that is not
  467. available.
  468. <enum 25 error_cv_index_delete>This error indicates that
  469. CV delete command indicated a CV index that did not contain
  470. any valid info
  471. <enum 26 error_tx_he_rate_illegal>Error found with the HE
  472. transmission parameters
  473. <enum 27 error_tx_pcss_wdg_timeout>
  474. <enum 28 error_tx_tlv_tag_mismatch>
  475. <enum 29 error_tx_cck_fifo_flush>
  476. <enum 30 error_tx_no_mac_pkt_end>
  477. <enum 31 error_tx_abort_for_mac_war>
  478. <enum 32 error_tx_stuck>
  479. <enum 33 error_tx_invalid_uplink_tlv>
  480. <enum 34 error_txfd_txcck_illegal_tx_rate_error>
  481. <enum 35 error_txfd_txcck_underrun_error>
  482. <enum 36 error_txfd_mpi_req_grant_error>
  483. <enum 37 error_txfd_control_tlv_fifo_ovfl_error>
  484. <enum 38 error_txfd_tlv_fifo_overflow_error>
  485. <enum 39 error_txfd_data_fifo_underflow_error>
  486. <enum 40 error_txfd_data_fifo_overflow_error>
  487. <enum 41 error_txfd_service_fifo_overflow_error>
  488. <enum 42 error_txfd_he_sigb_fifo_overflow_error>
  489. <enum 43 error_txfd_spurious_data_fifo_error>
  490. <enum 44 error_txfd_he_siga_fifo_ovfl_error>
  491. <enum 45 error_txfd_unknown_tlv_error>
  492. <enum 46 error_txfd_mac_response_ordering_error>
  493. <enum 47 error_txfd_unexpected_mac_pkt_end_error>
  494. <enum 48 error_txfd_tlv_fifo_rd_hang_error>All FIFO read
  495. hang errors use this value.
  496. <enum 49 error_txfd_tlv_fifo_no_rd_error>All FIFO no read
  497. errors use this value.
  498. <enum 50 error_txfd_ordering_fifo_no_rd_error>
  499. <enum 51 error_txfd_illegal_cf_tlv_error>
  500. <enum 52 error_txfd_user_ru_hang_error>
  501. <enum 53 error_txfd_stream_ru_hang_error>
  502. <enum 54 error_txfd_num_pad_bits_error>
  503. <enum 55 error_txfd_phy_abort_ack_wd_to_error>
  504. <enum 56 error_txfd_pre_pkt_isr_not_done_before_phy_desc_error>
  505. <enum 57 error_txfd_bf_weights_not_ready_error>
  506. <enum 58 error_txfd_req_timer_breach_error>
  507. <enum 59 error_txfd_wd_to_error>
  508. <enum 60 error_txfd_legacy_bf_weights_not_ready_error>
  509. <enum 61 error_txfd_axi_slave_to_error>
  510. <enum 62 error_txfd_hw_acc_error>
  511. <enum 63 error_txfd_txb_req_fifo_underrun_error>
  512. <enum 64 error_txfd_unknown_ru_alloc_error>
  513. <enum 65 error_txfd_more_user_desc_per_user_tlvs_error>
  514. <enum 66 error_txfd_ldpc_param_calc_to_error>
  515. <enum 69 error_txfd_cbf_start_before_expect_cbf_clear_error>
  516. <enum 70 error_txfd_out_of_range_cbf_user_id_error>
  517. <enum 71 error_txfd_less_cbf_data_error>
  518. <enum 72 error_txfd_more_cbf_data_error>
  519. <enum 73 error_txfd_cbf_done_not_received_error>
  520. <enum 74 error_txfd_mpi_cbf_valid_to_error>
  521. <enum 75 error_txfd_cbf_start_missing_error>
  522. <enum 76 error_txfd_mimo_ctrl_error>
  523. <enum 77 error_txfd_cbf_buffer_ovfl_error>
  524. <enum 78 error_txfd_dma0_hang_error>
  525. <enum 79 error_txfd_dma1_hang_error>
  526. <enum 80 error_txfd_b2b_cbf_start_error>
  527. <enum 81 error_txfd_b2b_cbf_done_error>
  528. <enum 82 error_txfd_unsaved_cv_error>
  529. <enum 83 error_txfd_wt_mem_wr_conflict_error>
  530. <enum 84 error_txfd_wt_mem_rd_conflict_error>
  531. <enum 85 error_txfd_qre_intf_to_error>
  532. <enum 86 error_txfd_qre_txbf_stomp_rx_error>
  533. <enum 87 error_txfd_qre_rx_stomp_txbf_error>
  534. <enum 88 error_txfd_precoding_start_before_bf_param_clr_error>
  535. <enum 89 error_txfd_tone_map_lut_rd_conflict_error>
  536. <enum 90 error_txfd_precoding_fifo_ovfl_error>
  537. <enum 91 error_txfd_precoding_fifo_udfl_error>
  538. <enum 92 error_txfd_txbf_axi_slave_to_error>
  539. <enum 93 error_txfd_less_prefetch_tlvs_error>
  540. <enum 94 error_txfd_more_prefetch_tlvs_error>
  541. <enum 95 error_txfd_prefetch_fifo_ovfl_error>
  542. <enum 96 error_txfd_prefetch_fifo_udfl_error>
  543. <enum 97 error_txfd_precoding_error>
  544. <enum 98 error_txfd_cv_ctrl_state_to_error>
  545. <enum 99 error_txfd_txbfp_qre_tone_udfl_error>
  546. <enum 100 error_txfd_less_bf_param_per_user_tlvs_error>
  547. <enum 101 error_txfd_more_bf_param_per_user_tlvs_error>
  548. <enum 102 error_txfd_bf_param_common_unexpected_error>
  549. <enum 103 error_txfd_less_expect_cbf_per_user_tlvs_error>
  550. <enum 104 error_txfd_more_expect_cbf_per_user_tlvs_error>
  551. <enum 105 error_txfd_precoding_stg1_stg2_wait_to_error>
  552. <enum 106 error_txfd_expect_cbf_per_user_before_common_error>
  553. <enum 107 error_txfd_prefetch_per_user_before_common_error>
  554. <enum 108 error_txfd_bf_param_per_user_before_common_error>
  555. <enum 109 error_txfd_ndp_cbf_bw_mismatch_error>
  556. <enum 110 error_txtd_tx_pre_desc_error>
  557. <enum 111 error_txtd_tx_desc_error>
  558. <enum 112 error_txtd_start_error>
  559. <enum 113 error_txtd_sym_error>
  560. <enum 114 error_txtd_multi_sym_error>
  561. <enum 115 error_txtd_pre_data_error>
  562. <enum 116 error_txtd_pkt_data_error>
  563. <enum 117 error_txtd_pkt_end_error>
  564. <enum 118 error_txtd_tx_frame_unexp>
  565. <enum 119 error_txtd_start_unexp>
  566. <enum 120 error_txtd_fft_error_1>
  567. <enum 121 error_txtd_fft_error_2>
  568. <enum 122 error_txtd_uld_sym_cp_len_zero>
  569. <enum 123 error_txtd_start_done>
  570. <enum 124 error_txtd_start_nonidle>
  571. <enum 125 error_txtd_tx_abort_nonidle>
  572. <enum 126 error_txtd_tx_abort_done>
  573. <enum 127 error_txtd_tx_abort_idle>
  574. <enum 128 error_txtd_cck_sample_overflow>
  575. <enum 129 error_txtd_cck_timeout>
  576. <enum 130 error_txtd_ofdm_sym_mismatch>
  577. <enum 131 error_txtd_tx_vld_unalign_error>
  578. <enum 132 error_txtd_fft_cdc_fifo>This is the merged Rx/Tx
  579. CDC FIFO empty/full error code
  580. <enum 133 error_mac_tb_ppdu_abort>All 'error_txtd_chn' codes
  581. use this value as well.
  582. <enum 136 error_abort_req_from_macrx_enum_05>This code is
  583. used to abort the Tx when MAC Rx issues an abort request
  584. with code 05 "macrx_abort_too_much_bad_data."
  585. <enum 137 error_tx_extra_sym_mismatch>
  586. <enum 138 error_tx_vht_length_not_multiple_of_3>
  587. <enum 139 error_tx_11b_rate_illegal>
  588. <enum 140 error_tx_ht_rate_illegal>
  589. <enum 141 error_tx_vht_rate_illegal>
  590. <enum 142 error_mac_rf_only_abort>
  591. <enum 255 error_tx_invalid_error_code>
  592. */
  593. #define TX_FLUSH_REQ_PHYTX_ABORT_REASON_OFFSET 0x0000000000000000
  594. #define TX_FLUSH_REQ_PHYTX_ABORT_REASON_LSB 8
  595. #define TX_FLUSH_REQ_PHYTX_ABORT_REASON_MSB 15
  596. #define TX_FLUSH_REQ_PHYTX_ABORT_REASON_MASK 0x000000000000ff00
  597. /* Description FLUSH_REQ_USER_NUMBER_OR_LINK_ID
  598. Field only valid when Flush_req_reason == TXPCU_PHYTX_ABORT_ERR
  599. or PDG_FLREQ_CODE_{TXOP, MLO}_ABORT
  600. In case of TXPCU_PHYTX_ABORT_ERR, for some errors, the user
  601. for which this error was detected can be indicated in this
  602. field.
  603. In case of PDG_FLREQ_CODE_*_ABORT due to MLO, this field
  604. will carry the partner link ID and validity due to which
  605. the abort was initiated.
  606. Bit [5]: partner link ID valid
  607. Bits [4:3]: set to 0
  608. Bits [2:0]: partner link ID
  609. <legal 0-39>
  610. */
  611. #define TX_FLUSH_REQ_FLUSH_REQ_USER_NUMBER_OR_LINK_ID_OFFSET 0x0000000000000000
  612. #define TX_FLUSH_REQ_FLUSH_REQ_USER_NUMBER_OR_LINK_ID_LSB 16
  613. #define TX_FLUSH_REQ_FLUSH_REQ_USER_NUMBER_OR_LINK_ID_MSB 21
  614. #define TX_FLUSH_REQ_FLUSH_REQ_USER_NUMBER_OR_LINK_ID_MASK 0x00000000003f0000
  615. /* Description MLO_ABORT_REASON
  616. Field valid only when Flush_req_reason == PDG_FLREQ_CODE_{TXOP,
  617. MLO}_ABORT
  618. <enum 0 sw_blocked_self> SW-specified block of the peer
  619. for self-link
  620. <enum 1 sw_blocked_partner> SW-specified block of the peer
  621. from a partner link
  622. <enum 2 rx_ongoing> Blocked due to RX ongoing in partner
  623. link
  624. <enum 3 cts2self_truncated> MLO truncated CTS2SELF leading
  625. to abort
  626. <enum 4 max_padding_exceeded> Maximum padding exceeded
  627. <enum 5 max_overlap_exceeded> Maximum overlap duration exceeded
  628. <enum 6 user_collision_threshold_exceeded> User collision
  629. threshold for MU exceeded
  630. <enum 7 sw_blocked_vdev_id> SW-specified block due to VDEV
  631. ID collision with a non-MLO broadcast/multicast
  632. <enum 8 r2r_response_truncated>
  633. <enum 10 emlsr_blackout> Blocked due to EMLSR black-out
  634. window
  635. <enum 16 t2_response_changed> T2 response changed in 'MLO_TX_RESP'
  636. <enum 17 ppdu_duration_zero> PPDU duration zero in 'MLO_TX_RESP'
  637. <enum 18 ppdu_duration_bigger_than_allowed> PPDU duration
  638. bigger than allowed in non-response mode 'MLO_TX_RESP'
  639. <enum 19 ppdu_padding_not_allowed> PPDU in non-A-MPDU format
  640. cannot be padded
  641. <enum 20 resp_ppdu_duration_truncated> PPDU duration truncated
  642. in response mode 'MLO_TX_RESP'
  643. <enum 21 ppdu_duration_limit> flush generated due to TXOP
  644. abort
  645. <enum 22 overview_mpdu_cnt_zero> flush generated due to
  646. TXOP abort as MPDU count is zero for all users in 'MPDU_QUEUE_OVERVIEW'
  647. <enum 23 overview_not_ready> flush generated due to MLO
  648. abort as 'MPDU_QUEUE_OVERVIEW' is not ready for all users
  649. at PPDU phase
  650. <enum 24 trigger_frame_mlo_alignment_fail> Trigger frame
  651. end-alignment cannot be met, e.g. due to LDPC extra symbol
  652. <enum 9 mlo_reserved>
  653. */
  654. #define TX_FLUSH_REQ_MLO_ABORT_REASON_OFFSET 0x0000000000000000
  655. #define TX_FLUSH_REQ_MLO_ABORT_REASON_LSB 22
  656. #define TX_FLUSH_REQ_MLO_ABORT_REASON_MSB 26
  657. #define TX_FLUSH_REQ_MLO_ABORT_REASON_MASK 0x0000000007c00000
  658. /* Description RESERVED_0A
  659. <legal 0>
  660. */
  661. #define TX_FLUSH_REQ_RESERVED_0A_OFFSET 0x0000000000000000
  662. #define TX_FLUSH_REQ_RESERVED_0A_LSB 27
  663. #define TX_FLUSH_REQ_RESERVED_0A_MSB 31
  664. #define TX_FLUSH_REQ_RESERVED_0A_MASK 0x00000000f8000000
  665. /* Description TLV64_PADDING
  666. Automatic DWORD padding inserted while converting TLV32
  667. to TLV64 for 64 bit ARCH
  668. <legal 0>
  669. */
  670. #define TX_FLUSH_REQ_TLV64_PADDING_OFFSET 0x0000000000000000
  671. #define TX_FLUSH_REQ_TLV64_PADDING_LSB 32
  672. #define TX_FLUSH_REQ_TLV64_PADDING_MSB 63
  673. #define TX_FLUSH_REQ_TLV64_PADDING_MASK 0xffffffff00000000
  674. #endif // TX_FLUSH_REQ