wbm_release_ring.h 51 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954
  1. /*
  2. * Copyright (c) 2021 The Linux Foundation. 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. // $ATH_LICENSE_HW_HDR_C$
  17. //
  18. // DO NOT EDIT! This file is automatically generated
  19. // These definitions are tied to a particular hardware layout
  20. #ifndef _WBM_RELEASE_RING_H_
  21. #define _WBM_RELEASE_RING_H_
  22. #if !defined(__ASSEMBLER__)
  23. #endif
  24. #include "buffer_addr_info.h"
  25. #include "tx_rate_stats_info.h"
  26. // ################ START SUMMARY #################
  27. //
  28. // Dword Fields
  29. // 0-1 struct buffer_addr_info released_buff_or_desc_addr_info;
  30. // 2 release_source_module[2:0], bm_action[5:3], buffer_or_desc_type[8:6], first_msdu_index[12:9], tqm_release_reason[16:13], rxdma_push_reason[18:17], rxdma_error_code[23:19], reo_push_reason[25:24], reo_error_code[30:26], wbm_internal_error[31]
  31. // 3 tqm_status_number[23:0], transmit_count[30:24], reserved_3a[31]
  32. // 4 ack_frame_rssi[7:0], sw_release_details_valid[8], first_msdu[9], last_msdu[10], msdu_part_of_amsdu[11], fw_tx_notify_frame[12], buffer_timestamp[31:13]
  33. // 5-6 struct tx_rate_stats_info tx_rate_stats;
  34. // 7 sw_peer_id[15:0], tid[19:16], ring_id[27:20], looping_count[31:28]
  35. //
  36. // ################ END SUMMARY #################
  37. #define NUM_OF_DWORDS_WBM_RELEASE_RING 8
  38. struct wbm_release_ring {
  39. struct buffer_addr_info released_buff_or_desc_addr_info;
  40. uint32_t release_source_module : 3, //[2:0]
  41. bm_action : 3, //[5:3]
  42. buffer_or_desc_type : 3, //[8:6]
  43. first_msdu_index : 4, //[12:9]
  44. tqm_release_reason : 4, //[16:13]
  45. rxdma_push_reason : 2, //[18:17]
  46. rxdma_error_code : 5, //[23:19]
  47. reo_push_reason : 2, //[25:24]
  48. reo_error_code : 5, //[30:26]
  49. wbm_internal_error : 1; //[31]
  50. uint32_t tqm_status_number : 24, //[23:0]
  51. transmit_count : 7, //[30:24]
  52. reserved_3a : 1; //[31]
  53. uint32_t ack_frame_rssi : 8, //[7:0]
  54. sw_release_details_valid : 1, //[8]
  55. first_msdu : 1, //[9]
  56. last_msdu : 1, //[10]
  57. msdu_part_of_amsdu : 1, //[11]
  58. fw_tx_notify_frame : 1, //[12]
  59. buffer_timestamp : 19; //[31:13]
  60. struct tx_rate_stats_info tx_rate_stats;
  61. uint32_t sw_peer_id : 16, //[15:0]
  62. tid : 4, //[19:16]
  63. ring_id : 8, //[27:20]
  64. looping_count : 4; //[31:28]
  65. };
  66. /*
  67. struct buffer_addr_info released_buff_or_desc_addr_info
  68. Consumer: WBM/SW/FW
  69. Producer: SW/TQM/RXDMA/REO/SWITCH
  70. Details of the physical address of the buffer or link
  71. descriptor that is being released. Note that within this
  72. descriptor, WBM will look at the 'owner' of the released
  73. buffer/descriptor and forward it to SW/FW is WBM is not the
  74. owner.
  75. release_source_module
  76. Indicates which module initiated the release of this
  77. buffer or descriptor
  78. <enum 0 release_source_TQM> TQM released this buffer or
  79. descriptor
  80. <enum 1 release_source_RXDMA> RXDMA released this buffer
  81. or descriptor
  82. <enum 2 release_source_REO> REO released this buffer or
  83. descriptor
  84. <enum 3 release_source_FW> FW released this buffer or
  85. descriptor
  86. <enum 4 release_source_SW> SW released this buffer or
  87. descriptor
  88. <legal 0-4>
  89. bm_action
  90. Consumer: WBM/SW/FW
  91. Producer: SW/TQM/RXDMA/REO/SWITCH
  92. Field only valid when the field return_buffer_manager in
  93. the Released_buff_or_desc_addr_info indicates:
  94. WBM_IDLE_BUF_LIST or
  95. WBM_IDLE_DESC_LIST
  96. An MSDU extension descriptor shall never be marked as
  97. <enum 0 Put_in_idle_list> Put the buffer or descriptor
  98. back in the idle list. In case of MSDU or MDPU link
  99. descriptor, BM does not need to check to release any
  100. individual MSDU buffers
  101. <enum 1 release_msdu_list > This BM action can only be
  102. used in combination with buffer_or_desc_type being
  103. msdu_link_descriptor. Field first_msdu_index points out
  104. which MSDU pointer in the MSDU link descriptor is the first
  105. of an MPDU that is released.
  106. BM shall release all the MSDU buffers linked to this
  107. first MSDU buffer pointer. All related MSDU buffer pointer
  108. entries shall be set to value 0, which represents the 'NULL
  109. pointer. When all MSDU buffer pointers in the MSDU link
  110. descriptor are 'NULL', the MSDU link descriptor itself shall
  111. also be released.
  112. <enum 2 Put_in_idle_list_expanded> CURRENTLY NOT
  113. IMPLEMENTED....
  114. Put the buffer or descriptor back in the idle list. Only
  115. valid in combination with buffer_or_desc_type indicating
  116. MDPU_link_descriptor.
  117. BM shall release the MPDU link descriptor as well as all
  118. MSDUs that are linked to the MPDUs in this descriptor.
  119. <legal 0-2>
  120. buffer_or_desc_type
  121. Consumer: WBM/SW/FW
  122. Producer: SW/TQM/RXDMA/REO/SWITCH
  123. Field only valid when WBM is marked as the
  124. return_buffer_manager in the Released_Buffer_address_info
  125. Indicates that type of buffer or descriptor is being
  126. released
  127. <enum 0 MSDU_rel_buffer> The address points to an MSDU
  128. buffer
  129. <enum 1 msdu_link_descriptor> The address points to an
  130. TX MSDU link descriptor
  131. <enum 2 mpdu_link_descriptor> The address points to an
  132. MPDU link descriptor
  133. <enum 3 msdu_ext_descriptor > The address points to an
  134. MSDU extension descriptor.
  135. In case BM finds this one in a release ring, it passes
  136. it on to FW...
  137. <enum 4 queue_ext_descriptor> The address points to an
  138. TQM queue extension descriptor. WBM should treat this is the
  139. same way as a link descriptor. That is, put the 128 byte
  140. buffer back in the link buffer idle list.
  141. <legal 0-4>
  142. first_msdu_index
  143. Consumer: WBM/SW/FW
  144. Producer: SW/TQM/RXDMA/REO/SWITCH
  145. Field only valid for the bm_action release_msdu_list.
  146. The index of the first MSDU in an MSDU link descriptor
  147. all belonging to the same MPDU.
  148. <legal 0-6>
  149. tqm_release_reason
  150. Consumer: WBM/SW/FW
  151. Producer: TQM
  152. Field only valid when Release_source_module is set to
  153. release_source_TQM
  154. (rr = Release Reason)
  155. <enum 0 tqm_rr_frame_acked> frame is removed because an
  156. ACK of BA for it was received
  157. <enum 1 tqm_rr_rem_cmd_rem> frame is removed because a
  158. remove command of type Remove_mpdus initiated by SW
  159. <enum 2 tqm_rr_rem_cmd_tx> frame is removed because a
  160. remove command of type Remove_transmitted_mpdus initiated by
  161. SW
  162. <enum 3 tqm_rr_rem_cmd_notx> frame is removed because a
  163. remove command of type Remove_untransmitted_mpdus initiated
  164. by SW
  165. <enum 4 tqm_rr_rem_cmd_aged> frame is removed because a
  166. remove command of type Remove_aged_mpdus or
  167. Remove_aged_msdus initiated by SW
  168. <enum 5 tqm_fw_reason1> frame is removed because a
  169. remove command where fw indicated that remove reason is
  170. fw_reason1
  171. <enum 6 tqm_fw_reason2> frame is removed because a
  172. remove command where fw indicated that remove reason is
  173. fw_reason1
  174. <enum 7 tqm_fw_reason3> frame is removed because a
  175. remove command where fw indicated that remove reason is
  176. fw_reason1
  177. <enum 8 tqm_rr_rem_cmd_disable_queue> frame is removed
  178. because a remove command of type
  179. remove_mpdus_and_disable_queue or
  180. remove_msdus_and_disable_flow initiated by SW
  181. <legal 0-8>
  182. rxdma_push_reason
  183. Field only valid when Release_source_module is set to
  184. release_source_RXDMA
  185. Indicates why rxdma pushed the frame to this ring
  186. <enum 0 rxdma_error_detected> RXDMA detected an error an
  187. pushed this frame to this queue
  188. <enum 1 rxdma_routing_instruction> RXDMA pushed the
  189. frame to this queue per received routing instructions. No
  190. error within RXDMA was detected
  191. <enum 2 rxdma_rx_flush> RXDMA received an RX_FLUSH. As a
  192. result the MSDU link descriptor might not have the
  193. last_msdu_in_mpdu_flag set, but instead WBM might just see a
  194. NULL pointer in the MSDU link descriptor. This is to be
  195. considered a normal condition for this scenario.
  196. <legal 0 - 2>
  197. rxdma_error_code
  198. Field only valid when 'rxdma_push_reason' set to
  199. 'rxdma_error_detected'.
  200. <enum 0 rxdma_overflow_err>MPDU frame is not complete
  201. due to a FIFO overflow error in RXPCU.
  202. <enum 1 rxdma_mpdu_length_err>MPDU frame is not complete
  203. due to receiving incomplete MPDU from the PHY
  204. <enum 3 rxdma_decrypt_err>CRYPTO reported a decryption
  205. error or CRYPTO received an encrypted frame, but did not get
  206. a valid corresponding key id in the peer entry.
  207. <enum 4 rxdma_tkip_mic_err>CRYPTO reported a TKIP MIC
  208. error
  209. <enum 5 rxdma_unecrypted_err>CRYPTO reported an
  210. unencrypted frame error when encrypted was expected
  211. <enum 6 rxdma_msdu_len_err>RX OLE reported an MSDU
  212. length error
  213. <enum 7 rxdma_msdu_limit_err>RX OLE reported that max
  214. number of MSDUs allowed in an MPDU got exceeded
  215. <enum 8 rxdma_wifi_parse_err>RX OLE reported a parsing
  216. error
  217. <enum 9 rxdma_amsdu_parse_err>RX OLE reported an A-MSDU
  218. parsing error
  219. <enum 10 rxdma_sa_timeout_err>RX OLE reported a timeout
  220. during SA search
  221. <enum 11 rxdma_da_timeout_err>RX OLE reported a timeout
  222. during DA search
  223. <enum 12 rxdma_flow_timeout_err>RX OLE reported a
  224. timeout during flow search
  225. <enum 13 Rxdma_flush_request>RXDMA received a flush
  226. request
  227. reo_push_reason
  228. Field only valid when Release_source_module is set to
  229. release_source_REO
  230. Indicates why REO pushed the frame to this release ring
  231. <enum 0 reo_error_detected> Reo detected an error an
  232. pushed this frame to this queue
  233. <enum 1 reo_routing_instruction> Reo pushed the frame to
  234. this queue per received routing instructions. No error
  235. within REO was detected
  236. <legal 0 - 1>
  237. reo_error_code
  238. Field only valid when 'Reo_push_reason' set to
  239. 'reo_error_detected'.
  240. <enum 0 reo_queue_desc_addr_zero> Reo queue descriptor
  241. provided in the REO_ENTRANCE ring is set to 0
  242. <enum 1 reo_queue_desc_not_valid> Reo queue descriptor
  243. valid bit is NOT set
  244. <enum 2 ampdu_in_non_ba> AMPDU frame received without BA
  245. session having been setup.
  246. <enum 3 non_ba_duplicate> Non-BA session, SN equal to
  247. SSN, Retry bit set: duplicate frame
  248. <enum 4 ba_duplicate> BA session, duplicate frame
  249. <enum 5 regular_frame_2k_jump> A normal (management/data
  250. frame) received with 2K jump in SN
  251. <enum 6 bar_frame_2k_jump> A bar received with 2K jump
  252. in SSN
  253. <enum 7 regular_frame_OOR> A normal (management/data
  254. frame) received with SN falling within the OOR window
  255. <enum 8 bar_frame_OOR> A bar received with SSN falling
  256. within the OOR window
  257. <enum 9 bar_frame_no_ba_session> A bar received without
  258. a BA session
  259. <enum 10 bar_frame_sn_equals_ssn> A bar received with
  260. SSN equal to SN
  261. <enum 11 pn_check_failed> PN Check Failed packet.
  262. <enum 12 2k_error_handling_flag_set> Frame is forwarded
  263. as a result of the 'Seq_2k_error_detected_flag' been set in
  264. the REO Queue descriptor
  265. <enum 13 pn_error_handling_flag_set> Frame is forwarded
  266. as a result of the 'pn_error_detected_flag' been set in the
  267. REO Queue descriptor
  268. <enum 14 queue_descriptor_blocked_set> Frame is
  269. forwarded as a result of the queue descriptor(address) being
  270. blocked as SW/FW seems to be currently in the process of
  271. making updates to this descriptor...
  272. <legal 0-14>
  273. wbm_internal_error
  274. Can only be set by WBM.
  275. Is set when WBM got a buffer pointer but the action was
  276. to push it to the idle link descriptor ring or do link
  277. related activity
  278. OR
  279. Is set when WBM got a link buffer pointer but the action
  280. was to push it to the buffer descriptor ring
  281. <legal all>
  282. tqm_status_number
  283. Field only valid when Release_source_module is set to
  284. release_source_TQM
  285. The value in this field is equal to value of the
  286. 'TQM_CMD_Number' field the TQM command or the
  287. 'TQM_add_cmd_Number' field from the TQM entrance ring
  288. descriptor
  289. This field helps to correlate the statuses with the TQM
  290. commands.
  291. NOTE that SW could program this number to be equal to
  292. the PPDU_ID number in case direct correlation with the PPDU
  293. ID is desired
  294. <legal all>
  295. transmit_count
  296. Field only valid when Release_source_module is set to
  297. release_source_TQM
  298. The number of times this frame has been transmitted
  299. reserved_3a
  300. <legal 0>
  301. ack_frame_rssi
  302. This field is only valid when the source is TQM.
  303. If this frame is removed as the result of the reception
  304. of an ACK or BA, this field indicates the RSSI of the
  305. received ACK or BA frame.
  306. When the frame is removed as result of a direct remove
  307. command from the SW, this field is set to 0x0 (which is
  308. never a valid value when real RSSI is available)
  309. <legal all>
  310. sw_release_details_valid
  311. Consumer: SW
  312. Producer: WBM
  313. When set, some WBM specific release info for SW is
  314. valid.
  315. This is set when WMB got a 'release_msdu_list' command
  316. from TQM and the return buffer manager is not WMB. WBM will
  317. then de-aggregate all the MSDUs and pass them one at a time
  318. on to the 'buffer owner'
  319. <legal all>
  320. first_msdu
  321. Field only valid when SW_release_details_valid is set.
  322. Consumer: SW
  323. Producer: WBM
  324. When set, this MSDU is the first MSDU pointed to in the
  325. 'release_msdu_list' command.
  326. <legal all>
  327. last_msdu
  328. Field only valid when SW_release_details_valid is set.
  329. Consumer: SW
  330. Producer: WBM
  331. When set, this MSDU is the last MSDU pointed to in the
  332. 'release_msdu_list' command.
  333. <legal all>
  334. msdu_part_of_amsdu
  335. Field only valid when SW_release_details_valid is set.
  336. Consumer: SW
  337. Producer: WBM
  338. When set, this MSDU was part of an A-MSDU in MPDU
  339. <legal all>
  340. fw_tx_notify_frame
  341. Field only valid when SW_release_details_valid is set.
  342. Consumer: SW
  343. Producer: WBM
  344. This is the FW_tx_notify_frame field from the
  345. <legal all>
  346. buffer_timestamp
  347. Field only valid when SW_release_details_valid is set.
  348. Consumer: SW
  349. Producer: WBM
  350. This is the Buffer_timestamp field from the
  351. Timestamp in units of 1024 us
  352. <legal all>
  353. struct tx_rate_stats_info tx_rate_stats
  354. Consumer: TQM
  355. Producer: SW/SCH(from TXPCU, PDG)
  356. Details for command execution tracking purposes.
  357. sw_peer_id
  358. Field only valid when Release_source_module is set to
  359. release_source_TQM
  360. 1) Release of msdu buffer due to drop_frame = 1. Flow is
  361. not fetched and hence sw_peer_id and tid = 0
  362. buffer_or_desc_type = e_num 0
  363. MSDU_rel_buffertqm_release_reason = e_num 1
  364. tqm_rr_rem_cmd_rem
  365. 2) Release of msdu buffer due to Flow is not fetched and
  366. hence sw_peer_id and tid = 0
  367. buffer_or_desc_type = e_num 0
  368. MSDU_rel_buffertqm_release_reason = e_num 1
  369. tqm_rr_rem_cmd_rem
  370. 3) Release of msdu link due to remove_mpdu or acked_mpdu
  371. command.
  372. buffer_or_desc_type = e_num1
  373. msdu_link_descriptortqm_release_reason can be:e_num 1
  374. tqm_rr_rem_cmd_reme_num 2 tqm_rr_rem_cmd_tx
  375. e_num 3 tqm_rr_rem_cmd_notxe_num 4 tqm_rr_rem_cmd_aged
  376. Sw_peer_id from the TX_MSDU_FLOW descriptor or
  377. TX_MPDU_QUEUE descriptor
  378. <legal all>
  379. tid
  380. Field only valid when Release_source_module is set to
  381. release_source_TQM
  382. 1) Release of msdu buffer due to drop_frame = 1. Flow is
  383. not fetched and hence sw_peer_id and tid = 0
  384. buffer_or_desc_type = e_num 0
  385. MSDU_rel_buffertqm_release_reason = e_num 1
  386. tqm_rr_rem_cmd_rem
  387. 2) Release of msdu buffer due to Flow is not fetched and
  388. hence sw_peer_id and tid = 0
  389. buffer_or_desc_type = e_num 0
  390. MSDU_rel_buffertqm_release_reason = e_num 1
  391. tqm_rr_rem_cmd_rem
  392. 3) Release of msdu link due to remove_mpdu or acked_mpdu
  393. command.
  394. buffer_or_desc_type = e_num1
  395. msdu_link_descriptortqm_release_reason can be:e_num 1
  396. tqm_rr_rem_cmd_reme_num 2 tqm_rr_rem_cmd_tx
  397. e_num 3 tqm_rr_rem_cmd_notxe_num 4 tqm_rr_rem_cmd_aged
  398. This field represents the TID from the TX_MSDU_FLOW
  399. descriptor or TX_MPDU_QUEUE descriptor
  400. <legal all>
  401. ring_id
  402. Consumer: TQM/REO/RXDMA/SW
  403. Producer: SRNG (of RXDMA)
  404. For debugging.
  405. This field is filled in by the SRNG module.
  406. It help to identify the ring that is being looked <legal
  407. all>
  408. looping_count
  409. Consumer: WBM/SW/FW
  410. Producer: SW/TQM/RXDMA/REO/SWITCH
  411. A count value that indicates the number of times the
  412. producer of entries into the Buffer Manager Ring has looped
  413. around the ring.
  414. At initialization time, this value is set to 0. On the
  415. first loop, this value is set to 1. After the max value is
  416. reached allowed by the number of bits for this field, the
  417. count value continues with 0 again.
  418. In case SW is the consumer of the ring entries, it can
  419. use this field to figure out up to where the producer of
  420. entries has created new entries. This eliminates the need to
  421. check where the head pointer' of the ring is located once
  422. the SW starts processing an interrupt indicating that new
  423. entries have been put into this ring...
  424. Also note that SW if it wants only needs to look at the
  425. LSB bit of this count value.
  426. <legal all>
  427. */
  428. /* EXTERNAL REFERENCE : struct buffer_addr_info released_buff_or_desc_addr_info */
  429. /* Description WBM_RELEASE_RING_0_RELEASED_BUFF_OR_DESC_ADDR_INFO_BUFFER_ADDR_31_0
  430. Address (lower 32 bits) of the MSDU buffer OR
  431. MSDU_EXTENSION descriptor OR Link Descriptor
  432. In case of 'NULL' pointer, this field is set to 0
  433. <legal all>
  434. */
  435. #define WBM_RELEASE_RING_0_RELEASED_BUFF_OR_DESC_ADDR_INFO_BUFFER_ADDR_31_0_OFFSET 0x00000000
  436. #define WBM_RELEASE_RING_0_RELEASED_BUFF_OR_DESC_ADDR_INFO_BUFFER_ADDR_31_0_LSB 0
  437. #define WBM_RELEASE_RING_0_RELEASED_BUFF_OR_DESC_ADDR_INFO_BUFFER_ADDR_31_0_MASK 0xffffffff
  438. /* Description WBM_RELEASE_RING_1_RELEASED_BUFF_OR_DESC_ADDR_INFO_BUFFER_ADDR_39_32
  439. Address (upper 8 bits) of the MSDU buffer OR
  440. MSDU_EXTENSION descriptor OR Link Descriptor
  441. In case of 'NULL' pointer, this field is set to 0
  442. <legal all>
  443. */
  444. #define WBM_RELEASE_RING_1_RELEASED_BUFF_OR_DESC_ADDR_INFO_BUFFER_ADDR_39_32_OFFSET 0x00000004
  445. #define WBM_RELEASE_RING_1_RELEASED_BUFF_OR_DESC_ADDR_INFO_BUFFER_ADDR_39_32_LSB 0
  446. #define WBM_RELEASE_RING_1_RELEASED_BUFF_OR_DESC_ADDR_INFO_BUFFER_ADDR_39_32_MASK 0x000000ff
  447. /* Description WBM_RELEASE_RING_1_RELEASED_BUFF_OR_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER
  448. Consumer: WBM
  449. Producer: SW/FW
  450. In case of 'NULL' pointer, this field is set to 0
  451. Indicates to which buffer manager the buffer OR
  452. MSDU_EXTENSION descriptor OR link descriptor that is being
  453. pointed to shall be returned after the frame has been
  454. processed. It is used by WBM for routing purposes.
  455. <enum 0 WBM_IDLE_BUF_LIST> This buffer shall be returned
  456. to the WMB buffer idle list
  457. <enum 1 WBM_IDLE_DESC_LIST> This buffer shall be
  458. returned to the WMB idle link descriptor idle list
  459. <enum 2 FW_BM> This buffer shall be returned to the FW
  460. <enum 3 SW0_BM> This buffer shall be returned to the SW,
  461. ring 0
  462. <enum 4 SW1_BM> This buffer shall be returned to the SW,
  463. ring 1
  464. <enum 5 SW2_BM> This buffer shall be returned to the SW,
  465. ring 2
  466. <enum 6 SW3_BM> This buffer shall be returned to the SW,
  467. ring 3
  468. <enum 7 SW4_BM> This buffer shall be returned to the SW,
  469. ring 3
  470. <legal all>
  471. */
  472. #define WBM_RELEASE_RING_1_RELEASED_BUFF_OR_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_OFFSET 0x00000004
  473. #define WBM_RELEASE_RING_1_RELEASED_BUFF_OR_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_LSB 8
  474. #define WBM_RELEASE_RING_1_RELEASED_BUFF_OR_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_MASK 0x00000700
  475. /* Description WBM_RELEASE_RING_1_RELEASED_BUFF_OR_DESC_ADDR_INFO_SW_BUFFER_COOKIE
  476. Cookie field exclusively used by SW.
  477. In case of 'NULL' pointer, this field is set to 0
  478. HW ignores the contents, accept that it passes the
  479. programmed value on to other descriptors together with the
  480. physical address
  481. Field can be used by SW to for example associate the
  482. buffers physical address with the virtual address
  483. The bit definitions as used by SW are within SW HLD
  484. specification
  485. NOTE:
  486. The three most significant bits can have a special
  487. meaning in case this struct is embedded in a TX_MPDU_DETAILS
  488. STRUCT, and field transmit_bw_restriction is set
  489. In case of NON punctured transmission:
  490. Sw_buffer_cookie[20:19] = 2'b00: 20 MHz TX only
  491. Sw_buffer_cookie[20:19] = 2'b01: 40 MHz TX only
  492. Sw_buffer_cookie[20:19] = 2'b10: 80 MHz TX only
  493. Sw_buffer_cookie[20:19] = 2'b11: 160 MHz TX only
  494. In case of punctured transmission:
  495. Sw_buffer_cookie[20:18] = 3'b000: pattern 0 only
  496. Sw_buffer_cookie[20:18] = 3'b001: pattern 1 only
  497. Sw_buffer_cookie[20:18] = 3'b010: pattern 2 only
  498. Sw_buffer_cookie[20:18] = 3'b011: pattern 3 only
  499. Sw_buffer_cookie[20:18] = 3'b100: pattern 4 only
  500. Sw_buffer_cookie[20:18] = 3'b101: pattern 5 only
  501. Sw_buffer_cookie[20:18] = 3'b110: pattern 6 only
  502. Sw_buffer_cookie[20:18] = 3'b111: pattern 7 only
  503. Note: a punctured transmission is indicated by the
  504. presence of TLV TX_PUNCTURE_SETUP embedded in the scheduler
  505. TLV
  506. <legal all>
  507. */
  508. #define WBM_RELEASE_RING_1_RELEASED_BUFF_OR_DESC_ADDR_INFO_SW_BUFFER_COOKIE_OFFSET 0x00000004
  509. #define WBM_RELEASE_RING_1_RELEASED_BUFF_OR_DESC_ADDR_INFO_SW_BUFFER_COOKIE_LSB 11
  510. #define WBM_RELEASE_RING_1_RELEASED_BUFF_OR_DESC_ADDR_INFO_SW_BUFFER_COOKIE_MASK 0xfffff800
  511. /* Description WBM_RELEASE_RING_2_RELEASE_SOURCE_MODULE
  512. Indicates which module initiated the release of this
  513. buffer or descriptor
  514. <enum 0 release_source_TQM> TQM released this buffer or
  515. descriptor
  516. <enum 1 release_source_RXDMA> RXDMA released this buffer
  517. or descriptor
  518. <enum 2 release_source_REO> REO released this buffer or
  519. descriptor
  520. <enum 3 release_source_FW> FW released this buffer or
  521. descriptor
  522. <enum 4 release_source_SW> SW released this buffer or
  523. descriptor
  524. <legal 0-4>
  525. */
  526. #define WBM_RELEASE_RING_2_RELEASE_SOURCE_MODULE_OFFSET 0x00000008
  527. #define WBM_RELEASE_RING_2_RELEASE_SOURCE_MODULE_LSB 0
  528. #define WBM_RELEASE_RING_2_RELEASE_SOURCE_MODULE_MASK 0x00000007
  529. /* Description WBM_RELEASE_RING_2_BM_ACTION
  530. Consumer: WBM/SW/FW
  531. Producer: SW/TQM/RXDMA/REO/SWITCH
  532. Field only valid when the field return_buffer_manager in
  533. the Released_buff_or_desc_addr_info indicates:
  534. WBM_IDLE_BUF_LIST or
  535. WBM_IDLE_DESC_LIST
  536. An MSDU extension descriptor shall never be marked as
  537. <enum 0 Put_in_idle_list> Put the buffer or descriptor
  538. back in the idle list. In case of MSDU or MDPU link
  539. descriptor, BM does not need to check to release any
  540. individual MSDU buffers
  541. <enum 1 release_msdu_list > This BM action can only be
  542. used in combination with buffer_or_desc_type being
  543. msdu_link_descriptor. Field first_msdu_index points out
  544. which MSDU pointer in the MSDU link descriptor is the first
  545. of an MPDU that is released.
  546. BM shall release all the MSDU buffers linked to this
  547. first MSDU buffer pointer. All related MSDU buffer pointer
  548. entries shall be set to value 0, which represents the 'NULL
  549. pointer. When all MSDU buffer pointers in the MSDU link
  550. descriptor are 'NULL', the MSDU link descriptor itself shall
  551. also be released.
  552. <enum 2 Put_in_idle_list_expanded> CURRENTLY NOT
  553. IMPLEMENTED....
  554. Put the buffer or descriptor back in the idle list. Only
  555. valid in combination with buffer_or_desc_type indicating
  556. MDPU_link_descriptor.
  557. BM shall release the MPDU link descriptor as well as all
  558. MSDUs that are linked to the MPDUs in this descriptor.
  559. <legal 0-2>
  560. */
  561. #define WBM_RELEASE_RING_2_BM_ACTION_OFFSET 0x00000008
  562. #define WBM_RELEASE_RING_2_BM_ACTION_LSB 3
  563. #define WBM_RELEASE_RING_2_BM_ACTION_MASK 0x00000038
  564. /* Description WBM_RELEASE_RING_2_BUFFER_OR_DESC_TYPE
  565. Consumer: WBM/SW/FW
  566. Producer: SW/TQM/RXDMA/REO/SWITCH
  567. Field only valid when WBM is marked as the
  568. return_buffer_manager in the Released_Buffer_address_info
  569. Indicates that type of buffer or descriptor is being
  570. released
  571. <enum 0 MSDU_rel_buffer> The address points to an MSDU
  572. buffer
  573. <enum 1 msdu_link_descriptor> The address points to an
  574. TX MSDU link descriptor
  575. <enum 2 mpdu_link_descriptor> The address points to an
  576. MPDU link descriptor
  577. <enum 3 msdu_ext_descriptor > The address points to an
  578. MSDU extension descriptor.
  579. In case BM finds this one in a release ring, it passes
  580. it on to FW...
  581. <enum 4 queue_ext_descriptor> The address points to an
  582. TQM queue extension descriptor. WBM should treat this is the
  583. same way as a link descriptor. That is, put the 128 byte
  584. buffer back in the link buffer idle list.
  585. <legal 0-4>
  586. */
  587. #define WBM_RELEASE_RING_2_BUFFER_OR_DESC_TYPE_OFFSET 0x00000008
  588. #define WBM_RELEASE_RING_2_BUFFER_OR_DESC_TYPE_LSB 6
  589. #define WBM_RELEASE_RING_2_BUFFER_OR_DESC_TYPE_MASK 0x000001c0
  590. /* Description WBM_RELEASE_RING_2_FIRST_MSDU_INDEX
  591. Consumer: WBM/SW/FW
  592. Producer: SW/TQM/RXDMA/REO/SWITCH
  593. Field only valid for the bm_action release_msdu_list.
  594. The index of the first MSDU in an MSDU link descriptor
  595. all belonging to the same MPDU.
  596. <legal 0-6>
  597. */
  598. #define WBM_RELEASE_RING_2_FIRST_MSDU_INDEX_OFFSET 0x00000008
  599. #define WBM_RELEASE_RING_2_FIRST_MSDU_INDEX_LSB 9
  600. #define WBM_RELEASE_RING_2_FIRST_MSDU_INDEX_MASK 0x00001e00
  601. /* Description WBM_RELEASE_RING_2_TQM_RELEASE_REASON
  602. Consumer: WBM/SW/FW
  603. Producer: TQM
  604. Field only valid when Release_source_module is set to
  605. release_source_TQM
  606. (rr = Release Reason)
  607. <enum 0 tqm_rr_frame_acked> frame is removed because an
  608. ACK of BA for it was received
  609. <enum 1 tqm_rr_rem_cmd_rem> frame is removed because a
  610. remove command of type Remove_mpdus initiated by SW
  611. <enum 2 tqm_rr_rem_cmd_tx> frame is removed because a
  612. remove command of type Remove_transmitted_mpdus initiated by
  613. SW
  614. <enum 3 tqm_rr_rem_cmd_notx> frame is removed because a
  615. remove command of type Remove_untransmitted_mpdus initiated
  616. by SW
  617. <enum 4 tqm_rr_rem_cmd_aged> frame is removed because a
  618. remove command of type Remove_aged_mpdus or
  619. Remove_aged_msdus initiated by SW
  620. <enum 5 tqm_fw_reason1> frame is removed because a
  621. remove command where fw indicated that remove reason is
  622. fw_reason1
  623. <enum 6 tqm_fw_reason2> frame is removed because a
  624. remove command where fw indicated that remove reason is
  625. fw_reason1
  626. <enum 7 tqm_fw_reason3> frame is removed because a
  627. remove command where fw indicated that remove reason is
  628. fw_reason1
  629. <enum 8 tqm_rr_rem_cmd_disable_queue> frame is removed
  630. because a remove command of type
  631. remove_mpdus_and_disable_queue or
  632. remove_msdus_and_disable_flow initiated by SW
  633. <legal 0-8>
  634. */
  635. #define WBM_RELEASE_RING_2_TQM_RELEASE_REASON_OFFSET 0x00000008
  636. #define WBM_RELEASE_RING_2_TQM_RELEASE_REASON_LSB 13
  637. #define WBM_RELEASE_RING_2_TQM_RELEASE_REASON_MASK 0x0001e000
  638. /* Description WBM_RELEASE_RING_2_RXDMA_PUSH_REASON
  639. Field only valid when Release_source_module is set to
  640. release_source_RXDMA
  641. Indicates why rxdma pushed the frame to this ring
  642. <enum 0 rxdma_error_detected> RXDMA detected an error an
  643. pushed this frame to this queue
  644. <enum 1 rxdma_routing_instruction> RXDMA pushed the
  645. frame to this queue per received routing instructions. No
  646. error within RXDMA was detected
  647. <enum 2 rxdma_rx_flush> RXDMA received an RX_FLUSH. As a
  648. result the MSDU link descriptor might not have the
  649. last_msdu_in_mpdu_flag set, but instead WBM might just see a
  650. NULL pointer in the MSDU link descriptor. This is to be
  651. considered a normal condition for this scenario.
  652. <legal 0 - 2>
  653. */
  654. #define WBM_RELEASE_RING_2_RXDMA_PUSH_REASON_OFFSET 0x00000008
  655. #define WBM_RELEASE_RING_2_RXDMA_PUSH_REASON_LSB 17
  656. #define WBM_RELEASE_RING_2_RXDMA_PUSH_REASON_MASK 0x00060000
  657. /* Description WBM_RELEASE_RING_2_RXDMA_ERROR_CODE
  658. Field only valid when 'rxdma_push_reason' set to
  659. 'rxdma_error_detected'.
  660. <enum 0 rxdma_overflow_err>MPDU frame is not complete
  661. due to a FIFO overflow error in RXPCU.
  662. <enum 1 rxdma_mpdu_length_err>MPDU frame is not complete
  663. due to receiving incomplete MPDU from the PHY
  664. <enum 3 rxdma_decrypt_err>CRYPTO reported a decryption
  665. error or CRYPTO received an encrypted frame, but did not get
  666. a valid corresponding key id in the peer entry.
  667. <enum 4 rxdma_tkip_mic_err>CRYPTO reported a TKIP MIC
  668. error
  669. <enum 5 rxdma_unecrypted_err>CRYPTO reported an
  670. unencrypted frame error when encrypted was expected
  671. <enum 6 rxdma_msdu_len_err>RX OLE reported an MSDU
  672. length error
  673. <enum 7 rxdma_msdu_limit_err>RX OLE reported that max
  674. number of MSDUs allowed in an MPDU got exceeded
  675. <enum 8 rxdma_wifi_parse_err>RX OLE reported a parsing
  676. error
  677. <enum 9 rxdma_amsdu_parse_err>RX OLE reported an A-MSDU
  678. parsing error
  679. <enum 10 rxdma_sa_timeout_err>RX OLE reported a timeout
  680. during SA search
  681. <enum 11 rxdma_da_timeout_err>RX OLE reported a timeout
  682. during DA search
  683. <enum 12 rxdma_flow_timeout_err>RX OLE reported a
  684. timeout during flow search
  685. <enum 13 Rxdma_flush_request>RXDMA received a flush
  686. request
  687. */
  688. #define WBM_RELEASE_RING_2_RXDMA_ERROR_CODE_OFFSET 0x00000008
  689. #define WBM_RELEASE_RING_2_RXDMA_ERROR_CODE_LSB 19
  690. #define WBM_RELEASE_RING_2_RXDMA_ERROR_CODE_MASK 0x00f80000
  691. /* Description WBM_RELEASE_RING_2_REO_PUSH_REASON
  692. Field only valid when Release_source_module is set to
  693. release_source_REO
  694. Indicates why REO pushed the frame to this release ring
  695. <enum 0 reo_error_detected> Reo detected an error an
  696. pushed this frame to this queue
  697. <enum 1 reo_routing_instruction> Reo pushed the frame to
  698. this queue per received routing instructions. No error
  699. within REO was detected
  700. <legal 0 - 1>
  701. */
  702. #define WBM_RELEASE_RING_2_REO_PUSH_REASON_OFFSET 0x00000008
  703. #define WBM_RELEASE_RING_2_REO_PUSH_REASON_LSB 24
  704. #define WBM_RELEASE_RING_2_REO_PUSH_REASON_MASK 0x03000000
  705. /* Description WBM_RELEASE_RING_2_REO_ERROR_CODE
  706. Field only valid when 'Reo_push_reason' set to
  707. 'reo_error_detected'.
  708. <enum 0 reo_queue_desc_addr_zero> Reo queue descriptor
  709. provided in the REO_ENTRANCE ring is set to 0
  710. <enum 1 reo_queue_desc_not_valid> Reo queue descriptor
  711. valid bit is NOT set
  712. <enum 2 ampdu_in_non_ba> AMPDU frame received without BA
  713. session having been setup.
  714. <enum 3 non_ba_duplicate> Non-BA session, SN equal to
  715. SSN, Retry bit set: duplicate frame
  716. <enum 4 ba_duplicate> BA session, duplicate frame
  717. <enum 5 regular_frame_2k_jump> A normal (management/data
  718. frame) received with 2K jump in SN
  719. <enum 6 bar_frame_2k_jump> A bar received with 2K jump
  720. in SSN
  721. <enum 7 regular_frame_OOR> A normal (management/data
  722. frame) received with SN falling within the OOR window
  723. <enum 8 bar_frame_OOR> A bar received with SSN falling
  724. within the OOR window
  725. <enum 9 bar_frame_no_ba_session> A bar received without
  726. a BA session
  727. <enum 10 bar_frame_sn_equals_ssn> A bar received with
  728. SSN equal to SN
  729. <enum 11 pn_check_failed> PN Check Failed packet.
  730. <enum 12 2k_error_handling_flag_set> Frame is forwarded
  731. as a result of the 'Seq_2k_error_detected_flag' been set in
  732. the REO Queue descriptor
  733. <enum 13 pn_error_handling_flag_set> Frame is forwarded
  734. as a result of the 'pn_error_detected_flag' been set in the
  735. REO Queue descriptor
  736. <enum 14 queue_descriptor_blocked_set> Frame is
  737. forwarded as a result of the queue descriptor(address) being
  738. blocked as SW/FW seems to be currently in the process of
  739. making updates to this descriptor...
  740. <legal 0-14>
  741. */
  742. #define WBM_RELEASE_RING_2_REO_ERROR_CODE_OFFSET 0x00000008
  743. #define WBM_RELEASE_RING_2_REO_ERROR_CODE_LSB 26
  744. #define WBM_RELEASE_RING_2_REO_ERROR_CODE_MASK 0x7c000000
  745. /* Description WBM_RELEASE_RING_2_WBM_INTERNAL_ERROR
  746. Can only be set by WBM.
  747. Is set when WBM got a buffer pointer but the action was
  748. to push it to the idle link descriptor ring or do link
  749. related activity
  750. OR
  751. Is set when WBM got a link buffer pointer but the action
  752. was to push it to the buffer descriptor ring
  753. <legal all>
  754. */
  755. #define WBM_RELEASE_RING_2_WBM_INTERNAL_ERROR_OFFSET 0x00000008
  756. #define WBM_RELEASE_RING_2_WBM_INTERNAL_ERROR_LSB 31
  757. #define WBM_RELEASE_RING_2_WBM_INTERNAL_ERROR_MASK 0x80000000
  758. /* Description WBM_RELEASE_RING_3_TQM_STATUS_NUMBER
  759. Field only valid when Release_source_module is set to
  760. release_source_TQM
  761. The value in this field is equal to value of the
  762. 'TQM_CMD_Number' field the TQM command or the
  763. 'TQM_add_cmd_Number' field from the TQM entrance ring
  764. descriptor
  765. This field helps to correlate the statuses with the TQM
  766. commands.
  767. NOTE that SW could program this number to be equal to
  768. the PPDU_ID number in case direct correlation with the PPDU
  769. ID is desired
  770. <legal all>
  771. */
  772. #define WBM_RELEASE_RING_3_TQM_STATUS_NUMBER_OFFSET 0x0000000c
  773. #define WBM_RELEASE_RING_3_TQM_STATUS_NUMBER_LSB 0
  774. #define WBM_RELEASE_RING_3_TQM_STATUS_NUMBER_MASK 0x00ffffff
  775. /* Description WBM_RELEASE_RING_3_TRANSMIT_COUNT
  776. Field only valid when Release_source_module is set to
  777. release_source_TQM
  778. The number of times this frame has been transmitted
  779. */
  780. #define WBM_RELEASE_RING_3_TRANSMIT_COUNT_OFFSET 0x0000000c
  781. #define WBM_RELEASE_RING_3_TRANSMIT_COUNT_LSB 24
  782. #define WBM_RELEASE_RING_3_TRANSMIT_COUNT_MASK 0x7f000000
  783. /* Description WBM_RELEASE_RING_3_RESERVED_3A
  784. <legal 0>
  785. */
  786. #define WBM_RELEASE_RING_3_RESERVED_3A_OFFSET 0x0000000c
  787. #define WBM_RELEASE_RING_3_RESERVED_3A_LSB 31
  788. #define WBM_RELEASE_RING_3_RESERVED_3A_MASK 0x80000000
  789. /* Description WBM_RELEASE_RING_4_ACK_FRAME_RSSI
  790. This field is only valid when the source is TQM.
  791. If this frame is removed as the result of the reception
  792. of an ACK or BA, this field indicates the RSSI of the
  793. received ACK or BA frame.
  794. When the frame is removed as result of a direct remove
  795. command from the SW, this field is set to 0x0 (which is
  796. never a valid value when real RSSI is available)
  797. <legal all>
  798. */
  799. #define WBM_RELEASE_RING_4_ACK_FRAME_RSSI_OFFSET 0x00000010
  800. #define WBM_RELEASE_RING_4_ACK_FRAME_RSSI_LSB 0
  801. #define WBM_RELEASE_RING_4_ACK_FRAME_RSSI_MASK 0x000000ff
  802. /* Description WBM_RELEASE_RING_4_SW_RELEASE_DETAILS_VALID
  803. Consumer: SW
  804. Producer: WBM
  805. When set, some WBM specific release info for SW is
  806. valid.
  807. This is set when WMB got a 'release_msdu_list' command
  808. from TQM and the return buffer manager is not WMB. WBM will
  809. then de-aggregate all the MSDUs and pass them one at a time
  810. on to the 'buffer owner'
  811. <legal all>
  812. */
  813. #define WBM_RELEASE_RING_4_SW_RELEASE_DETAILS_VALID_OFFSET 0x00000010
  814. #define WBM_RELEASE_RING_4_SW_RELEASE_DETAILS_VALID_LSB 8
  815. #define WBM_RELEASE_RING_4_SW_RELEASE_DETAILS_VALID_MASK 0x00000100
  816. /* Description WBM_RELEASE_RING_4_FIRST_MSDU
  817. Field only valid when SW_release_details_valid is set.
  818. Consumer: SW
  819. Producer: WBM
  820. When set, this MSDU is the first MSDU pointed to in the
  821. 'release_msdu_list' command.
  822. <legal all>
  823. */
  824. #define WBM_RELEASE_RING_4_FIRST_MSDU_OFFSET 0x00000010
  825. #define WBM_RELEASE_RING_4_FIRST_MSDU_LSB 9
  826. #define WBM_RELEASE_RING_4_FIRST_MSDU_MASK 0x00000200
  827. /* Description WBM_RELEASE_RING_4_LAST_MSDU
  828. Field only valid when SW_release_details_valid is set.
  829. Consumer: SW
  830. Producer: WBM
  831. When set, this MSDU is the last MSDU pointed to in the
  832. 'release_msdu_list' command.
  833. <legal all>
  834. */
  835. #define WBM_RELEASE_RING_4_LAST_MSDU_OFFSET 0x00000010
  836. #define WBM_RELEASE_RING_4_LAST_MSDU_LSB 10
  837. #define WBM_RELEASE_RING_4_LAST_MSDU_MASK 0x00000400
  838. /* Description WBM_RELEASE_RING_4_MSDU_PART_OF_AMSDU
  839. Field only valid when SW_release_details_valid is set.
  840. Consumer: SW
  841. Producer: WBM
  842. When set, this MSDU was part of an A-MSDU in MPDU
  843. <legal all>
  844. */
  845. #define WBM_RELEASE_RING_4_MSDU_PART_OF_AMSDU_OFFSET 0x00000010
  846. #define WBM_RELEASE_RING_4_MSDU_PART_OF_AMSDU_LSB 11
  847. #define WBM_RELEASE_RING_4_MSDU_PART_OF_AMSDU_MASK 0x00000800
  848. /* Description WBM_RELEASE_RING_4_FW_TX_NOTIFY_FRAME
  849. Field only valid when SW_release_details_valid is set.
  850. Consumer: SW
  851. Producer: WBM
  852. This is the FW_tx_notify_frame field from the
  853. <legal all>
  854. */
  855. #define WBM_RELEASE_RING_4_FW_TX_NOTIFY_FRAME_OFFSET 0x00000010
  856. #define WBM_RELEASE_RING_4_FW_TX_NOTIFY_FRAME_LSB 12
  857. #define WBM_RELEASE_RING_4_FW_TX_NOTIFY_FRAME_MASK 0x00001000
  858. /* Description WBM_RELEASE_RING_4_BUFFER_TIMESTAMP
  859. Field only valid when SW_release_details_valid is set.
  860. Consumer: SW
  861. Producer: WBM
  862. This is the Buffer_timestamp field from the
  863. Timestamp in units of 1024 us
  864. <legal all>
  865. */
  866. #define WBM_RELEASE_RING_4_BUFFER_TIMESTAMP_OFFSET 0x00000010
  867. #define WBM_RELEASE_RING_4_BUFFER_TIMESTAMP_LSB 13
  868. #define WBM_RELEASE_RING_4_BUFFER_TIMESTAMP_MASK 0xffffe000
  869. /* EXTERNAL REFERENCE : struct tx_rate_stats_info tx_rate_stats */
  870. /* Description WBM_RELEASE_RING_5_TX_RATE_STATS_TX_RATE_STATS_INFO_VALID
  871. When set all other fields in this STRUCT contain valid
  872. info.
  873. <legal all>
  874. */
  875. #define WBM_RELEASE_RING_5_TX_RATE_STATS_TX_RATE_STATS_INFO_VALID_OFFSET 0x00000014
  876. #define WBM_RELEASE_RING_5_TX_RATE_STATS_TX_RATE_STATS_INFO_VALID_LSB 0
  877. #define WBM_RELEASE_RING_5_TX_RATE_STATS_TX_RATE_STATS_INFO_VALID_MASK 0x00000001
  878. /* Description WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_BW
  879. Field only valid when Tx_rate_stats_info_valid is set
  880. Indicates the BW of the upcoming transmission that shall
  881. likely start in about 3 -4 us on the medium
  882. <enum 0 transmit_bw_20_MHz>
  883. <enum 1 transmit_bw_40_MHz>
  884. <enum 2 transmit_bw_80_MHz>
  885. <enum 3 transmit_bw_160_MHz>
  886. <legal all>
  887. */
  888. #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_BW_OFFSET 0x00000014
  889. #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_BW_LSB 1
  890. #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_BW_MASK 0x00000006
  891. /* Description WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_PKT_TYPE
  892. Field only valid when Tx_rate_stats_info_valid is set
  893. Field filled in by PDG.
  894. Not valid when in SW transmit mode
  895. The packet type
  896. <enum 0 dot11a>802.11a PPDU type
  897. <enum 1 dot11b>802.11b PPDU type
  898. <enum 2 dot11n_mm>802.11n Mixed Mode PPDU type
  899. <enum 3 dot11ac>802.11ac PPDU type
  900. <enum 4 dot11ax>802.11ax PPDU type
  901. */
  902. #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_PKT_TYPE_OFFSET 0x00000014
  903. #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_PKT_TYPE_LSB 3
  904. #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_PKT_TYPE_MASK 0x00000078
  905. /* Description WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_STBC
  906. Field only valid when Tx_rate_stats_info_valid is set
  907. Field filled in by PDG.
  908. Not valid when in SW transmit mode
  909. When set, STBC transmission rate was used.
  910. */
  911. #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_STBC_OFFSET 0x00000014
  912. #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_STBC_LSB 7
  913. #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_STBC_MASK 0x00000080
  914. /* Description WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_LDPC
  915. Field only valid when Tx_rate_stats_info_valid is set
  916. Field filled in by PDG.
  917. Not valid when in SW transmit mode
  918. When set, use LDPC transmission rates
  919. */
  920. #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_LDPC_OFFSET 0x00000014
  921. #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_LDPC_LSB 8
  922. #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_LDPC_MASK 0x00000100
  923. /* Description WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_SGI
  924. Field only valid when Tx_rate_stats_info_valid is set
  925. Field filled in by PDG.
  926. Not valid when in SW transmit mode
  927. <enum 0 0_8_us_sgi > Legacy normal GI. Can also be
  928. used for HE
  929. <enum 1 0_4_us_sgi > Legacy short GI. Can also be
  930. used for HE
  931. <enum 2 1_6_us_sgi > HE related GI
  932. <enum 3 3_2_us_sgi > HE related GI
  933. <legal 0 - 3>
  934. */
  935. #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_SGI_OFFSET 0x00000014
  936. #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_SGI_LSB 9
  937. #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_SGI_MASK 0x00000600
  938. /* Description WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_MCS
  939. Field only valid when Tx_rate_stats_info_valid is set
  940. Field filled in by PDG.
  941. Not valid when in SW transmit mode
  942. For details, refer to MCS_TYPE description
  943. <legal all>
  944. */
  945. #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_MCS_OFFSET 0x00000014
  946. #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_MCS_LSB 11
  947. #define WBM_RELEASE_RING_5_TX_RATE_STATS_TRANSMIT_MCS_MASK 0x00007800
  948. /* Description WBM_RELEASE_RING_5_TX_RATE_STATS_OFDMA_TRANSMISSION
  949. Field only valid when Tx_rate_stats_info_valid is set
  950. Field filled in by PDG.
  951. Set when the transmission was an OFDMA transmission (DL
  952. or UL).
  953. <legal all>
  954. */
  955. #define WBM_RELEASE_RING_5_TX_RATE_STATS_OFDMA_TRANSMISSION_OFFSET 0x00000014
  956. #define WBM_RELEASE_RING_5_TX_RATE_STATS_OFDMA_TRANSMISSION_LSB 15
  957. #define WBM_RELEASE_RING_5_TX_RATE_STATS_OFDMA_TRANSMISSION_MASK 0x00008000
  958. /* Description WBM_RELEASE_RING_5_TX_RATE_STATS_TONES_IN_RU
  959. Field only valid when Tx_rate_stats_info_valid is set
  960. Field filled in by PDG.
  961. Not valid when in SW transmit mode
  962. The number of tones in the RU used.
  963. <legal all>
  964. */
  965. #define WBM_RELEASE_RING_5_TX_RATE_STATS_TONES_IN_RU_OFFSET 0x00000014
  966. #define WBM_RELEASE_RING_5_TX_RATE_STATS_TONES_IN_RU_LSB 16
  967. #define WBM_RELEASE_RING_5_TX_RATE_STATS_TONES_IN_RU_MASK 0x0fff0000
  968. /* Description WBM_RELEASE_RING_5_TX_RATE_STATS_RESERVED_0A
  969. <legal 0>
  970. */
  971. #define WBM_RELEASE_RING_5_TX_RATE_STATS_RESERVED_0A_OFFSET 0x00000014
  972. #define WBM_RELEASE_RING_5_TX_RATE_STATS_RESERVED_0A_LSB 28
  973. #define WBM_RELEASE_RING_5_TX_RATE_STATS_RESERVED_0A_MASK 0xf0000000
  974. /* Description WBM_RELEASE_RING_6_TX_RATE_STATS_PPDU_TRANSMISSION_TSF
  975. Field only valid when Tx_rate_stats_info_valid is set
  976. Based on a HWSCH configuration register setting, this
  977. field either contains:
  978. Lower 32 bits of the TSF, snapshot of this value when
  979. transmission of the PPDU containing the frame finished.
  980. OR
  981. Lower 32 bits of the TSF, snapshot of this value when
  982. transmission of the PPDU containing the frame started
  983. <legal all>
  984. */
  985. #define WBM_RELEASE_RING_6_TX_RATE_STATS_PPDU_TRANSMISSION_TSF_OFFSET 0x00000018
  986. #define WBM_RELEASE_RING_6_TX_RATE_STATS_PPDU_TRANSMISSION_TSF_LSB 0
  987. #define WBM_RELEASE_RING_6_TX_RATE_STATS_PPDU_TRANSMISSION_TSF_MASK 0xffffffff
  988. /* Description WBM_RELEASE_RING_7_SW_PEER_ID
  989. Field only valid when Release_source_module is set to
  990. release_source_TQM
  991. 1) Release of msdu buffer due to drop_frame = 1. Flow is
  992. not fetched and hence sw_peer_id and tid = 0
  993. buffer_or_desc_type = e_num 0
  994. MSDU_rel_buffertqm_release_reason = e_num 1
  995. tqm_rr_rem_cmd_rem
  996. 2) Release of msdu buffer due to Flow is not fetched and
  997. hence sw_peer_id and tid = 0
  998. buffer_or_desc_type = e_num 0
  999. MSDU_rel_buffertqm_release_reason = e_num 1
  1000. tqm_rr_rem_cmd_rem
  1001. 3) Release of msdu link due to remove_mpdu or acked_mpdu
  1002. command.
  1003. buffer_or_desc_type = e_num1
  1004. msdu_link_descriptortqm_release_reason can be:e_num 1
  1005. tqm_rr_rem_cmd_reme_num 2 tqm_rr_rem_cmd_tx
  1006. e_num 3 tqm_rr_rem_cmd_notxe_num 4 tqm_rr_rem_cmd_aged
  1007. Sw_peer_id from the TX_MSDU_FLOW descriptor or
  1008. TX_MPDU_QUEUE descriptor
  1009. <legal all>
  1010. */
  1011. #define WBM_RELEASE_RING_7_SW_PEER_ID_OFFSET 0x0000001c
  1012. #define WBM_RELEASE_RING_7_SW_PEER_ID_LSB 0
  1013. #define WBM_RELEASE_RING_7_SW_PEER_ID_MASK 0x0000ffff
  1014. /* Description WBM_RELEASE_RING_7_TID
  1015. Field only valid when Release_source_module is set to
  1016. release_source_TQM
  1017. 1) Release of msdu buffer due to drop_frame = 1. Flow is
  1018. not fetched and hence sw_peer_id and tid = 0
  1019. buffer_or_desc_type = e_num 0
  1020. MSDU_rel_buffertqm_release_reason = e_num 1
  1021. tqm_rr_rem_cmd_rem
  1022. 2) Release of msdu buffer due to Flow is not fetched and
  1023. hence sw_peer_id and tid = 0
  1024. buffer_or_desc_type = e_num 0
  1025. MSDU_rel_buffertqm_release_reason = e_num 1
  1026. tqm_rr_rem_cmd_rem
  1027. 3) Release of msdu link due to remove_mpdu or acked_mpdu
  1028. command.
  1029. buffer_or_desc_type = e_num1
  1030. msdu_link_descriptortqm_release_reason can be:e_num 1
  1031. tqm_rr_rem_cmd_reme_num 2 tqm_rr_rem_cmd_tx
  1032. e_num 3 tqm_rr_rem_cmd_notxe_num 4 tqm_rr_rem_cmd_aged
  1033. This field represents the TID from the TX_MSDU_FLOW
  1034. descriptor or TX_MPDU_QUEUE descriptor
  1035. <legal all>
  1036. */
  1037. #define WBM_RELEASE_RING_7_TID_OFFSET 0x0000001c
  1038. #define WBM_RELEASE_RING_7_TID_LSB 16
  1039. #define WBM_RELEASE_RING_7_TID_MASK 0x000f0000
  1040. /* Description WBM_RELEASE_RING_7_RING_ID
  1041. Consumer: TQM/REO/RXDMA/SW
  1042. Producer: SRNG (of RXDMA)
  1043. For debugging.
  1044. This field is filled in by the SRNG module.
  1045. It help to identify the ring that is being looked <legal
  1046. all>
  1047. */
  1048. #define WBM_RELEASE_RING_7_RING_ID_OFFSET 0x0000001c
  1049. #define WBM_RELEASE_RING_7_RING_ID_LSB 20
  1050. #define WBM_RELEASE_RING_7_RING_ID_MASK 0x0ff00000
  1051. /* Description WBM_RELEASE_RING_7_LOOPING_COUNT
  1052. Consumer: WBM/SW/FW
  1053. Producer: SW/TQM/RXDMA/REO/SWITCH
  1054. A count value that indicates the number of times the
  1055. producer of entries into the Buffer Manager Ring has looped
  1056. around the ring.
  1057. At initialization time, this value is set to 0. On the
  1058. first loop, this value is set to 1. After the max value is
  1059. reached allowed by the number of bits for this field, the
  1060. count value continues with 0 again.
  1061. In case SW is the consumer of the ring entries, it can
  1062. use this field to figure out up to where the producer of
  1063. entries has created new entries. This eliminates the need to
  1064. check where the head pointer' of the ring is located once
  1065. the SW starts processing an interrupt indicating that new
  1066. entries have been put into this ring...
  1067. Also note that SW if it wants only needs to look at the
  1068. LSB bit of this count value.
  1069. <legal all>
  1070. */
  1071. #define WBM_RELEASE_RING_7_LOOPING_COUNT_OFFSET 0x0000001c
  1072. #define WBM_RELEASE_RING_7_LOOPING_COUNT_LSB 28
  1073. #define WBM_RELEASE_RING_7_LOOPING_COUNT_MASK 0xf0000000
  1074. #endif // _WBM_RELEASE_RING_H_