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