xref: /wlan-dirver/qca-wifi-host-cmn/hif/src/regtable.c (revision d6afad86bc009b876d2fed6077b76d65d5606d50) !
1 /*
2  * Copyright (c) 2013-2021 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 #include "targaddrs.h"
21 #include "target_type.h"
22 #include "cepci.h"
23 #include "regtable.h"
24 #include "ar6320def.h"
25 #include "ar6320v2def.h"
26 #include "hif_main.h"
27 #include "adrastea_reg_def.h"
28 
29 #include "targetdef.h"
30 #include "hostdef.h"
31 
32 void hif_target_register_tbl_attach(struct hif_softc *scn, u32 target_type)
33 {
34 	switch (target_type) {
35 	case TARGET_TYPE_AR6320:
36 		scn->targetdef = &ar6320_targetdef;
37 		scn->target_ce_def = &ar6320_ce_targetdef;
38 		break;
39 	case TARGET_TYPE_AR6320V2:
40 		scn->targetdef = &ar6320v2_targetdef;
41 		scn->target_ce_def = &ar6320v2_ce_targetdef;
42 		break;
43 	case TARGET_TYPE_ADRASTEA:
44 		scn->targetdef = &adrastea_targetdef;
45 		scn->target_ce_def = &adrastea_ce_targetdef;
46 		break;
47 	case TARGET_TYPE_QCN7605:
48 		scn->targetdef = &genoa_targetdef;
49 		scn->target_ce_def = &genoa_ce_targetdef;
50 		break;
51 #if defined(AR6002_HEADERS_DEF)
52 	case TARGET_TYPE_AR6002:
53 		scn->targetdef = AR6002_TARGETdef;
54 		break;
55 #endif
56 #if defined(AR6003_HEADERS_DEF)
57 	case TARGET_TYPE_AR6003:
58 		scn->targetdef = AR6003_TARGETdef;
59 		break;
60 #endif
61 #if defined(AR6004_HEADERS_DEF)
62 	case TARGET_TYPE_AR6004:
63 		scn->targetdef = AR6004_TARGETdef;
64 		break;
65 #endif
66 #if defined(AR9888_HEADERS_DEF)
67 	case TARGET_TYPE_AR9888:
68 		scn->targetdef = AR9888_TARGETdef;
69 		scn->target_ce_def = AR9888_CE_TARGETdef;
70 		break;
71 #endif
72 #if defined(AR9888V2_HEADERS_DEF)
73 	case TARGET_TYPE_AR9888V2:
74 		scn->targetdef = AR9888V2_TARGETdef;
75 		scn->target_ce_def = AR9888_CE_TARGETdef;
76 		break;
77 #endif
78 #if defined(AR900B_HEADERS_DEF)
79 	case TARGET_TYPE_AR900B:
80 		scn->targetdef = AR900B_TARGETdef;
81 		scn->target_ce_def = AR900B_CE_TARGETdef;
82 		break;
83 #endif
84 #if defined(QCA9984_HEADERS_DEF)
85 	case TARGET_TYPE_QCA9984:
86 		scn->targetdef = QCA9984_TARGETdef;
87 		scn->target_ce_def = QCA9984_CE_TARGETdef;
88 		break;
89 #endif
90 #if defined(QCA9888_HEADERS_DEF)
91 	case TARGET_TYPE_QCA9888:
92 		scn->targetdef = QCA9888_TARGETdef;
93 		scn->target_ce_def = QCA9888_CE_TARGETdef;
94 		break;
95 #endif
96 #if defined(QCA8074_HEADERS_DEF)
97 	case TARGET_TYPE_QCA8074:
98 		scn->targetdef = QCA8074_TARGETdef;
99 		scn->target_ce_def = QCA8074_CE_TARGETdef;
100 		break;
101 #endif
102 
103 #if defined(QCA6290_HEADERS_DEF)
104 	case TARGET_TYPE_QCA6290:
105 		scn->targetdef = QCA6290_TARGETdef;
106 		scn->target_ce_def = QCA6290_CE_TARGETdef;
107 		break;
108 #endif
109 #if defined(QCA8074V2_HEADERS_DEF)
110 	case TARGET_TYPE_QCA8074V2:
111 		scn->targetdef = QCA8074V2_TARGETDEF;
112 		scn->target_ce_def = QCA8074V2_CE_TARGETDEF;
113 		break;
114 #endif
115 #if defined(QCA6018_HEADERS_DEF)
116 	case TARGET_TYPE_QCA6018:
117 		scn->targetdef = QCA6018_TARGETDEF;
118 		scn->target_ce_def = QCA6018_CE_TARGETDEF;
119 		break;
120 #endif
121 #if defined(QCA9574_HEADERS_DEF)
122 	case TARGET_TYPE_QCA9574:
123 		scn->targetdef = QCA9574_TARGETDEF;
124 		scn->target_ce_def = QCA9574_CE_TARGETDEF;
125 		hif_info("TARGET_TYPE_QCA9574");
126 		break;
127 #endif
128 
129 #if defined(QCN9000_HEADERS_DEF)
130 	case TARGET_TYPE_QCN9000:
131 		scn->targetdef = QCN9000_TARGETDEF;
132 		scn->target_ce_def = QCN9000_CE_TARGETDEF;
133 		hif_info("TARGET_TYPE_QCN9000");
134 		break;
135 #endif
136 
137 #if defined(QCN9224_HEADERS_DEF)
138 	case TARGET_TYPE_QCN9224:
139 		if (scn->target_info.soc_version == 1) {
140 			scn->targetdef = QCN9224v1_TARGETDEF;
141 			scn->target_ce_def = QCN9224v1_CE_TARGETDEF;
142 			hif_info("TARGET_TYPE_QCN9224v1");
143 			break;
144 		}
145 		scn->targetdef = QCN9224_TARGETDEF;
146 		scn->target_ce_def = QCN9224_CE_TARGETDEF;
147 		hif_info("TARGET_TYPE_QCN9224");
148 		break;
149 #endif
150 
151 #if defined(QCN6122_HEADERS_DEF)
152 	case TARGET_TYPE_QCN6122:
153 		scn->targetdef = QCN6122_TARGETDEF;
154 		scn->target_ce_def = QCN6122_CE_TARGETDEF;
155 		hif_info("TARGET_TYPE_QCN6122");
156 		break;
157 #endif
158 
159 #if defined(QCN9160_HEADERS_DEF)
160 	case TARGET_TYPE_QCN9160:
161 		scn->targetdef = QCN9160_TARGETDEF;
162 		scn->target_ce_def = QCN9160_CE_TARGETDEF;
163 		hif_info("TARGET_TYPE_QCN9160");
164 		break;
165 #endif
166 
167 #if defined(QCA5018_HEADERS_DEF)
168 	case TARGET_TYPE_QCA5018:
169 		scn->targetdef = QCA5018_TARGETDEF;
170 		scn->target_ce_def = QCA5018_CE_TARGETDEF;
171 		hif_info("TARGET_TYPE_QCA5018");
172 		break;
173 #endif
174 
175 #if defined(QCA5332_HEADERS_DEF)
176 	case TARGET_TYPE_QCA5332:
177 		scn->targetdef = QCA5332_TARGETDEF;
178 		scn->target_ce_def = QCA5332_CE_TARGETDEF;
179 		hif_info("TARGET_TYPE_QCA5332");
180 		break;
181 #endif
182 
183 #if defined(QCA6390_HEADERS_DEF)
184 	case TARGET_TYPE_QCA6390:
185 		scn->targetdef = QCA6390_TARGETdef;
186 		scn->target_ce_def = QCA6390_CE_TARGETdef;
187 		hif_info("TARGET_TYPE_QCA6390");
188 		break;
189 #endif /* QCA6390_HEADERS_DEF */
190 
191 #if defined(QCA6490_HEADERS_DEF)
192 	case TARGET_TYPE_QCA6490:
193 		scn->targetdef = QCA6490_TARGETdef;
194 		scn->target_ce_def = QCA6490_CE_TARGETdef;
195 		hif_info("TARGET_TYPE_QCA6490");
196 		break;
197 #endif /* QCA6490_HEADERS_DEF */
198 
199 #if defined(KIWI_HEADERS_DEF)
200 	case TARGET_TYPE_KIWI:
201 		scn->targetdef = KIWI_TARGETdef;
202 		scn->target_ce_def = KIWI_CE_TARGETdef;
203 		hif_info("TARGET_TYPE_KIWI");
204 		break;
205 
206 	case TARGET_TYPE_MANGO:
207 		scn->targetdef = KIWI_TARGETdef;
208 		scn->target_ce_def = KIWI_CE_TARGETdef;
209 		hif_info("TARGET_TYPE_MANGO");
210 		break;
211 
212 	case TARGET_TYPE_PEACH:
213 		scn->targetdef = KIWI_TARGETdef;
214 		scn->target_ce_def = KIWI_CE_TARGETdef;
215 		hif_info("TARGET_TYPE_PEACH");
216 		break;
217 #endif /* KIWI_HEADERS_DEF */
218 
219 #if defined(QCA6750_HEADERS_DEF)
220 	case TARGET_TYPE_QCA6750:
221 		scn->targetdef = QCA6750_TARGETdef;
222 		scn->target_ce_def = QCA6750_CE_TARGETdef;
223 		hif_info("TARGET_TYPE_QCA6750");
224 		break;
225 #endif /* QCA6750_HEADERS_DEF */
226 	default:
227 		break;
228 	}
229 }
230 
231 void hif_register_tbl_attach(struct hif_softc *scn, u32 hif_type)
232 {
233 	switch (hif_type) {
234 	case HIF_TYPE_AR6320V2:
235 		scn->hostdef = &ar6320v2_hostdef;
236 		break;
237 	case HIF_TYPE_ADRASTEA:
238 		scn->hostdef = &adrastea_hostdef;
239 		scn->host_shadow_regs = &adrastea_host_shadow_regs;
240 		break;
241 	case HIF_TYPE_QCN7605:
242 		scn->hostdef = &genoa_hostdef;
243 		scn->host_shadow_regs = &genoa_host_shadow_regs;
244 		break;
245 #if defined(AR6002_HEADERS_DEF)
246 	case HIF_TYPE_AR6002:
247 		scn->hostdef = AR6002_HOSTdef;
248 		break;
249 #endif
250 #if defined(AR6003_HEADERS_DEF)
251 	case HIF_TYPE_AR6003:
252 		scn->hostdef = AR6003_HOSTdef;
253 		break;
254 #endif
255 #if defined(AR6004_HEADERS_DEF)
256 	case HIF_TYPE_AR6004:
257 		scn->hostdef = AR6004_HOSTdef;
258 		break;
259 #endif
260 #if defined(AR9888_HEADERS_DEF)
261 	case HIF_TYPE_AR9888:
262 		scn->hostdef = AR9888_HOSTdef;
263 		break;
264 #endif
265 #if defined(AR9888V2_HEADERS_DEF)
266 	case HIF_TYPE_AR9888V2:
267 		scn->hostdef = AR9888V2_HOSTdef;
268 		break;
269 #endif
270 #if defined(AR900B_HEADERS_DEF)
271 	case HIF_TYPE_AR900B:
272 		scn->hostdef = AR900B_HOSTdef;
273 		break;
274 #endif
275 #if defined(QCA9984_HEADERS_DEF)
276 	case HIF_TYPE_QCA9984:
277 		scn->hostdef = QCA9984_HOSTdef;
278 		break;
279 #endif
280 #if defined(QCA9888_HEADERS_DEF)
281 	case HIF_TYPE_QCA9888:
282 		scn->hostdef = QCA9888_HOSTdef;
283 		break;
284 #endif
285 
286 #if defined(QCA8074_HEADERS_DEF)
287 	case HIF_TYPE_QCA8074:
288 		scn->hostdef = QCA8074_HOSTdef;
289 		break;
290 #endif
291 #if defined(QCA8074V2_HEADERS_DEF)
292 	case HIF_TYPE_QCA8074V2:
293 		scn->hostdef = QCA8074V2_HOSTDEF;
294 		break;
295 #endif
296 #if defined(QCA6018_HEADERS_DEF)
297 	case HIF_TYPE_QCA6018:
298 		scn->hostdef = QCA6018_HOSTDEF;
299 		hif_info("HIF_TYPE_QCA6018");
300 		break;
301 #endif
302 #if defined(QCA6290_HEADERS_DEF)
303 	case HIF_TYPE_QCA6290:
304 		scn->hostdef = QCA6290_HOSTdef;
305 		break;
306 #endif
307 #if defined(QCN9000_HEADERS_DEF)
308 	case HIF_TYPE_QCN9000:
309 		scn->hostdef = QCN9000_HOSTDEF;
310 		break;
311 #endif
312 #if defined(QCN9224_HEADERS_DEF)
313 	case HIF_TYPE_QCN9224:
314 		if (scn->target_info.soc_version == 1) {
315 			scn->hostdef = QCN9224v1_HOSTDEF;
316 			break;
317 		}
318 		scn->hostdef = QCN9224_HOSTDEF;
319 		break;
320 #endif
321 #if defined(QCN6122_HEADERS_DEF)
322 	case HIF_TYPE_QCN6122:
323 		scn->hostdef = QCN6122_HOSTDEF;
324 		break;
325 #endif
326 #if defined(QCN9160_HEADERS_DEF)
327 	case HIF_TYPE_QCN9160:
328 		scn->hostdef = QCN9160_HOSTDEF;
329 		break;
330 #endif
331 #if defined(QCA5018_HEADERS_DEF)
332 	case HIF_TYPE_QCA5018:
333 		scn->hostdef = QCA5018_HOSTDEF;
334 		break;
335 #endif
336 #if defined(QCA5332_HEADERS_DEF)
337 	case HIF_TYPE_QCA5332:
338 		scn->hostdef = QCA5332_HOSTDEF;
339 		break;
340 #endif
341 #if defined(QCA9574_HEADERS_DEF)
342 	case HIF_TYPE_QCA9574:
343 		scn->hostdef = QCA9574_HOSTDEF;
344 		hif_info("HIF_TYPE_QCA9574");
345 		break;
346 #endif
347 
348 #if defined(QCA6390_HEADERS_DEF)
349 	case HIF_TYPE_QCA6390:
350 		scn->hostdef = QCA6390_HOSTdef;
351 		hif_info("HIF_TYPE_QCA6390");
352 		break;
353 #endif /* QCA6390_HEADERS_DEF */
354 
355 #if defined(QCA6490_HEADERS_DEF)
356 	case HIF_TYPE_QCA6490:
357 		scn->hostdef = QCA6490_HOSTdef;
358 		hif_info("HIF_TYPE_QCA6490");
359 		break;
360 #endif /* QCA6490_HEADERS_DEF */
361 
362 #if defined(KIWI_HEADERS_DEF)
363 	case HIF_TYPE_KIWI:
364 		scn->hostdef = KIWI_HOSTdef;
365 		hif_info("HIF_TYPE_KIWI");
366 		break;
367 
368 	case HIF_TYPE_MANGO:
369 		scn->hostdef = KIWI_HOSTdef;
370 		hif_info("HIF_TYPE_MANGO");
371 		break;
372 
373 	case HIF_TYPE_PEACH:
374 		scn->hostdef = KIWI_HOSTdef;
375 		hif_info("HIF_TYPE_PEACH");
376 		break;
377 #endif /* KIWI_HEADERS_DEF */
378 
379 #if defined(QCA6750_HEADERS_DEF)
380 	case HIF_TYPE_QCA6750:
381 		scn->hostdef = QCA6750_HOSTdef;
382 		hif_info("HIF_TYPE_QCA6750");
383 		break;
384 #endif /* QCA6750_HEADERS_DEF */
385 	default:
386 		break;
387 	}
388 }
389