blob: 42fead9fe218d68c1f60a964560d44b3e4eb361d [file] [log] [blame]
Karunakar Dasineni8fbfeea2016-08-31 14:43:27 -07001/*
Krunal Soni9911b442019-02-22 15:39:03 -08002 * Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
Karunakar Dasineni8fbfeea2016-08-31 14:43:27 -07003 *
Balamurugan Mahalingam5d806412018-07-30 18:04:15 +05304 * Permission to use, copy, modify, and/or distribute this software for
5 * any purpose with or without fee is hereby granted, provided that the
6 * above copyright notice and this permission notice appear in all
7 * copies.
Karunakar Dasineni8fbfeea2016-08-31 14:43:27 -07008 *
Balamurugan Mahalingam5d806412018-07-30 18:04:15 +05309 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16 * PERFORMANCE OF THIS SOFTWARE.
Karunakar Dasineni8fbfeea2016-08-31 14:43:27 -070017 */
18
19#ifndef _HAL_INTERNAL_H_
20#define _HAL_INTERNAL_H_
21
22#include "qdf_types.h"
23#include "qdf_lock.h"
Leo Chang5ea93a42016-11-03 12:39:49 -070024#include "qdf_mem.h"
Ravi Joshi36f68ad2016-11-09 17:09:47 -080025#include "qdf_nbuf.h"
Houston Hoffman5141f9d2017-01-05 10:49:17 -080026#include "pld_common.h"
Karunakar Dasineni8fbfeea2016-08-31 14:43:27 -070027
Mohit Khannaefdae7f2018-11-02 16:19:48 -070028#define hal_alert(params...) QDF_TRACE_FATAL(QDF_MODULE_ID_TXRX, params)
29#define hal_err(params...) QDF_TRACE_ERROR(QDF_MODULE_ID_TXRX, params)
30#define hal_warn(params...) QDF_TRACE_WARN(QDF_MODULE_ID_TXRX, params)
31#define hal_info(params...) QDF_TRACE_INFO(QDF_MODULE_ID_TXRX, params)
32#define hal_debug(params...) QDF_TRACE_DEBUG(QDF_MODULE_ID_TXRX, params)
Krunal Soni9911b442019-02-22 15:39:03 -080033#ifdef ENABLE_VERBOSE_DEBUG
34extern bool is_hal_verbose_debug_enabled;
35#define hal_verbose_debug(params...) \
36 if (unlikely(is_hal_verbose_debug_enabled)) \
37 do {\
38 QDF_TRACE_DEBUG(QDF_MODULE_ID_TXRX, params); \
39 } while (0)
40#define hal_verbose_hex_dump(params...) \
41 if (unlikely(is_hal_verbose_debug_enabled)) \
42 do {\
43 QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_TXRX, \
44 QDF_TRACE_LEVEL_DEBUG, \
45 params); \
46 } while (0)
47#else
48#define hal_verbose_debug(params...) QDF_TRACE_DEBUG(QDF_MODULE_ID_TXRX, params)
49#define hal_verbose_hex_dump(params...) \
50 QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_DEBUG, \
51 params)
52#endif
Mohit Khannaefdae7f2018-11-02 16:19:48 -070053
Akshay Kosigi6a206752019-06-10 23:14:52 +053054/*
55 * dp_hal_soc - opaque handle for DP HAL soc
56 */
57struct hal_soc_handle;
58typedef struct hal_soc_handle *hal_soc_handle_t;
Mohit Khanna6c22db32018-03-19 21:47:51 -070059
Karunakar Dasineni8fbfeea2016-08-31 14:43:27 -070060/* TBD: This should be movded to shared HW header file */
61enum hal_srng_ring_id {
62 /* UMAC rings */
63 HAL_SRNG_REO2SW1 = 0,
64 HAL_SRNG_REO2SW2 = 1,
65 HAL_SRNG_REO2SW3 = 2,
66 HAL_SRNG_REO2SW4 = 3,
67 HAL_SRNG_REO2TCL = 4,
68 HAL_SRNG_SW2REO = 5,
69 /* 6-7 unused */
70 HAL_SRNG_REO_CMD = 8,
71 HAL_SRNG_REO_STATUS = 9,
72 /* 10-15 unused */
73 HAL_SRNG_SW2TCL1 = 16,
74 HAL_SRNG_SW2TCL2 = 17,
75 HAL_SRNG_SW2TCL3 = 18,
76 HAL_SRNG_SW2TCL4 = 19, /* FW2TCL ring */
77 /* 20-23 unused */
78 HAL_SRNG_SW2TCL_CMD = 24,
79 HAL_SRNG_TCL_STATUS = 25,
80 /* 26-31 unused */
81 HAL_SRNG_CE_0_SRC = 32,
82 HAL_SRNG_CE_1_SRC = 33,
83 HAL_SRNG_CE_2_SRC = 34,
84 HAL_SRNG_CE_3_SRC = 35,
85 HAL_SRNG_CE_4_SRC = 36,
86 HAL_SRNG_CE_5_SRC = 37,
87 HAL_SRNG_CE_6_SRC = 38,
88 HAL_SRNG_CE_7_SRC = 39,
89 HAL_SRNG_CE_8_SRC = 40,
90 HAL_SRNG_CE_9_SRC = 41,
91 HAL_SRNG_CE_10_SRC = 42,
92 HAL_SRNG_CE_11_SRC = 43,
93 /* 44-55 unused */
94 HAL_SRNG_CE_0_DST = 56,
95 HAL_SRNG_CE_1_DST = 57,
96 HAL_SRNG_CE_2_DST = 58,
97 HAL_SRNG_CE_3_DST = 59,
98 HAL_SRNG_CE_4_DST = 60,
99 HAL_SRNG_CE_5_DST = 61,
100 HAL_SRNG_CE_6_DST = 62,
101 HAL_SRNG_CE_7_DST = 63,
102 HAL_SRNG_CE_8_DST = 64,
103 HAL_SRNG_CE_9_DST = 65,
104 HAL_SRNG_CE_10_DST = 66,
105 HAL_SRNG_CE_11_DST = 67,
106 /* 68-79 unused */
107 HAL_SRNG_CE_0_DST_STATUS = 80,
108 HAL_SRNG_CE_1_DST_STATUS = 81,
109 HAL_SRNG_CE_2_DST_STATUS = 82,
110 HAL_SRNG_CE_3_DST_STATUS = 83,
111 HAL_SRNG_CE_4_DST_STATUS = 84,
112 HAL_SRNG_CE_5_DST_STATUS = 85,
113 HAL_SRNG_CE_6_DST_STATUS = 86,
114 HAL_SRNG_CE_7_DST_STATUS = 87,
115 HAL_SRNG_CE_8_DST_STATUS = 88,
116 HAL_SRNG_CE_9_DST_STATUS = 89,
117 HAL_SRNG_CE_10_DST_STATUS = 90,
118 HAL_SRNG_CE_11_DST_STATUS = 91,
119 /* 92-103 unused */
120 HAL_SRNG_WBM_IDLE_LINK = 104,
121 HAL_SRNG_WBM_SW_RELEASE = 105,
122 HAL_SRNG_WBM2SW0_RELEASE = 106,
123 HAL_SRNG_WBM2SW1_RELEASE = 107,
124 HAL_SRNG_WBM2SW2_RELEASE = 108,
125 HAL_SRNG_WBM2SW3_RELEASE = 109,
126 /* 110-127 unused */
127 HAL_SRNG_UMAC_ID_END = 127,
128 /* LMAC rings - The following set will be replicated for each LMAC */
129 HAL_SRNG_LMAC1_ID_START = 128,
Yun Parkfde6b9e2017-06-26 17:13:11 -0700130 HAL_SRNG_WMAC1_SW2RXDMA0_BUF0 = HAL_SRNG_LMAC1_ID_START,
131#ifdef IPA_OFFLOAD
132 HAL_SRNG_WMAC1_SW2RXDMA0_BUF1 = (HAL_SRNG_LMAC1_ID_START + 1),
133 HAL_SRNG_WMAC1_SW2RXDMA0_BUF2 = (HAL_SRNG_LMAC1_ID_START + 2),
134 HAL_SRNG_WMAC1_SW2RXDMA1_BUF = (HAL_SRNG_WMAC1_SW2RXDMA0_BUF2 + 1),
135#else
136 HAL_SRNG_WMAC1_SW2RXDMA1_BUF = (HAL_SRNG_WMAC1_SW2RXDMA0_BUF0 + 1),
Naveen Rawatba24c482017-05-15 12:02:48 -0700137#endif
Yun Parkfde6b9e2017-06-26 17:13:11 -0700138 HAL_SRNG_WMAC1_SW2RXDMA2_BUF = (HAL_SRNG_WMAC1_SW2RXDMA1_BUF + 1),
139 HAL_SRNG_WMAC1_SW2RXDMA0_STATBUF = (HAL_SRNG_WMAC1_SW2RXDMA2_BUF + 1),
140 HAL_SRNG_WMAC1_SW2RXDMA1_STATBUF =
141 (HAL_SRNG_WMAC1_SW2RXDMA0_STATBUF + 1),
142 HAL_SRNG_WMAC1_RXDMA2SW0 = (HAL_SRNG_WMAC1_SW2RXDMA1_STATBUF + 1),
143 HAL_SRNG_WMAC1_RXDMA2SW1 = (HAL_SRNG_WMAC1_RXDMA2SW0 + 1),
144 HAL_SRNG_WMAC1_SW2RXDMA1_DESC = (HAL_SRNG_WMAC1_RXDMA2SW1 + 1),
145#ifdef WLAN_FEATURE_CIF_CFR
146 HAL_SRNG_WIFI_POS_SRC_DMA_RING = (HAL_SRNG_WMAC1_SW2RXDMA1_DESC + 1),
Sathish Kumar03d77e62017-11-17 17:27:52 +0530147 HAL_SRNG_DIR_BUF_RX_SRC_DMA_RING = (HAL_SRNG_WIFI_POS_SRC_DMA_RING + 1),
148#else
149 HAL_SRNG_DIR_BUF_RX_SRC_DMA_RING = (HAL_SRNG_WMAC1_SW2RXDMA1_DESC + 1),
Yun Parkfde6b9e2017-06-26 17:13:11 -0700150#endif
151 /* -142 unused */
Karunakar Dasineni8fbfeea2016-08-31 14:43:27 -0700152 HAL_SRNG_LMAC1_ID_END = 143
153};
154
Balamurugan Mahalingamd0159642018-07-11 15:02:29 +0530155#define HAL_RXDMA_MAX_RING_SIZE 0xFFFF
Karunakar Dasineni8fbfeea2016-08-31 14:43:27 -0700156#define HAL_MAX_LMACS 3
157#define HAL_MAX_RINGS_PER_LMAC (HAL_SRNG_LMAC1_ID_END - HAL_SRNG_LMAC1_ID_START)
158#define HAL_MAX_LMAC_RINGS (HAL_MAX_LMACS * HAL_MAX_RINGS_PER_LMAC)
159
160#define HAL_SRNG_ID_MAX (HAL_SRNG_UMAC_ID_END + HAL_MAX_LMAC_RINGS)
161
162enum hal_srng_dir {
163 HAL_SRNG_SRC_RING,
164 HAL_SRNG_DST_RING
165};
166
167/* Lock wrappers for SRNG */
168#define hal_srng_lock_t qdf_spinlock_t
169#define SRNG_LOCK_INIT(_lock) qdf_spinlock_create(_lock)
Gurumoorthi Gnanasambandhaned4bcf82017-05-24 00:10:59 +0530170#define SRNG_LOCK(_lock) qdf_spin_lock_bh(_lock)
171#define SRNG_UNLOCK(_lock) qdf_spin_unlock_bh(_lock)
Karunakar Dasineni8fbfeea2016-08-31 14:43:27 -0700172#define SRNG_LOCK_DESTROY(_lock) qdf_spinlock_destroy(_lock)
173
Balamurugan Mahalingamd0159642018-07-11 15:02:29 +0530174struct hal_soc;
Akshay Kosigi91c56522019-07-02 11:49:39 +0530175
176/**
Akshay Kosigi0bca9fb2019-06-27 15:26:13 +0530177 * dp_hal_ring - opaque handle for DP HAL SRNG
178 */
179struct hal_ring_handle;
180typedef struct hal_ring_handle *hal_ring_handle_t;
181
Karunakar Dasineni8fbfeea2016-08-31 14:43:27 -0700182#define MAX_SRNG_REG_GROUPS 2
183
184/* Common SRNG ring structure for source and destination rings */
185struct hal_srng {
186 /* Unique SRNG ring ID */
187 uint8_t ring_id;
188
189 /* Ring initialization done */
190 uint8_t initialized;
191
192 /* Interrupt/MSI value assigned to this ring */
193 int irq;
194
195 /* Physical base address of the ring */
196 qdf_dma_addr_t ring_base_paddr;
197
198 /* Virtual base address of the ring */
199 uint32_t *ring_base_vaddr;
200
201 /* Number of entries in ring */
202 uint32_t num_entries;
203
204 /* Ring size */
205 uint32_t ring_size;
206
207 /* Ring size mask */
208 uint32_t ring_size_mask;
209
210 /* Size of ring entry */
211 uint32_t entry_size;
212
213 /* Interrupt timer threshold – in micro seconds */
214 uint32_t intr_timer_thres_us;
215
216 /* Interrupt batch counter threshold – in number of ring entries */
217 uint32_t intr_batch_cntr_thres_entries;
218
219 /* MSI Address */
220 qdf_dma_addr_t msi_addr;
221
222 /* MSI data */
223 uint32_t msi_data;
224
225 /* Misc flags */
226 uint32_t flags;
227
228 /* Lock for serializing ring index updates */
229 hal_srng_lock_t lock;
230
231 /* Start offset of SRNG register groups for this ring
232 * TBD: See if this is required - register address can be derived
233 * from ring ID
234 */
235 void *hwreg_base[MAX_SRNG_REG_GROUPS];
236
237 /* Source or Destination ring */
238 enum hal_srng_dir ring_dir;
239
240 union {
241 struct {
242 /* SW tail pointer */
243 uint32_t tp;
244
245 /* Shadow head pointer location to be updated by HW */
246 uint32_t *hp_addr;
247
248 /* Cached head pointer */
249 uint32_t cached_hp;
250
251 /* Tail pointer location to be updated by SW – This
252 * will be a register address and need not be
253 * accessed through SW structure */
254 uint32_t *tp_addr;
255
256 /* Current SW loop cnt */
Houston Hoffman74109122016-10-21 14:58:34 -0700257 uint32_t loop_cnt;
258
259 /* max transfer size */
260 uint16_t max_buffer_length;
Karunakar Dasineni8fbfeea2016-08-31 14:43:27 -0700261 } dst_ring;
262
263 struct {
264 /* SW head pointer */
265 uint32_t hp;
266
267 /* SW reap head pointer */
268 uint32_t reap_hp;
269
270 /* Shadow tail pointer location to be updated by HW */
271 uint32_t *tp_addr;
272
273 /* Cached tail pointer */
274 uint32_t cached_tp;
275
276 /* Head pointer location to be updated by SW – This
277 * will be a register address and need not be accessed
278 * through SW structure */
279 uint32_t *hp_addr;
280
281 /* Low threshold – in number of ring entries */
282 uint32_t low_threshold;
283 } src_ring;
284 } u;
Houston Hoffman8bbc9902017-04-10 14:09:51 -0700285
286 struct hal_soc *hal_soc;
Venkata Sharath Chandra Manchala5ee6efd2019-08-01 11:22:04 -0700287
288 /* Number of times hp/tp updated in runtime resume */
289 uint32_t needs_flush;
Karunakar Dasineni8fbfeea2016-08-31 14:43:27 -0700290};
291
292/* HW SRNG configuration table */
293struct hal_hw_srng_config {
294 int start_ring_id;
295 uint16_t max_rings;
296 uint16_t entry_size;
297 uint32_t reg_start[MAX_SRNG_REG_GROUPS];
298 uint16_t reg_size[MAX_SRNG_REG_GROUPS];
299 uint8_t lmac_ring;
300 enum hal_srng_dir ring_dir;
Venkata Sharath Chandra Manchala9a59bd62018-06-14 16:53:29 -0700301 uint32_t max_size;
Karunakar Dasineni8fbfeea2016-08-31 14:43:27 -0700302};
303
Houston Hoffman5141f9d2017-01-05 10:49:17 -0800304#define MAX_SHADOW_REGISTERS 36
305
Balamurugan Mahalingamd0159642018-07-11 15:02:29 +0530306struct hal_hw_txrx_ops {
Balamurugan Mahalingam5d806412018-07-30 18:04:15 +0530307
308 /* init and setup */
Akshay Kosigi8eda31c2019-07-10 14:42:42 +0530309 void (*hal_srng_dst_hw_init)(struct hal_soc *hal,
310 struct hal_srng *srng);
311 void (*hal_srng_src_hw_init)(struct hal_soc *hal,
312 struct hal_srng *srng);
313 void (*hal_get_hw_hptp)(struct hal_soc *hal,
Akshay Kosigi0bca9fb2019-06-27 15:26:13 +0530314 hal_ring_handle_t hal_ring_hdl,
Venkata Sharath Chandra Manchala443b9b42018-10-10 12:04:54 -0700315 uint32_t *headp, uint32_t *tailp,
316 uint8_t ring_type);
Akshay Kosigi8eda31c2019-07-10 14:42:42 +0530317 void (*hal_reo_setup)(struct hal_soc *hal_soc, void *reoparams);
318 void (*hal_setup_link_idle_list)(
319 struct hal_soc *hal_soc,
320 qdf_dma_addr_t scatter_bufs_base_paddr[],
321 void *scatter_bufs_base_vaddr[],
322 uint32_t num_scatter_bufs,
323 uint32_t scatter_buf_size,
324 uint32_t last_buf_end_offset,
325 uint32_t num_entries);
Balamurugan Mahalingam5d806412018-07-30 18:04:15 +0530326
Balamurugan Mahalingamd0159642018-07-11 15:02:29 +0530327 /* tx */
328 void (*hal_tx_desc_set_dscp_tid_table_id)(void *desc, uint8_t id);
Akshay Kosigi8eda31c2019-07-10 14:42:42 +0530329 void (*hal_tx_set_dscp_tid_map)(struct hal_soc *hal_soc, uint8_t *map,
Balamurugan Mahalingamd0159642018-07-11 15:02:29 +0530330 uint8_t id);
Akshay Kosigi8eda31c2019-07-10 14:42:42 +0530331 void (*hal_tx_update_dscp_tid)(struct hal_soc *hal_soc, uint8_t tid,
332 uint8_t id,
Balamurugan Mahalingamd0159642018-07-11 15:02:29 +0530333 uint8_t dscp);
334 void (*hal_tx_desc_set_lmac_id)(void *desc, uint8_t lmac_id);
Balamurugan Mahalingam5d806412018-07-30 18:04:15 +0530335 void (*hal_tx_desc_set_buf_addr)(void *desc, dma_addr_t paddr,
336 uint8_t pool_id, uint32_t desc_id, uint8_t type);
Balamurugan Mahalingamfa1d9c72018-09-25 12:13:34 +0530337 void (*hal_tx_desc_set_search_type)(void *desc, uint8_t search_type);
338 void (*hal_tx_desc_set_search_index)(void *desc, uint32_t search_index);
Akshay Kosigi8eda31c2019-07-10 14:42:42 +0530339 void (*hal_tx_comp_get_status)(void *desc, void *ts,
340 struct hal_soc *hal);
Balamurugan Mahalingam764219e2018-09-17 15:34:25 +0530341 uint8_t (*hal_tx_comp_get_release_reason)(void *hal_desc);
Balamurugan Mahalingamd0159642018-07-11 15:02:29 +0530342
343 /* rx */
344 uint32_t (*hal_rx_msdu_start_nss_get)(uint8_t *);
345 void (*hal_rx_mon_hw_desc_get_mpdu_status)(void *hw_desc_addr,
346 struct mon_rx_status *rs);
347 uint8_t (*hal_rx_get_tlv)(void *rx_tlv);
348 void (*hal_rx_proc_phyrx_other_receive_info_tlv)(void *rx_tlv_hdr,
349 void *ppdu_info_handle);
350 void (*hal_rx_dump_msdu_start_tlv)(void *msdu_start, uint8_t dbg_level);
Balamurugan Mahalingam97ad1062018-07-11 15:22:58 +0530351 void (*hal_rx_dump_msdu_end_tlv)(void *msdu_end,
352 uint8_t dbg_level);
Balamurugan Mahalingamd0159642018-07-11 15:02:29 +0530353 uint32_t (*hal_get_link_desc_size)(void);
354 uint32_t (*hal_rx_mpdu_start_tid_get)(uint8_t *buf);
355 uint32_t (*hal_rx_msdu_start_reception_type_get)(uint8_t *buf);
Balamurugan Mahalingam96d2d412018-07-10 10:11:58 +0530356 uint16_t (*hal_rx_msdu_end_da_idx_get)(uint8_t *buf);
Balamurugan Mahalingam5d806412018-07-30 18:04:15 +0530357 void* (*hal_rx_msdu_desc_info_get_ptr)(void *msdu_details_ptr);
358 void* (*hal_rx_link_desc_msdu0_ptr)(void *msdu_link_ptr);
359 void (*hal_reo_status_get_header)(uint32_t *d, int b, void *h);
360 uint32_t (*hal_rx_status_get_tlv_info)(void *rx_tlv_hdr,
Akshay Kosigi6a206752019-06-10 23:14:52 +0530361 void *ppdu_info,
362 hal_soc_handle_t hal_soc_hdl,
363 qdf_nbuf_t nbuf);
Balamurugan Mahalingam764219e2018-09-17 15:34:25 +0530364 void (*hal_rx_wbm_err_info_get)(void *wbm_desc,
365 void *wbm_er_info);
366 void (*hal_rx_dump_mpdu_start_tlv)(void *mpdustart,
367 uint8_t dbg_level);
Debasis Dasc39a68d2019-01-28 17:02:06 +0530368
Akshay Kosigi8eda31c2019-07-10 14:42:42 +0530369 void (*hal_tx_set_pcp_tid_map)(struct hal_soc *hal_soc, uint8_t *map);
370 void (*hal_tx_update_pcp_tid_map)(struct hal_soc *hal_soc, uint8_t pcp,
Debasis Dasc39a68d2019-01-28 17:02:06 +0530371 uint8_t id);
Akshay Kosigi8eda31c2019-07-10 14:42:42 +0530372 void (*hal_tx_set_tidmap_prty)(struct hal_soc *hal_soc, uint8_t prio);
Balamurugan Mahalingamd0159642018-07-11 15:02:29 +0530373};
374
Karunakar Dasineni8fbfeea2016-08-31 14:43:27 -0700375/**
376 * HAL context to be used to access SRNG APIs (currently used by data path
377 * and transport (CE) modules)
378 */
379struct hal_soc {
380 /* HIF handle to access HW registers */
Akshay Kosigi8eda31c2019-07-10 14:42:42 +0530381 struct hif_opaque_softc *hif_handle;
Karunakar Dasineni8fbfeea2016-08-31 14:43:27 -0700382
383 /* QDF device handle */
384 qdf_device_t qdf_dev;
385
386 /* Device base address */
387 void *dev_base_addr;
388
389 /* HAL internal state for all SRNG rings.
390 * TODO: See if this is required
391 */
392 struct hal_srng srng_list[HAL_SRNG_ID_MAX];
393
394 /* Remote pointer memory for HW/FW updates */
395 uint32_t *shadow_rdptr_mem_vaddr;
396 qdf_dma_addr_t shadow_rdptr_mem_paddr;
397
398 /* Shared memory for ring pointer updates from host to FW */
399 uint32_t *shadow_wrptr_mem_vaddr;
400 qdf_dma_addr_t shadow_wrptr_mem_paddr;
Manoj Ekbote4f0c6b12016-10-30 16:01:38 -0700401
402 /* REO blocking resource index */
403 uint8_t reo_res_bitmap;
404 uint8_t index;
Balamurugan Mahalingamd0159642018-07-11 15:02:29 +0530405 uint32_t target_type;
Houston Hoffman5141f9d2017-01-05 10:49:17 -0800406
407 /* shadow register configuration */
408 struct pld_shadow_reg_v2_cfg shadow_config[MAX_SHADOW_REGISTERS];
409 int num_shadow_registers_configured;
Houston Hoffman61dad492017-04-07 17:09:34 -0700410 bool use_register_windowing;
411 uint32_t register_window;
412 qdf_spinlock_t register_access_lock;
Balamurugan Mahalingamd0159642018-07-11 15:02:29 +0530413
414 /* srng table */
415 struct hal_hw_srng_config *hw_srng_table;
416 int32_t *hal_hw_reg_offset;
417 struct hal_hw_txrx_ops *ops;
Karunakar Dasineni8fbfeea2016-08-31 14:43:27 -0700418};
Balamurugan Mahalingam96d2d412018-07-10 10:11:58 +0530419
420void hal_qca6390_attach(struct hal_soc *hal_soc);
421void hal_qca6290_attach(struct hal_soc *hal_soc);
422void hal_qca8074_attach(struct hal_soc *hal_soc);
Akshay Kosigi6a206752019-06-10 23:14:52 +0530423
Akshay Kosigi0bca9fb2019-06-27 15:26:13 +0530424/*
425 * hal_soc_to_dp_hal_roc - API to convert hal_soc to opaque
426 * dp_hal_soc handle type
427 * @hal_soc - hal_soc type
428 *
429 * Return: hal_soc_handle_t type
430 */
Akshay Kosigi6a206752019-06-10 23:14:52 +0530431static inline
432hal_soc_handle_t hal_soc_to_hal_soc_handle(struct hal_soc *hal_soc)
433{
434 return (hal_soc_handle_t)hal_soc;
435}
Akshay Kosigi0bca9fb2019-06-27 15:26:13 +0530436
437/*
438 * hal_srng_to_hal_ring_handle - API to convert hal_srng to opaque
439 * dp_hal_ring handle type
440 * @hal_srng - hal_srng type
441 *
442 * Return: hal_ring_handle_t type
443 */
444static inline
445hal_ring_handle_t hal_srng_to_hal_ring_handle(struct hal_srng *hal_srng)
446{
447 return (hal_ring_handle_t)hal_srng;
448}
Akshay Kosigi8eda31c2019-07-10 14:42:42 +0530449
450/*
451 * hal_ring_handle_to_hal_srng - API to convert dp_hal_ring to hal_srng handle
452 * @hal_ring - hal_ring_handle_t type
453 *
454 * Return: hal_srng pointer type
455 */
456static inline
457struct hal_srng *hal_ring_handle_to_hal_srng(hal_ring_handle_t hal_ring)
458{
459 return (struct hal_srng *)hal_ring;
460}
Karunakar Dasineni8fbfeea2016-08-31 14:43:27 -0700461#endif /* _HAL_INTERNAL_H_ */