blob: 9f94e6ce1e986abbdc3fc2b9d2033079ddac56dc [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Mihir Shete96cd1902015-03-04 15:47:31 +05302 * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved.
Kiet Lam842dad02014-02-18 18:44:02 -08003 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
Gopichand Nakkala92f07d82013-01-08 21:16:34 -080020 */
Kiet Lam842dad02014-02-18 18:44:02 -080021
22/*
23 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
26 */
27
Jeff Johnson295189b2012-06-20 16:38:30 -070028/**=========================================================================
29
30 @file wlan_qct_dxe_cfg_i.c
31
32 @brief
33
34 This file contains the external API exposed by the wlan data transfer abstraction layer module.
Jeff Johnson295189b2012-06-20 16:38:30 -070035========================================================================*/
36
37/*===========================================================================
38
39 EDIT HISTORY FOR FILE
40
41
42 This section contains comments describing changes made to the module.
43 Notice that changes are listed in reverse chronological order.
44
45
46 $Header:$ $DateTime: $ $Author: $
47
48
49when who what, where, why
50-------- --- ----------------------------------------------------------
5108/03/10 schang Created module.
52
53===========================================================================*/
54
55/*===========================================================================
56
57 INCLUDE FILES FOR MODULE
58
59===========================================================================*/
60
61/*----------------------------------------------------------------------------
62 * Include Files
63 * -------------------------------------------------------------------------*/
64#include "wlan_qct_dxe_i.h"
65
66/*----------------------------------------------------------------------------
67 * Preprocessor Definitions and Constants
68 * -------------------------------------------------------------------------*/
69typedef struct
70{
71 WDTS_ChannelType wlanChannel;
72 WLANDXE_DMAChannelType DMAChannel;
73 WLANDXE_ChannelConfigType *channelConfig;
74} WLANDXE_ChannelMappingType;
75
76wpt_uint32 channelBaseAddressList[WLANDXE_DMA_CHANNEL_MAX] =
77{
78 WLANDXE_DMA_CHAN0_BASE_ADDRESS,
79 WLANDXE_DMA_CHAN1_BASE_ADDRESS,
80 WLANDXE_DMA_CHAN2_BASE_ADDRESS,
81 WLANDXE_DMA_CHAN3_BASE_ADDRESS,
82 WLANDXE_DMA_CHAN4_BASE_ADDRESS,
83 WLANDXE_DMA_CHAN5_BASE_ADDRESS,
84 WLANDXE_DMA_CHAN6_BASE_ADDRESS
85};
86
87wpt_uint32 channelInterruptMask[WLANDXE_DMA_CHANNEL_MAX] =
88{
89 WLANDXE_INT_MASK_CHAN_0,
90 WLANDXE_INT_MASK_CHAN_1,
91 WLANDXE_INT_MASK_CHAN_2,
92 WLANDXE_INT_MASK_CHAN_3,
93 WLANDXE_INT_MASK_CHAN_4,
94 WLANDXE_INT_MASK_CHAN_5,
95 WLANDXE_INT_MASK_CHAN_6
96};
97
98WLANDXE_ChannelConfigType chanTXLowPriConfig =
99{
100 /* Q handle type, Circular */
101 WLANDXE_CHANNEL_HANDLE_CIRCULA,
102
103 /* Number of Descriptor, NOT CLEAR YET !!! */
104 WLANDXE_LO_PRI_RES_NUM ,
105
106 /* MAX num RX Buffer */
107 0,
108
109 /* Reference WQ, TX23 */
110 23,
111
112 /* USB Only, End point info */
113 0,
114
115 /* Transfer Type */
116 WLANDXE_DESC_CTRL_XTYPE_H2B,
117
118 /* Channel Priority 7(Highest) - 0(Lowest) NOT CLEAR YET !!! */
119 4,
120
121 /* BD attached to frames for this pipe */
122 eWLAN_PAL_TRUE,
123
124 /* chk_size, NOT CLEAR YET !!!*/
125 0,
126
127 /* bmuThdSel, NOT CLEAR YET !!! */
128 5,
129
130 /* Added in Gen5 for Prefetch, NOT CLEAR YET !!! */
131 eWLAN_PAL_TRUE,
132
133 /* Use short Descriptor */
134 eWLAN_PAL_TRUE
135};
136
137WLANDXE_ChannelConfigType chanTXHighPriConfig =
138{
139 /* Q handle type, Circular */
140 WLANDXE_CHANNEL_HANDLE_CIRCULA,
141
142 /* Number of Descriptor, NOT CLEAR YET !!! */
143 WLANDXE_HI_PRI_RES_NUM ,
144
145 /* MAX num RX Buffer */
146 0,
147
148 /* Reference WQ, TX23 */
149 23,
150
151 /* USB Only, End point info */
152 0,
153
154 /* Transfer Type */
155 WLANDXE_DESC_CTRL_XTYPE_H2B,
156
157 /* Channel Priority 7(Highest) - 0(Lowest), NOT CLEAR YET !!! */
158 6,
159
160 /* BD attached to frames for this pipe */
161 eWLAN_PAL_TRUE,
162
163 /* chk_size, NOT CLEAR YET !!!*/
164 0,
165
166 /* bmuThdSel, NOT CLEAR YET !!! */
167 7,
168
169 /* Added in Gen5 for Prefetch, NOT CLEAR YET !!!*/
170 eWLAN_PAL_TRUE,
171
172 /* Use short Descriptor */
173 eWLAN_PAL_TRUE
174};
175
176WLANDXE_ChannelConfigType chanRXLowPriConfig =
177{
178 /* Q handle type, Circular */
179 WLANDXE_CHANNEL_HANDLE_CIRCULA,
180
181 /* Number of Descriptor, NOT CLEAR YET !!! */
Mohit Khanna5ef35f42012-09-11 15:58:51 -0700182 256,
Jeff Johnson295189b2012-06-20 16:38:30 -0700183
184 /* MAX num RX Buffer, NOT CLEAR YET !!! */
185 1,
186
187 /* Reference WQ, NOT CLEAR YET !!! */
188 /* Temporary BMU Work Q 4 */
189 11,
190
191 /* USB Only, End point info */
192 0,
193
194 /* Transfer Type */
195 WLANDXE_DESC_CTRL_XTYPE_B2H,
196
197 /* Channel Priority 7(Highest) - 0(Lowest), NOT CLEAR YET !!! */
198 5,
199
200 /* BD attached to frames for this pipe */
201 eWLAN_PAL_TRUE,
202
203 /* chk_size, NOT CLEAR YET !!!*/
204 0,
205
206 /* bmuThdSel, NOT CLEAR YET !!! */
207 6,
208
209 /* Added in Gen5 for Prefetch, NOT CLEAR YET !!!*/
210 eWLAN_PAL_TRUE,
211
212 /* Use short Descriptor */
213 eWLAN_PAL_TRUE
214};
215
216WLANDXE_ChannelConfigType chanRXHighPriConfig =
217{
218 /* Q handle type, Circular */
219 WLANDXE_CHANNEL_HANDLE_CIRCULA,
220
221 /* Number of Descriptor, NOT CLEAR YET !!! */
Mohit Khanna5ef35f42012-09-11 15:58:51 -0700222 256,
Jeff Johnson295189b2012-06-20 16:38:30 -0700223
224 /* MAX num RX Buffer, NOT CLEAR YET !!! */
225 1,
226
227 /* Reference WQ, RX11 */
228 4,
229
230 /* USB Only, End point info */
231 0,
232
233 /* Transfer Type */
234 WLANDXE_DESC_CTRL_XTYPE_B2H,
235
236 /* Channel Priority 7(Highest) - 0(Lowest), NOT CLEAR YET !!! */
237 6,
238
239 /* BD attached to frames for this pipe */
240 eWLAN_PAL_TRUE,
241
242 /* chk_size, NOT CLEAR YET !!!*/
243 0,
244
245 /* bmuThdSel, NOT CLEAR YET !!! */
246 8,
247
248 /* Added in Gen5 for Prefetch, NOT CLEAR YET !!!*/
249 eWLAN_PAL_TRUE,
250
251 /* Use short Descriptor */
252 eWLAN_PAL_TRUE
253};
254
Jeff Johnson295189b2012-06-20 16:38:30 -0700255WLANDXE_ChannelMappingType channelList[WDTS_CHANNEL_MAX] =
256{
257 {WDTS_CHANNEL_TX_LOW_PRI, WLANDXE_DMA_CHANNEL_0, &chanTXLowPriConfig},
258 {WDTS_CHANNEL_TX_HIGH_PRI, WLANDXE_DMA_CHANNEL_4, &chanTXHighPriConfig},
259 {WDTS_CHANNEL_RX_LOW_PRI, WLANDXE_DMA_CHANNEL_1, &chanRXLowPriConfig},
Jeff Johnson295189b2012-06-20 16:38:30 -0700260 {WDTS_CHANNEL_RX_HIGH_PRI, WLANDXE_DMA_CHANNEL_3, &chanRXHighPriConfig},
Jeff Johnson295189b2012-06-20 16:38:30 -0700261};
262
263WLANDXE_TxCompIntConfigType txCompInt =
264{
265 /* TX Complete Interrupt enable method */
266 WLANDXE_TX_COMP_INT_PER_K_FRAMES,
267
268 /* TX Low Resource remaining resource threshold for Low Pri Ch */
269 WLANDXE_TX_LOW_RES_THRESHOLD,
270
271 /* TX Low Resource remaining resource threshold for High Pri Ch */
272 WLANDXE_TX_LOW_RES_THRESHOLD,
273
274 /* RX Low Resource remaining resource threshold */
275 5,
276
277 /* Per K frame enable Interrupt */
278 /*WLANDXE_HI_PRI_RES_NUM*/ 5,
279
280 /* Periodic timer msec */
281 10
282};
283
284/*==========================================================================
285 @ Function Name
286 dxeCommonDefaultConfig
287
288 @ Description
289
290 @ Parameters
291 WLANDXE_CtrlBlkType *dxeCtrlBlk,
292 DXE host driver main control block
293
294 @ Return
295 wpt_status
296
297===========================================================================*/
298wpt_status dxeCommonDefaultConfig
299(
300 WLANDXE_CtrlBlkType *dxeCtrlBlk
301)
302{
303 wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
304
305 dxeCtrlBlk->rxReadyCB = NULL;
306 dxeCtrlBlk->txCompCB = NULL;
307 dxeCtrlBlk->lowResourceCB = NULL;
308
309 wpalMemoryCopy(&dxeCtrlBlk->txCompInt,
310 &txCompInt,
311 sizeof(WLANDXE_TxCompIntConfigType));
312
313 return status;
314}
315
316/*==========================================================================
317 @ Function Name
318 dxeChannelDefaultConfig
319
320 @ Description
321 Get defualt configuration values from pre defined structure
322 All the channels must have it's own configurations
323
324 @ Parameters
Gopichand Nakkalaa2cb10c2013-05-03 17:48:29 -0700325 WLANDXE_CtrlBlkType: *dxeCtrlBlk,
Jeff Johnson295189b2012-06-20 16:38:30 -0700326 DXE host driver main control block
327 WLANDXE_ChannelCBType *channelEntry
328 Channel specific control block
329
330 @ Return
331 wpt_status
332
333===========================================================================*/
334wpt_status dxeChannelDefaultConfig
335(
336 WLANDXE_CtrlBlkType *dxeCtrlBlk,
337 WLANDXE_ChannelCBType *channelEntry
338)
339{
340 wpt_status status = eWLAN_PAL_STATUS_SUCCESS;
341 wpt_uint32 baseAddress;
342 wpt_uint32 dxeControlRead = 0;
343 wpt_uint32 dxeControlWrite = 0;
344 wpt_uint32 dxeControlWriteValid = 0;
345 wpt_uint32 dxeControlWriteEop = 0;
346 wpt_uint32 dxeControlWriteEopInt = 0;
347 wpt_uint32 idx;
Gopichand Nakkalaa2cb10c2013-05-03 17:48:29 -0700348 wpt_uint32 rxResourceCount = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700349 WLANDXE_ChannelMappingType *mappedChannel = NULL;
350
351 /* Sanity Check */
352 if((NULL == dxeCtrlBlk) || (NULL == channelEntry))
353 {
354 HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
355 "dxeLinkDescAndCtrlBlk Channel Entry is not valid");
356 return eWLAN_PAL_STATUS_E_INVAL;
357 }
358
359 for(idx = 0; idx < WDTS_CHANNEL_MAX; idx++)
360 {
361 if(channelEntry->channelType == channelList[idx].wlanChannel)
362 {
363 mappedChannel = &channelList[idx];
364 break;
365 }
366 }
367
368 if((NULL == mappedChannel) || (WDTS_CHANNEL_MAX == idx))
369 {
370 HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700371 "%s Failed to map channel", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700372 return eWLAN_PAL_STATUS_E_INVAL;
373 }
374
375 wpalMemoryCopy(&channelEntry->channelConfig,
376 mappedChannel->channelConfig,
377 sizeof(WLANDXE_ChannelConfigType));
378
379 baseAddress = channelBaseAddressList[mappedChannel->DMAChannel];
380 channelEntry->channelRegister.chDXEBaseAddr = baseAddress;
381 channelEntry->channelRegister.chDXEStatusRegAddr = baseAddress + WLANDXE_DMA_CH_STATUS_REG;
382 channelEntry->channelRegister.chDXEDesclRegAddr = baseAddress + WLANDXE_DMA_CH_DESCL_REG;
383 channelEntry->channelRegister.chDXEDeschRegAddr = baseAddress + WLANDXE_DMA_CH_DESCH_REG;
384 channelEntry->channelRegister.chDXELstDesclRegAddr = baseAddress + WLANDXE_DMA_CH_LST_DESCL_REG;
385 channelEntry->channelRegister.chDXECtrlRegAddr = baseAddress + WLANDXE_DMA_CH_CTRL_REG;
386 channelEntry->channelRegister.chDXESzRegAddr = baseAddress + WLANDXE_DMA_CH_SZ_REG;
387 channelEntry->channelRegister.chDXEDadrlRegAddr = baseAddress + WLANDXE_DMA_CH_DADRL_REG;
388 channelEntry->channelRegister.chDXEDadrhRegAddr = baseAddress + WLANDXE_DMA_CH_DADRH_REG;
389 channelEntry->channelRegister.chDXESadrlRegAddr = baseAddress + WLANDXE_DMA_CH_SADRL_REG;
390 channelEntry->channelRegister.chDXESadrhRegAddr = baseAddress + WLANDXE_DMA_CH_SADRH_REG;
391
392 /* Channel Mask?
393 * This value will control channel control register.
394 * This register will be set to trigger actual DMA transfer activate
395 * CH_N_CTRL */
396 channelEntry->extraConfig.chan_mask = 0;
397 /* Check VAL bit before processing descriptor */
398 channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_EDVEN_MASK;
399 /* Use External Descriptor Linked List */
400 channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_EDEN_MASK;
401 /* Enable Channel Interrupt on error */
402 channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_INE_ERR_MASK;
403 /* Enable INT after XFER done */
404 channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_INE_DONE_MASK;
405 /* Enable INT External Descriptor */
406 channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_INE_ED_MASK;
407 /* Set Channel This is not channel, event counter, somthing wrong */
408 channelEntry->extraConfig.chan_mask |=
409 mappedChannel->DMAChannel << WLANDXE_CH_CTRL_CTR_SEL_OFFSET;
410 /* Transfer Type */
411 channelEntry->extraConfig.chan_mask |= mappedChannel->channelConfig->xfrType;
412 /* Use Short Descriptor, THIS LOOKS SOME WIERD, REVISIT */
413 if(!channelEntry->channelConfig.useShortDescFmt)
414 {
415 channelEntry->extraConfig.chan_mask |= WLANDXE_DESC_CTRL_DFMT;
416 }
417 /* TX Channel, Set DIQ bit, Clear SIQ bit since source is not WQ */
418 if((WDTS_CHANNEL_TX_LOW_PRI == channelEntry->channelType) ||
419 (WDTS_CHANNEL_TX_HIGH_PRI == channelEntry->channelType))
420 {
421 channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_DIQ_MASK;
Siddharth Bhalb7e8e882014-10-10 16:27:47 +0530422 if (wpalWcnssIsProntoHwVer3())
423 {
424 HDXE_MSG(eWLAN_MODULE_DAL_DATA, eWLAN_PAL_TRACE_LEVEL_ERROR,
425 "Using WQ 6 for TX Low/High PRI Channel");
426 channelEntry->channelConfig.refWQ = WLANDXE_PRONTO_TX_WQ;
427 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700428 }
429 /* RX Channel, Set SIQ bit, Clear DIQ bit since source is not WQ */
430 else if((WDTS_CHANNEL_RX_LOW_PRI == channelEntry->channelType) ||
431 (WDTS_CHANNEL_RX_HIGH_PRI == channelEntry->channelType))
432 {
433 channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_SIQ_MASK;
434 }
435 else
436 {
437 /* This is test H2H channel, TX, RX not use work Q
438 * Do Nothing */
439 }
440 /* Frame Contents Swap */
441 channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_SWAP_MASK;
442 /* Host System Using Little Endian */
443 channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_ENDIAN_MASK;
444 /* BMU Threshold select */
445 channelEntry->extraConfig.chan_mask |=
446 channelEntry->channelConfig.bmuThdSel << WLANDXE_CH_CTRL_BTHLD_SEL_OFFSET;
447 /* EOP for control register ??? */
448 channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_EOP_MASK;
449 /* Channel Priority */
450 channelEntry->extraConfig.chan_mask |= channelEntry->channelConfig.chPriority << WLANDXE_CH_CTRL_PRIO_OFFSET;
451 /* PDU REL */
452 channelEntry->extraConfig.chan_mask |= WLANDXE_DESC_CTRL_PDU_REL;
453 /* Disable DMA transfer on this channel */
454 channelEntry->extraConfig.chan_mask_read_disable = channelEntry->extraConfig.chan_mask;
455 /* Enable DMA transfer on this channel */
456 channelEntry->extraConfig.chan_mask |= WLANDXE_CH_CTRL_EN_MASK;
457 /* Channel Mask done */
458
459 /* Control Read
460 * Default Descriptor control Word value for RX ready DXE descriptor
461 * DXE engine will reference this value before DMA transfer */
462 dxeControlRead = 0;
463 /* Source is a Queue ID, not flat memory address */
464 dxeControlRead |= WLANDXE_DESC_CTRL_SIQ;
465 /* Transfer direction is BMU 2 Host */
466 dxeControlRead |= WLANDXE_DESC_CTRL_XTYPE_B2H;
467 /* End of Packet, RX is single fragment */
468 dxeControlRead |= WLANDXE_DESC_CTRL_EOP;
469 /* BD Present, default YES, B2H case it must be 0 to insert BD */
470 if(!channelEntry->channelConfig.bdPresent)
471 {
472 dxeControlRead |= WLANDXE_DESC_CTRL_BDH;
473 }
474 /* Channel Priority */
475 dxeControlRead |= channelEntry->channelConfig.chPriority << WLANDXE_CH_CTRL_PRIO_OFFSET;
476 /* BMU Threshold select, only used H2B, not this case??? */
477 dxeControlRead |= channelEntry->channelConfig.bmuThdSel << WLANDXE_CH_CTRL_BTHLD_SEL_OFFSET;
478 /* PDU Release, Release BD/PDU when DMA done */
479 dxeControlRead |= WLANDXE_DESC_CTRL_PDU_REL;
480 /* Use Short Descriptor, THIS LOOKS SOME WIERD, REVISIT */
481 if(!channelEntry->channelConfig.useShortDescFmt)
482 {
483 dxeControlRead |= WLANDXE_DESC_CTRL_DFMT;
484 }
485 /* Interrupt on Descriptor done */
486 dxeControlRead |= WLANDXE_DESC_CTRL_INT;
487 /* For ready status, this Control WORD must be VALID */
488 dxeControlRead |= WLANDXE_DESC_CTRL_VALID;
489 /* Frame Contents Swap */
490 dxeControlRead |= WLANDXE_DESC_CTRL_BDT_SWAP;
491 /* Host Little Endian */
492 if((WDTS_CHANNEL_TX_LOW_PRI == channelEntry->channelType) ||
493 (WDTS_CHANNEL_TX_HIGH_PRI == channelEntry->channelType))
494 {
495 dxeControlRead |= WLANDXE_DESC_CTRL_ENDIANNESS;
496 }
497
498 /* SWAP if needed */
499 channelEntry->extraConfig.cw_ctrl_read = WLANDXE_U32_SWAP_ENDIAN(dxeControlRead);
500 /* Control Read Done */
501
502 /* Control Write
503 * Write into DXE descriptor control word to TX frame
504 * DXE engine will reference this word to contorl TX DMA channel */
505 channelEntry->extraConfig.cw_ctrl_write = 0;
506 /* Transfer type, from Host 2 BMU */
507 dxeControlWrite |= mappedChannel->channelConfig->xfrType;
508 /* BD Present, this looks some weird ??? */
509 if(!channelEntry->channelConfig.bdPresent)
510 {
511 dxeControlWrite |= WLANDXE_DESC_CTRL_BDH;
512 }
513 /* Channel Priority */
514 dxeControlWrite |= channelEntry->channelConfig.chPriority << WLANDXE_CH_CTRL_PRIO_OFFSET;
515 /* Use Short Descriptor, THIS LOOKS SOME WIERD, REVISIT */
516 if(!channelEntry->channelConfig.useShortDescFmt)
517 {
518 dxeControlWrite |= WLANDXE_DESC_CTRL_DFMT;
519 }
520 /* BMU Threshold select, only used H2B, not this case??? */
521 dxeControlWrite |= channelEntry->channelConfig.bmuThdSel << WLANDXE_CH_CTRL_BTHLD_SEL_OFFSET;
522 /* Destination is WQ */
523 dxeControlWrite |= WLANDXE_DESC_CTRL_DIQ;
524 /* Frame Contents Swap */
525 dxeControlWrite |= WLANDXE_DESC_CTRL_BDT_SWAP;
526 /* Host Little Endian */
527 dxeControlWrite |= WLANDXE_DESC_CTRL_ENDIANNESS;
528 /* Interrupt Enable */
529 dxeControlWrite |= WLANDXE_DESC_CTRL_INT;
530
531 dxeControlWriteValid = dxeControlWrite | WLANDXE_DESC_CTRL_VALID;
532 dxeControlWriteEop = dxeControlWriteValid | WLANDXE_DESC_CTRL_EOP;
533 dxeControlWriteEopInt = dxeControlWriteEop | WLANDXE_DESC_CTRL_INT;
534
535 /* DXE Descriptor must has Endian swapped value */
536 channelEntry->extraConfig.cw_ctrl_write = WLANDXE_U32_SWAP_ENDIAN(dxeControlWrite);
537 /* Control Write DONE */
538
539 /* Control Write include VAL bit
540 * This Control word used to set valid bit and
541 * trigger DMA transfer for specific descriptor */
542 channelEntry->extraConfig.cw_ctrl_write_valid =
543 WLANDXE_U32_SWAP_ENDIAN(dxeControlWriteValid);
544
545 /* Control Write include EOP
546 * End of Packet */
547 channelEntry->extraConfig.cw_ctrl_write_eop =
548 WLANDXE_U32_SWAP_ENDIAN(dxeControlWriteEop);
549
550 /* Control Write include EOP and INT
551 * indicate End Of Packet and generate interrupt on descriptor Done */
552 channelEntry->extraConfig.cw_ctrl_write_eop_int =
553 WLANDXE_U32_SWAP_ENDIAN(dxeControlWriteEopInt);
554
555
556 /* size mask???? */
557 channelEntry->extraConfig.chk_size_mask =
558 mappedChannel->channelConfig->chk_size << 10;
559
560 channelEntry->extraConfig.refWQ_swapped =
561 WLANDXE_U32_SWAP_ENDIAN(channelEntry->channelConfig.refWQ);
562
563 /* Set Channel specific Interrupt mask */
564 channelEntry->extraConfig.intMask = channelInterruptMask[mappedChannel->DMAChannel];
565
566
Gopichand Nakkalaa2cb10c2013-05-03 17:48:29 -0700567 wpalGetNumRxRawPacket(&rxResourceCount);
568 if((WDTS_CHANNEL_TX_LOW_PRI == channelEntry->channelType) ||
569 (0 == rxResourceCount))
570 {
571 channelEntry->numDesc = mappedChannel->channelConfig->nDescs;
572 }
573 else
574 {
575 channelEntry->numDesc = rxResourceCount / 4;
576 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700577 channelEntry->assignedDMAChannel = mappedChannel->DMAChannel;
578 channelEntry->numFreeDesc = 0;
579 channelEntry->numRsvdDesc = 0;
580 channelEntry->numFragmentCurrentChain = 0;
581 channelEntry->numTotalFrame = 0;
582 channelEntry->hitLowResource = eWLAN_PAL_FALSE;
583
584 return status;
585}