hal_be_generic_api.c 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999
  1. /*
  2. * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
  3. * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
  4. *
  5. * Permission to use, copy, modify, and/or distribute this software for
  6. * any purpose with or without fee is hereby granted, provided that the
  7. * above copyright notice and this permission notice appear in all
  8. * copies.
  9. *
  10. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
  11. * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
  12. * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
  13. * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
  14. * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
  15. * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
  16. * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  17. * PERFORMANCE OF THIS SOFTWARE.
  18. */
  19. #include <qdf_module.h>
  20. #include "hal_be_api.h"
  21. #include "hal_be_hw_headers.h"
  22. #include "hal_be_reo.h"
  23. #include "hal_tx.h" //HAL_SET_FLD
  24. #include "hal_be_rx.h" //HAL_RX_BUF_RBM_GET
  25. #include "rx_reo_queue_1k.h"
  26. #include "hal_be_rx_tlv.h"
  27. /*
  28. * The 4 bits REO destination ring value is defined as: 0: TCL
  29. * 1:SW1 2:SW2 3:SW3 4:SW4 5:Release 6:FW(WIFI) 7:SW5
  30. * 8:SW6 9:SW7 10:SW8 11: NOT_USED.
  31. *
  32. */
  33. uint32_t reo_dest_ring_remap[] = {REO_REMAP_SW1, REO_REMAP_SW2,
  34. REO_REMAP_SW3, REO_REMAP_SW4,
  35. REO_REMAP_SW5, REO_REMAP_SW6,
  36. REO_REMAP_SW7, REO_REMAP_SW8};
  37. /*
  38. * WBM idle link descriptor for Return Buffer Manager in case of
  39. * multi-chip configuration.
  40. */
  41. #define HAL_NUM_CHIPS 4
  42. #define HAL_WBM_CHIP_INVALID 0
  43. #define HAL_WBM_CHIP0_IDLE_DESC_MAP 1
  44. #define HAL_WBM_CHIP1_IDLE_DESC_MAP 2
  45. #define HAL_WBM_CHIP2_IDLE_DESC_MAP 3
  46. #define HAL_WBM_CHIP3_IDLE_DESC_MAP 12
  47. uint8_t wbm_idle_link_bm_map[] = {HAL_WBM_CHIP0_IDLE_DESC_MAP,
  48. HAL_WBM_CHIP1_IDLE_DESC_MAP,
  49. HAL_WBM_CHIP2_IDLE_DESC_MAP,
  50. HAL_WBM_CHIP3_IDLE_DESC_MAP};
  51. #if defined(QDF_BIG_ENDIAN_MACHINE)
  52. void hal_setup_reo_swap(struct hal_soc *soc)
  53. {
  54. uint32_t reg_val;
  55. reg_val = HAL_REG_READ(soc, HWIO_REO_R0_CACHE_CTL_CONFIG_ADDR(
  56. REO_REG_REG_BASE));
  57. reg_val |= HAL_SM(HWIO_REO_R0_CACHE_CTL_CONFIG, WRITE_STRUCT_SWAP, 1);
  58. reg_val |= HAL_SM(HWIO_REO_R0_CACHE_CTL_CONFIG, READ_STRUCT_SWAP, 1);
  59. HAL_REG_WRITE(soc, HWIO_REO_R0_CACHE_CTL_CONFIG_ADDR(
  60. REO_REG_REG_BASE), reg_val);
  61. }
  62. #else
  63. void hal_setup_reo_swap(struct hal_soc *soc)
  64. {
  65. }
  66. #endif
  67. /**
  68. * hal_tx_init_data_ring_be() - Initialize all the TCL Descriptors in SRNG
  69. * @hal_soc_hdl: Handle to HAL SoC structure
  70. * @hal_ring_hdl: Handle to HAL SRNG structure
  71. *
  72. * Return: none
  73. */
  74. static void
  75. hal_tx_init_data_ring_be(hal_soc_handle_t hal_soc_hdl,
  76. hal_ring_handle_t hal_ring_hdl)
  77. {
  78. }
  79. void hal_reo_setup_generic_be(struct hal_soc *soc, void *reoparams,
  80. int qref_reset)
  81. {
  82. uint32_t reg_val;
  83. struct hal_reo_params *reo_params = (struct hal_reo_params *)reoparams;
  84. reg_val = HAL_REG_READ(soc, HWIO_REO_R0_GENERAL_ENABLE_ADDR(
  85. REO_REG_REG_BASE));
  86. hal_reo_config(soc, reg_val, reo_params);
  87. /* Other ring enable bits and REO_ENABLE will be set by FW */
  88. /* TODO: Setup destination ring mapping if enabled */
  89. /* TODO: Error destination ring setting is left to default.
  90. * Default setting is to send all errors to release ring.
  91. */
  92. /* Set the reo descriptor swap bits in case of BIG endian platform */
  93. hal_setup_reo_swap(soc);
  94. HAL_REG_WRITE(soc,
  95. HWIO_REO_R0_AGING_THRESHOLD_IX_0_ADDR(REO_REG_REG_BASE),
  96. HAL_DEFAULT_BE_BK_VI_REO_TIMEOUT_MS * 1000);
  97. HAL_REG_WRITE(soc,
  98. HWIO_REO_R0_AGING_THRESHOLD_IX_1_ADDR(REO_REG_REG_BASE),
  99. (HAL_DEFAULT_BE_BK_VI_REO_TIMEOUT_MS * 1000));
  100. HAL_REG_WRITE(soc,
  101. HWIO_REO_R0_AGING_THRESHOLD_IX_2_ADDR(REO_REG_REG_BASE),
  102. (HAL_DEFAULT_BE_BK_VI_REO_TIMEOUT_MS * 1000));
  103. HAL_REG_WRITE(soc,
  104. HWIO_REO_R0_AGING_THRESHOLD_IX_3_ADDR(REO_REG_REG_BASE),
  105. (HAL_DEFAULT_VO_REO_TIMEOUT_MS * 1000));
  106. /*
  107. * When hash based routing is enabled, routing of the rx packet
  108. * is done based on the following value: 1 _ _ _ _ The last 4
  109. * bits are based on hash[3:0]. This means the possible values
  110. * are 0x10 to 0x1f. This value is used to look-up the
  111. * ring ID configured in Destination_Ring_Ctrl_IX_* register.
  112. * The Destination_Ring_Ctrl_IX_2 and Destination_Ring_Ctrl_IX_3
  113. * registers need to be configured to set-up the 16 entries to
  114. * map the hash values to a ring number. There are 3 bits per
  115. * hash entry – which are mapped as follows:
  116. * 0: TCL, 1:SW1, 2:SW2, * 3:SW3, 4:SW4, 5:Release, 6:FW(WIFI),
  117. * 7: NOT_USED.
  118. */
  119. if (reo_params->rx_hash_enabled) {
  120. HAL_REG_WRITE(soc,
  121. HWIO_REO_R0_DESTINATION_RING_CTRL_IX_2_ADDR(
  122. REO_REG_REG_BASE),
  123. reo_params->remap1);
  124. hal_debug("HWIO_REO_R0_DESTINATION_RING_CTRL_IX_2_ADDR 0x%x",
  125. HAL_REG_READ(soc,
  126. HWIO_REO_R0_DESTINATION_RING_CTRL_IX_2_ADDR(
  127. REO_REG_REG_BASE)));
  128. HAL_REG_WRITE(soc,
  129. HWIO_REO_R0_DESTINATION_RING_CTRL_IX_3_ADDR(
  130. REO_REG_REG_BASE),
  131. reo_params->remap2);
  132. hal_debug("HWIO_REO_R0_DESTINATION_RING_CTRL_IX_3_ADDR 0x%x",
  133. HAL_REG_READ(soc,
  134. HWIO_REO_R0_DESTINATION_RING_CTRL_IX_3_ADDR(
  135. REO_REG_REG_BASE)));
  136. }
  137. /* TODO: Check if the following registers shoould be setup by host:
  138. * AGING_CONTROL
  139. * HIGH_MEMORY_THRESHOLD
  140. * GLOBAL_LINK_DESC_COUNT_THRESH_IX_0[1,2]
  141. * GLOBAL_LINK_DESC_COUNT_CTRL
  142. */
  143. }
  144. void hal_set_link_desc_addr_be(void *desc, uint32_t cookie,
  145. qdf_dma_addr_t link_desc_paddr,
  146. uint8_t bm_id)
  147. {
  148. uint32_t *buf_addr = (uint32_t *)desc;
  149. HAL_DESC_SET_FIELD(buf_addr, BUFFER_ADDR_INFO, BUFFER_ADDR_31_0,
  150. link_desc_paddr & 0xffffffff);
  151. HAL_DESC_SET_FIELD(buf_addr, BUFFER_ADDR_INFO, BUFFER_ADDR_39_32,
  152. (uint64_t)link_desc_paddr >> 32);
  153. HAL_DESC_SET_FIELD(buf_addr, BUFFER_ADDR_INFO, RETURN_BUFFER_MANAGER,
  154. bm_id);
  155. HAL_DESC_SET_FIELD(buf_addr, BUFFER_ADDR_INFO, SW_BUFFER_COOKIE,
  156. cookie);
  157. }
  158. static uint16_t hal_get_rx_max_ba_window_be(int tid)
  159. {
  160. return HAL_RX_BA_WINDOW_256;
  161. }
  162. static uint32_t hal_get_reo_qdesc_size_be(uint32_t ba_window_size, int tid)
  163. {
  164. /* Hardcode the ba_window_size to HAL_RX_MAX_BA_WINDOW for
  165. * NON_QOS_TID until HW issues are resolved.
  166. */
  167. if (tid != HAL_NON_QOS_TID)
  168. ba_window_size = hal_get_rx_max_ba_window_be(tid);
  169. /* Return descriptor size corresponding to window size of 2 since
  170. * we set ba_window_size to 2 while setting up REO descriptors as
  171. * a WAR to get 2k jump exception aggregates are received without
  172. * a BA session.
  173. */
  174. if (ba_window_size <= 1) {
  175. if (tid != HAL_NON_QOS_TID)
  176. return sizeof(struct rx_reo_queue) +
  177. sizeof(struct rx_reo_queue_ext);
  178. else
  179. return sizeof(struct rx_reo_queue);
  180. }
  181. if (ba_window_size <= 105)
  182. return sizeof(struct rx_reo_queue) +
  183. sizeof(struct rx_reo_queue_ext);
  184. if (ba_window_size <= 210)
  185. return sizeof(struct rx_reo_queue) +
  186. (2 * sizeof(struct rx_reo_queue_ext));
  187. return sizeof(struct rx_reo_queue) +
  188. (3 * sizeof(struct rx_reo_queue_ext));
  189. }
  190. void *hal_rx_msdu_ext_desc_info_get_ptr_be(void *msdu_details_ptr)
  191. {
  192. return HAL_RX_MSDU_EXT_DESC_INFO_GET(msdu_details_ptr);
  193. }
  194. #if defined(QCA_WIFI_KIWI) && !defined(QCA_WIFI_KIWI_V2)
  195. static inline uint32_t
  196. hal_wbm2sw_release_source_get(void *hal_desc, enum hal_be_wbm_release_dir dir)
  197. {
  198. uint32_t buf_src;
  199. buf_src = HAL_WBM2SW_RELEASE_SRC_GET(hal_desc);
  200. switch (buf_src) {
  201. case HAL_BE_RX_WBM_ERR_SRC_RXDMA:
  202. return HAL_RX_WBM_ERR_SRC_RXDMA;
  203. case HAL_BE_RX_WBM_ERR_SRC_REO:
  204. return HAL_RX_WBM_ERR_SRC_REO;
  205. case HAL_BE_RX_WBM_ERR_SRC_FW_RX:
  206. if (dir != HAL_BE_WBM_RELEASE_DIR_RX)
  207. qdf_assert_always(0);
  208. return HAL_RX_WBM_ERR_SRC_FW;
  209. case HAL_BE_RX_WBM_ERR_SRC_SW_RX:
  210. if (dir != HAL_BE_WBM_RELEASE_DIR_RX)
  211. qdf_assert_always(0);
  212. return HAL_RX_WBM_ERR_SRC_SW;
  213. case HAL_BE_RX_WBM_ERR_SRC_TQM:
  214. return HAL_RX_WBM_ERR_SRC_TQM;
  215. case HAL_BE_RX_WBM_ERR_SRC_FW_TX:
  216. if (dir != HAL_BE_WBM_RELEASE_DIR_TX)
  217. qdf_assert_always(0);
  218. return HAL_RX_WBM_ERR_SRC_FW;
  219. case HAL_BE_RX_WBM_ERR_SRC_SW_TX:
  220. if (dir != HAL_BE_WBM_RELEASE_DIR_TX)
  221. qdf_assert_always(0);
  222. return HAL_RX_WBM_ERR_SRC_SW;
  223. default:
  224. qdf_assert_always(0);
  225. }
  226. return buf_src;
  227. }
  228. #else
  229. static inline uint32_t
  230. hal_wbm2sw_release_source_get(void *hal_desc, enum hal_be_wbm_release_dir dir)
  231. {
  232. return HAL_WBM2SW_RELEASE_SRC_GET(hal_desc);
  233. }
  234. #endif
  235. uint32_t hal_tx_comp_get_buffer_source_generic_be(void *hal_desc)
  236. {
  237. return hal_wbm2sw_release_source_get(hal_desc,
  238. HAL_BE_WBM_RELEASE_DIR_TX);
  239. }
  240. /**
  241. * hal_tx_comp_get_release_reason_generic_be() - TQM Release reason
  242. * @hal_desc: completion ring descriptor pointer
  243. *
  244. * This function will return the type of pointer - buffer or descriptor
  245. *
  246. * Return: buffer type
  247. */
  248. static uint8_t hal_tx_comp_get_release_reason_generic_be(void *hal_desc)
  249. {
  250. uint32_t comp_desc = *(uint32_t *)(((uint8_t *)hal_desc) +
  251. WBM2SW_COMPLETION_RING_TX_TQM_RELEASE_REASON_OFFSET);
  252. return (comp_desc &
  253. WBM2SW_COMPLETION_RING_TX_TQM_RELEASE_REASON_MASK) >>
  254. WBM2SW_COMPLETION_RING_TX_TQM_RELEASE_REASON_LSB;
  255. }
  256. /**
  257. * hal_get_wbm_internal_error_generic_be() - is WBM internal error
  258. * @hal_desc: completion ring descriptor pointer
  259. *
  260. * This function will return 0 or 1 - is it WBM internal error or not
  261. *
  262. * Return: uint8_t
  263. */
  264. static uint8_t hal_get_wbm_internal_error_generic_be(void *hal_desc)
  265. {
  266. /*
  267. * TODO - This func is called by tx comp and wbm error handler
  268. * Check if one needs to use WBM2SW-TX and other WBM2SW-RX
  269. */
  270. uint32_t comp_desc =
  271. *(uint32_t *)(((uint8_t *)hal_desc) +
  272. HAL_WBM_INTERNAL_ERROR_OFFSET);
  273. return (comp_desc & HAL_WBM_INTERNAL_ERROR_MASK) >>
  274. HAL_WBM_INTERNAL_ERROR_LSB;
  275. }
  276. /**
  277. * hal_rx_wbm_err_src_get_be() - Get WBM error source from descriptor
  278. * @ring_desc: ring descriptor
  279. *
  280. * Return: wbm error source
  281. */
  282. static uint32_t hal_rx_wbm_err_src_get_be(hal_ring_desc_t ring_desc)
  283. {
  284. return hal_wbm2sw_release_source_get(ring_desc,
  285. HAL_BE_WBM_RELEASE_DIR_RX);
  286. }
  287. uint8_t hal_rx_ret_buf_manager_get_be(hal_ring_desc_t ring_desc)
  288. {
  289. /*
  290. * The following macro takes buf_addr_info as argument,
  291. * but since buf_addr_info is the first field in ring_desc
  292. * Hence the following call is OK
  293. */
  294. return HAL_RX_BUF_RBM_GET(ring_desc);
  295. }
  296. #define HAL_RX_WBM_REO_PUSH_REASON_GET(wbm_desc) (((*(((uint32_t *)wbm_desc) + \
  297. (WBM2SW_COMPLETION_RING_RX_REO_PUSH_REASON_OFFSET >> 2))) & \
  298. WBM2SW_COMPLETION_RING_RX_REO_PUSH_REASON_MASK) >> \
  299. WBM2SW_COMPLETION_RING_RX_REO_PUSH_REASON_LSB)
  300. #define HAL_RX_WBM_REO_ERROR_CODE_GET(wbm_desc) (((*(((uint32_t *)wbm_desc) + \
  301. (WBM2SW_COMPLETION_RING_RX_REO_ERROR_CODE_OFFSET >> 2))) & \
  302. WBM2SW_COMPLETION_RING_RX_REO_ERROR_CODE_MASK) >> \
  303. WBM2SW_COMPLETION_RING_RX_REO_ERROR_CODE_LSB)
  304. #define HAL_RX_WBM_RXDMA_PUSH_REASON_GET(wbm_desc) \
  305. (((*(((uint32_t *)wbm_desc) + \
  306. (WBM2SW_COMPLETION_RING_RX_RXDMA_PUSH_REASON_OFFSET >> 2))) & \
  307. WBM2SW_COMPLETION_RING_RX_RXDMA_PUSH_REASON_MASK) >> \
  308. WBM2SW_COMPLETION_RING_RX_RXDMA_PUSH_REASON_LSB)
  309. #define HAL_RX_WBM_RXDMA_ERROR_CODE_GET(wbm_desc) \
  310. (((*(((uint32_t *)wbm_desc) + \
  311. (WBM2SW_COMPLETION_RING_RX_RXDMA_ERROR_CODE_OFFSET >> 2))) & \
  312. WBM2SW_COMPLETION_RING_RX_RXDMA_ERROR_CODE_MASK) >> \
  313. WBM2SW_COMPLETION_RING_RX_RXDMA_ERROR_CODE_LSB)
  314. void hal_rx_wbm_err_info_get_generic_be(void *wbm_desc, void *wbm_er_info1)
  315. {
  316. struct hal_wbm_err_desc_info *wbm_er_info =
  317. (struct hal_wbm_err_desc_info *)wbm_er_info1;
  318. wbm_er_info->wbm_err_src = hal_rx_wbm_err_src_get_be(wbm_desc);
  319. wbm_er_info->reo_psh_rsn = HAL_RX_WBM_REO_PUSH_REASON_GET(wbm_desc);
  320. wbm_er_info->reo_err_code = HAL_RX_WBM_REO_ERROR_CODE_GET(wbm_desc);
  321. wbm_er_info->rxdma_psh_rsn = HAL_RX_WBM_RXDMA_PUSH_REASON_GET(wbm_desc);
  322. wbm_er_info->rxdma_err_code = HAL_RX_WBM_RXDMA_ERROR_CODE_GET(wbm_desc);
  323. }
  324. static void hal_rx_reo_buf_paddr_get_be(hal_ring_desc_t rx_desc,
  325. struct hal_buf_info *buf_info)
  326. {
  327. struct reo_destination_ring *reo_ring =
  328. (struct reo_destination_ring *)rx_desc;
  329. buf_info->paddr =
  330. (HAL_RX_REO_BUFFER_ADDR_31_0_GET(reo_ring) |
  331. ((uint64_t)(HAL_RX_REO_BUFFER_ADDR_39_32_GET(reo_ring)) << 32));
  332. buf_info->sw_cookie = HAL_RX_REO_BUF_COOKIE_GET(reo_ring);
  333. }
  334. static void hal_rx_msdu_link_desc_set_be(hal_soc_handle_t hal_soc_hdl,
  335. void *src_srng_desc,
  336. hal_buff_addrinfo_t buf_addr_info,
  337. uint8_t bm_action)
  338. {
  339. /*
  340. * The offsets for fields used in this function are same in
  341. * wbm_release_ring for Lithium and wbm_release_ring_tx
  342. * for Beryllium. hence we can use wbm_release_ring directly.
  343. */
  344. struct wbm_release_ring *wbm_rel_srng =
  345. (struct wbm_release_ring *)src_srng_desc;
  346. uint32_t addr_31_0;
  347. uint8_t addr_39_32;
  348. /* Structure copy !!! */
  349. wbm_rel_srng->released_buff_or_desc_addr_info =
  350. *((struct buffer_addr_info *)buf_addr_info);
  351. addr_31_0 =
  352. wbm_rel_srng->released_buff_or_desc_addr_info.buffer_addr_31_0;
  353. addr_39_32 =
  354. wbm_rel_srng->released_buff_or_desc_addr_info.buffer_addr_39_32;
  355. HAL_DESC_SET_FIELD(src_srng_desc, HAL_SW2WBM_RELEASE_RING,
  356. RELEASE_SOURCE_MODULE, HAL_RX_WBM_ERR_SRC_SW);
  357. HAL_DESC_SET_FIELD(src_srng_desc, HAL_SW2WBM_RELEASE_RING, BM_ACTION,
  358. bm_action);
  359. HAL_DESC_SET_FIELD(src_srng_desc, HAL_SW2WBM_RELEASE_RING,
  360. BUFFER_OR_DESC_TYPE,
  361. HAL_RX_WBM_BUF_TYPE_MSDU_LINK_DESC);
  362. /* WBM error is indicated when any of the link descriptors given to
  363. * WBM has a NULL address, and one those paths is the link descriptors
  364. * released from host after processing RXDMA errors,
  365. * or from Rx defrag path, and we want to add an assert here to ensure
  366. * host is not releasing descriptors with NULL address.
  367. */
  368. if (qdf_unlikely(!addr_31_0 && !addr_39_32)) {
  369. hal_dump_wbm_rel_desc(src_srng_desc);
  370. qdf_assert_always(0);
  371. }
  372. }
  373. /**
  374. * hal_rx_buf_cookie_rbm_get_be() - Get the cookie and return buffer
  375. * manager from the REO entrance ring desc
  376. * @buf_addr_info_hdl: Buffer address info element from ring desc
  377. * @buf_info_hdl: structure to return the buffer information
  378. *
  379. * Return: void
  380. */
  381. static
  382. void hal_rx_buf_cookie_rbm_get_be(uint32_t *buf_addr_info_hdl,
  383. hal_buf_info_t buf_info_hdl)
  384. {
  385. struct hal_buf_info *buf_info =
  386. (struct hal_buf_info *)buf_info_hdl;
  387. struct buffer_addr_info *buf_addr_info =
  388. (struct buffer_addr_info *)buf_addr_info_hdl;
  389. buf_info->sw_cookie = HAL_RX_BUF_COOKIE_GET(buf_addr_info);
  390. /*
  391. * buffer addr info is the first member of ring desc, so the typecast
  392. * can be done.
  393. */
  394. buf_info->rbm = hal_rx_ret_buf_manager_get_be(
  395. (hal_ring_desc_t)buf_addr_info);
  396. }
  397. /**
  398. * hal_rx_en_mcast_fp_data_filter_generic_be() - Is mcast filter pass enabled
  399. *
  400. * Return: true default for BE WIN
  401. */
  402. static inline
  403. bool hal_rx_en_mcast_fp_data_filter_generic_be(void)
  404. {
  405. return true;
  406. }
  407. /**
  408. * hal_rxdma_buff_addr_info_set_be() - set the buffer_addr_info of the
  409. * rxdma ring entry.
  410. * @rxdma_entry: descriptor entry
  411. * @paddr: physical address of nbuf data pointer.
  412. * @cookie: SW cookie used as a index to SW rx desc.
  413. * @manager: who owns the nbuf (host, NSS, etc...).
  414. *
  415. */
  416. static inline void
  417. hal_rxdma_buff_addr_info_set_be(void *rxdma_entry,
  418. qdf_dma_addr_t paddr, uint32_t cookie,
  419. uint8_t manager)
  420. {
  421. uint32_t paddr_lo = ((u64)paddr & 0x00000000ffffffff);
  422. uint32_t paddr_hi = ((u64)paddr & 0xffffffff00000000) >> 32;
  423. HAL_RXDMA_PADDR_LO_SET(rxdma_entry, paddr_lo);
  424. HAL_RXDMA_PADDR_HI_SET(rxdma_entry, paddr_hi);
  425. HAL_RXDMA_COOKIE_SET(rxdma_entry, cookie);
  426. HAL_RXDMA_MANAGER_SET(rxdma_entry, manager);
  427. }
  428. /**
  429. * hal_rx_get_reo_error_code_be() - Get REO error code from ring desc
  430. * @rx_desc: rx descriptor
  431. *
  432. * Return: REO error code
  433. */
  434. static uint32_t hal_rx_get_reo_error_code_be(hal_ring_desc_t rx_desc)
  435. {
  436. struct reo_destination_ring *reo_desc =
  437. (struct reo_destination_ring *)rx_desc;
  438. return HAL_RX_REO_ERROR_GET(reo_desc);
  439. }
  440. /**
  441. * hal_gen_reo_remap_val_generic_be() - Generate the reo map value
  442. * @remap_reg: remap register
  443. * @ix0_map: mapping values for reo
  444. *
  445. * Return: IX0 reo remap register value to be written
  446. */
  447. static uint32_t
  448. hal_gen_reo_remap_val_generic_be(enum hal_reo_remap_reg remap_reg,
  449. uint8_t *ix0_map)
  450. {
  451. uint32_t ix_val = 0;
  452. switch (remap_reg) {
  453. case HAL_REO_REMAP_REG_IX0:
  454. ix_val = HAL_REO_REMAP_IX0(ix0_map[0], 0) |
  455. HAL_REO_REMAP_IX0(ix0_map[1], 1) |
  456. HAL_REO_REMAP_IX0(ix0_map[2], 2) |
  457. HAL_REO_REMAP_IX0(ix0_map[3], 3) |
  458. HAL_REO_REMAP_IX0(ix0_map[4], 4) |
  459. HAL_REO_REMAP_IX0(ix0_map[5], 5) |
  460. HAL_REO_REMAP_IX0(ix0_map[6], 6) |
  461. HAL_REO_REMAP_IX0(ix0_map[7], 7);
  462. break;
  463. case HAL_REO_REMAP_REG_IX2:
  464. ix_val = HAL_REO_REMAP_IX2(ix0_map[0], 16) |
  465. HAL_REO_REMAP_IX2(ix0_map[1], 17) |
  466. HAL_REO_REMAP_IX2(ix0_map[2], 18) |
  467. HAL_REO_REMAP_IX2(ix0_map[3], 19) |
  468. HAL_REO_REMAP_IX2(ix0_map[4], 20) |
  469. HAL_REO_REMAP_IX2(ix0_map[5], 21) |
  470. HAL_REO_REMAP_IX2(ix0_map[6], 22) |
  471. HAL_REO_REMAP_IX2(ix0_map[7], 23);
  472. break;
  473. default:
  474. break;
  475. }
  476. return ix_val;
  477. }
  478. static uint8_t hal_rx_err_status_get_be(hal_ring_desc_t rx_desc)
  479. {
  480. return HAL_RX_ERROR_STATUS_GET(rx_desc);
  481. }
  482. static QDF_STATUS hal_reo_status_update_be(hal_soc_handle_t hal_soc_hdl,
  483. hal_ring_desc_t reo_desc,
  484. void *st_handle,
  485. uint32_t tlv, int *num_ref)
  486. {
  487. union hal_reo_status *reo_status_ref;
  488. reo_status_ref = (union hal_reo_status *)st_handle;
  489. switch (tlv) {
  490. case HAL_REO_QUEUE_STATS_STATUS_TLV:
  491. hal_reo_queue_stats_status_be(reo_desc,
  492. &reo_status_ref->queue_status,
  493. hal_soc_hdl);
  494. *num_ref = reo_status_ref->queue_status.header.cmd_num;
  495. break;
  496. case HAL_REO_FLUSH_QUEUE_STATUS_TLV:
  497. hal_reo_flush_queue_status_be(reo_desc,
  498. &reo_status_ref->fl_queue_status,
  499. hal_soc_hdl);
  500. *num_ref = reo_status_ref->fl_queue_status.header.cmd_num;
  501. break;
  502. case HAL_REO_FLUSH_CACHE_STATUS_TLV:
  503. hal_reo_flush_cache_status_be(reo_desc,
  504. &reo_status_ref->fl_cache_status,
  505. hal_soc_hdl);
  506. *num_ref = reo_status_ref->fl_cache_status.header.cmd_num;
  507. break;
  508. case HAL_REO_UNBLK_CACHE_STATUS_TLV:
  509. hal_reo_unblock_cache_status_be
  510. (reo_desc, hal_soc_hdl,
  511. &reo_status_ref->unblk_cache_status);
  512. *num_ref = reo_status_ref->unblk_cache_status.header.cmd_num;
  513. break;
  514. case HAL_REO_TIMOUT_LIST_STATUS_TLV:
  515. hal_reo_flush_timeout_list_status_be(
  516. reo_desc,
  517. &reo_status_ref->fl_timeout_status,
  518. hal_soc_hdl);
  519. *num_ref = reo_status_ref->fl_timeout_status.header.cmd_num;
  520. break;
  521. case HAL_REO_DESC_THRES_STATUS_TLV:
  522. hal_reo_desc_thres_reached_status_be(
  523. reo_desc,
  524. &reo_status_ref->thres_status,
  525. hal_soc_hdl);
  526. *num_ref = reo_status_ref->thres_status.header.cmd_num;
  527. break;
  528. case HAL_REO_UPDATE_RX_QUEUE_STATUS_TLV:
  529. hal_reo_rx_update_queue_status_be(
  530. reo_desc,
  531. &reo_status_ref->rx_queue_status,
  532. hal_soc_hdl);
  533. *num_ref = reo_status_ref->rx_queue_status.header.cmd_num;
  534. break;
  535. default:
  536. QDF_TRACE(QDF_MODULE_ID_DP_REO, QDF_TRACE_LEVEL_WARN,
  537. "hal_soc %pK: no handler for TLV:%d",
  538. hal_soc_hdl, tlv);
  539. return QDF_STATUS_E_FAILURE;
  540. } /* switch */
  541. return QDF_STATUS_SUCCESS;
  542. }
  543. static uint8_t hal_rx_reo_buf_type_get_be(hal_ring_desc_t rx_desc)
  544. {
  545. return HAL_RX_REO_BUF_TYPE_GET(rx_desc);
  546. }
  547. #ifdef DP_HW_COOKIE_CONVERT_EXCEPTION
  548. #define HAL_WBM_MISC_CONTROL_SPARE_CONTROL_FIELD_BIT15 0x8000
  549. #endif
  550. void hal_cookie_conversion_reg_cfg_be(hal_soc_handle_t hal_soc_hdl,
  551. struct hal_hw_cc_config *cc_cfg)
  552. {
  553. struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
  554. hal_soc->ops->hal_cookie_conversion_reg_cfg_be(hal_soc_hdl, cc_cfg);
  555. }
  556. qdf_export_symbol(hal_cookie_conversion_reg_cfg_be);
  557. static inline void
  558. hal_msdu_desc_info_set_be(hal_soc_handle_t hal_soc_hdl,
  559. void *msdu_desc, uint32_t dst_ind,
  560. uint32_t nbuf_len)
  561. {
  562. struct rx_msdu_desc_info *msdu_desc_info =
  563. (struct rx_msdu_desc_info *)msdu_desc;
  564. struct rx_msdu_ext_desc_info *msdu_ext_desc_info =
  565. (struct rx_msdu_ext_desc_info *)(msdu_desc_info + 1);
  566. HAL_RX_MSDU_DESC_INFO_SET(msdu_desc_info,
  567. FIRST_MSDU_IN_MPDU_FLAG, 1);
  568. HAL_RX_MSDU_DESC_INFO_SET(msdu_desc_info,
  569. LAST_MSDU_IN_MPDU_FLAG, 1);
  570. HAL_RX_MSDU_DESC_INFO_SET(msdu_desc_info,
  571. MSDU_CONTINUATION, 0x0);
  572. HAL_RX_MSDU_DESC_INFO_SET(msdu_desc_info,
  573. MSDU_LENGTH, nbuf_len);
  574. HAL_RX_MSDU_DESC_INFO_SET(msdu_desc_info,
  575. SA_IS_VALID, 1);
  576. HAL_RX_MSDU_DESC_INFO_SET(msdu_desc_info,
  577. DA_IS_VALID, 1);
  578. HAL_RX_MSDU_REO_DST_IND_SET(msdu_ext_desc_info,
  579. REO_DESTINATION_INDICATION, dst_ind);
  580. }
  581. static inline void
  582. hal_mpdu_desc_info_set_be(hal_soc_handle_t hal_soc_hdl,
  583. void *ent_desc,
  584. void *mpdu_desc,
  585. uint32_t seq_no)
  586. {
  587. struct rx_mpdu_desc_info *mpdu_desc_info =
  588. (struct rx_mpdu_desc_info *)mpdu_desc;
  589. uint8_t *desc = (uint8_t *)ent_desc;
  590. HAL_RX_FLD_SET(desc, REO_ENTRANCE_RING,
  591. MPDU_SEQUENCE_NUMBER, seq_no);
  592. HAL_RX_MPDU_DESC_INFO_SET(mpdu_desc_info,
  593. MSDU_COUNT, 0x1);
  594. HAL_RX_MPDU_DESC_INFO_SET(mpdu_desc_info,
  595. FRAGMENT_FLAG, 0x1);
  596. HAL_RX_MPDU_DESC_INFO_SET(mpdu_desc_info,
  597. RAW_MPDU, 0x0);
  598. }
  599. /**
  600. * hal_rx_msdu_reo_dst_ind_get_be() - Gets the REO destination ring ID
  601. * from the msdu desc info
  602. * @hal_soc_hdl: hal_soc handle
  603. * @msdu_link_desc : Opaque cookie pointer used by HAL to get to
  604. * the current descriptor
  605. *
  606. * Return: dst_ind (REO destination ring ID)
  607. */
  608. static inline
  609. uint32_t hal_rx_msdu_reo_dst_ind_get_be(hal_soc_handle_t hal_soc_hdl,
  610. void *msdu_link_desc)
  611. {
  612. struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
  613. struct rx_msdu_details *msdu_details;
  614. struct rx_msdu_desc_info *msdu_desc_info;
  615. struct rx_msdu_link *msdu_link = (struct rx_msdu_link *)msdu_link_desc;
  616. uint32_t dst_ind;
  617. msdu_details = hal_rx_link_desc_msdu0_ptr(msdu_link, hal_soc);
  618. /* The first msdu in the link should exist */
  619. msdu_desc_info = hal_rx_msdu_ext_desc_info_get_ptr(&msdu_details[0],
  620. hal_soc);
  621. dst_ind = HAL_RX_MSDU_REO_DST_IND_GET(msdu_desc_info);
  622. return dst_ind;
  623. }
  624. uint32_t
  625. hal_reo_ix_remap_value_get_be(hal_soc_handle_t hal_soc_hdl,
  626. uint8_t rx_ring_mask)
  627. {
  628. uint32_t num_rings = 0;
  629. uint32_t i = 0;
  630. uint32_t ring_remap_arr[HAL_MAX_REO2SW_RINGS] = {0};
  631. uint32_t reo_remap_val = 0;
  632. uint32_t ring_idx = 0;
  633. uint8_t ix_map[HAL_NUM_RX_RING_PER_IX_MAP] = {0};
  634. /* create reo ring remap array */
  635. while (i < HAL_MAX_REO2SW_RINGS) {
  636. if (rx_ring_mask & (1 << i)) {
  637. ring_remap_arr[num_rings] = reo_dest_ring_remap[i];
  638. num_rings++;
  639. }
  640. i++;
  641. }
  642. for (i = 0; i < HAL_NUM_RX_RING_PER_IX_MAP; i++) {
  643. if (rx_ring_mask) {
  644. ix_map[i] = ring_remap_arr[ring_idx];
  645. ring_idx = ((ring_idx + 1) % num_rings);
  646. } else {
  647. /* if ring mask is zero configure to release to WBM */
  648. ix_map[i] = REO_REMAP_RELEASE;
  649. }
  650. }
  651. reo_remap_val = HAL_REO_REMAP_IX0(ix_map[0], 0) |
  652. HAL_REO_REMAP_IX0(ix_map[1], 1) |
  653. HAL_REO_REMAP_IX0(ix_map[2], 2) |
  654. HAL_REO_REMAP_IX0(ix_map[3], 3) |
  655. HAL_REO_REMAP_IX0(ix_map[4], 4) |
  656. HAL_REO_REMAP_IX0(ix_map[5], 5) |
  657. HAL_REO_REMAP_IX0(ix_map[6], 6) |
  658. HAL_REO_REMAP_IX0(ix_map[7], 7);
  659. return reo_remap_val;
  660. }
  661. qdf_export_symbol(hal_reo_ix_remap_value_get_be);
  662. uint8_t hal_reo_ring_remap_value_get_be(uint8_t rx_ring_id)
  663. {
  664. if (rx_ring_id >= HAL_MAX_REO2SW_RINGS)
  665. return REO_REMAP_RELEASE;
  666. return reo_dest_ring_remap[rx_ring_id];
  667. }
  668. qdf_export_symbol(hal_reo_ring_remap_value_get_be);
  669. uint8_t hal_get_idle_link_bm_id_be(uint8_t chip_id)
  670. {
  671. if (chip_id >= HAL_NUM_CHIPS)
  672. return HAL_WBM_CHIP_INVALID;
  673. return wbm_idle_link_bm_map[chip_id];
  674. }
  675. #ifdef DP_FEATURE_HW_COOKIE_CONVERSION
  676. #ifdef DP_HW_COOKIE_CONVERT_EXCEPTION
  677. static inline void
  678. hal_rx_wbm_rel_buf_paddr_get_be(hal_ring_desc_t rx_desc,
  679. struct hal_buf_info *buf_info)
  680. {
  681. if (hal_rx_wbm_get_cookie_convert_done(rx_desc))
  682. buf_info->paddr =
  683. (HAL_RX_WBM_COMP_BUF_ADDR_31_0_GET(rx_desc) |
  684. ((uint64_t)(HAL_RX_WBM_COMP_BUF_ADDR_39_32_GET(rx_desc)) << 32));
  685. else
  686. buf_info->paddr =
  687. (HAL_RX_WBM_BUF_ADDR_31_0_GET(rx_desc) |
  688. ((uint64_t)(HAL_RX_WBM_BUF_ADDR_39_32_GET(rx_desc)) << 32));
  689. }
  690. #else
  691. static inline void
  692. hal_rx_wbm_rel_buf_paddr_get_be(hal_ring_desc_t rx_desc,
  693. struct hal_buf_info *buf_info)
  694. {
  695. buf_info->paddr =
  696. (HAL_RX_WBM_COMP_BUF_ADDR_31_0_GET(rx_desc) |
  697. ((uint64_t)(HAL_RX_WBM_COMP_BUF_ADDR_39_32_GET(rx_desc)) << 32));
  698. }
  699. #endif
  700. #else /* !DP_FEATURE_HW_COOKIE_CONVERSION */
  701. static inline void
  702. hal_rx_wbm_rel_buf_paddr_get_be(hal_ring_desc_t rx_desc,
  703. struct hal_buf_info *buf_info)
  704. {
  705. buf_info->paddr =
  706. (HAL_RX_WBM_BUF_ADDR_31_0_GET(rx_desc) |
  707. ((uint64_t)(HAL_RX_WBM_BUF_ADDR_39_32_GET(rx_desc)) << 32));
  708. }
  709. #endif
  710. #ifdef DP_UMAC_HW_RESET_SUPPORT
  711. /**
  712. * hal_unregister_reo_send_cmd_be() - Unregister Reo send command callback.
  713. * @hal_soc: HAL soc handle
  714. *
  715. * Return: None
  716. */
  717. static
  718. void hal_unregister_reo_send_cmd_be(struct hal_soc *hal_soc)
  719. {
  720. hal_soc->ops->hal_reo_send_cmd = NULL;
  721. }
  722. /**
  723. * hal_register_reo_send_cmd_be() - Register Reo send command callback.
  724. * @hal_soc: HAL soc handle
  725. *
  726. * Return: None
  727. */
  728. static
  729. void hal_register_reo_send_cmd_be(struct hal_soc *hal_soc)
  730. {
  731. hal_soc->ops->hal_reo_send_cmd = hal_reo_send_cmd_be;
  732. }
  733. /**
  734. * hal_reset_rx_reo_tid_q_be() - reset the reo tid queue.
  735. * @hal_soc: HAL soc handle
  736. * @hw_qdesc_vaddr: start address of the tid queue
  737. * @size: size of address pointed by hw_qdesc_vaddr
  738. *
  739. * Return: None
  740. */
  741. static void
  742. hal_reset_rx_reo_tid_q_be(struct hal_soc *hal_soc, void *hw_qdesc_vaddr,
  743. uint32_t size)
  744. {
  745. struct rx_reo_queue *hw_qdesc = (struct rx_reo_queue *)hw_qdesc_vaddr;
  746. int i;
  747. if (!hw_qdesc)
  748. return;
  749. hw_qdesc->svld = 0;
  750. hw_qdesc->ssn = 0;
  751. hw_qdesc->current_index = 0;
  752. hw_qdesc->pn_valid = 0;
  753. hw_qdesc->pn_31_0 = 0;
  754. hw_qdesc->pn_63_32 = 0;
  755. hw_qdesc->pn_95_64 = 0;
  756. hw_qdesc->pn_127_96 = 0;
  757. hw_qdesc->last_rx_enqueue_timestamp = 0;
  758. hw_qdesc->last_rx_dequeue_timestamp = 0;
  759. hw_qdesc->ptr_to_next_aging_queue_39_32 = 0;
  760. hw_qdesc->ptr_to_next_aging_queue_31_0 = 0;
  761. hw_qdesc->ptr_to_previous_aging_queue_31_0 = 0;
  762. hw_qdesc->ptr_to_previous_aging_queue_39_32 = 0;
  763. hw_qdesc->rx_bitmap_31_0 = 0;
  764. hw_qdesc->rx_bitmap_63_32 = 0;
  765. hw_qdesc->rx_bitmap_95_64 = 0;
  766. hw_qdesc->rx_bitmap_127_96 = 0;
  767. hw_qdesc->rx_bitmap_159_128 = 0;
  768. hw_qdesc->rx_bitmap_191_160 = 0;
  769. hw_qdesc->rx_bitmap_223_192 = 0;
  770. hw_qdesc->rx_bitmap_255_224 = 0;
  771. hw_qdesc->rx_bitmap_287_256 = 0;
  772. hw_qdesc->current_msdu_count = 0;
  773. hw_qdesc->current_mpdu_count = 0;
  774. hw_qdesc->last_sn_reg_index = 0;
  775. if (size > sizeof(struct rx_reo_queue)) {
  776. struct rx_reo_queue_ext *ext_desc;
  777. struct rx_reo_queue_1k *kdesc;
  778. i = ((size - sizeof(struct rx_reo_queue)) /
  779. sizeof(struct rx_reo_queue_ext));
  780. if (i > 10) {
  781. i = 10;
  782. kdesc = (struct rx_reo_queue_1k *)
  783. (hw_qdesc_vaddr + sizeof(struct rx_reo_queue) +
  784. (10 * sizeof(struct rx_reo_queue_ext)));
  785. kdesc->rx_bitmap_319_288 = 0;
  786. kdesc->rx_bitmap_351_320 = 0;
  787. kdesc->rx_bitmap_383_352 = 0;
  788. kdesc->rx_bitmap_415_384 = 0;
  789. kdesc->rx_bitmap_447_416 = 0;
  790. kdesc->rx_bitmap_479_448 = 0;
  791. kdesc->rx_bitmap_511_480 = 0;
  792. kdesc->rx_bitmap_543_512 = 0;
  793. kdesc->rx_bitmap_575_544 = 0;
  794. kdesc->rx_bitmap_607_576 = 0;
  795. kdesc->rx_bitmap_639_608 = 0;
  796. kdesc->rx_bitmap_671_640 = 0;
  797. kdesc->rx_bitmap_703_672 = 0;
  798. kdesc->rx_bitmap_735_704 = 0;
  799. kdesc->rx_bitmap_767_736 = 0;
  800. kdesc->rx_bitmap_799_768 = 0;
  801. kdesc->rx_bitmap_831_800 = 0;
  802. kdesc->rx_bitmap_863_832 = 0;
  803. kdesc->rx_bitmap_895_864 = 0;
  804. kdesc->rx_bitmap_927_896 = 0;
  805. kdesc->rx_bitmap_959_928 = 0;
  806. kdesc->rx_bitmap_991_960 = 0;
  807. kdesc->rx_bitmap_1023_992 = 0;
  808. }
  809. ext_desc = (struct rx_reo_queue_ext *)
  810. (hw_qdesc_vaddr + (sizeof(struct rx_reo_queue)));
  811. while (i > 0) {
  812. qdf_mem_zero(&ext_desc->mpdu_link_pointer_0,
  813. (15 * sizeof(struct rx_mpdu_link_ptr)));
  814. ext_desc++;
  815. i--;
  816. }
  817. }
  818. }
  819. #endif
  820. static inline uint8_t hal_rx_get_phy_ppdu_id_size_be(void)
  821. {
  822. return sizeof(uint64_t);
  823. }
  824. void hal_hw_txrx_default_ops_attach_be(struct hal_soc *hal_soc)
  825. {
  826. hal_soc->ops->hal_get_reo_qdesc_size = hal_get_reo_qdesc_size_be;
  827. hal_soc->ops->hal_get_rx_max_ba_window = hal_get_rx_max_ba_window_be;
  828. hal_soc->ops->hal_set_link_desc_addr = hal_set_link_desc_addr_be;
  829. hal_soc->ops->hal_tx_init_data_ring = hal_tx_init_data_ring_be;
  830. hal_soc->ops->hal_get_reo_reg_base_offset =
  831. hal_get_reo_reg_base_offset_be;
  832. hal_soc->ops->hal_reo_setup = hal_reo_setup_generic_be;
  833. hal_soc->ops->hal_rx_reo_buf_paddr_get = hal_rx_reo_buf_paddr_get_be;
  834. hal_soc->ops->hal_rx_msdu_link_desc_set = hal_rx_msdu_link_desc_set_be;
  835. hal_soc->ops->hal_rx_buf_cookie_rbm_get = hal_rx_buf_cookie_rbm_get_be;
  836. hal_soc->ops->hal_rx_ret_buf_manager_get =
  837. hal_rx_ret_buf_manager_get_be;
  838. hal_soc->ops->hal_rxdma_buff_addr_info_set =
  839. hal_rxdma_buff_addr_info_set_be;
  840. hal_soc->ops->hal_rx_msdu_flags_get = hal_rx_msdu_flags_get_be;
  841. hal_soc->ops->hal_rx_get_reo_error_code = hal_rx_get_reo_error_code_be;
  842. hal_soc->ops->hal_gen_reo_remap_val =
  843. hal_gen_reo_remap_val_generic_be;
  844. hal_soc->ops->hal_tx_comp_get_buffer_source =
  845. hal_tx_comp_get_buffer_source_generic_be;
  846. hal_soc->ops->hal_tx_comp_get_release_reason =
  847. hal_tx_comp_get_release_reason_generic_be;
  848. hal_soc->ops->hal_get_wbm_internal_error =
  849. hal_get_wbm_internal_error_generic_be;
  850. hal_soc->ops->hal_rx_mpdu_desc_info_get =
  851. hal_rx_mpdu_desc_info_get_be;
  852. hal_soc->ops->hal_rx_err_status_get = hal_rx_err_status_get_be;
  853. hal_soc->ops->hal_rx_reo_buf_type_get = hal_rx_reo_buf_type_get_be;
  854. hal_soc->ops->hal_rx_wbm_err_src_get = hal_rx_wbm_err_src_get_be;
  855. hal_soc->ops->hal_rx_wbm_rel_buf_paddr_get =
  856. hal_rx_wbm_rel_buf_paddr_get_be;
  857. hal_soc->ops->hal_reo_send_cmd = hal_reo_send_cmd_be;
  858. hal_soc->ops->hal_reo_qdesc_setup = hal_reo_qdesc_setup_be;
  859. hal_soc->ops->hal_reo_status_update = hal_reo_status_update_be;
  860. hal_soc->ops->hal_get_tlv_hdr_size = hal_get_tlv_hdr_size_be;
  861. hal_soc->ops->hal_rx_msdu_reo_dst_ind_get =
  862. hal_rx_msdu_reo_dst_ind_get_be;
  863. hal_soc->ops->hal_get_idle_link_bm_id = hal_get_idle_link_bm_id_be;
  864. hal_soc->ops->hal_rx_msdu_ext_desc_info_get_ptr =
  865. hal_rx_msdu_ext_desc_info_get_ptr_be;
  866. hal_soc->ops->hal_msdu_desc_info_set = hal_msdu_desc_info_set_be;
  867. hal_soc->ops->hal_mpdu_desc_info_set = hal_mpdu_desc_info_set_be;
  868. #ifdef DP_UMAC_HW_RESET_SUPPORT
  869. hal_soc->ops->hal_unregister_reo_send_cmd =
  870. hal_unregister_reo_send_cmd_be;
  871. hal_soc->ops->hal_register_reo_send_cmd = hal_register_reo_send_cmd_be;
  872. hal_soc->ops->hal_reset_rx_reo_tid_q = hal_reset_rx_reo_tid_q_be;
  873. #endif
  874. hal_soc->ops->hal_rx_tlv_get_pn_num = hal_rx_tlv_get_pn_num_be;
  875. #ifndef CONFIG_WORD_BASED_TLV
  876. hal_soc->ops->hal_rx_get_qdesc_addr = hal_rx_get_qdesc_addr_be;
  877. #endif
  878. hal_soc->ops->hal_set_reo_ent_desc_reo_dest_ind =
  879. hal_set_reo_ent_desc_reo_dest_ind_be;
  880. hal_soc->ops->hal_get_reo_ent_desc_qdesc_addr =
  881. hal_get_reo_ent_desc_qdesc_addr_be;
  882. hal_soc->ops->hal_rx_en_mcast_fp_data_filter =
  883. hal_rx_en_mcast_fp_data_filter_generic_be;
  884. hal_soc->ops->hal_rx_get_phy_ppdu_id_size =
  885. hal_rx_get_phy_ppdu_id_size_be;
  886. hal_soc->ops->hal_rx_phy_legacy_get_rssi =
  887. hal_rx_phy_legacy_get_rssi_be;
  888. hal_soc->ops->hal_rx_parse_eht_sig_hdr = hal_rx_parse_eht_sig_hdr_be;
  889. }