1/*
2 * CmdBld.c
3 *
4 * Copyright(c) 1998 - 2010 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  CmdBld.c
36 *  \brief Command builder main
37 *
38 *  \see   CmdBld.h
39 */
40#define __FILE_ID__  FILE_ID_90
41#include "TWDriver.h"
42#include "osApi.h"
43#include "tidef.h"
44#include "report.h"
45#include "public_infoele.h"
46#include "CmdBld.h"
47#include "txResult_api.h"
48#include "CmdBldCmdIE.h"
49#include "CmdBldCfgIE.h"
50#include "CmdBldItrIE.h"
51#include "CmdQueue_api.h"
52#include "eventMbox_api.h"
53#include "TWDriverInternal.h"
54#include "HwInit_api.h"
55
56#define DEFAULT_TRACE_ENABLE                   0
57#define DEFAULT_TRACE_OUT                      0
58
59#define DEFAULT_PBCC_DYNAMIC_ENABLE_VAL        0
60#define DEFAULT_PBCC_DYNAMIC_INTERVAL          500
61#define DEFAULT_PBCC_DYNAMIC_IGNORE_MCAST      0
62
63#define DEFAULT_HW_RADIO_CHANNEL               11
64
65#define DEFAULT_CW_MIN                         15
66
67#define DEFAULT_USE_DEVICE_ERROR_INTERRUPT     1
68
69#define DEFAULT_UCAST_PRIORITY                 0
70
71#define DEFAULT_NUM_STATIONS                   1
72
73/* only for AP */
74/*  8 increase number of BC frames */
75#define DEFAULT_NUM_BCAST_TX_DESC              16
76
77#define DEFAULT_BCAST_PRIORITY                 0x81
78
79/* hw access method*/
80typedef enum
81{
82    HW_ACCESS_BUS_SLAVE_INDIRECT    = 0,
83    HW_ACCESS_BUS_SLAVE_DIRECT      = 1,
84    HW_ACCESS_BUS_MASTER            = 2
85
86} EHwAccessMethod;
87
88typedef int (*TConfigFwCb) (TI_HANDLE, TI_STATUS);
89
90
91static TI_STATUS cmdBld_ConfigSeq               (TI_HANDLE hCmdBld);
92static TI_STATUS cmdBld_GetCurrentAssociationId (TI_HANDLE hCmdBld, TI_UINT16 *pAidVal);
93static TI_STATUS cmdBld_GetArpIpAddressesTable  (TI_HANDLE hCmdBld, TIpAddr *pIpAddr, TI_UINT8 *pEnabled , EIpVer *pIpVer);
94static TI_STATUS cmdBld_JoinCmpltForReconfigCb  (TI_HANDLE hCmdBld);
95static TI_STATUS cmdBld_DummyCb                 (TI_HANDLE hCmdBld);
96
97
98
99
100TI_HANDLE cmdBld_Create (TI_HANDLE hOs)
101{
102    TCmdBld        *pCmdBld;
103    TI_UINT32      uNumOfStations;
104    TI_UINT32      i;
105
106    /* Allocate the command builder */
107    pCmdBld = (TCmdBld *)os_memoryAlloc (hOs, sizeof(TCmdBld));
108    if (pCmdBld == NULL)
109    {
110        WLAN_OS_REPORT(("cmdBld_Create: Error memory allocation\n"));
111        return NULL;
112    }
113    os_memoryZero (hOs, (void *)pCmdBld, sizeof(TCmdBld));
114
115    pCmdBld->hOs = hOs;
116
117    /* Create the Params object */
118    /* make this code flat, move it to configure */
119    {
120        TWlanParams     *pWlanParams    = &DB_WLAN(pCmdBld);
121        TDmaParams      *pDmaParams     = &DB_DMA(pCmdBld);
122        TBssInfoParams  *pBssInfoParams = &DB_BSS(pCmdBld);
123        TGenCounters    *pGenCounters   = &DB_CNT(pCmdBld);
124
125        /* General counters */
126        pGenCounters->FcsErrCnt                     = 0;
127
128        /* BSS info paramaters */
129        pBssInfoParams->RadioChannel                = DEFAULT_HW_RADIO_CHANNEL;
130        pBssInfoParams->Ctrl                        = 0;
131        /*
132         * Intilaize the ctrl field in the BSS join structure
133         * Only bit_7 in the ctrl field is vurrently in use.
134         * If bit_7 is on => Doing Tx flash before joining new AP
135         */
136        pBssInfoParams->Ctrl                        |= JOIN_CMD_CTRL_TX_FLUSH;
137
138        /* WLAN parameters*/
139
140        /* Init filters as station (start/join with BssType will overwrite the values) */
141        cmdBld_SetRxFilter ((TI_HANDLE)pCmdBld, RX_CONFIG_OPTION_MY_DST_MY_BSS, RX_FILTER_OPTION_FILTER_ALL);
142        pWlanParams->UseDeviceErrorInterrupt        = DEFAULT_USE_DEVICE_ERROR_INTERRUPT;
143        /* Initialize the params object database fields */
144        pWlanParams->hwAccessMethod = HW_ACCESS_BUS_SLAVE_INDIRECT;
145        pWlanParams->maxSitesFragCollect = TWD_SITE_FRAG_COLLECT_DEF;
146        pWlanParams->RtsThreshold = TWD_RTS_THRESHOLD_DEF;
147        pWlanParams->bJoin = TI_FALSE;
148        /* Soft Gemini defaults */
149        pWlanParams->SoftGeminiEnable = SG_DISABLE;
150        /* Beacon filter defaults */
151        pWlanParams->beaconFilterParams.desiredState    = TI_FALSE;
152        pWlanParams->beaconFilterParams.numOfElements   = DEF_NUM_STORED_FILTERS;
153        pWlanParams->beaconFilterIETable.numberOfIEs    = DEF_BEACON_FILTER_IE_TABLE_NUM;
154        pWlanParams->beaconFilterIETable.IETableSize    = BEACON_FILTER_IE_TABLE_DEF_SIZE;
155        /* Roaming  parameters */
156        pWlanParams->roamTriggers.BssLossTimeout    = NO_BEACON_DEFAULT_TIMEOUT;
157        pWlanParams->roamTriggers.TsfMissThreshold  = OUT_OF_SYNC_DEFAULT_THRESHOLD;
158        /* CoexActivity table */
159        pWlanParams->tWlanParamsCoexActivityTable.numOfElements = COEX_ACTIVITY_TABLE_DEF_NUM;
160
161        /* DMA parameters */
162        /* Initialize the Params object database fields*/
163        pDmaParams->NumStations                     = DEFAULT_NUM_STATIONS;
164        uNumOfStations                              = (TI_UINT32)pDmaParams->NumStations;
165        /*
166         * loop an all rssi_snr triggers and initialize only index number.
167         * Reason: 'index' not initialized --> 'index = 0' --> triggers 1..7 will overrun trigger '0' in cmdBld_ConfigSeq
168         */
169        for (i = 0; i < NUM_OF_RSSI_SNR_TRIGGERS ; i++)
170        {
171           pWlanParams->tRssiSnrTrigger[i].index = i;
172        }
173    }
174
175    pCmdBld->uLastElpCtrlMode = ELPCTRL_MODE_NORMAL;
176
177    /* Create security objects */
178    pCmdBld->tSecurity.eSecurityMode = TWD_CIPHER_NONE;
179    pCmdBld->tSecurity.uNumOfStations = uNumOfStations;
180    DB_KEYS(pCmdBld).pReconfKeys = (TSecurityKeys*)os_memoryAlloc (hOs,
181                                        sizeof(TSecurityKeys) * (uNumOfStations * NO_OF_RECONF_SECUR_KEYS_PER_STATION + NO_OF_EXTRA_RECONF_SECUR_KEYS));
182    os_memoryZero (hOs,
183                   (void *)(DB_KEYS(pCmdBld).pReconfKeys),
184                   sizeof(TSecurityKeys) * (uNumOfStations * NO_OF_RECONF_SECUR_KEYS_PER_STATION + NO_OF_EXTRA_RECONF_SECUR_KEYS));
185
186
187    WLAN_INIT_REPORT(("cmdBld_Create end %x\n",(TI_HANDLE)pCmdBld));
188
189    return (TI_HANDLE)pCmdBld;
190}
191
192
193TI_STATUS cmdBld_Destroy (TI_HANDLE hCmdBld)
194{
195    TCmdBld      *pCmdBld = (TCmdBld *)hCmdBld;
196    TDmaParams   *pDmaParams = NULL;
197    TI_UINT32        uNumOfStations;
198
199    if (pCmdBld == NULL)
200    {
201        return TI_OK;
202    }
203
204    pDmaParams = &DB_DMA(hCmdBld);
205
206    uNumOfStations = (TI_UINT32)pDmaParams->NumStations;
207
208    if (DB_KEYS(pCmdBld).pReconfKeys)
209    {
210        os_memoryFree (pCmdBld->hOs,
211                       DB_KEYS(pCmdBld).pReconfKeys,
212                       sizeof(TSecurityKeys) * (uNumOfStations * NO_OF_RECONF_SECUR_KEYS_PER_STATION + NO_OF_EXTRA_RECONF_SECUR_KEYS));
213    }
214
215    /* free the whalCtrl data structure */
216    os_memoryFree (pCmdBld->hOs, pCmdBld, sizeof(TCmdBld));
217
218    return TI_OK;
219}
220
221TI_STATUS cmdBld_Restart (TI_HANDLE hCmdBld)
222{
223    TCmdBld      *pCmdBld = (TCmdBld *)hCmdBld;
224
225    /* This init is for recovery stage */
226    pCmdBld->uLastElpCtrlMode = ELPCTRL_MODE_NORMAL;
227
228    /*
229     * This call is to have the recovery process in AWAKE mode
230     * Prevent move to sleep mode between Hw_Init and Fw_Init
231     */
232    cmdBld_CfgIeSleepAuth (hCmdBld, DB_WLAN(hCmdBld).minPowerLevel, NULL, NULL);
233
234    return TI_OK;
235}
236
237TI_STATUS cmdBld_Config (TI_HANDLE  hCmdBld,
238                         TI_HANDLE  hReport,
239                         void      *fFinalizeDownload,
240                         TI_HANDLE  hFinalizeDownload,
241                         TI_HANDLE  hEventMbox,
242                         TI_HANDLE  hCmdQueue,
243                         TI_HANDLE  hTwIf)
244{
245    TCmdBld        *pCmdBld = (TCmdBld *)hCmdBld;
246    TI_UINT32       index;
247
248    pCmdBld->hReport = hReport;
249    pCmdBld->fFinalizeDownload = fFinalizeDownload;
250    pCmdBld->hFinalizeDownload = hFinalizeDownload;
251    pCmdBld->hEventMbox = hEventMbox;
252    pCmdBld->hCmdQueue = hCmdQueue;
253    pCmdBld->hTwIf  = hTwIf;
254
255    /* Reset all reconfig valid fields*/
256    DB_KEYS(pCmdBld).bHwEncDecrEnableValid = TI_FALSE;
257    DB_KEYS(pCmdBld).bDefaultKeyIdValid    = TI_FALSE;
258    for (index = 0;
259         index < pCmdBld->tSecurity.uNumOfStations * NO_OF_RECONF_SECUR_KEYS_PER_STATION + NO_OF_EXTRA_RECONF_SECUR_KEYS;
260         index++)
261        (DB_KEYS(pCmdBld).pReconfKeys + index)->keyType = KEY_NULL;
262
263
264    return TI_OK;
265}
266
267
268
269static void cmdBld_ConfigFwCb (TI_HANDLE hCmdBld, TI_STATUS status, void *pData)
270{
271    TCmdBld        *pCmdBld = (TCmdBld *)hCmdBld;
272    MemoryMap_t    *pMemMap = &pCmdBld->tMemMap;
273    TDmaParams     *pDmaParams = &DB_DMA(hCmdBld);
274
275    /* Arrived from callback */
276    if (pData)
277    {
278        TI_UINT32         *pSwap, i, uMemMapNumFields;
279
280        /* Solve endian problem (all fields are 32 bit) */
281        uMemMapNumFields = (sizeof(MemoryMap_t) - sizeof(EleHdrStruct)) % 4;
282        pSwap = (TI_UINT32* )&(pMemMap->codeStart);
283        for (i = 0; i < uMemMapNumFields; i++)
284        {
285            pSwap[i] = ENDIAN_HANDLE_LONG(pSwap[i]);
286        }
287    }
288
289    /* Save number of TX blocks */
290    pDmaParams->NumTxBlocks = pMemMap->numTxMemBlks;
291    /* Firmware Control block is internally pointing to TxResultInterface structure */
292    pDmaParams->fwTxResultInterface = pMemMap->trqBlock.controlBlock;
293    pDmaParams->fwRxCBufPtr =           pMemMap->rxCBufPtr;
294    pDmaParams->fwTxCBufPtr =           pMemMap->txCBufPtr;
295    pDmaParams->fwRxControlPtr =        pMemMap->rxControlPtr;
296    pDmaParams->fwTxControlPtr =        pMemMap->txControlPtr;
297
298    pDmaParams->PacketMemoryPoolStart = (TI_UINT32)pMemMap->packetMemoryPoolStart;
299
300    /* Indicate that the reconfig process is over. */
301    pCmdBld->bReconfigInProgress = TI_FALSE;
302
303    /* Call the upper layer callback */
304    (*((TConfigFwCb)pCmdBld->fConfigFwCb)) (pCmdBld->hConfigFwCb, TI_OK);
305}
306
307
308/****************************************************************************
309 *                      cmdBld_ConfigFw()
310 ****************************************************************************
311 * DESCRIPTION: Configure the WLAN firmware
312 *
313 * INPUTS: None
314 *
315 * OUTPUT: None
316 *
317 * RETURNS: TI_OK or TI_NOK
318 ****************************************************************************/
319TI_STATUS cmdBld_ConfigFw (TI_HANDLE hCmdBld, void *fConfigFwCb, TI_HANDLE hConfigFwCb)
320{
321    TCmdBld        *pCmdBld = (TCmdBld *)hCmdBld;
322
323    pCmdBld->fConfigFwCb = fConfigFwCb;
324    pCmdBld->hConfigFwCb = hConfigFwCb;
325    pCmdBld->uIniSeq = 0;
326    pCmdBld->bReconfigInProgress = TI_TRUE;
327    /* should be re-initialized for recovery,   pCmdBld->uLastElpCtrlMode = ELPCTRL_MODE_KEEP_AWAKE; */
328
329    /* Start configuration sequence */
330    return cmdBld_ConfigSeq (hCmdBld);
331}
332
333
334typedef TI_STATUS (*TCmdCfgFunc) (TI_HANDLE);
335
336
337static TI_STATUS __cmd_probe_req (TI_HANDLE hCmdBld)
338{
339    TI_STATUS   tStatus = TI_OK;
340
341    /* keep space for 2.4 GHz probe request */
342    tStatus = cmdBld_CmdIeConfigureTemplateFrame (hCmdBld,
343                                                  NULL,
344                                                  DB_WLAN(hCmdBld).probeRequestTemplateSize,
345                                                  CFG_TEMPLATE_PROBE_REQ_2_4,
346                                                  0,
347                                                  NULL,
348                                                  NULL);
349    if (TI_OK != tStatus)
350    {
351        return tStatus;
352    }
353
354    /* keep space for 5.0 GHz probe request */
355    return cmdBld_CmdIeConfigureTemplateFrame (hCmdBld,
356                                               NULL,
357                                               DB_WLAN(hCmdBld).probeRequestTemplateSize,
358                                               CFG_TEMPLATE_PROBE_REQ_5,
359                                               0,
360                                             (void *)cmdBld_ConfigSeq,
361                                             hCmdBld);
362}
363
364
365static TI_STATUS __cmd_null_data (TI_HANDLE hCmdBld)
366{
367    return cmdBld_CmdIeConfigureTemplateFrame (hCmdBld,
368                                             NULL,
369                                             DB_WLAN(hCmdBld).nullTemplateSize,
370                                               TEMPLATE_NULL_DATA,
371                                               0,
372                                             (void *)cmdBld_ConfigSeq,
373                                             hCmdBld);
374}
375
376static TI_STATUS __cmd_burst_mode_enable (TI_HANDLE hCmdBld)
377{
378	return cmdBld_CfgIeBurstMode (hCmdBld,
379							  DB_AC(hCmdBld).isBurstModeEnabled,
380							  (void *)cmdBld_ConfigSeq,
381							  hCmdBld);
382}
383
384
385static TI_STATUS __cmd_disconn (TI_HANDLE hCmdBld)
386{
387    return cmdBld_CmdIeConfigureTemplateFrame (hCmdBld,
388                                             NULL,
389                                             DB_WLAN(hCmdBld).disconnTemplateSize,
390                                             TEMPLATE_DISCONNECT,
391                                             0,
392                                             (void *)cmdBld_ConfigSeq,
393                                             hCmdBld);
394}
395
396static TI_STATUS __cmd_ps_poll (TI_HANDLE hCmdBld)
397{
398    return cmdBld_CmdIeConfigureTemplateFrame (hCmdBld,
399                                             NULL,
400                                             DB_WLAN(hCmdBld).PsPollTemplateSize,
401                                               TEMPLATE_PS_POLL,
402                                               0,
403                                             (void *)cmdBld_ConfigSeq,
404                                             hCmdBld);
405}
406
407
408static TI_STATUS __cmd_qos_null_data (TI_HANDLE hCmdBld)
409{
410    return cmdBld_CmdIeConfigureTemplateFrame (hCmdBld,
411                                             NULL,
412                                             DB_WLAN(hCmdBld).qosNullDataTemplateSize,
413                                               TEMPLATE_QOS_NULL_DATA,
414                                               0,
415                                             (void *)cmdBld_ConfigSeq,
416                                             hCmdBld);
417}
418
419
420static TI_STATUS __cmd_probe_resp (TI_HANDLE hCmdBld)
421{
422    return cmdBld_CmdIeConfigureTemplateFrame (hCmdBld,
423                                             NULL,
424                                             DB_WLAN(hCmdBld).probeResponseTemplateSize,
425                                               TEMPLATE_PROBE_RESPONSE,
426                                               0,
427                                             (void *)cmdBld_ConfigSeq,
428                                             hCmdBld);
429}
430
431
432static TI_STATUS __cmd_beacon (TI_HANDLE hCmdBld)
433{
434    return cmdBld_CmdIeConfigureTemplateFrame (hCmdBld,
435                                             NULL,
436                                             DB_WLAN(hCmdBld).beaconTemplateSize,
437                                               TEMPLATE_BEACON,
438                                               0,
439                                             (void *)cmdBld_ConfigSeq,
440                                             hCmdBld);
441}
442
443static TI_STATUS __cmd_keep_alive_tmpl (TI_HANDLE hCmdBld)
444{
445    TI_UINT32   index;
446    TI_STATUS   status = TI_NOK;
447
448    /*
449     * config templates
450     * fisr configure all indexes but the last one with no CB, and than configure the last one
451     * with a CB to continue configuration.
452     */
453    for (index = 0; index < KLV_MAX_TMPL_NUM - 1; index++)
454    {
455        status =  cmdBld_CmdIeConfigureTemplateFrame (hCmdBld,
456                                                      NULL,
457                                                      MAX_TEMPLATES_SIZE,
458                                                      TEMPLATE_KLV,
459                                                      index,
460                                                      NULL,
461                                                      NULL);
462        if (TI_OK != status)
463        {
464            return status;
465        }
466    }
467
468    status =  cmdBld_CmdIeConfigureTemplateFrame (hCmdBld,
469                                                  NULL,
470                                                  MAX_TEMPLATES_SIZE,
471                                                  TEMPLATE_KLV,
472                                                  index,
473                                                  (void *)cmdBld_ConfigSeq,
474                                                  hCmdBld);
475
476    return status;
477}
478
479
480static TI_STATUS __cfg_mem (TI_HANDLE hCmdBld)
481{
482    /* Configure the weight among the different hardware queues */
483    return cmdBld_CfgIeConfigMemory (hCmdBld, &DB_DMA(hCmdBld), (void *)cmdBld_ConfigSeq, hCmdBld);
484}
485
486
487static TI_STATUS __cfg_rx_msdu_life_time (TI_HANDLE hCmdBld)
488{
489    /* Configure the Rx Msdu Life Time (expiry time of de-fragmentation in FW) */
490    return cmdBld_CfgIeRxMsduLifeTime (hCmdBld,
491                                       DB_WLAN(hCmdBld).MaxRxMsduLifetime,
492                                       (void *)cmdBld_ConfigSeq,
493                                       hCmdBld);
494}
495
496
497static TI_STATUS __cfg_rx (TI_HANDLE hCmdBld)
498{
499    return cmdBld_CfgIeRx (hCmdBld,
500                           DB_WLAN(hCmdBld).RxConfigOption,
501                           DB_WLAN(hCmdBld).RxFilterOption,
502                           (void *)cmdBld_ConfigSeq,
503                           hCmdBld);
504}
505
506
507static TI_STATUS __cfg_ac_params_0 (TI_HANDLE hCmdBld)
508{
509    /*
510     * NOTE: Set following parameter only if configured.
511     *       Otherwise, is contains garbage.
512     */
513
514    if (DB_AC(hCmdBld).isAcConfigured[0])
515    {
516        return cmdBld_CfgAcParams (hCmdBld, &DB_AC(hCmdBld).ac[0], (void *)cmdBld_ConfigSeq, hCmdBld);
517    }
518    else
519    {
520        return TI_NOK;
521    }
522}
523
524
525static TI_STATUS __cfg_ac_params_1 (TI_HANDLE hCmdBld)
526{
527    /*
528     * NOTE: Set following parameter only if configured.
529     *       Otherwise, is contains garbage.
530     */
531
532    if (DB_AC(hCmdBld).isAcConfigured[1])
533    {
534        return cmdBld_CfgAcParams (hCmdBld, &DB_AC(hCmdBld).ac[1], (void *)cmdBld_ConfigSeq, hCmdBld);
535    }
536    else
537    {
538        return TI_NOK;
539    }
540}
541
542
543static TI_STATUS __cfg_ac_params_2 (TI_HANDLE hCmdBld)
544{
545    /*
546     * NOTE: Set following parameter only if configured.
547     *       Otherwise, is contains garbage.
548     */
549
550    if (DB_AC(hCmdBld).isAcConfigured[2])
551    {
552        return cmdBld_CfgAcParams (hCmdBld, &DB_AC(hCmdBld).ac[2], (void *)cmdBld_ConfigSeq, hCmdBld);
553    }
554    else
555    {
556        return TI_NOK;
557    }
558}
559
560
561static TI_STATUS __cfg_ac_params_3 (TI_HANDLE hCmdBld)
562{
563    /*
564     * NOTE: Set following parameter only if configured.
565     *       Otherwise, is contains garbage.
566     */
567
568    if (DB_AC(hCmdBld).isAcConfigured[3])
569    {
570        return cmdBld_CfgAcParams (hCmdBld, &DB_AC(hCmdBld).ac[3], (void *)cmdBld_ConfigSeq, hCmdBld);
571    }
572    else
573    {
574        return TI_NOK;
575    }
576}
577
578
579static TI_STATUS __cfg_tid_0 (TI_HANDLE hCmdBld)
580{
581    /*
582     * NOTE: Set following parameter only if configured.
583     *       Otherwise, is contains garbage.
584     */
585    if (DB_QUEUES(hCmdBld).isQueueConfigured[0])
586    {
587        return cmdBld_CfgTid (hCmdBld, &DB_QUEUES(hCmdBld).queues[0], (void *)cmdBld_ConfigSeq, hCmdBld);
588    }
589    else
590    {
591        return TI_NOK;
592    }
593}
594
595
596static TI_STATUS __cfg_tid_1 (TI_HANDLE hCmdBld)
597{
598    /*
599     * NOTE: Set following parameter only if configured.
600     *       Otherwise, is contains garbage.
601     */
602    if (DB_QUEUES(hCmdBld).isQueueConfigured[1])
603    {
604        return cmdBld_CfgTid (hCmdBld, &DB_QUEUES(hCmdBld).queues[1], (void *)cmdBld_ConfigSeq, hCmdBld);
605    }
606    else
607    {
608        return TI_NOK;
609    }
610}
611
612
613static TI_STATUS __cfg_tid_2 (TI_HANDLE hCmdBld)
614{
615    /*
616     * NOTE: Set following parameter only if configured.
617     *       Otherwise, is contains garbage.
618     */
619    if (DB_QUEUES(hCmdBld).isQueueConfigured[2])
620    {
621        return cmdBld_CfgTid (hCmdBld, &DB_QUEUES(hCmdBld).queues[2], (void *)cmdBld_ConfigSeq, hCmdBld);
622    }
623    else
624    {
625        return TI_NOK;
626    }
627}
628
629
630static TI_STATUS __cfg_tid_3 (TI_HANDLE hCmdBld)
631{
632    /*
633     * NOTE: Set following parameter only if configured.
634     *       Otherwise, is contains garbage.
635     */
636    if (DB_QUEUES(hCmdBld).isQueueConfigured[3])
637    {
638        return cmdBld_CfgTid (hCmdBld, &DB_QUEUES(hCmdBld).queues[3], (void *)cmdBld_ConfigSeq, hCmdBld);
639    }
640    else
641    {
642        return TI_NOK;
643    }
644}
645
646
647static TI_STATUS __cfg_ps_rx_streaming (TI_HANDLE hCmdBld)
648{
649    TI_UINT32       index;
650    TI_STATUS        eStatus;
651    TPsRxStreaming *pPsRxStreaming;
652
653
654    if (!DB_WLAN(hCmdBld).bJoin)
655    {
656        return TI_NOK;
657    }
658
659    /* Config enabled streams (disable is the FW default). */
660    for (index = 0; index < MAX_NUM_OF_802_1d_TAGS - 1; index++)
661    {
662        pPsRxStreaming = &(DB_PS_STREAM(hCmdBld).tid[index]);
663
664        if (pPsRxStreaming->bEnabled)
665        {
666            eStatus = cmdBld_CfgPsRxStreaming (hCmdBld, pPsRxStreaming, NULL, NULL);
667            if (eStatus != TI_OK)
668            {
669                return eStatus;
670            }
671        }
672    }
673
674    /* Set NOK for a case the following config is skipped, to indicate that no callback is expected */
675    eStatus = TI_NOK;
676
677    pPsRxStreaming = &(DB_PS_STREAM(hCmdBld).tid[MAX_NUM_OF_802_1d_TAGS - 1]);
678    if (pPsRxStreaming->bEnabled)
679    {
680        eStatus = cmdBld_CfgPsRxStreaming (hCmdBld, pPsRxStreaming, (void *)cmdBld_ConfigSeq, hCmdBld);
681        if (eStatus != TI_OK)
682        {
683            return eStatus;
684        }
685    }
686
687    return eStatus;
688    }
689
690
691static TI_STATUS __cfg_rx_data_filter (TI_HANDLE hCmdBld)
692{
693    TI_UINT32       index;
694    TI_STATUS       eStatus;
695    TRxDataFilter   *pFilters;
696
697
698    if (DB_RX_DATA_FLTR(hCmdBld).bEnabled)
699    {
700        eStatus = cmdBld_CfgIeEnableRxDataFilter (hCmdBld,
701                                                  DB_RX_DATA_FLTR(hCmdBld).bEnabled,
702                                                  DB_RX_DATA_FLTR(hCmdBld).eDefaultAction,
703                                                  NULL,
704                                                  NULL);
705        if (eStatus != TI_OK)
706        {
707            return eStatus;
708        }
709    }
710
711    /*
712     * Config enabled filters (last one is separated to use the callback)
713     */
714    for (index = 0; index < MAX_DATA_FILTERS - 1; index++)
715    {
716        pFilters = &(DB_RX_DATA_FLTR(hCmdBld).aRxDataFilter[index]);
717
718        if (pFilters->uCommand == ADD_FILTER)
719        {
720            eStatus = cmdBld_CfgIeRxDataFilter (hCmdBld,
721                                                pFilters->uIndex,
722                                                pFilters->uCommand,
723                                                pFilters->eAction,
724                                                pFilters->uNumFieldPatterns,
725                                                pFilters->uLenFieldPatterns,
726                                                pFilters->aFieldPattern,
727                                                NULL,
728                                                NULL);
729            if (eStatus != TI_OK)
730    {
731                return eStatus;
732            }
733        }
734    }
735
736    /* Set NOK for a case the following config is skipped, to indicate that no callback is expected */
737        eStatus = TI_NOK;
738
739    pFilters = &(DB_RX_DATA_FLTR(hCmdBld).aRxDataFilter[MAX_DATA_FILTERS - 1]);
740    if (pFilters->uCommand == ADD_FILTER)
741    {
742        eStatus = cmdBld_CfgIeRxDataFilter (hCmdBld,
743                                            pFilters->uIndex,
744                                            pFilters->uCommand,
745                                            pFilters->eAction,
746                                            pFilters->uNumFieldPatterns,
747                                            pFilters->uLenFieldPatterns,
748                                            pFilters->aFieldPattern,
749                                            (void *)cmdBld_ConfigSeq,
750                                            hCmdBld);
751        if (eStatus != TI_OK)
752        {
753            return eStatus;
754        }
755    }
756
757    return eStatus;
758}
759
760
761static TI_STATUS __cfg_pd_threshold (TI_HANDLE hCmdBld)
762{
763    return cmdBld_CfgIePacketDetectionThreshold (hCmdBld,
764                                                 DB_WLAN(hCmdBld).PacketDetectionThreshold,
765                                                 (void *)cmdBld_ConfigSeq,
766                                                 hCmdBld);
767}
768
769
770static TI_STATUS __cfg_slot_time (TI_HANDLE hCmdBld)
771{
772    return cmdBld_CfgIeSlotTime (hCmdBld, DB_WLAN(hCmdBld).SlotTime, (void *)cmdBld_ConfigSeq, hCmdBld);
773}
774
775
776static TI_STATUS __cfg_arp_ip_filter (TI_HANDLE hCmdBld)
777{
778    return cmdBld_CfgIeArpIpFilter (hCmdBld,
779                                    DB_WLAN(hCmdBld).arp_IP_addr,
780                                    (EArpFilterType)DB_WLAN(hCmdBld).arpFilterType,
781                                    (void *)cmdBld_ConfigSeq,
782                                    hCmdBld);
783}
784
785static TI_STATUS __cfg_group_address_table (TI_HANDLE hCmdBld)
786{
787    return cmdBld_CfgIeGroupAdressTable (hCmdBld,
788                                         DB_WLAN(hCmdBld).numGroupAddrs,
789                                         DB_WLAN(hCmdBld).aGroupAddr,
790                                         DB_WLAN(hCmdBld).isMacAddrFilteringnabled,
791                                         (void *)cmdBld_ConfigSeq,
792                                         hCmdBld);
793}
794
795
796static TI_STATUS __cfg_service_period_timeout (TI_HANDLE hCmdBld)
797{
798    return cmdBld_CfgIeServicePeriodTimeout (hCmdBld,
799                                             &DB_WLAN(hCmdBld).rxTimeOut,
800                                             (void *)cmdBld_ConfigSeq,
801                                             hCmdBld);
802}
803
804
805static TI_STATUS __cfg_rts_threshold (TI_HANDLE hCmdBld)
806{
807    return cmdBld_CfgRtsThreshold (hCmdBld,
808                                   DB_WLAN(hCmdBld).RtsThreshold,
809                                   (void *)cmdBld_ConfigSeq,
810                                   hCmdBld);
811}
812
813static TI_STATUS __cfg_dco_itrim_params (TI_HANDLE hCmdBld)
814{
815    return cmdBld_CfgDcoItrimParams (hCmdBld,
816                                     DB_WLAN(hCmdBld).dcoItrimEnabled,
817                                     DB_WLAN(hCmdBld).dcoItrimModerationTimeoutUsec,
818                                     (void *)cmdBld_ConfigSeq,
819                                     hCmdBld);
820}
821
822static TI_STATUS __cfg_fragment_threshold (TI_HANDLE hCmdBld)
823{
824    return cmdBld_CfgIeFragmentThreshold (hCmdBld,
825                                          DB_WLAN(hCmdBld).FragmentThreshold,
826                                          (void *)cmdBld_ConfigSeq,
827                                          hCmdBld);
828}
829
830
831static TI_STATUS __cfg_pm_config (TI_HANDLE hCmdBld)
832{
833    return cmdBld_CfgIePmConfig (hCmdBld,
834                                 DB_WLAN(hCmdBld).uHostClkSettlingTime,
835                                 DB_WLAN(hCmdBld).uHostFastWakeupSupport,
836                                 (void *)cmdBld_ConfigSeq,
837                                 hCmdBld);
838}
839
840
841static TI_STATUS __cfg_beacon_filter_opt (TI_HANDLE hCmdBld)
842{
843    /* Set The Beacon Filter in HAL */
844    return cmdBld_CfgIeBeaconFilterOpt (hCmdBld,
845                                        DB_WLAN(hCmdBld).beaconFilterParams.desiredState,
846                                        DB_WLAN(hCmdBld).beaconFilterParams.numOfElements,
847                                        (void *)cmdBld_ConfigSeq,
848                                        hCmdBld);
849}
850
851
852static TI_STATUS __cfg_beacon_filter_table (TI_HANDLE hCmdBld)
853{
854    return cmdBld_CfgIeBeaconFilterTable (hCmdBld,
855                                          DB_WLAN(hCmdBld).beaconFilterIETable.numberOfIEs,
856                                          DB_WLAN(hCmdBld).beaconFilterIETable.IETable,
857                                          DB_WLAN(hCmdBld).beaconFilterIETable.IETableSize,
858                                          (void *)cmdBld_ConfigSeq,
859                                          hCmdBld);
860}
861
862
863static TI_STATUS __cfg_tx_cmplt_pacing (TI_HANDLE hCmdBld)
864{
865    return cmdBld_CfgIeTxCmpltPacing (hCmdBld,
866                                      DB_WLAN(hCmdBld).TxCompletePacingThreshold,
867                                      DB_WLAN(hCmdBld).TxCompletePacingTimeout,
868                                      (void *)cmdBld_ConfigSeq,
869                                      hCmdBld);
870}
871
872
873static TI_STATUS __cfg_rx_intr_pacing (TI_HANDLE hCmdBld)
874{
875    return cmdBld_CfgIeRxIntrPacing (hCmdBld,
876                                     DB_WLAN(hCmdBld).RxIntrPacingThreshold,
877                                     DB_WLAN(hCmdBld).RxIntrPacingTimeout,
878                         (void *)cmdBld_ConfigSeq,
879                               hCmdBld);
880}
881
882
883#ifdef TI_TEST
884static TI_STATUS __cfg_coex_activity_table (TI_HANDLE hCmdBld)
885{
886    TCmdBld       *pCmdBld = (TCmdBld *)hCmdBld;
887    TI_UINT32 uNumberOfIEs = DB_WLAN(hCmdBld).tWlanParamsCoexActivityTable.numOfElements;
888    TCoexActivity *CoexActivityTable = DB_WLAN(hCmdBld).tWlanParamsCoexActivityTable.entry;
889    TI_STATUS   status = TI_NOK;
890    TI_UINT32   index;
891
892    TRACE1(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , " CoexActivity, uNumberOfIEs=%d\n", uNumberOfIEs);
893    if (uNumberOfIEs == 0)
894    {
895        return status;
896    }
897    /*
898     * config CoexActivity table
899     * first configure all indexes but the last one with no CB, and than configure the last one
900     * with a CB to continue configuration.
901     */
902    for (index = 0; index < uNumberOfIEs-1; index++)
903    {
904        TRACE1(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , " CoexActivity, send %d\n", index);
905        status =  cmdBld_CfgIeCoexActivity (hCmdBld, &CoexActivityTable[index],
906                                                NULL, NULL);
907        if (TI_OK != status)
908        {
909            return status;
910        }
911    }
912
913    /* Send last activity with a callback to continue config sequence */
914    TRACE1(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , " CoexActivity, send last %d\n", index);
915    status =  cmdBld_CfgIeCoexActivity (hCmdBld, &CoexActivityTable[index],
916                                            (void *)cmdBld_ConfigSeq, hCmdBld);
917
918    return status;
919}
920#endif
921
922static TI_STATUS __cfg_cca_threshold (TI_HANDLE hCmdBld)
923{
924    return cmdBld_CfgIeCcaThreshold (hCmdBld,
925                                     DB_WLAN(hCmdBld).ch14TelecCca,
926                                     (void *)cmdBld_ConfigSeq,
927                                     hCmdBld);
928}
929
930
931static TI_STATUS __cfg_bcn_brc_options (TI_HANDLE hCmdBld)
932{
933    TPowerMgmtConfig powerMgmtConfig;
934
935    /* Beacon broadcast options */
936    powerMgmtConfig.BcnBrcOptions = DB_WLAN(hCmdBld).BcnBrcOptions;
937    powerMgmtConfig.ConsecutivePsPollDeliveryFailureThreshold = DB_WLAN(hCmdBld).ConsecutivePsPollDeliveryFailureThreshold;
938
939    return cmdBld_CfgIeBcnBrcOptions (hCmdBld,
940                                      &powerMgmtConfig,
941                                      (void *)cmdBld_ConfigSeq,
942                                      hCmdBld);
943}
944
945
946static TI_STATUS __cmd_enable_rx (TI_HANDLE hCmdBld)
947{
948    /* Enable rx path on the hardware */
949    return cmdBld_CmdEnableRx (hCmdBld, (void *)cmdBld_ConfigSeq, hCmdBld);
950}
951
952
953static TI_STATUS __cmd_enable_tx (TI_HANDLE hCmdBld)
954{
955    /* Enable tx path on the hardware */
956    return cmdBld_CmdEnableTx (hCmdBld,
957                               DB_DEFAULT_CHANNEL(hCmdBld),
958                               (void *)cmdBld_ConfigSeq,
959                               hCmdBld);
960}
961
962
963static TI_STATUS __cfg_ps_wmm (TI_HANDLE hCmdBld)
964{
965    /* ACX for a work around for Wi-Fi test */
966    return cmdBld_CfgIePsWmm (hCmdBld,
967                              DB_WLAN(hCmdBld).WiFiWmmPS,
968                              (void *)cmdBld_ConfigSeq,
969                              hCmdBld);
970}
971
972
973static TI_STATUS __cfg_rssi_snr_weights (TI_HANDLE hCmdBld)
974{
975    /* RSSI/SNR Weights for Average calculations */
976    return cmdBld_CfgIeRssiSnrWeights (hCmdBld,
977                                       &DB_WLAN(hCmdBld).tRssiSnrWeights,
978                                       (void *)cmdBld_ConfigSeq,
979                                       hCmdBld);
980}
981
982
983static TI_STATUS __cfg_event_scan_cmplt (TI_HANDLE hCmdBld)
984{
985    TCmdBld   *pCmdBld = (TCmdBld *)hCmdBld;
986
987    /* Enable the scan complete interrupt source */
988    return eventMbox_UnMaskEvent (pCmdBld->hEventMbox,
989                               TWD_OWN_EVENT_SCAN_CMPLT,
990                               (void *)cmdBld_ConfigSeq,
991                               hCmdBld);
992}
993
994static TI_STATUS __cfg_event_sps_scan_cmplt (TI_HANDLE hCmdBld)
995{
996    TCmdBld   *pCmdBld = (TCmdBld *)hCmdBld;
997
998    return eventMbox_UnMaskEvent (pCmdBld->hEventMbox,
999                               TWD_OWN_EVENT_SPS_SCAN_CMPLT,
1000                               (void *)cmdBld_ConfigSeq,
1001                               hCmdBld);
1002}
1003
1004static TI_STATUS __cfg_event_plt_rx_calibration_cmplt (TI_HANDLE hCmdBld)
1005{
1006    TCmdBld   *pCmdBld = (TCmdBld *)hCmdBld;
1007
1008    return eventMbox_UnMaskEvent (pCmdBld->hEventMbox,
1009                               TWD_OWN_EVENT_PLT_RX_CALIBRATION_COMPLETE,
1010                               (void *)cmdBld_ConfigSeq,
1011                               hCmdBld);
1012}
1013
1014
1015static TI_STATUS __cfg_hw_enc_dec_enable (TI_HANDLE hCmdBld)
1016{
1017    return cmdBld_CfgHwEncDecEnable (hCmdBld, TI_TRUE, (void *)cmdBld_ConfigSeq, hCmdBld);
1018}
1019
1020
1021static TI_STATUS __cfg_rssi_snr_trigger_0 (TI_HANDLE hCmdBld)
1022{
1023    /* RSSI/SNR Troggers */
1024    return  cmdBld_CfgIeRssiSnrTrigger (hCmdBld,
1025                                        &DB_WLAN(hCmdBld).tRssiSnrTrigger[0],
1026                                        (void *)cmdBld_ConfigSeq,
1027                                        hCmdBld);
1028}
1029
1030
1031static TI_STATUS __cfg_rssi_snr_trigger_1 (TI_HANDLE hCmdBld)
1032{
1033    /* RSSI/SNR Troggers */
1034    return  cmdBld_CfgIeRssiSnrTrigger (hCmdBld,
1035                                        &DB_WLAN(hCmdBld).tRssiSnrTrigger[1],
1036                                        (void *)cmdBld_ConfigSeq,
1037                                        hCmdBld);
1038}
1039
1040
1041static TI_STATUS __cfg_rssi_snr_trigger_2 (TI_HANDLE hCmdBld)
1042{
1043    /* RSSI/SNR Troggers */
1044    return  cmdBld_CfgIeRssiSnrTrigger (hCmdBld,
1045                                        &DB_WLAN(hCmdBld).tRssiSnrTrigger[2],
1046                                        (void *)cmdBld_ConfigSeq,
1047                                        hCmdBld);
1048}
1049
1050
1051static TI_STATUS __cfg_rssi_snr_trigger_3 (TI_HANDLE hCmdBld)
1052{
1053    /* RSSI/SNR Troggers */
1054    return  cmdBld_CfgIeRssiSnrTrigger (hCmdBld,
1055                                        &DB_WLAN(hCmdBld).tRssiSnrTrigger[3],
1056                                        (void *)cmdBld_ConfigSeq,
1057                                        hCmdBld);
1058}
1059
1060
1061static TI_STATUS __cfg_rssi_snr_trigger_4 (TI_HANDLE hCmdBld)
1062{
1063    /* RSSI/SNR Troggers */
1064    return  cmdBld_CfgIeRssiSnrTrigger (hCmdBld,
1065                                        &DB_WLAN(hCmdBld).tRssiSnrTrigger[4],
1066                                        (void *)cmdBld_ConfigSeq,
1067                                        hCmdBld);
1068}
1069
1070
1071static TI_STATUS __cfg_rssi_snr_trigger_5 (TI_HANDLE hCmdBld)
1072{
1073    /* RSSI/SNR Troggers */
1074    return  cmdBld_CfgIeRssiSnrTrigger (hCmdBld,
1075                                        &DB_WLAN(hCmdBld).tRssiSnrTrigger[5],
1076                                        (void *)cmdBld_ConfigSeq,
1077                                        hCmdBld);
1078}
1079
1080
1081static TI_STATUS __cfg_rssi_snr_trigger_6 (TI_HANDLE hCmdBld)
1082{
1083    /* RSSI/SNR Troggers */
1084    return  cmdBld_CfgIeRssiSnrTrigger (hCmdBld,
1085                                        &DB_WLAN(hCmdBld).tRssiSnrTrigger[6],
1086                                        (void *)cmdBld_ConfigSeq,
1087                                        hCmdBld);
1088}
1089
1090
1091static TI_STATUS __cfg_rssi_snr_trigger_7 (TI_HANDLE hCmdBld)
1092{
1093    /* RSSI/SNR Troggers */
1094    return  cmdBld_CfgIeRssiSnrTrigger (hCmdBld,
1095                                        &DB_WLAN(hCmdBld).tRssiSnrTrigger[7],
1096                                        (void *)cmdBld_ConfigSeq,
1097                                        hCmdBld);
1098}
1099
1100
1101static TI_STATUS __cfg_max_tx_retry (TI_HANDLE hCmdBld)
1102{
1103    return cmdBld_CfgIeMaxTxRetry (hCmdBld,
1104                                   &DB_WLAN(hCmdBld).roamTriggers,
1105                                   (void *)cmdBld_ConfigSeq,
1106                                   hCmdBld);
1107}
1108
1109
1110
1111static TI_STATUS __cfg_split_scan_timeout (TI_HANDLE hCmdBld)
1112{
1113    return cmdBld_CmdIeSetSplitScanTimeOut (hCmdBld,
1114                                            DB_WLAN(hCmdBld).uSlicedScanTimeOut,
1115                                            (void *)cmdBld_ConfigSeq,
1116                                            hCmdBld);
1117}
1118
1119
1120static TI_STATUS __cfg_conn_monit_params (TI_HANDLE hCmdBld)
1121{
1122    return cmdBld_CfgIeConnMonitParams (hCmdBld,
1123                                        &DB_WLAN(hCmdBld).roamTriggers,
1124                                        (void *)cmdBld_ConfigSeq,
1125                                        hCmdBld);
1126}
1127
1128
1129static TI_STATUS __cfg_bet (TI_HANDLE hCmdBld)
1130{
1131    return cmdBld_CfgBet (hCmdBld,
1132                          DB_WLAN(hCmdBld).BetEnable,
1133                          DB_WLAN(hCmdBld).MaximumConsecutiveET,
1134                          (void *)cmdBld_ConfigSeq,
1135                          hCmdBld);
1136}
1137
1138
1139static TI_STATUS __cfg_cts_protection (TI_HANDLE hCmdBld)
1140{
1141    return cmdBld_CfgIeCtsProtection (hCmdBld,
1142                                      DB_WLAN(hCmdBld).CtsToSelf,
1143                                      (void *)cmdBld_ConfigSeq,
1144                                      hCmdBld);
1145}
1146
1147
1148static TI_STATUS __cfg_radio_params (TI_HANDLE hCmdBld)
1149{
1150    return cmdBld_CfgIeRadioParams (hCmdBld,
1151                                    &DB_RADIO(hCmdBld),
1152                                    (void *)cmdBld_ConfigSeq,
1153                                    hCmdBld);
1154}
1155
1156
1157static TI_STATUS __cfg_extended_radio_params (TI_HANDLE hCmdBld)
1158{
1159    return cmdBld_CfgIeExtendedRadioParams (hCmdBld,
1160											&DB_EXT_RADIO(hCmdBld),
1161											(void *)cmdBld_ConfigSeq,
1162											hCmdBld);
1163}
1164
1165
1166static TI_STATUS __cfg_platform_params (TI_HANDLE hCmdBld)
1167{
1168    return cmdBld_CfgPlatformGenParams(hCmdBld,
1169                                      &DB_GEN(hCmdBld),
1170                                      (void *)cmdBld_ConfigSeq,
1171                                      hCmdBld);
1172}
1173
1174
1175
1176static TI_STATUS __cfg_tx_rate_policy (TI_HANDLE hCmdBld)
1177{
1178    /*
1179     * JOIN (use the local parameters), otherwize the CORE will reconnect
1180     */
1181    if (DB_WLAN(hCmdBld).bJoin)
1182    {
1183        /* Set TxRatePolicy */
1184        return cmdBld_CfgTxRatePolicy (hCmdBld,
1185                                       &DB_BSS(hCmdBld).TxRateClassParams,
1186                                       (void *)cmdBld_ConfigSeq,
1187                                       hCmdBld);
1188    }
1189
1190    return TI_NOK;
1191}
1192
1193
1194static TI_STATUS __cmd_beacon_join (TI_HANDLE hCmdBld)
1195{
1196    if (DB_WLAN(hCmdBld).bJoin && DB_TEMP(hCmdBld).Beacon.Size != 0)
1197    {
1198        return cmdBld_CmdIeConfigureTemplateFrame (hCmdBld,
1199                                                   &(DB_TEMP(hCmdBld).Beacon),
1200                                                 (TI_UINT16)DB_TEMP(hCmdBld).Beacon.Size,
1201                                                   TEMPLATE_BEACON,
1202                                                   0,
1203                                                 (void *)cmdBld_ConfigSeq,
1204                                                 hCmdBld);
1205    }
1206
1207    return TI_NOK;
1208}
1209
1210static TI_STATUS __cmd_probe_resp_join (TI_HANDLE hCmdBld)
1211{
1212    if (DB_WLAN(hCmdBld).bJoin && DB_TEMP(hCmdBld).ProbeResp.Size != 0)
1213    {
1214        return cmdBld_CmdIeConfigureTemplateFrame (hCmdBld,
1215                                                   &(DB_TEMP(hCmdBld).ProbeResp),
1216                                                 (TI_UINT16)DB_TEMP(hCmdBld).ProbeResp.Size,
1217                                                   TEMPLATE_PROBE_RESPONSE,
1218                                                   0,
1219                                                 (void *)cmdBld_ConfigSeq,
1220                                                 hCmdBld);
1221    }
1222
1223    return TI_NOK;
1224}
1225
1226
1227static TI_STATUS __cmd_probe_req_join (TI_HANDLE hCmdBld)
1228{
1229    TI_STATUS   tStatus;
1230
1231    /* set Probe Req template also if join == false ! */
1232    if (DB_TEMP(hCmdBld).ProbeReq24.Size != 0)
1233    {
1234        tStatus =  cmdBld_CmdIeConfigureTemplateFrame (hCmdBld,
1235                                                       &(DB_TEMP(hCmdBld).ProbeReq24),
1236                                                       (TI_UINT16)DB_TEMP(hCmdBld).ProbeReq24.Size,
1237                                                       CFG_TEMPLATE_PROBE_REQ_2_4,
1238                                                       0,
1239                                                       NULL,
1240                                                       NULL);
1241        if (TI_OK != tStatus)
1242        {
1243            return tStatus;
1244        }
1245    }
1246
1247    /* set Probe Req template also if join == false ! */
1248    if (DB_TEMP(hCmdBld).ProbeReq50.Size != 0)
1249    {
1250        return cmdBld_CmdIeConfigureTemplateFrame (hCmdBld,
1251                                                   &(DB_TEMP(hCmdBld).ProbeReq50),
1252                                                   (TI_UINT16)DB_TEMP(hCmdBld).ProbeReq50.Size,
1253                                                   CFG_TEMPLATE_PROBE_REQ_5,
1254                                                   0,
1255                                                 (void *)cmdBld_ConfigSeq,
1256                                                 hCmdBld);
1257    }
1258
1259    return TI_NOK;
1260}
1261
1262
1263static TI_STATUS __cmd_null_data_join (TI_HANDLE hCmdBld)
1264{
1265    if (DB_WLAN(hCmdBld).bJoin && DB_TEMP(hCmdBld).NullData.Size != 0)
1266    {
1267        return cmdBld_CmdIeConfigureTemplateFrame (hCmdBld,
1268                                                   &(DB_TEMP(hCmdBld).NullData),
1269                                                 (TI_UINT16)DB_TEMP(hCmdBld).NullData.Size,
1270                                                   TEMPLATE_NULL_DATA,
1271                                                   0,
1272                                                 (void *)cmdBld_ConfigSeq,
1273                                                 hCmdBld);
1274    }
1275
1276    return TI_NOK;
1277}
1278
1279static TI_STATUS __cmd_disconn_join (TI_HANDLE hCmdBld)
1280{
1281    if (DB_WLAN(hCmdBld).bJoin && DB_TEMP(hCmdBld).Disconn.Size != 0)
1282    {
1283        return cmdBld_CmdIeConfigureTemplateFrame (hCmdBld,
1284                                                   &(DB_TEMP(hCmdBld).Disconn),
1285                                                   (TI_UINT16)DB_TEMP(hCmdBld).Disconn.Size,
1286                                                   TEMPLATE_DISCONNECT,
1287                                                   0,
1288                                                   (void *)cmdBld_ConfigSeq,
1289                                                   hCmdBld);
1290    }
1291
1292    return TI_NOK;
1293}
1294
1295static TI_STATUS __cmd_ps_poll_join (TI_HANDLE hCmdBld)
1296{
1297    if (DB_WLAN(hCmdBld).bJoin && DB_TEMP(hCmdBld).PsPoll.Size != 0)
1298    {
1299        return cmdBld_CmdIeConfigureTemplateFrame (hCmdBld,
1300                                                   &(DB_TEMP(hCmdBld).PsPoll),
1301                                                 (TI_UINT16)DB_TEMP(hCmdBld).PsPoll.Size,
1302                                                   TEMPLATE_PS_POLL,
1303                                                   0,
1304                                                 (void *)cmdBld_ConfigSeq,
1305                                                 hCmdBld);
1306    }
1307
1308    return TI_NOK;
1309}
1310
1311static TI_STATUS __cmd_arp_rsp (TI_HANDLE hCmdBld)
1312{
1313
1314   return cmdBld_CmdIeConfigureTemplateFrame (hCmdBld,
1315                                                   NULL,
1316                                                   DB_WLAN(hCmdBld).ArpRspTemplateSize,
1317                                                   TEMPLATE_ARP_RSP,
1318                                                   0,
1319                                                   (void *)cmdBld_ConfigSeq,
1320                                                   hCmdBld);
1321}
1322
1323
1324static TI_STATUS __cmd_arp_rsp_join (TI_HANDLE hCmdBld)
1325{
1326
1327    if ((DB_WLAN(hCmdBld).bJoin) && (DB_TEMP(hCmdBld).ArpRsp.Size != 0))
1328    {
1329        return cmdBld_CmdIeConfigureTemplateFrame (hCmdBld,
1330                                                   &(DB_TEMP(hCmdBld).ArpRsp),
1331                                                   DB_TEMP(hCmdBld).ArpRsp.Size,
1332                                                   TEMPLATE_ARP_RSP,
1333                                                   0,
1334                                                   (void *)cmdBld_ConfigSeq,
1335                                                   hCmdBld);
1336    }
1337
1338    return TI_NOK;
1339}
1340
1341
1342
1343
1344static TI_STATUS __cmd_keep_alive_tmpl_join (TI_HANDLE hCmdBld)
1345{
1346    TI_UINT32   index;
1347    TI_STATUS   status = TI_NOK;
1348
1349    /*
1350     * config templates
1351     * first configure all indexes but the last one with no CB, and than configure the last one
1352     * with a CB to continue configuration.
1353     */
1354    for (index = 0; index < KLV_MAX_TMPL_NUM - 1; index++)
1355    {
1356        if (DB_WLAN(hCmdBld).bJoin && DB_TEMP(hCmdBld).KeepAlive[ index ].Size != 0)
1357        {
1358            status =  cmdBld_CmdIeConfigureTemplateFrame (hCmdBld,
1359                                                          &(DB_TEMP(hCmdBld).KeepAlive[index]),
1360                                                          (TI_UINT16)DB_TEMP(hCmdBld).KeepAlive[index].Size,
1361                                                          TEMPLATE_KLV,
1362                                                          index,
1363                                                          NULL,
1364                                                          NULL);
1365            if (TI_OK != status)
1366            {
1367                return status;
1368            }
1369        }
1370    }
1371
1372    if (DB_WLAN(hCmdBld).bJoin && DB_TEMP(hCmdBld).KeepAlive[ index ].Size != 0)
1373    {
1374        status =  cmdBld_CmdIeConfigureTemplateFrame (hCmdBld,
1375                                                      &(DB_TEMP(hCmdBld).KeepAlive[index]),
1376                                                      (TI_UINT16)DB_TEMP(hCmdBld).KeepAlive[index].Size,
1377                                                      TEMPLATE_KLV,
1378                                                      index,
1379                                                      (void *)cmdBld_ConfigSeq,
1380                                                      hCmdBld);
1381        if (TI_OK != status)
1382        {
1383            return status;
1384        }
1385    }
1386
1387    return status;
1388}
1389
1390
1391static TI_STATUS __cmd_keep_alive_params(TI_HANDLE hCmdBld)
1392{
1393    TI_UINT32   index;
1394    TI_STATUS   status;
1395
1396    /* config gloabl enable / disable flag */
1397    cmdBld_CfgKeepAliveEnaDis (hCmdBld, DB_KLV(hCmdBld).enaDisFlag, NULL, NULL);
1398
1399    /*
1400     * config per-template params
1401     * fisr configure all indexes but the last one with no CB, and than configure the last one
1402     * with a CB to continue configuration.
1403     */
1404    for (index = 0; index < KLV_MAX_TMPL_NUM - 1; index++)
1405    {
1406        if (DB_WLAN(hCmdBld).bJoin && DB_KLV(hCmdBld).keepAliveParams[ index ].enaDisFlag != 0)
1407        {
1408            status =  cmdBld_CmdIeConfigureKeepAliveParams (hCmdBld,
1409                                                            index,
1410                                                            DB_KLV(hCmdBld).keepAliveParams[ index ].enaDisFlag,
1411                                                            DB_KLV(hCmdBld).keepAliveParams[ index ].trigType,
1412                                                            DB_KLV(hCmdBld).keepAliveParams[ index ].interval,
1413                                                            NULL,
1414                                                            NULL);
1415            if (TI_OK != status)
1416            {
1417                return status;
1418            }
1419        }
1420    }
1421
1422    /* Set NOK for a case the following config is skipped, to indicate that no callback is expected */
1423    status = TI_NOK;
1424
1425    if (DB_WLAN(hCmdBld).bJoin && DB_KLV(hCmdBld).keepAliveParams[ index ].enaDisFlag != 0)
1426    {
1427        status =  cmdBld_CmdIeConfigureKeepAliveParams (hCmdBld,
1428                                                        index,
1429                                                        DB_KLV(hCmdBld).keepAliveParams[ index ].enaDisFlag,
1430                                                        DB_KLV(hCmdBld).keepAliveParams[ index ].trigType,
1431                                                        DB_KLV(hCmdBld).keepAliveParams[ index ].interval,
1432                                                        (void *)cmdBld_ConfigSeq,
1433                                                        hCmdBld);
1434        if (TI_OK != status)
1435        {
1436            return status;
1437        }
1438    }
1439
1440    return status;
1441}
1442
1443static TI_STATUS __cmd_power_auth (TI_HANDLE hCmdBld)
1444{
1445    return cmdBld_CfgIeSleepAuth (hCmdBld,
1446                              DB_WLAN(hCmdBld).minPowerLevel,
1447                              (void *)cmdBld_ConfigSeq,
1448                              hCmdBld);
1449}
1450
1451static TI_STATUS __cmd_start_join (TI_HANDLE hCmdBld)
1452{
1453    TCmdBld *pCmdBld = (TCmdBld *)hCmdBld;
1454
1455    if (DB_WLAN(hCmdBld).bJoin)
1456    {
1457        /*
1458         * Replace the Join-Complete event CB by a local function.
1459         * Thus, the reconfig sequence will not continue until the Join is completed!
1460         * The original CB is restored after Join-Complete.
1461         */
1462        eventMbox_ReplaceEvent (pCmdBld->hEventMbox,
1463                                  TWD_OWN_EVENT_JOIN_CMPLT,
1464                                  (void *)cmdBld_JoinCmpltForReconfigCb,
1465                                  hCmdBld,
1466                                  &pCmdBld->fJoinCmpltOriginalCbFunc,
1467                                  &pCmdBld->hJoinCmpltOriginalCbHndl);
1468        /*
1469         * Call the hardware to start/join the bss
1470         */
1471        return cmdBld_CmdStartJoin (hCmdBld,
1472                                    (ScanBssType_e)DB_BSS(hCmdBld).ReqBssType,
1473                                    (void *)cmdBld_DummyCb,
1474                                    hCmdBld);
1475    }
1476
1477    return TI_NOK;
1478}
1479
1480static TI_STATUS __cmd_sta_state (TI_HANDLE hCmdBld)
1481{
1482    if (DB_WLAN(hCmdBld).bStaConnected)
1483    {
1484        return cmdBld_CmdSetStaState (hCmdBld,
1485                                    STA_STATE_CONNECTED,
1486                                    (void *)cmdBld_ConfigSeq,
1487                                    hCmdBld);
1488    }
1489
1490    return TI_NOK;
1491}
1492
1493static TI_STATUS __cfg_aid (TI_HANDLE hCmdBld)
1494{
1495    if (DB_WLAN(hCmdBld).bJoin)
1496    {
1497        return cmdBld_CfgAid (hCmdBld, DB_WLAN(hCmdBld).Aid, (void *)cmdBld_ConfigSeq, hCmdBld);
1498    }
1499
1500    return TI_NOK;
1501}
1502
1503
1504static TI_STATUS __cfg_slot_time_join (TI_HANDLE hCmdBld)
1505{
1506    if (DB_WLAN(hCmdBld).bJoin)
1507    {
1508        /* Slot time must be setting after doing join */
1509        return cmdBld_CfgSlotTime (hCmdBld, (ESlotTime)(DB_WLAN(hCmdBld).SlotTime), (void *)cmdBld_ConfigSeq, hCmdBld);
1510    }
1511
1512    return TI_NOK;
1513}
1514
1515
1516static TI_STATUS __cfg_preamble_join (TI_HANDLE hCmdBld)
1517{
1518    if (DB_WLAN(hCmdBld).bJoin)
1519    {
1520        /* Preamble type must be set after doing join */
1521        return cmdBld_CfgPreamble (hCmdBld, (Preamble_e) DB_WLAN(hCmdBld).preamble, (void *)cmdBld_ConfigSeq, hCmdBld);
1522    }
1523
1524    return TI_NOK;
1525}
1526
1527
1528static TI_STATUS __cfg_ht_capabilities (TI_HANDLE hCmdBld)
1529{
1530    if (DB_WLAN(hCmdBld).bJoin && DB_BSS(hCmdBld).bHtCap)
1531    {
1532        /* HT capabilities must be set after doing join */
1533        return cmdBld_CfgIeSetFwHtCapabilities (hCmdBld,
1534                                                DB_BSS(hCmdBld).uHtCapabilites,
1535                                                DB_BSS(hCmdBld).tMacAddress,
1536                                                DB_BSS(hCmdBld).uAmpduMaxLeng,
1537                                                DB_BSS(hCmdBld).uAmpduMinSpac,
1538                                                (void *)cmdBld_ConfigSeq,
1539                                                hCmdBld);
1540    }
1541
1542    return TI_NOK;
1543}
1544
1545
1546static TI_STATUS __cfg_ht_information (TI_HANDLE hCmdBld)
1547{
1548    if (DB_WLAN(hCmdBld).bJoin && DB_BSS(hCmdBld).bHtInf)
1549    {
1550        /* HT Information must be set after doing join */
1551        return cmdBld_CfgIeSetFwHtInformation (hCmdBld,
1552                                               DB_BSS(hCmdBld).uRifsMode,
1553                                               DB_BSS(hCmdBld).uHtProtection,
1554                                               DB_BSS(hCmdBld).uGfProtection,
1555                                               DB_BSS(hCmdBld).uHtTxBurstLimit,
1556                                               DB_BSS(hCmdBld).uDualCtsProtection,
1557                                               (void *)cmdBld_ConfigSeq,
1558                                               hCmdBld);
1559    }
1560
1561    return TI_NOK;
1562}
1563
1564
1565static TI_STATUS __cfg_ba_set_session (TI_HANDLE hCmdBld)
1566{
1567	TI_STATUS tRes = TI_NOK;
1568
1569    if (DB_WLAN(hCmdBld).bJoin)
1570    {
1571        TI_UINT32 uTid;
1572		TI_UINT32 uLastTid = MAX_NUM_OF_802_1d_TAGS; /* initial value is "not found" */
1573
1574		/* Look through configured BA sessions in data base to find the last set TID */
1575        for (uTid = 0; uTid < MAX_NUM_OF_802_1d_TAGS; uTid++)
1576        {
1577            /* Is BA initiator or responder configured? */
1578            if (DB_BSS(hCmdBld).bBaInitiator[uTid] || DB_BSS(hCmdBld).bBaResponder[uTid])
1579            {
1580				uLastTid = uTid;
1581            }
1582		}
1583
1584		if (uLastTid != MAX_NUM_OF_802_1d_TAGS)
1585		{
1586			/* At least one TID is set */
1587			for (uTid = 0; uTid < uLastTid; ++uTid)
1588			{
1589				if (DB_BSS(hCmdBld).bBaInitiator[uTid])
1590				{
1591					/* set BA Initiator */
1592					tRes = cmdBld_CfgIeSetBaSession (hCmdBld,
1593													 ACX_BA_SESSION_INITIATOR_POLICY,
1594													 uTid,
1595													 DB_BSS(hCmdBld).tBaSessionInitiatorPolicy[uTid].uPolicy,
1596													 DB_BSS(hCmdBld).tBaSessionInitiatorPolicy[uTid].aMacAddress,
1597													 DB_BSS(hCmdBld).tBaSessionInitiatorPolicy[uTid].uWinSize,
1598													 DB_BSS(hCmdBld).tBaSessionInitiatorPolicy[uTid].uInactivityTimeout,
1599													 NULL,
1600													 NULL);
1601					if (tRes != TI_OK)
1602					{
1603						return tRes;
1604					}
1605				}
1606
1607				if (DB_BSS(hCmdBld).bBaResponder[uTid])
1608				{
1609					/* set BA Responder */
1610					tRes = cmdBld_CfgIeSetBaSession (hCmdBld,
1611													 ACX_BA_SESSION_RESPONDER_POLICY,
1612													 uTid,
1613													 DB_BSS(hCmdBld).tBaSessionResponderPolicy[uTid].uPolicy,
1614													 DB_BSS(hCmdBld).tBaSessionResponderPolicy[uTid].aMacAddress,
1615													 DB_BSS(hCmdBld).tBaSessionResponderPolicy[uTid].uWinSize,
1616													 DB_BSS(hCmdBld).tBaSessionResponderPolicy[uTid].uInactivityTimeout,
1617													 NULL,
1618													 NULL);
1619					if (tRes != TI_OK)
1620					{
1621						return tRes;
1622					}
1623				}
1624			}
1625
1626			/* Push the last command of the last TID entry into queue with a call back function */
1627			if (DB_BSS(hCmdBld).bBaInitiator[uLastTid] && !(DB_BSS(hCmdBld).bBaResponder[uLastTid]))
1628			{
1629
1630				tRes = cmdBld_CfgIeSetBaSession (hCmdBld,
1631												 ACX_BA_SESSION_INITIATOR_POLICY,
1632												 uLastTid,
1633												 DB_BSS(hCmdBld).tBaSessionInitiatorPolicy[uLastTid].uPolicy,
1634												 DB_BSS(hCmdBld).tBaSessionInitiatorPolicy[uLastTid].aMacAddress,
1635												 DB_BSS(hCmdBld).tBaSessionInitiatorPolicy[uLastTid].uWinSize,
1636												 DB_BSS(hCmdBld).tBaSessionInitiatorPolicy[uLastTid].uInactivityTimeout,
1637												 (void *)cmdBld_ConfigSeq,
1638												 hCmdBld);
1639			}
1640			else if (!(DB_BSS(hCmdBld).bBaInitiator[uLastTid]) && DB_BSS(hCmdBld).bBaResponder[uLastTid])
1641			{
1642				tRes = cmdBld_CfgIeSetBaSession (hCmdBld,
1643												 ACX_BA_SESSION_RESPONDER_POLICY,
1644												 uLastTid,
1645												 DB_BSS(hCmdBld).tBaSessionResponderPolicy[uLastTid].uPolicy,
1646												 DB_BSS(hCmdBld).tBaSessionResponderPolicy[uLastTid].aMacAddress,
1647												 DB_BSS(hCmdBld).tBaSessionResponderPolicy[uLastTid].uWinSize,
1648												 DB_BSS(hCmdBld).tBaSessionResponderPolicy[uLastTid].uInactivityTimeout,
1649												 (void *)cmdBld_ConfigSeq,
1650												 hCmdBld);
1651			}
1652			else
1653			{
1654				/* Initiator & Responsder policy is to be set */
1655				tRes = cmdBld_CfgIeSetBaSession (hCmdBld,
1656												 ACX_BA_SESSION_INITIATOR_POLICY,
1657												 uLastTid,
1658												 DB_BSS(hCmdBld).tBaSessionInitiatorPolicy[uLastTid].uPolicy,
1659												 DB_BSS(hCmdBld).tBaSessionInitiatorPolicy[uLastTid].aMacAddress,
1660												 DB_BSS(hCmdBld).tBaSessionInitiatorPolicy[uLastTid].uWinSize,
1661												 DB_BSS(hCmdBld).tBaSessionInitiatorPolicy[uLastTid].uInactivityTimeout,
1662												 NULL,
1663												 NULL);
1664				if (tRes != TI_OK)
1665				{
1666					return tRes;
1667				}
1668
1669				tRes = cmdBld_CfgIeSetBaSession (hCmdBld,
1670												 ACX_BA_SESSION_RESPONDER_POLICY,
1671												 uLastTid,
1672												 DB_BSS(hCmdBld).tBaSessionResponderPolicy[uLastTid].uPolicy,
1673												 DB_BSS(hCmdBld).tBaSessionResponderPolicy[uLastTid].aMacAddress,
1674												 DB_BSS(hCmdBld).tBaSessionResponderPolicy[uLastTid].uWinSize,
1675												 DB_BSS(hCmdBld).tBaSessionResponderPolicy[uLastTid].uInactivityTimeout,
1676												 (void *)cmdBld_ConfigSeq,
1677												 hCmdBld);
1678			}
1679		}
1680	}
1681
1682	return tRes;
1683}
1684
1685
1686static TI_STATUS __cfg_tx_power_join (TI_HANDLE hCmdBld)
1687{
1688    if (DB_WLAN(hCmdBld).bJoin)
1689    {
1690        /* Tx-power must be set after doing join */
1691        return cmdBld_CfgTxPowerDbm (hCmdBld, DB_WLAN(hCmdBld).TxPowerDbm, (void *)cmdBld_ConfigSeq, hCmdBld);
1692    }
1693
1694    return TI_NOK;
1695}
1696
1697
1698static TI_STATUS __cfg_keys (TI_HANDLE hCmdBld)
1699{
1700    TCmdBld   *pCmdBld = (TCmdBld *)hCmdBld;
1701    TI_UINT32  index;
1702
1703    if (!DB_WLAN(hCmdBld).bJoin)
1704    {
1705        return TI_NOK;
1706    }
1707
1708    if (pCmdBld->tSecurity.eSecurityMode != TWD_CIPHER_NONE)
1709    {
1710        /*
1711         * We are doing recovery during security so increase security-sequence-number by 255 just to ensure
1712         *   the AP will see progress from last Tx before the recovery (actually needed only for TKIP and AES).
1713         * Decrementing the low byte by one is handled like it wrpped around, i.e. increment total number by 255.
1714         */
1715        cmdBld_SetSecuritySeqNum (hCmdBld, (TI_UINT8)(pCmdBld->uSecuritySeqNumLow - 1));
1716
1717
1718        /* set the keys to the HW*/
1719        for (index = 0;
1720             index < pCmdBld->tSecurity.uNumOfStations * NO_OF_RECONF_SECUR_KEYS_PER_STATION + NO_OF_EXTRA_RECONF_SECUR_KEYS;
1721             index++)
1722        {
1723            if ((DB_KEYS(pCmdBld).pReconfKeys + index)->keyType != KEY_NULL)
1724            {
1725                if (cmdBld_CmdAddKey (hCmdBld, DB_KEYS(pCmdBld).pReconfKeys + index, TI_TRUE, NULL, NULL) != TI_OK)
1726                {
1727                    TRACE1(pCmdBld->hReport, REPORT_SEVERITY_ERROR, "__cfg_keys: ERROR cmdBld_CmdAddKey failure index=%d\n", index);
1728                    return TI_NOK;
1729                }
1730            }
1731        }
1732
1733        if (DB_KEYS(pCmdBld).bDefaultKeyIdValid)
1734        {
1735            /* Set the deafult key ID to the HW*/
1736            if (cmdBld_CmdSetWepDefaultKeyId (hCmdBld, DB_KEYS(pCmdBld).uReconfDefaultKeyId, NULL, NULL) != TI_OK)
1737            {
1738                TRACE0(pCmdBld->hReport, REPORT_SEVERITY_ERROR, "__cfg_keys: ERROR cmdBld_CmdSetWepDefaultKeyId failure\n");
1739                return TI_NOK;
1740            }
1741        }
1742    }
1743
1744    /* Set the encryption/decryption control on the HW */
1745    if (cmdBld_CfgHwEncDecEnable (hCmdBld,
1746                                  DB_KEYS(pCmdBld).bReconfHwEncEnable,
1747                                  (void *)cmdBld_ConfigSeq,
1748                                  hCmdBld) != TI_OK)
1749    {
1750        TRACE0(pCmdBld->hReport, REPORT_SEVERITY_ERROR, "__cfg_keys: ERROR cmdBld_CfgHwEncDecEnable failure \n");
1751        return TI_NOK;
1752    }
1753
1754    return TI_OK;
1755}
1756
1757static TI_STATUS __cfg_sg_enable (TI_HANDLE hCmdBld)
1758{
1759    /* Set the Soft Gemini state */
1760    return cmdBld_CfgSgEnable (hCmdBld,
1761                               DB_WLAN(hCmdBld).SoftGeminiEnable,
1762                               (void *)cmdBld_ConfigSeq,
1763                               hCmdBld);
1764}
1765
1766
1767static TI_STATUS __cfg_sg (TI_HANDLE hCmdBld)
1768{
1769    /* Set the Soft Gemini params */
1770
1771	/* signals the FW to config all the paramters from the DB*/
1772	DB_WLAN(hCmdBld).SoftGeminiParams.paramIdx = 0xFF;
1773
1774    return cmdBld_CfgSg (hCmdBld,
1775                         &DB_WLAN(hCmdBld).SoftGeminiParams,
1776                         (void *)cmdBld_ConfigSeq,
1777                         hCmdBld);
1778}
1779
1780
1781static TI_STATUS __cfg_fm_coex (TI_HANDLE hCmdBld)
1782{
1783    /* Set the FM Coexistence params */
1784    return cmdBld_CfgIeFmCoex (hCmdBld,
1785                               &DB_WLAN(hCmdBld).tFmCoexParams,
1786                               (void *)cmdBld_ConfigSeq,
1787                               hCmdBld);
1788}
1789
1790
1791static TI_STATUS __cfg_rate_management (TI_HANDLE hCmdBld)
1792{
1793	DB_RM(hCmdBld).rateMngParams.paramIndex = (rateAdaptParam_e) 0xFF;
1794
1795	return cmdBld_CfgIeRateMngDbg(hCmdBld,
1796						   &DB_RM(hCmdBld).rateMngParams,
1797						   (void *)cmdBld_ConfigSeq,
1798						   hCmdBld);
1799
1800}
1801
1802
1803TI_STATUS __itr_memory_map (TI_HANDLE hCmdBld)
1804{
1805    TCmdBld   *pCmdBld = (TCmdBld *)hCmdBld;
1806
1807    WLAN_OS_REPORT(("Interrogate TX/RX parameters\n"));
1808
1809    /* Interrogate TX/RX parameters */
1810    return cmdBld_ItrIeMemoryMap (hCmdBld,
1811                                  &pCmdBld->tMemMap,
1812                                  (void *)cmdBld_ConfigFwCb,
1813                                  hCmdBld);
1814}
1815
1816
1817static const TCmdCfgFunc aCmdIniSeq [] =
1818{
1819    __cfg_platform_params,
1820    __cfg_radio_params,
1821	__cfg_extended_radio_params,
1822    __cmd_probe_req,
1823    __cmd_null_data,
1824    __cmd_disconn,
1825    __cmd_ps_poll,
1826    __cmd_qos_null_data,
1827    __cmd_probe_resp,
1828    __cmd_beacon,
1829    __cmd_keep_alive_tmpl,
1830    __cfg_mem,
1831    __cfg_rx_msdu_life_time,
1832    __cfg_rx,
1833    __cfg_ac_params_0,
1834    __cfg_tid_0,
1835    __cfg_ac_params_1,
1836    __cfg_tid_1,
1837    __cfg_ac_params_2,
1838    __cfg_tid_2,
1839    __cfg_ac_params_3,
1840    __cfg_tid_3,
1841    __cfg_pd_threshold,
1842    __cfg_slot_time,
1843    __cmd_arp_rsp,
1844    __cfg_arp_ip_filter,
1845    __cfg_group_address_table,
1846    __cfg_service_period_timeout,
1847    __cfg_rts_threshold,
1848    __cfg_dco_itrim_params,
1849    __cfg_fragment_threshold,
1850    __cfg_pm_config,
1851    __cfg_beacon_filter_opt,
1852    __cfg_beacon_filter_table,
1853    __cfg_tx_cmplt_pacing,
1854    __cfg_rx_intr_pacing,
1855    __cfg_sg,
1856    __cfg_sg_enable,
1857    __cfg_fm_coex,
1858    __cfg_cca_threshold,
1859    __cfg_bcn_brc_options,
1860    __cmd_enable_rx,
1861    __cmd_enable_tx,
1862    __cfg_ps_wmm,
1863    __cfg_event_scan_cmplt,
1864    __cfg_event_sps_scan_cmplt,
1865    __cfg_event_plt_rx_calibration_cmplt,
1866    __cfg_hw_enc_dec_enable,
1867    __cfg_rssi_snr_weights,
1868    __cfg_rssi_snr_trigger_0,
1869    __cfg_rssi_snr_trigger_1,
1870    __cfg_rssi_snr_trigger_2,
1871    __cfg_rssi_snr_trigger_3,
1872    __cfg_rssi_snr_trigger_4,
1873    __cfg_rssi_snr_trigger_5,
1874    __cfg_rssi_snr_trigger_6,
1875    __cfg_rssi_snr_trigger_7,
1876    __cfg_max_tx_retry,
1877    __cfg_split_scan_timeout,
1878
1879    /* Re-join sequence */
1880    __cfg_tx_rate_policy,
1881    __cmd_beacon_join,
1882    __cmd_probe_resp_join,
1883    __cmd_probe_req_join,
1884    __cmd_null_data_join,
1885    __cmd_disconn_join,
1886    __cmd_ps_poll_join,
1887    __cmd_keep_alive_tmpl_join,
1888    __cfg_slot_time_join,
1889    __cfg_preamble_join,
1890    __cfg_ht_capabilities,
1891    __cfg_ht_information,
1892    __cmd_start_join,
1893    __cfg_aid,
1894    __cfg_ba_set_session,
1895    __cfg_tx_power_join,
1896    __cfg_keys,
1897    __cmd_keep_alive_params,
1898    __cfg_conn_monit_params,
1899    __cfg_bet,
1900    __cfg_cts_protection,
1901    __cfg_ps_rx_streaming,
1902    __cfg_rx_data_filter,
1903    __cmd_sta_state,
1904    __cmd_power_auth,
1905	__cmd_burst_mode_enable,
1906	__cfg_rate_management,
1907    __cmd_arp_rsp_join,
1908    /* Interrogate command -> must be last!! */
1909    __itr_memory_map,
1910
1911    NULL
1912};
1913
1914
1915/****************************************************************************
1916 *                      cmdBld_ConfigSeq()
1917 ****************************************************************************
1918 * DESCRIPTION: Configuration sequence engine
1919 *
1920 * INPUTS: None
1921 *
1922 * OUTPUT: None
1923 *
1924 * RETURNS: TI_OK or TI_NOK
1925 ****************************************************************************/
1926TI_STATUS cmdBld_ConfigSeq (TI_HANDLE hCmdBld)
1927{
1928    TCmdBld   *pCmdBld = (TCmdBld *)hCmdBld;
1929
1930    do
1931    {
1932        if (aCmdIniSeq [pCmdBld->uIniSeq++] == NULL)
1933        {
1934            return TI_NOK;
1935        }
1936    }
1937    while ((*aCmdIniSeq [pCmdBld->uIniSeq - 1])(hCmdBld) != TI_OK);
1938
1939    return TI_OK;
1940}
1941
1942/****************************************************************************
1943 *                      cmdBld_FinalizeDownload()
1944 ****************************************************************************
1945 * DESCRIPTION: Finalize all the remaining initialization after the download has finished
1946 *
1947 * INPUTS:
1948 *
1949 * OUTPUT:  None
1950 *
1951 * RETURNS: void
1952 ****************************************************************************/
1953void cmdBld_FinalizeDownload (TI_HANDLE hCmdBld, TBootAttr *pBootAttr, FwStaticData_t *pFwInfo)
1954{
1955    TCmdBld *pCmdBld = (TCmdBld *)hCmdBld;
1956    TI_UINT8    *pMacAddr = pFwInfo->dot11StationID;
1957    TI_UINT32    i;
1958    TI_UINT8     uTmp;
1959
1960    /* Save FW version */
1961    os_memoryCopy (pCmdBld->hOs,
1962                   (void *)DB_HW(hCmdBld).fwVer,
1963                   (void *)pFwInfo->FWVersion,
1964                   sizeof(DB_HW(hCmdBld).fwVer));
1965
1966    /* Save MAC adress (correct the bytes order first) */
1967    for (i = 0; i < 3; i++)
1968    {
1969        uTmp = pMacAddr[i];
1970        pMacAddr[i] = pMacAddr[5 - i];
1971        pMacAddr[5 - i] = uTmp;
1972    }
1973    MAC_COPY (DB_HW(hCmdBld).macAddress, pMacAddr);
1974
1975    /* Save chip ID */
1976    os_memoryCopy (pCmdBld->hOs,
1977                   (void *)&(DB_HW(hCmdBld).uHardWareVersion),
1978                   (void *)&(pFwInfo->HardWareVersion),
1979                   sizeof(DB_HW(hCmdBld).uHardWareVersion));
1980
1981    /* Save power-levels table */
1982    os_memoryCopy (pCmdBld->hOs,
1983                   (void *)DB_HW(hCmdBld).txPowerTable,
1984                   (void *)pFwInfo->txPowerTable,
1985                   sizeof(DB_HW(hCmdBld).txPowerTable));
1986
1987    /* Call the upper layer callback */
1988    (*((TFinalizeCb)pCmdBld->fFinalizeDownload)) (pCmdBld->hFinalizeDownload);
1989}
1990
1991
1992TI_STATUS cmdBld_GetParam (TI_HANDLE hCmdBld, TTwdParamInfo *pParamInfo)
1993{
1994    TCmdBld       *pCmdBld = (TCmdBld *)hCmdBld;
1995    TWlanParams   *pWlanParams = &DB_WLAN(hCmdBld);
1996
1997    switch (pParamInfo->paramType)
1998    {
1999        case TWD_RTS_THRESHOLD_PARAM_ID:
2000            pParamInfo->content.halCtrlRtsThreshold = pWlanParams->RtsThreshold;
2001            break;
2002
2003        case TWD_FRAG_THRESHOLD_PARAM_ID:
2004            pParamInfo->content.halCtrlFragThreshold = pWlanParams->FragmentThreshold;
2005            break;
2006
2007        case TWD_COUNTERS_PARAM_ID:
2008            /* Constant zero because the ACX last buffer next pointer is always pointed
2009               to itself, so it's like an endless buffer*/
2010            pParamInfo->content.halCtrlCounters.RecvNoBuffer = 0;
2011            pParamInfo->content.halCtrlCounters.FragmentsRecv = 0; /* not supported;*/
2012            pParamInfo->content.halCtrlCounters.FrameDuplicates = 0;/* not supported*/
2013            pParamInfo->content.halCtrlCounters.FcsErrors = DB_CNT(hCmdBld).FcsErrCnt;
2014            pParamInfo->content.halCtrlCounters.RecvError = DB_CNT(hCmdBld).FcsErrCnt;
2015            break;
2016
2017        case TWD_LISTEN_INTERVAL_PARAM_ID:
2018            pParamInfo->content.halCtrlListenInterval = pWlanParams->ListenInterval;
2019            break;
2020
2021        case TWD_RSN_DEFAULT_KEY_ID_PARAM_ID:
2022            /* Not implemented */
2023            return TI_NOK;
2024
2025        case TWD_RSN_SECURITY_MODE_PARAM_ID:
2026             pParamInfo->content.rsnEncryptionStatus = pCmdBld->tSecurity.eSecurityMode;
2027            break;
2028
2029      case TWD_ACX_STATISTICS_PARAM_ID:
2030            /* Not implemented */
2031         #if 0
2032            {
2033                acxStatisitcs_t     acxStatisitics;
2034                pParamInfo->content.acxStatisitics.FWpacketReceived = acxStatisitics.FWpacketReceived;
2035                /* Not supported */
2036                pParamInfo->content.acxStatisitics.HALpacketReceived = 0;
2037            }
2038         #endif
2039            return TI_NOK;
2040
2041    case TWD_MEDIUM_OCCUPANCY_PARAM_ID:
2042        if (cmdBld_ItrIeMediumOccupancy (hCmdBld, pParamInfo->content.interogateCmdCBParams) != TI_OK)
2043            return TI_NOK;
2044            break;
2045
2046    case TWD_TSF_DTIM_MIB_PARAM_ID:
2047        if (cmdBld_ItrIeTfsDtim (hCmdBld, pParamInfo->content.interogateCmdCBParams) != TI_OK)
2048            return TI_NOK;
2049        break;
2050
2051    case TWD_AID_PARAM_ID:
2052        if (cmdBld_GetCurrentAssociationId (hCmdBld, &pParamInfo->content.halCtrlAid) != TI_OK)
2053            return TI_NOK;
2054
2055        TRACE1(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , " AID 2 %d\n", pParamInfo->content.halCtrlAid);
2056        break;
2057
2058    case TWD_NOISE_HISTOGRAM_PARAM_ID:
2059        if (cmdBld_ItrIeNoiseHistogramResults (hCmdBld, pParamInfo->content.interogateCmdCBParams) != TI_OK)
2060        {
2061            return TI_NOK;
2062        }
2063        break;
2064
2065    case TWD_CURRENT_CHANNEL_PARAM_ID:
2066        /* Get current channel number */
2067        pParamInfo->content.halCtrlCurrentChannel = DB_BSS(hCmdBld).RadioChannel;
2068        break;
2069
2070    /* SNR and RSSI belongs to the same MIB, and the relevant CB is passed here*/
2071    case TWD_RSSI_LEVEL_PARAM_ID:
2072    case TWD_SNR_RATIO_PARAM_ID:
2073        /* Retrive the Callback function and read buffer pointer that are in fact stored in the TIWLAN_ADAPTER and then send it to the Command Mailbox */
2074        cmdBld_ItrRSSI (hCmdBld,
2075                        pParamInfo->content.interogateCmdCBParams.fCb,
2076                        pParamInfo->content.interogateCmdCBParams.hCb,
2077                        pParamInfo->content.interogateCmdCBParams.pCb);
2078        break;
2079
2080    case TWD_BCN_BRC_OPTIONS_PARAM_ID:
2081        pParamInfo->content.BcnBrcOptions.BeaconRxTimeout    = pWlanParams->BcnBrcOptions.BeaconRxTimeout;
2082        pParamInfo->content.BcnBrcOptions.BroadcastRxTimeout = pWlanParams->BcnBrcOptions.BroadcastRxTimeout;
2083        pParamInfo->content.BcnBrcOptions.RxBroadcastInPs    = pWlanParams->BcnBrcOptions.RxBroadcastInPs;
2084        break;
2085
2086    case TWD_MAX_RX_MSDU_LIFE_TIME_PARAM_ID:
2087        pParamInfo->content.halCtrlMaxRxMsduLifetime = pWlanParams->MaxRxMsduLifetime;
2088        break;
2089
2090    case TWD_TX_RATE_CLASS_PARAM_ID:
2091        pParamInfo->content.pTxRatePlicy = &DB_BSS(hCmdBld).TxRateClassParams;
2092        break;
2093
2094    case TWD_SG_CONFIG_PARAM_ID:
2095        return cmdBld_ItrSg (hCmdBld,
2096                             pParamInfo->content.interogateCmdCBParams.fCb,
2097                             pParamInfo->content.interogateCmdCBParams.hCb,
2098                             (void*)pParamInfo->content.interogateCmdCBParams.pCb);
2099
2100    case TWD_TX_POWER_PARAM_ID:
2101        pParamInfo->content.halCtrlTxPowerDbm = DB_WLAN(hCmdBld).TxPowerDbm;
2102        break;
2103
2104    case TWD_RADIO_TEST_PARAM_ID:
2105        TRACE0(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , "Radio Test\n");
2106        return cmdBld_CmdTest (hCmdBld,
2107                               pParamInfo->content.interogateCmdCBParams.fCb,
2108                               pParamInfo->content.interogateCmdCBParams.hCb,
2109                               (TTestCmd*)pParamInfo->content.interogateCmdCBParams.pCb);
2110
2111    case TWD_DCO_ITRIM_PARAMS_ID:
2112        pParamInfo->content.tDcoItrimParams.enable = pWlanParams->dcoItrimEnabled;
2113        pParamInfo->content.tDcoItrimParams.moderationTimeoutUsec = pWlanParams->dcoItrimModerationTimeoutUsec;
2114        break;
2115
2116    default:
2117        TRACE1(pCmdBld->hReport, REPORT_SEVERITY_ERROR, "cmdBld_GetParam - ERROR - Param is not supported, %d\n\n", pParamInfo->paramType);
2118        return (PARAM_NOT_SUPPORTED);
2119    }
2120
2121    return TI_OK;
2122}
2123
2124
2125static TI_STATUS cmdBld_ReadMibBeaconFilterIETable (TI_HANDLE hCmdBld, TI_HANDLE hCb, void* fCb, void* pCb)
2126{
2127    TCmdBld *pCmdBld                = (TCmdBld *)hCmdBld;
2128    TMib *pMib                      = (TMib*)pCb;
2129    TCmdQueueInterrogateCb RetFunc  = (TCmdQueueInterrogateCb)fCb;
2130    TI_UINT8 IETableSize            = 0;
2131
2132    /*Get params*/
2133    pMib->aData.BeaconFilter.iNumberOfIEs = DB_WLAN(hCmdBld).beaconFilterIETable.numberOfIEs;
2134    IETableSize = DB_WLAN(hCmdBld).beaconFilterIETable.IETableSize;
2135
2136    os_memoryZero (pCmdBld->hOs,
2137                   pMib->aData.BeaconFilter.iIETable,
2138                   sizeof(pMib->aData.BeaconFilter.iIETable));
2139
2140    os_memoryCopy (pCmdBld->hOs,
2141                   pMib->aData.BeaconFilter.iIETable,
2142                   DB_WLAN(hCmdBld).beaconFilterIETable.IETable,
2143                   IETableSize);
2144
2145    pMib->Length = IETableSize + 1;
2146
2147    RetFunc(hCb, TI_OK, pCb);
2148
2149    return TI_OK;
2150}
2151
2152/**
2153 * \author \n
2154 * \date \n
2155 * \brief Coordinates between legacy TxRatePolicy implementation and the MIB format: \n
2156 *        Converts the pGwsi_txRatePolicy back to whal commands
2157 *        Activates the whal whalCtrl_set function
2158 * Function Scope \e Public.\n
2159 * \param  - \n
2160 * \return \n
2161 */
2162static TI_STATUS cmdBld_ReadMibTxRatePolicy (TI_HANDLE hCmdBld, TI_HANDLE hCb, void* fCb, void* pCb)
2163{
2164    TMib* pMib = (TMib*)pCb;
2165    TCmdQueueInterrogateCb RetFunc = (TCmdQueueInterrogateCb)fCb;
2166    TTwdParamInfo param;
2167    TI_STATUS status = TI_OK;
2168
2169    param.paramType = TWD_TX_RATE_CLASS_PARAM_ID;
2170    cmdBld_GetParam (hCmdBld, &param);
2171    if (param.content.pTxRatePlicy == NULL)
2172        return TI_NOK;
2173
2174    /*Copy the data form the param to the MIB*/
2175    pMib->aData.txRatePolicy = *param.content.pTxRatePlicy;
2176    pMib->Length = pMib->aData.txRatePolicy.numOfRateClasses * sizeof(pMib->aData.txRatePolicy.rateClass[0]) +
2177                   sizeof(pMib->aData.txRatePolicy.numOfRateClasses);
2178    RetFunc (hCb, status, pCb);
2179    return status;
2180}
2181
2182
2183TI_STATUS cmdBld_ReadMib (TI_HANDLE hCmdBld, TI_HANDLE hCb, void* fCb, void* pCb)
2184{
2185    TCmdBld     *pCmdBld = (TCmdBld *)hCmdBld;
2186    TMib    *pMibBuf = (TMib*)pCb;
2187    TCmdQueueInterrogateCb RetFunc = (TCmdQueueInterrogateCb)fCb;
2188    TI_STATUS Status = TI_OK;
2189
2190    TRACE1(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "cmdBld_ReadMib :pMibBuf %p:\n",pMibBuf);
2191
2192    TRACE1(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "cmdBld_ReadMib :aMib %x:\n", pMibBuf->aMib);
2193
2194    switch (pMibBuf->aMib)
2195    {
2196    case MIB_dot11MaxReceiveLifetime:
2197        {
2198            TTwdParamInfo ParamInfo;
2199            ParamInfo.paramType = TWD_MAX_RX_MSDU_LIFE_TIME_PARAM_ID;
2200            ParamInfo.paramLength = sizeof(ParamInfo.content.halCtrlMaxRxMsduLifetime);
2201            Status = cmdBld_GetParam (hCmdBld, &ParamInfo);
2202            pMibBuf->aData.MaxReceiveLifeTime = ParamInfo.content.halCtrlMaxRxMsduLifetime / 1024; /* converting from usecs to TUs*/
2203            pMibBuf->Length = sizeof(pMibBuf->aData.MaxReceiveLifeTime);
2204        }
2205        break;
2206
2207    case MIB_dot11GroupAddressesTable:
2208        {
2209            Status = cmdBld_GetGroupAddressTable (hCmdBld,
2210                                                  &pMibBuf->aData.GroupAddressTable.bFilteringEnable,
2211                                                  &pMibBuf->aData.GroupAddressTable.nNumberOfAddresses,
2212                                                  pMibBuf->aData.GroupAddressTable.aGroupTable);
2213
2214            pMibBuf->Length = sizeof(pMibBuf->aData.GroupAddressTable.bFilteringEnable) +
2215                              sizeof(pMibBuf->aData.GroupAddressTable.nNumberOfAddresses) +
2216                              pMibBuf->aData.GroupAddressTable.nNumberOfAddresses * sizeof(TMacAddr);
2217        }
2218        break;
2219
2220    case MIB_ctsToSelf:
2221        {
2222            TTwdParamInfo ParamInfo;
2223            ParamInfo.paramType = TWD_CTS_TO_SELF_PARAM_ID;
2224            ParamInfo.paramLength = sizeof(ParamInfo.content.halCtrlCtsToSelf);
2225            Status = cmdBld_GetParam (hCmdBld, &ParamInfo);
2226            pMibBuf->aData.CTSToSelfEnable = ParamInfo.content.halCtrlCtsToSelf;
2227            pMibBuf->Length = sizeof(pMibBuf->aData.CTSToSelfEnable);
2228        }
2229        break;
2230
2231    case MIB_arpIpAddressesTable:
2232        {
2233            TIpAddr   IpAddress;
2234            EIpVer    IPver;
2235            TI_UINT8  Enable;
2236
2237            pMibBuf->Length = sizeof(TMibArpIpAddressesTable);
2238            Status = cmdBld_GetArpIpAddressesTable (hCmdBld, &IpAddress, &Enable, &IPver);
2239            if (Status == TI_OK)
2240            {
2241                pMibBuf->aData.ArpIpAddressesTable.FilteringEnable = Enable;
2242
2243                if (IP_VER_4 == IPver) /* IP_VER_4 only */
2244                {
2245                    IP_COPY (pMibBuf->aData.ArpIpAddressesTable.addr, IpAddress);
2246                }
2247                else
2248                {
2249                    Status = TI_NOK;
2250                }
2251            }
2252            return Status;
2253        }
2254
2255    case MIB_rxFilter:
2256        {
2257            TI_UINT32 RxConfigOption;
2258            TI_UINT32 RxFilterOption;
2259
2260            pMibBuf->Length = 1;
2261            pMibBuf->aData.RxFilter = 0;
2262
2263            /* Get RX filter data */
2264            Status = cmdBld_GetRxFilters (hCmdBld, &RxConfigOption, &RxFilterOption);
2265            if (TI_OK == Status)
2266            {
2267                /*Translate to MIB bitmap*/
2268                if ((RxConfigOption & RX_CFG_MAC) == RX_CFG_ENABLE_ANY_DEST_MAC)
2269                    pMibBuf->aData.RxFilter |= MIB_RX_FILTER_PROMISCOUS_SET;
2270
2271                if ((RxConfigOption & RX_CFG_BSSID) == RX_CFG_ENABLE_ONLY_MY_BSSID)
2272                    pMibBuf->aData.RxFilter |= MIB_RX_FILTER_BSSID_SET;
2273            }
2274        }
2275        break;
2276
2277    case MIB_beaconFilterIETable:
2278        return cmdBld_ReadMibBeaconFilterIETable (hCmdBld, hCb, fCb, pCb);
2279
2280    case MIB_txRatePolicy:
2281        return cmdBld_ReadMibTxRatePolicy (hCmdBld, hCb, fCb, pCb);
2282
2283    case MIB_countersTable:
2284        return cmdBld_ItrErrorCnt (hCmdBld, fCb, hCb, pCb);
2285
2286    case MIB_statisticsTable:
2287        return cmdBld_ItrRoamimgStatisitics (hCmdBld, fCb, hCb, pCb);
2288
2289    default:
2290        TRACE1(pCmdBld->hReport, REPORT_SEVERITY_ERROR, "TWD_ReadMib:MIB aMib 0x%x Not supported\n",pMibBuf->aMib);
2291        return TI_NOK;
2292    }
2293
2294    if(RetFunc)
2295        RetFunc(hCb, Status, pCb);
2296
2297    return TI_OK;
2298}
2299
2300
2301TI_STATUS cmdBld_GetGroupAddressTable (TI_HANDLE hCmdBld, TI_UINT8* pEnabled, TI_UINT8* pNumGroupAddrs, TMacAddr *pGroupAddr)
2302{
2303    TCmdBld   *pCmdBld = (TCmdBld *)hCmdBld;
2304    TI_UINT32     i;
2305
2306    if (NULL == pEnabled || NULL == pNumGroupAddrs || NULL == pGroupAddr)
2307    {
2308        TRACE3(pCmdBld->hReport, REPORT_SEVERITY_ERROR, "cmdBld_GetGroupAddressTable: pisEnabled=0x%p pnumGroupAddrs=0x%p  Group_addr=0x%p !!!\n", pEnabled, pNumGroupAddrs, pGroupAddr);
2309        return PARAM_VALUE_NOT_VALID;
2310    }
2311
2312    *pNumGroupAddrs = DB_WLAN(hCmdBld).numGroupAddrs;
2313    *pEnabled = DB_WLAN(hCmdBld).isMacAddrFilteringnabled;
2314
2315    os_memoryZero (pCmdBld->hOs, pGroupAddr, sizeof(pGroupAddr));
2316    for (i = 0; i < *pNumGroupAddrs; i++)
2317    {
2318        os_memoryCopy (pCmdBld->hOs,
2319                       (void *)&((*pGroupAddr)[MAC_ADDR_LEN*i]),
2320                       &DB_WLAN(hCmdBld).aGroupAddr[i],
2321                       MAC_ADDR_LEN);
2322    }
2323
2324    return TI_OK;
2325}
2326
2327
2328TI_STATUS cmdBld_GetRxFilters (TI_HANDLE hCmdBld, TI_UINT32* pRxConfigOption, TI_UINT32* pRxFilterOption)
2329{
2330    *pRxConfigOption = DB_WLAN(hCmdBld).RxConfigOption;
2331    *pRxFilterOption = DB_WLAN(hCmdBld).RxFilterOption;
2332
2333    return TI_OK;
2334}
2335
2336
2337TFwInfo * cmdBld_GetFWInfo (TI_HANDLE hCmdBld)
2338{
2339    return &DB_HW(hCmdBld);
2340}
2341
2342
2343
2344TI_STATUS cmdBld_SetRadioBand (TI_HANDLE hCmdBld, ERadioBand eRadioBand)
2345{
2346    DB_WLAN(hCmdBld).RadioBand = eRadioBand;
2347
2348    return TI_OK;
2349}
2350
2351
2352/****************************************************************************
2353 *                      cmdBld_CurrentAssociationIdGet()
2354 ****************************************************************************
2355 * DESCRIPTION: Get the current TX antenna
2356 *
2357 * INPUTS:
2358 *
2359 * OUTPUT:
2360 *
2361 * RETURNS: TI_OK or TI_NOK
2362 ****************************************************************************/
2363TI_STATUS cmdBld_GetCurrentAssociationId (TI_HANDLE hCmdBld, TI_UINT16 *pAidVal)
2364{
2365    *pAidVal = DB_WLAN(hCmdBld).Aid;
2366
2367    return TI_OK;
2368}
2369
2370
2371 /****************************************************************************
2372 *                      cmdBld_GetArpIpAddressesTable()
2373 ****************************************************************************
2374 * DESCRIPTION: Sets the Group table according to the given configuration.
2375 *
2376 * OUTPUT:  None
2377 *
2378 * RETURNS: TI_OK or TI_NOK
2379 ****************************************************************************/
2380TI_STATUS cmdBld_GetArpIpAddressesTable (TI_HANDLE hCmdBld, TIpAddr *pIp, TI_UINT8* pbEnabled, EIpVer *pIpVer)
2381{
2382    *pIpVer = (EIpVer)DB_WLAN(hCmdBld).arp_IP_ver;
2383
2384    IP_COPY (*pIp, DB_WLAN(hCmdBld).arp_IP_addr);
2385
2386    *pbEnabled = (TI_UINT8)DB_WLAN(hCmdBld).arpFilterType;
2387
2388    return TI_OK;
2389}
2390
2391
2392TI_STATUS cmdBld_ConvertAppRatesBitmap (TI_UINT32 uAppRatesBitmap, TI_UINT32 uAppModulation, EHwRateBitFiled *pHwRatesBitmap)
2393{
2394    EHwRateBitFiled uRatesBitmap = 0;
2395
2396    if (uAppRatesBitmap & DRV_RATE_MASK_1_BARKER)    uRatesBitmap |= HW_BIT_RATE_1MBPS;
2397    if (uAppRatesBitmap & DRV_RATE_MASK_2_BARKER)    uRatesBitmap |= HW_BIT_RATE_2MBPS;
2398    if (uAppRatesBitmap & DRV_RATE_MASK_5_5_CCK)     uRatesBitmap |= HW_BIT_RATE_5_5MBPS;
2399    if (uAppRatesBitmap & DRV_RATE_MASK_11_CCK)      uRatesBitmap |= HW_BIT_RATE_11MBPS;
2400    if (uAppRatesBitmap & DRV_RATE_MASK_22_PBCC)     uRatesBitmap |= HW_BIT_RATE_22MBPS;
2401    if (uAppRatesBitmap & DRV_RATE_MASK_6_OFDM)      uRatesBitmap |= HW_BIT_RATE_6MBPS;
2402    if (uAppRatesBitmap & DRV_RATE_MASK_9_OFDM)      uRatesBitmap |= HW_BIT_RATE_9MBPS;
2403    if (uAppRatesBitmap & DRV_RATE_MASK_12_OFDM)     uRatesBitmap |= HW_BIT_RATE_12MBPS;
2404    if (uAppRatesBitmap & DRV_RATE_MASK_18_OFDM)     uRatesBitmap |= HW_BIT_RATE_18MBPS;
2405    if (uAppRatesBitmap & DRV_RATE_MASK_24_OFDM)     uRatesBitmap |= HW_BIT_RATE_24MBPS;
2406    if (uAppRatesBitmap & DRV_RATE_MASK_36_OFDM)     uRatesBitmap |= HW_BIT_RATE_36MBPS;
2407    if (uAppRatesBitmap & DRV_RATE_MASK_48_OFDM)     uRatesBitmap |= HW_BIT_RATE_48MBPS;
2408    if (uAppRatesBitmap & DRV_RATE_MASK_54_OFDM)     uRatesBitmap |= HW_BIT_RATE_54MBPS;
2409    if (uAppRatesBitmap & DRV_RATE_MASK_MCS_0_OFDM)  uRatesBitmap |= HW_BIT_RATE_MCS_0;
2410    if (uAppRatesBitmap & DRV_RATE_MASK_MCS_1_OFDM)  uRatesBitmap |= HW_BIT_RATE_MCS_1;
2411    if (uAppRatesBitmap & DRV_RATE_MASK_MCS_2_OFDM)  uRatesBitmap |= HW_BIT_RATE_MCS_2;
2412    if (uAppRatesBitmap & DRV_RATE_MASK_MCS_3_OFDM)  uRatesBitmap |= HW_BIT_RATE_MCS_3;
2413    if (uAppRatesBitmap & DRV_RATE_MASK_MCS_4_OFDM)  uRatesBitmap |= HW_BIT_RATE_MCS_4;
2414    if (uAppRatesBitmap & DRV_RATE_MASK_MCS_5_OFDM)  uRatesBitmap |= HW_BIT_RATE_MCS_5;
2415    if (uAppRatesBitmap & DRV_RATE_MASK_MCS_6_OFDM)  uRatesBitmap |= HW_BIT_RATE_MCS_6;
2416    if (uAppRatesBitmap & DRV_RATE_MASK_MCS_7_OFDM)  uRatesBitmap |= HW_BIT_RATE_MCS_7;
2417
2418    *pHwRatesBitmap = uRatesBitmap;
2419
2420    return TI_OK;
2421}
2422
2423EHwRateBitFiled rateNumberToBitmap(TI_UINT8 uRate)
2424{
2425	switch(uRate)
2426	{
2427	case 1:   return HW_BIT_RATE_1MBPS;
2428	case 2:   return HW_BIT_RATE_2MBPS;
2429	case 5:   return HW_BIT_RATE_5_5MBPS;
2430	case 6:   return HW_BIT_RATE_6MBPS;
2431	case 9:   return HW_BIT_RATE_9MBPS;
2432	case 11:  return HW_BIT_RATE_11MBPS;
2433	case 12:  return HW_BIT_RATE_12MBPS;
2434	case 18:  return HW_BIT_RATE_18MBPS;
2435	case 22:  return HW_BIT_RATE_22MBPS;
2436	case 24:  return HW_BIT_RATE_24MBPS;
2437	case 36:  return HW_BIT_RATE_36MBPS;
2438	case 48:  return HW_BIT_RATE_48MBPS;
2439	case 54:  return HW_BIT_RATE_54MBPS;
2440	default:
2441		return 0;
2442	}
2443}
2444
2445TI_STATUS cmdBld_ConvertAppRate (ERate AppRate, TI_UINT8 *pHwRate)
2446{
2447    TI_UINT8     Rate = 0;
2448    TI_STATUS status = TI_OK;
2449
2450    switch (AppRate)
2451    {
2452        /*
2453         *  The handle for 5.5/11/22 PBCC was removed !!!
2454         */
2455
2456        case DRV_RATE_1M:           Rate = txPolicy1;          break;
2457        case DRV_RATE_2M:           Rate = txPolicy2;          break;
2458        case DRV_RATE_5_5M:         Rate = txPolicy5_5;        break;
2459        case DRV_RATE_11M:          Rate = txPolicy11;         break;
2460        case DRV_RATE_22M:          Rate = txPolicy22;         break;
2461        case DRV_RATE_6M:           Rate = txPolicy6;          break;
2462        case DRV_RATE_9M:           Rate = txPolicy9;          break;
2463        case DRV_RATE_12M:          Rate = txPolicy12;         break;
2464        case DRV_RATE_18M:          Rate = txPolicy18;         break;
2465        case DRV_RATE_24M:          Rate = txPolicy24;         break;
2466        case DRV_RATE_36M:          Rate = txPolicy36;         break;
2467        case DRV_RATE_48M:          Rate = txPolicy48;         break;
2468        case DRV_RATE_54M:          Rate = txPolicy54;         break;
2469        case DRV_RATE_MCS_0:          Rate = txPolicyMcs0;         break;
2470        case DRV_RATE_MCS_1:          Rate = txPolicyMcs1;         break;
2471        case DRV_RATE_MCS_2:          Rate = txPolicyMcs2;         break;
2472        case DRV_RATE_MCS_3:          Rate = txPolicyMcs3;         break;
2473        case DRV_RATE_MCS_4:          Rate = txPolicyMcs4;         break;
2474        case DRV_RATE_MCS_5:          Rate = txPolicyMcs5;         break;
2475        case DRV_RATE_MCS_6:          Rate = txPolicyMcs6;         break;
2476        case DRV_RATE_MCS_7:          Rate = txPolicyMcs7;         break;
2477
2478        default:
2479            WLAN_OS_REPORT(("%s wrong app rate = %d\n",__FUNCTION__,AppRate));
2480            status = TI_NOK;
2481            break;
2482    }
2483
2484    if (status == TI_OK)
2485        *pHwRate = Rate;
2486    else
2487        *pHwRate = txPolicy1;
2488
2489    return status;
2490}
2491
2492
2493TI_STATUS cmdBld_SetRxFilter (TI_HANDLE hCmdBld, TI_UINT32 uRxConfigOption, TI_UINT32 uRxFilterOption)
2494{
2495    DB_WLAN(hCmdBld).RxConfigOption = uRxConfigOption;
2496    DB_WLAN(hCmdBld).RxFilterOption = uRxFilterOption;
2497    DB_WLAN(hCmdBld).RxConfigOption |= RX_CFG_ENABLE_PHY_HEADER_PLCP;
2498
2499    if (DB_WLAN(hCmdBld).RxDisableBroadcast)
2500    {
2501        DB_WLAN(hCmdBld).RxConfigOption |= RX_CFG_DISABLE_BCAST;
2502    }
2503
2504    return TI_OK;
2505}
2506
2507
2508TI_UINT8 cmdBld_GetBssType (TI_HANDLE hCmdBld)
2509{
2510    return DB_BSS(hCmdBld).ReqBssType;
2511}
2512
2513
2514TI_UINT32 cmdBld_GetAckPolicy (TI_HANDLE hCmdBld, TI_UINT32 uQueueId)
2515{
2516    return (TI_UINT32)DB_QUEUES(hCmdBld).queues[uQueueId].ackPolicy;
2517}
2518
2519
2520TI_STATUS cmdBld_SetSecuritySeqNum (TI_HANDLE hCmdBld, TI_UINT8 securitySeqNumLsByte)
2521{
2522    TCmdBld *pCmdBld = (TCmdBld *)hCmdBld;
2523
2524    /* If 8 lsb wrap around occurred (new < old). */
2525    if ((TI_UINT16)securitySeqNumLsByte < (pCmdBld->uSecuritySeqNumLow & 0xFF))
2526    {
2527        /* Increment the upper byte of the 16 lsb. */
2528        pCmdBld->uSecuritySeqNumLow += 0x100;
2529
2530        /* If 16 bit wrap around occurred, increment the upper 32 bit. */
2531        if (!(pCmdBld->uSecuritySeqNumLow & 0xFF00))
2532            pCmdBld->uSecuritySeqNumHigh++;
2533    }
2534
2535    /* Save new sequence number 8 lsb (received from the FW). */
2536    pCmdBld->uSecuritySeqNumLow &= 0xFF00;
2537    pCmdBld->uSecuritySeqNumLow |= (TI_UINT16)securitySeqNumLsByte;
2538
2539    return TI_OK;
2540}
2541
2542/****************************************************************************
2543 *                      cmdBld_JoinCmpltForReconfigCb()
2544 ****************************************************************************
2545 * DESCRIPTION:   The Join-Complete callback used by the reconfig sequenc (see __cmd_start_join()).
2546 *                It restores the original Join-Complete CB and continues the sequence.
2547 *                It is needed so the reconfig sequence won't progress before the Join
2548 *                    command is completed (otherwise the FW may drop the other commands).
2549 *
2550 * INPUTS: hCmdBld - The module object
2551 *
2552 * OUTPUT:  None
2553 *
2554 * RETURNS: TI_OK
2555 ****************************************************************************/
2556static TI_STATUS cmdBld_JoinCmpltForReconfigCb (TI_HANDLE hCmdBld)
2557{
2558    TCmdBld    *pCmdBld = (TCmdBld *)hCmdBld;
2559    void       *fDummyCb;
2560    TI_HANDLE   hDummyHndl;
2561
2562    /* Restored the original Join-Complete callback function */
2563    eventMbox_ReplaceEvent (pCmdBld->hEventMbox,
2564                              TWD_OWN_EVENT_JOIN_CMPLT,
2565                              pCmdBld->fJoinCmpltOriginalCbFunc,
2566                              pCmdBld->hJoinCmpltOriginalCbHndl,
2567                              &fDummyCb,
2568                              &hDummyHndl);
2569
2570    /* Call the reconfig sequence to continue the configuration after Join completion */
2571    cmdBld_ConfigSeq (hCmdBld);
2572
2573    return TI_OK;
2574}
2575
2576
2577
2578static TI_STATUS cmdBld_DummyCb (TI_HANDLE hCmdBld)
2579{
2580    return TI_OK;
2581}
2582
2583
2584
2585
2586
2587#ifdef TI_DBG
2588
2589void cmdBld_DbgForceTemplatesRates (TI_HANDLE hCmdBld, TI_UINT32 uRateMask)
2590{
2591    TCmdBld *pCmdBld = (TCmdBld *)hCmdBld;
2592
2593    pCmdBld->uDbgTemplatesRateMask = uRateMask;
2594}
2595
2596#endif /* TI_DBG */
2597
2598