1/*
2 * CmdBldCfg.c
3 *
4 * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved.
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 *  * Redistributions of source code must retain the above copyright
12 *    notice, this list of conditions and the following disclaimer.
13 *  * Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in
15 *    the documentation and/or other materials provided with the
16 *    distribution.
17 *  * Neither the name Texas Instruments nor the names of its
18 *    contributors may be used to endorse or promote products derived
19 *    from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 */
33
34
35/** \file  CmdBldCfg.c
36 *  \brief Command builder. Configuration commands
37 *
38 *  \see   CmdBld.h
39 */
40#define __FILE_ID__  FILE_ID_91
41#include "osApi.h"
42#include "tidef.h"
43#include "report.h"
44#include "CmdBld.h"
45#include "CmdBldCfgIE.h"
46#include "TWDriverInternal.h"
47
48
49/****************************************************************************
50 *                      cmdBld_CfgRx()
51 ****************************************************************************
52 * DESCRIPTION: Sets the filters according to the given configuration.
53 *
54 * INPUTS:  RxConfigOption  - The given Rx filters configuration
55 *          RxFilterOption  - The given Rx filters options
56 *
57 * OUTPUT:  None
58 *
59 * RETURNS: TI_OK or TI_NOK
60 ****************************************************************************/
61TI_STATUS cmdBld_CfgRx (TI_HANDLE hCmdBld, TI_UINT32 uRxConfigOption, TI_UINT32 uRxFilterOption, void *fCb, TI_HANDLE hCb)
62{
63    DB_WLAN(hCmdBld).RxConfigOption = uRxConfigOption;
64    DB_WLAN(hCmdBld).RxFilterOption = uRxFilterOption;
65    DB_WLAN(hCmdBld).RxConfigOption |= RX_CFG_ENABLE_PHY_HEADER_PLCP;
66  #if defined (TNETW_MASTER_MODE) || defined (TNETW_USB_MODE)
67    DB_WLAN(hCmdBld).RxConfigOption |= RX_CFG_COPY_RX_STATUS;
68  #endif
69
70    if (DB_WLAN(hCmdBld).RxDisableBroadcast)
71    {
72        DB_WLAN(hCmdBld).RxConfigOption |= RX_CFG_DISABLE_BCAST;
73    }
74
75    return cmdBld_CfgIeRx (hCmdBld,
76                           DB_WLAN(hCmdBld).RxConfigOption,
77                           DB_WLAN(hCmdBld).RxFilterOption,
78                           fCb,
79                           hCb);
80}
81
82
83/****************************************************************************
84 *                      cmdBld_CfgArpIpAddrTable()
85 ****************************************************************************
86 * DESCRIPTION: Sets the ARP IP table according to the given configuration.
87 *
88 * OUTPUT:  None
89 *
90 * RETURNS: TI_OK or TI_NOK
91 ****************************************************************************/
92TI_STATUS cmdBld_CfgArpIpAddrTable (TI_HANDLE hCmdBld, TIpAddr tIpAddr, TI_UINT8 bEnabled, EIpVer eIpVer, void *fCb, TI_HANDLE hCb)
93{
94    DB_WLAN(hCmdBld).arp_IP_ver = eIpVer;
95
96    /* no support for IPV6 */
97    if (eIpVer == IP_VER_4)
98    {
99        IP_COPY (DB_WLAN(hCmdBld).arp_IP_addr, tIpAddr);
100    }
101
102    DB_WLAN(hCmdBld).arpFilterType = (EArpFilterType)bEnabled;
103
104    /* Set the new ip with the current state (e/d) */
105    return cmdBld_CfgIeArpIpFilter (hCmdBld, tIpAddr, (EArpFilterType)bEnabled, fCb, hCb);
106}
107
108 /****************************************************************************
109 *                      cmdBld_CfgArpIpFilter()
110 ****************************************************************************
111 * DESCRIPTION: Enable\Disable the ARP filter
112 *
113 * OUTPUT:  None
114 *
115 * RETURNS: TI_OK or TI_NOK
116 ****************************************************************************/
117TI_STATUS cmdBld_CfgArpIpFilter (TI_HANDLE hCmdBld, TIpAddr tIpAddr, void *fCb, TI_HANDLE hCb)
118{
119    /* no support for IPV6 */
120    IP_COPY (DB_WLAN(hCmdBld).arp_IP_addr, tIpAddr);
121
122    return cmdBld_CfgIeArpIpFilter (hCmdBld,
123                                    tIpAddr,
124                                    DB_WLAN(hCmdBld).arpFilterType,
125                                    fCb,
126                                    hCb);
127}
128/****************************************************************************
129 *                      cmdBld_CfgGroupAddressTable()
130 ****************************************************************************
131 * DESCRIPTION: Sets the Group table according to the given configuration.
132 *
133 * OUTPUT:  None
134 *
135 * RETURNS: TI_OK or TI_NOK
136 ****************************************************************************/
137TI_STATUS cmdBld_CfgGroupAddressTable (TI_HANDLE        hCmdBld,
138                                       TI_UINT8         uNumGroupAddr,
139                                       TMacAddr         *pGroupAddr,
140                                       TI_BOOL          bEnabled,
141                                       void             *fCb,
142                                       TI_HANDLE        hCb)
143{
144    TCmdBld *pCmdBld = (TCmdBld *)hCmdBld;
145    TI_UINT32    i;
146
147    if (uNumGroupAddr > MAX_MULTICAST_GROUP_ADDRS)
148    {
149        TRACE1(pCmdBld->hReport, REPORT_SEVERITY_ERROR, "cmdBld_CfgGroupAddressTable: numGroupAddrs=%d\n", uNumGroupAddr);
150        return PARAM_VALUE_NOT_VALID;
151    }
152
153    if (NULL == pGroupAddr)
154    {
155        TRACE2(pCmdBld->hReport, REPORT_SEVERITY_ERROR, "cmdBld_CfgGroupAddressTable: numGroupAddrs=%d Group_addr=0x%x  !!!\n", uNumGroupAddr, pGroupAddr);
156        return PARAM_VALUE_NOT_VALID;
157    }
158
159    /* Keeps the parameters in the db */
160    DB_WLAN(hCmdBld).numGroupAddrs = uNumGroupAddr;
161    DB_WLAN(hCmdBld).isMacAddrFilteringnabled = bEnabled;
162
163    for (i = 0; i < uNumGroupAddr; i++)
164    {
165        MAC_COPY (DB_WLAN(hCmdBld).aGroupAddr[i], *(pGroupAddr + i));
166    }
167
168    return cmdBld_CfgIeGroupAdressTable (hCmdBld, uNumGroupAddr, pGroupAddr, bEnabled, fCb, hCb);
169}
170
171
172/****************************************************************************
173 *                      cmdBld_CfgRtsThreshold()
174 ****************************************************************************
175 * DESCRIPTION: Sets the Rts Threshold.
176 *
177 * OUTPUT:  None
178 *
179 * RETURNS: TI_OK or TI_NOK  pWlanParams->RtsThreshold
180 ****************************************************************************/
181TI_STATUS cmdBld_CfgRtsThreshold (TI_HANDLE hCmdBld, TI_UINT16 threshold, void *fCb, TI_HANDLE hCb)
182{
183    return cmdBld_CfgIeRtsThreshold (hCmdBld, threshold, fCb, hCb);
184}
185
186/****************************************************************************
187 *                      cmdBld_CfgDcoItrimParams()
188 ****************************************************************************
189 * DESCRIPTION: Sets the DCO Itrim parameters.
190 *
191 * OUTPUT:  None
192 *
193 * RETURNS: TI_OK or TI_NOK
194 ****************************************************************************/
195TI_STATUS cmdBld_CfgDcoItrimParams (TI_HANDLE hCmdBld, TI_BOOL enable, TI_UINT32 moderationTimeoutUsec, void *fCb, TI_HANDLE hCb)
196{
197    /* Keeps the parameters in the db */
198    DB_WLAN(hCmdBld).dcoItrimEnabled = enable;
199    DB_WLAN(hCmdBld).dcoItrimModerationTimeoutUsec = moderationTimeoutUsec;
200
201    return cmdBld_CfgIeDcoItrimParams (hCmdBld, enable, moderationTimeoutUsec, fCb, hCb);
202}
203
204/****************************************************************************
205 *                      cmdBld_CfgFragmentThreshold()
206 ****************************************************************************
207 * DESCRIPTION: Sets the tx fragmentation Threshold.
208 *
209 * OUTPUT:  None
210 *
211 * RETURNS: TI_OK or TI_NOK
212 ****************************************************************************/
213TI_STATUS cmdBld_CfgFragmentThreshold (TI_HANDLE hCmdBld, TI_UINT16 uFragmentThreshold, void *fCb, TI_HANDLE hCb)
214{
215    DB_WLAN(hCmdBld).FragmentThreshold = uFragmentThreshold;
216
217    return cmdBld_CfgIeFragmentThreshold (hCmdBld, uFragmentThreshold, fCb, hCb);
218}
219
220
221/****************************************************************************
222 *                      cmdBld_CfgPreamble()
223 ****************************************************************************
224 * DESCRIPTION: Set the preamble in ?????? hardware register
225 *
226 * INPUTS:
227 *      preambleVal
228 *
229 * OUTPUT:  None
230 *
231 * RETURNS: None
232 ****************************************************************************/
233TI_STATUS cmdBld_CfgPreamble (TI_HANDLE hCmdBld, Preamble_e ePreamble, void *fCb, TI_HANDLE hCb)
234{
235    DB_WLAN(hCmdBld).preamble = ePreamble;
236
237    return cmdBld_CfgIePreamble (hCmdBld, (TI_UINT8)ePreamble, fCb, hCb);
238}
239
240
241/****************************************************************************
242 *                      cmdBld_CfgBcnBrcOptions()
243 ****************************************************************************
244 * DESCRIPTION: Configure the wlan hardware
245 *
246 * INPUTS: None
247 *
248 * OUTPUT:  None
249 *
250 * RETURNS: TI_OK or TI_NOK
251 ****************************************************************************/
252TI_STATUS cmdBld_CfgBcnBrcOptions (TI_HANDLE hCmdBld, TPowerMgmtConfig *pPMConfig, void *fCb, TI_HANDLE hCb)
253{
254    return cmdBld_CfgIeBcnBrcOptions (hCmdBld, pPMConfig, fCb, hCb);
255}
256
257
258/****************************************************************************
259 *                      cmdBld_CfgWakeUpCondition()
260 ****************************************************************************
261 * DESCRIPTION: Configure the wlan hardware
262 *
263 * INPUTS: None
264 *
265 * OUTPUT:  None
266 *
267 * RETURNS: TI_OK or TI_NOK
268 ****************************************************************************/
269TI_STATUS cmdBld_CfgWakeUpCondition (TI_HANDLE hCmdBld, TPowerMgmtConfig *pPMConfig, void *fCb, TI_HANDLE hCb)
270{
271    return cmdBld_CfgIeWakeUpCondition (hCmdBld, pPMConfig, fCb, hCb);
272}
273
274
275/****************************************************************************
276 *                      cmdBld_CfgSleepAuth ()
277 ****************************************************************************
278 * DESCRIPTION: Set the min power level
279 *
280 * INPUTS:
281 *
282 * OUTPUT:
283 *
284 * RETURNS: TI_OK or TI_NOK
285 ****************************************************************************/
286TI_STATUS cmdBld_CfgSleepAuth (TI_HANDLE hCmdBld, EPowerPolicy eMinPowerLevel, void *fCb, TI_HANDLE hCb)
287{
288    /* Save th parameter in database */
289    DB_WLAN(hCmdBld).minPowerLevel = eMinPowerLevel;
290
291    return cmdBld_CfgIeSleepAuth (hCmdBld, eMinPowerLevel, fCb, hCb);
292}
293
294
295typedef enum { HW_CLOCK_40_MHZ = 40, HW_CLOCK_80_MHZ = 80 } EHwClock;
296
297
298/****************************************************************************
299 *                      cmdBld_CfgArmClock()
300 ****************************************************************************
301 * DESCRIPTION: Configure the arm clock
302 *  !!! Note that the firmware will set the slot time according to the new clock
303 *
304 * INPUTS: None
305 *
306 * OUTPUT:  None
307 *
308 * RETURNS: TI_OK or TI_NOK
309 ****************************************************************************/
310TI_STATUS cmdBld_CfgArmClock (TI_HANDLE hCmdBld, TI_UINT32 uArmClock, void *fCb, TI_HANDLE hCb)
311{
312    TCmdBld *pCmdBld = (TCmdBld *)hCmdBld;
313    TWlanParams *pWlanParams = &DB_WLAN(hCmdBld);
314
315    pWlanParams->ArmClock = uArmClock;
316
317    /* Illegal combination Mac=80, Arm=40 ==> force setting 40/40*/
318    if (pWlanParams->MacClock == HW_CLOCK_80_MHZ && pWlanParams->ArmClock == HW_CLOCK_40_MHZ)
319    {
320        TRACE0(pCmdBld->hReport, REPORT_SEVERITY_ERROR, "cmdBld_ArmClockSet: Illegal combination Mac=80, Arm=40 ==> force setting 40/40\n");
321        pWlanParams->MacClock = HW_CLOCK_40_MHZ;
322    }
323
324    return cmdBld_CfgIeFeatureConfig (hCmdBld,
325                                      pWlanParams->FeatureOptions,
326                                      pWlanParams->FeatureDataFlowOptions,
327                                      fCb,
328                                      hCb);
329}
330
331
332/****************************************************************************
333 *                      cmdBld_CfgMacClock()
334 ****************************************************************************
335 * DESCRIPTION: Configure the mac clock
336 *  !!! Note that the firmware will set the slot time according to the new clock
337 *
338 * INPUTS: None
339 *
340 * OUTPUT:  None
341 *
342 * RETURNS: TI_OK or TI_NOK
343 ****************************************************************************/
344TI_STATUS cmdBld_CfgMacClock (TI_HANDLE hCmdBld, TI_UINT32 uMacClock, void *fCb, TI_HANDLE hCb)
345{
346    TCmdBld *pCmdBld = (TCmdBld *)hCmdBld;
347    TWlanParams *pWlanParams = &DB_WLAN(hCmdBld);
348
349    pWlanParams->MacClock = uMacClock;
350
351    /* Force same clock - for printing */
352    pWlanParams->ArmClock = uMacClock;
353
354    /* Illegal combination Mac=80, Arm=40 ==> force setting 40/40*/
355    if (pWlanParams->MacClock == HW_CLOCK_80_MHZ && pWlanParams->ArmClock == HW_CLOCK_40_MHZ)
356    {
357        TRACE0(pCmdBld->hReport, REPORT_SEVERITY_ERROR, "cmdBld_MacClockSet: Illegal combination Mac=80, Arm=40 ==> force setting 40/40\n");
358        pWlanParams->MacClock = HW_CLOCK_40_MHZ;
359    }
360
361    return cmdBld_CfgIeFeatureConfig (hCmdBld,
362                                      pWlanParams->FeatureOptions,
363                                      pWlanParams->FeatureDataFlowOptions,
364                                      fCb,
365                                      hCb);
366}
367
368
369/****************************************************************************
370 *                      cmdBld_CfgAid()
371 ****************************************************************************
372 * DESCRIPTION: Set the AID
373 *
374 * INPUTS:
375 *
376 * OUTPUT:
377 *
378 * RETURNS: TI_OK or TI_NOK
379 ****************************************************************************/
380TI_STATUS cmdBld_CfgAid (TI_HANDLE hCmdBld, TI_UINT16 uAidVal, void *fCb, TI_HANDLE hCb)
381{
382    return cmdBld_CfgIeAid (hCmdBld, uAidVal, fCb, hCb);
383}
384
385TI_STATUS cmdBld_CfgClkRun (TI_HANDLE hCmdBld, TI_BOOL aClkRunEnable, void *fCb, TI_HANDLE hCb)
386{
387    TWlanParams *pWlanParams = &DB_WLAN(hCmdBld);
388
389    if (aClkRunEnable)
390    {
391        pWlanParams->FeatureDataFlowOptions |= FEAT_PCI_CLK_RUN_ENABLE;
392    }
393    else
394    {
395        pWlanParams->FeatureDataFlowOptions &= ~FEAT_PCI_CLK_RUN_ENABLE;
396    }
397
398    return cmdBld_CfgIeFeatureConfig (hCmdBld,
399                                      pWlanParams->FeatureOptions,
400                                      pWlanParams->FeatureDataFlowOptions,
401                                      fCb,
402                                      hCb);
403}
404
405
406TI_STATUS cmdBld_CfgRxMsduFormat (TI_HANDLE hCmdBld, TI_BOOL bRxMsduForamtEnable, void *fCb, TI_HANDLE hCb)
407{
408#if 1
409    /* WARNING:  Have to check how to control the Rx Frame format select (which bit)
410                 and then access the HW*/
411    return TI_OK;
412#else
413    TCmdBld *pCmdBld = (TCmdBld *)hCmdBld;
414    TWlanParams *pWlanParams = &DB_WLAN(hCmdBld);
415
416    if (aRxMsduForamtEnable)
417    {
418        pWlanParams->FeatureDataFlowOptions |= DATA_FLOW_RX_MSDU_FRAME;
419    }
420    else
421    {
422        pWlanParams->FeatureDataFlowOptions &= ~DATA_FLOW_RX_MSDU_FRAME;
423    }
424
425    return cmdBld_CfgIeFeatureConfig (hCmdBld,
426                                      pWlanParams->FeatureOptions,
427                                      pWlanParams->FeatureDataFlowOptions,
428                                      fCb,
429                                      hCb);
430#endif
431}
432
433
434/****************************************************************************
435 *                      cmdBld_CfgTid()
436 ****************************************************************************
437 * DESCRIPTION: configure Queue traffic params
438 *
439 * INPUTS: None
440 *
441 * OUTPUT:  None
442 *
443 * RETURNS: TI_OK or TI_NOK
444 ****************************************************************************/
445TI_STATUS cmdBld_CfgTid (TI_HANDLE hCmdBld, TQueueTrafficParams *pQtrafficParams, void *fCb, TI_HANDLE hCb)
446{
447    DB_QUEUES(hCmdBld).isQueueConfigured[pQtrafficParams->queueID] = TI_TRUE;
448    DB_QUEUES(hCmdBld).queues[pQtrafficParams->queueID] = *pQtrafficParams;
449
450    return cmdBld_CfgIeTid (hCmdBld, pQtrafficParams, fCb, hCb);
451}
452
453
454/****************************************************************************
455 *                      cmdBld_CfgAcParams()
456 ****************************************************************************
457 * DESCRIPTION: configure AC params
458 *
459 * INPUTS: None
460 *
461 * OUTPUT:  None
462 *
463 * RETURNS: TI_OK or TI_NOK
464 ****************************************************************************/
465TI_STATUS cmdBld_CfgAcParams (TI_HANDLE hCmdBld, TAcQosParams *pAcQosParams, void *fCb, TI_HANDLE hCb)
466{
467    DB_AC(hCmdBld).isAcConfigured[pAcQosParams->ac] = TI_TRUE;
468    DB_AC(hCmdBld).ac[pAcQosParams->ac] = *pAcQosParams;
469
470    return cmdBld_CfgIeAcParams (hCmdBld, pAcQosParams, fCb, hCb);
471}
472
473
474/****************************************************************************
475 *                      cmdBld_CfgPsRxStreaming()
476 ****************************************************************************
477 * DESCRIPTION: configure PS-Rx-Streaming params
478 *
479 * INPUTS: None
480 *
481 * OUTPUT:  None
482 *
483 * RETURNS: TI_OK or TI_NOK
484 ****************************************************************************/
485TI_STATUS cmdBld_CfgPsRxStreaming (TI_HANDLE hCmdBld, TPsRxStreaming *pPsRxStreaming, void *fCb, TI_HANDLE hCb)
486{
487    DB_PS_STREAM(hCmdBld).tid[pPsRxStreaming->uTid] = *pPsRxStreaming;
488
489    return cmdBld_CfgIePsRxStreaming (hCmdBld, pPsRxStreaming, fCb, hCb);
490}
491
492
493/****************************************************************************
494 *                     cmdBld_CfgPacketDetectionThreshold
495 ****************************************************************************
496 * DESCRIPTION: Sets Packet Detection Threshold
497 *
498 * INPUTS:  None
499 *
500 * OUTPUT:  None
501 *
502 * RETURNS: TI_OK or TI_NOK
503 ****************************************************************************/
504TI_STATUS cmdBld_CfgPacketDetectionThreshold (TI_HANDLE hCmdBld, TI_UINT32 threshold, void *fCb, TI_HANDLE hCb)
505{
506    DB_WLAN(hCmdBld).PacketDetectionThreshold = threshold;
507
508    return cmdBld_CfgIePacketDetectionThreshold (hCmdBld, threshold, fCb, hCb);
509}
510
511
512/****************************************************************************
513 *                     cmdBld_CfgBeaconFilterOpt
514 ****************************************************************************
515 * DESCRIPTION: Sets Beacon filtering state
516 *
517 * INPUTS:  None
518 *
519 * OUTPUT:  None
520 *
521 * RETURNS: TI_OK or TI_NOK
522 ****************************************************************************/
523TI_STATUS cmdBld_CfgBeaconFilterOpt (TI_HANDLE  hCmdBld,
524                                     TI_UINT8   uBeaconFilteringStatus,
525                                     TI_UINT8   uNumOfBeaconsToBuffer,
526                                     void       *fCb,
527                                     TI_HANDLE  hCb)
528{
529    DB_WLAN(hCmdBld).beaconFilterParams.desiredState = uBeaconFilteringStatus;
530    DB_WLAN(hCmdBld).beaconFilterParams.numOfElements = uNumOfBeaconsToBuffer;
531
532    return cmdBld_CfgIeBeaconFilterOpt (hCmdBld,
533                                        uBeaconFilteringStatus,
534                                        uNumOfBeaconsToBuffer,
535                                        fCb,
536                                        hCb);
537}
538
539/****************************************************************************
540 *                     cmdBld_CfgRateMngDbg
541 ****************************************************************************
542 * DESCRIPTION: Sets rate managment params
543 *
544 * INPUTS:  None
545 *
546 * OUTPUT:  None
547 *
548 * RETURNS: TI_OK or TI_NOK
549 ****************************************************************************/
550
551TI_STATUS cmdBld_CfgRateMngDbg (TI_HANDLE  hCmdBld,
552                                RateMangeParams_t *pRateMngParams ,
553                                void       *fCb,
554                                TI_HANDLE  hCb)
555{
556
557	TRateMngParams      *pRateMngParamsDB = &DB_RM(hCmdBld);
558	int uIndex;
559
560	pRateMngParamsDB->rateMngParams.paramIndex = pRateMngParams->paramIndex;
561
562	 switch (pRateMngParams->paramIndex)
563		{
564		case RATE_MGMT_RETRY_SCORE_PARAM:
565			pRateMngParamsDB->rateMngParams.RateRetryScore = pRateMngParams->RateRetryScore;
566			break;
567		case RATE_MGMT_PER_ADD_PARAM:
568			pRateMngParamsDB->rateMngParams.PerAdd = pRateMngParams->PerAdd;
569			break;
570		case RATE_MGMT_PER_TH1_PARAM:
571			pRateMngParamsDB->rateMngParams.PerTh1 = pRateMngParams->PerTh1;
572			break;
573		case RATE_MGMT_PER_TH2_PARAM:
574			pRateMngParamsDB->rateMngParams.PerTh2 = pRateMngParams->PerTh2;
575			break;
576		case RATE_MGMT_MAX_PER_PARAM:
577			pRateMngParamsDB->rateMngParams.MaxPer = pRateMngParams->MaxPer;
578			break;
579		case RATE_MGMT_INVERSE_CURIOSITY_FACTOR_PARAM:
580			pRateMngParamsDB->rateMngParams.InverseCuriosityFactor = pRateMngParams->InverseCuriosityFactor;
581			break;
582		case RATE_MGMT_TX_FAIL_LOW_TH_PARAM:
583			pRateMngParamsDB->rateMngParams.TxFailLowTh = pRateMngParams->TxFailLowTh;
584			break;
585		case RATE_MGMT_TX_FAIL_HIGH_TH_PARAM:
586			pRateMngParamsDB->rateMngParams.TxFailHighTh = pRateMngParams->TxFailHighTh;
587			break;
588		case RATE_MGMT_PER_ALPHA_SHIFT_PARAM:
589			pRateMngParamsDB->rateMngParams.PerAlphaShift = pRateMngParams->PerAlphaShift;
590			break;
591		case RATE_MGMT_PER_ADD_SHIFT_PARAM:
592			pRateMngParamsDB->rateMngParams.PerAddShift = pRateMngParams->PerAddShift;
593			break;
594		case RATE_MGMT_PER_BETA1_SHIFT_PARAM:
595			pRateMngParamsDB->rateMngParams.PerBeta1Shift = pRateMngParams->PerBeta1Shift;
596			break;
597		case RATE_MGMT_PER_BETA2_SHIFT_PARAM:
598			pRateMngParamsDB->rateMngParams.PerBeta2Shift = pRateMngParams->PerBeta2Shift;
599			break;
600		case RATE_MGMT_RATE_CHECK_UP_PARAM:
601			pRateMngParamsDB->rateMngParams.RateCheckUp = pRateMngParams->RateCheckUp;
602			break;
603		case RATE_MGMT_RATE_CHECK_DOWN_PARAM:
604			pRateMngParamsDB->rateMngParams.RateCheckDown = pRateMngParams->RateCheckDown;
605			break;
606	    case RATE_MGMT_RATE_RETRY_POLICY_PARAM:
607			for (uIndex = 0; uIndex < 13; uIndex++)
608				{
609					pRateMngParamsDB->rateMngParams.RateRetryPolicy[uIndex] = pRateMngParams->RateRetryPolicy[uIndex];
610				}
611			break;
612	 }
613
614
615    return cmdBld_CfgIeRateMngDbg (hCmdBld,
616                                   pRateMngParams,
617                                   fCb,
618                                   hCb);
619
620}
621
622
623/****************************************************************************
624 *                     cmdBld_CfgBeaconFilterTable
625 ****************************************************************************
626 * DESCRIPTION: Sets Beacon filtering state
627 *
628 * INPUTS:  None
629 *
630 * OUTPUT:  None
631 *
632 * RETURNS: TI_OK or TI_NOK
633 ****************************************************************************/
634TI_STATUS cmdBld_CfgBeaconFilterTable (TI_HANDLE    hCmdBld,
635                                       TI_UINT8     uNumberOfIEs,
636                                       TI_UINT8     *pIETable,
637                                       TI_UINT8     uIETableSize,
638                                       void         *fCb,
639                                       TI_HANDLE    hCb)
640{
641    TCmdBld   *pCmdBld = (TCmdBld *)hCmdBld;
642
643    if (uIETableSize > BEACON_FILTER_TABLE_MAX_SIZE)
644    {
645        TRACE2(pCmdBld->hReport, REPORT_SEVERITY_ERROR, "cmdBld_CfgBeaconFilterTable: Table size is too big %d (>%d)\n", uIETableSize, BEACON_FILTER_TABLE_MAX_SIZE);
646
647        return PARAM_VALUE_NOT_VALID;
648    }
649
650    os_memoryZero (pCmdBld->hOs,
651                   (void *)DB_WLAN(hCmdBld).beaconFilterIETable.IETable,
652                   BEACON_FILTER_TABLE_MAX_SIZE);
653    os_memoryCopy (pCmdBld->hOs,
654                   (void *)DB_WLAN(hCmdBld).beaconFilterIETable.IETable,
655                   (void *)pIETable,
656                   uIETableSize);
657    DB_WLAN(hCmdBld).beaconFilterIETable.numberOfIEs = uNumberOfIEs;
658    DB_WLAN(hCmdBld).beaconFilterIETable.IETableSize = uIETableSize;
659
660    return cmdBld_CfgIeBeaconFilterTable (hCmdBld, uNumberOfIEs, pIETable, uIETableSize, fCb, hCb);
661}
662
663
664/*----------------------------------------*/
665/* Roaming Trigger Configuration Commands */
666/*----------------------------------------*/
667
668/****************************************************************************
669 *                      cmdBld_CfgRssiSnrTrigger()
670 ****************************************************************************
671 * DESCRIPTION: Set the RSSI/SNR Trigger parameters.
672 *
673 * INPUTS:
674 *
675 * OUTPUT:  None
676 *
677 * RETURNS: None
678 ****************************************************************************/
679TI_STATUS cmdBld_CfgRssiSnrTrigger (TI_HANDLE hCmdBld, RssiSnrTriggerCfg_t *pTriggerParam, void *fCb, TI_HANDLE hCb)
680{
681    DB_WLAN(hCmdBld).tRssiSnrTrigger[pTriggerParam->index].index     = pTriggerParam->index;
682    DB_WLAN(hCmdBld).tRssiSnrTrigger[pTriggerParam->index].threshold = pTriggerParam->threshold;
683    DB_WLAN(hCmdBld).tRssiSnrTrigger[pTriggerParam->index].pacing    = pTriggerParam->pacing;
684    DB_WLAN(hCmdBld).tRssiSnrTrigger[pTriggerParam->index].metric    = pTriggerParam->metric;
685    DB_WLAN(hCmdBld).tRssiSnrTrigger[pTriggerParam->index].type      = pTriggerParam->type;
686    DB_WLAN(hCmdBld).tRssiSnrTrigger[pTriggerParam->index].direction = pTriggerParam->direction;
687    DB_WLAN(hCmdBld).tRssiSnrTrigger[pTriggerParam->index].hystersis = pTriggerParam->hystersis;
688    DB_WLAN(hCmdBld).tRssiSnrTrigger[pTriggerParam->index].enable    = pTriggerParam->enable;
689
690    return cmdBld_CfgIeRssiSnrTrigger (hCmdBld, pTriggerParam, fCb, hCb);
691}
692
693
694/****************************************************************************
695 *                      cmdBld_CfgRssiSnrWeights()
696 ****************************************************************************
697 * DESCRIPTION: Set RSSI/SNR Weights for Average calculations.
698 *
699 * INPUTS:
700 *
701 * OUTPUT:  None
702 *
703 * RETURNS: None
704 ****************************************************************************/
705TI_STATUS cmdBld_CfgRssiSnrWeights (TI_HANDLE hCmdBld, RssiSnrAverageWeights_t *pWeightsParam, void *fCb, TI_HANDLE hCb)
706{
707    TCmdBld *pCmdBld = (TCmdBld *)hCmdBld;
708
709    TRACE4(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , "\n cmdBld_CfgRssiSnrWeights :\n                             uRssiBeaconAverageWeight = %d\n                             uRssiPacketAverageWeight = %d\n                             uSnrBeaconAverageWeight  = %d\n                             uSnrPacketAverageWeight = %d \n ", pWeightsParam->rssiBeaconAverageWeight, pWeightsParam->rssiPacketAverageWeight, pWeightsParam->snrBeaconAverageWeight , pWeightsParam->snrPacketAverageWeight  );
710
711    DB_WLAN(hCmdBld).tRssiSnrWeights.rssiBeaconAverageWeight = pWeightsParam->rssiBeaconAverageWeight;
712    DB_WLAN(hCmdBld).tRssiSnrWeights.rssiPacketAverageWeight = pWeightsParam->rssiPacketAverageWeight;
713    DB_WLAN(hCmdBld).tRssiSnrWeights.snrBeaconAverageWeight  = pWeightsParam->snrBeaconAverageWeight ;
714    DB_WLAN(hCmdBld).tRssiSnrWeights.snrPacketAverageWeight  = pWeightsParam->snrPacketAverageWeight ;
715
716    return cmdBld_CfgIeRssiSnrWeights (hCmdBld, pWeightsParam, fCb, hCb);
717}
718
719
720/****************************************************************************
721 *                      cmdBld_CfgMaxTxRetry()
722 ****************************************************************************
723 * DESCRIPTION: Set Max Tx retry parmaters.
724 *
725 * INPUTS:
726 *      maxTxRetry             max Tx Retry
727 *
728 * OUTPUT:  None
729 *
730 * RETURNS: None
731 ****************************************************************************/
732TI_STATUS cmdBld_CfgMaxTxRetry (TI_HANDLE hCmdBld, TRroamingTriggerParams *pRoamingTriggerCmd, void *fCb, TI_HANDLE hCb)
733{
734    DB_WLAN(hCmdBld).roamTriggers.maxTxRetry = pRoamingTriggerCmd->maxTxRetry;
735
736    return cmdBld_CfgIeMaxTxRetry (hCmdBld, pRoamingTriggerCmd, fCb, hCb);
737}
738
739
740/****************************************************************************
741 *                      cmdBld_CfgSgEnable()
742 ****************************************************************************
743 * DESCRIPTION: Save Soft Gemini enable parameter
744 *
745 * INPUTS:
746 *
747 * OUTPUT:
748 *
749 * RETURNS: TI_OK or TI_NOK
750 ****************************************************************************/
751TI_STATUS cmdBld_CfgSgEnable (TI_HANDLE hCmdBld, ESoftGeminiEnableModes eSgEnable, void *fCb, TI_HANDLE hCb)
752{
753    DB_WLAN(hCmdBld).SoftGeminiEnable = eSgEnable;
754
755    return cmdBld_CfgIeSgEnable (hCmdBld, eSgEnable, fCb, hCb);
756}
757
758
759/****************************************************************************
760 *                      cmdBld_CfgSg()
761 ****************************************************************************
762 * DESCRIPTION: Save Soft Gemini config parameter
763 *
764 * INPUTS:
765 *
766 * OUTPUT:
767 *
768 * RETURNS: TI_OK or TI_NOK
769 ****************************************************************************/
770TI_STATUS cmdBld_CfgSg (TI_HANDLE hCmdBld, TSoftGeminiParams *pSgParam, void *fCb, TI_HANDLE hCb)
771{
772    TCmdBld *pCmdBld = (TCmdBld *)hCmdBld;
773
774    /* Copy params for recovery */
775    os_memoryCopy (pCmdBld->hOs,
776                   (void*)&DB_WLAN(hCmdBld).SoftGeminiParams,
777                   (void*)pSgParam,
778                   sizeof(TSoftGeminiParams));
779
780    return cmdBld_CfgIeSg (hCmdBld, pSgParam, fCb, hCb);
781}
782
783/****************************************************************************
784 *                      cmdBld_CfgCoexActivity()
785 ****************************************************************************
786 * DESCRIPTION: Sets the CoexActivity table.
787 *
788 * OUTPUT:  None
789 *
790 * RETURNS: TI_OK or TI_NOK  pWlanParams->RtsThreshold
791 ****************************************************************************/
792TI_STATUS cmdBld_CfgCoexActivity (TI_HANDLE hCmdBld, TCoexActivity *pCoexActivity, void *fCb, TI_HANDLE hCb)
793{
794    TCmdBld *pCmdBld = (TCmdBld *)hCmdBld;
795    TWlanParams *pWlanParams = &DB_WLAN(hCmdBld);
796    TCoexActivity *pSaveCoex = &pWlanParams->tWlanParamsCoexActivityTable.entry[0];
797    int numOfElements = pWlanParams->tWlanParamsCoexActivityTable.numOfElements;
798    int i;
799
800    /* Check if to overwrite existing entry or put on last index */
801    for (i=0; i<numOfElements; i++)
802    {
803        if ((pSaveCoex[i].activityId == pCoexActivity->activityId) && (pSaveCoex->coexIp == pCoexActivity->coexIp))
804        {
805            break;
806        }
807    }
808
809    TRACE4(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , "cmdBld_CfgCoexActivity: save Param %d in index %d, %d %d\n", 0, i, pCoexActivity->coexIp, pCoexActivity->activityId);
810    /* save in WlanParams for recovery */
811    pSaveCoex[i].coexIp          = pCoexActivity->coexIp;
812    pSaveCoex[i].activityId      = pCoexActivity->activityId;
813    pSaveCoex[i].defaultPriority = pCoexActivity->defaultPriority;
814    pSaveCoex[i].raisedPriority  = pCoexActivity->raisedPriority;
815    pSaveCoex[i].minService      = pCoexActivity->minService;
816    pSaveCoex[i].maxService      = pCoexActivity->maxService;
817
818    if (i == numOfElements)
819    {
820        /* no existing entry overwrite, increment number of elements */
821        pWlanParams->tWlanParamsCoexActivityTable.numOfElements++;
822    }
823
824    return cmdBld_CfgIeCoexActivity (hCmdBld, pCoexActivity, fCb, hCb);
825}
826
827/****************************************************************************
828 *                      cmdBld_CfgFmCoex()
829 ****************************************************************************
830 * DESCRIPTION: Save and configure FM coexistence parameters
831 *
832 * INPUTS:
833 *
834 * OUTPUT:
835 *
836 * RETURNS: TI_OK or TI_NOK
837 ****************************************************************************/
838TI_STATUS cmdBld_CfgFmCoex (TI_HANDLE hCmdBld, TFmCoexParams *pFmCoexParams, void *fCb, TI_HANDLE hCb)
839{
840    TCmdBld *pCmdBld = (TCmdBld *)hCmdBld;
841
842    /* Copy params for recovery */
843    os_memoryCopy (pCmdBld->hOs,
844                   (void*)&(DB_WLAN(hCmdBld).tFmCoexParams),
845                   (void*)pFmCoexParams,
846                   sizeof(TFmCoexParams));
847
848    return cmdBld_CfgIeFmCoex (hCmdBld, pFmCoexParams, fCb, hCb);
849}
850
851/****************************************************************************
852 *                      cmdBld_CfgTxRatePolicy()
853 ****************************************************************************
854 * DESCRIPTION: configure TxRatePolicy params
855 *
856 * INPUTS: None
857 *
858 * OUTPUT:  None
859 *
860 * RETURNS: TI_OK or TI_NOK
861 ****************************************************************************/
862TI_STATUS cmdBld_CfgTxRatePolicy (TI_HANDLE hCmdBld, TTxRatePolicy *pTxRatePolicy, void *fCb, TI_HANDLE hCb)
863{
864    TCmdBld       *pCmdBld      = (TCmdBld *)hCmdBld;
865    TTxRateClass  *pTxRateClass = pTxRatePolicy->rateClass;
866    TI_UINT8       index;
867
868    TRACE1(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "_1, Num of classes = 0x%x\n", pTxRatePolicy->numOfRateClasses);
869
870    DB_BSS(hCmdBld).TxRateClassParams.numOfRateClasses = pTxRatePolicy->numOfRateClasses;
871
872    for (index = 0; index < pTxRatePolicy->numOfRateClasses; index++, pTxRateClass++)
873    {
874        TRACE4(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "_2loop, Index = %d, Short R = 0x%x, Long R = 0x%x, Rates = 0x%x\n", index, pTxRateClass->shortRetryLimit, pTxRateClass->longRetryLimit, pTxRateClass->txEnabledRates);
875
876        DB_BSS(hCmdBld).TxRateClassParams.rateClass[index] = *pTxRateClass;
877    }
878
879    return cmdBld_CfgIeTxRatePolicy (hCmdBld, pTxRatePolicy, fCb, hCb);
880}
881
882
883TI_STATUS cmdBld_CfgSlotTime (TI_HANDLE hCmdBld, ESlotTime eSlotTime, void *fCb, TI_HANDLE hCb)
884{
885    TCmdBld *pCmdBld = (TCmdBld *)hCmdBld;
886
887    DB_WLAN(hCmdBld).SlotTime = eSlotTime;
888
889    TRACE1(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "cmdBld_CfgSlotTime: Slot time = %d\n", eSlotTime);
890
891    /* Configure the new Slot-Time value to the FW. */
892    return cmdBld_CfgIeSlotTime (hCmdBld, (TI_UINT8)eSlotTime, fCb, hCb);
893}
894
895
896TI_STATUS cmdBld_CfgEventMask (TI_HANDLE hCmdBld, TI_UINT32 uEventMask, void *fCb, TI_HANDLE hCb)
897{
898    return cmdBld_CfgIeEventMask (hCmdBld, uEventMask, fCb, hCb);
899}
900
901
902/*
903 * ----------------------------------------------------------------------------
904 * Function : cmdBld_CfgHwEncEnable
905 *
906 * Input    :
907 * Output   :
908 * Process  :
909 * Note(s)  :
910 * -----------------------------------------------------------------------------
911 */
912TI_STATUS cmdBld_CfgHwEncEnable (TI_HANDLE hCmdBld, TI_BOOL bHwEncEnable, TI_BOOL bHwDecEnable, void *fCb, TI_HANDLE hCb)
913{
914    TCmdBld     *pCmdBld = (TCmdBld *)hCmdBld;
915    TWlanParams *pWlanParams = &DB_WLAN(hCmdBld);
916
917    /* Store the HW encryption Enable flag for reconfigure time (FW reload)*/
918    DB_KEYS(pCmdBld).bReconfHwEncEnable = bHwEncEnable;
919    DB_KEYS(pCmdBld).bHwEncDecrEnableValid = TI_TRUE;
920
921    if (bHwEncEnable)
922    {
923        pWlanParams->FeatureDataFlowOptions &= ~DF_ENCRYPTION_DISABLE;
924    }
925    else
926    {
927        pWlanParams->FeatureDataFlowOptions |= DF_ENCRYPTION_DISABLE;
928    }
929
930    /* Set bit DF_SNIFF_MODE_ENABLE to enable or prevent decryption in fw */
931    /* WARNING: Have to check how to control the decryption (which bit) and then set/reset
932                the  appropriate bit*/
933    if (bHwDecEnable)
934    {
935        pWlanParams->FeatureDataFlowOptions &= ~DF_SNIFF_MODE_ENABLE;
936    }
937    else
938    {
939        pWlanParams->FeatureDataFlowOptions |= DF_SNIFF_MODE_ENABLE;
940    }
941
942    return cmdBld_CfgIeFeatureConfig (hCmdBld,
943                                      pWlanParams->FeatureOptions,
944                                      pWlanParams->FeatureDataFlowOptions,
945                                      fCb,
946                                      hCb);
947}
948
949
950TI_STATUS cmdBld_CfgHwEncDecEnable (TI_HANDLE hCmdBld, TI_BOOL bHwEncEnable, void *fCb, TI_HANDLE hCb)
951{
952    return cmdBld_CfgHwEncEnable (hCmdBld, bHwEncEnable, bHwEncEnable, fCb, hCb);
953}
954
955
956/*
957 * ----------------------------------------------------------------------------
958 * Function : cmdBld_CfgSecureMode
959 *
960 * Input    :
961 * Output   :
962 * Process  :
963 * Note(s)  :
964 * -----------------------------------------------------------------------------
965 */
966TI_STATUS cmdBld_CfgSecureMode (TI_HANDLE hCmdBld, ECipherSuite eSecurMode, void *fCb, TI_HANDLE hCb)
967{
968    TCmdBld  *pCmdBld = (TCmdBld *)hCmdBld;
969    TI_UINT32     index;
970
971    if (eSecurMode < TWD_CIPHER_MAX)
972    {
973        TRACE2(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , "cmdBld_CfgSecureMode: change tSecurity mode from %d --> %d\n", pCmdBld->tSecurity.eSecurityMode, eSecurMode);
974        /* check if tSecurity mode is equal to previous one*/
975        if (pCmdBld->tSecurity.eSecurityMode == eSecurMode)
976        {
977            return TI_OK;
978        }
979
980        /* Reset all reconfig valid fields*/
981        DB_KEYS(pCmdBld).bHwEncDecrEnableValid = TI_FALSE;
982        DB_KEYS(pCmdBld).bDefaultKeyIdValid = TI_FALSE;
983        for (index = 0;
984             index < pCmdBld->tSecurity.uNumOfStations * NO_OF_RECONF_SECUR_KEYS_PER_STATION + NO_OF_EXTRA_RECONF_SECUR_KEYS;
985             index++)
986        {
987            (DB_KEYS(pCmdBld).pReconfKeys + index)->keyType = KEY_NULL;
988        }
989
990        /* set the new tSecurity mode*/
991        pCmdBld->tSecurity.eSecurityMode = eSecurMode;
992
993        /* disable defrag, duplicate detection on TNETW+XCC on chip level*/
994        /* YV- to add fragmentation control (if there is- artur ?)*/
995        return cmdBld_CfgRxMsduFormat (hCmdBld,
996                                       pCmdBld->tSecurity.eSecurityMode != TWD_CIPHER_CKIP,
997                                       fCb,
998                                       hCb);
999    }
1000    else
1001    {
1002        return TI_NOK;
1003    }
1004}
1005
1006
1007TI_STATUS cmdBld_CfgConnMonitParams (TI_HANDLE  hCmdBld,
1008                                     TRroamingTriggerParams *pRoamingTriggerCmd,
1009                                     void       *fCb,
1010                                     TI_HANDLE  hCb)
1011{
1012    TCmdBld *pCmdBld = (TCmdBld *)hCmdBld;
1013
1014    TRACE2(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , "SetBssLossTsfThresholdParamsCmd :\n                             BssLossTimeout = %d\n                             TsfMissThreshold = %d \n ", pRoamingTriggerCmd->BssLossTimeout, pRoamingTriggerCmd->TsfMissThreshold);
1015
1016    DB_WLAN(hCmdBld).roamTriggers.BssLossTimeout = pRoamingTriggerCmd->BssLossTimeout;
1017    DB_WLAN(hCmdBld).roamTriggers.TsfMissThreshold = pRoamingTriggerCmd->TsfMissThreshold;
1018
1019    return cmdBld_CfgIeConnMonitParams (hCmdBld, pRoamingTriggerCmd, fCb, hCb);
1020}
1021
1022
1023/****************************************************************************
1024 *                 cmdBld_CfgEnableRxDataFilter()
1025 ****************************************************************************
1026 * DESCRIPTION: Enables or disables Rx data filtering.
1027 *
1028 * INPUTS:  enabled             - 0 to disable data filtering, any other value to enable.
1029 *          defaultAction       - The default action to take on non-matching packets.
1030 *
1031 * OUTPUT:  None
1032 *
1033 * RETURNS: TI_OK or TI_NOK
1034 ****************************************************************************/
1035TI_STATUS cmdBld_CfgEnableRxDataFilter (TI_HANDLE   hCmdBld,
1036                                        TI_BOOL     bEnabled,
1037                                        filter_e    eDefaultAction,
1038                                        void        *fCb,
1039                                        TI_HANDLE   hCb)
1040{
1041    /* Save parameters for reconfig phase */
1042    DB_RX_DATA_FLTR(hCmdBld).bEnabled       = bEnabled;
1043    DB_RX_DATA_FLTR(hCmdBld).eDefaultAction = eDefaultAction;
1044
1045    return cmdBld_CfgIeEnableRxDataFilter (hCmdBld, bEnabled, eDefaultAction, fCb, hCb);
1046}
1047
1048
1049/****************************************************************************
1050*                      cmdBld_CfgRxDataFilter()
1051*****************************************************************************
1052* DESCRIPTION: Add/remove Rx Data filter information element.
1053*
1054* INPUTS:  index               - Index of the Rx Data filter
1055*          command             - Add or remove the filter
1056*          action              - Action to take on packets matching the pattern
1057*          numFieldPatterns    - Number of field patterns in the filter
1058*          lenFieldPatterns    - Length of the field pattern series
1059*          fieldPatterns       - Series of field patterns
1060*
1061* OUTPUT:  None
1062*
1063* RETURNS: TI_OK or TI_NOK
1064****************************************************************************/
1065TI_STATUS cmdBld_CfgRxDataFilter (TI_HANDLE hCmdBld,
1066                                  TI_UINT8     index,
1067                                  TI_UINT8     command,
1068                                  filter_e  eAction,
1069                                  TI_UINT8     uNumFieldPatterns,
1070                                  TI_UINT8     uLenFieldPatterns,
1071                                  TI_UINT8  *pFieldPatterns,
1072                                  void      *fCb,
1073                                  TI_HANDLE hCb)
1074{
1075    TCmdBld         *pCmdBld  = (TCmdBld *)hCmdBld;
1076    TRxDataFilter   *pFilters = &(DB_RX_DATA_FLTR(hCmdBld).aRxDataFilter[index]);
1077
1078    /* Save parameters for reconfig phase */
1079    pFilters->uIndex            = index;
1080    pFilters->uCommand          = command;
1081    pFilters->eAction           = eAction;
1082    pFilters->uNumFieldPatterns = uNumFieldPatterns;
1083    pFilters->uLenFieldPatterns = uLenFieldPatterns;
1084    os_memoryCopy(pCmdBld->hOs, pFilters->aFieldPattern, pFieldPatterns, uLenFieldPatterns);
1085
1086    return cmdBld_CfgIeRxDataFilter (hCmdBld,
1087                                     index,
1088                                     command,
1089                                     eAction,
1090                                     uNumFieldPatterns,
1091                                     uLenFieldPatterns,
1092                                     pFieldPatterns,
1093                                     fCb,
1094                                     hCb);
1095}
1096
1097
1098TI_STATUS cmdBld_CfgCtsProtection (TI_HANDLE hCmdBld, TI_UINT8 uCtsProtection, void *fCb, TI_HANDLE hCb)
1099    {
1100        DB_WLAN(hCmdBld).CtsToSelf = uCtsProtection;
1101
1102    return cmdBld_CfgIeCtsProtection (hCmdBld, uCtsProtection, fCb, hCb);
1103}
1104
1105
1106TI_STATUS cmdBld_CfgServicePeriodTimeout (TI_HANDLE hCmdBld, TRxTimeOut *pRxTimeOut, void *fCb, TI_HANDLE hCb)
1107{
1108    return cmdBld_CfgIeServicePeriodTimeout (hCmdBld, pRxTimeOut, fCb, hCb);
1109}
1110
1111
1112TI_STATUS cmdBld_CfgRxMsduLifeTime (TI_HANDLE hCmdBld, TI_UINT32 uRxMsduLifeTime, void *fCb, TI_HANDLE hCb)
1113    {
1114        DB_WLAN(hCmdBld).MaxRxMsduLifetime = uRxMsduLifeTime;
1115
1116    return cmdBld_CfgIeRxMsduLifeTime (hCmdBld, uRxMsduLifeTime, fCb, hCb);
1117}
1118
1119
1120TI_STATUS cmdBld_CfgStatisitics (TI_HANDLE hCmdBld, void *fCb, TI_HANDLE hCb)
1121{
1122    return cmdBld_CfgIeStatisitics (hCmdBld, fCb, hCb);
1123}
1124
1125
1126TI_STATUS cmdBld_CfgTxPowerDbm (TI_HANDLE hCmdBld, TI_UINT8 uTxPowerDbm, void *fCb, TI_HANDLE hCb)
1127{
1128    return cmdBld_CfgIeTxPowerDbm (hCmdBld, uTxPowerDbm, fCb, hCb);
1129}
1130
1131 /*
1132 * ----------------------------------------------------------------------------
1133 * Function : cmdBld_CfgBet
1134 *
1135 * Input    :   enabled               - 0 to disable BET, 0 to disable BET
1136 *              MaximumConsecutiveET  - Max number of consecutive beacons
1137 *                                      that may be early terminated.
1138 * Output   : TI_STATUS
1139 * Process  :  Configures Beacon Early Termination information element.
1140 * Note(s)  :  None
1141 * -----------------------------------------------------------------------------
1142 */
1143TI_STATUS cmdBld_CfgBet (TI_HANDLE hCmdBld, TI_UINT8 Enable, TI_UINT8 MaximumConsecutiveET, void *fCb, TI_HANDLE hCb)
1144{
1145    DB_WLAN(hCmdBld).BetEnable              = Enable;
1146    DB_WLAN(hCmdBld).MaximumConsecutiveET   = MaximumConsecutiveET;
1147
1148    return cmdBld_CfgIeBet (hCmdBld, Enable, MaximumConsecutiveET, fCb, hCb);
1149}
1150
1151/****************************************************************************
1152 *                      cmdBld_CfgKeepAlive()
1153 ****************************************************************************
1154 * DESCRIPTION: Set keep-alive paramters for a single index
1155 *
1156 * INPUTS: Paramters and CB
1157 *
1158 * OUTPUT:  None
1159 *
1160 * RETURNS: TI_OK or TI_NOK
1161 ****************************************************************************/
1162TI_STATUS cmdBld_CfgKeepAlive (TI_HANDLE hCmdBld, TKeepAliveParams *pKeepAliveParams, void *fCb, TI_HANDLE hCb)
1163{
1164    TCmdBld   *pCmdBld = (TCmdBld *)hCmdBld;
1165
1166    TRACE4(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , "CmdBld: Seeting keep-alive params, index=%d, interval=%d msec, trigType=%d, enaFlag=%d\n", pKeepAliveParams->index, pKeepAliveParams->interval, pKeepAliveParams->trigType, pKeepAliveParams->enaDisFlag);
1167
1168    os_memoryCopy (pCmdBld->hOs,
1169                   (void *)&DB_KLV(hCmdBld).keepAliveParams[ pKeepAliveParams->index ],
1170                   (void *)pKeepAliveParams,
1171                   sizeof (TKeepAliveParams));
1172
1173    return cmdBld_CmdIeConfigureKeepAliveParams (hCmdBld,
1174                                                 pKeepAliveParams->index,
1175                                                 pKeepAliveParams->enaDisFlag,
1176                                                 (TI_UINT8)pKeepAliveParams->trigType,
1177                                                 pKeepAliveParams->interval,
1178                                                 fCb,
1179                                                 hCb);
1180}
1181
1182/****************************************************************************
1183 *                      cmdBld_CfgKeepAliveEnaDis()
1184 ****************************************************************************
1185 * DESCRIPTION: Set global keep-alive enable / disable flag
1186 *
1187 * INPUTS: Paramters and CB
1188 *
1189 * OUTPUT:  None
1190 *
1191 * RETURNS: TI_OK or TI_NOK
1192 ****************************************************************************/
1193TI_STATUS cmdBld_CfgKeepAliveEnaDis(TI_HANDLE hCmdBld, TI_UINT8 enaDisFlag, void *fCb, TI_HANDLE hCb)
1194{
1195    TCmdBld   *pCmdBld = (TCmdBld *)hCmdBld;
1196
1197    TRACE1(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , "CmdBld: Seeting keep-alive Global ena / dis flag to %d\n", (TI_UINT32)enaDisFlag);
1198
1199    DB_KLV(hCmdBld).enaDisFlag = enaDisFlag;
1200
1201    return cmdBld_CmdIeConfigureKeepAliveEnaDis (hCmdBld, enaDisFlag, fCb, hCb);
1202}
1203
1204/**
1205 * \fn     cmdBld_CfgSetFwHtCapabilities
1206 * \brief  set the current AP HT Capabilities to the FW.
1207 *
1208 * \note
1209 * \return TI_OK on success or TI_NOK on failure
1210 * \sa
1211 */
1212TI_STATUS cmdBld_CfgSetFwHtCapabilities (TI_HANDLE hCmdBld,
1213                                         TI_UINT32 uHtCapabilites,
1214                                         TMacAddr  tMacAddress,
1215                                         TI_UINT8  uAmpduMaxLeng,
1216                                         TI_UINT8  uAmpduMinSpac,
1217                                         void      *fCb,
1218                                         TI_HANDLE hCb)
1219{
1220
1221    DB_BSS(hCmdBld).bHtCap = TI_TRUE;
1222    DB_BSS(hCmdBld).uHtCapabilites = uHtCapabilites;
1223    MAC_COPY ((DB_BSS(hCmdBld).tMacAddress), tMacAddress);
1224    DB_BSS(hCmdBld).uAmpduMaxLeng = uAmpduMaxLeng;
1225    DB_BSS(hCmdBld).uAmpduMinSpac = uAmpduMinSpac;
1226
1227    return cmdBld_CfgIeSetFwHtCapabilities (hCmdBld,
1228                                            uHtCapabilites,
1229                                            tMacAddress,
1230                                            uAmpduMaxLeng,
1231                                            uAmpduMinSpac,
1232                                            fCb,
1233                                            hCb);
1234}
1235
1236/**
1237 * \fn     cmdBld_CfgSetFwHtInformation
1238 * \brief  set the current AP HT Information to the FW.
1239 *
1240 * \note
1241 * \return TI_OK on success or TI_NOK on failure
1242 * \sa
1243 */
1244TI_STATUS cmdBld_CfgSetFwHtInformation (TI_HANDLE hCmdBld,
1245                                        TI_UINT8  uRifsMode,
1246                                        TI_UINT8  uHtProtection,
1247                                        TI_UINT8  uGfProtection,
1248                                        TI_UINT8  uHtTxBurstLimit,
1249                                        TI_UINT8  uDualCtsProtection,
1250                                        void      *fCb,
1251                                        TI_HANDLE hCb)
1252{
1253
1254    DB_BSS(hCmdBld).bHtInf = TI_TRUE;
1255    DB_BSS(hCmdBld).uRifsMode = uRifsMode;
1256    DB_BSS(hCmdBld).uHtProtection = uHtProtection;
1257    DB_BSS(hCmdBld).uGfProtection = uGfProtection;
1258    DB_BSS(hCmdBld).uHtTxBurstLimit = uHtTxBurstLimit;
1259    DB_BSS(hCmdBld).uDualCtsProtection = uDualCtsProtection;
1260
1261    return cmdBld_CfgIeSetFwHtInformation (hCmdBld,
1262                                           uRifsMode,
1263                                           uHtProtection,
1264                                           uGfProtection,
1265                                           uHtTxBurstLimit,
1266                                           uDualCtsProtection,
1267                                           fCb,
1268                                           hCb);
1269}
1270
1271/**
1272 * \fn     cmdBld_CfgSetBaInitiator
1273 * \brief  configure BA session initiator\receiver parameters setting in the FW.
1274 *
1275 * \note
1276 * \return TI_OK on success or TI_NOK on failure
1277 * \sa
1278 */
1279TI_STATUS cmdBld_CfgSetBaSession (TI_HANDLE hCmdBld,
1280                                  InfoElement_e eBaType,
1281                                  TI_UINT8 uTid,
1282                                  TI_UINT8 uState,
1283                                  TMacAddr tRa,
1284                                  TI_UINT16 uWinSize,
1285                                  TI_UINT16 uInactivityTimeout,
1286                                  void *fCb,
1287                                  TI_HANDLE hCb)
1288{
1289    if (ACX_BA_SESSION_INITIATOR_POLICY == eBaType)
1290    {
1291        DB_BSS(hCmdBld).bBaInitiator[uTid] = TI_TRUE;
1292        DB_BSS(hCmdBld).tBaSessionInitiatorPolicy[uTid].uTid = uTid;
1293        DB_BSS(hCmdBld).tBaSessionInitiatorPolicy[uTid].uPolicy = uState;
1294        MAC_COPY ((DB_BSS(hCmdBld).tBaSessionInitiatorPolicy[uTid].aMacAddress),tRa);
1295        DB_BSS(hCmdBld).tBaSessionInitiatorPolicy[uTid].uWinSize = uWinSize;
1296        DB_BSS(hCmdBld).tBaSessionInitiatorPolicy[uTid].uInactivityTimeout = uInactivityTimeout;
1297    }
1298    else
1299    {
1300        DB_BSS(hCmdBld).bBaResponder[uTid] = TI_TRUE;
1301        DB_BSS(hCmdBld).tBaSessionResponderPolicy[uTid].uTid = uTid;
1302        DB_BSS(hCmdBld).tBaSessionResponderPolicy[uTid].uPolicy = uState;
1303        MAC_COPY ((DB_BSS(hCmdBld).tBaSessionResponderPolicy[uTid].aMacAddress),tRa);
1304        DB_BSS(hCmdBld).tBaSessionResponderPolicy[uTid].uWinSize = uWinSize;
1305        DB_BSS(hCmdBld).tBaSessionResponderPolicy[uTid].uInactivityTimeout = uInactivityTimeout;
1306    }
1307
1308    return cmdBld_CfgIeSetBaSession (hCmdBld,
1309                                     eBaType,
1310                                     uTid,
1311                                     uState,
1312                                     tRa,
1313                                     uWinSize,
1314                                     uInactivityTimeout,
1315                                     fCb,
1316                                     hCb);
1317}
1318
1319
1320TI_STATUS cmdBld_CfgBurstMode (TI_HANDLE hCmdBld, TI_BOOL bEnabled, void *fCb, TI_HANDLE hCb)
1321{
1322	DB_AC(hCmdBld).isBurstModeEnabled = bEnabled;
1323	return cmdBld_CfgIeBurstMode (hCmdBld, bEnabled, fCb, hCb);
1324}
1325
1326