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