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