xref: /wlan-driver/qca-wifi-host-cmn/hal/wifi3.0/qcn9224/v2/hal_9224v2.c (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for any
6*5113495bSYour Name  * purpose with or without fee is hereby granted, provided that the above
7*5113495bSYour Name  * copyright notice and this permission notice appear in all copies.
8*5113495bSYour Name  *
9*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10*5113495bSYour Name  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11*5113495bSYour Name  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12*5113495bSYour Name  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13*5113495bSYour Name  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14*5113495bSYour Name  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15*5113495bSYour Name  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16*5113495bSYour Name  */
17*5113495bSYour Name #include "hal_9224.h"
18*5113495bSYour Name 
19*5113495bSYour Name struct hal_hw_srng_config hw_srng_table_9224v2[] = {
20*5113495bSYour Name 	/* TODO: max_rings can populated by querying HW capabilities */
21*5113495bSYour Name 	{ /* REO_DST */
22*5113495bSYour Name 		.start_ring_id = HAL_SRNG_REO2SW1,
23*5113495bSYour Name 		.max_rings = 8,
24*5113495bSYour Name 		.entry_size = sizeof(struct reo_destination_ring) >> 2,
25*5113495bSYour Name 		.lmac_ring = FALSE,
26*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
27*5113495bSYour Name 		.reg_start = {
28*5113495bSYour Name 			HWIO_REO_R0_REO2SW1_RING_BASE_LSB_ADDR(
29*5113495bSYour Name 				REO_REG_REG_BASE),
30*5113495bSYour Name 			HWIO_REO_R2_REO2SW1_RING_HP_ADDR(
31*5113495bSYour Name 				REO_REG_REG_BASE)
32*5113495bSYour Name 		},
33*5113495bSYour Name 		.reg_size = {
34*5113495bSYour Name 			HWIO_REO_R0_REO2SW2_RING_BASE_LSB_ADDR(0) -
35*5113495bSYour Name 				HWIO_REO_R0_REO2SW1_RING_BASE_LSB_ADDR(0),
36*5113495bSYour Name 			HWIO_REO_R2_REO2SW2_RING_HP_ADDR(0) -
37*5113495bSYour Name 				HWIO_REO_R2_REO2SW1_RING_HP_ADDR(0),
38*5113495bSYour Name 		},
39*5113495bSYour Name 		.max_size =
40*5113495bSYour Name 			HWIO_REO_R0_REO2SW1_RING_BASE_MSB_RING_SIZE_BMSK >>
41*5113495bSYour Name 			HWIO_REO_R0_REO2SW1_RING_BASE_MSB_RING_SIZE_SHFT,
42*5113495bSYour Name 	},
43*5113495bSYour Name 	{ /* REO_EXCEPTION */
44*5113495bSYour Name 		/* Designating REO2SW0 ring as exception ring. This ring is
45*5113495bSYour Name 		 * similar to other REO2SW rings though it is named as REO2SW0.
46*5113495bSYour Name 		 * Any of theREO2SW rings can be used as exception ring.
47*5113495bSYour Name 		 */
48*5113495bSYour Name 		.start_ring_id = HAL_SRNG_REO2SW0,
49*5113495bSYour Name 		.max_rings = 1,
50*5113495bSYour Name 		.entry_size = sizeof(struct reo_destination_ring) >> 2,
51*5113495bSYour Name 		.lmac_ring = FALSE,
52*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
53*5113495bSYour Name 		.reg_start = {
54*5113495bSYour Name 			HWIO_REO_R0_REO2SW0_RING_BASE_LSB_ADDR(
55*5113495bSYour Name 				REO_REG_REG_BASE),
56*5113495bSYour Name 			HWIO_REO_R2_REO2SW0_RING_HP_ADDR(
57*5113495bSYour Name 				REO_REG_REG_BASE)
58*5113495bSYour Name 		},
59*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
60*5113495bSYour Name 		 * type are supported
61*5113495bSYour Name 		 */
62*5113495bSYour Name 		.reg_size = {},
63*5113495bSYour Name 		.max_size =
64*5113495bSYour Name 			HWIO_REO_R0_REO2SW0_RING_BASE_MSB_RING_SIZE_BMSK >>
65*5113495bSYour Name 			HWIO_REO_R0_REO2SW0_RING_BASE_MSB_RING_SIZE_SHFT,
66*5113495bSYour Name 	},
67*5113495bSYour Name 	{ /* REO_REINJECT */
68*5113495bSYour Name 		.start_ring_id = HAL_SRNG_SW2REO,
69*5113495bSYour Name 		.max_rings = 4,
70*5113495bSYour Name 		.entry_size = sizeof(struct reo_entrance_ring) >> 2,
71*5113495bSYour Name 		.lmac_ring = FALSE,
72*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
73*5113495bSYour Name 		.reg_start = {
74*5113495bSYour Name 			HWIO_REO_R0_SW2REO_RING_BASE_LSB_ADDR(
75*5113495bSYour Name 				REO_REG_REG_BASE),
76*5113495bSYour Name 			HWIO_REO_R2_SW2REO_RING_HP_ADDR(
77*5113495bSYour Name 				REO_REG_REG_BASE)
78*5113495bSYour Name 		},
79*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
80*5113495bSYour Name 		 * type are supported
81*5113495bSYour Name 		 */
82*5113495bSYour Name 		.reg_size = {
83*5113495bSYour Name 			HWIO_REO_R0_SW2REO1_RING_BASE_LSB_ADDR(0) -
84*5113495bSYour Name 				HWIO_REO_R0_SW2REO_RING_BASE_LSB_ADDR(0),
85*5113495bSYour Name 			HWIO_REO_R2_SW2REO1_RING_HP_ADDR(0) -
86*5113495bSYour Name 				HWIO_REO_R2_SW2REO_RING_HP_ADDR(0)
87*5113495bSYour Name 		},
88*5113495bSYour Name 		.max_size = HWIO_REO_R0_SW2REO_RING_BASE_MSB_RING_SIZE_BMSK >>
89*5113495bSYour Name 				HWIO_REO_R0_SW2REO_RING_BASE_MSB_RING_SIZE_SHFT,
90*5113495bSYour Name 	},
91*5113495bSYour Name 	{ /* REO_CMD */
92*5113495bSYour Name 		.start_ring_id = HAL_SRNG_REO_CMD,
93*5113495bSYour Name 		.max_rings = 1,
94*5113495bSYour Name 		.entry_size = (sizeof(struct tlv_32_hdr) +
95*5113495bSYour Name 			sizeof(struct reo_get_queue_stats)) >> 2,
96*5113495bSYour Name 		.lmac_ring = FALSE,
97*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
98*5113495bSYour Name 		.reg_start = {
99*5113495bSYour Name 			HWIO_REO_R0_REO_CMD_RING_BASE_LSB_ADDR(
100*5113495bSYour Name 				REO_REG_REG_BASE),
101*5113495bSYour Name 			HWIO_REO_R2_REO_CMD_RING_HP_ADDR(
102*5113495bSYour Name 				REO_REG_REG_BASE),
103*5113495bSYour Name 		},
104*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
105*5113495bSYour Name 		 * type are supported
106*5113495bSYour Name 		 */
107*5113495bSYour Name 		.reg_size = {},
108*5113495bSYour Name 		.max_size = HWIO_REO_R0_REO_CMD_RING_BASE_MSB_RING_SIZE_BMSK >>
109*5113495bSYour Name 			HWIO_REO_R0_REO_CMD_RING_BASE_MSB_RING_SIZE_SHFT,
110*5113495bSYour Name 	},
111*5113495bSYour Name 	{ /* REO_STATUS */
112*5113495bSYour Name 		.start_ring_id = HAL_SRNG_REO_STATUS,
113*5113495bSYour Name 		.max_rings = 1,
114*5113495bSYour Name 		.entry_size = (sizeof(struct tlv_32_hdr) +
115*5113495bSYour Name 			sizeof(struct reo_get_queue_stats_status)) >> 2,
116*5113495bSYour Name 		.lmac_ring = FALSE,
117*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
118*5113495bSYour Name 		.reg_start = {
119*5113495bSYour Name 			HWIO_REO_R0_REO_STATUS_RING_BASE_LSB_ADDR(
120*5113495bSYour Name 				REO_REG_REG_BASE),
121*5113495bSYour Name 			HWIO_REO_R2_REO_STATUS_RING_HP_ADDR(
122*5113495bSYour Name 				REO_REG_REG_BASE),
123*5113495bSYour Name 		},
124*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
125*5113495bSYour Name 		 * type are supported
126*5113495bSYour Name 		 */
127*5113495bSYour Name 		.reg_size = {},
128*5113495bSYour Name 		.max_size =
129*5113495bSYour Name 		HWIO_REO_R0_REO_STATUS_RING_BASE_MSB_RING_SIZE_BMSK >>
130*5113495bSYour Name 			HWIO_REO_R0_REO_STATUS_RING_BASE_MSB_RING_SIZE_SHFT,
131*5113495bSYour Name 	},
132*5113495bSYour Name 	{ /* TCL_DATA */
133*5113495bSYour Name 		.start_ring_id = HAL_SRNG_SW2TCL1,
134*5113495bSYour Name 		.max_rings = 6,
135*5113495bSYour Name 		.entry_size = sizeof(struct tcl_data_cmd) >> 2,
136*5113495bSYour Name 		.lmac_ring = FALSE,
137*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
138*5113495bSYour Name 		.reg_start = {
139*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL1_RING_BASE_LSB_ADDR(
140*5113495bSYour Name 				MAC_TCL_REG_REG_BASE),
141*5113495bSYour Name 			HWIO_TCL_R2_SW2TCL1_RING_HP_ADDR(
142*5113495bSYour Name 				MAC_TCL_REG_REG_BASE),
143*5113495bSYour Name 		},
144*5113495bSYour Name 		.reg_size = {
145*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL2_RING_BASE_LSB_ADDR(0) -
146*5113495bSYour Name 				HWIO_TCL_R0_SW2TCL1_RING_BASE_LSB_ADDR(0),
147*5113495bSYour Name 			HWIO_TCL_R2_SW2TCL2_RING_HP_ADDR(0) -
148*5113495bSYour Name 				HWIO_TCL_R2_SW2TCL1_RING_HP_ADDR(0),
149*5113495bSYour Name 		},
150*5113495bSYour Name 		.max_size =
151*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL1_RING_BASE_MSB_RING_SIZE_BMSK >>
152*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL1_RING_BASE_MSB_RING_SIZE_SHFT,
153*5113495bSYour Name 	},
154*5113495bSYour Name 	{ /* TCL_CMD/CREDIT */
155*5113495bSYour Name 	  /* qca8074v2 and qcn9224 uses this ring for data commands */
156*5113495bSYour Name 		.start_ring_id = HAL_SRNG_SW2TCL_CMD,
157*5113495bSYour Name 		.max_rings = 1,
158*5113495bSYour Name 		.entry_size = sizeof(struct tcl_data_cmd) >> 2,
159*5113495bSYour Name 		.lmac_ring =  FALSE,
160*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
161*5113495bSYour Name 		.reg_start = {
162*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL_CREDIT_RING_BASE_LSB_ADDR(
163*5113495bSYour Name 				MAC_TCL_REG_REG_BASE),
164*5113495bSYour Name 			HWIO_TCL_R2_SW2TCL_CREDIT_RING_HP_ADDR(
165*5113495bSYour Name 				MAC_TCL_REG_REG_BASE),
166*5113495bSYour Name 		},
167*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
168*5113495bSYour Name 		 * type are supported
169*5113495bSYour Name 		 */
170*5113495bSYour Name 		.reg_size = {},
171*5113495bSYour Name 		.max_size =
172*5113495bSYour Name 		HWIO_TCL_R0_SW2TCL_CREDIT_RING_BASE_MSB_RING_SIZE_BMSK >>
173*5113495bSYour Name 		HWIO_TCL_R0_SW2TCL_CREDIT_RING_BASE_MSB_RING_SIZE_SHFT,
174*5113495bSYour Name 	},
175*5113495bSYour Name 	{ /* TCL_STATUS */
176*5113495bSYour Name 		.start_ring_id = HAL_SRNG_TCL_STATUS,
177*5113495bSYour Name 		.max_rings = 1,
178*5113495bSYour Name 		.entry_size = (sizeof(struct tlv_32_hdr) +
179*5113495bSYour Name 			sizeof(struct tcl_status_ring)) >> 2,
180*5113495bSYour Name 		.lmac_ring = FALSE,
181*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
182*5113495bSYour Name 		.reg_start = {
183*5113495bSYour Name 			HWIO_TCL_R0_TCL_STATUS1_RING_BASE_LSB_ADDR(
184*5113495bSYour Name 				MAC_TCL_REG_REG_BASE),
185*5113495bSYour Name 			HWIO_TCL_R2_TCL_STATUS1_RING_HP_ADDR(
186*5113495bSYour Name 				MAC_TCL_REG_REG_BASE),
187*5113495bSYour Name 		},
188*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
189*5113495bSYour Name 		 * type are supported
190*5113495bSYour Name 		 */
191*5113495bSYour Name 		.reg_size = {},
192*5113495bSYour Name 		.max_size =
193*5113495bSYour Name 			HWIO_TCL_R0_TCL_STATUS1_RING_BASE_MSB_RING_SIZE_BMSK >>
194*5113495bSYour Name 			HWIO_TCL_R0_TCL_STATUS1_RING_BASE_MSB_RING_SIZE_SHFT,
195*5113495bSYour Name 	},
196*5113495bSYour Name 	{ /* CE_SRC */
197*5113495bSYour Name 		.start_ring_id = HAL_SRNG_CE_0_SRC,
198*5113495bSYour Name 		.max_rings = 16,
199*5113495bSYour Name 		.entry_size = sizeof(struct ce_src_desc) >> 2,
200*5113495bSYour Name 		.lmac_ring = FALSE,
201*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
202*5113495bSYour Name 		.reg_start = {
203*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_SRC_R0_SRC_RING_BASE_LSB_ADDR(
204*5113495bSYour Name 				WFSS_CE_0_CHANNEL_SRC_REG_REG_BASE),
205*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_SRC_R2_SRC_RING_HP_ADDR(
206*5113495bSYour Name 				WFSS_CE_0_CHANNEL_SRC_REG_REG_BASE),
207*5113495bSYour Name 		},
208*5113495bSYour Name 		.reg_size = {
209*5113495bSYour Name 		WFSS_CE_1_CHANNEL_SRC_REG_REG_BASE -
210*5113495bSYour Name 		WFSS_CE_0_CHANNEL_SRC_REG_REG_BASE,
211*5113495bSYour Name 		WFSS_CE_1_CHANNEL_SRC_REG_REG_BASE -
212*5113495bSYour Name 		WFSS_CE_0_CHANNEL_SRC_REG_REG_BASE,
213*5113495bSYour Name 		},
214*5113495bSYour Name 		.max_size =
215*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_SRC_R0_SRC_RING_BASE_MSB_RING_SIZE_BMSK >>
216*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_SRC_R0_SRC_RING_BASE_MSB_RING_SIZE_SHFT,
217*5113495bSYour Name 	},
218*5113495bSYour Name 	{ /* CE_DST */
219*5113495bSYour Name 		.start_ring_id = HAL_SRNG_CE_0_DST,
220*5113495bSYour Name 		.max_rings = 16,
221*5113495bSYour Name 		.entry_size = 8 >> 2,
222*5113495bSYour Name 		/*TODO: entry_size above should actually be
223*5113495bSYour Name 		 * sizeof(struct ce_dst_desc) >> 2, but couldn't find definition
224*5113495bSYour Name 		 * of struct ce_dst_desc in HW header files
225*5113495bSYour Name 		 */
226*5113495bSYour Name 		.lmac_ring = FALSE,
227*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
228*5113495bSYour Name 		.reg_start = {
229*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_DEST_RING_BASE_LSB_ADDR(
230*5113495bSYour Name 		WFSS_CE_0_CHANNEL_DST_REG_REG_BASE),
231*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R2_DEST_RING_HP_ADDR(
232*5113495bSYour Name 		WFSS_CE_0_CHANNEL_DST_REG_REG_BASE),
233*5113495bSYour Name 		},
234*5113495bSYour Name 		.reg_size = {
235*5113495bSYour Name 		WFSS_CE_1_CHANNEL_DST_REG_REG_BASE -
236*5113495bSYour Name 		WFSS_CE_0_CHANNEL_DST_REG_REG_BASE,
237*5113495bSYour Name 		WFSS_CE_1_CHANNEL_DST_REG_REG_BASE -
238*5113495bSYour Name 		WFSS_CE_0_CHANNEL_DST_REG_REG_BASE,
239*5113495bSYour Name 		},
240*5113495bSYour Name 		.max_size =
241*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_DEST_RING_BASE_MSB_RING_SIZE_BMSK >>
242*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_DEST_RING_BASE_MSB_RING_SIZE_SHFT,
243*5113495bSYour Name 	},
244*5113495bSYour Name 	{ /* CE_DST_STATUS */
245*5113495bSYour Name 		.start_ring_id = HAL_SRNG_CE_0_DST_STATUS,
246*5113495bSYour Name 		.max_rings = 16,
247*5113495bSYour Name 		.entry_size = sizeof(struct ce_stat_desc) >> 2,
248*5113495bSYour Name 		.lmac_ring = FALSE,
249*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
250*5113495bSYour Name 		.reg_start = {
251*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_STATUS_RING_BASE_LSB_ADDR(
252*5113495bSYour Name 				WFSS_CE_0_CHANNEL_DST_REG_REG_BASE),
253*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R2_STATUS_RING_HP_ADDR(
254*5113495bSYour Name 				WFSS_CE_0_CHANNEL_DST_REG_REG_BASE),
255*5113495bSYour Name 		},
256*5113495bSYour Name 		/* TODO: check destination status ring registers */
257*5113495bSYour Name 		.reg_size = {
258*5113495bSYour Name 		WFSS_CE_1_CHANNEL_DST_REG_REG_BASE -
259*5113495bSYour Name 		WFSS_CE_0_CHANNEL_DST_REG_REG_BASE,
260*5113495bSYour Name 		WFSS_CE_1_CHANNEL_DST_REG_REG_BASE -
261*5113495bSYour Name 		WFSS_CE_0_CHANNEL_DST_REG_REG_BASE,
262*5113495bSYour Name 		},
263*5113495bSYour Name 		.max_size =
264*5113495bSYour Name 	HWIO_WFSS_CE_CHANNEL_DST_R0_STATUS_RING_BASE_MSB_RING_SIZE_BMSK >>
265*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_STATUS_RING_BASE_MSB_RING_SIZE_SHFT,
266*5113495bSYour Name 	},
267*5113495bSYour Name 	{ /* WBM_IDLE_LINK */
268*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WBM_IDLE_LINK,
269*5113495bSYour Name 		.max_rings = 1,
270*5113495bSYour Name 		.entry_size = sizeof(struct wbm_link_descriptor_ring) >> 2,
271*5113495bSYour Name 		.lmac_ring = FALSE,
272*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
273*5113495bSYour Name 		.reg_start = {
274*5113495bSYour Name 		HWIO_WBM_R0_WBM_IDLE_LINK_RING_BASE_LSB_ADDR(WBM_REG_REG_BASE),
275*5113495bSYour Name 		HWIO_WBM_R2_WBM_IDLE_LINK_RING_HP_ADDR(WBM_REG_REG_BASE),
276*5113495bSYour Name 		},
277*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
278*5113495bSYour Name 		 * type are supported
279*5113495bSYour Name 		 */
280*5113495bSYour Name 		.reg_size = {},
281*5113495bSYour Name 		.max_size =
282*5113495bSYour Name 		HWIO_WBM_R0_WBM_IDLE_LINK_RING_BASE_MSB_RING_SIZE_BMSK >>
283*5113495bSYour Name 		HWIO_WBM_R0_WBM_IDLE_LINK_RING_BASE_MSB_RING_SIZE_SHFT,
284*5113495bSYour Name 	},
285*5113495bSYour Name 	{ /* SW2WBM_RELEASE */
286*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WBM_SW_RELEASE,
287*5113495bSYour Name 		.max_rings = 2,
288*5113495bSYour Name 		.entry_size = sizeof(struct wbm_release_ring) >> 2,
289*5113495bSYour Name 		.lmac_ring = FALSE,
290*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
291*5113495bSYour Name 		.reg_start = {
292*5113495bSYour Name 		HWIO_WBM_R0_SW_RELEASE_RING_BASE_LSB_ADDR(WBM_REG_REG_BASE),
293*5113495bSYour Name 		HWIO_WBM_R2_SW_RELEASE_RING_HP_ADDR(WBM_REG_REG_BASE),
294*5113495bSYour Name 		},
295*5113495bSYour Name 		.reg_size = {
296*5113495bSYour Name 		HWIO_WBM_R0_SW1_RELEASE_RING_BASE_LSB_ADDR(WBM_REG_REG_BASE) -
297*5113495bSYour Name 		HWIO_WBM_R0_SW_RELEASE_RING_BASE_LSB_ADDR(WBM_REG_REG_BASE),
298*5113495bSYour Name 		HWIO_WBM_R2_SW1_RELEASE_RING_HP_ADDR(WBM_REG_REG_BASE) -
299*5113495bSYour Name 		HWIO_WBM_R2_SW_RELEASE_RING_HP_ADDR(WBM_REG_REG_BASE)
300*5113495bSYour Name 		},
301*5113495bSYour Name 		.max_size =
302*5113495bSYour Name 		HWIO_WBM_R0_SW_RELEASE_RING_BASE_MSB_RING_SIZE_BMSK >>
303*5113495bSYour Name 		HWIO_WBM_R0_SW_RELEASE_RING_BASE_MSB_RING_SIZE_SHFT,
304*5113495bSYour Name 	},
305*5113495bSYour Name 	{ /* WBM2SW_RELEASE */
306*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WBM2SW0_RELEASE,
307*5113495bSYour Name 		.max_rings = 8,
308*5113495bSYour Name 		.entry_size = sizeof(struct wbm_release_ring) >> 2,
309*5113495bSYour Name 		.lmac_ring = FALSE,
310*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
311*5113495bSYour Name 		.reg_start = {
312*5113495bSYour Name 		HWIO_WBM_R0_WBM2SW0_RELEASE_RING_BASE_LSB_ADDR(
313*5113495bSYour Name 				WBM_REG_REG_BASE),
314*5113495bSYour Name 		HWIO_WBM_R2_WBM2SW0_RELEASE_RING_HP_ADDR(
315*5113495bSYour Name 				WBM_REG_REG_BASE),
316*5113495bSYour Name 		},
317*5113495bSYour Name 		.reg_size = {
318*5113495bSYour Name 		HWIO_WBM_R0_WBM2SW1_RELEASE_RING_BASE_LSB_ADDR(
319*5113495bSYour Name 				WBM_REG_REG_BASE) -
320*5113495bSYour Name 		HWIO_WBM_R0_WBM2SW0_RELEASE_RING_BASE_LSB_ADDR(
321*5113495bSYour Name 				WBM_REG_REG_BASE),
322*5113495bSYour Name 		HWIO_WBM_R2_WBM2SW1_RELEASE_RING_HP_ADDR(
323*5113495bSYour Name 				WBM_REG_REG_BASE) -
324*5113495bSYour Name 		HWIO_WBM_R2_WBM2SW0_RELEASE_RING_HP_ADDR(
325*5113495bSYour Name 				WBM_REG_REG_BASE),
326*5113495bSYour Name 		},
327*5113495bSYour Name 		.max_size =
328*5113495bSYour Name 		HWIO_WBM_R0_WBM2SW0_RELEASE_RING_BASE_MSB_RING_SIZE_BMSK >>
329*5113495bSYour Name 		HWIO_WBM_R0_WBM2SW0_RELEASE_RING_BASE_MSB_RING_SIZE_SHFT,
330*5113495bSYour Name 	},
331*5113495bSYour Name 	{ /* RXDMA_BUF */
332*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_SW2RXDMA0_BUF0,
333*5113495bSYour Name #ifdef IPA_OFFLOAD
334*5113495bSYour Name #ifdef IPA_WDI3_VLAN_SUPPORT
335*5113495bSYour Name 		.max_rings = 4,
336*5113495bSYour Name #else
337*5113495bSYour Name 		.max_rings = 3,
338*5113495bSYour Name #endif
339*5113495bSYour Name #else
340*5113495bSYour Name 		.max_rings = 3,
341*5113495bSYour Name #endif
342*5113495bSYour Name 		.entry_size = sizeof(struct wbm_buffer_ring) >> 2,
343*5113495bSYour Name 		.lmac_ring = TRUE,
344*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
345*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
346*5113495bSYour Name 		 * from host
347*5113495bSYour Name 		 */
348*5113495bSYour Name 		.reg_start = {},
349*5113495bSYour Name 		.reg_size = {},
350*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
351*5113495bSYour Name 	},
352*5113495bSYour Name 	{ /* RXDMA_DST */
353*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_RXDMA2SW0,
354*5113495bSYour Name 		.max_rings = 0,
355*5113495bSYour Name 		.entry_size = 0/*sizeof(struct reo_entrance_ring) >> 2*/,
356*5113495bSYour Name 		.lmac_ring =  TRUE,
357*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
358*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
359*5113495bSYour Name 		 * from host
360*5113495bSYour Name 		 */
361*5113495bSYour Name 		.reg_start = {},
362*5113495bSYour Name 		.reg_size = {},
363*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
364*5113495bSYour Name 	},
365*5113495bSYour Name #ifdef WLAN_PKT_CAPTURE_RX_2_0
366*5113495bSYour Name 	{ /* RXDMA_MONITOR_BUF */
367*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_SW2RXDMA2_BUF,
368*5113495bSYour Name 		.max_rings = 1,
369*5113495bSYour Name 		.entry_size = sizeof(struct mon_ingress_ring) >> 2,
370*5113495bSYour Name 		.lmac_ring = TRUE,
371*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
372*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
373*5113495bSYour Name 		 * from host
374*5113495bSYour Name 		 */
375*5113495bSYour Name 		.reg_start = {},
376*5113495bSYour Name 		.reg_size = {},
377*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE_BE,
378*5113495bSYour Name 	},
379*5113495bSYour Name #else
380*5113495bSYour Name 	{},
381*5113495bSYour Name #endif
382*5113495bSYour Name 	{ /* RXDMA_MONITOR_STATUS */
383*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_SW2RXDMA1_STATBUF,
384*5113495bSYour Name 		.max_rings = 0,
385*5113495bSYour Name 		.entry_size = sizeof(struct wbm_buffer_ring) >> 2,
386*5113495bSYour Name 		.lmac_ring = TRUE,
387*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
388*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
389*5113495bSYour Name 		 * from host
390*5113495bSYour Name 		 */
391*5113495bSYour Name 		.reg_start = {},
392*5113495bSYour Name 		.reg_size = {},
393*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
394*5113495bSYour Name 	},
395*5113495bSYour Name #ifdef WLAN_PKT_CAPTURE_RX_2_0
396*5113495bSYour Name 	{ /* RXDMA_MONITOR_DST */
397*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_RXMON2SW0,
398*5113495bSYour Name 		.max_rings = 2,
399*5113495bSYour Name 		.entry_size = sizeof(struct mon_destination_ring) >> 2,
400*5113495bSYour Name 		.lmac_ring = TRUE,
401*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
402*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
403*5113495bSYour Name 		 * from host
404*5113495bSYour Name 		 */
405*5113495bSYour Name 		.reg_start = {},
406*5113495bSYour Name 		.reg_size = {},
407*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE_BE,
408*5113495bSYour Name 	},
409*5113495bSYour Name #else
410*5113495bSYour Name 	{},
411*5113495bSYour Name #endif
412*5113495bSYour Name 	{ /* RXDMA_MONITOR_DESC */
413*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_SW2RXDMA1_DESC,
414*5113495bSYour Name 		.max_rings = 0,
415*5113495bSYour Name 		.entry_size = 0/*sizeof(struct sw_monitor_ring) >> 2*/,
416*5113495bSYour Name 		.lmac_ring = TRUE,
417*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
418*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
419*5113495bSYour Name 		 * from host
420*5113495bSYour Name 		 */
421*5113495bSYour Name 		.reg_start = {},
422*5113495bSYour Name 		.reg_size = {},
423*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE_BE,
424*5113495bSYour Name 	},
425*5113495bSYour Name 
426*5113495bSYour Name 	{ /* DIR_BUF_RX_DMA_SRC */
427*5113495bSYour Name 		.start_ring_id = HAL_SRNG_DIR_BUF_RX_SRC_DMA_RING,
428*5113495bSYour Name 		/* one ring for spectral, one ring for cfr and
429*5113495bSYour Name 		 * another one ring for txbf cv upload
430*5113495bSYour Name 		 */
431*5113495bSYour Name 		.max_rings = 3,
432*5113495bSYour Name 		.entry_size = 2,
433*5113495bSYour Name 		.lmac_ring = TRUE,
434*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
435*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
436*5113495bSYour Name 		 * from host
437*5113495bSYour Name 		 */
438*5113495bSYour Name 		.reg_start = {},
439*5113495bSYour Name 		.reg_size = {},
440*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
441*5113495bSYour Name 	},
442*5113495bSYour Name #ifdef WLAN_FEATURE_CIF_CFR
443*5113495bSYour Name 	{ /* WIFI_POS_SRC */
444*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WIFI_POS_SRC_DMA_RING,
445*5113495bSYour Name 		.max_rings = 1,
446*5113495bSYour Name 		.entry_size = sizeof(wmi_oem_dma_buf_release_entry)  >> 2,
447*5113495bSYour Name 		.lmac_ring = TRUE,
448*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
449*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
450*5113495bSYour Name 		 * from host
451*5113495bSYour Name 		 */
452*5113495bSYour Name 		.reg_start = {},
453*5113495bSYour Name 		.reg_size = {},
454*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE_BE,
455*5113495bSYour Name 	},
456*5113495bSYour Name #endif
457*5113495bSYour Name 	{ /* REO2PPE */
458*5113495bSYour Name 		.start_ring_id = HAL_SRNG_REO2PPE,
459*5113495bSYour Name 		.max_rings = 1,
460*5113495bSYour Name 		.entry_size = sizeof(struct reo_destination_ring) >> 2,
461*5113495bSYour Name 		.lmac_ring = FALSE,
462*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
463*5113495bSYour Name 		.reg_start = {
464*5113495bSYour Name 			HWIO_REO_R0_REO2PPE_RING_BASE_LSB_ADDR(
465*5113495bSYour Name 				REO_REG_REG_BASE),
466*5113495bSYour Name 			HWIO_REO_R2_REO2PPE_RING_HP_ADDR(
467*5113495bSYour Name 				REO_REG_REG_BASE),
468*5113495bSYour Name 		},
469*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
470*5113495bSYour Name 		 * type are supported
471*5113495bSYour Name 		 */
472*5113495bSYour Name 		.reg_size = {},
473*5113495bSYour Name 		.max_size =
474*5113495bSYour Name 		HWIO_REO_R0_REO2PPE_RING_BASE_LSB_RING_BASE_ADDR_LSB_BMSK >>
475*5113495bSYour Name 		HWIO_REO_R0_REO2PPE_RING_BASE_LSB_RING_BASE_ADDR_LSB_SHFT,
476*5113495bSYour Name 	},
477*5113495bSYour Name 	{ /* PPE2TCL */
478*5113495bSYour Name 		.start_ring_id = HAL_SRNG_PPE2TCL1,
479*5113495bSYour Name 		.max_rings = 1,
480*5113495bSYour Name 		.entry_size = sizeof(struct tcl_entrance_from_ppe_ring) >> 2,
481*5113495bSYour Name 		.lmac_ring = FALSE,
482*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
483*5113495bSYour Name 		.reg_start = {
484*5113495bSYour Name 			HWIO_TCL_R0_PPE2TCL1_RING_BASE_LSB_ADDR(
485*5113495bSYour Name 				MAC_TCL_REG_REG_BASE),
486*5113495bSYour Name 			HWIO_TCL_R2_PPE2TCL1_RING_HP_ADDR(
487*5113495bSYour Name 				MAC_TCL_REG_REG_BASE),
488*5113495bSYour Name 		},
489*5113495bSYour Name 		.reg_size = {},
490*5113495bSYour Name 		.max_size =
491*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL1_RING_BASE_MSB_RING_SIZE_BMSK >>
492*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL1_RING_BASE_MSB_RING_SIZE_SHFT,
493*5113495bSYour Name 	},
494*5113495bSYour Name 	{ /* PPE_RELEASE */
495*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WBM_PPE_RELEASE,
496*5113495bSYour Name 		.max_rings = 1,
497*5113495bSYour Name 		.entry_size = sizeof(struct wbm_release_ring) >> 2,
498*5113495bSYour Name 		.lmac_ring = FALSE,
499*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
500*5113495bSYour Name 		.reg_start = {
501*5113495bSYour Name 		HWIO_WBM_R0_PPE_RELEASE_RING_BASE_LSB_ADDR(WBM_REG_REG_BASE),
502*5113495bSYour Name 		HWIO_WBM_R2_PPE_RELEASE_RING_HP_ADDR(WBM_REG_REG_BASE),
503*5113495bSYour Name 		},
504*5113495bSYour Name 		.reg_size = {},
505*5113495bSYour Name 		.max_size =
506*5113495bSYour Name 		HWIO_WBM_R0_PPE_RELEASE_RING_BASE_MSB_RING_SIZE_BMSK >>
507*5113495bSYour Name 		HWIO_WBM_R0_PPE_RELEASE_RING_BASE_MSB_RING_SIZE_SHFT,
508*5113495bSYour Name 	},
509*5113495bSYour Name #ifdef WLAN_PKT_CAPTURE_TX_2_0
510*5113495bSYour Name 	{ /* TX_MONITOR_BUF */
511*5113495bSYour Name 		.start_ring_id = HAL_SRNG_SW2TXMON_BUF0,
512*5113495bSYour Name 		.max_rings = 1,
513*5113495bSYour Name 		.entry_size = sizeof(struct mon_ingress_ring) >> 2,
514*5113495bSYour Name 		.lmac_ring = TRUE,
515*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
516*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
517*5113495bSYour Name 		 * from host
518*5113495bSYour Name 		 */
519*5113495bSYour Name 		.reg_start = {},
520*5113495bSYour Name 		.reg_size = {},
521*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE_BE,
522*5113495bSYour Name 	},
523*5113495bSYour Name 	{ /* TX_MONITOR_DST */
524*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_TXMON2SW0,
525*5113495bSYour Name 		.max_rings = 2,
526*5113495bSYour Name 		.entry_size = sizeof(struct mon_destination_ring) >> 2,
527*5113495bSYour Name 		.lmac_ring = TRUE,
528*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
529*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
530*5113495bSYour Name 		 * from host
531*5113495bSYour Name 		 */
532*5113495bSYour Name 		.reg_start = {},
533*5113495bSYour Name 		.reg_size = {},
534*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE_BE,
535*5113495bSYour Name 	},
536*5113495bSYour Name #else
537*5113495bSYour Name 	{},
538*5113495bSYour Name 	{},
539*5113495bSYour Name #endif
540*5113495bSYour Name 	{ /* SW2RXDMA */
541*5113495bSYour Name 		.start_ring_id = HAL_SRNG_SW2RXDMA_BUF0,
542*5113495bSYour Name 		.max_rings = 3,
543*5113495bSYour Name 		.entry_size = sizeof(struct reo_entrance_ring) >> 2,
544*5113495bSYour Name 		.lmac_ring =  TRUE,
545*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
546*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
547*5113495bSYour Name 		 * from host
548*5113495bSYour Name 		 */
549*5113495bSYour Name 		.reg_start = {},
550*5113495bSYour Name 		.reg_size = {},
551*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE_BE,
552*5113495bSYour Name 		.dmac_cmn_ring = TRUE,
553*5113495bSYour Name 	},
554*5113495bSYour Name 	{ /* SW2RXDMA_LINK_RELEASE */ 0},
555*5113495bSYour Name };
556*5113495bSYour Name 
557*5113495bSYour Name /**
558*5113495bSYour Name  * hal_reo_config_reo2ppe_dest_info_9224() - Configure reo2ppe dest info
559*5113495bSYour Name  * @hal_soc_hdl: HAL SoC Context
560*5113495bSYour Name  *
561*5113495bSYour Name  * Return: None.
562*5113495bSYour Name  */
563*5113495bSYour Name static inline
hal_reo_config_reo2ppe_dest_info_9224(hal_soc_handle_t hal_soc_hdl)564*5113495bSYour Name void hal_reo_config_reo2ppe_dest_info_9224(hal_soc_handle_t hal_soc_hdl)
565*5113495bSYour Name {
566*5113495bSYour Name 	HAL_REG_WRITE((struct hal_soc *)hal_soc_hdl,
567*5113495bSYour Name 		      HWIO_REO_R0_REO2PPE_DEST_INFO_ADDR(REO_REG_REG_BASE),
568*5113495bSYour Name 		      REO2PPE_RULE_FAIL_FB);
569*5113495bSYour Name }
570*5113495bSYour Name 
571*5113495bSYour Name #define PMM_REG_BASE_QCN9224_V2 0xB500FC
572*5113495bSYour Name 
573*5113495bSYour Name /**
574*5113495bSYour Name  * hal_get_tsf2_scratch_reg_qcn9224_v2() - API to read tsf2 scratch register
575*5113495bSYour Name  * @hal_soc_hdl: HAL soc context
576*5113495bSYour Name  * @mac_id: mac id
577*5113495bSYour Name  * @value: Pointer to update tsf2 value
578*5113495bSYour Name  *
579*5113495bSYour Name  * Return: void
580*5113495bSYour Name  */
hal_get_tsf2_scratch_reg_qcn9224_v2(hal_soc_handle_t hal_soc_hdl,uint8_t mac_id,uint64_t * value)581*5113495bSYour Name static void hal_get_tsf2_scratch_reg_qcn9224_v2(hal_soc_handle_t hal_soc_hdl,
582*5113495bSYour Name 						uint8_t mac_id, uint64_t *value)
583*5113495bSYour Name {
584*5113495bSYour Name 	struct hal_soc *soc = (struct hal_soc *)hal_soc_hdl;
585*5113495bSYour Name 	uint32_t offset_lo, offset_hi;
586*5113495bSYour Name 	enum hal_scratch_reg_enum enum_lo, enum_hi;
587*5113495bSYour Name 
588*5113495bSYour Name 	hal_get_tsf_enum(DEFAULT_TSF_ID, mac_id, &enum_lo, &enum_hi);
589*5113495bSYour Name 
590*5113495bSYour Name 	offset_lo = hal_read_pmm_scratch_reg(soc,
591*5113495bSYour Name 					     PMM_REG_BASE_QCN9224_V2,
592*5113495bSYour Name 					     enum_lo);
593*5113495bSYour Name 
594*5113495bSYour Name 	offset_hi = hal_read_pmm_scratch_reg(soc,
595*5113495bSYour Name 					     PMM_REG_BASE_QCN9224_V2,
596*5113495bSYour Name 					     enum_hi);
597*5113495bSYour Name 
598*5113495bSYour Name 	*value = ((uint64_t)(offset_hi) << 32 | offset_lo);
599*5113495bSYour Name }
600*5113495bSYour Name 
601*5113495bSYour Name /**
602*5113495bSYour Name  * hal_get_tqm_scratch_reg_qcn9224_v2() - API to read tqm scratch register
603*5113495bSYour Name  * @hal_soc_hdl: HAL soc context
604*5113495bSYour Name  * @value: Pointer to update tqm value
605*5113495bSYour Name  *
606*5113495bSYour Name  * Return: void
607*5113495bSYour Name  */
hal_get_tqm_scratch_reg_qcn9224_v2(hal_soc_handle_t hal_soc_hdl,uint64_t * value)608*5113495bSYour Name static void hal_get_tqm_scratch_reg_qcn9224_v2(hal_soc_handle_t hal_soc_hdl,
609*5113495bSYour Name 					       uint64_t *value)
610*5113495bSYour Name {
611*5113495bSYour Name 	struct hal_soc *soc = (struct hal_soc *)hal_soc_hdl;
612*5113495bSYour Name 	uint32_t offset_lo, offset_hi;
613*5113495bSYour Name 
614*5113495bSYour Name 	offset_lo = hal_read_pmm_scratch_reg(soc,
615*5113495bSYour Name 					     PMM_REG_BASE_QCN9224_V2,
616*5113495bSYour Name 					     PMM_TQM_CLOCK_OFFSET_LO_US);
617*5113495bSYour Name 
618*5113495bSYour Name 	offset_hi = hal_read_pmm_scratch_reg(soc,
619*5113495bSYour Name 					     PMM_REG_BASE_QCN9224_V2,
620*5113495bSYour Name 					     PMM_TQM_CLOCK_OFFSET_HI_US);
621*5113495bSYour Name 
622*5113495bSYour Name 	*value = ((uint64_t)(offset_hi) << 32 | offset_lo);
623*5113495bSYour Name }
624*5113495bSYour Name 
hal_hw_txrx_ops_override_qcn9224_v2(struct hal_soc * hal_soc)625*5113495bSYour Name static void hal_hw_txrx_ops_override_qcn9224_v2(struct hal_soc *hal_soc)
626*5113495bSYour Name {
627*5113495bSYour Name 	hal_soc->ops->hal_reo_config_reo2ppe_dest_info =
628*5113495bSYour Name 					hal_reo_config_reo2ppe_dest_info_9224;
629*5113495bSYour Name 
630*5113495bSYour Name 	hal_soc->ops->hal_get_tsf2_scratch_reg =
631*5113495bSYour Name 					hal_get_tsf2_scratch_reg_qcn9224_v2;
632*5113495bSYour Name 	hal_soc->ops->hal_get_tqm_scratch_reg =
633*5113495bSYour Name 					hal_get_tqm_scratch_reg_qcn9224_v2;
634*5113495bSYour Name }
635*5113495bSYour Name /**
636*5113495bSYour Name  * hal_qcn9224v2_attach() - Attach 9224v2 target specific hal_soc ops,
637*5113495bSYour Name  *			    offset and srng table
638*5113495bSYour Name  * @hal_soc: HAL SoC context
639*5113495bSYour Name  *
640*5113495bSYour Name  * Return: void
641*5113495bSYour Name  */
hal_qcn9224v2_attach(struct hal_soc * hal_soc)642*5113495bSYour Name void hal_qcn9224v2_attach(struct hal_soc *hal_soc)
643*5113495bSYour Name {
644*5113495bSYour Name 	hal_soc->hw_srng_table = hw_srng_table_9224v2;
645*5113495bSYour Name 
646*5113495bSYour Name 	hal_srng_hw_reg_offset_init_generic(hal_soc);
647*5113495bSYour Name 	hal_srng_hw_reg_offset_init_qcn9224(hal_soc);
648*5113495bSYour Name 
649*5113495bSYour Name 	hal_hw_txrx_default_ops_attach_be(hal_soc);
650*5113495bSYour Name 	hal_hw_txrx_ops_attach_qcn9224(hal_soc);
651*5113495bSYour Name 	if (hal_soc->static_window_map)
652*5113495bSYour Name 		hal_write_window_register(hal_soc);
653*5113495bSYour Name 	hal_soc->dmac_cmn_src_rxbuf_ring = true;
654*5113495bSYour Name 
655*5113495bSYour Name 	hal_hw_txrx_ops_override_qcn9224_v2(hal_soc);
656*5113495bSYour Name }
657