xref: /wlan-dirver/qca-wifi-host-cmn/hif/src/ce/ce_assignment.h (revision dd4dc88b837a295134aa9869114a2efee0f4894b)
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