1 /* 2 * Copyright (c) 2014-2019 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 /* 20 * Implementation of the Host-side Host InterFace (HIF) API 21 * for a Host/Target interconnect using Copy Engines over PCIe. 22 */ 23 24 #ifndef __HIF_PCI_INTERNAL_H__ 25 #define __HIF_PCI_INTERNAL_H__ 26 27 #ifndef PEER_CACHEING_HOST_ENABLE 28 #define PEER_CACHEING_HOST_ENABLE 0 29 #endif 30 31 #define HIF_PCI_DEBUG ATH_DEBUG_MAKE_MODULE_MASK(0) 32 #define HIF_PCI_IPA_UC_ASSIGNED_CE 5 33 34 #if defined(WLAN_DEBUG) || defined(DEBUG) 35 static ATH_DEBUG_MASK_DESCRIPTION g_hif_debug_description[] = { 36 {HIF_PCI_DEBUG, "hif_pci"}, 37 }; 38 39 ATH_DEBUG_INSTANTIATE_MODULE_VAR(hif, "hif", "PCIe Host Interface", 40 ATH_DEBUG_MASK_DEFAULTS | ATH_DEBUG_INFO, 41 ATH_DEBUG_DESCRIPTION_COUNT 42 (g_hif_debug_description), 43 g_hif_debug_description); 44 #endif 45 46 #ifdef CONFIG_ATH_PCIE_ACCESS_DEBUG 47 /* globals are initialized to 0 by the compiler */; 48 spinlock_t pcie_access_log_lock; 49 unsigned int pcie_access_log_seqnum; 50 struct HIF_ACCESS_LOG pcie_access_log[PCIE_ACCESS_LOG_NUM]; 51 static void hif_target_dump_access_log(void); 52 #endif 53 54 /* 55 * Host software's Copy Engine configuration. 56 * This table is derived from the CE_PCI TABLE, above. 57 */ 58 #ifdef BIG_ENDIAN_HOST 59 #define CE_ATTR_FLAGS CE_ATTR_BYTE_SWAP_DATA 60 #else 61 #define CE_ATTR_FLAGS 0 62 #endif 63 64 /* Maximum number of Copy Engine's supported */ 65 #define CE_HTT_H2T_MSG_SRC_NENTRIES 2048 66 #define CE_HTT_H2T_MSG_SRC_NENTRIES_AR900B 4096 67 68 #define EPPING_CE_FLAGS_POLL \ 69 (CE_ATTR_DISABLE_INTR|CE_ATTR_ENABLE_POLL|CE_ATTR_FLAGS) 70 71 #define CE_ATTR_DIAG_FLAGS \ 72 (CE_ATTR_FLAGS | CE_ATTR_DIAG) 73 74 #ifdef QCN7605_SUPPORT 75 76 #define QCN7605_CE_COUNT 9 77 static struct CE_attr host_ce_config_wlan_qcn7605[] = { 78 /* host->target HTC control and raw streams & WMI Control*/ 79 { /* CE0 */ CE_ATTR_FLAGS, 0, 16, 2048, 0, NULL,}, 80 /* target->host HTT + HTC control */ 81 { /* CE1 */ CE_ATTR_FLAGS, 0, 0, 2048, 512, NULL,}, 82 /* target->host WMI */ 83 { /* CE2 */ CE_ATTR_FLAGS, 0, 0, 2048, 128, NULL,}, 84 /* target->host HTT */ 85 { /* CE3 */ CE_ATTR_FLAGS, 0, 0, 2048, 512, NULL,}, 86 /* host->target HTT */ 87 { /* CE4 */ (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0, 88 CE_HTT_H2T_MSG_SRC_NENTRIES, 256, 0, NULL,}, 89 #ifdef IPA_OFFLOAD 90 /* ipa_uc->target HTC control */ 91 { /* CE5 */ (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0, 92 CE_HTT_H2T_MSG_SRC_NENTRIES, 512, 0, NULL,}, 93 #else 94 /* unused */ 95 { /* CE5 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 96 #endif 97 /* Target autonomous HIF_memcpy */ 98 { /* CE6 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 99 /* target->host PKTLOG */ 100 { /* CE7 */ CE_ATTR_FLAGS, 0, 0, 2048, 512, NULL,}, 101 #ifdef IPA_OFFLOAD 102 /* Target to uMC */ 103 { /* CE8 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 104 #else 105 /* target->host HTT*/ 106 { /* CE8 */ CE_ATTR_FLAGS, 0, 0, 2048, 512, NULL,}, 107 #endif 108 /* CE 9, 10, 11 belong to CoreBsp & MHI driver */ 109 }; 110 111 static struct CE_pipe_config target_ce_config_wlan_qcn7605[] = { 112 /* host->target HTC control and raw streams */ 113 { /* CE0 */ 0, PIPEDIR_OUT, 4, 2048, CE_ATTR_FLAGS, 0,}, 114 /* target->host HTT */ 115 { /* CE1 */ 1, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 116 /* target->host WMI + HTC control */ 117 { /* CE2 */ 2, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 118 /* target->host HTT */ 119 { /* CE3 */ 3, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 120 /* host->target HTT */ 121 { /* CE4 */ 4, PIPEDIR_OUT, 128, 256, 122 (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0,}, 123 /* NB: 50% of src nentries, since tx has 2 frags */ 124 #ifdef IPA_OFFLOAD 125 /* ipa_uc->target */ 126 { /* CE5 */ 5, PIPEDIR_OUT, 512, 64, 127 (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0,}, 128 #else 129 /* unused */ 130 { /* CE5 */ 5, PIPEDIR_INOUT_H2H, 0, 0, 0, 0,}, 131 #endif 132 /* Reserved for target autonomous HIF_memcpy */ 133 { /* CE6 */ 6, PIPEDIR_INOUT, 32, 16384, CE_ATTR_FLAGS, 0,}, 134 /* Target -> host PKTLOG */ 135 { /* CE7 */ 7, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 136 #ifdef IPA_OFFLOAD 137 /* CE8 used only by IPA */ 138 { /* CE8 */ 8, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 139 #else 140 /* target->host HTT*/ 141 { /* CE8 */ 8, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 142 #endif 143 /* CE 9, 10, 11 belong to CoreBsp & MHI driver */ 144 }; 145 #endif 146 147 #ifdef QCA_WIFI_3_0 148 static struct CE_attr host_ce_config_wlan[] = { 149 /* host->target HTC control and raw streams */ 150 { /* CE0 */ CE_ATTR_FLAGS, 0, 16, 2048, 0, NULL,}, 151 /* target->host HTT + HTC control */ 152 { /* CE1 */ CE_ATTR_FLAGS, 0, 0, 2048, 512, NULL,}, 153 /* target->host WMI */ 154 { /* CE2 */ CE_ATTR_FLAGS, 0, 0, 2048, 128, NULL,}, 155 /* host->target WMI */ 156 { /* CE3 */ CE_ATTR_FLAGS, 0, 32, 2048, 0, NULL,}, 157 /* host->target HTT */ 158 { /* CE4 */ (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0, 159 CE_HTT_H2T_MSG_SRC_NENTRIES, 256, 0, NULL,}, 160 /* ipa_uc->target HTC control */ 161 { /* CE5 */ (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0, 162 CE_HTT_H2T_MSG_SRC_NENTRIES, 512, 0, NULL,}, 163 /* Target autonomous HIF_memcpy */ 164 { /* CE6 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 165 /* ce_diag, the Diagnostic Window */ 166 { /* CE7 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 167 /* Target to uMC */ 168 { /* CE8 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 169 /* target->host HTT */ 170 { /* CE9 */ CE_ATTR_FLAGS, 0, 0, 2048, 512, NULL,}, 171 /* target->host HTT */ 172 { /* CE10 */ CE_ATTR_FLAGS, 0, 0, 2048, 512, NULL,}, 173 /* target -> host PKTLOG */ 174 { /* CE11 */ CE_ATTR_FLAGS, 0, 0, 2048, 512, NULL,}, 175 }; 176 177 static struct CE_pipe_config target_ce_config_wlan[] = { 178 /* host->target HTC control and raw streams */ 179 { /* CE0 */ 0, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0,}, 180 /* target->host HTT */ 181 { /* CE1 */ 1, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 182 /* target->host WMI + HTC control */ 183 { /* CE2 */ 2, PIPEDIR_IN, 64, 2048, CE_ATTR_FLAGS, 0,}, 184 /* host->target WMI */ 185 { /* CE3 */ 3, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0,}, 186 /* host->target HTT */ 187 { /* CE4 */ 4, PIPEDIR_OUT, 256, 256, 188 (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0,}, 189 /* NB: 50% of src nentries, since tx has 2 frags */ 190 /* ipa_uc->target */ 191 { /* CE5 */ 5, PIPEDIR_OUT, 1024, 64, 192 (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0,}, 193 /* Reserved for target autonomous HIF_memcpy */ 194 { /* CE6 */ 6, PIPEDIR_INOUT, 32, 16384, CE_ATTR_FLAGS, 0,}, 195 /* CE7 used only by Host */ 196 { /* CE7 */ 7, PIPEDIR_INOUT_H2H, 0, 0, 197 (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0,}, 198 /* CE8 used only by IPA */ 199 { /* CE8 */ 8, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 200 /* CE9 target->host HTT */ 201 { /* CE9 */ 9, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 202 /* CE10 target->host HTT */ 203 { /* CE10 */ 10, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 204 /* Target -> host PKTLOG */ 205 { /* CE11 */ 11, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 206 }; 207 208 #ifdef WLAN_FEATURE_EPPING 209 static struct CE_attr host_ce_config_wlan_epping_poll[] = { 210 /* host->target HTC control and raw streams */ 211 { /* CE0 */ CE_ATTR_FLAGS, 0, 16, 2048, 0, NULL,}, 212 /* target->host EP-ping */ 213 { /* CE1 */ EPPING_CE_FLAGS_POLL, 0, 0, 2048, 128, NULL,}, 214 /* target->host EP-ping */ 215 { /* CE2 */ EPPING_CE_FLAGS_POLL, 0, 0, 2048, 128, NULL,}, 216 /* host->target EP-ping */ 217 { /* CE3 */ CE_ATTR_FLAGS, 0, 128, 2048, 0, NULL,}, 218 /* host->target EP-ping */ 219 { /* CE4 */ CE_ATTR_FLAGS, 0, 128, 2048, 0, NULL,}, 220 /* EP-ping heartbeat */ 221 { /* CE5 */ CE_ATTR_FLAGS, 0, 0, 2048, 128, NULL,}, 222 /* unused */ 223 { /* CE6 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 224 /* ce_diag, the Diagnostic Window */ 225 { /* CE7 */ CE_ATTR_DIAG_FLAGS, 0, 2, DIAG_TRANSFER_LIMIT, 2, NULL,}, 226 }; 227 228 #ifdef QCN7605_SUPPORT 229 static struct CE_attr host_ce_config_wlan_epping_irq[] = { 230 /* host->target HTC control and raw streams */ 231 { /* CE0 */ CE_ATTR_FLAGS, 0, 16, 2048, 0, NULL,}, 232 /* target->host EP-ping */ 233 { /* CE1 */ CE_ATTR_FLAGS, 0, 0, 2048, 32, NULL,}, 234 /* target->host EP-ping */ 235 { /* CE2 */ CE_ATTR_FLAGS, 0, 0, 2048, 32, NULL,}, 236 /* host->target EP-ping */ 237 { /* CE3 */ CE_ATTR_FLAGS, 0, 32, 2048, 0, NULL,}, 238 /* host->target EP-ping */ 239 { /* CE4 */ CE_ATTR_FLAGS, 0, 32, 2048, 0, NULL,}, 240 /* EP-ping heartbeat */ 241 { /* CE5 */ CE_ATTR_FLAGS, 0, 0, 2048, 16, NULL,}, 242 /* unused */ 243 { /* CE6 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 244 /* ce_diag, the Diagnostic Window */ 245 { /* CE7 */ CE_ATTR_DIAG_FLAGS, 0, 2, DIAG_TRANSFER_LIMIT, 2, NULL,}, 246 }; 247 248 /* 249 * EP-ping firmware's CE configuration 250 */ 251 static struct CE_pipe_config target_ce_config_wlan_epping[] = { 252 /* host->target HTC control and raw streams */ 253 { /* CE0 */ 0, PIPEDIR_OUT, 16, 2048, CE_ATTR_FLAGS, 0,}, 254 /* target->host EP-ping */ 255 { /* CE1 */ 1, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 256 /* target->host EP-ping */ 257 { /* CE2 */ 2, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 258 /* host->target EP-ping */ 259 { /* CE3 */ 3, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0,}, 260 /* host->target EP-ping */ 261 { /* CE4 */ 4, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0,}, 262 /* EP-ping heartbeat */ 263 { /* CE5 */ 5, PIPEDIR_IN, 16, 2048, CE_ATTR_FLAGS, 0,}, 264 /* unused */ 265 { /* CE6 */ 6, PIPEDIR_INOUT, 0, 0, CE_ATTR_FLAGS, 0,}, 266 /* CE7 used only by Host */ 267 { /* CE7 */ 7, PIPEDIR_INOUT_H2H, 0, 0, 0, 0,}, 268 /* CE8 used only by IPA */ 269 { /* CE8 */ 8, PIPEDIR_IN, 4, 2048, CE_ATTR_FLAGS, 0,} 270 }; 271 #else 272 static struct CE_attr host_ce_config_wlan_epping_irq[] = { 273 /* host->target HTC control and raw streams */ 274 { /* CE0 */ CE_ATTR_FLAGS, 0, 16, 2048, 0, NULL,}, 275 /* target->host EP-ping */ 276 { /* CE1 */ CE_ATTR_FLAGS, 0, 0, 2048, 128, NULL,}, 277 /* target->host EP-ping */ 278 { /* CE2 */ CE_ATTR_FLAGS, 0, 0, 2048, 128, NULL,}, 279 /* host->target EP-ping */ 280 { /* CE3 */ CE_ATTR_FLAGS, 0, 128, 2048, 0, NULL,}, 281 /* host->target EP-ping */ 282 { /* CE4 */ CE_ATTR_FLAGS, 0, 128, 2048, 0, NULL,}, 283 /* EP-ping heartbeat */ 284 { /* CE5 */ CE_ATTR_FLAGS, 0, 0, 2048, 128, NULL,}, 285 /* unused */ 286 { /* CE6 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 287 /* ce_diag, the Diagnostic Window */ 288 { /* CE7 */ CE_ATTR_DIAG_FLAGS, 0, 2, DIAG_TRANSFER_LIMIT, 2, NULL,}, 289 }; 290 /* 291 * EP-ping firmware's CE configuration 292 */ 293 static struct CE_pipe_config target_ce_config_wlan_epping[] = { 294 /* host->target HTC control and raw streams */ 295 { /* CE0 */ 0, PIPEDIR_OUT, 16, 2048, CE_ATTR_FLAGS, 0,}, 296 /* target->host EP-ping */ 297 { /* CE1 */ 1, PIPEDIR_IN, 128, 2048, CE_ATTR_FLAGS, 0,}, 298 /* target->host EP-ping */ 299 { /* CE2 */ 2, PIPEDIR_IN, 128, 2048, CE_ATTR_FLAGS, 0,}, 300 /* host->target EP-ping */ 301 { /* CE3 */ 3, PIPEDIR_OUT, 128, 2048, CE_ATTR_FLAGS, 0,}, 302 /* host->target EP-ping */ 303 { /* CE4 */ 4, PIPEDIR_OUT, 128, 2048, CE_ATTR_FLAGS, 0,}, 304 /* EP-ping heartbeat */ 305 { /* CE5 */ 5, PIPEDIR_IN, 128, 2048, CE_ATTR_FLAGS, 0,}, 306 /* unused */ 307 { /* CE6 */ 6, PIPEDIR_INOUT, 0, 0, CE_ATTR_FLAGS, 0,}, 308 /* CE7 used only by Host */ 309 { /* CE7 */ 7, PIPEDIR_INOUT_H2H, 0, 0, 0, 0,}, 310 /* CE8 used only by IPA */ 311 { /* CE8 */ 8, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,} 312 }; 313 #endif 314 #endif 315 #else 316 static struct CE_attr host_ce_config_wlan[] = { 317 /* host->target HTC control and raw streams */ 318 { /* CE0 */ CE_ATTR_FLAGS, 0, 16, 256, 0, NULL,}, 319 /* target->host HTT + HTC control */ 320 { /* CE1 */ CE_ATTR_FLAGS, 0, 0, 2048, 512, NULL,}, 321 /* target->host WMI */ 322 { /* CE2 */ CE_ATTR_FLAGS, 0, 0, 2048, 32, NULL,}, 323 /* host->target WMI */ 324 { /* CE3 */ CE_ATTR_FLAGS, 0, 32, 2048, 0, NULL,}, 325 /* host->target HTT */ 326 { /* CE4 */ CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR, 0, 327 CE_HTT_H2T_MSG_SRC_NENTRIES, 256, 0, NULL,}, 328 /* ipa_uc->target HTC control */ 329 { /* CE5 */ CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR, 0, 330 1024, 512, 0, NULL,}, 331 /* Target autonomous HIF_memcpy */ 332 { /* CE6 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 333 /* ce_diag, the Diagnostic Window */ 334 { /* CE7 */ (CE_ATTR_DIAG_FLAGS | CE_ATTR_DISABLE_INTR), 335 0, 2, DIAG_TRANSFER_LIMIT, 2, NULL,}, 336 }; 337 338 static struct CE_pipe_config target_ce_config_wlan[] = { 339 /* host->target HTC control and raw streams */ 340 { /* CE0 */ 0, PIPEDIR_OUT, 32, 256, CE_ATTR_FLAGS, 0,}, 341 /* target->host HTT + HTC control */ 342 { /* CE1 */ 1, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 343 /* target->host WMI */ 344 { /* CE2 */ 2, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 345 /* host->target WMI */ 346 { /* CE3 */ 3, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0,}, 347 /* host->target HTT */ 348 { /* CE4 */ 4, PIPEDIR_OUT, 256, 256, CE_ATTR_FLAGS, 0,}, 349 /* NB: 50% of src nentries, since tx has 2 frags */ 350 /* ipa_uc->target HTC control */ 351 { /* CE5 */ 5, PIPEDIR_OUT, 1024, 64, CE_ATTR_FLAGS, 0,}, 352 /* Reserved for target autonomous HIF_memcpy */ 353 { /* CE6 */ 6, PIPEDIR_INOUT, 32, 4096, CE_ATTR_FLAGS, 0,}, 354 /* CE7 used only by Host */ 355 { /* CE7 */ 7, PIPEDIR_INOUT_H2H, 0, 0, 0, 0,}, 356 /* CE8 used only by IPA */ 357 { /* CE8 */ 8, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,} 358 }; 359 360 #ifdef WLAN_FEATURE_EPPING 361 static struct CE_attr host_ce_config_wlan_epping_poll[] = { 362 /* host->target HTC control and raw streams */ 363 { /* CE0 */ CE_ATTR_FLAGS, 0, 16, 256, 0, NULL,}, 364 /* target->host EP-ping */ 365 { /* CE1 */ EPPING_CE_FLAGS_POLL, 0, 0, 2048, 128, NULL,}, 366 /* target->host EP-ping */ 367 { /* CE2 */ EPPING_CE_FLAGS_POLL, 0, 0, 2048, 128, NULL,}, 368 /* host->target EP-ping */ 369 { /* CE3 */ CE_ATTR_FLAGS, 0, 128, 2048, 0, NULL,}, 370 /* host->target EP-ping */ 371 { /* CE4 */ CE_ATTR_FLAGS, 0, 128, 2048, 0, NULL,}, 372 /* EP-ping heartbeat */ 373 { /* CE5 */ CE_ATTR_FLAGS, 0, 0, 2048, 128, NULL,}, 374 /* unused */ 375 { /* CE6 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 376 /* ce_diag, the Diagnostic Window */ 377 { /* CE7 */ CE_ATTR_DIAG_FLAGS, 0, 2, DIAG_TRANSFER_LIMIT, 2, NULL,}, 378 { /* CE8 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 379 /* The following CEs are not being used yet */ 380 { /* CE9 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 381 { /* CE10 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 382 { /* CE11 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 383 }; 384 static struct CE_attr host_ce_config_wlan_epping_irq[] = { 385 /* host->target HTC control and raw streams */ 386 { /* CE0 */ CE_ATTR_FLAGS, 0, 16, 256, 0, NULL,}, 387 /* target->host EP-ping */ 388 { /* CE1 */ CE_ATTR_FLAGS, 0, 0, 2048, 128, NULL,}, 389 /* target->host EP-ping */ 390 { /* CE2 */ CE_ATTR_FLAGS, 0, 0, 2048, 128, NULL,}, 391 /* host->target EP-ping */ 392 { /* CE3 */ CE_ATTR_FLAGS, 0, 128, 2048, 0, NULL,}, 393 /* host->target EP-ping */ 394 { /* CE4 */ CE_ATTR_FLAGS, 0, 128, 2048, 0, NULL,}, 395 /* EP-ping heartbeat */ 396 { /* CE5 */ CE_ATTR_FLAGS, 0, 0, 2048, 128, NULL,}, 397 /* unused */ 398 { /* CE6 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 399 /* ce_diag, the Diagnostic Window */ 400 { /* CE7 */ CE_ATTR_DIAG_FLAGS, 0, 2, DIAG_TRANSFER_LIMIT, 2, NULL,}, 401 { /* CE8 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 402 /* The following CEs are not being used yet */ 403 { /* CE9 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 404 { /* CE10 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 405 { /* CE11 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 406 }; 407 /* 408 * EP-ping firmware's CE configuration 409 */ 410 static struct CE_pipe_config target_ce_config_wlan_epping[] = { 411 /* host->target HTC control and raw streams */ 412 { /* CE0 */ 0, PIPEDIR_OUT, 16, 256, CE_ATTR_FLAGS, 0,}, 413 /* target->host EP-ping */ 414 { /* CE1 */ 1, PIPEDIR_IN, 128, 2048, CE_ATTR_FLAGS, 0,}, 415 /* target->host EP-ping */ 416 { /* CE2 */ 2, PIPEDIR_IN, 128, 2048, CE_ATTR_FLAGS, 0,}, 417 /* host->target EP-ping */ 418 { /* CE3 */ 3, PIPEDIR_OUT, 128, 2048, CE_ATTR_FLAGS, 0,}, 419 /* host->target EP-ping */ 420 { /* CE4 */ 4, PIPEDIR_OUT, 128, 2048, CE_ATTR_FLAGS, 0,}, 421 /* EP-ping heartbeat */ 422 { /* CE5 */ 5, PIPEDIR_IN, 128, 2048, CE_ATTR_FLAGS, 0,}, 423 /* unused */ 424 { /* CE6 */ 6, PIPEDIR_INOUT, 0, 0, CE_ATTR_FLAGS, 0,}, 425 /* CE7 used only by Host */ 426 { /* CE7 */ 7, PIPEDIR_INOUT_H2H, 0, 0, 0, 0,}, 427 /* CE8 used only by IPA */ 428 { /* CE8 */ 8, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 429 { /* CE9 */ 9, PIPEDIR_IN, 0, 0, CE_ATTR_FLAGS, 0,}, 430 { /* CE10 */ 10, PIPEDIR_IN, 0, 0, CE_ATTR_FLAGS, 0,}, 431 { /* CE11 */ 11, PIPEDIR_IN, 0, 0, CE_ATTR_FLAGS, 0,}, 432 }; 433 #endif 434 #endif 435 436 static struct CE_attr host_ce_config_wlan_ar9888[] = { 437 /* host->target HTC control and raw streams */ 438 { /* CE0 */ CE_ATTR_FLAGS, 0, 16, 256, 0, NULL, }, 439 /* target->host BMI + HTC control */ 440 /* could be moved to share CE3 */ 441 { /* CE1 */ CE_ATTR_FLAGS, 0, 0, 512, 512, NULL, }, 442 /* target->host WMI */ 443 { /* CE2 */ CE_ATTR_FLAGS, 0, 0, 2048, 128, NULL, }, 444 /* host->target WMI */ 445 { /* CE3 */ CE_ATTR_FLAGS, 0, 32, 2048, 0, NULL, }, 446 /* host->target HTT */ 447 { /* CE4 */ CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR, 0, 448 CE_HTT_H2T_MSG_SRC_NENTRIES_AR900B, 256, 0, NULL, }, 449 #ifdef WLAN_FEATURE_FASTPATH 450 /* target->host HTT messages */ 451 { /* CE5 */ CE_ATTR_FLAGS, 0, 0, 512, 512, NULL, }, 452 #else /* WLAN_FEATURE_FASTPATH */ 453 /* unused */ 454 { /* CE5 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL, }, 455 #endif /* WLAN_FEATURE_FASTPATH */ 456 /* Target autonomous HIF_memcpy */ 457 { /* CE6 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL, }, 458 /* ce_diag, the Diagnostic Window */ 459 { /* CE7 */ CE_ATTR_DIAG_FLAGS, 0, 2, DIAG_TRANSFER_LIMIT, 2, NULL, }, 460 /* Target autonomous HIF_memcpy */ 461 { /* CE8 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL, }, 462 }; 463 464 static struct CE_attr host_ce_config_wlan_ar900b[] = { 465 /* host->target HTC control and raw streams */ 466 { /* CE0 */ CE_ATTR_FLAGS, 0, 16, 256, 0, NULL, }, 467 /* target->host BMI + HTC control */ 468 /* could be moved to share CE3 */ 469 { /* CE1 */ CE_ATTR_FLAGS, 0, 0, 512, 512, NULL, }, 470 /* target->host WMI */ 471 { /* CE2 */ CE_ATTR_FLAGS, 0, 0, 2048, 128, NULL, }, 472 /* host->target WMI */ 473 { /* CE3 */ CE_ATTR_FLAGS, 0, 32, 2048, 0, NULL, }, 474 /* host->target HTT */ 475 { /* CE4 */ CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR, 0, 476 CE_HTT_H2T_MSG_SRC_NENTRIES_AR900B, 256, 0, NULL, }, 477 #ifdef WLAN_FEATURE_FASTPATH 478 /* target->host HTT messages */ 479 { /* CE5 */ CE_ATTR_FLAGS, 0, 0, 512, 512, NULL, }, 480 #else /* WLAN_FEATURE_FASTPATH */ 481 /* unused */ 482 { /* CE5 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL, }, 483 #endif /* WLAN_FEATURE_FASTPATH */ 484 /* Target autonomous HIF_memcpy */ 485 { /* CE6 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL, }, 486 /* ce_diag, the Diagnostic Window */ 487 { /* CE7 */ CE_ATTR_DIAG_FLAGS, 0, 2, DIAG_TRANSFER_LIMIT, 2, NULL, }, 488 /* target->host pktlog */ 489 { /* CE8 */ CE_ATTR_FLAGS, 0, 0, 2048, 128, NULL, }, 490 /* Target autonomous HIF_memcpy */ 491 { /* CE9 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL, }, 492 /* Target autonomous HIF_memcpy */ 493 { /* CE10 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL, }, 494 /* Target autonomous HIF_memcpy */ 495 { /* CE11 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL, }, 496 }; 497 498 static struct CE_attr host_lowdesc_ce_cfg_wlan_ar9888[] = { 499 /* host->target HTC control and raw streams */ 500 { /* CE0 */ CE_ATTR_FLAGS, 0, 16, 256, 0, NULL, }, 501 /* could be moved to share CE3 */ 502 #ifdef WLAN_FEATURE_FASTPATH 503 /* target->host BMI + HTC control */ 504 { /* CE1 */ CE_ATTR_FLAGS, 0, 0, 512, 64, NULL, }, 505 #else 506 /* target->host BMI + HTC control */ 507 { /* CE1 */ CE_ATTR_FLAGS, 0, 0, 512, 512, NULL, }, 508 #endif 509 /* target->host WMI */ 510 { /* CE2 */ CE_ATTR_FLAGS, 0, 0, 2048, 128, NULL, }, 511 /* host->target WMI */ 512 { /* CE3 */ CE_ATTR_FLAGS, 0, 32, 2048, 0, NULL, }, 513 /* host->target HTT */ 514 { /* CE4 */ CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR, 0, 515 CE_HTT_H2T_MSG_SRC_NENTRIES_AR900B, 256, 0, NULL, }, 516 #ifdef WLAN_FEATURE_FASTPATH 517 /* target->host HTT messages */ 518 { /* CE5 */ CE_ATTR_FLAGS, 0, 0, 512, 512, NULL, }, 519 #else /* WLAN_FEATURE_FASTPATH */ 520 /* unused */ 521 { /* CE5 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL, }, 522 #endif /* WLAN_FEATURE_FASTPATH */ 523 /* Target autonomous HIF_memcpy */ 524 { /* CE6 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL, }, 525 /* ce_diag, the Diagnostic Window */ 526 { /* CE7 */ CE_ATTR_DIAG_FLAGS, 0, 2, DIAG_TRANSFER_LIMIT, 2, NULL, }, 527 /* Target autonomous HIF_memcpy */ 528 { /* CE8 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL, }, 529 }; 530 531 static struct CE_attr host_lowdesc_ce_cfg_wlan_ar900b[] = { 532 /* host->target HTC control and raw streams */ 533 { /* CE0 */ CE_ATTR_FLAGS, 0, 16, 256, 0, NULL, }, 534 /* could be moved to share CE3 */ 535 #ifdef WLAN_FEATURE_FASTPATH 536 /* target->host BMI + HTC control */ 537 { /* CE1 */ CE_ATTR_FLAGS, 0, 0, 512, 64, NULL, }, 538 #else 539 /* target->host BMI + HTC control */ 540 { /* CE1 */ CE_ATTR_FLAGS, 0, 0, 512, 512, NULL, }, 541 #endif 542 /* target->host WMI */ 543 { /* CE2 */ CE_ATTR_FLAGS, 0, 0, 2048, 128, NULL, }, 544 /* host->target WMI */ 545 { /* CE3 */ CE_ATTR_FLAGS, 0, 32, 2048, 0, NULL, }, 546 /* host->target HTT */ 547 { /* CE4 */ CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR, 0, 548 CE_HTT_H2T_MSG_SRC_NENTRIES_AR900B, 256, 0, NULL, }, 549 #ifdef WLAN_FEATURE_FASTPATH 550 /* target->host HTT messages */ 551 { /* CE5 */ CE_ATTR_FLAGS, 0, 0, 512, 512, NULL, }, 552 #else /* WLAN_FEATURE_FASTPATH */ 553 /* unused */ 554 { /* CE5 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL, }, 555 #endif /* WLAN_FEATURE_FASTPATH */ 556 /* Target autonomous HIF_memcpy */ 557 { /* CE6 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL, }, 558 /* ce_diag, the Diagnostic Window */ 559 { /* CE7 */ CE_ATTR_DIAG_FLAGS, 0, 2, DIAG_TRANSFER_LIMIT, 2, NULL, }, 560 /* target->host pktlog */ 561 { /* CE8 */ CE_ATTR_FLAGS, 0, 0, 2048, 128, NULL, }, 562 /* Target autonomous HIF_memcpy */ 563 { /* CE9 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL, }, 564 /* Target autonomous HIF_memcpy */ 565 { /* CE10 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL, }, 566 /* Target autonomous HIF_memcpy */ 567 { /* CE11 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL, }, 568 }; 569 570 static struct CE_attr host_lowdesc_ce_cfg_wlan_ar900b_nopktlog[] = { 571 /* host->target HTC control and raw streams */ 572 { /* CE0 */ CE_ATTR_FLAGS, 0, 16, 256, 0, NULL, }, 573 /* could be moved to share CE3 */ 574 #ifdef WLAN_FEATURE_FASTPATH 575 /* target->host BMI + HTC control */ 576 { /* CE1 */ CE_ATTR_FLAGS, 0, 0, 512, 64, NULL, }, 577 #else 578 /* target->host BMI + HTC control */ 579 { /* CE1 */ CE_ATTR_FLAGS, 0, 0, 512, 512, NULL, }, 580 #endif 581 /* target->host WMI */ 582 { /* CE2 */ CE_ATTR_FLAGS, 0, 0, 2048, 128, NULL, }, 583 /* host->target WMI */ 584 { /* CE3 */ CE_ATTR_FLAGS, 0, 32, 2048, 0, NULL, }, 585 /* host->target HTT */ 586 { /* CE4 */ CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR, 0, 587 CE_HTT_H2T_MSG_SRC_NENTRIES_AR900B, 256, 0, NULL, }, 588 #ifdef WLAN_FEATURE_FASTPATH 589 /* target->host HTT messages */ 590 { /* CE5 */ CE_ATTR_FLAGS, 0, 0, 512, 512, NULL, }, 591 #else /* WLAN_FEATURE_FASTPATH */ 592 /* unused */ 593 { /* CE5 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL, }, 594 #endif /* WLAN_FEATURE_FASTPATH */ 595 /* Target autonomous HIF_memcpy */ 596 { /* CE6 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL, }, 597 /* ce_diag, the Diagnostic Window */ 598 { /* CE7 */ CE_ATTR_DIAG_FLAGS, 0, 2, DIAG_TRANSFER_LIMIT, 2, NULL, }, 599 /* target->host pktlog */ 600 { /* CE8 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL, }, 601 /* Target autonomous HIF_memcpy */ 602 { /* CE9 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL, }, 603 /* Target autonomous HIF_memcpy */ 604 { /* CE10 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL, }, 605 /* Target autonomous HIF_memcpy */ 606 { /* CE11 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL, }, 607 }; 608 609 static struct CE_pipe_config target_ce_config_wlan_ar9888[] = { 610 /* host->target HTC control and raw streams */ 611 { /* CE0 */ 0, PIPEDIR_OUT, 32, 256, CE_ATTR_FLAGS, 0, }, 612 /* target->host HTC control */ 613 { /* CE1 */ 1, PIPEDIR_IN, 32, 512, CE_ATTR_FLAGS, 0, }, 614 /* target->host WMI */ 615 { /* CE2 */ 2, PIPEDIR_IN, 64, 2048, CE_ATTR_FLAGS, 0, }, 616 /* host->target WMI */ 617 { /* CE3 */ 3, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0, }, 618 /* host->target HTT */ 619 { /* CE4 */ 4, PIPEDIR_OUT, 256, 256, CE_ATTR_FLAGS, 0, }, 620 /* NB: 50% of src nentries, since tx has 2 frags */ 621 #ifdef WLAN_FEATURE_FASTPATH 622 /* target->host HTT */ 623 { /* CE5 */ 5, PIPEDIR_IN, 32, 512, CE_ATTR_FLAGS, 0, }, 624 #else 625 /* unused */ 626 { /* CE5 */ 5, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0, }, 627 #endif 628 /* Reserved for target autonomous HIF_memcpy */ 629 { /* CE6 */ 6, PIPEDIR_INOUT, 32, 4096, CE_ATTR_FLAGS, 0, }, 630 /* CE7 used only by Host */ 631 }; 632 633 static struct CE_pipe_config target_ce_config_wlan_ar900b[] = { 634 /* host->target HTC control and raw streams */ 635 { /* CE0 */ 0, PIPEDIR_OUT, 32, 256, CE_ATTR_FLAGS, 0, }, 636 /* target->host HTC control */ 637 { /* CE1 */ 1, PIPEDIR_IN, 32, 512, CE_ATTR_FLAGS, 0, }, 638 /* target->host WMI */ 639 { /* CE2 */ 2, PIPEDIR_IN, 64, 2048, CE_ATTR_FLAGS, 0, }, 640 /* host->target WMI */ 641 { /* CE3 */ 3, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0, }, 642 /* host->target HTT */ 643 { /* CE4 */ 4, PIPEDIR_OUT, 256, 256, CE_ATTR_FLAGS, 0, }, 644 /* NB: 50% of src nentries, since tx has 2 frags */ 645 #ifdef WLAN_FEATURE_FASTPATH 646 /* target->host HTT */ 647 { /* CE5 */ 5, PIPEDIR_IN, 32, 512, CE_ATTR_FLAGS, 0, }, 648 #else 649 /* unused */ 650 { /* CE5 */ 5, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0, }, 651 #endif 652 /* Reserved for target autonomous HIF_memcpy */ 653 { /* CE6 */ 6, PIPEDIR_INOUT, 32, 4096, CE_ATTR_FLAGS, 0, }, 654 /* CE7 used only by Host */ 655 { /* CE7 */ 7, PIPEDIR_INOUT, 0, 0, 0, 0, }, 656 { /* CE8 */ 8, PIPEDIR_IN, 64, 2048, CE_ATTR_FLAGS 657 /* target->host packtlog */ 658 | CE_ATTR_DISABLE_INTR, 0, }, 659 #if PEER_CACHEING_HOST_ENABLE 660 /* target autonomous qcache memcpy */ 661 { /* CE9 */ 9, PIPEDIR_INOUT, 32, 2048, CE_ATTR_FLAGS | 662 CE_ATTR_DISABLE_INTR, 0, }, 663 #endif 664 }; 665 666 #ifdef QCA_LOWMEM_CONFIG 667 #define WMI_MAX_BUF_SIZE 1700 668 #else 669 #define WMI_MAX_BUF_SIZE 2048 670 #endif 671 672 static struct CE_attr host_ce_config_wlan_qca8074[] = { 673 /* host->target HTC control and raw streams */ 674 { /* CE0 */ CE_ATTR_FLAGS, 0, 16, 2048, 0, NULL,}, 675 /* target->host HTT + HTC control */ 676 { /* CE1 */ CE_ATTR_FLAGS, 0, 0, 2048, 512, NULL,}, 677 /* target->host WMI */ 678 { /* CE2 */ CE_ATTR_FLAGS, 0, 0, WMI_MAX_BUF_SIZE, 512, NULL,}, 679 /* host->target WMI (mac0) */ 680 { /* CE3 */ CE_ATTR_FLAGS, 0, 32, WMI_MAX_BUF_SIZE, 0, NULL,}, 681 /* host->target HTT */ 682 { /* CE4 */ (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0, 683 CE_HTT_H2T_MSG_SRC_NENTRIES, 256, 0, NULL,}, 684 /* target -> host PKTLOG */ 685 { /* CE5 */ CE_ATTR_FLAGS, 0, 0, 2048, 512, NULL,}, 686 /* Target autonomous HIF_memcpy */ 687 { /* CE6 */ CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR, 0, 0, 688 0, 0, NULL,}, 689 /* host->target WMI (mac1) */ 690 { /* CE7 */ CE_ATTR_FLAGS, 0, 32, WMI_MAX_BUF_SIZE, 0, NULL,}, 691 /* Target to uMC */ 692 { /* CE8 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 693 /* host->target WMI (mac2) */ 694 { /* CE9 */ CE_ATTR_FLAGS, 0, 32, WMI_MAX_BUF_SIZE, 0, NULL,}, 695 /* target->host HTT */ 696 { /* CE10 unused */ 0, 0, 0, 0, 0, NULL,}, 697 { /* CE11 unused */ 0, 0, 0, 0, 0, NULL,}, 698 }; 699 700 static struct CE_pipe_config target_ce_config_wlan_qca8074[] = { 701 /* host->target HTC control and raw streams */ 702 { /* CE0 */ 0, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0,}, 703 /* target->host HTT */ 704 { /* CE1 */ 1, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 705 /* target->host WMI + HTC control */ 706 { /* CE2 */ 2, PIPEDIR_IN, 32, WMI_MAX_BUF_SIZE, CE_ATTR_FLAGS, 0,}, 707 /* host->target WMI */ 708 { /* CE3 */ 3, PIPEDIR_OUT, 32, WMI_MAX_BUF_SIZE, CE_ATTR_FLAGS, 0,}, 709 /* host->target HTT */ 710 { /* CE4 */ 4, PIPEDIR_OUT, 256, 256, 711 (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0,}, 712 /* NB: 50% of src nentries, since tx has 2 frags */ 713 /* Target -> host PKTLOG */ 714 { /* CE5 */ 5, PIPEDIR_IN, 32, 2048, 0, 0,}, 715 /* Reserved for target autonomous HIF_memcpy */ 716 { /* CE6 */ 6, PIPEDIR_INOUT, 32, 65535, 64, 0,}, 717 /* CE7 host->target WMI (mac1) */ 718 { /* CE7 */ 7, PIPEDIR_OUT, 32, WMI_MAX_BUF_SIZE, 719 8192, 0,}, 720 /* CE8 used only by IPA */ 721 { /* CE8 */ 8, PIPEDIR_INOUT, 32, 65535, 112, 0,}, 722 /* CE9 host->target WMI (mac2) */ 723 { /* CE9 */ 9, PIPEDIR_OUT, 32, WMI_MAX_BUF_SIZE, 8192, 0,}, 724 /* CE10 target->host HTT */ 725 {/* CE10 unused */10, PIPEDIR_NONE, 0, 0, 0, 0,}, 726 {/* CE11 unused */11, PIPEDIR_NONE, 0, 0, 0, 0,}, 727 }; 728 729 static struct CE_attr host_ce_config_wlan_qca8074_pci[] = { 730 /* host->target HTC control and raw streams */ 731 { /* CE0 */ EPPING_CE_FLAGS_POLL, 0, 16, 2048, 0, NULL,}, 732 /* target->host HTT + HTC control */ 733 { /* CE1 */ EPPING_CE_FLAGS_POLL, 0, 0, 2048, 512, NULL,}, 734 /* target->host WMI */ 735 { /* CE2 */ EPPING_CE_FLAGS_POLL, 0, 0, 2048, 256, NULL,}, 736 /* host->target WMI (mac0) */ 737 { /* CE3 */ EPPING_CE_FLAGS_POLL, 0, 32, 2048, 0, NULL,}, 738 /* host->target HTT */ 739 { /* CE4 */ (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0, 740 CE_HTT_H2T_MSG_SRC_NENTRIES, 256, 0, NULL,}, 741 /* target -> host PKTLOG */ 742 { /* CE5 */ EPPING_CE_FLAGS_POLL, 0, 0, 2048, 512, NULL,}, 743 /* Target autonomous HIF_memcpy */ 744 { /* CE6 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 745 /* host->target WMI (mac1) */ 746 { /* CE7 */ EPPING_CE_FLAGS_POLL, 0, 32, 2048, 0, NULL,}, 747 /* Target to uMC */ 748 { /* CE8 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 749 /* host->target WMI (mac2) */ 750 { /* CE9 */ EPPING_CE_FLAGS_POLL, 0, 32, 2048, 0, NULL,}, 751 /* target->host HTT */ 752 { /* CE10 unused */ 0, 0, 0, 0, 0, NULL,}, 753 { /* CE11 unused */ 0, 0, 0, 0, 0, NULL,}, 754 }; 755 756 static struct CE_pipe_config target_ce_config_wlan_qca8074_pci[] = { 757 /* host->target HTC control and raw streams */ 758 { /* CE0 */ 0, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0,}, 759 /* target->host HTT */ 760 { /* CE1 */ 1, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 761 /* target->host WMI + HTC control */ 762 { /* CE2 */ 2, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 763 /* host->target WMI */ 764 { /* CE3 */ 3, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0,}, 765 /* host->target HTT */ 766 { /* CE4 */ 4, PIPEDIR_OUT, 256, 256, 767 (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0,}, 768 /* NB: 50% of src nentries, since tx has 2 frags */ 769 /* ipa_uc->target */ 770 { /* CE5 */ 5, PIPEDIR_OUT, 1024, 64, 771 (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0,}, 772 /* Reserved for target autonomous HIF_memcpy */ 773 { /* CE6 */ 6, PIPEDIR_INOUT, 32, 16384, CE_ATTR_FLAGS, 0,}, 774 /* CE7 used only by Host */ 775 { /* CE7 */ 7, PIPEDIR_INOUT_H2H, 0, 0, 776 (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0,}, 777 /* CE8 used only by IPA */ 778 { /* CE8 */ 8, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 779 /* CE9 target->host HTT */ 780 { /* CE9 */ 9, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 781 /* CE10 target->host HTT */ 782 { /* CE10 */ 10, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 783 /* Target -> host PKTLOG */ 784 { /* CE11 */ 11, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 785 }; 786 787 static struct CE_attr host_lowdesc_ce_config_wlan_adrastea_nopktlog[] = { 788 /* host->target HTC control and raw streams */ 789 { /* CE0 */ CE_ATTR_FLAGS, 0, 16, 2048, 0, NULL,}, 790 /* target->host HTT + HTC control */ 791 { /* CE1 */ CE_ATTR_FLAGS, 0, 0, 2048, 256, NULL,}, 792 /* target->host WMI */ 793 { /* CE2 */ CE_ATTR_FLAGS, 0, 0, 2048, 64, NULL,}, 794 /* host->target WMI */ 795 { /* CE3 */ CE_ATTR_FLAGS, 0, 32, 2048, 0, NULL,}, 796 /* host->target HTT */ 797 { /* CE4 */ (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0, 798 CE_HTT_H2T_MSG_SRC_NENTRIES, 256, 0, NULL,}, 799 /* ipa_uc->target HTC control */ 800 { /* CE5 */ (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0, 801 CE_HTT_H2T_MSG_SRC_NENTRIES, 512, 0, NULL,}, 802 /* Target autonomous HIF_memcpy */ 803 { /* CE6 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 804 /* ce_diag, the Diagnostic Window */ 805 { /* CE7 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 806 /* Target to uMC */ 807 { /* CE8 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 808 /* target->host HTT */ 809 { /* CE9 */ CE_ATTR_FLAGS, 0, 0, 2048, 64, NULL,}, 810 /* target->host HTT */ 811 { /* CE10 */ CE_ATTR_FLAGS, 0, 0, 2048, 64, NULL,}, 812 /* target -> host PKTLOG */ 813 { /* CE11 */ (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0, 814 0, 2048, 0, NULL,}, 815 }; 816 817 static struct CE_attr host_ce_config_wlan_adrastea[] = { 818 /* host->target HTC control and raw streams */ 819 { /* CE0 */ CE_ATTR_FLAGS, 0, 16, 2048, 0, NULL,}, 820 /* target->host HTT + HTC control */ 821 { /* CE1 */ CE_ATTR_FLAGS, 0, 0, 2048, 512, NULL,}, 822 /* target->host WMI */ 823 { /* CE2 */ CE_ATTR_FLAGS, 0, 0, 2048, 128, NULL,}, 824 /* host->target WMI */ 825 { /* CE3 */ CE_ATTR_FLAGS, 0, 32, 2048, 0, NULL,}, 826 /* host->target HTT */ 827 { /* CE4 */ (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0, 828 CE_HTT_H2T_MSG_SRC_NENTRIES, 256, 0, NULL,}, 829 /* ipa_uc->target HTC control */ 830 { /* CE5 */ (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0, 831 CE_HTT_H2T_MSG_SRC_NENTRIES, 512, 0, NULL,}, 832 /* Target autonomous HIF_memcpy */ 833 { /* CE6 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 834 /* ce_diag, the Diagnostic Window */ 835 { /* CE7 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 836 /* Target to uMC */ 837 { /* CE8 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 838 /* target->host HTT */ 839 { /* CE9 */ CE_ATTR_FLAGS, 0, 0, 2048, 512, NULL,}, 840 /* target->host HTT */ 841 { /* CE10 */ CE_ATTR_FLAGS, 0, 0, 2048, 512, NULL,}, 842 /* target -> host PKTLOG */ 843 { /* CE11 */ CE_ATTR_FLAGS, 0, 0, 2048, 512, NULL,}, 844 }; 845 846 static struct CE_pipe_config target_ce_config_wlan_adrastea[] = { 847 /* host->target HTC control and raw streams */ 848 { /* CE0 */ 0, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0,}, 849 /* target->host HTT */ 850 { /* CE1 */ 1, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 851 /* target->host WMI + HTC control */ 852 { /* CE2 */ 2, PIPEDIR_IN, 64, 2048, CE_ATTR_FLAGS, 0,}, 853 /* host->target WMI */ 854 { /* CE3 */ 3, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0,}, 855 /* host->target HTT */ 856 { /* CE4 */ 4, PIPEDIR_OUT, 256, 256, 857 (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0,}, 858 /* NB: 50% of src nentries, since tx has 2 frags */ 859 /* ipa_uc->target */ 860 { /* CE5 */ 5, PIPEDIR_OUT, 1024, 64, 861 (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0,}, 862 /* Reserved for target autonomous HIF_memcpy */ 863 { /* CE6 */ 6, PIPEDIR_INOUT, 32, 16384, CE_ATTR_FLAGS, 0,}, 864 /* CE7 used only by Host */ 865 { /* CE7 */ 7, PIPEDIR_INOUT_H2H, 0, 0, 866 (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0,}, 867 /* CE8 used only by IPA */ 868 { /* CE8 */ 8, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 869 /* CE9 target->host HTT */ 870 { /* CE9 */ 9, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 871 /* CE10 target->host HTT */ 872 { /* CE10 */ 10, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 873 /* Target -> host PKTLOG */ 874 { /* CE11 */ 11, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 875 }; 876 877 #define QCA_6290_CE_COUNT 9 878 #ifdef QCA_6290_AP_MODE 879 static struct CE_attr host_ce_config_wlan_qca6290[] = { 880 /* host->target HTC control and raw streams */ 881 { /* CE0 */ CE_ATTR_FLAGS, 0, 16, 2048, 0, NULL,}, 882 /* target->host HTT + HTC control */ 883 { /* CE1 */ (CE_ATTR_FLAGS | CE_ATTR_ENABLE_POLL), 0, 0, 2048, 884 512, NULL,}, 885 /* target->host WMI */ 886 { /* CE2 */ (CE_ATTR_FLAGS | CE_ATTR_ENABLE_POLL), 0, 0, 2048, 887 32, NULL,}, 888 /* host->target WMI */ 889 { /* CE3 */ CE_ATTR_FLAGS, 0, 32, 2048, 0, NULL,}, 890 /* host->target HTT */ 891 { /* CE4 */ (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0, 892 CE_HTT_H2T_MSG_SRC_NENTRIES, 256, 0, NULL,}, 893 /* target -> host PKTLOG */ 894 { /* CE5 */ (CE_ATTR_FLAGS | CE_ATTR_ENABLE_POLL), 0, 0, 2048, 895 512, NULL,}, 896 /* Target autonomous HIF_memcpy */ 897 { /* CE6 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 898 /* host->target WMI (mac1) */ 899 { /* CE7 */ CE_ATTR_FLAGS, 0, 32, 2048, 0, NULL,}, 900 /* Reserved for target */ 901 { /* CE8 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 902 /* CE 9, 10, 11 belong to CoreBsp & MHI driver */ 903 }; 904 905 static struct CE_pipe_config target_ce_config_wlan_qca6290[] = { 906 /* host->target HTC control and raw streams */ 907 { /* CE0 */ 0, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0,}, 908 /* target->host HTT */ 909 { /* CE1 */ 1, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 910 /* target->host WMI + HTC control */ 911 { /* CE2 */ 2, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 912 /* host->target WMI */ 913 { /* CE3 */ 3, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0,}, 914 /* host->target HTT */ 915 { /* CE4 */ 4, PIPEDIR_OUT, 256, 256, 916 (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0,}, 917 /* Target -> host PKTLOG */ 918 { /* CE5 */ 5, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 919 /* Reserved for target autonomous HIF_memcpy */ 920 { /* CE6 */ 6, PIPEDIR_INOUT, 32, 16384, CE_ATTR_FLAGS, 0,}, 921 /* CE7 used only by Host */ 922 { /* CE7 */ 7, PIPEDIR_OUT, 32, 2048, 923 8192, 0,}, 924 /* Reserved for target */ 925 { /* CE8 */ 8, PIPEDIR_INOUT, 32, 16384, CE_ATTR_FLAGS, 0,}, 926 /* CE 9, 10, 11 belong to CoreBsp & MHI driver */ 927 }; 928 #else 929 static struct CE_attr host_ce_config_wlan_qca6290[] = { 930 /* host->target HTC control and raw streams */ 931 { /* CE0 */ CE_ATTR_FLAGS, 0, 16, 2048, 0, NULL,}, 932 /* target->host HTT + HTC control */ 933 { /* CE1 */ CE_ATTR_FLAGS, 0, 0, 2048, 512, NULL,}, 934 /* target->host WMI */ 935 { /* CE2 */ CE_ATTR_FLAGS, 0, 0, 2048, 32, NULL,}, 936 /* host->target WMI */ 937 { /* CE3 */ CE_ATTR_FLAGS, 0, 32, 2048, 0, NULL,}, 938 /* host->target HTT */ 939 { /* CE4 */ (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0, 940 CE_HTT_H2T_MSG_SRC_NENTRIES, 256, 0, NULL,}, 941 /* target -> host PKTLOG */ 942 { /* CE5 */ CE_ATTR_FLAGS, 0, 0, 2048, 512, NULL,}, 943 /* Target autonomous HIF_memcpy */ 944 { /* CE6 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 945 /* ce_diag, the Diagnostic Window */ 946 { /* CE7 */ (CE_ATTR_DIAG_FLAGS | CE_ATTR_DISABLE_INTR), 0, 947 2, DIAG_TRANSFER_LIMIT, 2, NULL,}, 948 /* Reserved for target */ 949 { /* CE8 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 950 /* CE 9, 10, 11 belong to CoreBsp & MHI driver */ 951 }; 952 953 static struct CE_pipe_config target_ce_config_wlan_qca6290[] = { 954 /* host->target HTC control and raw streams */ 955 { /* CE0 */ 0, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0,}, 956 /* target->host HTT */ 957 { /* CE1 */ 1, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 958 /* target->host WMI + HTC control */ 959 { /* CE2 */ 2, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 960 /* host->target WMI */ 961 { /* CE3 */ 3, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0,}, 962 /* host->target HTT */ 963 { /* CE4 */ 4, PIPEDIR_OUT, 256, 256, 964 (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0,}, 965 /* Target -> host PKTLOG */ 966 { /* CE5 */ 5, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 967 /* Reserved for target autonomous HIF_memcpy */ 968 { /* CE6 */ 6, PIPEDIR_INOUT, 32, 16384, CE_ATTR_FLAGS, 0,}, 969 /* CE7 used only by Host */ 970 { /* CE7 */ 7, PIPEDIR_INOUT_H2H, 0, 0, 971 (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0,}, 972 /* Reserved for target */ 973 { /* CE8 */ 8, PIPEDIR_INOUT, 32, 16384, CE_ATTR_FLAGS, 0,}, 974 /* CE 9, 10, 11 belong to CoreBsp & MHI driver */ 975 }; 976 #endif 977 978 #define QCA_6390_CE_COUNT 9 979 static struct CE_attr host_ce_config_wlan_qca6390[] = { 980 /* host->target HTC control and raw streams */ 981 { /* CE0 */ CE_ATTR_FLAGS, 0, 16, 2048, 0, NULL,}, 982 /* target->host HTT + HTC control */ 983 { /* CE1 */ CE_ATTR_FLAGS, 0, 0, 2048, 512, NULL,}, 984 /* target->host WMI */ 985 { /* CE2 */ CE_ATTR_FLAGS, 0, 0, 2048, 32, NULL,}, 986 /* host->target WMI */ 987 { /* CE3 */ CE_ATTR_FLAGS, 0, 32, 2048, 0, NULL,}, 988 /* host->target HTT */ 989 { /* CE4 */ (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0, 990 CE_HTT_H2T_MSG_SRC_NENTRIES, 256, 0, NULL,}, 991 /* target -> host PKTLOG */ 992 { /* CE5 */ CE_ATTR_FLAGS, 0, 0, 2048, 512, NULL,}, 993 /* Target autonomous HIF_memcpy */ 994 { /* CE6 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 995 /* ce_diag, the Diagnostic Window */ 996 { /* CE7 */ (CE_ATTR_DIAG_FLAGS | CE_ATTR_DISABLE_INTR), 0, 997 0, DIAG_TRANSFER_LIMIT, 0, NULL,}, 998 /* Reserved for target */ 999 { /* CE8 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 1000 /* CE 9, 10, 11 belong to CoreBsp & MHI driver */ 1001 }; 1002 1003 static struct CE_pipe_config target_ce_config_wlan_qca6390[] = { 1004 /* host->target HTC control and raw streams */ 1005 { /* CE0 */ 0, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0,}, 1006 /* target->host HTT */ 1007 { /* CE1 */ 1, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 1008 /* target->host WMI + HTC control */ 1009 { /* CE2 */ 2, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 1010 /* host->target WMI */ 1011 { /* CE3 */ 3, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0,}, 1012 /* host->target HTT */ 1013 { /* CE4 */ 4, PIPEDIR_OUT, 256, 256, 1014 (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0,}, 1015 /* Target -> host PKTLOG */ 1016 { /* CE5 */ 5, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 1017 /* Reserved for target autonomous HIF_memcpy */ 1018 { /* CE6 */ 6, PIPEDIR_INOUT, 32, 16384, CE_ATTR_FLAGS, 0,}, 1019 /* CE7 used only by Host */ 1020 { /* CE7 */ 7, PIPEDIR_INOUT_H2H, 0, 0, 1021 (CE_ATTR_FLAGS | CE_ATTR_DISABLE_INTR), 0,}, 1022 /* Reserved for target */ 1023 { /* CE8 */ 8, PIPEDIR_INOUT, 32, 16384, CE_ATTR_FLAGS, 0,}, 1024 /* CE 9, 10, 11 belong to CoreBsp & MHI driver */ 1025 }; 1026 #endif /* __HIF_PCI_INTERNAL_H__ */ 1027