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