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