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(QCA5018_HEADERS_DEF) 160 case TARGET_TYPE_QCA5018: 161 scn->targetdef = QCA5018_TARGETDEF; 162 scn->target_ce_def = QCA5018_CE_TARGETDEF; 163 hif_info("TARGET_TYPE_QCA5018"); 164 break; 165 #endif 166 167 #if defined(QCA5332_HEADERS_DEF) 168 case TARGET_TYPE_QCA5332: 169 scn->targetdef = QCA5332_TARGETDEF; 170 scn->target_ce_def = QCA5332_CE_TARGETDEF; 171 hif_info("TARGET_TYPE_QCA5332"); 172 break; 173 #endif 174 175 #if defined(QCA6390_HEADERS_DEF) 176 case TARGET_TYPE_QCA6390: 177 scn->targetdef = QCA6390_TARGETdef; 178 scn->target_ce_def = QCA6390_CE_TARGETdef; 179 hif_info("TARGET_TYPE_QCA6390"); 180 break; 181 #endif /* QCA6390_HEADERS_DEF */ 182 183 #if defined(QCA6490_HEADERS_DEF) 184 case TARGET_TYPE_QCA6490: 185 scn->targetdef = QCA6490_TARGETdef; 186 scn->target_ce_def = QCA6490_CE_TARGETdef; 187 hif_info("TARGET_TYPE_QCA6490"); 188 break; 189 #endif /* QCA6490_HEADERS_DEF */ 190 191 #if defined(KIWI_HEADERS_DEF) 192 case TARGET_TYPE_KIWI: 193 scn->targetdef = KIWI_TARGETdef; 194 scn->target_ce_def = KIWI_CE_TARGETdef; 195 hif_info("TARGET_TYPE_KIWI"); 196 break; 197 198 case TARGET_TYPE_MANGO: 199 scn->targetdef = KIWI_TARGETdef; 200 scn->target_ce_def = KIWI_CE_TARGETdef; 201 hif_info("TARGET_TYPE_MANGO"); 202 break; 203 #endif /* KIWI_HEADERS_DEF */ 204 205 #if defined(QCA6750_HEADERS_DEF) 206 case TARGET_TYPE_QCA6750: 207 scn->targetdef = QCA6750_TARGETdef; 208 scn->target_ce_def = QCA6750_CE_TARGETdef; 209 hif_info("TARGET_TYPE_QCA6750"); 210 break; 211 #endif /* QCA6750_HEADERS_DEF */ 212 default: 213 break; 214 } 215 } 216 217 void hif_register_tbl_attach(struct hif_softc *scn, u32 hif_type) 218 { 219 switch (hif_type) { 220 case HIF_TYPE_AR6320V2: 221 scn->hostdef = &ar6320v2_hostdef; 222 break; 223 case HIF_TYPE_ADRASTEA: 224 scn->hostdef = &adrastea_hostdef; 225 scn->host_shadow_regs = &adrastea_host_shadow_regs; 226 break; 227 case HIF_TYPE_QCN7605: 228 scn->hostdef = &genoa_hostdef; 229 scn->host_shadow_regs = &genoa_host_shadow_regs; 230 break; 231 #if defined(AR6002_HEADERS_DEF) 232 case HIF_TYPE_AR6002: 233 scn->hostdef = AR6002_HOSTdef; 234 break; 235 #endif 236 #if defined(AR6003_HEADERS_DEF) 237 case HIF_TYPE_AR6003: 238 scn->hostdef = AR6003_HOSTdef; 239 break; 240 #endif 241 #if defined(AR6004_HEADERS_DEF) 242 case HIF_TYPE_AR6004: 243 scn->hostdef = AR6004_HOSTdef; 244 break; 245 #endif 246 #if defined(AR9888_HEADERS_DEF) 247 case HIF_TYPE_AR9888: 248 scn->hostdef = AR9888_HOSTdef; 249 break; 250 #endif 251 #if defined(AR9888V2_HEADERS_DEF) 252 case HIF_TYPE_AR9888V2: 253 scn->hostdef = AR9888V2_HOSTdef; 254 break; 255 #endif 256 #if defined(AR900B_HEADERS_DEF) 257 case HIF_TYPE_AR900B: 258 scn->hostdef = AR900B_HOSTdef; 259 break; 260 #endif 261 #if defined(QCA9984_HEADERS_DEF) 262 case HIF_TYPE_QCA9984: 263 scn->hostdef = QCA9984_HOSTdef; 264 break; 265 #endif 266 #if defined(QCA9888_HEADERS_DEF) 267 case HIF_TYPE_QCA9888: 268 scn->hostdef = QCA9888_HOSTdef; 269 break; 270 #endif 271 272 #if defined(QCA8074_HEADERS_DEF) 273 case HIF_TYPE_QCA8074: 274 scn->hostdef = QCA8074_HOSTdef; 275 break; 276 #endif 277 #if defined(QCA8074V2_HEADERS_DEF) 278 case HIF_TYPE_QCA8074V2: 279 scn->hostdef = QCA8074V2_HOSTDEF; 280 break; 281 #endif 282 #if defined(QCA6018_HEADERS_DEF) 283 case HIF_TYPE_QCA6018: 284 scn->hostdef = QCA6018_HOSTDEF; 285 hif_info("HIF_TYPE_QCA6018"); 286 break; 287 #endif 288 #if defined(QCA6290_HEADERS_DEF) 289 case HIF_TYPE_QCA6290: 290 scn->hostdef = QCA6290_HOSTdef; 291 break; 292 #endif 293 #if defined(QCN9000_HEADERS_DEF) 294 case HIF_TYPE_QCN9000: 295 scn->hostdef = QCN9000_HOSTDEF; 296 break; 297 #endif 298 #if defined(QCN9224_HEADERS_DEF) 299 case HIF_TYPE_QCN9224: 300 if (scn->target_info.soc_version == 1) { 301 scn->hostdef = QCN9224v1_HOSTDEF; 302 break; 303 } 304 scn->hostdef = QCN9224_HOSTDEF; 305 break; 306 #endif 307 #if defined(QCN6122_HEADERS_DEF) 308 case HIF_TYPE_QCN6122: 309 scn->hostdef = QCN6122_HOSTDEF; 310 break; 311 #endif 312 #if defined(QCA5018_HEADERS_DEF) 313 case HIF_TYPE_QCA5018: 314 scn->hostdef = QCA5018_HOSTDEF; 315 break; 316 #endif 317 #if defined(QCA5332_HEADERS_DEF) 318 case HIF_TYPE_QCA5332: 319 scn->hostdef = QCA5332_HOSTDEF; 320 break; 321 #endif 322 #if defined(QCA9574_HEADERS_DEF) 323 case HIF_TYPE_QCA9574: 324 scn->hostdef = QCA9574_HOSTDEF; 325 hif_info("HIF_TYPE_QCA9574"); 326 break; 327 #endif 328 329 #if defined(QCA6390_HEADERS_DEF) 330 case HIF_TYPE_QCA6390: 331 scn->hostdef = QCA6390_HOSTdef; 332 hif_info("HIF_TYPE_QCA6390"); 333 break; 334 #endif /* QCA6390_HEADERS_DEF */ 335 336 #if defined(QCA6490_HEADERS_DEF) 337 case HIF_TYPE_QCA6490: 338 scn->hostdef = QCA6490_HOSTdef; 339 hif_info("HIF_TYPE_QCA6490"); 340 break; 341 #endif /* QCA6490_HEADERS_DEF */ 342 343 #if defined(KIWI_HEADERS_DEF) 344 case HIF_TYPE_KIWI: 345 scn->hostdef = KIWI_HOSTdef; 346 hif_info("HIF_TYPE_KIWI"); 347 break; 348 349 case HIF_TYPE_MANGO: 350 scn->hostdef = KIWI_HOSTdef; 351 hif_info("HIF_TYPE_MANGO"); 352 break; 353 #endif /* KIWI_HEADERS_DEF */ 354 355 #if defined(QCA6750_HEADERS_DEF) 356 case HIF_TYPE_QCA6750: 357 scn->hostdef = QCA6750_HOSTdef; 358 hif_info("HIF_TYPE_QCA6750"); 359 break; 360 #endif /* QCA6750_HEADERS_DEF */ 361 default: 362 break; 363 } 364 } 365