1 /* 2 * Copyright (c) 2013-2021 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2021-2022 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 #endif /* KIWI_HEADERS_DEF */ 212 213 #if defined(QCA6750_HEADERS_DEF) 214 case TARGET_TYPE_QCA6750: 215 scn->targetdef = QCA6750_TARGETdef; 216 scn->target_ce_def = QCA6750_CE_TARGETdef; 217 hif_info("TARGET_TYPE_QCA6750"); 218 break; 219 #endif /* QCA6750_HEADERS_DEF */ 220 default: 221 break; 222 } 223 } 224 225 void hif_register_tbl_attach(struct hif_softc *scn, u32 hif_type) 226 { 227 switch (hif_type) { 228 case HIF_TYPE_AR6320V2: 229 scn->hostdef = &ar6320v2_hostdef; 230 break; 231 case HIF_TYPE_ADRASTEA: 232 scn->hostdef = &adrastea_hostdef; 233 scn->host_shadow_regs = &adrastea_host_shadow_regs; 234 break; 235 case HIF_TYPE_QCN7605: 236 scn->hostdef = &genoa_hostdef; 237 scn->host_shadow_regs = &genoa_host_shadow_regs; 238 break; 239 #if defined(AR6002_HEADERS_DEF) 240 case HIF_TYPE_AR6002: 241 scn->hostdef = AR6002_HOSTdef; 242 break; 243 #endif 244 #if defined(AR6003_HEADERS_DEF) 245 case HIF_TYPE_AR6003: 246 scn->hostdef = AR6003_HOSTdef; 247 break; 248 #endif 249 #if defined(AR6004_HEADERS_DEF) 250 case HIF_TYPE_AR6004: 251 scn->hostdef = AR6004_HOSTdef; 252 break; 253 #endif 254 #if defined(AR9888_HEADERS_DEF) 255 case HIF_TYPE_AR9888: 256 scn->hostdef = AR9888_HOSTdef; 257 break; 258 #endif 259 #if defined(AR9888V2_HEADERS_DEF) 260 case HIF_TYPE_AR9888V2: 261 scn->hostdef = AR9888V2_HOSTdef; 262 break; 263 #endif 264 #if defined(AR900B_HEADERS_DEF) 265 case HIF_TYPE_AR900B: 266 scn->hostdef = AR900B_HOSTdef; 267 break; 268 #endif 269 #if defined(QCA9984_HEADERS_DEF) 270 case HIF_TYPE_QCA9984: 271 scn->hostdef = QCA9984_HOSTdef; 272 break; 273 #endif 274 #if defined(QCA9888_HEADERS_DEF) 275 case HIF_TYPE_QCA9888: 276 scn->hostdef = QCA9888_HOSTdef; 277 break; 278 #endif 279 280 #if defined(QCA8074_HEADERS_DEF) 281 case HIF_TYPE_QCA8074: 282 scn->hostdef = QCA8074_HOSTdef; 283 break; 284 #endif 285 #if defined(QCA8074V2_HEADERS_DEF) 286 case HIF_TYPE_QCA8074V2: 287 scn->hostdef = QCA8074V2_HOSTDEF; 288 break; 289 #endif 290 #if defined(QCA6018_HEADERS_DEF) 291 case HIF_TYPE_QCA6018: 292 scn->hostdef = QCA6018_HOSTDEF; 293 hif_info("HIF_TYPE_QCA6018"); 294 break; 295 #endif 296 #if defined(QCA6290_HEADERS_DEF) 297 case HIF_TYPE_QCA6290: 298 scn->hostdef = QCA6290_HOSTdef; 299 break; 300 #endif 301 #if defined(QCN9000_HEADERS_DEF) 302 case HIF_TYPE_QCN9000: 303 scn->hostdef = QCN9000_HOSTDEF; 304 break; 305 #endif 306 #if defined(QCN9224_HEADERS_DEF) 307 case HIF_TYPE_QCN9224: 308 if (scn->target_info.soc_version == 1) { 309 scn->hostdef = QCN9224v1_HOSTDEF; 310 break; 311 } 312 scn->hostdef = QCN9224_HOSTDEF; 313 break; 314 #endif 315 #if defined(QCN6122_HEADERS_DEF) 316 case HIF_TYPE_QCN6122: 317 scn->hostdef = QCN6122_HOSTDEF; 318 break; 319 #endif 320 #if defined(QCN9160_HEADERS_DEF) 321 case HIF_TYPE_QCN9160: 322 scn->hostdef = QCN9160_HOSTDEF; 323 break; 324 #endif 325 #if defined(QCA5018_HEADERS_DEF) 326 case HIF_TYPE_QCA5018: 327 scn->hostdef = QCA5018_HOSTDEF; 328 break; 329 #endif 330 #if defined(QCA5332_HEADERS_DEF) 331 case HIF_TYPE_QCA5332: 332 scn->hostdef = QCA5332_HOSTDEF; 333 break; 334 #endif 335 #if defined(QCA9574_HEADERS_DEF) 336 case HIF_TYPE_QCA9574: 337 scn->hostdef = QCA9574_HOSTDEF; 338 hif_info("HIF_TYPE_QCA9574"); 339 break; 340 #endif 341 342 #if defined(QCA6390_HEADERS_DEF) 343 case HIF_TYPE_QCA6390: 344 scn->hostdef = QCA6390_HOSTdef; 345 hif_info("HIF_TYPE_QCA6390"); 346 break; 347 #endif /* QCA6390_HEADERS_DEF */ 348 349 #if defined(QCA6490_HEADERS_DEF) 350 case HIF_TYPE_QCA6490: 351 scn->hostdef = QCA6490_HOSTdef; 352 hif_info("HIF_TYPE_QCA6490"); 353 break; 354 #endif /* QCA6490_HEADERS_DEF */ 355 356 #if defined(KIWI_HEADERS_DEF) 357 case HIF_TYPE_KIWI: 358 scn->hostdef = KIWI_HOSTdef; 359 hif_info("HIF_TYPE_KIWI"); 360 break; 361 362 case HIF_TYPE_MANGO: 363 scn->hostdef = KIWI_HOSTdef; 364 hif_info("HIF_TYPE_MANGO"); 365 break; 366 #endif /* KIWI_HEADERS_DEF */ 367 368 #if defined(QCA6750_HEADERS_DEF) 369 case HIF_TYPE_QCA6750: 370 scn->hostdef = QCA6750_HOSTdef; 371 hif_info("HIF_TYPE_QCA6750"); 372 break; 373 #endif /* QCA6750_HEADERS_DEF */ 374 default: 375 break; 376 } 377 } 378