rxpt_classify_info.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  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 _RXPT_CLASSIFY_INFO_H_
  17. #define _RXPT_CLASSIFY_INFO_H_
  18. #if !defined(__ASSEMBLER__)
  19. #endif
  20. #define NUM_OF_DWORDS_RXPT_CLASSIFY_INFO 1
  21. struct rxpt_classify_info {
  22. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  23. uint32_t reo_destination_indication : 5, // [4:0]
  24. lmac_peer_id_msb : 2, // [6:5]
  25. use_flow_id_toeplitz_clfy : 1, // [7:7]
  26. pkt_selection_fp_ucast_data : 1, // [8:8]
  27. pkt_selection_fp_mcast_data : 1, // [9:9]
  28. pkt_selection_fp_1000 : 1, // [10:10]
  29. rxdma0_source_ring_selection : 3, // [13:11]
  30. rxdma0_destination_ring_selection : 3, // [16:14]
  31. mcast_echo_drop_enable : 1, // [17:17]
  32. wds_learning_detect_en : 1, // [18:18]
  33. intrabss_check_en : 1, // [19:19]
  34. use_ppe : 1, // [20:20]
  35. ppe_routing_enable : 1, // [21:21]
  36. reserved_0b : 10; // [31:22]
  37. #else
  38. uint32_t reserved_0b : 10, // [31:22]
  39. ppe_routing_enable : 1, // [21:21]
  40. use_ppe : 1, // [20:20]
  41. intrabss_check_en : 1, // [19:19]
  42. wds_learning_detect_en : 1, // [18:18]
  43. mcast_echo_drop_enable : 1, // [17:17]
  44. rxdma0_destination_ring_selection : 3, // [16:14]
  45. rxdma0_source_ring_selection : 3, // [13:11]
  46. pkt_selection_fp_1000 : 1, // [10:10]
  47. pkt_selection_fp_mcast_data : 1, // [9:9]
  48. pkt_selection_fp_ucast_data : 1, // [8:8]
  49. use_flow_id_toeplitz_clfy : 1, // [7:7]
  50. lmac_peer_id_msb : 2, // [6:5]
  51. reo_destination_indication : 5; // [4:0]
  52. #endif
  53. };
  54. /* Description REO_DESTINATION_INDICATION
  55. The ID of the REO exit ring where the MSDU frame shall push
  56. after (MPDU level) reordering has finished.
  57. <enum 0 reo_destination_sw0> Reo will push the frame into
  58. the REO2SW0 ring
  59. <enum 1 reo_destination_sw1> Reo will push the frame into
  60. the REO2SW1 ring
  61. <enum 2 reo_destination_sw2> Reo will push the frame into
  62. the REO2SW2 ring
  63. <enum 3 reo_destination_sw3> Reo will push the frame into
  64. the REO2SW3 ring
  65. <enum 4 reo_destination_sw4> Reo will push the frame into
  66. the REO2SW4 ring
  67. <enum 5 reo_destination_release> Reo will push the frame
  68. into the REO_release ring
  69. <enum 6 reo_destination_fw> Reo will push the frame into
  70. the REO2FW ring
  71. <enum 7 reo_destination_sw5> Reo will push the frame into
  72. the REO2SW5 ring (REO remaps this in chips without REO2SW5
  73. ring)
  74. <enum 8 reo_destination_sw6> Reo will push the frame into
  75. the REO2SW6 ring (REO remaps this in chips without REO2SW6
  76. ring)
  77. <enum 9 reo_destination_sw7> Reo will push the frame into
  78. the REO2SW7 ring (REO remaps this in chips without REO2SW7
  79. ring)
  80. <enum 10 reo_destination_sw8> Reo will push the frame into
  81. the REO2SW8 ring (REO remaps this in chips without REO2SW8
  82. ring)
  83. <enum 11 reo_destination_11> REO remaps this
  84. <enum 12 reo_destination_12> REO remaps this <enum 13 reo_destination_13>
  85. REO remaps this
  86. <enum 14 reo_destination_14> REO remaps this
  87. <enum 15 reo_destination_15> REO remaps this
  88. <enum 16 reo_destination_16> REO remaps this
  89. <enum 17 reo_destination_17> REO remaps this
  90. <enum 18 reo_destination_18> REO remaps this
  91. <enum 19 reo_destination_19> REO remaps this
  92. <enum 20 reo_destination_20> REO remaps this
  93. <enum 21 reo_destination_21> REO remaps this
  94. <enum 22 reo_destination_22> REO remaps this
  95. <enum 23 reo_destination_23> REO remaps this
  96. <enum 24 reo_destination_24> REO remaps this
  97. <enum 25 reo_destination_25> REO remaps this
  98. <enum 26 reo_destination_26> REO remaps this
  99. <enum 27 reo_destination_27> REO remaps this
  100. <enum 28 reo_destination_28> REO remaps this
  101. <enum 29 reo_destination_29> REO remaps this
  102. <enum 30 reo_destination_30> REO remaps this
  103. <enum 31 reo_destination_31> REO remaps this
  104. <legal all>
  105. */
  106. #define RXPT_CLASSIFY_INFO_REO_DESTINATION_INDICATION_OFFSET 0x00000000
  107. #define RXPT_CLASSIFY_INFO_REO_DESTINATION_INDICATION_LSB 0
  108. #define RXPT_CLASSIFY_INFO_REO_DESTINATION_INDICATION_MSB 4
  109. #define RXPT_CLASSIFY_INFO_REO_DESTINATION_INDICATION_MASK 0x0000001f
  110. /* Description LMAC_PEER_ID_MSB
  111. If use_flow_id_toeplitz_clfy is set and lmac_peer_id_'sb
  112. is 2'b00, Rx OLE uses a REO desination indicati'n of {1'b1,
  113. hash[3:0]} using the chosen Toeplitz hash from Common Parser
  114. if flow search fails.
  115. If use_flow_id_toeplitz_clfy is set and lmac_peer_id_msb
  116. 's not 2'b00, Rx OLE uses a REO desination indication of
  117. {lmac_peer_id_msb, hash[2:0]} using the chosen Toeplitz
  118. hash from Common Parser if flow search fails.
  119. <legal all>
  120. */
  121. #define RXPT_CLASSIFY_INFO_LMAC_PEER_ID_MSB_OFFSET 0x00000000
  122. #define RXPT_CLASSIFY_INFO_LMAC_PEER_ID_MSB_LSB 5
  123. #define RXPT_CLASSIFY_INFO_LMAC_PEER_ID_MSB_MSB 6
  124. #define RXPT_CLASSIFY_INFO_LMAC_PEER_ID_MSB_MASK 0x00000060
  125. /* Description USE_FLOW_ID_TOEPLITZ_CLFY
  126. Indication to Rx OLE to enable REO destination routing based
  127. on the chosen Toeplitz hash from Common Parser, in case
  128. flow search fails
  129. <legal all>
  130. */
  131. #define RXPT_CLASSIFY_INFO_USE_FLOW_ID_TOEPLITZ_CLFY_OFFSET 0x00000000
  132. #define RXPT_CLASSIFY_INFO_USE_FLOW_ID_TOEPLITZ_CLFY_LSB 7
  133. #define RXPT_CLASSIFY_INFO_USE_FLOW_ID_TOEPLITZ_CLFY_MSB 7
  134. #define RXPT_CLASSIFY_INFO_USE_FLOW_ID_TOEPLITZ_CLFY_MASK 0x00000080
  135. /* Description PKT_SELECTION_FP_UCAST_DATA
  136. Filter pass Unicast data frame (matching rxpcu_filter_pass
  137. and sw_frame_group_Unicast_data) routing selection
  138. TODO: What about 'rxpcu_filter_pass_monior_ovrd'?
  139. 1'b0: source and destination rings are selected from the
  140. RxOLE register settings for the packet type
  141. 1'b1: source ring and destination ring is selected from
  142. the rxdma0_source_ring_selection and rxdma0_destination_ring_selection
  143. fields in this STRUCT
  144. <legal all>
  145. */
  146. #define RXPT_CLASSIFY_INFO_PKT_SELECTION_FP_UCAST_DATA_OFFSET 0x00000000
  147. #define RXPT_CLASSIFY_INFO_PKT_SELECTION_FP_UCAST_DATA_LSB 8
  148. #define RXPT_CLASSIFY_INFO_PKT_SELECTION_FP_UCAST_DATA_MSB 8
  149. #define RXPT_CLASSIFY_INFO_PKT_SELECTION_FP_UCAST_DATA_MASK 0x00000100
  150. /* Description PKT_SELECTION_FP_MCAST_DATA
  151. Filter pass Multicast data frame (matching rxpcu_filter_pass
  152. and sw_frame_group_Multicast_data) routing selection
  153. TODO: What about 'rxpcu_filter_pass_monior_ovrd'?
  154. 1'b0: source and destination rings are selected from the
  155. RxOLE register settings for the packet type
  156. 1'b1: source ring and destination ring is selected from
  157. the rxdma0_source_ring_selection and rxdma0_destination_ring_selection
  158. fields in this STRUCT
  159. <legal all>
  160. */
  161. #define RXPT_CLASSIFY_INFO_PKT_SELECTION_FP_MCAST_DATA_OFFSET 0x00000000
  162. #define RXPT_CLASSIFY_INFO_PKT_SELECTION_FP_MCAST_DATA_LSB 9
  163. #define RXPT_CLASSIFY_INFO_PKT_SELECTION_FP_MCAST_DATA_MSB 9
  164. #define RXPT_CLASSIFY_INFO_PKT_SELECTION_FP_MCAST_DATA_MASK 0x00000200
  165. /* Description PKT_SELECTION_FP_1000
  166. Filter pass BAR frame (matching rxpcu_filter_pass and sw_frame_group_ctrl_1000)
  167. routing selection
  168. TODO: What about 'rxpcu_filter_pass_monior_ovrd'?
  169. 1'b0: source and destination rings are selected from the
  170. RxOLE register settings for the packet type
  171. 1'b1: source ring and destination ring is selected from
  172. the rxdma0_source_ring_selection and rxdma0_destination_ring_selection
  173. fields in this STRUCT
  174. <legal all>
  175. */
  176. #define RXPT_CLASSIFY_INFO_PKT_SELECTION_FP_1000_OFFSET 0x00000000
  177. #define RXPT_CLASSIFY_INFO_PKT_SELECTION_FP_1000_LSB 10
  178. #define RXPT_CLASSIFY_INFO_PKT_SELECTION_FP_1000_MSB 10
  179. #define RXPT_CLASSIFY_INFO_PKT_SELECTION_FP_1000_MASK 0x00000400
  180. /* Description RXDMA0_SOURCE_RING_SELECTION
  181. Field only valid when for the received frame type the corresponding
  182. pkt_selection_fp_... bit is set
  183. <enum 0 sw2rxdma0_0_buf_source_ring> The data buffer for
  184. this frame shall be sourced by sw2rxdma0 buffer source
  185. ring.
  186. <enum 1 fw2rxdma0_pmac0_buf_source_ring> The data buffer
  187. for this frame shall be sourced by fw2rxdma buffer source
  188. ring for PMAC0.
  189. <enum 2 sw2rxdma0_1_buf_source_ring> The data buffer for
  190. this frame shall be sourced by sw2rxdma1 buffer source
  191. ring.
  192. <enum 3 no_buffer_rxdma0_ring> The frame shall not be written
  193. to any data buffer.
  194. <enum 4 sw2rxdma0_exception_buf_source_ring> The data buffer
  195. for this frame shall be sourced by sw2rxdma_exception buffer
  196. source ring.
  197. <enum 5 fw2rxdma0_pmac1_buf_source_ring> The data buffer
  198. for this frame shall be sourced by fw2rxdma buffer source
  199. ring for PMAC1.
  200. <legal 0-5>
  201. */
  202. #define RXPT_CLASSIFY_INFO_RXDMA0_SOURCE_RING_SELECTION_OFFSET 0x00000000
  203. #define RXPT_CLASSIFY_INFO_RXDMA0_SOURCE_RING_SELECTION_LSB 11
  204. #define RXPT_CLASSIFY_INFO_RXDMA0_SOURCE_RING_SELECTION_MSB 13
  205. #define RXPT_CLASSIFY_INFO_RXDMA0_SOURCE_RING_SELECTION_MASK 0x00003800
  206. /* Description RXDMA0_DESTINATION_RING_SELECTION
  207. Field only valid when for the received frame type the corresponding
  208. pkt_selection_fp_... bit is set
  209. <enum 0 rxdma_release_ring> RXDMA0 shall push the frame
  210. to the Release ring. Effectively this means the frame needs
  211. to be dropped.
  212. <enum 1 rxdma2fw_pmac0_ring> RXDMA0 shall push the frame
  213. to the FW ring for PMAC0.
  214. <enum 2 rxdma2sw_ring> RXDMA0 shall push the frame to the
  215. SW ring.
  216. <enum 3 rxdma2reo_ring> RXDMA0 shall push the frame to
  217. the REO entrance ring.
  218. <enum 4 rxdma2fw_pmac1_ring> RXDMA0 shall push the frame
  219. to the FW ring for PMAC1.
  220. <enum 5 rxdma2reo_remote0_ring> RXDMA0 shall push the frame
  221. to the first MLO REO entrance ring.
  222. <enum 6 rxdma2reo_remote1_ring> RXDMA0 shall push the frame
  223. to the second MLO REO entrance ring.
  224. <legal 0-6>
  225. */
  226. #define RXPT_CLASSIFY_INFO_RXDMA0_DESTINATION_RING_SELECTION_OFFSET 0x00000000
  227. #define RXPT_CLASSIFY_INFO_RXDMA0_DESTINATION_RING_SELECTION_LSB 14
  228. #define RXPT_CLASSIFY_INFO_RXDMA0_DESTINATION_RING_SELECTION_MSB 16
  229. #define RXPT_CLASSIFY_INFO_RXDMA0_DESTINATION_RING_SELECTION_MASK 0x0001c000
  230. /* Description MCAST_ECHO_DROP_ENABLE
  231. If set, for multicast packets, multicast echo check (i.e.
  232. SA search with mcast_echo_check = 1) shall be performed
  233. by RXOLE, and any multicast echo packets should be indicated
  234. to RXDMA for release to WBM
  235. <legal all>
  236. */
  237. #define RXPT_CLASSIFY_INFO_MCAST_ECHO_DROP_ENABLE_OFFSET 0x00000000
  238. #define RXPT_CLASSIFY_INFO_MCAST_ECHO_DROP_ENABLE_LSB 17
  239. #define RXPT_CLASSIFY_INFO_MCAST_ECHO_DROP_ENABLE_MSB 17
  240. #define RXPT_CLASSIFY_INFO_MCAST_ECHO_DROP_ENABLE_MASK 0x00020000
  241. /* Description WDS_LEARNING_DETECT_EN
  242. If set, WDS learning detection based on SA search and notification
  243. to FW (using RXDMA0 status ring) is enabled and the "timestamp"
  244. field in address search failure cache-only entry should
  245. be used to avoid multiple WDS learning notifications.
  246. <legal all>
  247. */
  248. #define RXPT_CLASSIFY_INFO_WDS_LEARNING_DETECT_EN_OFFSET 0x00000000
  249. #define RXPT_CLASSIFY_INFO_WDS_LEARNING_DETECT_EN_LSB 18
  250. #define RXPT_CLASSIFY_INFO_WDS_LEARNING_DETECT_EN_MSB 18
  251. #define RXPT_CLASSIFY_INFO_WDS_LEARNING_DETECT_EN_MASK 0x00040000
  252. /* Description INTRABSS_CHECK_EN
  253. If set, intra-BSS routing detection is enabled
  254. <legal all>
  255. */
  256. #define RXPT_CLASSIFY_INFO_INTRABSS_CHECK_EN_OFFSET 0x00000000
  257. #define RXPT_CLASSIFY_INFO_INTRABSS_CHECK_EN_LSB 19
  258. #define RXPT_CLASSIFY_INFO_INTRABSS_CHECK_EN_MSB 19
  259. #define RXPT_CLASSIFY_INFO_INTRABSS_CHECK_EN_MASK 0x00080000
  260. /* Description USE_PPE
  261. Indicates to RXDMA to ignore the REO_destination_indication
  262. and use a programmed value corresponding to the REO2PPE
  263. ring
  264. This override to REO2PPE for packets requiring multiple
  265. buffers shall be disabled based on an RXDMA configuration,
  266. as PPE may not support such packets.
  267. <legal all>
  268. */
  269. #define RXPT_CLASSIFY_INFO_USE_PPE_OFFSET 0x00000000
  270. #define RXPT_CLASSIFY_INFO_USE_PPE_LSB 20
  271. #define RXPT_CLASSIFY_INFO_USE_PPE_MSB 20
  272. #define RXPT_CLASSIFY_INFO_USE_PPE_MASK 0x00100000
  273. /* Description PPE_ROUTING_ENABLE
  274. Global enable/disable bit for routing to PPE, used to disable
  275. PPE routing even if RXOLE CCE or flow search indicate 'Use_PPE'
  276. This is set by SW for peers which are being handled by a
  277. host SW/accelerator subsystem that also handles packet
  278. buffer management for WiFi-to-PPE routing.
  279. This is cleared by SW for peers which are being handled
  280. by a different subsystem, completely disabling WiFi-to-PPE
  281. routing for such peers.
  282. <legal all>
  283. */
  284. #define RXPT_CLASSIFY_INFO_PPE_ROUTING_ENABLE_OFFSET 0x00000000
  285. #define RXPT_CLASSIFY_INFO_PPE_ROUTING_ENABLE_LSB 21
  286. #define RXPT_CLASSIFY_INFO_PPE_ROUTING_ENABLE_MSB 21
  287. #define RXPT_CLASSIFY_INFO_PPE_ROUTING_ENABLE_MASK 0x00200000
  288. /* Description RESERVED_0B
  289. <legal 0>
  290. */
  291. #define RXPT_CLASSIFY_INFO_RESERVED_0B_OFFSET 0x00000000
  292. #define RXPT_CLASSIFY_INFO_RESERVED_0B_LSB 22
  293. #define RXPT_CLASSIFY_INFO_RESERVED_0B_MSB 31
  294. #define RXPT_CLASSIFY_INFO_RESERVED_0B_MASK 0xffc00000
  295. #endif // RXPT_CLASSIFY_INFO