Home | History | Annotate | Download | only in Ctrl
      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*/
     80 typedef 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 
     88 typedef int (*TConfigFwCb) (TI_HANDLE, TI_STATUS);
     89 
     90 
     91 static TI_STATUS cmdBld_ConfigSeq               (TI_HANDLE hCmdBld);
     92 static TI_STATUS cmdBld_GetCurrentAssociationId (TI_HANDLE hCmdBld, TI_UINT16 *pAidVal);
     93 static TI_STATUS cmdBld_GetArpIpAddressesTable  (TI_HANDLE hCmdBld, TIpAddr *pIpAddr, TI_UINT8 *pEnabled , EIpVer *pIpVer);
     94 static TI_STATUS cmdBld_JoinCmpltForReconfigCb  (TI_HANDLE hCmdBld);
     95 static TI_STATUS cmdBld_DummyCb                 (TI_HANDLE hCmdBld);
     96 
     97 
     98 
     99 
    100 TI_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 
    193 TI_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 
    221 TI_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 
    237 TI_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 
    269 static 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  ****************************************************************************/
    319 TI_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 
    334 typedef TI_STATUS (*TCmdCfgFunc) (TI_HANDLE);
    335 
    336 
    337 static 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 
    365 static 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 
    376 static 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 
    385 static 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 
    396 static 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 
    408 static 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 
    420 static 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 
    432 static 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 
    443 static 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 
    480 static 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 
    487 static 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 
    497 static 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 
    507 static 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 
    525 static 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 
    543 static 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 
    561 static 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 
    579 static 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 
    596 static 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 
    613 static 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 
    630 static 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 
    647 static 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 
    691 static 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 
    761 static 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 
    770 static 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 
    776 static 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 
    785 static 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 
    796 static 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 
    805 static 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 
    813 static 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 
    822 static 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 
    831 static 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 
    841 static 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 
    852 static 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 
    863 static 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 
    873 static 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
    884 static 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 
    922 static 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 
    931 static 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 
    946 static 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 
    953 static 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 
    963 static 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 
    973 static 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 
    983 static 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 
    994 static 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 
   1004 static 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 
   1015 static 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 
   1021 static 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 
   1031 static 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 
   1041 static 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 
   1051 static 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 
   1061 static 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 
   1071 static 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 
   1081 static 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 
   1091 static 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 
   1101 static 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 
   1111 static 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 
   1120 static 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 
   1129 static 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 
   1139 static 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 
   1148 static 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 
   1157 static 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 
   1166 static 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 
   1176 static 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 
   1194 static 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 
   1210 static 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 
   1227 static 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 
   1263 static 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 
   1279 static 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 
   1295 static 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 
   1311 static 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 
   1324 static 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 
   1344 static 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 
   1391 static 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 
   1443 static 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 
   1451 static 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 
   1480 static 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 
   1493 static 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 
   1504 static 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 
   1516 static 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 
   1528 static 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 
   1546 static 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 
   1565 static 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 
   1686 static 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 
   1698 static 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 
   1757 static 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 
   1767 static 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 
   1781 static 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 
   1791 static 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 
   1803 TI_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 
   1817 static 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  ****************************************************************************/
   1926 TI_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  ****************************************************************************/
   1953 void 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 
   1992 TI_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 
   2125 static 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  */
   2162 static 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 
   2183 TI_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 
   2301 TI_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 
   2328 TI_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 
   2337 TFwInfo * cmdBld_GetFWInfo (TI_HANDLE hCmdBld)
   2338 {
   2339     return &DB_HW(hCmdBld);
   2340 }
   2341 
   2342 
   2343 
   2344 TI_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  ****************************************************************************/
   2363 TI_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  ****************************************************************************/
   2380 TI_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 
   2392 TI_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 
   2423 EHwRateBitFiled 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 
   2445 TI_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 
   2493 TI_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 
   2508 TI_UINT8 cmdBld_GetBssType (TI_HANDLE hCmdBld)
   2509 {
   2510     return DB_BSS(hCmdBld).ReqBssType;
   2511 }
   2512 
   2513 
   2514 TI_UINT32 cmdBld_GetAckPolicy (TI_HANDLE hCmdBld, TI_UINT32 uQueueId)
   2515 {
   2516     return (TI_UINT32)DB_QUEUES(hCmdBld).queues[uQueueId].ackPolicy;
   2517 }
   2518 
   2519 
   2520 TI_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  ****************************************************************************/
   2556 static 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 
   2578 static TI_STATUS cmdBld_DummyCb (TI_HANDLE hCmdBld)
   2579 {
   2580     return TI_OK;
   2581 }
   2582 
   2583 
   2584 
   2585 
   2586 
   2587 #ifdef TI_DBG
   2588 
   2589 void 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