xref: /freebsd/sys/contrib/dev/athk/ath12k/hw.c (revision 5c1def83a4cc2eb3f828600dfd786f8c5788fb7d)
1*5c1def83SBjoern A. Zeeb // SPDX-License-Identifier: BSD-3-Clause-Clear
2*5c1def83SBjoern A. Zeeb /*
3*5c1def83SBjoern A. Zeeb  * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
4*5c1def83SBjoern A. Zeeb  * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
5*5c1def83SBjoern A. Zeeb  */
6*5c1def83SBjoern A. Zeeb 
7*5c1def83SBjoern A. Zeeb #include <linux/types.h>
8*5c1def83SBjoern A. Zeeb #include <linux/bitops.h>
9*5c1def83SBjoern A. Zeeb #include <linux/bitfield.h>
10*5c1def83SBjoern A. Zeeb 
11*5c1def83SBjoern A. Zeeb #include "debug.h"
12*5c1def83SBjoern A. Zeeb #include "core.h"
13*5c1def83SBjoern A. Zeeb #include "ce.h"
14*5c1def83SBjoern A. Zeeb #include "hw.h"
15*5c1def83SBjoern A. Zeeb #include "mhi.h"
16*5c1def83SBjoern A. Zeeb #include "dp_rx.h"
17*5c1def83SBjoern A. Zeeb 
ath12k_hw_qcn9274_mac_from_pdev_id(int pdev_idx)18*5c1def83SBjoern A. Zeeb static u8 ath12k_hw_qcn9274_mac_from_pdev_id(int pdev_idx)
19*5c1def83SBjoern A. Zeeb {
20*5c1def83SBjoern A. Zeeb 	return pdev_idx;
21*5c1def83SBjoern A. Zeeb }
22*5c1def83SBjoern A. Zeeb 
ath12k_hw_mac_id_to_pdev_id_qcn9274(const struct ath12k_hw_params * hw,int mac_id)23*5c1def83SBjoern A. Zeeb static int ath12k_hw_mac_id_to_pdev_id_qcn9274(const struct ath12k_hw_params *hw,
24*5c1def83SBjoern A. Zeeb 					       int mac_id)
25*5c1def83SBjoern A. Zeeb {
26*5c1def83SBjoern A. Zeeb 	return mac_id;
27*5c1def83SBjoern A. Zeeb }
28*5c1def83SBjoern A. Zeeb 
ath12k_hw_mac_id_to_srng_id_qcn9274(const struct ath12k_hw_params * hw,int mac_id)29*5c1def83SBjoern A. Zeeb static int ath12k_hw_mac_id_to_srng_id_qcn9274(const struct ath12k_hw_params *hw,
30*5c1def83SBjoern A. Zeeb 					       int mac_id)
31*5c1def83SBjoern A. Zeeb {
32*5c1def83SBjoern A. Zeeb 	return 0;
33*5c1def83SBjoern A. Zeeb }
34*5c1def83SBjoern A. Zeeb 
ath12k_hw_get_ring_selector_qcn9274(struct sk_buff * skb)35*5c1def83SBjoern A. Zeeb static u8 ath12k_hw_get_ring_selector_qcn9274(struct sk_buff *skb)
36*5c1def83SBjoern A. Zeeb {
37*5c1def83SBjoern A. Zeeb 	return smp_processor_id();
38*5c1def83SBjoern A. Zeeb }
39*5c1def83SBjoern A. Zeeb 
ath12k_dp_srng_is_comp_ring_qcn9274(int ring_num)40*5c1def83SBjoern A. Zeeb static bool ath12k_dp_srng_is_comp_ring_qcn9274(int ring_num)
41*5c1def83SBjoern A. Zeeb {
42*5c1def83SBjoern A. Zeeb 	if (ring_num < 3 || ring_num == 4)
43*5c1def83SBjoern A. Zeeb 		return true;
44*5c1def83SBjoern A. Zeeb 
45*5c1def83SBjoern A. Zeeb 	return false;
46*5c1def83SBjoern A. Zeeb }
47*5c1def83SBjoern A. Zeeb 
ath12k_hw_mac_id_to_pdev_id_wcn7850(const struct ath12k_hw_params * hw,int mac_id)48*5c1def83SBjoern A. Zeeb static int ath12k_hw_mac_id_to_pdev_id_wcn7850(const struct ath12k_hw_params *hw,
49*5c1def83SBjoern A. Zeeb 					       int mac_id)
50*5c1def83SBjoern A. Zeeb {
51*5c1def83SBjoern A. Zeeb 	return 0;
52*5c1def83SBjoern A. Zeeb }
53*5c1def83SBjoern A. Zeeb 
ath12k_hw_mac_id_to_srng_id_wcn7850(const struct ath12k_hw_params * hw,int mac_id)54*5c1def83SBjoern A. Zeeb static int ath12k_hw_mac_id_to_srng_id_wcn7850(const struct ath12k_hw_params *hw,
55*5c1def83SBjoern A. Zeeb 					       int mac_id)
56*5c1def83SBjoern A. Zeeb {
57*5c1def83SBjoern A. Zeeb 	return mac_id;
58*5c1def83SBjoern A. Zeeb }
59*5c1def83SBjoern A. Zeeb 
ath12k_hw_get_ring_selector_wcn7850(struct sk_buff * skb)60*5c1def83SBjoern A. Zeeb static u8 ath12k_hw_get_ring_selector_wcn7850(struct sk_buff *skb)
61*5c1def83SBjoern A. Zeeb {
62*5c1def83SBjoern A. Zeeb 	return skb_get_queue_mapping(skb);
63*5c1def83SBjoern A. Zeeb }
64*5c1def83SBjoern A. Zeeb 
ath12k_dp_srng_is_comp_ring_wcn7850(int ring_num)65*5c1def83SBjoern A. Zeeb static bool ath12k_dp_srng_is_comp_ring_wcn7850(int ring_num)
66*5c1def83SBjoern A. Zeeb {
67*5c1def83SBjoern A. Zeeb 	if (ring_num == 0 || ring_num == 2 || ring_num == 4)
68*5c1def83SBjoern A. Zeeb 		return true;
69*5c1def83SBjoern A. Zeeb 
70*5c1def83SBjoern A. Zeeb 	return false;
71*5c1def83SBjoern A. Zeeb }
72*5c1def83SBjoern A. Zeeb 
73*5c1def83SBjoern A. Zeeb static const struct ath12k_hw_ops qcn9274_ops = {
74*5c1def83SBjoern A. Zeeb 	.get_hw_mac_from_pdev_id = ath12k_hw_qcn9274_mac_from_pdev_id,
75*5c1def83SBjoern A. Zeeb 	.mac_id_to_pdev_id = ath12k_hw_mac_id_to_pdev_id_qcn9274,
76*5c1def83SBjoern A. Zeeb 	.mac_id_to_srng_id = ath12k_hw_mac_id_to_srng_id_qcn9274,
77*5c1def83SBjoern A. Zeeb 	.rxdma_ring_sel_config = ath12k_dp_rxdma_ring_sel_config_qcn9274,
78*5c1def83SBjoern A. Zeeb 	.get_ring_selector = ath12k_hw_get_ring_selector_qcn9274,
79*5c1def83SBjoern A. Zeeb 	.dp_srng_is_tx_comp_ring = ath12k_dp_srng_is_comp_ring_qcn9274,
80*5c1def83SBjoern A. Zeeb };
81*5c1def83SBjoern A. Zeeb 
82*5c1def83SBjoern A. Zeeb static const struct ath12k_hw_ops wcn7850_ops = {
83*5c1def83SBjoern A. Zeeb 	.get_hw_mac_from_pdev_id = ath12k_hw_qcn9274_mac_from_pdev_id,
84*5c1def83SBjoern A. Zeeb 	.mac_id_to_pdev_id = ath12k_hw_mac_id_to_pdev_id_wcn7850,
85*5c1def83SBjoern A. Zeeb 	.mac_id_to_srng_id = ath12k_hw_mac_id_to_srng_id_wcn7850,
86*5c1def83SBjoern A. Zeeb 	.rxdma_ring_sel_config = ath12k_dp_rxdma_ring_sel_config_wcn7850,
87*5c1def83SBjoern A. Zeeb 	.get_ring_selector = ath12k_hw_get_ring_selector_wcn7850,
88*5c1def83SBjoern A. Zeeb 	.dp_srng_is_tx_comp_ring = ath12k_dp_srng_is_comp_ring_wcn7850,
89*5c1def83SBjoern A. Zeeb };
90*5c1def83SBjoern A. Zeeb 
91*5c1def83SBjoern A. Zeeb #define ATH12K_TX_RING_MASK_0 0x1
92*5c1def83SBjoern A. Zeeb #define ATH12K_TX_RING_MASK_1 0x2
93*5c1def83SBjoern A. Zeeb #define ATH12K_TX_RING_MASK_2 0x4
94*5c1def83SBjoern A. Zeeb #define ATH12K_TX_RING_MASK_3 0x8
95*5c1def83SBjoern A. Zeeb #define ATH12K_TX_RING_MASK_4 0x10
96*5c1def83SBjoern A. Zeeb 
97*5c1def83SBjoern A. Zeeb #define ATH12K_RX_RING_MASK_0 0x1
98*5c1def83SBjoern A. Zeeb #define ATH12K_RX_RING_MASK_1 0x2
99*5c1def83SBjoern A. Zeeb #define ATH12K_RX_RING_MASK_2 0x4
100*5c1def83SBjoern A. Zeeb #define ATH12K_RX_RING_MASK_3 0x8
101*5c1def83SBjoern A. Zeeb 
102*5c1def83SBjoern A. Zeeb #define ATH12K_RX_ERR_RING_MASK_0 0x1
103*5c1def83SBjoern A. Zeeb 
104*5c1def83SBjoern A. Zeeb #define ATH12K_RX_WBM_REL_RING_MASK_0 0x1
105*5c1def83SBjoern A. Zeeb 
106*5c1def83SBjoern A. Zeeb #define ATH12K_REO_STATUS_RING_MASK_0 0x1
107*5c1def83SBjoern A. Zeeb 
108*5c1def83SBjoern A. Zeeb #define ATH12K_HOST2RXDMA_RING_MASK_0 0x1
109*5c1def83SBjoern A. Zeeb 
110*5c1def83SBjoern A. Zeeb #define ATH12K_RX_MON_RING_MASK_0 0x1
111*5c1def83SBjoern A. Zeeb #define ATH12K_RX_MON_RING_MASK_1 0x2
112*5c1def83SBjoern A. Zeeb #define ATH12K_RX_MON_RING_MASK_2 0x4
113*5c1def83SBjoern A. Zeeb 
114*5c1def83SBjoern A. Zeeb #define ATH12K_TX_MON_RING_MASK_0 0x1
115*5c1def83SBjoern A. Zeeb #define ATH12K_TX_MON_RING_MASK_1 0x2
116*5c1def83SBjoern A. Zeeb 
117*5c1def83SBjoern A. Zeeb /* Target firmware's Copy Engine configuration. */
118*5c1def83SBjoern A. Zeeb static const struct ce_pipe_config ath12k_target_ce_config_wlan_qcn9274[] = {
119*5c1def83SBjoern A. Zeeb 	/* CE0: host->target HTC control and raw streams */
120*5c1def83SBjoern A. Zeeb 	{
121*5c1def83SBjoern A. Zeeb 		.pipenum = __cpu_to_le32(0),
122*5c1def83SBjoern A. Zeeb 		.pipedir = __cpu_to_le32(PIPEDIR_OUT),
123*5c1def83SBjoern A. Zeeb 		.nentries = __cpu_to_le32(32),
124*5c1def83SBjoern A. Zeeb 		.nbytes_max = __cpu_to_le32(2048),
125*5c1def83SBjoern A. Zeeb 		.flags = __cpu_to_le32(CE_ATTR_FLAGS),
126*5c1def83SBjoern A. Zeeb 		.reserved = __cpu_to_le32(0),
127*5c1def83SBjoern A. Zeeb 	},
128*5c1def83SBjoern A. Zeeb 
129*5c1def83SBjoern A. Zeeb 	/* CE1: target->host HTT + HTC control */
130*5c1def83SBjoern A. Zeeb 	{
131*5c1def83SBjoern A. Zeeb 		.pipenum = __cpu_to_le32(1),
132*5c1def83SBjoern A. Zeeb 		.pipedir = __cpu_to_le32(PIPEDIR_IN),
133*5c1def83SBjoern A. Zeeb 		.nentries = __cpu_to_le32(32),
134*5c1def83SBjoern A. Zeeb 		.nbytes_max = __cpu_to_le32(2048),
135*5c1def83SBjoern A. Zeeb 		.flags = __cpu_to_le32(CE_ATTR_FLAGS),
136*5c1def83SBjoern A. Zeeb 		.reserved = __cpu_to_le32(0),
137*5c1def83SBjoern A. Zeeb 	},
138*5c1def83SBjoern A. Zeeb 
139*5c1def83SBjoern A. Zeeb 	/* CE2: target->host WMI */
140*5c1def83SBjoern A. Zeeb 	{
141*5c1def83SBjoern A. Zeeb 		.pipenum = __cpu_to_le32(2),
142*5c1def83SBjoern A. Zeeb 		.pipedir = __cpu_to_le32(PIPEDIR_IN),
143*5c1def83SBjoern A. Zeeb 		.nentries = __cpu_to_le32(32),
144*5c1def83SBjoern A. Zeeb 		.nbytes_max = __cpu_to_le32(2048),
145*5c1def83SBjoern A. Zeeb 		.flags = __cpu_to_le32(CE_ATTR_FLAGS),
146*5c1def83SBjoern A. Zeeb 		.reserved = __cpu_to_le32(0),
147*5c1def83SBjoern A. Zeeb 	},
148*5c1def83SBjoern A. Zeeb 
149*5c1def83SBjoern A. Zeeb 	/* CE3: host->target WMI (mac0) */
150*5c1def83SBjoern A. Zeeb 	{
151*5c1def83SBjoern A. Zeeb 		.pipenum = __cpu_to_le32(3),
152*5c1def83SBjoern A. Zeeb 		.pipedir = __cpu_to_le32(PIPEDIR_OUT),
153*5c1def83SBjoern A. Zeeb 		.nentries = __cpu_to_le32(32),
154*5c1def83SBjoern A. Zeeb 		.nbytes_max = __cpu_to_le32(2048),
155*5c1def83SBjoern A. Zeeb 		.flags = __cpu_to_le32(CE_ATTR_FLAGS),
156*5c1def83SBjoern A. Zeeb 		.reserved = __cpu_to_le32(0),
157*5c1def83SBjoern A. Zeeb 	},
158*5c1def83SBjoern A. Zeeb 
159*5c1def83SBjoern A. Zeeb 	/* CE4: host->target HTT */
160*5c1def83SBjoern A. Zeeb 	{
161*5c1def83SBjoern A. Zeeb 		.pipenum = __cpu_to_le32(4),
162*5c1def83SBjoern A. Zeeb 		.pipedir = __cpu_to_le32(PIPEDIR_OUT),
163*5c1def83SBjoern A. Zeeb 		.nentries = __cpu_to_le32(256),
164*5c1def83SBjoern A. Zeeb 		.nbytes_max = __cpu_to_le32(256),
165*5c1def83SBjoern A. Zeeb 		.flags = __cpu_to_le32(CE_ATTR_FLAGS | CE_ATTR_DIS_INTR),
166*5c1def83SBjoern A. Zeeb 		.reserved = __cpu_to_le32(0),
167*5c1def83SBjoern A. Zeeb 	},
168*5c1def83SBjoern A. Zeeb 
169*5c1def83SBjoern A. Zeeb 	/* CE5: target->host Pktlog */
170*5c1def83SBjoern A. Zeeb 	{
171*5c1def83SBjoern A. Zeeb 		.pipenum = __cpu_to_le32(5),
172*5c1def83SBjoern A. Zeeb 		.pipedir = __cpu_to_le32(PIPEDIR_IN),
173*5c1def83SBjoern A. Zeeb 		.nentries = __cpu_to_le32(32),
174*5c1def83SBjoern A. Zeeb 		.nbytes_max = __cpu_to_le32(2048),
175*5c1def83SBjoern A. Zeeb 		.flags = __cpu_to_le32(CE_ATTR_FLAGS),
176*5c1def83SBjoern A. Zeeb 		.reserved = __cpu_to_le32(0),
177*5c1def83SBjoern A. Zeeb 	},
178*5c1def83SBjoern A. Zeeb 
179*5c1def83SBjoern A. Zeeb 	/* CE6: Reserved for target autonomous hif_memcpy */
180*5c1def83SBjoern A. Zeeb 	{
181*5c1def83SBjoern A. Zeeb 		.pipenum = __cpu_to_le32(6),
182*5c1def83SBjoern A. Zeeb 		.pipedir = __cpu_to_le32(PIPEDIR_INOUT),
183*5c1def83SBjoern A. Zeeb 		.nentries = __cpu_to_le32(32),
184*5c1def83SBjoern A. Zeeb 		.nbytes_max = __cpu_to_le32(16384),
185*5c1def83SBjoern A. Zeeb 		.flags = __cpu_to_le32(CE_ATTR_FLAGS),
186*5c1def83SBjoern A. Zeeb 		.reserved = __cpu_to_le32(0),
187*5c1def83SBjoern A. Zeeb 	},
188*5c1def83SBjoern A. Zeeb 
189*5c1def83SBjoern A. Zeeb 	/* CE7: host->target WMI (mac1) */
190*5c1def83SBjoern A. Zeeb 	{
191*5c1def83SBjoern A. Zeeb 		.pipenum = __cpu_to_le32(7),
192*5c1def83SBjoern A. Zeeb 		.pipedir = __cpu_to_le32(PIPEDIR_OUT),
193*5c1def83SBjoern A. Zeeb 		.nentries = __cpu_to_le32(32),
194*5c1def83SBjoern A. Zeeb 		.nbytes_max = __cpu_to_le32(2048),
195*5c1def83SBjoern A. Zeeb 		.flags = __cpu_to_le32(CE_ATTR_FLAGS),
196*5c1def83SBjoern A. Zeeb 		.reserved = __cpu_to_le32(0),
197*5c1def83SBjoern A. Zeeb 	},
198*5c1def83SBjoern A. Zeeb 
199*5c1def83SBjoern A. Zeeb 	/* CE8: Reserved for target autonomous hif_memcpy */
200*5c1def83SBjoern A. Zeeb 	{
201*5c1def83SBjoern A. Zeeb 		.pipenum = __cpu_to_le32(8),
202*5c1def83SBjoern A. Zeeb 		.pipedir = __cpu_to_le32(PIPEDIR_INOUT),
203*5c1def83SBjoern A. Zeeb 		.nentries = __cpu_to_le32(32),
204*5c1def83SBjoern A. Zeeb 		.nbytes_max = __cpu_to_le32(16384),
205*5c1def83SBjoern A. Zeeb 		.flags = __cpu_to_le32(CE_ATTR_FLAGS),
206*5c1def83SBjoern A. Zeeb 		.reserved = __cpu_to_le32(0),
207*5c1def83SBjoern A. Zeeb 	},
208*5c1def83SBjoern A. Zeeb 
209*5c1def83SBjoern A. Zeeb 	/* CE9, 10 and 11: Reserved for MHI */
210*5c1def83SBjoern A. Zeeb 
211*5c1def83SBjoern A. Zeeb 	/* CE12: Target CV prefetch */
212*5c1def83SBjoern A. Zeeb 	{
213*5c1def83SBjoern A. Zeeb 		.pipenum = __cpu_to_le32(12),
214*5c1def83SBjoern A. Zeeb 		.pipedir = __cpu_to_le32(PIPEDIR_OUT),
215*5c1def83SBjoern A. Zeeb 		.nentries = __cpu_to_le32(32),
216*5c1def83SBjoern A. Zeeb 		.nbytes_max = __cpu_to_le32(2048),
217*5c1def83SBjoern A. Zeeb 		.flags = __cpu_to_le32(CE_ATTR_FLAGS),
218*5c1def83SBjoern A. Zeeb 		.reserved = __cpu_to_le32(0),
219*5c1def83SBjoern A. Zeeb 	},
220*5c1def83SBjoern A. Zeeb 
221*5c1def83SBjoern A. Zeeb 	/* CE13: Target CV prefetch */
222*5c1def83SBjoern A. Zeeb 	{
223*5c1def83SBjoern A. Zeeb 		.pipenum = __cpu_to_le32(13),
224*5c1def83SBjoern A. Zeeb 		.pipedir = __cpu_to_le32(PIPEDIR_OUT),
225*5c1def83SBjoern A. Zeeb 		.nentries = __cpu_to_le32(32),
226*5c1def83SBjoern A. Zeeb 		.nbytes_max = __cpu_to_le32(2048),
227*5c1def83SBjoern A. Zeeb 		.flags = __cpu_to_le32(CE_ATTR_FLAGS),
228*5c1def83SBjoern A. Zeeb 		.reserved = __cpu_to_le32(0),
229*5c1def83SBjoern A. Zeeb 	},
230*5c1def83SBjoern A. Zeeb 
231*5c1def83SBjoern A. Zeeb 	/* CE14: WMI logging/CFR/Spectral/Radar */
232*5c1def83SBjoern A. Zeeb 	{
233*5c1def83SBjoern A. Zeeb 		.pipenum = __cpu_to_le32(14),
234*5c1def83SBjoern A. Zeeb 		.pipedir = __cpu_to_le32(PIPEDIR_IN),
235*5c1def83SBjoern A. Zeeb 		.nentries = __cpu_to_le32(32),
236*5c1def83SBjoern A. Zeeb 		.nbytes_max = __cpu_to_le32(2048),
237*5c1def83SBjoern A. Zeeb 		.flags = __cpu_to_le32(CE_ATTR_FLAGS),
238*5c1def83SBjoern A. Zeeb 		.reserved = __cpu_to_le32(0),
239*5c1def83SBjoern A. Zeeb 	},
240*5c1def83SBjoern A. Zeeb 
241*5c1def83SBjoern A. Zeeb 	/* CE15: Reserved */
242*5c1def83SBjoern A. Zeeb };
243*5c1def83SBjoern A. Zeeb 
244*5c1def83SBjoern A. Zeeb /* Target firmware's Copy Engine configuration. */
245*5c1def83SBjoern A. Zeeb static const struct ce_pipe_config ath12k_target_ce_config_wlan_wcn7850[] = {
246*5c1def83SBjoern A. Zeeb 	/* CE0: host->target HTC control and raw streams */
247*5c1def83SBjoern A. Zeeb 	{
248*5c1def83SBjoern A. Zeeb 		.pipenum = __cpu_to_le32(0),
249*5c1def83SBjoern A. Zeeb 		.pipedir = __cpu_to_le32(PIPEDIR_OUT),
250*5c1def83SBjoern A. Zeeb 		.nentries = __cpu_to_le32(32),
251*5c1def83SBjoern A. Zeeb 		.nbytes_max = __cpu_to_le32(2048),
252*5c1def83SBjoern A. Zeeb 		.flags = __cpu_to_le32(CE_ATTR_FLAGS),
253*5c1def83SBjoern A. Zeeb 		.reserved = __cpu_to_le32(0),
254*5c1def83SBjoern A. Zeeb 	},
255*5c1def83SBjoern A. Zeeb 
256*5c1def83SBjoern A. Zeeb 	/* CE1: target->host HTT + HTC control */
257*5c1def83SBjoern A. Zeeb 	{
258*5c1def83SBjoern A. Zeeb 		.pipenum = __cpu_to_le32(1),
259*5c1def83SBjoern A. Zeeb 		.pipedir = __cpu_to_le32(PIPEDIR_IN),
260*5c1def83SBjoern A. Zeeb 		.nentries = __cpu_to_le32(32),
261*5c1def83SBjoern A. Zeeb 		.nbytes_max = __cpu_to_le32(2048),
262*5c1def83SBjoern A. Zeeb 		.flags = __cpu_to_le32(CE_ATTR_FLAGS),
263*5c1def83SBjoern A. Zeeb 		.reserved = __cpu_to_le32(0),
264*5c1def83SBjoern A. Zeeb 	},
265*5c1def83SBjoern A. Zeeb 
266*5c1def83SBjoern A. Zeeb 	/* CE2: target->host WMI */
267*5c1def83SBjoern A. Zeeb 	{
268*5c1def83SBjoern A. Zeeb 		.pipenum = __cpu_to_le32(2),
269*5c1def83SBjoern A. Zeeb 		.pipedir = __cpu_to_le32(PIPEDIR_IN),
270*5c1def83SBjoern A. Zeeb 		.nentries = __cpu_to_le32(32),
271*5c1def83SBjoern A. Zeeb 		.nbytes_max = __cpu_to_le32(2048),
272*5c1def83SBjoern A. Zeeb 		.flags = __cpu_to_le32(CE_ATTR_FLAGS),
273*5c1def83SBjoern A. Zeeb 		.reserved = __cpu_to_le32(0),
274*5c1def83SBjoern A. Zeeb 	},
275*5c1def83SBjoern A. Zeeb 
276*5c1def83SBjoern A. Zeeb 	/* CE3: host->target WMI */
277*5c1def83SBjoern A. Zeeb 	{
278*5c1def83SBjoern A. Zeeb 		.pipenum = __cpu_to_le32(3),
279*5c1def83SBjoern A. Zeeb 		.pipedir = __cpu_to_le32(PIPEDIR_OUT),
280*5c1def83SBjoern A. Zeeb 		.nentries = __cpu_to_le32(32),
281*5c1def83SBjoern A. Zeeb 		.nbytes_max = __cpu_to_le32(2048),
282*5c1def83SBjoern A. Zeeb 		.flags = __cpu_to_le32(CE_ATTR_FLAGS),
283*5c1def83SBjoern A. Zeeb 		.reserved = __cpu_to_le32(0),
284*5c1def83SBjoern A. Zeeb 	},
285*5c1def83SBjoern A. Zeeb 
286*5c1def83SBjoern A. Zeeb 	/* CE4: host->target HTT */
287*5c1def83SBjoern A. Zeeb 	{
288*5c1def83SBjoern A. Zeeb 		.pipenum = __cpu_to_le32(4),
289*5c1def83SBjoern A. Zeeb 		.pipedir = __cpu_to_le32(PIPEDIR_OUT),
290*5c1def83SBjoern A. Zeeb 		.nentries = __cpu_to_le32(256),
291*5c1def83SBjoern A. Zeeb 		.nbytes_max = __cpu_to_le32(256),
292*5c1def83SBjoern A. Zeeb 		.flags = __cpu_to_le32(CE_ATTR_FLAGS | CE_ATTR_DIS_INTR),
293*5c1def83SBjoern A. Zeeb 		.reserved = __cpu_to_le32(0),
294*5c1def83SBjoern A. Zeeb 	},
295*5c1def83SBjoern A. Zeeb 
296*5c1def83SBjoern A. Zeeb 	/* CE5: target->host Pktlog */
297*5c1def83SBjoern A. Zeeb 	{
298*5c1def83SBjoern A. Zeeb 		.pipenum = __cpu_to_le32(5),
299*5c1def83SBjoern A. Zeeb 		.pipedir = __cpu_to_le32(PIPEDIR_IN),
300*5c1def83SBjoern A. Zeeb 		.nentries = __cpu_to_le32(32),
301*5c1def83SBjoern A. Zeeb 		.nbytes_max = __cpu_to_le32(2048),
302*5c1def83SBjoern A. Zeeb 		.flags = __cpu_to_le32(CE_ATTR_FLAGS),
303*5c1def83SBjoern A. Zeeb 		.reserved = __cpu_to_le32(0),
304*5c1def83SBjoern A. Zeeb 	},
305*5c1def83SBjoern A. Zeeb 
306*5c1def83SBjoern A. Zeeb 	/* CE6: Reserved for target autonomous hif_memcpy */
307*5c1def83SBjoern A. Zeeb 	{
308*5c1def83SBjoern A. Zeeb 		.pipenum = __cpu_to_le32(6),
309*5c1def83SBjoern A. Zeeb 		.pipedir = __cpu_to_le32(PIPEDIR_INOUT),
310*5c1def83SBjoern A. Zeeb 		.nentries = __cpu_to_le32(32),
311*5c1def83SBjoern A. Zeeb 		.nbytes_max = __cpu_to_le32(16384),
312*5c1def83SBjoern A. Zeeb 		.flags = __cpu_to_le32(CE_ATTR_FLAGS),
313*5c1def83SBjoern A. Zeeb 		.reserved = __cpu_to_le32(0),
314*5c1def83SBjoern A. Zeeb 	},
315*5c1def83SBjoern A. Zeeb 
316*5c1def83SBjoern A. Zeeb 	/* CE7 used only by Host */
317*5c1def83SBjoern A. Zeeb 	{
318*5c1def83SBjoern A. Zeeb 		.pipenum = __cpu_to_le32(7),
319*5c1def83SBjoern A. Zeeb 		.pipedir = __cpu_to_le32(PIPEDIR_INOUT_H2H),
320*5c1def83SBjoern A. Zeeb 		.nentries = __cpu_to_le32(0),
321*5c1def83SBjoern A. Zeeb 		.nbytes_max = __cpu_to_le32(0),
322*5c1def83SBjoern A. Zeeb 		.flags = __cpu_to_le32(CE_ATTR_FLAGS | CE_ATTR_DIS_INTR),
323*5c1def83SBjoern A. Zeeb 		.reserved = __cpu_to_le32(0),
324*5c1def83SBjoern A. Zeeb 	},
325*5c1def83SBjoern A. Zeeb 
326*5c1def83SBjoern A. Zeeb 	/* CE8 target->host used only by IPA */
327*5c1def83SBjoern A. Zeeb 	{
328*5c1def83SBjoern A. Zeeb 		.pipenum = __cpu_to_le32(8),
329*5c1def83SBjoern A. Zeeb 		.pipedir = __cpu_to_le32(PIPEDIR_INOUT),
330*5c1def83SBjoern A. Zeeb 		.nentries = __cpu_to_le32(32),
331*5c1def83SBjoern A. Zeeb 		.nbytes_max = __cpu_to_le32(16384),
332*5c1def83SBjoern A. Zeeb 		.flags = __cpu_to_le32(CE_ATTR_FLAGS),
333*5c1def83SBjoern A. Zeeb 		.reserved = __cpu_to_le32(0),
334*5c1def83SBjoern A. Zeeb 	},
335*5c1def83SBjoern A. Zeeb 	/* CE 9, 10, 11 are used by MHI driver */
336*5c1def83SBjoern A. Zeeb };
337*5c1def83SBjoern A. Zeeb 
338*5c1def83SBjoern A. Zeeb /* Map from service/endpoint to Copy Engine.
339*5c1def83SBjoern A. Zeeb  * This table is derived from the CE_PCI TABLE, above.
340*5c1def83SBjoern A. Zeeb  * It is passed to the Target at startup for use by firmware.
341*5c1def83SBjoern A. Zeeb  */
342*5c1def83SBjoern A. Zeeb static const struct service_to_pipe ath12k_target_service_to_ce_map_wlan_qcn9274[] = {
343*5c1def83SBjoern A. Zeeb 	{
344*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_VO),
345*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_OUT),	/* out = UL = host -> target */
346*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(3),
347*5c1def83SBjoern A. Zeeb 	},
348*5c1def83SBjoern A. Zeeb 	{
349*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_VO),
350*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_IN),	/* in = DL = target -> host */
351*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(2),
352*5c1def83SBjoern A. Zeeb 	},
353*5c1def83SBjoern A. Zeeb 	{
354*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_BK),
355*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_OUT),	/* out = UL = host -> target */
356*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(3),
357*5c1def83SBjoern A. Zeeb 	},
358*5c1def83SBjoern A. Zeeb 	{
359*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_BK),
360*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_IN),	/* in = DL = target -> host */
361*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(2),
362*5c1def83SBjoern A. Zeeb 	},
363*5c1def83SBjoern A. Zeeb 	{
364*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_BE),
365*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_OUT),	/* out = UL = host -> target */
366*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(3),
367*5c1def83SBjoern A. Zeeb 	},
368*5c1def83SBjoern A. Zeeb 	{
369*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_BE),
370*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_IN),	/* in = DL = target -> host */
371*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(2),
372*5c1def83SBjoern A. Zeeb 	},
373*5c1def83SBjoern A. Zeeb 	{
374*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_VI),
375*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_OUT),	/* out = UL = host -> target */
376*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(3),
377*5c1def83SBjoern A. Zeeb 	},
378*5c1def83SBjoern A. Zeeb 	{
379*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_VI),
380*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_IN),	/* in = DL = target -> host */
381*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(2),
382*5c1def83SBjoern A. Zeeb 	},
383*5c1def83SBjoern A. Zeeb 	{
384*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_CONTROL),
385*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_OUT),	/* out = UL = host -> target */
386*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(3),
387*5c1def83SBjoern A. Zeeb 	},
388*5c1def83SBjoern A. Zeeb 	{
389*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_CONTROL),
390*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_IN),	/* in = DL = target -> host */
391*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(2),
392*5c1def83SBjoern A. Zeeb 	},
393*5c1def83SBjoern A. Zeeb 	{
394*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_RSVD_CTRL),
395*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_OUT),	/* out = UL = host -> target */
396*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(0),
397*5c1def83SBjoern A. Zeeb 	},
398*5c1def83SBjoern A. Zeeb 	{
399*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_RSVD_CTRL),
400*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_IN),	/* in = DL = target -> host */
401*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(1),
402*5c1def83SBjoern A. Zeeb 	},
403*5c1def83SBjoern A. Zeeb 	{
404*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_TEST_RAW_STREAMS),
405*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_OUT),	/* out = UL = host -> target */
406*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(0),
407*5c1def83SBjoern A. Zeeb 	},
408*5c1def83SBjoern A. Zeeb 	{
409*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_TEST_RAW_STREAMS),
410*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_IN),	/* in = DL = target -> host */
411*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(1),
412*5c1def83SBjoern A. Zeeb 	},
413*5c1def83SBjoern A. Zeeb 	{
414*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_HTT_DATA_MSG),
415*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_OUT),	/* out = UL = host -> target */
416*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(4),
417*5c1def83SBjoern A. Zeeb 	},
418*5c1def83SBjoern A. Zeeb 	{
419*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_HTT_DATA_MSG),
420*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_IN),	/* in = DL = target -> host */
421*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(1),
422*5c1def83SBjoern A. Zeeb 	},
423*5c1def83SBjoern A. Zeeb 	{
424*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_CONTROL_MAC1),
425*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_OUT),	/* out = UL = host -> target */
426*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(7),
427*5c1def83SBjoern A. Zeeb 	},
428*5c1def83SBjoern A. Zeeb 	{
429*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_CONTROL_MAC1),
430*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_IN),	/* in = DL = target -> host */
431*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(2),
432*5c1def83SBjoern A. Zeeb 	},
433*5c1def83SBjoern A. Zeeb 	{
434*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_PKT_LOG),
435*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_IN),	/* in = DL = target -> host */
436*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(5),
437*5c1def83SBjoern A. Zeeb 	},
438*5c1def83SBjoern A. Zeeb 	{
439*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_CONTROL_DIAG),
440*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_IN),	/* in = DL = target -> host */
441*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(14),
442*5c1def83SBjoern A. Zeeb 	},
443*5c1def83SBjoern A. Zeeb 
444*5c1def83SBjoern A. Zeeb 	/* (Additions here) */
445*5c1def83SBjoern A. Zeeb 
446*5c1def83SBjoern A. Zeeb 	{ /* must be last */
447*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(0),
448*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(0),
449*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(0),
450*5c1def83SBjoern A. Zeeb 	},
451*5c1def83SBjoern A. Zeeb };
452*5c1def83SBjoern A. Zeeb 
453*5c1def83SBjoern A. Zeeb static const struct service_to_pipe ath12k_target_service_to_ce_map_wlan_wcn7850[] = {
454*5c1def83SBjoern A. Zeeb 	{
455*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_VO),
456*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_OUT),	/* out = UL = host -> target */
457*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(3),
458*5c1def83SBjoern A. Zeeb 	},
459*5c1def83SBjoern A. Zeeb 	{
460*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_VO),
461*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_IN),	/* in = DL = target -> host */
462*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(2),
463*5c1def83SBjoern A. Zeeb 	},
464*5c1def83SBjoern A. Zeeb 	{
465*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_BK),
466*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_OUT),	/* out = UL = host -> target */
467*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(3),
468*5c1def83SBjoern A. Zeeb 	},
469*5c1def83SBjoern A. Zeeb 	{
470*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_BK),
471*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_IN),	/* in = DL = target -> host */
472*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(2),
473*5c1def83SBjoern A. Zeeb 	},
474*5c1def83SBjoern A. Zeeb 	{
475*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_BE),
476*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_OUT),	/* out = UL = host -> target */
477*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(3),
478*5c1def83SBjoern A. Zeeb 	},
479*5c1def83SBjoern A. Zeeb 	{
480*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_BE),
481*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_IN),	/* in = DL = target -> host */
482*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(2),
483*5c1def83SBjoern A. Zeeb 	},
484*5c1def83SBjoern A. Zeeb 	{
485*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_VI),
486*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_OUT),	/* out = UL = host -> target */
487*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(3),
488*5c1def83SBjoern A. Zeeb 	},
489*5c1def83SBjoern A. Zeeb 	{
490*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_DATA_VI),
491*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_IN),	/* in = DL = target -> host */
492*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(2),
493*5c1def83SBjoern A. Zeeb 	},
494*5c1def83SBjoern A. Zeeb 	{
495*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_CONTROL),
496*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_OUT),	/* out = UL = host -> target */
497*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(3),
498*5c1def83SBjoern A. Zeeb 	},
499*5c1def83SBjoern A. Zeeb 	{
500*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_WMI_CONTROL),
501*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_IN),	/* in = DL = target -> host */
502*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(2),
503*5c1def83SBjoern A. Zeeb 	},
504*5c1def83SBjoern A. Zeeb 	{
505*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_RSVD_CTRL),
506*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_OUT),	/* out = UL = host -> target */
507*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(0),
508*5c1def83SBjoern A. Zeeb 	},
509*5c1def83SBjoern A. Zeeb 	{
510*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_RSVD_CTRL),
511*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_IN),	/* in = DL = target -> host */
512*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(2),
513*5c1def83SBjoern A. Zeeb 	},
514*5c1def83SBjoern A. Zeeb 	{
515*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_HTT_DATA_MSG),
516*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_OUT),	/* out = UL = host -> target */
517*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(4),
518*5c1def83SBjoern A. Zeeb 	},
519*5c1def83SBjoern A. Zeeb 	{
520*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(ATH12K_HTC_SVC_ID_HTT_DATA_MSG),
521*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(PIPEDIR_IN),	/* in = DL = target -> host */
522*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(1),
523*5c1def83SBjoern A. Zeeb 	},
524*5c1def83SBjoern A. Zeeb 
525*5c1def83SBjoern A. Zeeb 	/* (Additions here) */
526*5c1def83SBjoern A. Zeeb 
527*5c1def83SBjoern A. Zeeb 	{ /* must be last */
528*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(0),
529*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(0),
530*5c1def83SBjoern A. Zeeb 		__cpu_to_le32(0),
531*5c1def83SBjoern A. Zeeb 	},
532*5c1def83SBjoern A. Zeeb };
533*5c1def83SBjoern A. Zeeb 
534*5c1def83SBjoern A. Zeeb static const struct ath12k_hw_ring_mask ath12k_hw_ring_mask_qcn9274 = {
535*5c1def83SBjoern A. Zeeb 	.tx  = {
536*5c1def83SBjoern A. Zeeb 		ATH12K_TX_RING_MASK_0,
537*5c1def83SBjoern A. Zeeb 		ATH12K_TX_RING_MASK_1,
538*5c1def83SBjoern A. Zeeb 		ATH12K_TX_RING_MASK_2,
539*5c1def83SBjoern A. Zeeb 		ATH12K_TX_RING_MASK_3,
540*5c1def83SBjoern A. Zeeb 	},
541*5c1def83SBjoern A. Zeeb 	.rx_mon_dest = {
542*5c1def83SBjoern A. Zeeb 		0, 0, 0,
543*5c1def83SBjoern A. Zeeb 		ATH12K_RX_MON_RING_MASK_0,
544*5c1def83SBjoern A. Zeeb 		ATH12K_RX_MON_RING_MASK_1,
545*5c1def83SBjoern A. Zeeb 		ATH12K_RX_MON_RING_MASK_2,
546*5c1def83SBjoern A. Zeeb 	},
547*5c1def83SBjoern A. Zeeb 	.rx = {
548*5c1def83SBjoern A. Zeeb 		0, 0, 0, 0,
549*5c1def83SBjoern A. Zeeb 		ATH12K_RX_RING_MASK_0,
550*5c1def83SBjoern A. Zeeb 		ATH12K_RX_RING_MASK_1,
551*5c1def83SBjoern A. Zeeb 		ATH12K_RX_RING_MASK_2,
552*5c1def83SBjoern A. Zeeb 		ATH12K_RX_RING_MASK_3,
553*5c1def83SBjoern A. Zeeb 	},
554*5c1def83SBjoern A. Zeeb 	.rx_err = {
555*5c1def83SBjoern A. Zeeb 		0, 0, 0,
556*5c1def83SBjoern A. Zeeb 		ATH12K_RX_ERR_RING_MASK_0,
557*5c1def83SBjoern A. Zeeb 	},
558*5c1def83SBjoern A. Zeeb 	.rx_wbm_rel = {
559*5c1def83SBjoern A. Zeeb 		0, 0, 0,
560*5c1def83SBjoern A. Zeeb 		ATH12K_RX_WBM_REL_RING_MASK_0,
561*5c1def83SBjoern A. Zeeb 	},
562*5c1def83SBjoern A. Zeeb 	.reo_status = {
563*5c1def83SBjoern A. Zeeb 		0, 0, 0,
564*5c1def83SBjoern A. Zeeb 		ATH12K_REO_STATUS_RING_MASK_0,
565*5c1def83SBjoern A. Zeeb 	},
566*5c1def83SBjoern A. Zeeb 	.host2rxdma = {
567*5c1def83SBjoern A. Zeeb 		0, 0, 0,
568*5c1def83SBjoern A. Zeeb 		ATH12K_HOST2RXDMA_RING_MASK_0,
569*5c1def83SBjoern A. Zeeb 	},
570*5c1def83SBjoern A. Zeeb 	.tx_mon_dest = {
571*5c1def83SBjoern A. Zeeb 		ATH12K_TX_MON_RING_MASK_0,
572*5c1def83SBjoern A. Zeeb 		ATH12K_TX_MON_RING_MASK_1,
573*5c1def83SBjoern A. Zeeb 	},
574*5c1def83SBjoern A. Zeeb };
575*5c1def83SBjoern A. Zeeb 
576*5c1def83SBjoern A. Zeeb static const struct ath12k_hw_ring_mask ath12k_hw_ring_mask_wcn7850 = {
577*5c1def83SBjoern A. Zeeb 	.tx  = {
578*5c1def83SBjoern A. Zeeb 		ATH12K_TX_RING_MASK_0,
579*5c1def83SBjoern A. Zeeb 		ATH12K_TX_RING_MASK_2,
580*5c1def83SBjoern A. Zeeb 		ATH12K_TX_RING_MASK_4,
581*5c1def83SBjoern A. Zeeb 	},
582*5c1def83SBjoern A. Zeeb 	.rx_mon_dest = {
583*5c1def83SBjoern A. Zeeb 	},
584*5c1def83SBjoern A. Zeeb 	.rx = {
585*5c1def83SBjoern A. Zeeb 		0, 0, 0,
586*5c1def83SBjoern A. Zeeb 		ATH12K_RX_RING_MASK_0,
587*5c1def83SBjoern A. Zeeb 		ATH12K_RX_RING_MASK_1,
588*5c1def83SBjoern A. Zeeb 		ATH12K_RX_RING_MASK_2,
589*5c1def83SBjoern A. Zeeb 		ATH12K_RX_RING_MASK_3,
590*5c1def83SBjoern A. Zeeb 	},
591*5c1def83SBjoern A. Zeeb 	.rx_err = {
592*5c1def83SBjoern A. Zeeb 		ATH12K_RX_ERR_RING_MASK_0,
593*5c1def83SBjoern A. Zeeb 	},
594*5c1def83SBjoern A. Zeeb 	.rx_wbm_rel = {
595*5c1def83SBjoern A. Zeeb 		ATH12K_RX_WBM_REL_RING_MASK_0,
596*5c1def83SBjoern A. Zeeb 	},
597*5c1def83SBjoern A. Zeeb 	.reo_status = {
598*5c1def83SBjoern A. Zeeb 		ATH12K_REO_STATUS_RING_MASK_0,
599*5c1def83SBjoern A. Zeeb 	},
600*5c1def83SBjoern A. Zeeb 	.host2rxdma = {
601*5c1def83SBjoern A. Zeeb 	},
602*5c1def83SBjoern A. Zeeb 	.tx_mon_dest = {
603*5c1def83SBjoern A. Zeeb 	},
604*5c1def83SBjoern A. Zeeb };
605*5c1def83SBjoern A. Zeeb 
606*5c1def83SBjoern A. Zeeb static const struct ath12k_hw_regs qcn9274_v1_regs = {
607*5c1def83SBjoern A. Zeeb 	/* SW2TCL(x) R0 ring configuration address */
608*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_id = 0x00000908,
609*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_misc = 0x00000910,
610*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_tp_addr_lsb = 0x0000091c,
611*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_tp_addr_msb = 0x00000920,
612*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_consumer_int_setup_ix0 = 0x00000930,
613*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_consumer_int_setup_ix1 = 0x00000934,
614*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_msi1_base_lsb = 0x00000948,
615*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_msi1_base_msb = 0x0000094c,
616*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_msi1_data = 0x00000950,
617*5c1def83SBjoern A. Zeeb 	.hal_tcl_ring_base_lsb = 0x00000b58,
618*5c1def83SBjoern A. Zeeb 
619*5c1def83SBjoern A. Zeeb 	/* TCL STATUS ring address */
620*5c1def83SBjoern A. Zeeb 	.hal_tcl_status_ring_base_lsb = 0x00000d38,
621*5c1def83SBjoern A. Zeeb 
622*5c1def83SBjoern A. Zeeb 	.hal_wbm_idle_ring_base_lsb = 0x00000d0c,
623*5c1def83SBjoern A. Zeeb 	.hal_wbm_idle_ring_misc_addr = 0x00000d1c,
624*5c1def83SBjoern A. Zeeb 	.hal_wbm_r0_idle_list_cntl_addr = 0x00000210,
625*5c1def83SBjoern A. Zeeb 	.hal_wbm_r0_idle_list_size_addr = 0x00000214,
626*5c1def83SBjoern A. Zeeb 	.hal_wbm_scattered_ring_base_lsb = 0x00000220,
627*5c1def83SBjoern A. Zeeb 	.hal_wbm_scattered_ring_base_msb = 0x00000224,
628*5c1def83SBjoern A. Zeeb 	.hal_wbm_scattered_desc_head_info_ix0 = 0x00000230,
629*5c1def83SBjoern A. Zeeb 	.hal_wbm_scattered_desc_head_info_ix1 = 0x00000234,
630*5c1def83SBjoern A. Zeeb 	.hal_wbm_scattered_desc_tail_info_ix0 = 0x00000240,
631*5c1def83SBjoern A. Zeeb 	.hal_wbm_scattered_desc_tail_info_ix1 = 0x00000244,
632*5c1def83SBjoern A. Zeeb 	.hal_wbm_scattered_desc_ptr_hp_addr = 0x0000024c,
633*5c1def83SBjoern A. Zeeb 
634*5c1def83SBjoern A. Zeeb 	.hal_wbm_sw_release_ring_base_lsb = 0x0000034c,
635*5c1def83SBjoern A. Zeeb 	.hal_wbm_sw1_release_ring_base_lsb = 0x000003c4,
636*5c1def83SBjoern A. Zeeb 	.hal_wbm0_release_ring_base_lsb = 0x00000dd8,
637*5c1def83SBjoern A. Zeeb 	.hal_wbm1_release_ring_base_lsb = 0x00000e50,
638*5c1def83SBjoern A. Zeeb 
639*5c1def83SBjoern A. Zeeb 	/* PCIe base address */
640*5c1def83SBjoern A. Zeeb 	.pcie_qserdes_sysclk_en_sel = 0x01e0c0a8,
641*5c1def83SBjoern A. Zeeb 	.pcie_pcs_osc_dtct_config_base = 0x01e0d45c,
642*5c1def83SBjoern A. Zeeb 
643*5c1def83SBjoern A. Zeeb 	/* PPE release ring address */
644*5c1def83SBjoern A. Zeeb 	.hal_ppe_rel_ring_base = 0x0000043c,
645*5c1def83SBjoern A. Zeeb 
646*5c1def83SBjoern A. Zeeb 	/* REO DEST ring address */
647*5c1def83SBjoern A. Zeeb 	.hal_reo2_ring_base = 0x0000055c,
648*5c1def83SBjoern A. Zeeb 	.hal_reo1_misc_ctrl_addr = 0x00000b7c,
649*5c1def83SBjoern A. Zeeb 	.hal_reo1_sw_cookie_cfg0 = 0x00000050,
650*5c1def83SBjoern A. Zeeb 	.hal_reo1_sw_cookie_cfg1 = 0x00000054,
651*5c1def83SBjoern A. Zeeb 	.hal_reo1_qdesc_lut_base0 = 0x00000058,
652*5c1def83SBjoern A. Zeeb 	.hal_reo1_qdesc_lut_base1 = 0x0000005c,
653*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_base_lsb = 0x000004e4,
654*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_base_msb = 0x000004e8,
655*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_id = 0x000004ec,
656*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_misc = 0x000004f4,
657*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_hp_addr_lsb = 0x000004f8,
658*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_hp_addr_msb = 0x000004fc,
659*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_producer_int_setup = 0x00000508,
660*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_msi1_base_lsb = 0x0000052C,
661*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_msi1_base_msb = 0x00000530,
662*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_msi1_data = 0x00000534,
663*5c1def83SBjoern A. Zeeb 	.hal_reo1_aging_thres_ix0 = 0x00000b08,
664*5c1def83SBjoern A. Zeeb 	.hal_reo1_aging_thres_ix1 = 0x00000b0c,
665*5c1def83SBjoern A. Zeeb 	.hal_reo1_aging_thres_ix2 = 0x00000b10,
666*5c1def83SBjoern A. Zeeb 	.hal_reo1_aging_thres_ix3 = 0x00000b14,
667*5c1def83SBjoern A. Zeeb 
668*5c1def83SBjoern A. Zeeb 	/* REO Exception ring address */
669*5c1def83SBjoern A. Zeeb 	.hal_reo2_sw0_ring_base = 0x000008a4,
670*5c1def83SBjoern A. Zeeb 
671*5c1def83SBjoern A. Zeeb 	/* REO Reinject ring address */
672*5c1def83SBjoern A. Zeeb 	.hal_sw2reo_ring_base = 0x00000304,
673*5c1def83SBjoern A. Zeeb 	.hal_sw2reo1_ring_base = 0x0000037c,
674*5c1def83SBjoern A. Zeeb 
675*5c1def83SBjoern A. Zeeb 	/* REO cmd ring address */
676*5c1def83SBjoern A. Zeeb 	.hal_reo_cmd_ring_base = 0x0000028c,
677*5c1def83SBjoern A. Zeeb 
678*5c1def83SBjoern A. Zeeb 	/* REO status ring address */
679*5c1def83SBjoern A. Zeeb 	.hal_reo_status_ring_base = 0x00000a84,
680*5c1def83SBjoern A. Zeeb };
681*5c1def83SBjoern A. Zeeb 
682*5c1def83SBjoern A. Zeeb static const struct ath12k_hw_regs qcn9274_v2_regs = {
683*5c1def83SBjoern A. Zeeb 	/* SW2TCL(x) R0 ring configuration address */
684*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_id = 0x00000908,
685*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_misc = 0x00000910,
686*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_tp_addr_lsb = 0x0000091c,
687*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_tp_addr_msb = 0x00000920,
688*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_consumer_int_setup_ix0 = 0x00000930,
689*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_consumer_int_setup_ix1 = 0x00000934,
690*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_msi1_base_lsb = 0x00000948,
691*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_msi1_base_msb = 0x0000094c,
692*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_msi1_data = 0x00000950,
693*5c1def83SBjoern A. Zeeb 	.hal_tcl_ring_base_lsb = 0x00000b58,
694*5c1def83SBjoern A. Zeeb 
695*5c1def83SBjoern A. Zeeb 	/* TCL STATUS ring address */
696*5c1def83SBjoern A. Zeeb 	.hal_tcl_status_ring_base_lsb = 0x00000d38,
697*5c1def83SBjoern A. Zeeb 
698*5c1def83SBjoern A. Zeeb 	/* WBM idle link ring address */
699*5c1def83SBjoern A. Zeeb 	.hal_wbm_idle_ring_base_lsb = 0x00000d3c,
700*5c1def83SBjoern A. Zeeb 	.hal_wbm_idle_ring_misc_addr = 0x00000d4c,
701*5c1def83SBjoern A. Zeeb 	.hal_wbm_r0_idle_list_cntl_addr = 0x00000240,
702*5c1def83SBjoern A. Zeeb 	.hal_wbm_r0_idle_list_size_addr = 0x00000244,
703*5c1def83SBjoern A. Zeeb 	.hal_wbm_scattered_ring_base_lsb = 0x00000250,
704*5c1def83SBjoern A. Zeeb 	.hal_wbm_scattered_ring_base_msb = 0x00000254,
705*5c1def83SBjoern A. Zeeb 	.hal_wbm_scattered_desc_head_info_ix0 = 0x00000260,
706*5c1def83SBjoern A. Zeeb 	.hal_wbm_scattered_desc_head_info_ix1 = 0x00000264,
707*5c1def83SBjoern A. Zeeb 	.hal_wbm_scattered_desc_tail_info_ix0 = 0x00000270,
708*5c1def83SBjoern A. Zeeb 	.hal_wbm_scattered_desc_tail_info_ix1 = 0x00000274,
709*5c1def83SBjoern A. Zeeb 	.hal_wbm_scattered_desc_ptr_hp_addr = 0x0000027c,
710*5c1def83SBjoern A. Zeeb 
711*5c1def83SBjoern A. Zeeb 	/* SW2WBM release ring address */
712*5c1def83SBjoern A. Zeeb 	.hal_wbm_sw_release_ring_base_lsb = 0x0000037c,
713*5c1def83SBjoern A. Zeeb 	.hal_wbm_sw1_release_ring_base_lsb = 0x000003f4,
714*5c1def83SBjoern A. Zeeb 
715*5c1def83SBjoern A. Zeeb 	/* WBM2SW release ring address */
716*5c1def83SBjoern A. Zeeb 	.hal_wbm0_release_ring_base_lsb = 0x00000e08,
717*5c1def83SBjoern A. Zeeb 	.hal_wbm1_release_ring_base_lsb = 0x00000e80,
718*5c1def83SBjoern A. Zeeb 
719*5c1def83SBjoern A. Zeeb 	/* PCIe base address */
720*5c1def83SBjoern A. Zeeb 	.pcie_qserdes_sysclk_en_sel = 0x01e0c0a8,
721*5c1def83SBjoern A. Zeeb 	.pcie_pcs_osc_dtct_config_base = 0x01e0d45c,
722*5c1def83SBjoern A. Zeeb 
723*5c1def83SBjoern A. Zeeb 	/* PPE release ring address */
724*5c1def83SBjoern A. Zeeb 	.hal_ppe_rel_ring_base = 0x0000046c,
725*5c1def83SBjoern A. Zeeb 
726*5c1def83SBjoern A. Zeeb 	/* REO DEST ring address */
727*5c1def83SBjoern A. Zeeb 	.hal_reo2_ring_base = 0x00000578,
728*5c1def83SBjoern A. Zeeb 	.hal_reo1_misc_ctrl_addr = 0x00000b9c,
729*5c1def83SBjoern A. Zeeb 	.hal_reo1_sw_cookie_cfg0 = 0x0000006c,
730*5c1def83SBjoern A. Zeeb 	.hal_reo1_sw_cookie_cfg1 = 0x00000070,
731*5c1def83SBjoern A. Zeeb 	.hal_reo1_qdesc_lut_base0 = 0x00000074,
732*5c1def83SBjoern A. Zeeb 	.hal_reo1_qdesc_lut_base1 = 0x00000078,
733*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_base_lsb = 0x00000500,
734*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_base_msb = 0x00000504,
735*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_id = 0x00000508,
736*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_misc = 0x00000510,
737*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_hp_addr_lsb = 0x00000514,
738*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_hp_addr_msb = 0x00000518,
739*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_producer_int_setup = 0x00000524,
740*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_msi1_base_lsb = 0x00000548,
741*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_msi1_base_msb = 0x0000054C,
742*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_msi1_data = 0x00000550,
743*5c1def83SBjoern A. Zeeb 	.hal_reo1_aging_thres_ix0 = 0x00000B28,
744*5c1def83SBjoern A. Zeeb 	.hal_reo1_aging_thres_ix1 = 0x00000B2C,
745*5c1def83SBjoern A. Zeeb 	.hal_reo1_aging_thres_ix2 = 0x00000B30,
746*5c1def83SBjoern A. Zeeb 	.hal_reo1_aging_thres_ix3 = 0x00000B34,
747*5c1def83SBjoern A. Zeeb 
748*5c1def83SBjoern A. Zeeb 	/* REO Exception ring address */
749*5c1def83SBjoern A. Zeeb 	.hal_reo2_sw0_ring_base = 0x000008c0,
750*5c1def83SBjoern A. Zeeb 
751*5c1def83SBjoern A. Zeeb 	/* REO Reinject ring address */
752*5c1def83SBjoern A. Zeeb 	.hal_sw2reo_ring_base = 0x00000320,
753*5c1def83SBjoern A. Zeeb 	.hal_sw2reo1_ring_base = 0x00000398,
754*5c1def83SBjoern A. Zeeb 
755*5c1def83SBjoern A. Zeeb 	/* REO cmd ring address */
756*5c1def83SBjoern A. Zeeb 	.hal_reo_cmd_ring_base = 0x000002A8,
757*5c1def83SBjoern A. Zeeb 
758*5c1def83SBjoern A. Zeeb 	/* REO status ring address */
759*5c1def83SBjoern A. Zeeb 	.hal_reo_status_ring_base = 0x00000aa0,
760*5c1def83SBjoern A. Zeeb };
761*5c1def83SBjoern A. Zeeb 
762*5c1def83SBjoern A. Zeeb static const struct ath12k_hw_regs wcn7850_regs = {
763*5c1def83SBjoern A. Zeeb 	/* SW2TCL(x) R0 ring configuration address */
764*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_id = 0x00000908,
765*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_misc = 0x00000910,
766*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_tp_addr_lsb = 0x0000091c,
767*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_tp_addr_msb = 0x00000920,
768*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_consumer_int_setup_ix0 = 0x00000930,
769*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_consumer_int_setup_ix1 = 0x00000934,
770*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_msi1_base_lsb = 0x00000948,
771*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_msi1_base_msb = 0x0000094c,
772*5c1def83SBjoern A. Zeeb 	.hal_tcl1_ring_msi1_data = 0x00000950,
773*5c1def83SBjoern A. Zeeb 	.hal_tcl_ring_base_lsb = 0x00000b58,
774*5c1def83SBjoern A. Zeeb 
775*5c1def83SBjoern A. Zeeb 	/* TCL STATUS ring address */
776*5c1def83SBjoern A. Zeeb 	.hal_tcl_status_ring_base_lsb = 0x00000d38,
777*5c1def83SBjoern A. Zeeb 
778*5c1def83SBjoern A. Zeeb 	.hal_wbm_idle_ring_base_lsb = 0x00000d3c,
779*5c1def83SBjoern A. Zeeb 	.hal_wbm_idle_ring_misc_addr = 0x00000d4c,
780*5c1def83SBjoern A. Zeeb 	.hal_wbm_r0_idle_list_cntl_addr = 0x00000240,
781*5c1def83SBjoern A. Zeeb 	.hal_wbm_r0_idle_list_size_addr = 0x00000244,
782*5c1def83SBjoern A. Zeeb 	.hal_wbm_scattered_ring_base_lsb = 0x00000250,
783*5c1def83SBjoern A. Zeeb 	.hal_wbm_scattered_ring_base_msb = 0x00000254,
784*5c1def83SBjoern A. Zeeb 	.hal_wbm_scattered_desc_head_info_ix0 = 0x00000260,
785*5c1def83SBjoern A. Zeeb 	.hal_wbm_scattered_desc_head_info_ix1 = 0x00000264,
786*5c1def83SBjoern A. Zeeb 	.hal_wbm_scattered_desc_tail_info_ix0 = 0x00000270,
787*5c1def83SBjoern A. Zeeb 	.hal_wbm_scattered_desc_tail_info_ix1 = 0x00000274,
788*5c1def83SBjoern A. Zeeb 	.hal_wbm_scattered_desc_ptr_hp_addr = 0x00000027c,
789*5c1def83SBjoern A. Zeeb 
790*5c1def83SBjoern A. Zeeb 	.hal_wbm_sw_release_ring_base_lsb = 0x0000037c,
791*5c1def83SBjoern A. Zeeb 	.hal_wbm_sw1_release_ring_base_lsb = 0x00000284,
792*5c1def83SBjoern A. Zeeb 	.hal_wbm0_release_ring_base_lsb = 0x00000e08,
793*5c1def83SBjoern A. Zeeb 	.hal_wbm1_release_ring_base_lsb = 0x00000e80,
794*5c1def83SBjoern A. Zeeb 
795*5c1def83SBjoern A. Zeeb 	/* PCIe base address */
796*5c1def83SBjoern A. Zeeb 	.pcie_qserdes_sysclk_en_sel = 0x01e0e0a8,
797*5c1def83SBjoern A. Zeeb 	.pcie_pcs_osc_dtct_config_base = 0x01e0f45c,
798*5c1def83SBjoern A. Zeeb 
799*5c1def83SBjoern A. Zeeb 	/* PPE release ring address */
800*5c1def83SBjoern A. Zeeb 	.hal_ppe_rel_ring_base = 0x0000043c,
801*5c1def83SBjoern A. Zeeb 
802*5c1def83SBjoern A. Zeeb 	/* REO DEST ring address */
803*5c1def83SBjoern A. Zeeb 	.hal_reo2_ring_base = 0x0000055c,
804*5c1def83SBjoern A. Zeeb 	.hal_reo1_misc_ctrl_addr = 0x00000b7c,
805*5c1def83SBjoern A. Zeeb 	.hal_reo1_sw_cookie_cfg0 = 0x00000050,
806*5c1def83SBjoern A. Zeeb 	.hal_reo1_sw_cookie_cfg1 = 0x00000054,
807*5c1def83SBjoern A. Zeeb 	.hal_reo1_qdesc_lut_base0 = 0x00000058,
808*5c1def83SBjoern A. Zeeb 	.hal_reo1_qdesc_lut_base1 = 0x0000005c,
809*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_base_lsb = 0x000004e4,
810*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_base_msb = 0x000004e8,
811*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_id = 0x000004ec,
812*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_misc = 0x000004f4,
813*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_hp_addr_lsb = 0x000004f8,
814*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_hp_addr_msb = 0x000004fc,
815*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_producer_int_setup = 0x00000508,
816*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_msi1_base_lsb = 0x0000052C,
817*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_msi1_base_msb = 0x00000530,
818*5c1def83SBjoern A. Zeeb 	.hal_reo1_ring_msi1_data = 0x00000534,
819*5c1def83SBjoern A. Zeeb 	.hal_reo1_aging_thres_ix0 = 0x00000b08,
820*5c1def83SBjoern A. Zeeb 	.hal_reo1_aging_thres_ix1 = 0x00000b0c,
821*5c1def83SBjoern A. Zeeb 	.hal_reo1_aging_thres_ix2 = 0x00000b10,
822*5c1def83SBjoern A. Zeeb 	.hal_reo1_aging_thres_ix3 = 0x00000b14,
823*5c1def83SBjoern A. Zeeb 
824*5c1def83SBjoern A. Zeeb 	/* REO Exception ring address */
825*5c1def83SBjoern A. Zeeb 	.hal_reo2_sw0_ring_base = 0x000008a4,
826*5c1def83SBjoern A. Zeeb 
827*5c1def83SBjoern A. Zeeb 	/* REO Reinject ring address */
828*5c1def83SBjoern A. Zeeb 	.hal_sw2reo_ring_base = 0x00000304,
829*5c1def83SBjoern A. Zeeb 	.hal_sw2reo1_ring_base = 0x0000037c,
830*5c1def83SBjoern A. Zeeb 
831*5c1def83SBjoern A. Zeeb 	/* REO cmd ring address */
832*5c1def83SBjoern A. Zeeb 	.hal_reo_cmd_ring_base = 0x0000028c,
833*5c1def83SBjoern A. Zeeb 
834*5c1def83SBjoern A. Zeeb 	/* REO status ring address */
835*5c1def83SBjoern A. Zeeb 	.hal_reo_status_ring_base = 0x00000a84,
836*5c1def83SBjoern A. Zeeb };
837*5c1def83SBjoern A. Zeeb 
838*5c1def83SBjoern A. Zeeb static const struct ath12k_hw_hal_params ath12k_hw_hal_params_qcn9274 = {
839*5c1def83SBjoern A. Zeeb 	.rx_buf_rbm = HAL_RX_BUF_RBM_SW3_BM,
840*5c1def83SBjoern A. Zeeb 	.wbm2sw_cc_enable = HAL_WBM_SW_COOKIE_CONV_CFG_WBM2SW0_EN |
841*5c1def83SBjoern A. Zeeb 			    HAL_WBM_SW_COOKIE_CONV_CFG_WBM2SW1_EN |
842*5c1def83SBjoern A. Zeeb 			    HAL_WBM_SW_COOKIE_CONV_CFG_WBM2SW2_EN |
843*5c1def83SBjoern A. Zeeb 			    HAL_WBM_SW_COOKIE_CONV_CFG_WBM2SW3_EN |
844*5c1def83SBjoern A. Zeeb 			    HAL_WBM_SW_COOKIE_CONV_CFG_WBM2SW4_EN,
845*5c1def83SBjoern A. Zeeb };
846*5c1def83SBjoern A. Zeeb 
847*5c1def83SBjoern A. Zeeb static const struct ath12k_hw_hal_params ath12k_hw_hal_params_wcn7850 = {
848*5c1def83SBjoern A. Zeeb 	.rx_buf_rbm = HAL_RX_BUF_RBM_SW1_BM,
849*5c1def83SBjoern A. Zeeb 	.wbm2sw_cc_enable = HAL_WBM_SW_COOKIE_CONV_CFG_WBM2SW0_EN |
850*5c1def83SBjoern A. Zeeb 			    HAL_WBM_SW_COOKIE_CONV_CFG_WBM2SW2_EN |
851*5c1def83SBjoern A. Zeeb 			    HAL_WBM_SW_COOKIE_CONV_CFG_WBM2SW3_EN |
852*5c1def83SBjoern A. Zeeb 			    HAL_WBM_SW_COOKIE_CONV_CFG_WBM2SW4_EN,
853*5c1def83SBjoern A. Zeeb };
854*5c1def83SBjoern A. Zeeb 
855*5c1def83SBjoern A. Zeeb static const struct ath12k_hw_params ath12k_hw_params[] = {
856*5c1def83SBjoern A. Zeeb 	{
857*5c1def83SBjoern A. Zeeb 		.name = "qcn9274 hw1.0",
858*5c1def83SBjoern A. Zeeb 		.hw_rev = ATH12K_HW_QCN9274_HW10,
859*5c1def83SBjoern A. Zeeb 		.fw = {
860*5c1def83SBjoern A. Zeeb 			.dir = "QCN9274/hw1.0",
861*5c1def83SBjoern A. Zeeb 			.board_size = 256 * 1024,
862*5c1def83SBjoern A. Zeeb 			.cal_offset = 128 * 1024,
863*5c1def83SBjoern A. Zeeb 		},
864*5c1def83SBjoern A. Zeeb 		.max_radios = 1,
865*5c1def83SBjoern A. Zeeb 		.single_pdev_only = false,
866*5c1def83SBjoern A. Zeeb 		.qmi_service_ins_id = ATH12K_QMI_WLFW_SERVICE_INS_ID_V01_QCN9274,
867*5c1def83SBjoern A. Zeeb 		.internal_sleep_clock = false,
868*5c1def83SBjoern A. Zeeb 
869*5c1def83SBjoern A. Zeeb 		.hw_ops = &qcn9274_ops,
870*5c1def83SBjoern A. Zeeb 		.ring_mask = &ath12k_hw_ring_mask_qcn9274,
871*5c1def83SBjoern A. Zeeb 		.regs = &qcn9274_v1_regs,
872*5c1def83SBjoern A. Zeeb 
873*5c1def83SBjoern A. Zeeb 		.host_ce_config = ath12k_host_ce_config_qcn9274,
874*5c1def83SBjoern A. Zeeb 		.ce_count = 16,
875*5c1def83SBjoern A. Zeeb 		.target_ce_config = ath12k_target_ce_config_wlan_qcn9274,
876*5c1def83SBjoern A. Zeeb 		.target_ce_count = 12,
877*5c1def83SBjoern A. Zeeb 		.svc_to_ce_map = ath12k_target_service_to_ce_map_wlan_qcn9274,
878*5c1def83SBjoern A. Zeeb 		.svc_to_ce_map_len = 18,
879*5c1def83SBjoern A. Zeeb 
880*5c1def83SBjoern A. Zeeb 		.hal_params = &ath12k_hw_hal_params_qcn9274,
881*5c1def83SBjoern A. Zeeb 
882*5c1def83SBjoern A. Zeeb 		.rxdma1_enable = false,
883*5c1def83SBjoern A. Zeeb 		.num_rxmda_per_pdev = 1,
884*5c1def83SBjoern A. Zeeb 		.num_rxdma_dst_ring = 0,
885*5c1def83SBjoern A. Zeeb 		.rx_mac_buf_ring = false,
886*5c1def83SBjoern A. Zeeb 		.vdev_start_delay = false,
887*5c1def83SBjoern A. Zeeb 
888*5c1def83SBjoern A. Zeeb 		.interface_modes = BIT(NL80211_IFTYPE_STATION) |
889*5c1def83SBjoern A. Zeeb 					BIT(NL80211_IFTYPE_AP),
890*5c1def83SBjoern A. Zeeb 		.supports_monitor = false,
891*5c1def83SBjoern A. Zeeb 
892*5c1def83SBjoern A. Zeeb 		.idle_ps = false,
893*5c1def83SBjoern A. Zeeb 		.download_calib = true,
894*5c1def83SBjoern A. Zeeb 		.supports_suspend = false,
895*5c1def83SBjoern A. Zeeb 		.tcl_ring_retry = true,
896*5c1def83SBjoern A. Zeeb 		.reoq_lut_support = false,
897*5c1def83SBjoern A. Zeeb 		.supports_shadow_regs = false,
898*5c1def83SBjoern A. Zeeb 
899*5c1def83SBjoern A. Zeeb 		.hal_desc_sz = sizeof(struct hal_rx_desc_qcn9274),
900*5c1def83SBjoern A. Zeeb 		.num_tcl_banks = 48,
901*5c1def83SBjoern A. Zeeb 		.max_tx_ring = 4,
902*5c1def83SBjoern A. Zeeb 
903*5c1def83SBjoern A. Zeeb 		.mhi_config = &ath12k_mhi_config_qcn9274,
904*5c1def83SBjoern A. Zeeb 
905*5c1def83SBjoern A. Zeeb 		.wmi_init = ath12k_wmi_init_qcn9274,
906*5c1def83SBjoern A. Zeeb 
907*5c1def83SBjoern A. Zeeb 		.hal_ops = &hal_qcn9274_ops,
908*5c1def83SBjoern A. Zeeb 
909*5c1def83SBjoern A. Zeeb 		.qmi_cnss_feature_bitmap = BIT(CNSS_QDSS_CFG_MISS_V01),
910*5c1def83SBjoern A. Zeeb 	},
911*5c1def83SBjoern A. Zeeb 	{
912*5c1def83SBjoern A. Zeeb 		.name = "wcn7850 hw2.0",
913*5c1def83SBjoern A. Zeeb 		.hw_rev = ATH12K_HW_WCN7850_HW20,
914*5c1def83SBjoern A. Zeeb 
915*5c1def83SBjoern A. Zeeb 		.fw = {
916*5c1def83SBjoern A. Zeeb 			.dir = "WCN7850/hw2.0",
917*5c1def83SBjoern A. Zeeb 			.board_size = 256 * 1024,
918*5c1def83SBjoern A. Zeeb 			.cal_offset = 256 * 1024,
919*5c1def83SBjoern A. Zeeb 		},
920*5c1def83SBjoern A. Zeeb 
921*5c1def83SBjoern A. Zeeb 		.max_radios = 1,
922*5c1def83SBjoern A. Zeeb 		.single_pdev_only = true,
923*5c1def83SBjoern A. Zeeb 		.qmi_service_ins_id = ATH12K_QMI_WLFW_SERVICE_INS_ID_V01_WCN7850,
924*5c1def83SBjoern A. Zeeb 		.internal_sleep_clock = true,
925*5c1def83SBjoern A. Zeeb 
926*5c1def83SBjoern A. Zeeb 		.hw_ops = &wcn7850_ops,
927*5c1def83SBjoern A. Zeeb 		.ring_mask = &ath12k_hw_ring_mask_wcn7850,
928*5c1def83SBjoern A. Zeeb 		.regs = &wcn7850_regs,
929*5c1def83SBjoern A. Zeeb 
930*5c1def83SBjoern A. Zeeb 		.host_ce_config = ath12k_host_ce_config_wcn7850,
931*5c1def83SBjoern A. Zeeb 		.ce_count = 9,
932*5c1def83SBjoern A. Zeeb 		.target_ce_config = ath12k_target_ce_config_wlan_wcn7850,
933*5c1def83SBjoern A. Zeeb 		.target_ce_count = 9,
934*5c1def83SBjoern A. Zeeb 		.svc_to_ce_map = ath12k_target_service_to_ce_map_wlan_wcn7850,
935*5c1def83SBjoern A. Zeeb 		.svc_to_ce_map_len = 14,
936*5c1def83SBjoern A. Zeeb 
937*5c1def83SBjoern A. Zeeb 		.hal_params = &ath12k_hw_hal_params_wcn7850,
938*5c1def83SBjoern A. Zeeb 
939*5c1def83SBjoern A. Zeeb 		.rxdma1_enable = false,
940*5c1def83SBjoern A. Zeeb 		.num_rxmda_per_pdev = 2,
941*5c1def83SBjoern A. Zeeb 		.num_rxdma_dst_ring = 1,
942*5c1def83SBjoern A. Zeeb 		.rx_mac_buf_ring = true,
943*5c1def83SBjoern A. Zeeb 		.vdev_start_delay = true,
944*5c1def83SBjoern A. Zeeb 
945*5c1def83SBjoern A. Zeeb 		.interface_modes = BIT(NL80211_IFTYPE_STATION),
946*5c1def83SBjoern A. Zeeb 		.supports_monitor = false,
947*5c1def83SBjoern A. Zeeb 
948*5c1def83SBjoern A. Zeeb 		.idle_ps = true,
949*5c1def83SBjoern A. Zeeb 		.download_calib = false,
950*5c1def83SBjoern A. Zeeb 		.supports_suspend = false,
951*5c1def83SBjoern A. Zeeb 		.tcl_ring_retry = false,
952*5c1def83SBjoern A. Zeeb 		.reoq_lut_support = false,
953*5c1def83SBjoern A. Zeeb 		.supports_shadow_regs = true,
954*5c1def83SBjoern A. Zeeb 
955*5c1def83SBjoern A. Zeeb 		.hal_desc_sz = sizeof(struct hal_rx_desc_wcn7850),
956*5c1def83SBjoern A. Zeeb 		.num_tcl_banks = 7,
957*5c1def83SBjoern A. Zeeb 		.max_tx_ring = 3,
958*5c1def83SBjoern A. Zeeb 
959*5c1def83SBjoern A. Zeeb 		.mhi_config = &ath12k_mhi_config_wcn7850,
960*5c1def83SBjoern A. Zeeb 
961*5c1def83SBjoern A. Zeeb 		.wmi_init = ath12k_wmi_init_wcn7850,
962*5c1def83SBjoern A. Zeeb 
963*5c1def83SBjoern A. Zeeb 		.hal_ops = &hal_wcn7850_ops,
964*5c1def83SBjoern A. Zeeb 
965*5c1def83SBjoern A. Zeeb 		.qmi_cnss_feature_bitmap = BIT(CNSS_QDSS_CFG_MISS_V01) |
966*5c1def83SBjoern A. Zeeb 					   BIT(CNSS_PCIE_PERST_NO_PULL_V01),
967*5c1def83SBjoern A. Zeeb 	},
968*5c1def83SBjoern A. Zeeb 	{
969*5c1def83SBjoern A. Zeeb 		.name = "qcn9274 hw2.0",
970*5c1def83SBjoern A. Zeeb 		.hw_rev = ATH12K_HW_QCN9274_HW20,
971*5c1def83SBjoern A. Zeeb 		.fw = {
972*5c1def83SBjoern A. Zeeb 			.dir = "QCN9274/hw2.0",
973*5c1def83SBjoern A. Zeeb 			.board_size = 256 * 1024,
974*5c1def83SBjoern A. Zeeb 			.cal_offset = 128 * 1024,
975*5c1def83SBjoern A. Zeeb 		},
976*5c1def83SBjoern A. Zeeb 		.max_radios = 1,
977*5c1def83SBjoern A. Zeeb 		.single_pdev_only = false,
978*5c1def83SBjoern A. Zeeb 		.qmi_service_ins_id = ATH12K_QMI_WLFW_SERVICE_INS_ID_V01_QCN9274,
979*5c1def83SBjoern A. Zeeb 		.internal_sleep_clock = false,
980*5c1def83SBjoern A. Zeeb 
981*5c1def83SBjoern A. Zeeb 		.hw_ops = &qcn9274_ops,
982*5c1def83SBjoern A. Zeeb 		.ring_mask = &ath12k_hw_ring_mask_qcn9274,
983*5c1def83SBjoern A. Zeeb 		.regs = &qcn9274_v2_regs,
984*5c1def83SBjoern A. Zeeb 
985*5c1def83SBjoern A. Zeeb 		.host_ce_config = ath12k_host_ce_config_qcn9274,
986*5c1def83SBjoern A. Zeeb 		.ce_count = 16,
987*5c1def83SBjoern A. Zeeb 		.target_ce_config = ath12k_target_ce_config_wlan_qcn9274,
988*5c1def83SBjoern A. Zeeb 		.target_ce_count = 12,
989*5c1def83SBjoern A. Zeeb 		.svc_to_ce_map = ath12k_target_service_to_ce_map_wlan_qcn9274,
990*5c1def83SBjoern A. Zeeb 		.svc_to_ce_map_len = 18,
991*5c1def83SBjoern A. Zeeb 
992*5c1def83SBjoern A. Zeeb 		.hal_params = &ath12k_hw_hal_params_qcn9274,
993*5c1def83SBjoern A. Zeeb 
994*5c1def83SBjoern A. Zeeb 		.rxdma1_enable = false,
995*5c1def83SBjoern A. Zeeb 		.num_rxmda_per_pdev = 1,
996*5c1def83SBjoern A. Zeeb 		.num_rxdma_dst_ring = 0,
997*5c1def83SBjoern A. Zeeb 		.rx_mac_buf_ring = false,
998*5c1def83SBjoern A. Zeeb 		.vdev_start_delay = false,
999*5c1def83SBjoern A. Zeeb 
1000*5c1def83SBjoern A. Zeeb 		.interface_modes = BIT(NL80211_IFTYPE_STATION) |
1001*5c1def83SBjoern A. Zeeb 					BIT(NL80211_IFTYPE_AP),
1002*5c1def83SBjoern A. Zeeb 		.supports_monitor = false,
1003*5c1def83SBjoern A. Zeeb 
1004*5c1def83SBjoern A. Zeeb 		.idle_ps = false,
1005*5c1def83SBjoern A. Zeeb 		.download_calib = true,
1006*5c1def83SBjoern A. Zeeb 		.supports_suspend = false,
1007*5c1def83SBjoern A. Zeeb 		.tcl_ring_retry = true,
1008*5c1def83SBjoern A. Zeeb 		.reoq_lut_support = false,
1009*5c1def83SBjoern A. Zeeb 		.supports_shadow_regs = false,
1010*5c1def83SBjoern A. Zeeb 
1011*5c1def83SBjoern A. Zeeb 		.hal_desc_sz = sizeof(struct hal_rx_desc_qcn9274),
1012*5c1def83SBjoern A. Zeeb 		.num_tcl_banks = 48,
1013*5c1def83SBjoern A. Zeeb 		.max_tx_ring = 4,
1014*5c1def83SBjoern A. Zeeb 
1015*5c1def83SBjoern A. Zeeb 		.mhi_config = &ath12k_mhi_config_qcn9274,
1016*5c1def83SBjoern A. Zeeb 
1017*5c1def83SBjoern A. Zeeb 		.wmi_init = ath12k_wmi_init_qcn9274,
1018*5c1def83SBjoern A. Zeeb 
1019*5c1def83SBjoern A. Zeeb 		.hal_ops = &hal_qcn9274_ops,
1020*5c1def83SBjoern A. Zeeb 
1021*5c1def83SBjoern A. Zeeb 		.qmi_cnss_feature_bitmap = BIT(CNSS_QDSS_CFG_MISS_V01),
1022*5c1def83SBjoern A. Zeeb 	},
1023*5c1def83SBjoern A. Zeeb };
1024*5c1def83SBjoern A. Zeeb 
ath12k_hw_init(struct ath12k_base * ab)1025*5c1def83SBjoern A. Zeeb int ath12k_hw_init(struct ath12k_base *ab)
1026*5c1def83SBjoern A. Zeeb {
1027*5c1def83SBjoern A. Zeeb 	const struct ath12k_hw_params *hw_params = NULL;
1028*5c1def83SBjoern A. Zeeb 	int i;
1029*5c1def83SBjoern A. Zeeb 
1030*5c1def83SBjoern A. Zeeb 	for (i = 0; i < ARRAY_SIZE(ath12k_hw_params); i++) {
1031*5c1def83SBjoern A. Zeeb 		hw_params = &ath12k_hw_params[i];
1032*5c1def83SBjoern A. Zeeb 
1033*5c1def83SBjoern A. Zeeb 		if (hw_params->hw_rev == ab->hw_rev)
1034*5c1def83SBjoern A. Zeeb 			break;
1035*5c1def83SBjoern A. Zeeb 	}
1036*5c1def83SBjoern A. Zeeb 
1037*5c1def83SBjoern A. Zeeb 	if (i == ARRAY_SIZE(ath12k_hw_params)) {
1038*5c1def83SBjoern A. Zeeb 		ath12k_err(ab, "Unsupported hardware version: 0x%x\n", ab->hw_rev);
1039*5c1def83SBjoern A. Zeeb 		return -EINVAL;
1040*5c1def83SBjoern A. Zeeb 	}
1041*5c1def83SBjoern A. Zeeb 
1042*5c1def83SBjoern A. Zeeb 	ab->hw_params = hw_params;
1043*5c1def83SBjoern A. Zeeb 
1044*5c1def83SBjoern A. Zeeb 	ath12k_info(ab, "Hardware name: %s\n", ab->hw_params->name);
1045*5c1def83SBjoern A. Zeeb 
1046*5c1def83SBjoern A. Zeeb 	return 0;
1047*5c1def83SBjoern A. Zeeb }
1048