1 /* 2 * CmdBldCfgIE.c 3 * 4 * Copyright(c) 1998 - 2010 Texas Instruments. All rights reserved. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * * Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * * Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in 15 * the documentation and/or other materials provided with the 16 * distribution. 17 * * Neither the name Texas Instruments nor the names of its 18 * contributors may be used to endorse or promote products derived 19 * from this software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34 35 /** \file CmdBldCfgIE.c 36 * \brief Command builder. Configuration commands information elements 37 * 38 * \see CmdBld.h 39 */ 40 #define __FILE_ID__ FILE_ID_92 41 #include "osApi.h" 42 #include "report.h" 43 #include "CmdBld.h" 44 #include "CmdQueue_api.h" 45 #include "rate.h" 46 #include "TwIf.h" 47 48 /**************************************************************************** 49 * cmdBld_CfgIeConfigMemory() 50 **************************************************************************** 51 * DESCRIPTION: Configure wlan hardware memory 52 * 53 * INPUTS: 54 * 55 * OUTPUT: None 56 * 57 * RETURNS: TI_OK or TI_NOK 58 ****************************************************************************/ 59 TI_STATUS cmdBld_CfgIeConfigMemory (TI_HANDLE hCmdBld, TDmaParams *pDmaParams, void *fCb, TI_HANDLE hCb) 60 { 61 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 62 ACXConfigMemory_t AcxElm_ConfigMemory; 63 ACXConfigMemory_t *pCfg = &AcxElm_ConfigMemory; 64 65 os_memoryZero(pCmdBld->hOs, (void *)pCfg, sizeof(*pCfg)); 66 67 /* 68 * Set information element header 69 */ 70 pCfg->EleHdr.id = ACX_MEM_CFG; 71 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 72 73 /* 74 * Set configuration fields 75 */ 76 pCfg->numStations = pDmaParams->NumStations; 77 pCfg->rxMemblockNumber = pDmaParams->NumRxBlocks; 78 pCfg->txMinimumMemblockNumber = TWD_TX_MIN_MEM_BLKS_NUM; 79 pCfg->numSsidProfiles = 1; 80 pCfg->totalTxDescriptors = ENDIAN_HANDLE_LONG(NUM_TX_DESCRIPTORS); 81 82 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 83 } 84 85 86 /* WoneIndex value when running as station */ 87 #define STATION_WONE_INDEX 0 88 89 90 /**************************************************************************** 91 * cmdBld_CfgIeSlotTime() 92 **************************************************************************** 93 * DESCRIPTION: Configure/Interrogate the Slot Time 94 * 95 * INPUTS: None 96 * 97 * OUTPUT: None 98 * 99 * RETURNS: TI_OK or TI_NOK 100 ****************************************************************************/ 101 TI_STATUS cmdBld_CfgIeSlotTime (TI_HANDLE hCmdBld, TI_UINT8 apSlotTime, void *fCb, TI_HANDLE hCb) 102 { 103 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 104 ACXSlot_t AcxElm_SlotTime; 105 ACXSlot_t *pCfg = &AcxElm_SlotTime; 106 107 /* Set information element header */ 108 pCfg->EleHdr.id = ACX_SLOT; 109 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 110 111 /* Set configuration fields */ 112 /* woneIndex is not relevant to station implementation */ 113 pCfg->woneIndex = STATION_WONE_INDEX; 114 pCfg->slotTime = apSlotTime; 115 116 TRACE1(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, ": Sending info elem to firmware, Slot Time = %d\n", (TI_UINT8)pCfg->slotTime); 117 118 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 119 } 120 121 122 /**************************************************************************** 123 * cmdBld_CfgIePreamble() 124 **************************************************************************** 125 * DESCRIPTION: Configure/Interrogate the Preamble 126 * 127 * INPUTS: None 128 * 129 * OUTPUT: None 130 * 131 * RETURNS: TI_OK or TI_NOK 132 ****************************************************************************/ 133 TI_STATUS cmdBld_CfgIePreamble (TI_HANDLE hCmdBld, TI_UINT8 preamble, void *fCb, TI_HANDLE hCb) 134 { 135 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 136 ACXPreamble_t AcxElm_Preamble; 137 ACXPreamble_t *pCfg = &AcxElm_Preamble; 138 139 /* Set information element header */ 140 pCfg->EleHdr.id = ACX_PREAMBLE_TYPE; 141 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 142 143 /* Set configuration fields */ 144 /* woneIndex is not relevant to station implementation */ 145 pCfg->preamble = preamble; 146 147 TRACE2(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "ID=%u: preamble=%u\n", pCfg->EleHdr.id, preamble); 148 149 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 150 } 151 152 153 /**************************************************************************** 154 * cmdBld_CfgIeRx() 155 **************************************************************************** 156 * DESCRIPTION: Configure/Interrogate RxConfig information element 157 * 158 * INPUTS: None 159 * 160 * OUTPUT: None 161 * 162 * RETURNS: TI_OK or TI_NOK 163 ****************************************************************************/ 164 TI_STATUS cmdBld_CfgIeRx (TI_HANDLE hCmdBld, TI_UINT32 apRxConfigOption, TI_UINT32 apRxFilterOption, void *fCb, TI_HANDLE hCb) 165 { 166 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 167 ACXRxConfig_t AcxElm_RxConfig; 168 ACXRxConfig_t *pCfg = &AcxElm_RxConfig; 169 170 /* Set information element header */ 171 pCfg->EleHdr.id = ACX_RX_CFG; 172 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 173 174 /* Set configuration fields */ 175 pCfg->ConfigOptions = ENDIAN_HANDLE_LONG(apRxConfigOption); 176 pCfg->FilterOptions = ENDIAN_HANDLE_LONG(apRxFilterOption); 177 178 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 179 } 180 181 /**************************************************************************** 182 * cmdBld_CfgIeEnableRxDataFilter() 183 ***************************************************************************** 184 * DESCRIPTION: Enables or disables Rx data filtering. 185 * 186 * INPUTS: enabled - 0 to disable data filtering, any other value to enable 187 * defaultAction - The default action to take on non-matching packets. 188 * 189 * OUTPUT: None 190 * 191 * RETURNS: TI_OK or TI_NOK 192 ****************************************************************************/ 193 TI_STATUS cmdBld_CfgIeEnableRxDataFilter (TI_HANDLE hCmdBld, TI_BOOL enabled, filter_e defaultAction, void *fCb, TI_HANDLE hCb) 194 { 195 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 196 DataFilterDefault_t dataFilterDefault; 197 DataFilterDefault_t * pCfg = &dataFilterDefault; 198 199 /* Set information element header */ 200 pCfg->EleHdr.id = ACX_ENABLE_RX_DATA_FILTER; 201 pCfg->EleHdr.len = 0; 202 203 TRACE0(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, ": Rx Data Filter configuration:\n"); 204 TRACE2(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, ": enabled = %d, defaultAction = %d\n", enabled, defaultAction); 205 206 /* Set information element configuration fields */ 207 pCfg->enable = enabled; 208 pCfg->action = defaultAction; 209 pCfg->EleHdr.len += sizeof(pCfg->enable) + sizeof(pCfg->action); 210 211 TRACE_INFO_HEX(pCmdBld->hReport, (TI_UINT8 *) pCfg, sizeof(dataFilterDefault)); 212 213 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 214 } 215 216 /**************************************************************************** 217 * cmdBld_CfgIeRxDataFilter() 218 ***************************************************************************** 219 * DESCRIPTION: Add/remove Rx Data filter information element. 220 * 221 * INPUTS: index - Index of the Rx Data filter 222 * command - Add or remove the filter 223 * action - Action to take on packets matching the pattern 224 * numFieldPatterns - Number of field patterns in the filter 225 * lenFieldPatterns - Length of the field pattern series 226 * fieldPatterns - Series of field patterns 227 * 228 * OUTPUT: None 229 * 230 * RETURNS: TI_OK or TI_NOK 231 ****************************************************************************/ 232 TI_STATUS cmdBld_CfgIeRxDataFilter (TI_HANDLE hCmdBld, 233 TI_UINT8 index, 234 TI_UINT8 command, 235 filter_e action, 236 TI_UINT8 numFieldPatterns, 237 TI_UINT8 lenFieldPatterns, 238 TI_UINT8 *pFieldPatterns, 239 void *fCb, 240 TI_HANDLE hCb) 241 { 242 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 243 TI_UINT8 dataFilterConfig[sizeof(DataFilterConfig_t) + MAX_DATA_FILTER_SIZE]; 244 DataFilterConfig_t * pCfg = (DataFilterConfig_t *) &dataFilterConfig; 245 246 /* Set information element header */ 247 pCfg->EleHdr.id = ACX_SET_RX_DATA_FILTER; 248 pCfg->EleHdr.len = 0; 249 250 TRACE0(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, ": Rx Data Filter configuration:\n"); 251 TRACE5(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, ": command = %d, index = %d, action = %d, numFieldPatterns = %d, lenFieldPatterns = %d\n", command, index, action, numFieldPatterns, lenFieldPatterns); 252 253 /* Set information element configuration fields */ 254 pCfg->command = command; 255 pCfg->index = index; 256 pCfg->EleHdr.len += sizeof(pCfg->command) + sizeof(pCfg->index); 257 258 /* When removing a filter only the index and command are to be sent */ 259 if (command == ADD_FILTER) 260 { 261 pCfg->action = action; 262 pCfg->numOfFields = numFieldPatterns; 263 pCfg->EleHdr.len += sizeof(pCfg->action) + sizeof(pCfg->numOfFields); 264 265 if (pFieldPatterns == NULL) 266 { 267 TRACE0(pCmdBld->hReport, REPORT_SEVERITY_ERROR, ": Null pattern table argument received!\n"); 268 269 return PARAM_VALUE_NOT_VALID; 270 } 271 272 os_memoryCopy(pCmdBld->hOs, &pCfg->FPTable, pFieldPatterns, lenFieldPatterns); 273 pCfg->EleHdr.len += lenFieldPatterns; 274 } 275 276 TRACE_INFO_HEX(pCmdBld->hReport, (TI_UINT8 *) pCfg, sizeof(dataFilterConfig)); 277 278 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(dataFilterConfig), fCb, hCb, NULL); 279 } 280 281 /**************************************************************************** 282 * cmdBld_CfgIeArpIpFilter() 283 **************************************************************************** 284 * DESCRIPTION: Configure/Interrogate ARP addr table information element for 285 * ipV4 only 286 * 287 * INPUTS: None 288 * 289 * OUTPUT: None 290 * 291 * RETURNS: TI_OK or TI_NOK 292 ****************************************************************************/ 293 TI_STATUS cmdBld_CfgIeArpIpFilter (TI_HANDLE hCmdBld, 294 TIpAddr tIpAddr, 295 EArpFilterType filterType, 296 void *fCb, 297 TI_HANDLE hCb) 298 { 299 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 300 ACXConfigureIP_t AcxElm_CmdConfigureIP; 301 ACXConfigureIP_t *pCfg = &AcxElm_CmdConfigureIP; 302 303 /* Set information element header */ 304 pCfg->EleHdr.id = ACX_ARP_IP_FILTER; 305 pCfg->EleHdr.len = sizeof(ACXConfigureIP_t) - sizeof(EleHdrStruct); 306 307 pCfg->arpFilterEnable = (TI_UINT8)filterType; 308 309 /* IP address */ 310 /* Note that in the case of IPv4 it is assumed that the extra two bytes are zero */ 311 IP_COPY (pCfg->address, tIpAddr); 312 313 TRACE3(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "ID=%u: ip=%x, enable=%u\n", pCfg->EleHdr.id, *((TI_UINT32*)pCfg->address), filterType); 314 315 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(ACXConfigureIP_t), fCb, hCb, NULL); 316 } 317 318 319 /**************************************************************************** 320 * cmdBld_CfgIeGroupAdressTable() 321 **************************************************************************** 322 * DESCRIPTION: Configure/Interrogate Group addr table information element 323 * 324 * INPUTS: None 325 * 326 * OUTPUT: None 327 * 328 * RETURNS: TI_OK or TI_NOK 329 ****************************************************************************/ 330 TI_STATUS cmdBld_CfgIeGroupAdressTable (TI_HANDLE hCmdBld, 331 TI_UINT8 numGroupAddrs, 332 TMacAddr *pGroupAddr, 333 TI_BOOL bEnabled, 334 void *fCb, 335 TI_HANDLE hCb) 336 { 337 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 338 TI_UINT32 i = 0; 339 TI_UINT8 *tmpLoc = NULL; 340 dot11MulticastGroupAddrStart_t AcxElm_CmdConfigureMulticastIp; 341 dot11MulticastGroupAddrStart_t* pCfg = &AcxElm_CmdConfigureMulticastIp; 342 343 os_memoryZero (pCmdBld->hOs, (void *)pCfg, sizeof(dot11MulticastGroupAddrStart_t)); 344 345 /* Set information element header */ 346 pCfg->EleHdr.id = DOT11_GROUP_ADDRESS_TBL; 347 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 348 349 pCfg->numOfGroups = numGroupAddrs; 350 pCfg->fltrState = bEnabled; 351 tmpLoc = pCfg->dataLocation; 352 353 if (NULL != pGroupAddr) 354 { 355 for (i = 0; i < numGroupAddrs; i++) 356 { 357 MAC_COPY (&tmpLoc[MAC_ADDR_LEN * i], *(pGroupAddr + i)); 358 359 TRACE7(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "cmdBld_CfgIeGroupAdressTable: MAC %x: %x:%x:%x:%x:%x:%x\n", i, tmpLoc[MAC_ADDR_LEN*i+0] , tmpLoc[MAC_ADDR_LEN*i+1] , tmpLoc[MAC_ADDR_LEN*i+2] , tmpLoc[MAC_ADDR_LEN*i+3] , tmpLoc[MAC_ADDR_LEN*i+4] , tmpLoc[MAC_ADDR_LEN*i+5]); 360 } 361 } 362 363 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(dot11MulticastGroupAddrStart_t), fCb, hCb, NULL); 364 365 } 366 367 368 /**************************************************************************** 369 * cmdBld_CfgIeSgEnable() 370 **************************************************************************** 371 * DESCRIPTION: Enable/Disable the BTH-WLAN 372 * 373 * INPUTS: Enable flag 374 * 375 * OUTPUT: None 376 * 377 * RETURNS: TI_OK or TI_NOK 378 ****************************************************************************/ 379 TI_STATUS cmdBld_CfgIeSgEnable (TI_HANDLE hCmdBld, ESoftGeminiEnableModes SoftGeminiEnableModes, void *fCb, TI_HANDLE hCb) 380 { 381 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 382 ACXBluetoothWlanCoEnableStruct AcxElm_BluetoothWlanEnable; 383 ACXBluetoothWlanCoEnableStruct* pCfg = &AcxElm_BluetoothWlanEnable; 384 385 TRACE1(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "cmdBld_CfgIeSgEnable: Enable flag = %d\n", SoftGeminiEnableModes); 386 387 /* Set information element header */ 388 pCfg->EleHdr.id = ACX_SG_ENABLE; 389 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 390 391 /* Set enable field */ 392 pCfg->coexOperationMode = (TI_UINT8)SoftGeminiEnableModes; 393 394 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 395 } 396 397 398 /**************************************************************************** 399 * cmdBld_CfgIeSg() 400 **************************************************************************** 401 * DESCRIPTION: Configure the BTH-WLAN co-exsistance 402 * 403 * INPUTS: Configuration structure pointer 404 * 405 * OUTPUT: None 406 * 407 * RETURNS: TI_OK or TI_NOK 408 ****************************************************************************/ 409 TI_STATUS cmdBld_CfgIeSg (TI_HANDLE hCmdBld, TSoftGeminiParams *pSoftGeminiParam, void *fCb, TI_HANDLE hCb) 410 { 411 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 412 ACXBluetoothWlanCoParamsStruct AcxElm_BluetoothWlanEnable; 413 ACXBluetoothWlanCoParamsStruct *pCfg = &AcxElm_BluetoothWlanEnable; 414 int i=0; 415 416 TRACE0(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "cmdBld_CfgIeSg. \n"); 417 418 /* Set information element header */ 419 pCfg->EleHdr.id = ACX_SG_CFG; 420 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 421 422 pCfg->softGeminiParams.paramIdx = pSoftGeminiParam->paramIdx; 423 424 425 for (i=0; i< SOFT_GEMINI_PARAMS_MAX ; i++) 426 { 427 pCfg->softGeminiParams.coexParams[i] = pSoftGeminiParam->coexParams[i]; 428 } 429 430 /* Rate conversion is done in the HAL */ 431 pCfg->softGeminiParams.coexParams[SOFT_GEMINI_RATE_ADAPT_THRESH] = rateNumberToBitmap((TI_UINT8)pSoftGeminiParam->coexParams[SOFT_GEMINI_RATE_ADAPT_THRESH]); 432 433 if (pCfg->softGeminiParams.coexParams[SOFT_GEMINI_RATE_ADAPT_THRESH] == 0) 434 { 435 TRACE0(pCmdBld->hReport, REPORT_SEVERITY_ERROR, "coexAPRateAdapationThr is 0, convert to 1MBPS. \n"); 436 pCfg->softGeminiParams.coexParams[SOFT_GEMINI_RATE_ADAPT_THRESH] = HW_BIT_RATE_1MBPS; 437 } 438 439 /* Send the configuration command */ 440 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 441 } 442 443 444 /**************************************************************************** 445 * cmdBld_CfgIeFmCoex() 446 **************************************************************************** 447 * DESCRIPTION: Configure the FM-WLAN co-exsistance parameters 448 * 449 * INPUTS: Configuration structure pointer 450 * 451 * OUTPUT: None 452 * 453 * RETURNS: TI_OK or TI_NOK 454 ****************************************************************************/ 455 TI_STATUS cmdBld_CfgIeFmCoex (TI_HANDLE hCmdBld, TFmCoexParams *pFmCoexParams, void *fCb, TI_HANDLE hCb) 456 { 457 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 458 ACXWlanFmCoexStruct tFmWlanCoex; 459 ACXWlanFmCoexStruct *pCfg = &tFmWlanCoex; 460 461 TRACE0(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "cmdBld_CfgIeFmCoex\n"); 462 463 /* Set information element header */ 464 pCfg->EleHdr.id = ACX_FM_COEX_CFG; 465 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 466 467 /* Set parameters with endianess handling */ 468 pCfg->enable = pFmCoexParams->uEnable; 469 pCfg->swallowPeriod = pFmCoexParams->uSwallowPeriod; 470 pCfg->nDividerFrefSet1 = pFmCoexParams->uNDividerFrefSet1; 471 pCfg->nDividerFrefSet2 = pFmCoexParams->uNDividerFrefSet2; 472 pCfg->mDividerFrefSet1 = ENDIAN_HANDLE_WORD(pFmCoexParams->uMDividerFrefSet1); 473 pCfg->mDividerFrefSet2 = ENDIAN_HANDLE_WORD(pFmCoexParams->uMDividerFrefSet2); 474 pCfg->coexPllStabilizationTime = ENDIAN_HANDLE_LONG(pFmCoexParams->uCoexPllStabilizationTime); 475 pCfg->ldoStabilizationTime = ENDIAN_HANDLE_WORD(pFmCoexParams->uLdoStabilizationTime); 476 pCfg->fmDisturbedBandMargin = pFmCoexParams->uFmDisturbedBandMargin; 477 pCfg->swallowClkDif = pFmCoexParams->uSwallowClkDif; 478 479 /* Send the configuration command */ 480 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 481 } 482 483 484 /**************************************************************************** 485 * cmdBld_CfgIeMemoryMap () 486 **************************************************************************** 487 * DESCRIPTION: Configure/Interrogate MemoryMap information element 488 * 489 * INPUTS: 490 * AcxElm_MemoryMap_T *apMap pointer to the memory map structure 491 * 492 * OUTPUT: None 493 * 494 * RETURNS: TI_OK or TI_NOK 495 ****************************************************************************/ 496 TI_STATUS cmdBld_CfgIeMemoryMap (TI_HANDLE hCmdBld, MemoryMap_t *apMap, void *fCb, TI_HANDLE hCb) 497 { 498 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 499 MemoryMap_t SwapMap; 500 TI_UINT32 *pSwap, *pOrig, i, uMemMapNumFields; 501 502 /* Set information element header */ 503 SwapMap.EleHdr.id = ACX_MEM_MAP; 504 SwapMap.EleHdr.len = sizeof(MemoryMap_t) - sizeof(EleHdrStruct); 505 506 /* Solve endian problem (all fields are 32 bit) */ 507 pOrig = (TI_UINT32* )&apMap->codeStart; 508 pSwap = (TI_UINT32* )&SwapMap.codeStart; 509 uMemMapNumFields = (sizeof(MemoryMap_t) - sizeof(EleHdrStruct)) % 4; 510 for (i = 0; i < uMemMapNumFields; i++) 511 pSwap[i] = ENDIAN_HANDLE_LONG(pOrig[i]); 512 513 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, &SwapMap, sizeof(SwapMap), fCb, hCb, NULL); 514 } 515 516 517 /**************************************************************************** 518 * cmdBld_CfgIeAid() 519 **************************************************************************** 520 * DESCRIPTION: Configure/Interrogate the AID info element 521 * 522 * INPUTS: 523 * TI_UINT16* apAidVal The AID value 524 * 525 * OUTPUT: None 526 * 527 * RETURNS: TI_OK or TI_NOK 528 ****************************************************************************/ 529 TI_STATUS cmdBld_CfgIeAid (TI_HANDLE hCmdBld, TI_UINT16 apAidVal, void *fCb, TI_HANDLE hCb) 530 { 531 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 532 ACXAid_t WlanElm_AID; 533 ACXAid_t *pCfg = &WlanElm_AID; 534 535 /* Set information element header */ 536 pCfg->EleHdr.id = ACX_AID; 537 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 538 539 pCfg->Aid = ENDIAN_HANDLE_WORD(apAidVal); 540 541 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 542 } 543 544 545 /**************************************************************************** 546 * cmdBld_CfgIeWakeUpCondition() 547 **************************************************************************** 548 * DESCRIPTION: Configure/Interrogate the power management option 549 * 550 * INPUTS: 551 * 552 * OUTPUT: None 553 * 554 * RETURNS: TI_OK or TI_NOK 555 ****************************************************************************/ 556 TI_STATUS cmdBld_CfgIeWakeUpCondition (TI_HANDLE hCmdBld, TPowerMgmtConfig *pPMConfig, void *fCb, TI_HANDLE hCb) 557 { 558 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 559 WakeUpCondition_t WakeUpCondition; 560 WakeUpCondition_t *pCfg = &WakeUpCondition; 561 562 TRACE1(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , "WakeUpCondition :\n listenInterval = 0x%X\n", pPMConfig->listenInterval); 563 564 switch (pPMConfig->tnetWakeupOn) 565 { 566 case TNET_WAKE_ON_BEACON: 567 pCfg->wakeUpConditionBitmap = WAKE_UP_EVENT_BEACON_BITMAP; 568 break; 569 case TNET_WAKE_ON_DTIM: 570 pCfg->wakeUpConditionBitmap = WAKE_UP_EVENT_DTIM_BITMAP; 571 break; 572 case TNET_WAKE_ON_N_BEACON: 573 pCfg->wakeUpConditionBitmap = WAKE_UP_EVENT_N_BEACONS_BITMAP; 574 break; 575 case TNET_WAKE_ON_N_DTIM: 576 pCfg->wakeUpConditionBitmap = WAKE_UP_EVENT_N_DTIM_BITMAP; 577 break; 578 default: 579 pCfg->wakeUpConditionBitmap = WAKE_UP_EVENT_BEACON_BITMAP; 580 break; 581 } 582 583 pCfg->listenInterval = pPMConfig->listenInterval; 584 585 TRACE2(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, " cmdBld_wakeUpCondition tnetWakeupOn=0x%x listenInterval=%d\n",pCfg->wakeUpConditionBitmap,pCfg->listenInterval); 586 587 /* Set information element header */ 588 pCfg->EleHdr.id = ACX_WAKE_UP_CONDITIONS; 589 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 590 591 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 592 } 593 594 595 /**************************************************************************** 596 * cmdBld_CfgIeSleepAuth() 597 **************************************************************************** 598 * DESCRIPTION: Configure/Interrogate the power management option 599 * 600 * INPUTS: 601 * 602 * OUTPUT: None 603 * 604 * RETURNS: TI_OK or TI_NOK 605 ****************************************************************************/ 606 TI_STATUS cmdBld_CfgIeSleepAuth (TI_HANDLE hCmdBld, EPowerPolicy eMinPowerLevel, void *fCb, TI_HANDLE hCb) 607 { 608 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 609 ACXSleepAuth_t ACXSleepAuth; 610 ACXSleepAuth_t *pCfg = &ACXSleepAuth; 611 EElpCtrlMode eElpCtrlMode; 612 613 /* Set the ELP control according to the new power policy */ 614 switch (eMinPowerLevel) 615 { 616 case POWERAUTHO_POLICY_AWAKE: eElpCtrlMode = ELPCTRL_MODE_KEEP_AWAKE; break; 617 case POWERAUTHO_POLICY_PD: eElpCtrlMode = ELPCTRL_MODE_KEEP_AWAKE; break; 618 case POWERAUTHO_POLICY_ELP: eElpCtrlMode = ELPCTRL_MODE_NORMAL; break; 619 default: 620 TRACE1(pCmdBld->hReport, REPORT_SEVERITY_ERROR, " - Param value is not supported, %d\n", eMinPowerLevel); 621 return TI_NOK; 622 623 } 624 625 /* Set the ELP mode only if there is a change */ 626 if (pCmdBld->uLastElpCtrlMode != eElpCtrlMode) 627 { 628 pCmdBld->uLastElpCtrlMode = eElpCtrlMode; 629 if (eElpCtrlMode == ELPCTRL_MODE_KEEP_AWAKE) 630 { 631 twIf_Awake(pCmdBld->hTwIf); 632 } 633 else 634 { 635 twIf_Sleep(pCmdBld->hTwIf); 636 } 637 } 638 639 /* In the info element the enums are in reverse */ 640 switch (eMinPowerLevel) 641 { 642 case POWERAUTHO_POLICY_ELP: 643 pCfg->sleepAuth = 2; 644 break; 645 case POWERAUTHO_POLICY_AWAKE: 646 pCfg->sleepAuth = 0; 647 break; 648 default: 649 pCfg->sleepAuth = eMinPowerLevel; 650 } 651 652 TRACE1(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, " cmdBld_MinPowerLevelSet sleepAuth=%d\n", eMinPowerLevel); 653 654 /* Set information element header*/ 655 pCfg->EleHdr.id = ACX_SLEEP_AUTH; 656 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 657 658 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 659 } 660 661 662 /**************************************************************************** 663 * cmdBld_CfgIeBcnBrcOptions() 664 **************************************************************************** 665 * DESCRIPTION: Configure/Interrogate the power management option 666 * 667 * INPUTS: 668 * 669 * OUTPUT: None 670 * 671 * RETURNS: TI_OK or TI_NOK 672 ****************************************************************************/ 673 TI_STATUS cmdBld_CfgIeBcnBrcOptions (TI_HANDLE hCmdBld, TPowerMgmtConfig *pPMConfig, void *fCb, TI_HANDLE hCb) 674 { 675 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 676 ACXBeaconAndBroadcastOptions_t ACXBeaconAndBroadcastOptions; 677 ACXBeaconAndBroadcastOptions_t *pCfg = &ACXBeaconAndBroadcastOptions; 678 679 pCfg->beaconRxTimeOut = pPMConfig->BcnBrcOptions.BeaconRxTimeout; 680 pCfg->broadcastTimeOut = pPMConfig->BcnBrcOptions.BroadcastRxTimeout; 681 pCfg->rxBroadcastInPS = pPMConfig->BcnBrcOptions.RxBroadcastInPs; 682 pCfg->consecutivePsPollDeliveryFailureThr = pPMConfig->ConsecutivePsPollDeliveryFailureThreshold; 683 684 685 TRACE4(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, " cmdBld_BcnBrcOptions BeaconRxTimeout=%d BroadcastRxTimeout=%d RxBroadcastInPs=0x%x, consecutivePsPollDeliveryFailureThr=%d\n", pCfg->beaconRxTimeOut,pCfg->broadcastTimeOut, pCfg->rxBroadcastInPS, pCfg->consecutivePsPollDeliveryFailureThr); 686 687 /* Set information element header */ 688 pCfg->EleHdr.id = ACX_BCN_DTIM_OPTIONS; 689 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 690 691 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 692 } 693 694 695 /**************************************************************************** 696 * cmdBld_CfgIeFeatureConfig() 697 ACXBeaconAndBroadcastOptions_t* pWlanElm_BcnBrcOptions, 698 **************************************************************************** 699 * DESCRIPTION: Configure the feature config info element 700 * 701 * INPUTS: 702 * 703 * OUTPUT: None 704 * 705 * RETURNS: TI_OK or TI_NOK 706 ****************************************************************************/ 707 TI_STATUS cmdBld_CfgIeFeatureConfig (TI_HANDLE hCmdBld, TI_UINT32 options, TI_UINT32 uDataFlowOptions, void *fCb, TI_HANDLE hCb) 708 { 709 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 710 ACXFeatureConfig_t WlanElm_FeatureConfig; 711 ACXFeatureConfig_t *pCfg = &WlanElm_FeatureConfig; 712 713 /* Set information element header */ 714 pCfg->EleHdr.id = ACX_FEATURE_CFG; 715 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 716 717 /* Set fields */ 718 pCfg->Options = ENDIAN_HANDLE_LONG(options); 719 pCfg->dataflowOptions = ENDIAN_HANDLE_LONG(uDataFlowOptions); 720 721 TRACE3(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "ID=%u: option=0x%x, def.option=0x%x\n", pCfg->EleHdr.id, options, uDataFlowOptions); 722 723 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 724 } 725 726 727 /**************************************************************************** 728 * cmdBld_CfgIeTxPowerDbm () 729 **************************************************************************** 730 * DESCRIPTION: Set the Tx power in Dbm units. 731 * 732 * INPUTS: 733 * 734 * OUTPUT: None 735 * 736 * RETURNS: TI_OK or TI_NOK 737 ****************************************************************************/ 738 TI_STATUS cmdBld_CfgIeTxPowerDbm (TI_HANDLE hCmdBld, TI_UINT8 uTxPowerDbm , void *fCb, TI_HANDLE hCb) 739 { 740 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 741 dot11CurrentTxPowerStruct dot11CurrentTxPower; 742 dot11CurrentTxPowerStruct *pCfg = &dot11CurrentTxPower; 743 744 TRACE1( pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, " uTxPowerDbm = %d\n", uTxPowerDbm); 745 746 747 /* Set information element header*/ 748 pCfg->EleHdr.id = DOT11_CUR_TX_PWR; 749 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 750 751 pCfg->dot11CurrentTxPower = uTxPowerDbm; 752 753 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 754 } 755 756 757 /**************************************************************************** 758 * cmdBld_CfgIeStatisitics () 759 **************************************************************************** 760 * DESCRIPTION: Set the ACX statistics counters to zero. 761 * 762 * INPUTS: 763 * 764 * OUTPUT: None 765 * 766 * RETURNS: TI_OK or TI_NOK 767 ****************************************************************************/ 768 TI_STATUS cmdBld_CfgIeStatisitics (TI_HANDLE hCmdBld, void *fCb, TI_HANDLE hCb) 769 { 770 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 771 TI_STATUS status = TI_NOK; 772 ACXStatistics_t *pCfg; 773 774 pCfg = os_memoryAlloc(pCmdBld->hOs, sizeof(ACXStatistics_t)); 775 if (!pCfg) 776 { 777 return status; 778 } 779 780 /* Set information element header */ 781 pCfg->EleHdr.id = ACX_STATISTICS; 782 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 783 784 status = cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 785 os_memoryFree(pCmdBld->hOs, pCfg, sizeof(ACXStatistics_t)); 786 return status; 787 } 788 789 790 /**************************************************************************** 791 * cmdBld_CfgIeTid() 792 **************************************************************************** 793 * DESCRIPTION: Write the Queue configuration (For Quality Of Service) 794 * 795 * INPUTS: 796 * 797 * OUTPUT: None 798 * 799 * RETURNS: TI_OK or TI_NOK 800 ****************************************************************************/ 801 TI_STATUS cmdBld_CfgIeTid (TI_HANDLE hCmdBld, TQueueTrafficParams* pQtrafficParams, void *fCb, TI_HANDLE hCb) 802 803 { 804 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 805 ACXTIDConfig_t TrafficCategoryCfg; 806 ACXTIDConfig_t *pCfg = &TrafficCategoryCfg; 807 808 os_memoryZero (pCmdBld->hOs, (void *)pCfg, sizeof(*pCfg)); 809 810 /* 811 * Set information element header 812 * ============================== 813 */ 814 pCfg->EleHdr.id = ACX_TID_CFG; 815 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 816 817 /* 818 * Set information element Data 819 * ============================== 820 */ 821 pCfg->queueID = pQtrafficParams->queueID; 822 pCfg->channelType = pQtrafficParams->channelType; 823 pCfg->tsid = pQtrafficParams->tsid; 824 pCfg->psScheme = pQtrafficParams->psScheme; 825 pCfg->APSDConf[0] = pQtrafficParams->APSDConf[0]; 826 pCfg->APSDConf[1] = pQtrafficParams->APSDConf[1]; 827 828 TRACE7(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , "ID=%u: queue-id=%u, chan-type=%u, tsid=%u, ps-scheme=%u, apsd-1=0x%x, apsd-2=0x%x\n", pCfg->EleHdr.id, pCfg->queueID, pCfg->channelType, pCfg->tsid, pCfg->psScheme, pCfg->APSDConf[0], pCfg->APSDConf[1]); 829 830 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 831 } 832 833 834 /**************************************************************************** 835 * cmdBld_CfgIeAcParams() 836 **************************************************************************** 837 * DESCRIPTION: Write the AC configuration (For Quality Of Service) 838 * 839 * INPUTS: 840 * 841 * OUTPUT: None 842 * 843 * RETURNS: TI_OK or TI_NOK 844 ****************************************************************************/ 845 TI_STATUS cmdBld_CfgIeAcParams (TI_HANDLE hCmdBld, TAcQosParams *pAcQosParams, void *fCb, TI_HANDLE hCb) 846 { 847 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 848 ACXAcCfg_t AcCfg; 849 ACXAcCfg_t *pCfg = &AcCfg; 850 851 os_memoryZero (pCmdBld->hOs, (void *)pCfg, sizeof(*pCfg)); 852 853 /* 854 * Set information element header 855 * ============================== 856 */ 857 pCfg->EleHdr.id = ACX_AC_CFG; 858 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 859 860 /* 861 * Set information element Data 862 * ============================== 863 */ 864 865 pCfg->ac = pAcQosParams->ac; 866 pCfg->aifsn = pAcQosParams->aifsn; 867 pCfg->cwMax = ENDIAN_HANDLE_WORD(pAcQosParams->cwMax); 868 pCfg->cwMin = pAcQosParams->cwMin; 869 pCfg->txopLimit = ENDIAN_HANDLE_WORD(pAcQosParams->txopLimit); 870 871 TRACE6(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "ID=%u: ac= %u, aifsn=%u, cw-max=%u, cw-min=%u, txop=%u\n", pCfg->EleHdr.id, pAcQosParams->ac, pAcQosParams->aifsn, pAcQosParams->cwMax, pAcQosParams->cwMin, pAcQosParams->txopLimit); 872 873 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 874 } 875 876 877 /**************************************************************************** 878 * cmdBld_CfgIePsRxStreaming() 879 **************************************************************************** 880 * DESCRIPTION: Write the AC PS-Rx-Streaming 881 * 882 * INPUTS: 883 * 884 * OUTPUT: None 885 * 886 * RETURNS: TI_OK or TI_NOK 887 ****************************************************************************/ 888 TI_STATUS cmdBld_CfgIePsRxStreaming (TI_HANDLE hCmdBld, TPsRxStreaming *pPsRxStreaming, void *fCb, TI_HANDLE hCb) 889 { 890 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 891 ACXPsRxStreaming_t tStreamingCfg; 892 ACXPsRxStreaming_t *pCfg = &tStreamingCfg; 893 894 os_memoryZero (pCmdBld->hOs, (void *)pCfg, sizeof(*pCfg)); 895 896 /* 897 * Set information element header 898 * ============================== 899 */ 900 pCfg->EleHdr.id = ACX_PS_RX_STREAMING; 901 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 902 903 /* 904 * Set information element Data 905 * ============================ 906 */ 907 pCfg->TID = (TI_UINT8)pPsRxStreaming->uTid; 908 pCfg->rxPSDEnabled = (TI_UINT8)pPsRxStreaming->bEnabled; 909 pCfg->streamPeriod = (TI_UINT8)pPsRxStreaming->uStreamPeriod; 910 pCfg->txTimeout = (TI_UINT8)pPsRxStreaming->uTxTimeout; 911 912 TRACE5(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "ID=%u: tid= %u, enable=%u, streamPeriod=%u, txTimeout=%u\n", pCfg->EleHdr.id, pCfg->TID, pCfg->rxPSDEnabled, pCfg->streamPeriod, pCfg->txTimeout); 913 914 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 915 } 916 917 918 /**************************************************************************** 919 * cmdBld_CfgIePacketDetectionThreshold() 920 **************************************************************************** 921 * DESCRIPTION: Set the PacketDetection threshold 922 * 923 * INPUTS: 924 * 925 * OUTPUT: None 926 * 927 * RETURNS: TI_OK or TI_NOK 928 ****************************************************************************/ 929 TI_STATUS cmdBld_CfgIePacketDetectionThreshold (TI_HANDLE hCmdBld, TI_UINT32 pdThreshold, void *fCb, TI_HANDLE hCb) 930 { 931 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 932 ACXPacketDetection_t PacketDetectionThresholdCfg; 933 ACXPacketDetection_t *pCfg = &PacketDetectionThresholdCfg; 934 935 /* 936 * Set information element header 937 * ============================== 938 */ 939 pCfg->EleHdr.id = ACX_PD_THRESHOLD; 940 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 941 942 /* 943 * Set information element Data 944 * ============================== 945 */ 946 pCfg->pdThreshold = ENDIAN_HANDLE_LONG(pdThreshold); 947 948 TRACE2(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, ": pdThreshold = 0x%x , len = 0x%x \n",pCfg->pdThreshold,pCfg->EleHdr.len); 949 950 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 951 } 952 953 954 955 956 /**************************************************************************** 957 * cmdBld_CfgIeBeaconFilterOpt() 958 **************************************************************************** 959 * DESCRIPTION: Configure/Interrogate the beacon filtering option 960 * 961 * INPUTS: 962 * 963 * OUTPUT: None 964 * 965 * RETURNS: TI_OK or TI_NOK 966 ****************************************************************************/ 967 TI_STATUS cmdBld_CfgIeBeaconFilterOpt (TI_HANDLE hCmdBld, TI_UINT8 beaconFilteringStatus, TI_UINT8 numOfBeaconsToBuffer, void *fCb, TI_HANDLE hCb) 968 { 969 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 970 ACXBeaconFilterOptions_t ACXBeaconFilterOptions; 971 ACXBeaconFilterOptions_t *pCfg = &ACXBeaconFilterOptions; 972 973 pCfg->enable = beaconFilteringStatus; 974 pCfg->maxNumOfBeaconsStored = numOfBeaconsToBuffer; 975 976 /* Set information element header */ 977 pCfg->EleHdr.id = ACX_BEACON_FILTER_OPT; 978 pCfg->EleHdr.len = sizeof(ACXBeaconFilterOptions_t) - sizeof(EleHdrStruct); 979 980 TRACE3(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , "ID=%u: enable=%u, num-stored=%u\n", pCfg->EleHdr.id, beaconFilteringStatus, numOfBeaconsToBuffer); 981 982 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(ACXBeaconFilterOptions_t), fCb, hCb, NULL); 983 } 984 /**************************************************************************** 985 * cmdBld_CfgIeRateMngDbg() 986 **************************************************************************** 987 * DESCRIPTION: Configure the rate managment params 988 * INPUTS: 989 * 990 * OUTPUT: None 991 * 992 * RETURNS: TI_OK or TI_NOK 993 ****************************************************************************/ 994 995 TI_STATUS cmdBld_CfgIeRateMngDbg (TI_HANDLE hCmdBld, RateMangeParams_t *pRateMngParams, void *fCb, TI_HANDLE hCb) 996 { 997 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 998 AcxRateMangeParams RateMng; 999 AcxRateMangeParams *pCfg = &RateMng; 1000 int i; 1001 1002 /* Set information element header */ 1003 pCfg->EleHdr.id = ACX_SET_RATE_MAMAGEMENT_PARAMS; 1004 pCfg->EleHdr.len = sizeof(AcxRateMangeParams) - sizeof(EleHdrStruct); 1005 1006 1007 TRACE2(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , "ID=%u, index=%d \n",pCfg->EleHdr.id,pRateMngParams->paramIndex); 1008 1009 pCfg->paramIndex = pRateMngParams->paramIndex; 1010 1011 pCfg->InverseCuriosityFactor = pRateMngParams->InverseCuriosityFactor; 1012 pCfg->MaxPer = pRateMngParams->MaxPer; 1013 pCfg->PerAdd = pRateMngParams->PerAdd; 1014 pCfg->PerAddShift = pRateMngParams->PerAddShift; 1015 pCfg->PerAlphaShift = pRateMngParams->PerAlphaShift; 1016 pCfg->PerBeta1Shift = pRateMngParams->PerBeta1Shift; 1017 pCfg->PerBeta2Shift = pRateMngParams->PerBeta2Shift; 1018 pCfg->PerTh1 = pRateMngParams->PerTh1; 1019 pCfg->PerTh2 = pRateMngParams->PerTh2; 1020 pCfg->RateCheckDown = pRateMngParams->RateCheckDown; 1021 pCfg->RateCheckUp = pRateMngParams->RateCheckUp; 1022 pCfg->RateRetryScore = pRateMngParams->RateRetryScore; 1023 pCfg->TxFailHighTh = pRateMngParams->TxFailHighTh; 1024 pCfg->TxFailLowTh = pRateMngParams->TxFailLowTh; 1025 1026 for (i=0 ; i< 13 ; i++) 1027 { 1028 pCfg->RateRetryPolicy[i] = pRateMngParams->RateRetryPolicy[i]; 1029 } 1030 1031 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(AcxRateMangeParams), fCb, hCb, NULL); 1032 } 1033 1034 1035 1036 /**************************************************************************** 1037 * cmdBld_CfgIeBeaconFilterTable 1038 **************************************************************************** 1039 * DESCRIPTION: Configure/Interrogate the beacon filter IE table 1040 * 1041 * INPUTS: 1042 * 1043 * OUTPUT: None 1044 * 1045 * RETURNS: TI_OK or TI_NOK 1046 ****************************************************************************/ 1047 TI_STATUS cmdBld_CfgIeBeaconFilterTable (TI_HANDLE hCmdBld, 1048 TI_UINT8 uNumberOfIEs, 1049 TI_UINT8 *pIETable, 1050 TI_UINT8 uIETableSize, 1051 void *fCb, 1052 TI_HANDLE hCb) 1053 { 1054 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1055 ACXBeaconFilterIETable_t beaconFilterIETableStruct; 1056 ACXBeaconFilterIETable_t *pCfg = &beaconFilterIETableStruct; 1057 TI_UINT32 counter; 1058 1059 if (NULL == pIETable) 1060 { 1061 return PARAM_VALUE_NOT_VALID; 1062 } 1063 1064 pCfg->EleHdr.id = ACX_BEACON_FILTER_TABLE; 1065 pCfg->EleHdr.len = uIETableSize + 1; 1066 pCfg->NumberOfIEs = uNumberOfIEs; 1067 1068 os_memoryZero (pCmdBld->hOs, (void *)pCfg->IETable, BEACON_FILTER_TABLE_MAX_SIZE); 1069 os_memoryCopy (pCmdBld->hOs, (void *)pCfg->IETable, (void *)pIETable, uIETableSize); 1070 1071 TRACE3(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , "ID=%u: num-ie=%u, table-size=%u\n", pCfg->EleHdr.id, uNumberOfIEs, uIETableSize); 1072 1073 TRACE0(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "Beacon IE Table:\n"); 1074 for (counter = 0; counter < uIETableSize; counter++) 1075 { 1076 TRACE1(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "%2x ", pIETable[counter]); 1077 } 1078 TRACE0(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "\n"); 1079 1080 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(ACXBeaconFilterIETable_t), fCb, hCb, NULL); 1081 } 1082 1083 /**************************************************************************** 1084 * cmdBld_CfgCoexActivity 1085 **************************************************************************** 1086 * DESCRIPTION: Configure/Interrogate the Coex activity IE 1087 * 1088 * INPUTS: 1089 * 1090 * OUTPUT: None 1091 * 1092 * RETURNS: TI_OK or TI_NOK 1093 ****************************************************************************/ 1094 TI_STATUS cmdBld_CfgIeCoexActivity (TI_HANDLE hCmdBld, 1095 TCoexActivity *pCoexActivity, 1096 void *fCb, 1097 TI_HANDLE hCb) 1098 { 1099 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1100 ACXCoexActivityIE_t coexActivityIEStruct; 1101 ACXCoexActivityIE_t *pCfg = &coexActivityIEStruct; 1102 1103 if (NULL == pCoexActivity) 1104 { 1105 return PARAM_VALUE_NOT_VALID; 1106 } 1107 1108 pCfg->EleHdr.id = ACX_COEX_ACTIVITY; 1109 pCfg->EleHdr.len = sizeof(ACXCoexActivityIE_t) - sizeof(EleHdrStruct); 1110 1111 TRACE1(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "CoexActivity: ID=0x%x\n", pCfg->EleHdr.id); 1112 1113 pCfg->coexIp = pCoexActivity->coexIp; 1114 pCfg->activityId = pCoexActivity->activityId; 1115 pCfg->defaultPriority = pCoexActivity->defaultPriority; 1116 pCfg->raisedPriority = pCoexActivity->raisedPriority; 1117 pCfg->minService = ENDIAN_HANDLE_WORD(pCoexActivity->minService); 1118 pCfg->maxService = ENDIAN_HANDLE_WORD(pCoexActivity->maxService); 1119 1120 TRACE6(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "CoexActivity: 0x%02x 0x%02x - 0x%02x 0x%02x 0x%04x 0x%04x\n", 1121 pCfg->coexIp, 1122 pCfg->activityId, 1123 pCfg->defaultPriority, 1124 pCfg->raisedPriority, 1125 pCfg->minService, 1126 pCfg->maxService); 1127 1128 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 1129 } 1130 1131 /**************************************************************************** 1132 * cmdBld_CfgIeCcaThreshold() 1133 **************************************************************************** 1134 * DESCRIPTION: Configure/Interrogate the Slot Time 1135 * 1136 * INPUTS: None 1137 * 1138 * OUTPUT: None 1139 * 1140 * RETURNS: TI_OK or TI_NOK 1141 ****************************************************************************/ 1142 TI_STATUS cmdBld_CfgIeCcaThreshold (TI_HANDLE hCmdBld, TI_UINT16 ccaThreshold, void *fCb, TI_HANDLE hCb) 1143 { 1144 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1145 ACXEnergyDetection_t AcxElm_CcaThreshold; 1146 ACXEnergyDetection_t *pCfg = &AcxElm_CcaThreshold; 1147 1148 /* Set information element header */ 1149 pCfg->EleHdr.id = ACX_CCA_THRESHOLD; 1150 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 1151 1152 pCfg->rxCCAThreshold = ENDIAN_HANDLE_WORD(ccaThreshold); 1153 1154 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 1155 } 1156 1157 1158 /**************************************************************************** 1159 * cmdBld_CfgIeEventMask() 1160 **************************************************************************** 1161 * DESCRIPTION: Change the Event Vector Mask in the FW 1162 * 1163 * INPUTS: MaskVector The Updated Vector Mask 1164 * 1165 * RETURNS: TI_OK or TI_NOK 1166 ****************************************************************************/ 1167 TI_STATUS cmdBld_CfgIeEventMask (TI_HANDLE hCmdBld, TI_UINT32 mask, void *fCb, TI_HANDLE hCb) 1168 { 1169 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1170 1171 ACXEventMboxMask_t EventMboxData; 1172 ACXEventMboxMask_t *pCfg = &EventMboxData; 1173 1174 /* Set information element header*/ 1175 pCfg->EleHdr.id = ACX_EVENT_MBOX_MASK; 1176 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 1177 pCfg->lowEventMask = ENDIAN_HANDLE_LONG(mask); 1178 pCfg->highEventMask = ENDIAN_HANDLE_LONG(0xffffffff); /* Not in Use */ 1179 1180 TRACE0(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , "cmdBld_CfgIeEventMask:\n"); 1181 1182 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 1183 } 1184 1185 1186 /**************************************************************************** 1187 * cmdBld_CfgIeMaxTxRetry() 1188 **************************************************************************** 1189 * DESCRIPTION: Configure the Max Tx Retry parameters 1190 * 1191 * INPUTS: None 1192 * 1193 * OUTPUT: None 1194 * 1195 * RETURNS: TI_OK or TI_NOK 1196 ****************************************************************************/ 1197 TI_STATUS cmdBld_CfgIeMaxTxRetry (TI_HANDLE hCmdBld, 1198 TRroamingTriggerParams *pRoamingTriggerCmd, 1199 void *fCb, 1200 TI_HANDLE hCb) 1201 { 1202 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1203 ACXConsTxFailureTriggerParameters_t AcxElm_SetMaxTxRetry; 1204 ACXConsTxFailureTriggerParameters_t* pCfg = &AcxElm_SetMaxTxRetry; 1205 1206 pCfg->maxTxRetry = pRoamingTriggerCmd->maxTxRetry; 1207 1208 /* Set information element header */ 1209 pCfg->EleHdr.id = ACX_CONS_TX_FAILURE; 1210 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 1211 1212 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 1213 } 1214 1215 1216 /**************************************************************************** 1217 * cmdBld_CfgIeConnMonitParams() 1218 **************************************************************************** 1219 * DESCRIPTION: Configure the Bss Lost Timeout & TSF miss threshold 1220 * 1221 * INPUTS: None 1222 * 1223 * OUTPUT: None 1224 * 1225 * RETURNS: TI_OK or TI_NOK 1226 ****************************************************************************/ 1227 TI_STATUS cmdBld_CfgIeConnMonitParams (TI_HANDLE hCmdBld, TRroamingTriggerParams *pRoamingTriggerCmd, void *fCb, TI_HANDLE hCb) 1228 { 1229 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1230 AcxConnectionMonitorOptions AcxElm_SetBssLossTsfThreshold; 1231 AcxConnectionMonitorOptions* pCfg = &AcxElm_SetBssLossTsfThreshold; 1232 1233 pCfg->BSSLossTimeout = ENDIAN_HANDLE_LONG(pRoamingTriggerCmd->BssLossTimeout); 1234 pCfg->TSFMissedThreshold = ENDIAN_HANDLE_LONG(pRoamingTriggerCmd->TsfMissThreshold); 1235 1236 /* Set information element header */ 1237 pCfg->EleHdr.id = ACX_CONN_MONIT_PARAMS; 1238 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 1239 1240 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 1241 } 1242 1243 1244 /**************************************************************************** 1245 * cmdBld_CfgIeTxRatePolicy() 1246 **************************************************************************** 1247 * DESCRIPTION: Write the TxRateClass configuration 1248 * 1249 * INPUTS: 1250 * 1251 * OUTPUT: None 1252 * 1253 * RETURNS: TI_OK or TI_NOK 1254 ****************************************************************************/ 1255 TI_STATUS cmdBld_CfgIeTxRatePolicy (TI_HANDLE hCmdBld, TTxRatePolicy *pTxRatePolicy, void *fCb, TI_HANDLE hCb) 1256 { 1257 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1258 ACXTxAttrClasses_t TxClassCfg; 1259 ACXTxAttrClasses_t *pCfg = &TxClassCfg; 1260 TI_UINT8 PolicyId; 1261 1262 os_memoryZero (pCmdBld->hOs, (void *)pCfg, sizeof(*pCfg)); 1263 1264 /* 1265 * Set information element header 1266 * ============================== 1267 */ 1268 pCfg->EleHdr.id = ACX_RATE_POLICY; 1269 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 1270 pCfg->numOfClasses = pTxRatePolicy->numOfRateClasses; 1271 1272 for (PolicyId = 0; PolicyId < pTxRatePolicy->numOfRateClasses; PolicyId++) 1273 { 1274 os_memoryCopy (pCmdBld->hOs, 1275 (void *)&(pCfg->rateClasses[PolicyId]), 1276 (void *)&(pTxRatePolicy->rateClass[PolicyId]), 1277 sizeof(TTxRateClass)); 1278 } 1279 1280 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 1281 } 1282 1283 1284 /**************************************************************************** 1285 * cmdBld_CfgIeRtsThreshold() 1286 **************************************************************************** 1287 * DESCRIPTION: Configure the RTS threshold 1288 * 1289 * INPUTS: None 1290 * 1291 * OUTPUT: None 1292 * 1293 * RETURNS: TI_OK or TI_NOK 1294 ****************************************************************************/ 1295 TI_STATUS cmdBld_CfgIeRtsThreshold (TI_HANDLE hCmdBld, TI_UINT16 uRtsThreshold, void *fCb, TI_HANDLE hCb) 1296 { 1297 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1298 dot11RTSThreshold_t AcxElm_RtsThreshold; 1299 dot11RTSThreshold_t *pCfg = &AcxElm_RtsThreshold; 1300 1301 /* Set information element header */ 1302 pCfg->EleHdr.id = DOT11_RTS_THRESHOLD; 1303 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 1304 1305 pCfg->RTSThreshold = ENDIAN_HANDLE_WORD(uRtsThreshold); 1306 1307 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 1308 } 1309 1310 1311 /**************************************************************************** 1312 * cmdBld_CfgIeRtsThreshold() 1313 **************************************************************************** 1314 * DESCRIPTION: Configure the tx fragmentation threshold 1315 * 1316 * INPUTS: None 1317 * 1318 * OUTPUT: None 1319 * 1320 * RETURNS: TI_OK or TI_NOK 1321 ****************************************************************************/ 1322 TI_STATUS cmdBld_CfgIeFragmentThreshold (TI_HANDLE hCmdBld, TI_UINT16 uFragmentThreshold, void *fCb, TI_HANDLE hCb) 1323 { 1324 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1325 ACXFRAGThreshold_t AcxElm_FragmentThreshold; 1326 ACXFRAGThreshold_t *pCfg = &AcxElm_FragmentThreshold; 1327 1328 /* Set information element header */ 1329 pCfg->EleHdr.id = ACX_FRAG_CFG; 1330 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 1331 1332 pCfg->fragThreshold = ENDIAN_HANDLE_WORD(uFragmentThreshold); 1333 1334 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 1335 } 1336 1337 1338 /**************************************************************************** 1339 * cmdBld_CfgIePmConfig() 1340 **************************************************************************** 1341 * DESCRIPTION: Configure PM parameters 1342 * 1343 * INPUTS: None 1344 * 1345 * OUTPUT: None 1346 * 1347 * RETURNS: TI_OK or TI_NOK 1348 ****************************************************************************/ 1349 TI_STATUS cmdBld_CfgIePmConfig (TI_HANDLE hCmdBld, 1350 TI_UINT32 uHostClkSettlingTime, 1351 TI_UINT8 uHostFastWakeupSupport, 1352 void * fCb, 1353 TI_HANDLE hCb) 1354 { 1355 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1356 ACXPMConfig_t tPmConfig; 1357 ACXPMConfig_t *pCfg = &tPmConfig; 1358 1359 /* Set information element header*/ 1360 pCfg->EleHdr.id = ACX_PM_CONFIG; 1361 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 1362 1363 pCfg->hostClkSettlingTime = uHostClkSettlingTime; 1364 pCfg->hostFastWakeupSupport = uHostFastWakeupSupport; 1365 1366 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 1367 } 1368 1369 1370 /**************************************************************************** 1371 * cmdBld_CfgIeTxCmpltPacing() 1372 **************************************************************************** 1373 * DESCRIPTION: Configure Tx-Complete interrupt pacing to FW 1374 * 1375 * INPUTS: None 1376 * 1377 * OUTPUT: None 1378 * 1379 * RETURNS: TI_OK or TI_NOK 1380 ****************************************************************************/ 1381 TI_STATUS cmdBld_CfgIeTxCmpltPacing (TI_HANDLE hCmdBld, 1382 TI_UINT16 uTxCompletePacingThreshold, 1383 TI_UINT16 uTxCompletePacingTimeout, 1384 void * fCb, 1385 TI_HANDLE hCb) 1386 { 1387 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1388 ACXTxConfigOptions_t tTxCmpltPacing; 1389 ACXTxConfigOptions_t *pCfg = &tTxCmpltPacing; 1390 1391 /* Set information element header */ 1392 pCfg->EleHdr.id = ACX_TX_CONFIG_OPT; 1393 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 1394 1395 pCfg->txCompleteThreshold = ENDIAN_HANDLE_WORD(uTxCompletePacingThreshold); 1396 pCfg->txCompleteTimeout = ENDIAN_HANDLE_WORD(uTxCompletePacingTimeout); 1397 1398 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 1399 } 1400 1401 1402 /**************************************************************************** 1403 * cmdBld_CfgIeRxIntrPacing() 1404 **************************************************************************** 1405 * DESCRIPTION: Configure Rx-Complete interrupt pacing to FW 1406 * 1407 * INPUTS: None 1408 * 1409 * OUTPUT: None 1410 * 1411 * RETURNS: TI_OK or TI_NOK 1412 ****************************************************************************/ 1413 TI_STATUS cmdBld_CfgIeRxIntrPacing (TI_HANDLE hCmdBld, 1414 TI_UINT16 uRxIntrPacingThreshold, 1415 TI_UINT16 uRxIntrPacingTimeout, 1416 void * fCb, 1417 TI_HANDLE hCb) 1418 { 1419 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1420 ACXRxBufferingConfig_t tRxIntrPacing; 1421 ACXRxBufferingConfig_t *pCfg = &tRxIntrPacing; 1422 1423 /* Set information element header */ 1424 pCfg->EleHdr.id = ACX_RX_CONFIG_OPT; 1425 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 1426 1427 pCfg->rxPktThreshold = ENDIAN_HANDLE_WORD(uRxIntrPacingThreshold); 1428 pCfg->rxCompleteTimeout = ENDIAN_HANDLE_WORD(uRxIntrPacingTimeout); 1429 pCfg->rxMblkThreshold = ENDIAN_HANDLE_WORD(0xFFFF); /* Set to maximum so it has no effect (only the PktThreshold is used) */ 1430 pCfg->rxQueueType = RX_QUEUE_TYPE_RX_LOW_PRIORITY; /* Only low priority data packets are buffered */ 1431 1432 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 1433 } 1434 1435 1436 /**************************************************************************** 1437 * cmdBld_CfgIeCtsProtection() 1438 **************************************************************************** 1439 * DESCRIPTION: Configure The Cts to self feature 1440 * 1441 * INPUTS: None 1442 * 1443 * OUTPUT: None 1444 * 1445 * RETURNS: TI_OK or TI_NOK 1446 ****************************************************************************/ 1447 TI_STATUS cmdBld_CfgIeCtsProtection (TI_HANDLE hCmdBld, TI_UINT8 ctsProtection, void *fCb, TI_HANDLE hCb) 1448 { 1449 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1450 ACXCtsProtection_t AcxElm_CtsToSelf; 1451 ACXCtsProtection_t *pCfg = &AcxElm_CtsToSelf; 1452 1453 /* Set information element header*/ 1454 pCfg->EleHdr.id = ACX_CTS_PROTECTION; 1455 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 1456 1457 pCfg->ctsProtectMode = ctsProtection; 1458 1459 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 1460 } 1461 1462 1463 /**************************************************************************** 1464 * cmdBld_CfgIeRxMsduLifeTime() 1465 **************************************************************************** 1466 * DESCRIPTION: Configure The Cts to self feature 1467 * 1468 * INPUTS: None 1469 * 1470 * OUTPUT: None 1471 * 1472 * RETURNS: TI_OK or TI_NOK 1473 ****************************************************************************/ 1474 TI_STATUS cmdBld_CfgIeRxMsduLifeTime (TI_HANDLE hCmdBld, TI_UINT32 RxMsduLifeTime, void *fCb, TI_HANDLE hCb) 1475 { 1476 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1477 dot11RxMsduLifeTime_t AcxElm_RxMsduLifeTime; 1478 dot11RxMsduLifeTime_t *pCfg = &AcxElm_RxMsduLifeTime; 1479 1480 /* Set information element header*/ 1481 pCfg->EleHdr.id = DOT11_RX_MSDU_LIFE_TIME; 1482 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 1483 pCfg->RxMsduLifeTime = RxMsduLifeTime; 1484 1485 TRACE2(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, ": RxMsduLifeTime = 0x%x, len = 0x%x\n",pCfg->RxMsduLifeTime,pCfg->EleHdr.len); 1486 1487 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 1488 } 1489 1490 1491 /**************************************************************************** 1492 * cmdBld_CfgIeServicePeriodTimeout() 1493 **************************************************************************** 1494 * DESCRIPTION: Configure The Rx Time Out 1495 * 1496 * INPUTS: None 1497 * 1498 * OUTPUT: None 1499 * 1500 * RETURNS: TI_OK or TI_NOK 1501 ****************************************************************************/ 1502 TI_STATUS cmdBld_CfgIeServicePeriodTimeout (TI_HANDLE hCmdBld, TRxTimeOut* pRxTimeOut, void *fCb, TI_HANDLE hCb) 1503 { 1504 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1505 ACXRxTimeout_t AcxElm_rxTimeOut; 1506 ACXRxTimeout_t *pCfg = &AcxElm_rxTimeOut; 1507 1508 /* Set information element header*/ 1509 pCfg->EleHdr.id = ACX_SERVICE_PERIOD_TIMEOUT; 1510 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 1511 1512 pCfg->PsPollTimeout = pRxTimeOut->psPoll; 1513 pCfg->UpsdTimeout = pRxTimeOut->UPSD; 1514 1515 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 1516 } 1517 1518 1519 /**************************************************************************** 1520 * cmdBld_CfgIePsWmm() 1521 **************************************************************************** 1522 * DESCRIPTION: Configure The PS for WMM 1523 * 1524 * INPUTS: TI_TRUE - Configure PS to work on WMM mode - do not send the NULL/PS_POLL 1525 * packets even if TIM is set. 1526 * TI_FALSE - Configure PS to work on Non-WMM mode - work according to the 1527 * standard 1528 * 1529 * RETURNS: TI_OK or TI_NOK 1530 ****************************************************************************/ 1531 TI_STATUS cmdBld_CfgIePsWmm (TI_HANDLE hCmdBld, TI_BOOL enableWA, void *fCb, TI_HANDLE hCb) 1532 { 1533 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1534 ACXConfigPsWmm_t ConfigPsWmm; 1535 ACXConfigPsWmm_t *pCfg = &ConfigPsWmm; 1536 1537 /* 1538 * Set information element header 1539 */ 1540 pCfg->EleHdr.id = ACX_CONFIG_PS_WMM; 1541 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 1542 1543 pCfg->ConfigPsOnWmmMode = enableWA; 1544 1545 /* Report the meesage only if we are using the WiFi patch */ 1546 if (enableWA) 1547 { 1548 TRACE0(pCmdBld->hReport, REPORT_SEVERITY_CONSOLE, "cmdBld_CfgIePsWmm: PS is on WMM mode\n"); 1549 WLAN_OS_REPORT(("%s PS is on WMM mode\n",__FUNCTION__)); 1550 } 1551 1552 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 1553 } 1554 1555 /**************************************************************************** 1556 * cmdBld_CfgIeRssiSnrTrigger() 1557 **************************************************************************** 1558 * DESCRIPTION: Configure the RSSI/SNR Trigger parameters 1559 * 1560 * INPUTS: None 1561 * 1562 * OUTPUT: None 1563 * 1564 * RETURNS: OK or NOK 1565 ****************************************************************************/ 1566 TI_STATUS cmdBld_CfgIeRssiSnrTrigger (TI_HANDLE hCmdBld, RssiSnrTriggerCfg_t *pTriggerParam, void *fCb, TI_HANDLE hCb) 1567 { 1568 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1569 ACXRssiSnrTriggerCfg_t tAcxTriggerParameters; 1570 ACXRssiSnrTriggerCfg_t *pCfg = &tAcxTriggerParameters; 1571 1572 pCfg->param.index = pTriggerParam->index ; 1573 pCfg->param.threshold = pTriggerParam->threshold; 1574 pCfg->param.pacing = pTriggerParam->pacing ; 1575 pCfg->param.metric = pTriggerParam->metric ; 1576 pCfg->param.type = pTriggerParam->type ; 1577 pCfg->param.direction = pTriggerParam->direction; 1578 pCfg->param.hystersis = pTriggerParam->hystersis; 1579 pCfg->param.enable = pTriggerParam->enable ; 1580 1581 /* Set information element header */ 1582 pCfg->EleHdr.id = ACX_RSSI_SNR_TRIGGER; 1583 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 1584 1585 TRACE8(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , "ID=%u: threshold=%u, pacing=%u, metric=%u, type=%u, dir=%u, hyst=%u, enable=%u\n", pTriggerParam->index, pTriggerParam->threshold, pTriggerParam->pacing, pTriggerParam->metric, pTriggerParam->type, pTriggerParam->direction, pTriggerParam->hystersis, pTriggerParam->enable); 1586 1587 /* Send the configuration command */ 1588 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 1589 } 1590 1591 /**************************************************************************** 1592 * cmdBld_CfgIeRssiSnrWeights() 1593 **************************************************************************** 1594 * DESCRIPTION: Configure the RSSI/SNR Trigger parameters 1595 * 1596 * INPUTS: None 1597 * 1598 * OUTPUT: None 1599 * 1600 * RETURNS: OK or NOK 1601 ****************************************************************************/ 1602 TI_STATUS cmdBld_CfgIeRssiSnrWeights (TI_HANDLE hCmdBld, RssiSnrAverageWeights_t *pWeightsParam, void *fCb, TI_HANDLE hCb) 1603 { 1604 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1605 ACXRssiSnrAverageWeights_t tAcxAverageWeights; 1606 ACXRssiSnrAverageWeights_t *pCfg = &tAcxAverageWeights; 1607 1608 pCfg->param.rssiBeaconAverageWeight = pWeightsParam->rssiBeaconAverageWeight; 1609 pCfg->param.rssiPacketAverageWeight = pWeightsParam->rssiPacketAverageWeight; 1610 pCfg->param.snrBeaconAverageWeight = pWeightsParam->snrBeaconAverageWeight ; 1611 pCfg->param.snrPacketAverageWeight = pWeightsParam->snrPacketAverageWeight ; 1612 1613 /* Set information element header */ 1614 pCfg->EleHdr.id = ACX_RSSI_SNR_WEIGHTS; 1615 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 1616 1617 TRACE4(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , "rssi-beacon-avg-weight=%u, rssi-packet-avg-weight=%u, snr-beacon-avg-weight=%u, snr-packet-avg-weight=%u", pWeightsParam->rssiBeaconAverageWeight, pWeightsParam->rssiPacketAverageWeight, pWeightsParam->snrBeaconAverageWeight, pWeightsParam->snrPacketAverageWeight); 1618 1619 /* Send the configuration command */ 1620 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 1621 } 1622 1623 1624 /* 1625 * ---------------------------------------------------------------------------- 1626 * Function : cmdBld_CfgIeBet 1627 * 1628 * Input : enabled - 0 to disable BET, 0 to disable BET 1629 * MaximumConsecutiveET - Max number of consecutive beacons 1630 * that may be early terminated. 1631 * Output : TI_STATUS 1632 * Process : Configures Beacon Early Termination information element. 1633 * Note(s) : None 1634 * ----------------------------------------------------------------------------- 1635 */ 1636 TI_STATUS cmdBld_CfgIeBet (TI_HANDLE hCmdBld, TI_UINT8 Enable, TI_UINT8 MaximumConsecutiveET, void *fCb, TI_HANDLE hCb) 1637 { 1638 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1639 1640 ACXBet_Enable_t ACXBet_Enable; 1641 ACXBet_Enable_t* pCfg = &ACXBet_Enable; 1642 1643 /* Set information element header */ 1644 pCfg->EleHdr.id = ACX_BET_ENABLE; 1645 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 1646 1647 /* Set configuration fields */ 1648 pCfg->Enable = Enable; 1649 pCfg->MaximumConsecutiveET = MaximumConsecutiveET; 1650 1651 TRACE2(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, ": Sending info elem to firmware, Enable=%d, MaximumConsecutiveET=%d\n", (TI_UINT32)pCfg->Enable, (TI_UINT32)pCfg->MaximumConsecutiveET); 1652 1653 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 1654 } 1655 1656 /**************************************************************************** 1657 * cmdBld_CmdIeConfigureKeepAliveParams() 1658 **************************************************************************** 1659 * DESCRIPTION: Configure keep-alive parameters for a single template 1660 * 1661 * INPUTS: hCmdBld - handle to command builder object 1662 * uIndex - keep-alive index 1663 * uEnaDisFlag - whether keep-alive is enabled or disables 1664 * trigType - send keep alive when TX is idle or always 1665 * interval - keep-alive interval 1666 * fCB - callback function for command complete 1667 * hCb - handle to be apssed to callback function 1668 * 1669 * OUTPUT: None 1670 * 1671 * RETURNS: OK or NOK 1672 ****************************************************************************/ 1673 TI_STATUS cmdBld_CmdIeConfigureKeepAliveParams (TI_HANDLE hCmdBld, TI_UINT8 uIndex, 1674 TI_UINT8 uEnaDisFlag, TI_UINT8 trigType, 1675 TI_UINT32 interval, void *fCb, TI_HANDLE hCb) 1676 { 1677 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1678 AcxSetKeepAliveConfig_t ACXKeepAlive; 1679 1680 /* set IE header */ 1681 ACXKeepAlive.EleHdr.id = ACX_SET_KEEP_ALIVE_CONFIG; 1682 ACXKeepAlive.EleHdr.len = sizeof (AcxSetKeepAliveConfig_t) - sizeof (EleHdrStruct); 1683 1684 /* set Keep-Alive values */ 1685 ACXKeepAlive.index = uIndex; 1686 ACXKeepAlive.period = interval; 1687 ACXKeepAlive.trigger = trigType; 1688 ACXKeepAlive.valid = uEnaDisFlag; 1689 1690 TRACE4(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, ": Sending info elem to firmware, index=%d, enaDis=%d, trigType=%d, interval=%d\n", (TI_UINT32)ACXKeepAlive.index, (TI_UINT32)ACXKeepAlive.valid, (TI_UINT32)ACXKeepAlive.trigger, (TI_UINT32)ACXKeepAlive.period); 1691 1692 /* send the command to the FW */ 1693 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, &ACXKeepAlive, sizeof(AcxSetKeepAliveConfig_t), fCb, hCb, NULL); 1694 } 1695 1696 /**************************************************************************** 1697 * cmdBld_CmdIeConfigureKeepAliveParams() 1698 **************************************************************************** 1699 * DESCRIPTION: Configure keep-alive global enable / disable flag 1700 * 1701 * INPUTS: enable / disable flag 1702 * 1703 * OUTPUT: None 1704 * 1705 * RETURNS: OK or NOK 1706 ****************************************************************************/ 1707 TI_STATUS cmdBld_CmdIeConfigureKeepAliveEnaDis (TI_HANDLE hCmdBld, TI_UINT8 enaDisFlag, 1708 void *fCb, TI_HANDLE hCb) 1709 { 1710 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1711 AcxKeepAliveMode ACXKeepAliveMode; 1712 1713 /* set IE header */ 1714 ACXKeepAliveMode.EleHdr.id = ACX_KEEP_ALIVE_MODE; 1715 ACXKeepAliveMode.EleHdr.len = sizeof (AcxKeepAliveMode) - sizeof (EleHdrStruct); 1716 1717 /* set Keep-Alive mode */ 1718 ACXKeepAliveMode.modeEnabled = enaDisFlag; 1719 1720 TRACE1(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, ": Sending info elem to firmware, enaDis=%d\n", (TI_UINT32)ACXKeepAliveMode.modeEnabled); 1721 1722 /* send the command to the FW */ 1723 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, &ACXKeepAliveMode, sizeof(AcxKeepAliveMode), fCb, hCb, NULL); 1724 } 1725 1726 /** 1727 * \fn cmdBld_CfgIeSetFwHtCapabilities 1728 * \brief set the current AP HT Capabilities to the FW. 1729 * 1730 * \note 1731 * \return TI_OK on success or TI_NOK on failure 1732 * \sa 1733 */ 1734 TI_STATUS cmdBld_CfgIeSetFwHtCapabilities (TI_HANDLE hCmdBld, 1735 TI_UINT32 uHtCapabilites, 1736 TMacAddr tMacAddress, 1737 TI_UINT8 uAmpduMaxLeng, 1738 TI_UINT8 uAmpduMinSpac, 1739 void *fCb, 1740 TI_HANDLE hCb) 1741 { 1742 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1743 TAxcHtCapabilitiesIeFwInterface tAcxFwHtCap; 1744 TAxcHtCapabilitiesIeFwInterface *pCfg = &tAcxFwHtCap; 1745 1746 /* Set information element header */ 1747 pCfg->EleHdr.id = ACX_PEER_HT_CAP; 1748 pCfg->EleHdr.len = sizeof(tAcxFwHtCap) - sizeof(EleHdrStruct); 1749 1750 MAC_COPY (pCfg->aMacAddress, tMacAddress); 1751 pCfg->uHtCapabilites = uHtCapabilites; 1752 pCfg->uAmpduMaxLength = uAmpduMaxLeng; 1753 pCfg->uAmpduMinSpacing = uAmpduMinSpac; 1754 1755 TRACE9(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "cmdBld_CfgIeSetFwHtCapabilities: HtCapabilites=0x%x, AmpduMaxLength=%d, AmpduMinSpac=%d, MAC: %x:%x:%x:%x:%x:%x\n", uHtCapabilites, uAmpduMaxLeng, uAmpduMinSpac, pCfg->aMacAddress[0], pCfg->aMacAddress[1], pCfg->aMacAddress[2], pCfg->aMacAddress[3], pCfg->aMacAddress[4], pCfg->aMacAddress[5]); 1756 1757 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(TAxcHtCapabilitiesIeFwInterface), fCb, hCb, NULL); 1758 1759 } 1760 1761 /** 1762 * \fn cmdBld_CfgIeSetFwHtInformation 1763 * \brief set the current AP HT Information to the FW. 1764 * 1765 * \note 1766 * \return TI_OK on success or TI_NOK on failure 1767 * \sa 1768 */ 1769 TI_STATUS cmdBld_CfgIeSetFwHtInformation (TI_HANDLE hCmdBld, 1770 TI_UINT8 uRifsMode, 1771 TI_UINT8 uHtProtection, 1772 TI_UINT8 uGfProtection, 1773 TI_UINT8 uHtTxBurstLimit, 1774 TI_UINT8 uDualCtsProtection, 1775 void *fCb, 1776 TI_HANDLE hCb) 1777 { 1778 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1779 TAxcHtInformationIeFwInterface tAcxFwHtInf; 1780 TAxcHtInformationIeFwInterface *pCfg = &tAcxFwHtInf; 1781 1782 /* Set information element header */ 1783 pCfg->EleHdr.id = ACX_HT_BSS_OPERATION; 1784 pCfg->EleHdr.len = sizeof(tAcxFwHtInf) - sizeof(EleHdrStruct); 1785 1786 pCfg->uRifsMode = uRifsMode; 1787 pCfg->uHtProtection = uHtProtection; 1788 pCfg->uGfProtection = uGfProtection; 1789 pCfg->uHtTxBurstLimit = uHtTxBurstLimit; 1790 pCfg->uDualCtsProtection = uDualCtsProtection; 1791 1792 TRACE5(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "cmdBld_CfgIeSetFwHtInformation: RifsMode=0x%x, HtProtection=0x%x, GfProtection=0x%x, HtTxBurstLimit=0x%x, DualCtsProtection=0x%x\n", uRifsMode, uHtProtection, uGfProtection, uHtTxBurstLimit, uDualCtsProtection); 1793 1794 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(TAxcHtInformationIeFwInterface), fCb, hCb, NULL); 1795 } 1796 1797 /** 1798 * \fn cmdBld_CfgIeSetBaSession 1799 * \brief configure BA session initiator\receiver parameters setting in the FW. 1800 * 1801 * \note 1802 * \return TI_OK on success or TI_NOK on failure 1803 * \sa 1804 */ 1805 TI_STATUS cmdBld_CfgIeSetBaSession (TI_HANDLE hCmdBld, 1806 InfoElement_e eBaType, 1807 TI_UINT8 uTid, 1808 TI_UINT8 uState, 1809 TMacAddr tRa, 1810 TI_UINT16 uWinSize, 1811 TI_UINT16 uInactivityTimeout, 1812 void *fCb, 1813 TI_HANDLE hCb) 1814 { 1815 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1816 TAxcBaSessionInitiatorResponderPolicy tAcxBaSessionPrm; 1817 TAxcBaSessionInitiatorResponderPolicy *pCfg = &tAcxBaSessionPrm; 1818 1819 /* Set information element header */ 1820 pCfg->EleHdr.id = eBaType; 1821 pCfg->EleHdr.len = sizeof(tAcxBaSessionPrm) - sizeof(EleHdrStruct); 1822 1823 MAC_COPY (pCfg->aMacAddress, tRa); 1824 pCfg->uTid = uTid; 1825 pCfg->uPolicy = uState; 1826 pCfg->uWinSize = uWinSize; 1827 1828 if (eBaType == ACX_BA_SESSION_INITIATOR_POLICY) 1829 { 1830 pCfg->uInactivityTimeout = uInactivityTimeout; 1831 } 1832 else 1833 { 1834 if (eBaType == ACX_BA_SESSION_RESPONDER_POLICY) 1835 { 1836 pCfg->uInactivityTimeout = 0; 1837 } 1838 else 1839 { 1840 TRACE1(pCmdBld->hReport, REPORT_SEVERITY_ERROR, "cmdBld_CfgIeSetBaSession: error ID=%u\n", pCfg->EleHdr.id); 1841 return TI_NOK; 1842 } 1843 } 1844 1845 TRACE10(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "cmdBld_CfgIeSetBaSession: ID=, TID=%u, Policy=%u, MAC: %x:%x:%x:%x:%x:%x, uWinSize=%u, Timeout=%u\n", pCfg->uTid, pCfg->uPolicy, pCfg->aMacAddress[0], pCfg->aMacAddress[1], pCfg->aMacAddress[2], pCfg->aMacAddress[3], pCfg->aMacAddress[4], pCfg->aMacAddress[5], pCfg->uWinSize, pCfg->uInactivityTimeout); 1846 1847 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(TAxcBaSessionInitiatorResponderPolicy), fCb, hCb, NULL); 1848 } 1849 1850 /** 1851 * \fn cmdBld_CfgIeRadioParams 1852 * \brief configure radio parameters setting in the FW. 1853 * 1854 * \note 1855 * \return TI_OK on success or TI_NOK on failure 1856 * \sa 1857 */ 1858 TI_STATUS cmdBld_CfgIeRadioParams (TI_HANDLE hCmdBld, IniFileRadioParam *pIniFileRadioParams, void *fCb, TI_HANDLE hCb) 1859 { 1860 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1861 TI_STATUS status = TI_NOK; 1862 TTestCmd *pTestCmd; 1863 1864 pTestCmd = os_memoryAlloc(pCmdBld->hOs, sizeof(TTestCmd)); 1865 if (!pTestCmd) 1866 { 1867 return status; 1868 } 1869 1870 pTestCmd->testCmdId = TEST_CMD_INI_FILE_RADIO_PARAM; 1871 1872 os_memoryCopy(pCmdBld->hOs, &pTestCmd->testCmd_u.IniFileRadioParams, pIniFileRadioParams, sizeof(IniFileRadioParam)); 1873 1874 status = cmdQueue_SendCommand (pCmdBld->hCmdQueue, 1875 CMD_TEST, 1876 (void *)pTestCmd, 1877 sizeof(IniFileRadioParam) + 4, 1878 fCb, 1879 hCb, 1880 NULL); 1881 os_memoryFree(pCmdBld->hOs, pTestCmd, sizeof(TTestCmd)); 1882 return status; 1883 } 1884 1885 1886 /** 1887 * \fn cmdBld_CfgIeExtendedRadioParams 1888 * \brief configure extended radio parameters setting in the 1889 * FW. 1890 * 1891 * \note 1892 * \return TI_OK on success or TI_NOK on failure 1893 * \sa 1894 */ 1895 TI_STATUS cmdBld_CfgIeExtendedRadioParams (TI_HANDLE hCmdBld, 1896 IniFileExtendedRadioParam *pIniFileExtRadioParams, 1897 void *fCb, 1898 TI_HANDLE hCb) 1899 { 1900 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1901 TI_STATUS status = TI_NOK; 1902 TTestCmd *pTestCmd; 1903 1904 pTestCmd = os_memoryAlloc(pCmdBld->hOs, sizeof(TTestCmd)); 1905 if (!pTestCmd) 1906 { 1907 return status; 1908 } 1909 1910 pTestCmd->testCmdId = TEST_CMD_INI_FILE_RF_EXTENDED_PARAM; 1911 1912 os_memoryCopy(pCmdBld->hOs, &pTestCmd->testCmd_u.IniFileExtendedRadioParams, 1913 pIniFileExtRadioParams, sizeof(IniFileExtendedRadioParam)); 1914 1915 status = cmdQueue_SendCommand (pCmdBld->hCmdQueue, 1916 CMD_TEST, 1917 (void *)pTestCmd, 1918 sizeof(IniFileExtendedRadioParam) + 4, 1919 fCb, 1920 hCb, 1921 NULL); 1922 os_memoryFree(pCmdBld->hOs, pTestCmd, sizeof(TTestCmd)); 1923 return status; 1924 } 1925 1926 1927 TI_STATUS cmdBld_CfgPlatformGenParams (TI_HANDLE hCmdBld, IniFileGeneralParam *pGenParams, void *fCb, TI_HANDLE hCb) 1928 { 1929 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1930 TI_STATUS status = TI_NOK; 1931 TTestCmd *pTestCmd; 1932 1933 pTestCmd = os_memoryAlloc(pCmdBld->hOs, sizeof(TTestCmd)); 1934 if (!pTestCmd) 1935 { 1936 return status; 1937 } 1938 1939 pTestCmd->testCmdId = TEST_CMD_INI_FILE_GENERAL_PARAM; 1940 1941 os_memoryCopy(pCmdBld->hOs, &pTestCmd->testCmd_u.IniFileGeneralParams, pGenParams, sizeof(IniFileGeneralParam)); 1942 1943 status = cmdQueue_SendCommand (pCmdBld->hCmdQueue, 1944 CMD_TEST, 1945 (void *)pTestCmd, 1946 sizeof(IniFileGeneralParam), 1947 fCb, 1948 hCb, 1949 NULL); 1950 os_memoryFree(pCmdBld->hOs, pTestCmd, sizeof(TTestCmd)); 1951 return status; 1952 } 1953 1954 1955 /**************************************************************************** 1956 * cmdBld_CfgIeBurstMode() 1957 **************************************************************************** 1958 * DESCRIPTION: Configure burst mode 1959 * 1960 * INPUTS: hCmdBld - handle to command builder object 1961 * bEnabled - is enabled flag 1962 * fCB - callback function for command complete 1963 * hCb - handle to be apssed to callback function 1964 * 1965 * OUTPUT: None 1966 * 1967 * RETURNS: OK or NOK 1968 ****************************************************************************/ 1969 TI_STATUS cmdBld_CfgIeBurstMode (TI_HANDLE hCmdBld, TI_BOOL bEnabled, void *fCb, TI_HANDLE hCb) 1970 { 1971 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 1972 AcxBurstMode tAcxBurstMode; 1973 AcxBurstMode *pCfg = &tAcxBurstMode; 1974 1975 /* set IE header */ 1976 pCfg->EleHdr.id = ACX_BURST_MODE; 1977 pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); 1978 1979 /* set burst mode value */ 1980 pCfg->enable = (uint8)bEnabled; 1981 1982 /* send the command to the FW */ 1983 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); 1984 } 1985 1986 1987 /**************************************************************************** 1988 * cmdBld_CfgIeDcoItrimParams() 1989 **************************************************************************** 1990 * DESCRIPTION: Configure/Interrogate the DCO Itrim parameters 1991 * 1992 * INPUTS: 1993 * 1994 * OUTPUT: None 1995 * 1996 * RETURNS: TI_OK or TI_NOK 1997 ****************************************************************************/ 1998 TI_STATUS cmdBld_CfgIeDcoItrimParams (TI_HANDLE hCmdBld, TI_BOOL enable, TI_UINT32 moderationTimeoutUsec, void *fCb, TI_HANDLE hCb) 1999 { 2000 TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; 2001 ACXDCOItrimParams_t ACXBeaconFilterOptions; 2002 ACXDCOItrimParams_t *pCfg = &ACXBeaconFilterOptions; 2003 2004 pCfg->enable = enable; 2005 pCfg->moderation_timeout_usec = moderationTimeoutUsec; 2006 2007 /* Set information element header */ 2008 pCfg->EleHdr.id = ACX_SET_DCO_ITRIM_PARAMS; 2009 pCfg->EleHdr.len = sizeof(ACXDCOItrimParams_t) - sizeof(EleHdrStruct); 2010 2011 TRACE3(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , "ID=%u: enable=%u, moderation_timeout_usec=%u\n", pCfg->EleHdr.id, enable, moderationTimeoutUsec); 2012 2013 return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(ACXDCOItrimParams_t), fCb, hCb, NULL); 2014 } 2015