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