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, ¶m);
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