Home | History | Annotate | Download | only in hl_ctrl
      1 /****************************************************************************
      2 **+-----------------------------------------------------------------------+**
      3 **|                                                                       |**
      4 **| Copyright(c) 1998 - 2008 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 
     36 #include "whalCommon.h"
     37 #include "whalCtrl_api.h"
     38 #include "whalCtrl.h"
     39 #include "txHwQueue_api.h"
     40 #include "txXfer_api.h"
     41 #include "txResult_api.h"
     42 #include "whalSecurity.h"
     43 #include "eventMbox_api.h"
     44 #include "whalBus_Api.h"
     45 #include "TNETW_Driver_api.h"
     46 #include "commonTypes.h"
     47 #include "TNETW_Driver.h"
     48 #include "DebugTraceXfer_api.h"
     49 #include "FwEvent_api.h"
     50 
     51 /*
     52     Rx filter field is mostly hard-coded.
     53    This filter value basically pass only valid beacons / probe responses. For exact bit description,
     54    consult either the DPG or the FPG (or both, and Yoel...)
     55 */
     56 #define CFG_RX_PRSP_EN_ 4
     57 #define CFG_RX_MGMT_EN_ 0x10
     58 #define CFG_RX_BCN_EN_  0x200
     59 #define RX_FILTER_CFG_ (CFG_RX_PRSP_EN_ | CFG_RX_MGMT_EN_ | CFG_RX_BCN_EN_)
     60 
     61 #define SIZE_OF_HEADER 4
     62 
     63 void whalCtrl_PrintAll (TI_HANDLE hWhalCtrl);
     64 
     65 
     66 #ifdef ROAMING_TRIGGER_DBG
     67 static void whalCtrl_dbg_RSSI_LEVEL(TI_HANDLE hWhalCtrl,char* str , UINT32 strLen);
     68 TI_STATUS whalCtrl_dbg_SYNCHRONIZATION(TI_HANDLE hWhalCtrl);
     69 TI_STATUS whalCtrl_dbg_BSS_LOSE(TI_HANDLE hWhalCtrl);
     70 TI_STATUS whalCtrl_dbg_MAX_TX_RETRY(TI_HANDLE hWhalCtrl);
     71 TI_STATUS whalCtrl_dbgRegisterRoamingEventCB(TI_HANDLE hWhalCtrl);
     72 int whalCtrl_dbgRoamingCommands (TI_HANDLE hWhalCtrl);
     73 #endif
     74 
     75 static int whalCtrl_ReadTemplateFrameMib(TI_HANDLE hWhalCtrl, TI_HANDLE CB_Handle, void* CB_Func, void* CB_Buf);
     76 static int whalCtrl_WriteTemplateFrameMib(TI_HANDLE hWhalCtrl, PLT_MIB_t* pMib);
     77 static int whalCtrl_PltMibSetBeaconFilterIETable(TI_HANDLE hWhalCtrl, PLT_MIB_t* pMib);
     78 static int whalCtrl_PltMibGetBeaconFilterIETable(TI_HANDLE hWhalCtrl, TI_HANDLE CB_Handle, void* CB_Func, void* CB_Buf);
     79 static int whalCtrl_PLT_ReadMIB_TxRatePolicy(TI_HANDLE hWhalCtrl, TI_HANDLE CB_Handle, void* CB_Func, void* CB_Buf);
     80 static int whalCtrl_PLT_WriteMIB_TxRatePolicy(TI_HANDLE hWhalCtrl, PLT_MIB_t* pMib);
     81 
     82 /*
     83  * ----------------------------------------------------------------------------
     84  * Function : whalCtrl_Create
     85  *
     86  * Input    :
     87  * Output   :
     88  * Process  :
     89  * Note(s)  :  Done
     90  * -----------------------------------------------------------------------------
     91  */
     92 TI_HANDLE whalCtrl_Create (TI_HANDLE hOs)
     93 {
     94     WHAL_CTRL       *pWhalCtrl;
     95     WlanParams_T    *pWlanParams;
     96     DmaParams_T     *pDmaParams;
     97 
     98     /*
     99     allocate the HAL Ctrl
    100     */
    101     pWhalCtrl = (WHAL_CTRL *)os_memoryAlloc (hOs, sizeof(WHAL_CTRL));
    102     if (pWhalCtrl == NULL)
    103     {
    104         WLAN_OS_REPORT(("whalCtrl_Create: Error memory Allocation\n"));
    105         return NULL;
    106     }
    107     os_memoryZero (hOs, (void *)pWhalCtrl, sizeof(WHAL_CTRL));
    108 
    109     pWhalCtrl->hOs = hOs;
    110     pWhalCtrl->EncDecEnableFlag = FALSE;
    111 
    112 
    113     /*
    114     Create the Params object
    115     */
    116     pWhalCtrl->pWhalParams = whal_params_Create (hOs,TRUE);
    117     if (pWhalCtrl->pWhalParams == NULL)
    118     {
    119         WLAN_OS_REPORT(("whalCtrl_Create: Error whal_params_Create\n"));
    120         whalCtrl_Destroy(pWhalCtrl);
    121         return NULL;
    122     }
    123 
    124     /* Initialize the Params object database fields*/
    125     pWlanParams = whal_ParamsGetWlanParams(pWhalCtrl->pWhalParams);
    126     pWlanParams->hwAccessMethod = HW_ACCESS_BUS_SLAVE_INDIRECT;
    127     pWlanParams->maxSitesFragCollect = HAL_CTRL_SITE_FRAG_COLLECT_DEF;
    128     pWlanParams->RtsThreshold       = HAL_CTRL_RTS_THRESHOLD_DEF;
    129     pWlanParams->bJoin              = FALSE;
    130 
    131     /*soft gemini defaults*/
    132     pWlanParams->SoftGeminiEnable   = SG_DISABLE;
    133 
    134 
    135     /*becon filter defaults*/
    136     pWlanParams->beaconFilterParams.desiredState    = FALSE;
    137     pWlanParams->beaconFilterParams.numOfElements   = DEF_NUM_STORED_FILTERS;
    138     pWlanParams->beaconFilterIETable.numberOfIEs    = DEF_BEACON_FILTER_IE_TABLE_NUM;
    139     pWlanParams->beaconFilterIETable.IETableSize        = BEACON_FILTER_IE_TABLE_DEF_SIZE;
    140 
    141 
    142     /* set the dma params */
    143     pDmaParams = whal_ParamsGetDmaParams(pWhalCtrl->pWhalParams);
    144     whal_ParamsSetDmaParams(pWhalCtrl->pWhalParams);
    145 
    146 
    147 
    148     /*
    149     Configure the hardware control object
    150     */
    151     pWhalCtrl->pHwCtrl = whal_hwCtrl_Create(hOs, pWhalCtrl->pWhalParams);
    152     if (pWhalCtrl->pHwCtrl == NULL)
    153     {
    154         WLAN_OS_REPORT(("whalCtrl_Create: Error whal_hwCtrl_Create\n"));
    155         whalCtrl_Destroy(pWhalCtrl);
    156         return NULL;
    157     }
    158 
    159     /* set the Roaming  params */
    160     /* Configure  the Low RSSI, the Low SNR and the Missed beacon Defaults */
    161     whal_ParamsSetRoamingParams(pWhalCtrl->pWhalParams);
    162 
    163 
    164     /*
    165     Create the Security Object
    166     */
    167     pWhalCtrl->pWhalSecurity = whalSecur_Create (hOs, pWhalCtrl, pDmaParams->NumStations);
    168 
    169     if (pWhalCtrl->pWhalSecurity == NULL)
    170     {
    171         WLAN_OS_REPORT(("whalCtrl_Create: Error whalSecur_Create\n"));
    172         whalCtrl_Destroy(pWhalCtrl);
    173         return NULL;
    174     }
    175 
    176 
    177     WLAN_INIT_REPORT(("whalCtrl_Create end %x\n",(TI_HANDLE)pWhalCtrl));
    178 
    179     return (pWhalCtrl);
    180 }
    181 
    182 /*
    183  * ----------------------------------------------------------------------------
    184  * Function : whalCtrl_GetSetHwAddr
    185  *
    186  * Input    :
    187  * Output   :
    188  * Process  :  Configure the hardware control object
    189  * Note(s)  :  Done
    190  * -----------------------------------------------------------------------------
    191  */
    192 int whalCtrl_GetSetHwAddr (WHAL_CTRL* pWhalCtrl, TI_HANDLE hMemMgr,UINT32 *pFWImage)
    193 {
    194     int Status;
    195     UINT32 AcxRegAddr;
    196     UINT32 AcxMemAddr;
    197 
    198     /*
    199      * Initiate and get the wlan hardware register and memory addresses
    200      */
    201     AcxRegAddr = (UINT32)os_hwGetRegistersAddr(pWhalCtrl->hOs);
    202     AcxMemAddr = (UINT32)os_hwGetMemoryAddr(pWhalCtrl->hOs);
    203 
    204     /* Get the handle of the Interrupt handler object */
    205     pWhalCtrl->hWhalBus = whal_hwCtrl_GetBusHandle(pWhalCtrl->pHwCtrl);
    206 
    207     /*
    208      * Configure wlan hardware control object
    209      */
    210     Status = whal_hwCtrl_Config( pWhalCtrl->pHwCtrl,(TI_HANDLE)pWhalCtrl,
    211                                  whal_ParamsGetWlanParams(pWhalCtrl->pWhalParams)->hwAccessMethod,
    212                                  AcxRegAddr,
    213                                  AcxMemAddr,
    214                                  pWhalCtrl->hReport,
    215                                  hMemMgr,
    216                                  pFWImage,
    217 
    218                                  pWhalCtrl->hEventMbox);
    219     if (Status == TNETWIF_ERROR)
    220     {
    221         WLAN_REPORT_ERROR(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,  (" whalCtrl_GetSetHwAddr: whal_hwCtrl_Config failure \n"));
    222     }
    223 
    224     return Status;
    225 }
    226 
    227 
    228 typedef int (*fcallback_t) (TI_HANDLE);
    229 
    230 
    231 /*
    232  * ----------------------------------------------------------------------------
    233  * Function : whalCtrl_ConfigHwCb2
    234  *
    235  * Input    :
    236  * Output   :
    237  * Process  :  last configuration call to the low level hal
    238  * Note(s)  :  Done
    239  * -----------------------------------------------------------------------------
    240  */
    241 static int whalCtrl_ConfigHwCb2 (TI_HANDLE hWhalCtrl, TI_STATUS status)
    242 {
    243     WHAL_CTRL    *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
    244 
    245     if (status != OK)
    246     {
    247         return NOK;
    248     }
    249 
    250     /* Call the upper layer callback */
    251     return (*((fcallback_t)pWhalCtrl->fCb)) (pWhalCtrl->hCb);
    252 }
    253 
    254 
    255 /*
    256  * ----------------------------------------------------------------------------
    257  * Function : whalCtrl_ConfigHwCb1
    258  *
    259  * Input    :
    260  * Output   :
    261  * Process  :  last configuration call to the low level hal
    262  * Note(s)  :  Done
    263  * -----------------------------------------------------------------------------
    264  */
    265 static int whalCtrl_ConfigHwCb1 (TI_HANDLE hWhalCtrl, TI_STATUS status)
    266 {
    267     WHAL_CTRL    *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
    268     DmaParams_T  *pDmaParams = whal_ParamsGetDmaParams (pWhalCtrl->pWhalParams);
    269 
    270     /*
    271      * Store the addresses of the double buffer (Rx/Tx)
    272      * and the path status and control (Tx/Rx) in the corresponding modules
    273      */
    274 	FwEvent_SetHwInfo (pWhalCtrl->hFwEvent, &(pWhalCtrl->pHwCtrl->DataPathParams));
    275 
    276     txXfer_setHwInfo (pWhalCtrl->hTxXfer, &(pWhalCtrl->pHwCtrl->DataPathParams));
    277 
    278     txResult_setHwInfo (pWhalCtrl->hTxResult, &(pWhalCtrl->pHwCtrl->DataPathParams));
    279 
    280     rxXfer_SetDoubleBufferAddr (pWhalCtrl->hRxXfer, &(pWhalCtrl->pHwCtrl->DataPathParams));
    281 
    282     /* Provide number of HW Tx-blocks and descriptors to Tx-HW-Queue module */
    283     txHwQueue_setHwInfo (pWhalCtrl->hTxHwQueue, pDmaParams);
    284 
    285   #ifdef TI_DBG
    286     /* Set the debug trace addresses */
    287     debugTrace_ConfigHw (pWhalCtrl->hDebugTrace,
    288                          (UINT32)pWhalCtrl->pHwCtrl->MemMap.debugBuffer1Start,
    289                          (UINT32)pWhalCtrl->pHwCtrl->MemMap.debugBuffer2Start);
    290   #endif /* TI_DBG */
    291 
    292     /*
    293      * Register all health/sanityCheck/Recovery callbacks
    294      * --------------------------------------------------
    295      *      DeviceError - CORE callback for full recovery
    296      *      HealthReport - Event Mbox callback for extracting device error
    297      *      MacStatus - Event Mbox callback for checkHwStatus FCS_ERR, RX_FREE_MEM regs
    298      *      AciIndication - Event Mbox callback for accumulate SCR_PAD8 image
    299      *      Mailbox error - Mailbox queue callback for case of timeout/error
    300      *      Power control error - PowerMngr callback in case of power ctrl timeout
    301      *      Failure event - CORE Callback in case of MailboxError or PowerCtrl error
    302      */
    303   #ifdef USE_RECOVERY
    304     whalCtrl_RegisterErrorsCallbacks (hWhalCtrl);
    305   #endif
    306 
    307   #ifdef ROAMING_TRIGGER_DBG
    308     whalCtrl_dbgRegisterRoamingEventCB (hWhalCtrl);
    309     whalCtrl_dbgRoamingCommands (hWhalCtrl);
    310   #endif
    311 
    312     return whal_hwInfoElemMiscTableGet (pWhalCtrl->pHwCtrl->pHwMboxConfig,
    313                                         &pWhalCtrl->misc,
    314                                         (void *)whalCtrl_ConfigHwCb2,
    315                                         hWhalCtrl);
    316 }
    317 
    318 
    319 /*
    320  * ----------------------------------------------------------------------------
    321  * Function : whalCtrl_ConfigHw
    322  *
    323  * Input    :
    324  * Output   :
    325  * Process  :  last configuration call to the low level hal
    326  * Note(s)  :  Done
    327  * -----------------------------------------------------------------------------
    328  */
    329 int whalCtrl_ConfigHw
    330 (
    331     TI_HANDLE              hWhalCtrl,
    332     TnetwDrv_InitParams_t *pInitParams,
    333     void                  *fCb,
    334     TI_HANDLE              hCb
    335 )
    336 {
    337     WHAL_CTRL       *pWhalCtrl      = (WHAL_CTRL *)hWhalCtrl;
    338     TxParam_t       *pTxParams      = whal_ParamsGetTxParams (pWhalCtrl->pWhalParams);
    339     WlanParams_T    *pWlanParams    = whal_ParamsGetWlanParams (pWhalCtrl->pWhalParams);
    340     UINT8           acID;
    341     int k = 0;
    342 
    343     pWhalCtrl->fCb = fCb;
    344     pWhalCtrl->hCb = hCb;
    345 
    346     if (NULL != pInitParams)
    347     {
    348     /* whalCtrl_init_t */
    349     pWlanParams->PacketDetectionThreshold   = pInitParams->whalCtrl_init.packetDetectionThreshold;
    350     pWlanParams->qosNullDataTemplateSize    = pInitParams->whalCtrl_init.qosNullDataTemplateSize;
    351     pWlanParams->PsPollTemplateSize         = pInitParams->whalCtrl_init.PsPollTemplateSize;
    352     pWlanParams->probeResponseTemplateSize  = pInitParams->whalCtrl_init.probeResponseTemplateSize;
    353     pWlanParams->probeRequestTemplateSize   = pInitParams->whalCtrl_init.probeRequestTemplateSize;
    354     pWlanParams->beaconTemplateSize         = pInitParams->whalCtrl_init.beaconTemplateSize;
    355     pWlanParams->nullTemplateSize           = pInitParams->whalCtrl_init.nullTemplateSize;
    356     /* Beacon broadcast options */
    357     pWlanParams->BcnBrcOptions.BeaconRxTimeout      = pInitParams->whalCtrl_init.BeaconRxTimeout;
    358     pWlanParams->BcnBrcOptions.BroadcastRxTimeout   = pInitParams->whalCtrl_init.BroadcastRxTimeout;
    359     pWlanParams->BcnBrcOptions.RxBroadcastInPs      = pInitParams->whalCtrl_init.RxBroadcastInPs;
    360 
    361     pWlanParams->ConsecutivePsPollDeliveryFailureThreshold =
    362         pInitParams->whalCtrl_init.ConsecutivePsPollDeliveryFailureThreshold;
    363 
    364     pTxParams->txCompleteTimeout            = pInitParams->whalCtrl_init.txCompleteTimeout;
    365     pTxParams->txCompleteThreshold          = pInitParams->whalCtrl_init.txCompleteThreshold;
    366 
    367     /* halCtrlConfigParams_t */
    368     pWlanParams->RxEnergyDetection          = pInitParams->halCtrlConfigParams.halCtrlRxEnergyDetection;
    369     pWlanParams->TxEnergyDetection          = pInitParams->halCtrlConfigParams.halCtrlTxEnergyDetection;
    370     pWlanParams->ACIMode                    = pInitParams->halCtrlConfigParams.halCtrlACIMode;
    371     pWlanParams->inputCCA                   = pInitParams->halCtrlConfigParams.halCtrlInputCCA;
    372     pWlanParams->qualifiedCCA               = pInitParams->halCtrlConfigParams.halCtrlQualifiedCCA;
    373     pWlanParams->stompForRx                 = pInitParams->halCtrlConfigParams.halCtrlStompForRx;
    374     pWlanParams->stompForTx                 = pInitParams->halCtrlConfigParams.halCtrlStompForTx;
    375     pWlanParams->txCCA                      = pInitParams->halCtrlConfigParams.halCtrlTxCCA;
    376     pWlanParams->RxDisableBroadcast         = pInitParams->halCtrlConfigParams.halCtrlRxDisableBroadcast;
    377     pWlanParams->calibrationChannel2_4      = pInitParams->halCtrlConfigParams.halCtrlCalibrationChannel2_4;
    378     pWlanParams->calibrationChannel5_0      = pInitParams->halCtrlConfigParams.halCtrlCalibrationChannel5_0;
    379 
    380     /* Not used but need by Palau */
    381     pWlanParams->RtsThreshold               = pInitParams->halCtrlConfigParams.halCtrlRtsThreshold;
    382     pWlanParams->CtsToSelf                  = CTS_TO_SELF_DISABLE;
    383 
    384     pWlanParams->WiFiWmmPS 					= pInitParams->halCtrlConfigParams.WiFiWmmPS;
    385 
    386     pWlanParams->MaxTxMsduLifetime          = pInitParams->halCtrlConfigParams.halCtrlMaxTxMsduLifetime;
    387     pWlanParams->MaxRxMsduLifetime          = pInitParams->halCtrlConfigParams.halCtrlMaxRxMsduLifetime;
    388 
    389     pWlanParams->rxTimeOut.psPoll           = pInitParams->halCtrlConfigParams.rxTimeOut.psPoll;
    390     pWlanParams->rxTimeOut.UPSD             = pInitParams->halCtrlConfigParams.rxTimeOut.UPSD;
    391 
    392     /* No used */
    393     pWlanParams->FragmentThreshold          = pInitParams->halCtrlConfigParams.halCtrlFragThreshold;
    394     pWlanParams->ListenInterval             = (UINT8)pInitParams->halCtrlConfigParams.halCtrlListenInterval;
    395     pWlanParams->RateFallback               = pInitParams->halCtrlConfigParams.halCtrlRateFallbackRetry;
    396     pWlanParams->MacClock                   = pInitParams->halCtrlConfigParams.halCtrlMacClock;
    397     pWlanParams->ArmClock                   = pInitParams->halCtrlConfigParams.halCtrlArmClock;
    398     pWlanParams->Enable4x                   = pInitParams->halCtrlConfigParams.halCtrlEnable4x;
    399     pWlanParams->TxCompleteThreshold        = pInitParams->halCtrlConfigParams.halCtrlTxCompleteThreshold;
    400 
    401     /* Configure ARP IP */
    402 
    403     pWlanParams->isArpIpFilteringEnabled =  pInitParams->arpIpFilterParams.isFilterEnabled ;
    404     os_memoryCopy(pWhalCtrl->hOs,(void *)pWlanParams->arp_IP_addr.addr,(void *)pInitParams->arpIpFilterParams.arpIpInitParams.addr , IP_V4_ADDR_LEN) ;
    405 
    406     /* Configure address group */
    407     pWlanParams->numGroupAddrs = pInitParams->macAddrFilterParams.numOfMacAddresses;
    408     pWlanParams->isMacAddrFilteringnabled = pInitParams->macAddrFilterParams.isFilterEnabled;
    409 
    410     for (k = 0; k < pWlanParams->numGroupAddrs; k++)
    411     {
    412             os_memoryCopy (pWhalCtrl->hOs,(void*)pWlanParams->Group_addr[k].addr, (void*)pInitParams->macAddrFilterParams.macAddrTable[k].addr, MAC_ADDR_LEN);
    413     }
    414 
    415     /* Configure beacon timing (early wakeup parmeter) */
    416     pWlanParams->earlyWakeUp = pInitParams->macPreambleParams.earlyWakeUp;
    417 
    418     /* QoS configure queue */
    419     for (acID = 0; acID < MAX_NUM_OF_AC; acID++)
    420     {
    421         /*
    422          * Setting ac queues params for AccessCategoryCfg (TNET configuration)
    423          */
    424         pWlanParams->acQueuesParams[acID].acId                        = acID;
    425         pWlanParams->acQueuesParams[acID].qId                         = acID;
    426         pWlanParams->acQueuesParams[acID].percentOfBlockHighThreshold = pInitParams->whalCtrl_init.TxBlocksHighPercentPerAc[acID];
    427         pWlanParams->acQueuesParams[acID].percentOfBlockLowThreshold  = pInitParams->whalCtrl_init.TxBlocksLowPercentPerAc[acID];
    428     }
    429     }
    430 
    431     /*
    432      * Configure the WLAN hardware after config all the hardware objects
    433      */
    434     if (whal_hwCtrl_ConfigHw (pWhalCtrl->pHwCtrl, (void *)whalCtrl_ConfigHwCb1, hWhalCtrl, FALSE) != OK)
    435         return NOK;
    436 
    437     return OK;
    438 }
    439 
    440 
    441 /*
    442  * ----------------------------------------------------------------------------
    443  * Function : whalCtrl_Config
    444  *
    445  * Input    :
    446  * Output   :
    447  * Process  :
    448  * Note(s)  :  Done
    449  * -----------------------------------------------------------------------------
    450  */
    451 TI_STATUS whalCtrl_Config (TI_HANDLE hWhalCtrl,TI_HANDLE hTNETW_Driver, whalCtrl_config_t* pWhalCtrlCfg,UINT32 *pFWImage)
    452 {
    453     int                 Stt             = OK;
    454 
    455     whalSecur_config_t  securCfg;
    456     WHAL_CTRL           *pWhalCtrl      = (WHAL_CTRL *)hWhalCtrl;
    457     WlanParams_T        *pWlanParams    = whal_ParamsGetWlanParams(pWhalCtrl->pWhalParams);
    458 
    459     /* Save config parameters */
    460     pWhalCtrl->hReport = pWhalCtrlCfg->hReport;
    461     pWhalCtrl->hFwEvent = pWhalCtrlCfg->hFwEvent;
    462     pWhalCtrl->hRxXfer = pWhalCtrlCfg->hRxXfer;
    463     pWhalCtrl->hTxXfer = pWhalCtrlCfg->hTxXfer;
    464     pWhalCtrl->hTxHwQueue = pWhalCtrlCfg->hTxHwQueue;
    465     pWhalCtrl->hTxResult = pWhalCtrlCfg->hTxResult;
    466     pWhalCtrl->hTNETW_Driver = hTNETW_Driver;
    467     pWhalCtrl->hEventMbox = pWhalCtrlCfg->hEventMbox;
    468     pWhalCtrl->hCmdQueue = pWhalCtrlCfg->hCmdQueue;
    469 #ifdef TI_DBG
    470     pWhalCtrl->hDebugTrace = pWhalCtrlCfg->hDebugTrace;
    471 #endif /* TI_DBG */
    472     /*
    473     Config the Params object
    474     */
    475     whal_params_Config (pWhalCtrl->pWhalParams, pWhalCtrl->hReport);
    476 
    477     /*
    478     Configure the security object
    479     */
    480     securCfg.hMemMgr = pWhalCtrlCfg->hMemMgr;
    481     securCfg.hReport = pWhalCtrl->hReport;
    482     if (whalSecur_Config (pWhalCtrl->pWhalSecurity, &securCfg) != OK)
    483     {
    484         WLAN_REPORT_ERROR (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG, ("Error on whalSecur_Config\n"));
    485     }
    486 
    487     /*
    488     Initialize the Params object database fields
    489     */
    490 
    491     pWlanParams->FragmentationOnHal = 0;
    492 
    493 #if !defined(GWSI_DRIVER) && !defined(GWSI_LIB)
    494     /* NO pInitTableCopy in GWSI yet */
    495     pWlanParams->RecoveryEnable     =
    496         ((TnetwDrv_InitParams_t*)(((TnetwDrv_t *)hTNETW_Driver)->pInitTableCopy))->halCtrlConfigParams.halCtrlRecoveryEnable;
    497 #endif /* GWSI_DRIVER */
    498 
    499     /*
    500     Call local function to configure the hardware control object
    501     */
    502     /* This will at the end call the download function */
    503     Stt = whalCtrl_GetSetHwAddr(pWhalCtrl, pWhalCtrlCfg->hMemMgr,pFWImage);
    504     /*  This could return TNETWIF__ERROR,TNETWIF_COMPLETE or TNETWIF_PENDING */
    505     return (TI_STATUS)Stt;
    506 }
    507 
    508 
    509 /*
    510  * ----------------------------------------------------------------------------
    511  * Function : whalCtrl_GetTnetwifHandle
    512  *
    513  * Input    :
    514  * Output   :
    515  * Process  :
    516  * Note(s)  :
    517  * -----------------------------------------------------------------------------
    518  */
    519 TI_HANDLE whalCtrl_GetTnetwifHandle (TI_HANDLE hWhalCtrl)
    520 {
    521     WHAL_CTRL  *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
    522 
    523     return whal_hwCtrl_GetTnentwifHandle (pWhalCtrl->pHwCtrl);
    524 }
    525 
    526 
    527 /*
    528  * ----------------------------------------------------------------------------
    529  * Function : whalCtrl_GetTnetwifHandle
    530  *
    531  * Input    :
    532  * Output   :
    533  * Process  :
    534  * Note(s)  :
    535  * -----------------------------------------------------------------------------
    536  */
    537 TI_HANDLE whalCtrl_GetWhalParams (TI_HANDLE hWhalCtrl)
    538 {
    539     WHAL_CTRL  *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
    540 
    541     return (TI_HANDLE)pWhalCtrl->pWhalParams;
    542 }
    543 
    544 
    545 /****************************************************************************
    546  *                      whalCtrl_FinalizeDownload()
    547  ****************************************************************************
    548  * DESCRIPTION: Finalize all the remaining initialization after the download has finished
    549  *
    550  * INPUTS:
    551  *
    552  * OUTPUT:  None
    553  *
    554  * RETURNS: OK or NOK
    555  ****************************************************************************/
    556 TI_STATUS whalCtrl_FinalizeDownload (TI_HANDLE hWhalCtrl)
    557 {
    558     WHAL_CTRL  *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
    559 
    560     /* Call the upper layer to finalize all download action and then send the InitComplete Callback */
    561 #if !defined(GWSI_DRIVER) && !defined(GWSI_LIB)
    562     return TnetwDrv_InitHw_FinalizeDownload(pWhalCtrl->hTNETW_Driver);
    563 #else
    564     /* GWSI SA deosn't suport recovery, so the normal finalize function is called directly */
    565     return TnetwDrv_FinalizeDownload (pWhalCtrl->hTNETW_Driver);
    566 #endif
    567 }
    568 
    569 
    570 /****************************************************************************
    571  *                      whalCtrl_FinalizeOnFailure()
    572  ****************************************************************************
    573  * DESCRIPTION: Finalize all the remaining initialization after the download has failed
    574  *
    575  * INPUTS:
    576  *
    577  * OUTPUT:  None
    578  *
    579  * RETURNS: OK or NOK
    580  ****************************************************************************/
    581 TI_STATUS whalCtrl_FinalizeOnFailure (TI_HANDLE hWhalCtrl)
    582 {
    583     WHAL_CTRL  *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
    584 
    585     /* Call the upper layer to finalize all download */
    586     return TnetwDrv_FinalizeOnFailure (pWhalCtrl->hTNETW_Driver);
    587 }
    588 
    589 
    590 /*
    591  * ----------------------------------------------------------------------------
    592  * Function : whalCtrl_Register_CB
    593  *
    594  * Input    :
    595  * Output   :
    596  * Process  :
    597  * Note(s)  :
    598  * -----------------------------------------------------------------------------
    599  */
    600 void whalCtrl_Register_CB(TI_HANDLE hWhalCtrl,tiUINT32 CallBackID,void *CBFunc,TI_HANDLE CBObj)
    601 {
    602     WHAL_CTRL* pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
    603 
    604     WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG, ("whalCtrl_Register_CB (Value = 0x%x)\n", CallBackID));
    605 
    606     switch(CallBackID)
    607     {
    608     case HAL_INTERNAL_EVENT_FAILURE:
    609         pWhalCtrl->FailureEvent_CB        = (failureEventCB_t)CBFunc;
    610         pWhalCtrl->FailureEvent_CB_handle = CBObj;
    611         /* Register all health/sanityCheck/Recovery callbacks
    612                 DeviceError - CORE callback for full recovery
    613                 HealthReport - Event Mbox callback for extracting device error
    614                 MacStatus - Event Mbox callback for checkHwStatus FCS_ERR, RX_FREE_MEM regs
    615                 Mailbox error - Mailbox queue callback for case of timeout/error */
    616       #ifdef USE_RECOVERY
    617         whalCtrl_RegisterErrorsCallbacks(hWhalCtrl);
    618       #else
    619         CmdQueue_RegisterForErrorCB(pWhalCtrl->hCmdQueue, CBFunc, CBObj);
    620       #endif
    621         break;
    622     case HAL_INT_COMMAND_COMPLETE:
    623         whalCtrl_RegisterCmdCompleteGenericCB(hWhalCtrl,CBFunc,CBObj);
    624         break;
    625     default:
    626         /* register to the Event MBOX the corresponding Callback */
    627         whalCtrl_EventMbox_RegisterForEvent(hWhalCtrl, (int)(CallBackID), CBFunc, CBObj);
    628         whalCtrl_EventMbox_Enable(hWhalCtrl, (int)(CallBackID));
    629     }
    630 
    631     return;
    632 }
    633 
    634 
    635 /*
    636  * ----------------------------------------------------------------------------
    637  * Function : whalCtrl_PreRecoveryProcess
    638  *
    639  * Input    : TI_HANDLE hWhalCtrl
    640  * Output   :
    641  * Process  : prepare for recovery - save all mbox callbacks
    642  * Note(s)  :
    643  * -----------------------------------------------------------------------------
    644  */
    645 
    646 void whalCtrl_PreRecoveryProcess(TI_HANDLE hWhalCtrl)
    647 {
    648     WHAL_CTRL* pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
    649 
    650     CmdQueue_StartReconfig( pWhalCtrl->hCmdQueue );
    651 }
    652 
    653 
    654 /*
    655  * ----------------------------------------------------------------------------
    656  * Function : whalCtrl_SetMacAddress
    657  *
    658  * Input    :
    659  * Output   :
    660  * Process  :
    661  * Note(s)  :  Done
    662  * -----------------------------------------------------------------------------
    663  */
    664 int whalCtrl_SetMacAddress(TI_HANDLE hWhalCtrl, macAddress_t *macAddr)
    665 {
    666     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
    667 
    668     return whal_hwCtrl_SetMacAddress(pWhalCtrl->pHwCtrl, macAddr);
    669 }
    670 
    671 /*
    672  * ----------------------------------------------------------------------------
    673  * Function : whalCtrl_SetParam
    674  *
    675  * Input    :
    676  * Output   :
    677  * Process  :
    678  * Note(s)  :  Done
    679  * -----------------------------------------------------------------------------
    680  */
    681 TI_STATUS whalCtrl_SetParam (TI_HANDLE hWhalCtrl, whalParamInfo_t* pParamInfo)
    682 {
    683     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
    684     HwMboxConfig_T *pInfoElemConfig = whal_hwCtrl_GetMboxConfig(pWhalCtrl->pHwCtrl);
    685     WlanParams_T *pWlanParams = &pWhalCtrl->pWhalParams->WlanParams;
    686     TxParam_t    *pTxParams = whal_ParamsGetTxParams(pWhalCtrl->pWhalParams);
    687 
    688 
    689     WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
    690                              ("whalCtrl_SetParam : paramType=0x%X\n", pParamInfo->paramType));
    691 
    692     switch ((externalParam_e)pParamInfo->paramType)
    693     {
    694         case HAL_CTRL_RTS_THRESHOLD_PARAM:
    695 
    696             if  (pParamInfo->content.halCtrlRtsThreshold > HAL_CTRL_RTS_THRESHOLD_MAX)
    697             {
    698                 WLAN_REPORT_ERROR(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,  (" whalCtrl########HAL_CTRL_RTS_THRESHOLD_PARAM: Value out of permitted range 0x%x\n",
    699                        pParamInfo->content.halCtrlRtsThreshold));
    700                 return (PARAM_VALUE_NOT_VALID);
    701             }
    702 
    703             if (whal_hwInfoElemRtsThresholdSet (pInfoElemConfig,pParamInfo->content.halCtrlRtsThreshold) == OK)
    704             {
    705                 WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,  (" whalCtrl########HAL_CTRL_RTS_THRESHOLD_PARAM 0x%x\n",
    706                                        pParamInfo->content.halCtrlRtsThreshold));
    707                 pWlanParams->RtsThreshold = pParamInfo->content.halCtrlRtsThreshold;
    708             }
    709 
    710 
    711             break;
    712 
    713         case HAL_CTRL_CTS_TO_SELF_PARAM:
    714 
    715             if (whal_hwInfoElemCtsToSelfSet (pInfoElemConfig, pParamInfo->content.halCtrlCtsToSelf) == OK)
    716                 pWlanParams->CtsToSelf = pParamInfo->content.halCtrlCtsToSelf;
    717         else
    718             return NOK;
    719 
    720             break;
    721 
    722         case HAL_CTRL_RX_TIME_OUT_PARAM:
    723 
    724             if (whal_hwInfoElemRxTimeOutSet (pInfoElemConfig, &pParamInfo->content.halCtrlRxTimeOut) == OK)
    725             {
    726                 pWlanParams->rxTimeOut.psPoll = pParamInfo->content.halCtrlRxTimeOut.psPoll;
    727                 pWlanParams->rxTimeOut.UPSD   = pParamInfo->content.halCtrlRxTimeOut.UPSD;
    728             }
    729             break;
    730 
    731 
    732         case HAL_CTRL_FRAG_THRESHOLD_PARAM:
    733             if ((pParamInfo->content.halCtrlFragThreshold < HAL_CTRL_FRAG_THRESHOLD_MIN) ||
    734                 (pParamInfo->content.halCtrlFragThreshold > HAL_CTRL_FRAG_THRESHOLD_MAX))
    735                 return (PARAM_VALUE_NOT_VALID);
    736 
    737             pWlanParams->FragmentThreshold  = pParamInfo->content.halCtrlFragThreshold;
    738             pWlanParams->FragmentationOnHal = 0;
    739             break;
    740 
    741     case HAL_CTRL_DOT11_MAX_RX_MSDU_LIFE_TIME:
    742             if (whal_hwInfoElemRxMsduLifeTimeSet (pInfoElemConfig, pParamInfo->content.halCtrlMaxRxMsduLifetime) == OK)
    743                pWlanParams->MaxRxMsduLifetime = (UINT32)pParamInfo->content.halCtrlMaxRxMsduLifetime;
    744             break;
    745 
    746             case HAL_CTRL_ACX_STATISTICS_PARAM:
    747             if (whal_hwInfoElemAcxStatisiticsSet (pInfoElemConfig) != OK)
    748                 return (NOK);
    749             break;
    750 
    751         case HAL_CTRL_LISTEN_INTERVAL_PARAM:
    752             if ((pParamInfo->content.halCtrlListenInterval < HAL_CTRL_LISTEN_INTERVAL_MIN) ||
    753                 (pParamInfo->content.halCtrlListenInterval > HAL_CTRL_LISTEN_INTERVAL_MAX))
    754                 return (PARAM_VALUE_NOT_VALID);
    755 
    756             pWlanParams->ListenInterval = (UINT8)pParamInfo->content.halCtrlListenInterval;
    757             break;
    758 
    759         case HAL_CTRL_AID_PARAM:
    760             pWlanParams->Aid = pParamInfo->content.halCtrlAid;
    761 
    762             /* Configure the ACXAID info element*/
    763             if (whal_hwCtrl_AidSet (pWhalCtrl->pHwCtrl, pParamInfo->content.halCtrlAid) != OK)
    764                return (NOK);
    765             break;
    766 
    767         case HAL_CTRL_RSN_HW_ENC_DEC_ENABLE_PARAM:
    768 
    769             WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
    770                                     (" whalCtrl########HW_ENC_DEC_ENABLE %d\n", pParamInfo->content.rsnHwEncDecrEnable));
    771 
    772             /* Set the Encryption/Decryption on the HW*/
    773             if (whalSecur_HwEncDecrEnable (pWhalCtrl->pWhalSecurity, pParamInfo->content.rsnHwEncDecrEnable) != OK)
    774                 return (NOK);
    775             break;
    776 
    777         case HAL_CTRL_RSN_KEY_ADD_PARAM:
    778 
    779             WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,  (" whalCtrl########KEY_ADD\n"));
    780 
    781             if (whalSecur_KeyAdd (pWhalCtrl->pWhalSecurity,
    782                                  (securityKeys_t *) pParamInfo->content.configureCmdCBParams.CB_buf,
    783                                  FALSE,
    784                                  pParamInfo->content.configureCmdCBParams.CB_Func,
    785                                  pParamInfo->content.configureCmdCBParams.CB_handle) != OK)
    786                 return (NOK);
    787             break;
    788 
    789         case HAL_CTRL_RSN_KEY_REMOVE_PARAM:
    790 
    791             WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,  (" whalCtrl########KEY_REMOVE\n"));
    792 
    793             if (whalSecur_KeyRemove (pWhalCtrl->pWhalSecurity,
    794                                     (securityKeys_t *) pParamInfo->content.configureCmdCBParams.CB_buf,
    795                                     FALSE,
    796                                     pParamInfo->content.configureCmdCBParams.CB_Func,
    797                                     pParamInfo->content.configureCmdCBParams.CB_handle) != OK)
    798                 return (NOK);
    799             break;
    800 
    801         case HAL_CTRL_RSN_DEFAULT_KEY_ID_PARAM:
    802             if ((int) *pParamInfo->content.configureCmdCBParams.CB_buf > MAX_DEFAULT_KEY_ID)
    803                 return (PARAM_VALUE_NOT_VALID);
    804 
    805             WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,  (" whalCtrl########DEFAULT_KEY_ID %d\n",
    806                                    (UINT8)pParamInfo->content.rsnDefaultKeyID));
    807 
    808             if (whalSecur_DefaultKeyIdSet(pWhalCtrl->pWhalSecurity,
    809                                  *pParamInfo->content.interogateCmdCBParams.CB_buf,
    810                                  pParamInfo->content.interogateCmdCBParams.CB_Func,
    811                                  pParamInfo->content.interogateCmdCBParams.CB_handle) != OK)
    812                 return (NOK);
    813 
    814             break;
    815 
    816         case HAL_CTRL_RSN_SECURITY_MODE_PARAM:
    817             WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
    818                                     (" whalCtrl########SECURITY_MODE_SET %d\n", pParamInfo->content.rsnEncryptionStatus));
    819             if (whalSecur_SecurModeSet (pWhalCtrl->pWhalSecurity, (cipherSuite_e)pParamInfo->content.rsnEncryptionStatus) != OK)
    820                 return (NOK);
    821             break;
    822 
    823 #ifdef EXC_MODULE_INCLUDED
    824         case HAL_CTRL_RSN_EXC_SW_ENC_ENABLE_PARAM:
    825             WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
    826                                     (" whalCtrl########EXC_SW_ENC_ENABLE %d\n", pParamInfo->content.rsnExcSwEncFlag));
    827 #ifdef CKIP_ENABLED
    828             if (whalSecur_SwEncEnable (pWhalCtrl->pWhalSecurity, pParamInfo->content.rsnExcSwEncFlag) != OK)
    829                 return (NOK);
    830 #endif
    831             /* when SW encryption is ON, HW encryption should be turned OFF and vice versa */
    832 
    833             WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
    834                                     (" whalCtrl: Set HwEncDecrEnable to %d\n", !pParamInfo->content.rsnExcSwEncFlag));
    835 
    836             /* Set the Encryption/Decryption on the HW*/
    837             if (whalSecur_HwEncDecrEnable (pWhalCtrl->pWhalSecurity, (BOOL)(!(pParamInfo->content.rsnExcSwEncFlag))) != OK)
    838                 return (NOK);
    839             break;
    840 
    841         case HAL_CTRL_RSN_EXC_MIC_FIELD_ENABLE_PARAM:
    842             WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
    843                                     (" whalCtrl########EXC_MIC_FIELD_ENABLE %d\n", pParamInfo->content.rsnExcMicFieldFlag));
    844 #ifdef CKIP_ENABLED
    845             if (whalSecur_MicFieldEnable (pWhalCtrl->pWhalSecurity, pParamInfo->content.rsnExcMicFieldFlag) != OK)
    846                 return (NOK);
    847 #endif
    848             break;
    849 #endif /* EXC_MODULE_INCLUDED*/
    850 
    851         case HAL_CTRL_TX_POWER_PARAM:
    852 
    853             WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
    854                                     (" whalCtrl########TX_POWER_LEVEL old = %d new = %d\n",
    855 									pTxParams->TxPowerDbm, pParamInfo->content.halCtrlTxPowerDbm));
    856 
    857 			if ( pTxParams->TxPowerDbm == pParamInfo->content.halCtrlTxPowerDbm)
    858 			{	/* Save up time if we set the same value */
    859 				return TX_POWER_SET_SAME_VALUE;
    860 			}
    861 
    862             pTxParams->TxPowerDbm = pParamInfo->content.halCtrlTxPowerDbm;
    863 
    864             /* configure the wlan hardware */
    865             if (whal_hwInfoElemTxPowerSet (pInfoElemConfig,
    866                                                 &pTxParams->TxPowerDbm) != OK)
    867                 return (NOK);
    868             break;
    869 
    870 
    871         case HAL_CTRL_SG_ENABLE_PARAM:
    872             return (TI_STATUS)whal_hwCtrl_SoftGeminiEnable(pWhalCtrl->pHwCtrl,(SoftGeminiEnableModes_e)pParamInfo->content.SoftGeminiEnable);
    873 
    874         case HAL_CTRL_SG_CONFIG_PARAM:
    875             return (TI_STATUS)whal_hwCtrl_SetSoftGeminiParams(pWhalCtrl->pHwCtrl,&(pParamInfo->content.SoftGeminiParam));
    876 
    877         case HAL_CTRL_ANTENNA_DIVERSITY_PARAMS:
    878             /* save parameters */
    879             whal_hwCtrl_SaveAntennaDiversityOptions (pWhalCtrl->pHwCtrl, &(pParamInfo->content.antennaDiversityOptions));
    880             /* Configure FW with new parameters */
    881             whal_hwCtrl_CurrentAntennaDiversitySendCmd (pWhalCtrl->pHwCtrl);
    882             break;
    883 
    884         case HAL_CTRL_TX_ANTENNA_PARAM:
    885             /* save antenna number */
    886             whal_hwCtrl_SetTxAntenna( pWhalCtrl->pHwCtrl, pParamInfo->content.antennaNum );
    887             /* Write parameters to FW */
    888             whal_hwCtrl_CurrentAntennaDiversitySendCmd( pWhalCtrl->pHwCtrl );
    889             break;
    890 
    891         case HAL_CTRL_RX_ANTENNA_PARAM:
    892             /* save antenna number */
    893             whal_hwCtrl_SetRxAntenna( pWhalCtrl->pHwCtrl, pParamInfo->content.antennaNum );
    894             /* Write parameters to FW */
    895             whal_hwCtrl_CurrentAntennaDiversitySendCmd( pWhalCtrl->pHwCtrl );
    896             break;
    897 
    898     /*
    899      *  TX Parameters
    900      */
    901 
    902     case HAL_CTRL_TX_RATE_CLASS_PARAMS:
    903         return (TI_STATUS)whal_hwCtrl_TxRatePolicy(pWhalCtrl->pHwCtrl,pParamInfo->content.pTxRatePlicy);
    904 /*      break; */
    905 
    906     case HAL_CTRL_QUEUES_PARAMS:
    907         os_memoryCopy (pWhalCtrl->hOs, &pWhalCtrl->pWhalParams->WlanParams.QtrafficParams,
    908                        pParamInfo->content.pQueueTrafficParams, sizeof(queueTrafficParams_t));
    909 
    910         return (TI_STATUS)whal_hwCtrl_TrafficConf(pWhalCtrl->pHwCtrl,pParamInfo->content.pQueueTrafficParams);
    911 /*      break; */
    912 
    913     case HAL_CTRL_AC_PARAMS:
    914         os_memoryCopy (pWhalCtrl->hOs, &pWhalCtrl->pWhalParams->WlanParams.acQosParams,
    915                        pParamInfo->content.configureCmdCBParams.CB_buf, sizeof(acQosParams_t));
    916         return (TI_STATUS)whal_hwCtrl_AcParamsConf(pWhalCtrl->pHwCtrl,&pParamInfo->content.configureCmdCBParams);
    917 /*      break; */
    918 
    919 
    920 
    921 #if 0
    922 
    923     /*Tx Ack/No Ack*/
    924     case HAL_CTRL_TX_ACK_POLICY:
    925             return (whal_ParamsSetAccessCategoryAckPolicy(pWhalCtrl->pWhalParams,
    926                                                           pParamInfo->content.AcAckPolicy.AckPolicy,
    927                                                           pParamInfo->content.AcAckPolicy.AcId));
    928             break;
    929 
    930 #endif
    931 
    932     case HAL_CTRL_MIN_POWER_LEVEL:
    933         whalCtrl_SetMinPowerLevel(pWhalCtrl,
    934                                     pParamInfo->content.minPowerPolicy);
    935             break;
    936 
    937 
    938     case HAL_CTRL_CLK_RUN_ENABLE:
    939         WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
    940                                 (" whalCtrl_SetParam: CLK_RUN_ENABLE %d\n", pParamInfo->content.halCtrlClkRunEnable));
    941 
    942         /* Set the Encryption/Decryption on the HW*/
    943         if (whal_hwCtrl_ClkRunEnableSet (pWhalCtrl->pHwCtrl, pParamInfo->content.halCtrlClkRunEnable) != OK)
    944             return (NOK);
    945         break;
    946 
    947     case HAL_CTRL_EARLY_WAKEUP:
    948         WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
    949                                 (" whalCtrl_SetParam: SET EARLY WAKEUP to %d\n", pParamInfo->content.earlyWakeup));
    950         pWlanParams->earlyWakeUp = pParamInfo->content.earlyWakeup;
    951         break;
    952 
    953         /* PLT params */
    954     case HAL_CTRL_PLT_WRITE_MIB:
    955         WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,  ("%s - HAL_CTRL_PLT_WRITE_MIB(0x%x) \n", __FUNCTION__, pParamInfo->paramType));
    956         return (TI_STATUS)whalCtrl_WriteMib(hWhalCtrl, &pParamInfo->content.PltMib);
    957 
    958 /*        break; */
    959 
    960     case HAL_CTRL_PLT_RX_PER_START:
    961         WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,  ("%s - HAL_CTRL_PLT_RX_PER_START(0x%x) \n", __FUNCTION__, pParamInfo->paramType));
    962         return (TI_STATUS)whalCtrl_RxPER(pWhalCtrl, PLT_RX_PER_START,
    963             pParamInfo->content.interogateCmdCBParams.CB_handle,
    964             pParamInfo->content.interogateCmdCBParams.CB_Func);
    965 /*        break; */
    966 
    967     case HAL_CTRL_PLT_RX_PER_STOP:
    968         WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,  ("%s - HAL_CTRL_PLT_RX_PER_STOP(0x%x) \n", __FUNCTION__, pParamInfo->paramType));
    969         return (TI_STATUS)whalCtrl_RxPER(pWhalCtrl, PLT_RX_PER_STOP,
    970             pParamInfo->content.interogateCmdCBParams.CB_handle,
    971             pParamInfo->content.interogateCmdCBParams.CB_Func);
    972 /*        break; */
    973 
    974     case HAL_CTRL_PLT_RX_PER_CLEAR:
    975         WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,  ("%s - HAL_CTRL_PLT_RX_PER_CLEAR(0x%x) \n", __FUNCTION__, pParamInfo->paramType));
    976         return (TI_STATUS)whalCtrl_RxPER(pWhalCtrl, PLT_RX_PER_CLEAR,
    977             pParamInfo->content.interogateCmdCBParams.CB_handle,
    978             pParamInfo->content.interogateCmdCBParams.CB_Func);
    979 /*        break; */
    980     case HAL_CTRL_PLT_TX_CW:
    981         WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,  ("%s - HAL_CTRL_PLT_TX_CW(0x%x) \n", __FUNCTION__, pParamInfo->paramType));
    982         return (TI_STATUS)whalCtrl_TxCW(pWhalCtrl, &pParamInfo->content.PltCW,
    983                                 NULL, NULL, NULL);
    984         /*break;*/
    985 
    986     case HAL_CTRL_PLT_TX_CONTINUES:
    987         WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,  ("%s - HAL_CTRL_PLT_TX_CONTINUES(0x%x) \n", __FUNCTION__, pParamInfo->paramType));
    988         return (TI_STATUS)whalCtrl_TxContinues(pWhalCtrl, &pParamInfo->content.PltTxContinues,
    989                                     NULL, NULL, NULL);
    990         /*break;*/
    991 
    992     case HAL_CTRL_PLT_TX_STOP:
    993         WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,  ("%s - HAL_CTRL_PLT_TX_STOP(0x%x) \n", __FUNCTION__, pParamInfo->paramType));
    994         return (TI_STATUS)whal_hwCmdBit_perTxStop(pWhalCtrl->pHwCtrl->pHwMboxCmdBit,
    995                                        NULL, NULL, NULL);
    996         /*break;*/
    997 
    998     case HAL_CTRL_PLT_WRITE_REGISTER:
    999         WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,  ("%s - HAL_CTRL_PLT_WRITE_REGISTER(0x%x) \n", __FUNCTION__, pParamInfo->paramType));
   1000         return (TI_STATUS)whalCtrl_WriteRegister(pWhalCtrl, pParamInfo->content.interogateCmdCBParams.CB_handle, pParamInfo->content.interogateCmdCBParams.CB_Func, pParamInfo->content.interogateCmdCBParams.CB_buf);
   1001 /*        break;  */
   1002 
   1003     default:
   1004         WLAN_REPORT_ERROR(pWhalCtrl->hReport,
   1005                       HAL_CTRL_MODULE_LOG,
   1006                       ("%s(%d) - whalCtrl_SetParam - ERROR - Param is not supported, %d\n\n",
   1007                        __FILE__,__LINE__,pParamInfo->paramType));
   1008         return (PARAM_NOT_SUPPORTED);
   1009     }
   1010 
   1011     return (OK);
   1012 }
   1013 
   1014 
   1015 /*
   1016  * ----------------------------------------------------------------------------
   1017  * Function : whalCtrl_GetParam
   1018  *
   1019  * Input    :
   1020  * Output   :
   1021  * Process  :
   1022  * Note(s)  :  Done
   1023  * -----------------------------------------------------------------------------
   1024  */
   1025 TI_STATUS whalCtrl_GetParam (TI_HANDLE hWhalCtrl, whalParamInfo_t* pParamInfo)
   1026 {
   1027     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   1028     WlanParams_T *pWlanParams = &pWhalCtrl->pWhalParams->WlanParams;
   1029     HwMboxConfig_T *pInfoElemConfig = whal_hwCtrl_GetMboxConfig(pWhalCtrl->pHwCtrl);
   1030     TxParam_t      *pTxParams = whal_ParamsGetTxParams(pWhalCtrl->pWhalParams);
   1031 
   1032     switch ((externalParam_e)pParamInfo->paramType)
   1033     {
   1034         case HAL_CTRL_RTS_THRESHOLD_PARAM:
   1035             pParamInfo->content.halCtrlRtsThreshold = pWlanParams->RtsThreshold;
   1036             break;
   1037 
   1038         case HAL_CTRL_FRAG_THRESHOLD_PARAM:
   1039             pParamInfo->content.halCtrlFragThreshold = pWlanParams->FragmentThreshold;
   1040             break;
   1041 
   1042         case HAL_CTRL_COUNTERS_PARAM:
   1043             /* Constant zero because the ACX last buffer next pointer is always pointed
   1044                to itself, so it's like an endless buffer*/
   1045             pParamInfo->content.halCtrlCounters.RecvNoBuffer = 0;
   1046             pParamInfo->content.halCtrlCounters.FragmentsRecv = 0; /* not supported;*/
   1047             pParamInfo->content.halCtrlCounters.FrameDuplicates = 0;/* not supported*/
   1048             pParamInfo->content.halCtrlCounters.FcsErrors = pWhalCtrl->pWhalParams->GenCounters.FcsErrCnt;
   1049             pParamInfo->content.halCtrlCounters.RecvError = pWhalCtrl->pWhalParams->GenCounters.FcsErrCnt;
   1050             break;
   1051 
   1052         case HAL_CTRL_LISTEN_INTERVAL_PARAM:
   1053             pParamInfo->content.halCtrlListenInterval = pWlanParams->ListenInterval;
   1054             break;
   1055 
   1056         case HAL_CTRL_RSN_DEFAULT_KEY_ID_PARAM:
   1057             /* Not implemented */
   1058             return NOK;
   1059 /*            break; */
   1060 
   1061         case HAL_CTRL_TX_POWER_PARAM:
   1062             pParamInfo->content.halCtrlTxPowerDbm = pTxParams->TxPowerDbm;
   1063             break;
   1064 
   1065         case HAL_CTRL_ACX_STATISTICS_PARAM:
   1066             /* Not implemented */
   1067          #if 0
   1068             {
   1069                 acxStatisitcs_t     acxStatisitics;
   1070                 pParamInfo->content.acxStatisitics.FWpacketReceived = acxStatisitics.FWpacketReceived;
   1071                 /* Not supported */
   1072                 pParamInfo->content.acxStatisitics.HALpacketReceived = 0;
   1073             }
   1074          #endif
   1075             return NOK;
   1076 
   1077         case HAL_CTRL_MEDIUM_OCCUPANCY_PARAM:
   1078             if (whal_hwInfoElemMediumOccupancyGet (pInfoElemConfig,
   1079                                                    pParamInfo->content.interogateCmdCBParams) != OK)
   1080                 return (NOK);
   1081 
   1082             break;
   1083 
   1084         case HAL_CTRL_TSF_DTIM_MIB:
   1085             if (whal_hwInfoElemTfsDtimGet(pInfoElemConfig,
   1086                                           pParamInfo->content.interogateCmdCBParams) != OK)
   1087                 return (NOK);
   1088 
   1089             break;
   1090 
   1091 
   1092     case HAL_CTRL_AID_PARAM:
   1093         if (whal_hwCtrl_CurrentAssociationIdGet(pWhalCtrl->pHwCtrl,
   1094                                      &(pParamInfo->content.halCtrlAid)) != OK)
   1095             return (NOK);
   1096 
   1097         WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   1098                                 (" AID 2 %d\n", pParamInfo->content.halCtrlAid));
   1099 
   1100 
   1101         break;
   1102 
   1103     case HAL_CTRL_NOISE_HISTOGRAM_PARAM:
   1104         if (whal_hwInfoElemNoiseHistogramResultsGet (pInfoElemConfig,
   1105                                                      pParamInfo->content.interogateCmdCBParams) != OK)
   1106         {
   1107             return (NOK);
   1108         }
   1109 
   1110         break;
   1111 
   1112     case HAL_CTRL_TX_ANTENNA_PARAM:
   1113         /* get antenna number */
   1114         whal_hwCtrl_GetTxAntenna( pWhalCtrl->pHwCtrl, &(pParamInfo->content.antennaNum) );
   1115         break;
   1116 
   1117     case HAL_CTRL_RX_ANTENNA_PARAM:
   1118         /* get antenna number */
   1119         whal_hwCtrl_GetRxAntenna( pWhalCtrl->pHwCtrl, &(pParamInfo->content.antennaNum) );
   1120         break;
   1121 
   1122     case HAL_CTRL_CURRENT_CHANNEL:
   1123         /* get current channel number */
   1124         pParamInfo->content.halCtrlCurrentChannel = whal_ParamsGetRadioChannel( pWhalCtrl->pWhalParams );
   1125 
   1126     case HAL_CTRL_MIN_POWER_LEVEL:
   1127         whalCtrl_GetMinPowerLevel(pWhalCtrl, &pParamInfo->content.minPowerPolicy);
   1128         break;
   1129 
   1130         /*SNR and RSSI belongs to the same MIB, and the relevant CB is passed here*/
   1131     case HAL_CTRL_RSSI_LEVEL_PARAM:
   1132     case HAL_CTRL_SNR_RATIO_PARAM:
   1133         /* 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 */
   1134         whalCtrl_GetAsynRSSI (pWhalCtrl,pParamInfo->content.interogateCmdCBParams.CB_Func, pParamInfo->content.interogateCmdCBParams.CB_handle , pParamInfo->content.interogateCmdCBParams.CB_buf);
   1135         break;
   1136 
   1137     case HAL_CTRL_BCN_BRC_OPTIONS:
   1138         pParamInfo->content.BcnBrcOptions.BeaconRxTimeout    = pWlanParams->BcnBrcOptions.BeaconRxTimeout;
   1139         pParamInfo->content.BcnBrcOptions.BroadcastRxTimeout = pWlanParams->BcnBrcOptions.BroadcastRxTimeout;
   1140         pParamInfo->content.BcnBrcOptions.RxBroadcastInPs    = pWlanParams->BcnBrcOptions.RxBroadcastInPs;
   1141         break;
   1142 
   1143     case HAL_CTRL_DOT11_MAX_RX_MSDU_LIFE_TIME:
   1144         pParamInfo->content.halCtrlMaxRxMsduLifetime = pWlanParams->MaxRxMsduLifetime;
   1145         break;
   1146 
   1147 
   1148         /* PLT params */
   1149     case HAL_CTRL_PLT_RX_PER_GET_RESULTS:
   1150         return (TI_STATUS)whalCtrl_RxPER(pWhalCtrl, PLT_RX_PER_GETRESULTS,
   1151             pParamInfo->content.interogateCmdCBParams.CB_handle,
   1152             pParamInfo->content.interogateCmdCBParams.CB_Func);
   1153 /*        break; */
   1154 
   1155     case HAL_CTRL_PLT_READ_MIB:
   1156         return (TI_STATUS)whalCtrl_ReadMib(pWhalCtrl,
   1157             pParamInfo->content.interogateCmdCBParams.CB_handle,
   1158             pParamInfo->content.interogateCmdCBParams.CB_Func,
   1159             pParamInfo->content.interogateCmdCBParams.CB_buf);
   1160 
   1161 /*        break; */
   1162 
   1163     case HAL_CTRL_PLT_READ_REGISTER:
   1164         whalCtrl_ReadRegister(pWhalCtrl, pParamInfo->content.interogateCmdCBParams.CB_handle,
   1165             pParamInfo->content.interogateCmdCBParams.CB_Func,
   1166             pParamInfo->content.interogateCmdCBParams.CB_buf);
   1167         break;
   1168 
   1169     case HAL_CTRL_PLT_RX_TX_CAL:
   1170          WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,  ("%s - HAL_CTRL_PLT_RX_TX_CAL(0x%x) \n", __FUNCTION__, pParamInfo->paramType));
   1171          return (TI_STATUS)whal_hwCmdBit_TestCmd(pWhalCtrl->pHwCtrl->pHwMboxCmdBit,
   1172                                       pParamInfo->content.interogateCmdCBParams.CB_Func,
   1173                                       pParamInfo->content.interogateCmdCBParams.CB_handle,
   1174                                       (TestCmd_t*)pParamInfo->content.interogateCmdCBParams.CB_buf);
   1175          /*break*/
   1176 
   1177     case HAL_CTRL_PLT_RX_CAL_STATUS:
   1178          whal_hwCmdBit_GetPltRxCalibrationStatus( pWhalCtrl->pHwCtrl->pHwMboxCmdBit,
   1179                                                   &(pParamInfo->content.PltRxCalibrationStatus) );
   1180          return OK;
   1181          /* break */
   1182 
   1183     case HAL_CTRL_CTS_TO_SELF_PARAM:
   1184         pParamInfo->content.halCtrlCtsToSelf = pWlanParams->CtsToSelf;
   1185         break;
   1186 
   1187     case HAL_CTRL_TX_RATE_CLASS_PARAMS:
   1188         pParamInfo->content.pTxRatePlicy = whal_hwCtrl_GetTxRatePolicy(pWhalCtrl->pHwCtrl);
   1189         break;
   1190 
   1191     case HAL_CTRL_SG_CONFIG_PARAM:
   1192         return (TI_STATUS)whal_hwCtrl_GetSoftGeminiParams(pWhalCtrl->pHwCtrl,
   1193                                       pParamInfo->content.interogateCmdCBParams.CB_Func,
   1194                                       pParamInfo->content.interogateCmdCBParams.CB_handle,
   1195                                       (void*)pParamInfo->content.interogateCmdCBParams.CB_buf);
   1196 
   1197     case HAL_CTRL_REVISION:
   1198         return (TI_STATUS)whal_hwInfoElemAcxRevisionGet (pInfoElemConfig,
   1199                                                          pParamInfo->content.interogateCmdCBParams.CB_Func,
   1200                                                          pParamInfo->content.interogateCmdCBParams.CB_handle,
   1201                                                          (void*)pParamInfo->content.interogateCmdCBParams.CB_buf);
   1202 
   1203 	case HAL_CTRL_RSN_SECURITY_MODE_PARAM:
   1204 		pParamInfo->content.rsnEncryptionStatus = (halCtrl_CipherSuite_e)whalSecur_SecurModeGet (pWhalCtrl->pWhalSecurity);
   1205 
   1206 		WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   1207 								(" whalCtrl########SECURITY_MODE_GET %d\n", pParamInfo->content.rsnEncryptionStatus));
   1208         break;
   1209 
   1210     case HAL_CTRL_EARLY_WAKEUP:
   1211         WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   1212                                 (" whalCtrl_SetParam: GET EARLY WAKEUP is %d\n", pWlanParams->earlyWakeUp));
   1213         pParamInfo->content.earlyWakeup = pWlanParams->earlyWakeUp;
   1214 
   1215         break;
   1216 
   1217 	case HAL_CTRL_POWER_LEVEL_TABLE_PARAM:
   1218 		if (whal_hwInfoElemPowerLevelTableGet (pInfoElemConfig,
   1219 			pParamInfo->content.interogateCmdCBParams) != OK)
   1220 		{
   1221 			return (NOK);
   1222 		}
   1223 
   1224 		break;
   1225     case HAL_CTRL_POWER_CONSUMPTION:
   1226         whalCtrl_getConsumptionStatistics(pWhalCtrl->pHwCtrl->pHwMboxConfig,
   1227                     pParamInfo->content.interogateCmdCBParams.CB_Func,
   1228                     pParamInfo->content.interogateCmdCBParams.CB_handle,
   1229                     (void*)pParamInfo->content.interogateCmdCBParams.CB_buf);
   1230         break;
   1231 
   1232     default:
   1233         WLAN_REPORT_ERROR(pWhalCtrl->hReport,
   1234             HAL_CTRL_MODULE_LOG,
   1235             ("%s(%d) - whalCtrl_GetParam - ERROR - Param is not supported, %d\n\n",
   1236             __FILE__,__LINE__,pParamInfo->paramType));
   1237         return (PARAM_NOT_SUPPORTED);
   1238 /*        break; */
   1239     }
   1240 
   1241     return (OK);
   1242 }
   1243 
   1244 
   1245 /*
   1246  * ----------------------------------------------------------------------------
   1247  * Function : whalCtrl_setRxFilters
   1248  *
   1249  * Input    :
   1250  * Output   :
   1251  * Process  :  Configures the Rx filters
   1252  * Note(s)  :  Done
   1253  * -----------------------------------------------------------------------------
   1254  */
   1255 int whalCtrl_setRxFilters(TI_HANDLE hWhalCtrl, UINT32 RxConfigOption, UINT32 RxFilterOption)
   1256 {
   1257     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   1258 
   1259     return whal_hwCtrl_setRxFilters(pWhalCtrl->pHwCtrl, RxConfigOption, RxFilterOption);
   1260 }
   1261 
   1262 /*
   1263 * ----------------------------------------------------------------------------
   1264 * Function : whalCtrl_GetRxFilters
   1265 *
   1266 * Input    :
   1267 * Output   :
   1268 * Process  :  Configures the Rx filters
   1269 * Note(s)  :  Done
   1270 * -----------------------------------------------------------------------------
   1271 */
   1272 int  whalCtrl_GetRxFilters      (TI_HANDLE hWhalCtrl, UINT32* pRxConfigOption, UINT32* pRxFilterOption)
   1273 {
   1274     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   1275 
   1276     return whal_hwCtrl_GetRxFilters(pWhalCtrl->pHwCtrl, pRxConfigOption, pRxFilterOption);
   1277 }
   1278 
   1279 /*
   1280  * ----------------------------------------------------------------------------
   1281 * Function : whalCtrl_getRxDataFiltersStatistics
   1282 *
   1283 * Input    : Retrieve Statistics
   1284 * Output   :
   1285 * Process  :
   1286 * Note(s)  : Done
   1287 * -----------------------------------------------------------------------------
   1288 */
   1289 int whalCtrl_getRxDataFiltersStatistics(TI_HANDLE hWhalCtrl, void * CB_Func, TI_HANDLE CB_handle, void * CB_Buf)
   1290 {
   1291     WHAL_CTRL * pWhalCtrl = (WHAL_CTRL *) hWhalCtrl;
   1292 
   1293     whal_hwInfoElemGetRxDataFiltersStatistics(pWhalCtrl->pHwCtrl->pHwMboxConfig, CB_Func, CB_handle, CB_Buf);
   1294 
   1295     return OK;
   1296 }
   1297 
   1298 
   1299 /*
   1300  * ----------------------------------------------------------------------------
   1301  * Function : whalCtrl_setRxDataFiltersParams
   1302  *
   1303  * Input    :   enabled             - 0 to disable data filtering, any other value to enable.
   1304  *              defaultAction       - The default action to take on non-matching packets.
   1305  * Output   :
   1306  * Process  :  Enable or disable the Rx Data Filtering feature.
   1307  * Note(s)  :  Done
   1308  * -----------------------------------------------------------------------------
   1309  */
   1310 int whalCtrl_setRxDataFiltersParams(TI_HANDLE hWhalCtrl, BOOL enabled, filter_e defaultAction)
   1311 {
   1312     WHAL_CTRL * pWhalCtrl = (WHAL_CTRL *) hWhalCtrl;
   1313 
   1314     pWhalCtrl->pWhalParams->WlanParams.rxFilterDefaultEnable = enabled;
   1315     pWhalCtrl->pWhalParams->WlanParams.rxFilterDefaultAction = defaultAction;
   1316 
   1317     return whal_hwCtrl_setRxDataFiltersParams(pWhalCtrl->pHwCtrl, enabled, defaultAction);
   1318 }
   1319 
   1320 
   1321 /*
   1322  * ----------------------------------------------------------------------------
   1323  * Function : whalCtrl_setRxDataFilter
   1324  *
   1325  * Input    :   index               - Index of the Rx Data filter
   1326  *              command             - Disable or enable the filter
   1327  *              action              - Action to take on packets matching the pattern
   1328  *              numFieldPatterns    - Number of field patterns in the filter
   1329  *              lenFieldPatterns    - Length of the field pattern series
   1330  *              fieldPatterns       - Series of field patterns
   1331  * Output   :
   1332  * Process  :  Adds or removes the Rx Data Filter at the specified entry.
   1333  * Note(s)  :  Done
   1334  * -----------------------------------------------------------------------------
   1335  */
   1336 int whalCtrl_setRxDataFilter(TI_HANDLE hWhalCtrl, UINT8 index, UINT8 command, filter_e action, UINT8 numFieldPatterns, UINT8 lenFieldPatterns, UINT8 * fieldPatterns)
   1337 {
   1338     WHAL_CTRL * pWhalCtrl = (WHAL_CTRL *) hWhalCtrl;
   1339 
   1340     pWhalCtrl->pWhalParams->WlanParams.rxFilterCgf[index].rxFilterCommand = command;
   1341     pWhalCtrl->pWhalParams->WlanParams.rxFilterCgf[index].rxFilterAction = action;
   1342     pWhalCtrl->pWhalParams->WlanParams.rxFilterCgf[index].rxFilterNumFieldPatterns = numFieldPatterns;
   1343     pWhalCtrl->pWhalParams->WlanParams.rxFilterCgf[index].rxFilterLenFieldPatterns = lenFieldPatterns;
   1344 
   1345     os_memoryCopy(pWhalCtrl->hOs, (pWhalCtrl->pWhalParams->WlanParams.rxFilterCgf[index].rxFilterFieldPatterns),
   1346                   fieldPatterns, lenFieldPatterns);
   1347 
   1348     return whal_hwCtrl_setRxDataFilter(pWhalCtrl->pHwCtrl, index, command, action, numFieldPatterns, lenFieldPatterns, fieldPatterns);
   1349 }
   1350 
   1351 
   1352 
   1353 
   1354 /*
   1355  * ----------------------------------------------------------------------------
   1356  * Function : whalCtrl_SetarpIpAddressesTable
   1357  *
   1358  * Input    :
   1359  * Output   :
   1360  * Process  :  Configures the ARP table
   1361  * Note(s)  :  Done
   1362  * -----------------------------------------------------------------------------
   1363  */
   1364 int whalCtrl_SetarpIpAddressesTable(TI_HANDLE hWhalCtrl, IpAddress_t * IP_addr, UINT8 isEnabled , IPver_e IP_ver)
   1365 {
   1366     WHAL_CTRL * pWhalCtrl = (WHAL_CTRL *) hWhalCtrl;
   1367 
   1368     return whal_hwCtrl_SetarpIpAddressesTable(pWhalCtrl->pHwCtrl, IP_addr, isEnabled , IP_ver);
   1369 }
   1370 
   1371 
   1372 /*
   1373  * ----------------------------------------------------------------------------
   1374 * Function : whalCtrl_GetGroupIpAddressesTable
   1375 *
   1376 * Input    :
   1377 * Output   :
   1378 * Process  :  Retrieve the ARP IP address table
   1379 * -----------------------------------------------------------------------------
   1380 */
   1381 int whalCtrl_GetGroupIpAddressesTable(TI_HANDLE hWhalCtrl, UINT8* pisEnabled, UINT8* pnumGroupAddrs, macAddress_t *Group_addr)
   1382 {
   1383     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   1384     return whal_hwCtrl_GetGroupAddressesTable(pWhalCtrl->pHwCtrl,
   1385         pisEnabled, pnumGroupAddrs, Group_addr);
   1386 }
   1387 
   1388 
   1389 /*
   1390 * ----------------------------------------------------------------------------
   1391  * Function : whalCtrl_SetarpIpFilterEnabled
   1392  *
   1393  * Input    :
   1394  * Output   :
   1395  * Process  :  Configures the ARP table
   1396  * Note(s)  :  Done
   1397  * -----------------------------------------------------------------------------
   1398  */
   1399 int whalCtrl_SetarpIpFilterEnabled(TI_HANDLE hWhalCtrl,UINT8 isEnabled )
   1400 {
   1401     WHAL_CTRL * pWhalCtrl = (WHAL_CTRL *) hWhalCtrl;
   1402     return whal_hwCtrl_SetarpIpFilterEnabled(pWhalCtrl->pHwCtrl, isEnabled ) ;
   1403 
   1404 }
   1405 
   1406 
   1407 /*
   1408  * ----------------------------------------------------------------------------
   1409  * Function : whalCtrl_StartScan
   1410  *
   1411  * Input    :
   1412  * Output   :
   1413  * Process  :
   1414  * Note(s)  :  Done
   1415  * -----------------------------------------------------------------------------
   1416  */
   1417 int whalCtrl_StartScan (TI_HANDLE hWhalCtrl, whalCtrl_scan_t* pScanVals, BOOLEAN bHighPriority ,void* ScanCommandResponseCB, TI_HANDLE CB_handle)
   1418 {
   1419 
   1420     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   1421     BasicScanChannelParameters_t* chanPtr;
   1422     ScanParameters_t    tnetScanParams;
   1423 
   1424     UINT8*              pBSSID;
   1425     int i;
   1426 
   1427     /* Convert general scan data to tnet structure */
   1428     tnetScanParams.basicScanParameters.tidTrigger = pScanVals->Tid;
   1429     tnetScanParams.basicScanParameters.numOfProbRqst = pScanVals->probeReqNumber;
   1430     tnetScanParams.basicScanParameters.ssidLength = pScanVals->desiredSsid.len;
   1431     os_memoryCopy( pWhalCtrl->hOs, (void *)tnetScanParams.basicScanParameters.ssidStr,
   1432                    (void *)pScanVals->desiredSsid.ssidString, tnetScanParams.basicScanParameters.ssidLength );
   1433 
   1434     /*
   1435         scan options field is composed of scan type and band selection.
   1436         First, use the lookup table to convert the scan type
   1437     */
   1438 
   1439     tnetScanParams.basicScanParameters.scanOptions = 0;
   1440 
   1441     switch ( pScanVals->scanType )
   1442     {
   1443     case SCAN_TYPE_NORMAL_ACTIVE :
   1444         tnetScanParams.basicScanParameters.scanOptions = SCAN_ACTIVE;
   1445         break;
   1446 
   1447     case SCAN_TYPE_NORMAL_PASSIVE :
   1448         tnetScanParams.basicScanParameters.scanOptions = SCAN_PASSIVE;
   1449         break;
   1450 
   1451     case SCAN_TYPE_TRIGGERED_ACTIVE :
   1452         tnetScanParams.basicScanParameters.scanOptions = SCAN_ACTIVE | TRIGGERED_SCAN;
   1453         break;
   1454 
   1455     case SCAN_TYPE_TRIGGERED_PASSIVE :
   1456         tnetScanParams.basicScanParameters.scanOptions = SCAN_PASSIVE | TRIGGERED_SCAN;
   1457         break;
   1458 
   1459     default:
   1460         WLAN_REPORT_ERROR( pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   1461                            ("Invalid scan type:%d\n", pScanVals->scanType) );
   1462         return NOK;
   1463     }
   1464 
   1465     /* Add the band selection */
   1466     if ( RADIO_BAND_5_0_GHZ == pScanVals->band )
   1467     {
   1468         tnetScanParams.basicScanParameters.scanOptions |= SCAN_5GHZ_BAND;
   1469     }
   1470 
   1471     /* Add high priority bit */
   1472     if ( bHighPriority )
   1473     {
   1474         tnetScanParams.basicScanParameters.scanOptions |= SCAN_PRIORITY_HIGH;
   1475     }
   1476 
   1477     tnetScanParams.basicScanParameters.scanOptions = ENDIAN_HANDLE_WORD( tnetScanParams.basicScanParameters.scanOptions );
   1478 
   1479     /* important note: BSSID filter (0x0010) is DISABLED, because the FW sets it according
   1480        to BSSID value (broadcast does not filter, any other value will */
   1481     tnetScanParams.basicScanParameters.rxCfg.ConfigOptions = 0x12802 ;
   1482     tnetScanParams.basicScanParameters.rxCfg.FilterOptions = ENDIAN_HANDLE_LONG( RX_FILTER_CFG_ );
   1483 
   1484     /* If the SSID is not broadcast SSID, also filter according to SSID */
   1485     if ( FALSE == utils_isAnySSID( &(pScanVals->desiredSsid) ) )
   1486     {
   1487         tnetScanParams.basicScanParameters.rxCfg.ConfigOptions |= 0x0400;
   1488     }
   1489     tnetScanParams.basicScanParameters.rxCfg.ConfigOptions = ENDIAN_HANDLE_LONG( tnetScanParams.basicScanParameters.rxCfg.ConfigOptions );
   1490 
   1491     /* Rate conversion is done in the HAL */
   1492     whalUtils_ConvertAppRatesBitmap(pScanVals->probeRequestRate, 0, &(tnetScanParams.basicScanParameters.txdRateSet));
   1493     tnetScanParams.basicScanParameters.txdRateSet = ENDIAN_HANDLE_WORD( tnetScanParams.basicScanParameters.txdRateSet );
   1494 
   1495     tnetScanParams.basicScanParameters.numChannels = ENDIAN_HANDLE_WORD( pScanVals->numOfChannels );
   1496 
   1497     /* copy channel specific scan data to HAL structure */
   1498     for ( i = 0; i < pScanVals->numOfChannels; i++ )
   1499     {
   1500         int j;
   1501         UINT8*  macAddr;
   1502 
   1503         macAddr = (UINT8*)&tnetScanParams.basicScanChannelParameters[ i ].bssIdL;
   1504 
   1505         /* copy the MAC address, upside down (CHIP structure) */
   1506         for ( j = 0; j < MAC_ADDR_LEN; j++ )
   1507         {
   1508             macAddr[ j ] = pScanVals->channelEntry[ i ].normalChannelEntry.bssId.addr[ MAC_ADDR_LEN - 1 - j ];
   1509         }
   1510         tnetScanParams.basicScanChannelParameters[ i ].scanMinDuration =
   1511             ENDIAN_HANDLE_LONG( pScanVals->channelEntry[ i ].normalChannelEntry.minChannelDwellTime );
   1512         tnetScanParams.basicScanChannelParameters[ i ].scanMaxDuration =
   1513             ENDIAN_HANDLE_LONG( pScanVals->channelEntry[ i ].normalChannelEntry.maxChannelDwellTime );
   1514         tnetScanParams.basicScanChannelParameters[ i ].ETCondCount =
   1515             pScanVals->channelEntry[ i ].normalChannelEntry.ETMaxNumOfAPframes |
   1516             pScanVals->channelEntry[ i ].normalChannelEntry.earlyTerminationEvent;
   1517         tnetScanParams.basicScanChannelParameters[ i ].txPowerAttenuation =
   1518             pScanVals->channelEntry[ i ].normalChannelEntry.txPowerDbm;
   1519         tnetScanParams.basicScanChannelParameters[ i ].channel =
   1520             pScanVals->channelEntry[ i ].normalChannelEntry.channel;
   1521     }
   1522 
   1523     WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   1524                              ("RxCfg = 0x%x\n \
   1525                               RxFilterCfg = 0x%x\n \
   1526                               scanOptions = 0x%x\n \
   1527                               numChannels = %d\n \
   1528                               probeNumber = %d\n \
   1529                               probeRateModulation = 0x%x\n \
   1530                               tidTrigger = %d\n" ,
   1531                               tnetScanParams.basicScanParameters.rxCfg.ConfigOptions,
   1532                               tnetScanParams.basicScanParameters.rxCfg.FilterOptions,
   1533                               tnetScanParams.basicScanParameters.scanOptions,
   1534                               tnetScanParams.basicScanParameters.numChannels,
   1535                               tnetScanParams.basicScanParameters.numOfProbRqst,
   1536                               tnetScanParams.basicScanParameters.txdRateSet,
   1537                               tnetScanParams.basicScanParameters.tidTrigger));
   1538 
   1539     WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   1540         ("Channel      BSSID           MinTime     MaxTime     ET     TxPower   probChan\n"));
   1541 
   1542     for( i=0; i < pScanVals->numOfChannels; i++)
   1543     {
   1544         chanPtr = &tnetScanParams.basicScanChannelParameters[i];
   1545         pBSSID = (UINT8*)&chanPtr->bssIdL;
   1546 
   1547         WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   1548             ("%6d   %02x:%02x:%02x:%02x:%02x:%02x    %5d %5d %2d %5d %5d\n",i,
   1549             pBSSID[5],pBSSID[4],pBSSID[3],pBSSID[2],pBSSID[1],pBSSID[0],
   1550             chanPtr->scanMinDuration, chanPtr->scanMaxDuration, chanPtr->ETCondCount,
   1551             chanPtr->txPowerAttenuation,    chanPtr->channel));
   1552     }
   1553     /* Send the scan command*/
   1554     return (whal_hwCtrl_StartScan (pWhalCtrl->pHwCtrl, &tnetScanParams , ScanCommandResponseCB , CB_handle));
   1555 }
   1556 
   1557 /*
   1558  * ----------------------------------------------------------------------------
   1559  * Function : whalCtrl_StartSPSScan
   1560  *
   1561  * Input    :
   1562  * Output   :
   1563  * Process  :
   1564  * Note(s)  :  Done
   1565  * -----------------------------------------------------------------------------
   1566  */
   1567 int whalCtrl_StartSPSScan( TI_HANDLE hWhalCtrl, whalCtrl_scan_t* pScanVals, void* ScanCommandResponseCB, TI_HANDLE CB_handle)
   1568 {
   1569 
   1570     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   1571     ScheduledScanParameters_t   tnetSPSScanParams;
   1572     int i;
   1573 
   1574     /* Convert general scan data to TNET structure */
   1575     tnetSPSScanParams.scheduledGeneralParameters.scanOptions = SCAN_PASSIVE;
   1576     /* Add the band selection */
   1577     if ( RADIO_BAND_5_0_GHZ == pScanVals->band )
   1578     {
   1579         tnetSPSScanParams.scheduledGeneralParameters.scanOptions |= SCAN_5GHZ_BAND;
   1580     }
   1581     tnetSPSScanParams.scheduledGeneralParameters.scanOptions = ENDIAN_HANDLE_WORD( tnetSPSScanParams.scheduledGeneralParameters.scanOptions );
   1582 
   1583     /* important note: BSSID filter (0x0010) is DISABLED, because the FW sets it according
   1584        to BSSID value (broadcast does not filter, any other value will */
   1585     /* If the SSID is not broadcast SSID, also filter according to SSID */
   1586     tnetSPSScanParams.scheduledGeneralParameters.rxCfg.ConfigOptions = 0x12802;
   1587     tnetSPSScanParams.scheduledGeneralParameters.rxCfg.FilterOptions = ENDIAN_HANDLE_LONG( RX_FILTER_CFG_ );
   1588     tnetSPSScanParams.scheduledGeneralParameters.rxCfg.ConfigOptions = ENDIAN_HANDLE_LONG( tnetSPSScanParams.scheduledGeneralParameters.rxCfg.ConfigOptions );
   1589 
   1590     /* latest TSF value - used to discover TSF error (AP recovery) */
   1591     tnetSPSScanParams.scheduledGeneralParameters.scanCmdTime_h = ENDIAN_HANDLE_LONG( INT64_HIGHER(pScanVals->latestTSFValue) );
   1592     tnetSPSScanParams.scheduledGeneralParameters.scanCmdTime_l = ENDIAN_HANDLE_LONG( INT64_LOWER(pScanVals->latestTSFValue) );
   1593 
   1594     tnetSPSScanParams.scheduledGeneralParameters.numChannels = pScanVals->numOfChannels;
   1595 
   1596     /* copy channel specific scan data to HAL structure */
   1597     for ( i = 0; i < pScanVals->numOfChannels; i++ )
   1598     {
   1599         int j;
   1600         UINT8*  macAddr;
   1601 
   1602         macAddr = (UINT8*)&tnetSPSScanParams.scheduledChannelParameters[ i ].bssIdL;
   1603 
   1604         /* copy the MAC address, upside down (CHIP structure) */
   1605         for ( j = 0; j < MAC_ADDR_LEN; j++ )
   1606         {
   1607             macAddr[ j ] = pScanVals->channelEntry[ i ].normalChannelEntry.bssId.addr[ MAC_ADDR_LEN - 1 - j ];
   1608         }
   1609         tnetSPSScanParams.scheduledChannelParameters[ i ].scanMaxDuration =
   1610             ENDIAN_HANDLE_LONG( pScanVals->channelEntry[ i ].SPSChannelEntry.scanDuration );
   1611         tnetSPSScanParams.scheduledChannelParameters[ i ].scanStartTime =
   1612             ENDIAN_HANDLE_LONG( pScanVals->channelEntry[ i ].SPSChannelEntry.scanStartTime );
   1613         tnetSPSScanParams.scheduledChannelParameters[ i ].ETCondCount =
   1614             pScanVals->channelEntry[ i ].SPSChannelEntry.ETMaxNumOfAPframes |
   1615             pScanVals->channelEntry[ i ].SPSChannelEntry.earlyTerminationEvent;
   1616         tnetSPSScanParams.scheduledChannelParameters[ i ].channel =
   1617             pScanVals->channelEntry[ i ].SPSChannelEntry.channel;
   1618     }
   1619 #ifdef TI_DBG
   1620     WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   1621                              ("RxCfg = 0x%x\n \
   1622                               RxFilterCfg = 0x%x\n \
   1623                               scanOptions = 0x%x\n \
   1624                               numChannels = %d\n",
   1625                               tnetSPSScanParams.scheduledGeneralParameters.rxCfg.ConfigOptions,
   1626                               tnetSPSScanParams.scheduledGeneralParameters.rxCfg.FilterOptions,
   1627                               tnetSPSScanParams.scheduledGeneralParameters.scanOptions,
   1628                               tnetSPSScanParams.scheduledGeneralParameters.numChannels));
   1629 
   1630     WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   1631         ("Channel      BSSID           StartTime     Duration     ET     probChan\n"));
   1632 
   1633     for( i=0; i < tnetSPSScanParams.scheduledGeneralParameters.numChannels; i++)
   1634     {
   1635         ScheduledChannelParameters_t* chanPtr = &tnetSPSScanParams.scheduledChannelParameters[ i ];
   1636         UINT8* pBSSID = (UINT8*)&chanPtr->bssIdL;
   1637 
   1638         WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   1639             ("%6d   %02x:%02x:%02x:%02x:%02x:%02x    %5d %5d %2d %5d\n",i,
   1640             pBSSID[5],pBSSID[4],pBSSID[3],pBSSID[2],pBSSID[1],pBSSID[0],
   1641             chanPtr->scanStartTime, chanPtr->scanMaxDuration, chanPtr->ETCondCount,
   1642             chanPtr->channel));
   1643     }
   1644 #endif /* TI_DBG */
   1645 
   1646     /* Send the scan command*/
   1647     return (whal_hwCtrl_StartSPSScan (pWhalCtrl->pHwCtrl, &tnetSPSScanParams, ScanCommandResponseCB,CB_handle));
   1648 }
   1649 
   1650 /*
   1651  * ----------------------------------------------------------------------------
   1652  * Function : whalCtrl_StopScan
   1653  *
   1654  * Input    :
   1655  * Output   :
   1656  * Process  :
   1657  * Note(s)  :  Done
   1658  * -----------------------------------------------------------------------------
   1659  */
   1660 int whalCtrl_StopScan (TI_HANDLE hWhalCtrl , void* ScanCommandResponseCB, TI_HANDLE CB_handle)
   1661 {
   1662     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   1663 
   1664     return (whal_hwCtrl_StopScan (pWhalCtrl->pHwCtrl, ScanCommandResponseCB, CB_handle));
   1665 }
   1666 
   1667 /*
   1668  * ----------------------------------------------------------------------------
   1669  * Function : whalCtrl_StopSPSScan
   1670  *
   1671  * Input    :
   1672  * Output   :
   1673  * Process  :
   1674  * Note(s)  :  Done
   1675  * -----------------------------------------------------------------------------
   1676  */
   1677 int whalCtrl_StopSPSScan (TI_HANDLE hWhalCtrl, void* ScanCommandResponseCB, TI_HANDLE CB_handle)
   1678 {
   1679     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   1680 
   1681     return (whal_hwCtrl_StopSPSScan (pWhalCtrl->pHwCtrl, ScanCommandResponseCB, CB_handle));
   1682 }
   1683 
   1684 /*
   1685  * ----------------------------------------------------------------------------
   1686  * Function : whalCtrl_SetSplitScanTimeOut
   1687  *
   1688  * Input    :
   1689  * Output   :
   1690  * Process  :
   1691  * Note(s)  :  Done
   1692  * -----------------------------------------------------------------------------
   1693  */
   1694 
   1695 TI_STATUS whalCtrl_SetSplitScanTimeOut (TI_HANDLE hWhalCtrl, UINT32 uTimeOut)
   1696 {
   1697     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   1698 
   1699     /* Go all the way to the CmdQueue - According to new architecture ??? */
   1700     return (TI_STATUS)(CmdQueue_Command (pWhalCtrl->hCmdQueue, CMD_TRIGGER_SCAN_TO, (char*)&uTimeOut, sizeof(uTimeOut)));
   1701 
   1702 }
   1703 /*
   1704  * ----------------------------------------------------------------------------
   1705  * Function : whalCtrl_JoinBss
   1706  *
   1707  * Input    :
   1708  * Output   :
   1709  * Process  :
   1710  * Note(s)  :  Done
   1711  * -----------------------------------------------------------------------------
   1712  */
   1713 int whalCtrl_JoinBss (TI_HANDLE hWhalCtrl, whalCtrl_joinBss_t* pJoinBssParams)
   1714 {
   1715     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   1716     WlanParams_T *pWlanParams       = whal_ParamsGetWlanParams(pWhalCtrl->pWhalParams);
   1717 #ifdef TI_DBG
   1718     UINT8 dbgSsidStr[33];
   1719     BssInfoParams_T *pBssInfoParams = whal_ParamsGetBssInfoParams(pWhalCtrl->pWhalParams);
   1720 #endif /* TI_DBG */
   1721 
   1722 
   1723     /* for debug purpose, can be removed later*/
   1724     if (pJoinBssParams->ssidLength > 32)
   1725         pJoinBssParams->ssidLength = 32;
   1726 
   1727 #ifdef TI_DBG
   1728     os_memoryCopy(pWhalCtrl->hOs, (void *)dbgSsidStr, (void *)pJoinBssParams->pSSID, pJoinBssParams->ssidLength);
   1729     dbgSsidStr[pJoinBssParams->ssidLength] = '\0';
   1730 
   1731     /* HW generate packets - CTS - should be at CCK rates only */
   1732     if ((pJoinBssParams->radioBand == RADIO_BAND_2_4_GHZ) &&
   1733         (pJoinBssParams->hwGenCtrlTxRate > DRV_RATE_11M))
   1734     {
   1735         pJoinBssParams->hwGenCtrlTxRate = DRV_RATE_2M; /* default value, if no CCK rate is in the basic rates */
   1736         if(pJoinBssParams->basicRateSet & DRV_RATE_MASK_1_BARKER) pJoinBssParams->hwGenCtrlTxRate = DRV_RATE_1M;
   1737         if(pJoinBssParams->basicRateSet & DRV_RATE_MASK_2_BARKER) pJoinBssParams->hwGenCtrlTxRate = DRV_RATE_2M;
   1738         if(pJoinBssParams->basicRateSet & DRV_RATE_MASK_5_5_CCK)  pJoinBssParams->hwGenCtrlTxRate = DRV_RATE_5_5M;
   1739         if(pJoinBssParams->basicRateSet & DRV_RATE_MASK_11_CCK)   pJoinBssParams->hwGenCtrlTxRate = DRV_RATE_11M;
   1740 
   1741         WLAN_REPORT_WARNING(pWhalCtrl->hReport,HAL_CTRL_MODULE_LOG,
   1742             ("%s  hwGenCtrlTxRate > 11 !!! changed to %d (rate_e)\n",__FUNCTION__,pJoinBssParams->hwGenCtrlTxRate));
   1743 
   1744     }
   1745 
   1746     WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   1747                             ("\n whalCtrl_JoinBss :\n \
   1748                               bssType = %d\n \
   1749                               beaconInterval = %d\n \
   1750                               dtimInterval = %d\n \
   1751                               channel = %d \n \
   1752                               BSSID = %x-%x-%x-%x-%x-%x \n \
   1753                               SSID = %s \n \
   1754                               ssidLength = %d \n \
   1755                               basicRateSet = 0x%x \n \
   1756                               supportedRateSet = 0x%x \n ",
   1757                               pJoinBssParams->bssType,
   1758                               pJoinBssParams->beaconInterval,
   1759                               pJoinBssParams->dtimInterval,
   1760                               pJoinBssParams->channel,
   1761                               pJoinBssParams->pBSSID[0],
   1762                               pJoinBssParams->pBSSID[1],
   1763                               pJoinBssParams->pBSSID[2],
   1764                               pJoinBssParams->pBSSID[3],
   1765                               pJoinBssParams->pBSSID[4],
   1766                               pJoinBssParams->pBSSID[5],
   1767                               dbgSsidStr,
   1768                               pJoinBssParams->ssidLength,
   1769                               pJoinBssParams->basicRateSet,
   1770                               pJoinBssParams->supportedRateSet));
   1771 
   1772       WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   1773                               ("RadioBand = %d \n \
   1774                                 Ctrl = 0x%x \n \
   1775                                 hwGenCtrlTxRate = 0x%x  \n \
   1776                                 hwGenMgmtTxRate = 0x%x  \n \
   1777                                 preamble = 0x%x \n",
   1778                                 pJoinBssParams->radioBand,
   1779                                 pBssInfoParams->Ctrl,
   1780                                 pJoinBssParams->hwGenCtrlTxRate,
   1781                                 pJoinBssParams->hwGenMgmtTxRate,
   1782                                 pJoinBssParams->preamble));
   1783 #endif /* TI_DBG */
   1784     /*
   1785      * save Bss info parameters
   1786      */
   1787     whal_ParamsSetReqBssType(pWhalCtrl->pWhalParams, pJoinBssParams->bssType);
   1788     whal_ParamsSetBssId(pWhalCtrl->pWhalParams, (char *)pJoinBssParams->pBSSID);
   1789     whal_ParamsSetSsid(pWhalCtrl->pWhalParams, (char *)pJoinBssParams->pSSID, pJoinBssParams->ssidLength);
   1790     whal_ParamsSetBeaconInterval(pWhalCtrl->pWhalParams, (UINT16)pJoinBssParams->beaconInterval);
   1791     whal_ParamsSetDtimCount(pWhalCtrl->pWhalParams, (UINT8)pJoinBssParams->dtimInterval);
   1792     whal_ParamsSetRadioChannel(pWhalCtrl->pWhalParams, pJoinBssParams->channel);
   1793     whal_ParamsSetRadioBand(pWhalCtrl->pWhalParams, pJoinBssParams->radioBand);
   1794     whal_ParamsSetBasicRatesSet(pWhalCtrl->pWhalParams, pJoinBssParams->basicRateSet);
   1795     whal_ParamsSetSupportedRatesSet(pWhalCtrl->pWhalParams, pJoinBssParams->supportedRateSet);
   1796 
   1797     /*
   1798      *  Save the frame rates in whalParams and configure it to the Fw later. That command was previously included
   1799      *  in the join command and it is now separated.
   1800      */
   1801     /* Set the Ctrl frames rate and modulation */
   1802     whal_ParamsSetHwGenTxParams(pWhalCtrl->pWhalParams, pJoinBssParams->hwGenCtrlTxRate, TRUE);
   1803     /* Set the Management frame rate and modulation */
   1804     whal_ParamsSetHwGenTxParams(pWhalCtrl->pWhalParams, pJoinBssParams->hwGenMgmtTxRate, FALSE);
   1805 
   1806 
   1807     /* In case we're joining a new BSS, reset the TKIP/AES sequence counter. */
   1808     /* The firmware resets its own counter - so we won't have mismatch in the following TX complete events */
   1809     pWhalCtrl->pHwCtrl->SecuritySeqNumLow = 0;
   1810     pWhalCtrl->pHwCtrl->SecuritySeqNumHigh = 0;
   1811 
   1812     pWlanParams->bJoin = TRUE;
   1813     /*
   1814      * call the hardware to start/join the bss
   1815      */
   1816     return whal_hwCtrl_StartJoin(pWhalCtrl->pHwCtrl, pJoinBssParams->bssType, NULL, NULL);
   1817 
   1818 }
   1819 
   1820 
   1821 /*
   1822  * ----------------------------------------------------------------------------
   1823  * Function : whalCtrl_ReJoinBss
   1824  *
   1825  * Input    :
   1826  * Output   :
   1827  * Process  :
   1828  * Note(s)  :  Done
   1829  * -----------------------------------------------------------------------------
   1830  */
   1831 int whalCtrl_ReJoinBss (TI_HANDLE hWhalCtrl)
   1832 {
   1833     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   1834 
   1835     return whal_hwCtrl_ReJoinBss ((TI_HANDLE)pWhalCtrl->pHwCtrl);
   1836 }
   1837 
   1838 
   1839 /*
   1840  * ----------------------------------------------------------------------------
   1841  * Function : whalCtrl_Stop
   1842  *
   1843  * Input    : None
   1844  * Output   :
   1845  * Process  : Send command to the ACX to instruct it to enter a low-power sleep
   1846  *            state
   1847  * Note(s)  : Done
   1848  * -----------------------------------------------------------------------------
   1849  */
   1850 int whalCtrl_Stop (TI_HANDLE hWhalCtrl)
   1851 {
   1852     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   1853 
   1854     whal_hwCtrl_Stop (pWhalCtrl->pHwCtrl);
   1855 
   1856     return (OK);
   1857 }
   1858 
   1859 
   1860 /*
   1861  * ----------------------------------------------------------------------------
   1862  * Function : whalCtrl_SetTemplate
   1863  *
   1864  * Input    :
   1865  * Output   :
   1866  * Process  :
   1867  * Note(s)  :  Done
   1868  * -----------------------------------------------------------------------------
   1869  */
   1870 int whalCtrl_SetTemplate (TI_HANDLE hWhalCtrl, whalCtrl_setTemplate_t* pTemplateParams)
   1871 {
   1872     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   1873     HwMboxCmd_T *pHwCmd = whal_hwCtrl_GetMboxCmd(pWhalCtrl->pHwCtrl);
   1874     TemplateListParams_T *pWhalTemplates = &pWhalCtrl->pWhalParams->TemplateList;
   1875     int Stt;
   1876 
   1877     WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   1878                             ("Template Type=%x :: size=%d\n", pTemplateParams->templateType , pTemplateParams->templateLen));
   1879 
   1880     switch(pTemplateParams->templateType)
   1881     {
   1882         case BEACON_TEMPLATE:
   1883             pWhalTemplates->Beacon.Size = pTemplateParams->templateLen;
   1884             os_memoryCopy(pWhalCtrl->hOs, (void *)&pWhalTemplates->Beacon.Buffer, (void *)pTemplateParams->pTemplate, pTemplateParams->templateLen);
   1885             Stt = whal_hwMboxCmd_ConfigureTemplateFrame(pHwCmd, pTemplateParams->pTemplate, (UINT16)pTemplateParams->templateLen,
   1886                                                         CMD_BEACON,NULL,NULL);
   1887             break;
   1888         case PROBE_RESPONSE_TEMPLATE:
   1889             pWhalTemplates->ProbeResp.Size = pTemplateParams->templateLen;
   1890             os_memoryCopy(pWhalCtrl->hOs, (void *)&pWhalTemplates->ProbeResp.Buffer, (void *)pTemplateParams->pTemplate, pTemplateParams->templateLen);
   1891             Stt = whal_hwMboxCmd_ConfigureTemplateFrame(pHwCmd, pTemplateParams->pTemplate, (UINT16)pTemplateParams->templateLen,
   1892                                                         CMD_PROBE_RESP,NULL,NULL);
   1893             break;
   1894         case PROBE_REQUEST_TEMPLATE:
   1895             pWhalTemplates->ProbeReq.Size = pTemplateParams->templateLen;
   1896             os_memoryCopy(pWhalCtrl->hOs, (void *)&pWhalTemplates->ProbeReq.Buffer, (void *)pTemplateParams->pTemplate, pTemplateParams->templateLen);
   1897             Stt = whal_hwMboxCmd_ConfigureTemplateFrame(pHwCmd, pTemplateParams->pTemplate, (UINT16)pTemplateParams->templateLen,
   1898                                                         CMD_PROBE_REQ,NULL,NULL);
   1899             break;
   1900         case NULL_DATA_TEMPLATE:
   1901             pWhalTemplates->NullData.Size = pTemplateParams->templateLen;
   1902             os_memoryCopy(pWhalCtrl->hOs, (void *)&pWhalTemplates->NullData.Buffer, (void *)pTemplateParams->pTemplate, pTemplateParams->templateLen);
   1903             Stt = whal_hwMboxCmd_ConfigureTemplateFrame(pHwCmd, pTemplateParams->pTemplate, (UINT16)pTemplateParams->templateLen,
   1904                                                         CMD_NULL_DATA,NULL,NULL);
   1905             break;
   1906         case PS_POLL_TEMPLATE:
   1907             pWhalTemplates->PsPoll.Size = pTemplateParams->templateLen;
   1908             os_memoryCopy(pWhalCtrl->hOs, (void *)&pWhalTemplates->PsPoll.Buffer, (void *)pTemplateParams->pTemplate, pTemplateParams->templateLen);
   1909             Stt = whal_hwMboxCmd_ConfigureTemplateFrame(pHwCmd, pTemplateParams->pTemplate, (UINT16)pTemplateParams->templateLen,
   1910                                                         CMD_PS_POLL,NULL,NULL);
   1911             break;
   1912         case QOS_NULL_DATA_TEMPLATE:
   1913             pWhalTemplates->QosNullData.Size = pTemplateParams->templateLen;
   1914             os_memoryCopy(pWhalCtrl->hOs, (void *)&pWhalTemplates->QosNullData.Buffer, (void *)pTemplateParams->pTemplate, pTemplateParams->templateLen);
   1915             Stt = whal_hwMboxCmd_ConfigureTemplateFrame(pHwCmd, pTemplateParams->pTemplate, (UINT16)pTemplateParams->templateLen,
   1916                                                         CMD_QOS_NULL_DATA,NULL,NULL);
   1917             break;
   1918         default:
   1919             Stt = NOK;
   1920             break;
   1921     }
   1922 
   1923     return (Stt);
   1924 }
   1925 
   1926 /*
   1927  * ----------------------------------------------------------------------------
   1928  * Function : whalCtrl_SetTemplateWithCB
   1929  *
   1930  * Input    :   Same as whalCtrl_SetTemplate but with CB
   1931  * Output   :
   1932  * Process  :
   1933  * Note(s)  :  Done
   1934  * -----------------------------------------------------------------------------
   1935  */
   1936 int whalCtrl_SetTemplateWithCB (TI_HANDLE hWhalCtrl, whalCtrl_setTemplate_t* pTemplateParams,void *CBFunc,TI_HANDLE CBObj)
   1937 {
   1938     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   1939     HwMboxCmd_T *pHwCmd = whal_hwCtrl_GetMboxCmd(pWhalCtrl->pHwCtrl);
   1940     TemplateListParams_T *pWhalTemplates = &pWhalCtrl->pWhalParams->TemplateList;
   1941     int Stt;
   1942 
   1943     WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   1944                             ("%s Template Type=%x :: size=%d\n",__FUNCTION__,pTemplateParams->templateType , pTemplateParams->templateLen));
   1945 
   1946     switch(pTemplateParams->templateType)
   1947     {
   1948 
   1949     case PROBE_REQUEST_TEMPLATE:
   1950         pWhalTemplates->ProbeReq.Size = pTemplateParams->templateLen;
   1951         os_memoryCopy(pWhalCtrl->hOs, (void *)&pWhalTemplates->ProbeReq.Buffer, (void *)pTemplateParams->pTemplate, pTemplateParams->templateLen);
   1952         Stt = whal_hwMboxCmd_ConfigureTemplateFrame(pHwCmd, pTemplateParams->pTemplate, (UINT16)pTemplateParams->templateLen,CMD_PROBE_REQ,CBFunc,CBObj);
   1953         break;
   1954     default:
   1955             WLAN_REPORT_ERROR (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   1956                             ("%s not implemented yet !!!\n",__FUNCTION__,pTemplateParams->templateType , pTemplateParams->templateLen));
   1957             Stt = NOK;
   1958             break;
   1959     }
   1960 
   1961     return (Stt);
   1962 }
   1963 /*
   1964  * ----------------------------------------------------------------------------
   1965  Function : whalCtrl_GetTemplate
   1966  *
   1967  * Input    :  pWhalCtrl - handle to whal ctrl object
   1968  *             templateType - type of template to retrieve
   1969  * Output   :  The template buffer that is saved in the Hal
   1970  * Process  :  If the template type is legal the template buffer and length are
   1971  *             returned. Otherwise NULL is returned
   1972  * Note(s)  :  Done
   1973  * -----------------------------------------------------------------------------
   1974  */
   1975 TemplateParams_T * whalCtrl_GetTemplate(TI_HANDLE hWhalCtrl, whalCtrl_templateType_e templateType)
   1976 {
   1977     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   1978     TemplateParams_T * returnTemplate;
   1979 
   1980     switch(templateType)
   1981     {
   1982     case BEACON_TEMPLATE:
   1983         returnTemplate = &pWhalCtrl->pWhalParams->TemplateList.Beacon;
   1984         break;
   1985     case PROBE_RESPONSE_TEMPLATE:
   1986         returnTemplate = &pWhalCtrl->pWhalParams->TemplateList.ProbeResp;
   1987         break;
   1988     case PROBE_REQUEST_TEMPLATE:
   1989         returnTemplate = &pWhalCtrl->pWhalParams->TemplateList.ProbeReq;
   1990         break;
   1991     case NULL_DATA_TEMPLATE:
   1992         returnTemplate = &pWhalCtrl->pWhalParams->TemplateList.NullData;
   1993         break;
   1994     default:
   1995         returnTemplate = NULL;
   1996         break;
   1997     }
   1998 
   1999     return (returnTemplate);
   2000 }
   2001 
   2002 /*
   2003  * ----------------------------------------------------------------------------
   2004  * Function : whalCtrl_Destroy
   2005  *
   2006  * Input    :
   2007  * Output   :
   2008  * Process  :
   2009  * Note(s)  : Done
   2010  * -----------------------------------------------------------------------------
   2011  */
   2012 int whalCtrl_Destroy (TI_HANDLE hWhalCtrl)
   2013 {
   2014     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2015     DmaParams_T  *pDmaParams=NULL;
   2016 
   2017     if (pWhalCtrl == NULL)
   2018         return OK;
   2019 
   2020     if (pWhalCtrl->pWhalParams != NULL)
   2021     {
   2022     pDmaParams = whal_ParamsGetDmaParams(pWhalCtrl->pWhalParams);
   2023     }
   2024 
   2025     if( (pDmaParams != NULL) && (pWhalCtrl->pWhalSecurity != NULL) )
   2026     {
   2027     if (whalSecur_Destroy (pWhalCtrl->pWhalSecurity, pDmaParams->NumStations) != OK)
   2028         WLAN_REPORT_ERROR(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,  (" whalCtrl_Destroy: whalSecur_Destroy failure \n"));
   2029     }
   2030 
   2031     if (pWhalCtrl->pHwCtrl != NULL)
   2032     {
   2033     if (whal_hwCtrl_Destroy (pWhalCtrl->pHwCtrl) != OK)
   2034         WLAN_REPORT_ERROR(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,  (" whalCtrl_Destroy: whal_hwCtrl_Destroy failure \n"));
   2035     }
   2036 
   2037     if (pWhalCtrl->pWhalParams != NULL)
   2038     {
   2039     whal_params_Destroy(pWhalCtrl->pWhalParams);
   2040     }
   2041 
   2042     /* free the whalCtrl data structure*/
   2043     os_memoryFree (pWhalCtrl->hOs, pWhalCtrl, sizeof(WHAL_CTRL));
   2044 
   2045     return (OK);
   2046 }
   2047 
   2048 /****************************************************************************
   2049  *                      whal_hwCtrl_GetWhalParamsHandle()
   2050  ****************************************************************************
   2051  * DESCRIPTION: Return the handle of the whal params object.
   2052  *
   2053  * INPUTS:
   2054  *
   2055  * OUTPUT:  None
   2056  *
   2057  * RETURNS: handle of the WhalParams object
   2058  ****************************************************************************/
   2059 WhalParams_T *whalCtrl_GetWhalParamsHandle(WHAL_CTRL *pWhalCtrl)
   2060 {
   2061     return pWhalCtrl->pWhalParams;
   2062 }
   2063 
   2064 
   2065 
   2066 /*
   2067  * ----------------------------------------------------------------------------
   2068  * Function : Handle DMA Done interrupt
   2069  *
   2070  * Input    :
   2071  * Output   :
   2072  * Process  :
   2073  * Note(s)  : Done
   2074  * -----------------------------------------------------------------------------
   2075  */
   2076 void whalCtrl_HandleBusTxn_Complete(TI_HANDLE hWhalCtrl)
   2077 {
   2078     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2079 
   2080     /*
   2081     At this point the interrupts are masked!
   2082     it register at this position and remove its request after the interrupts are enabled again.
   2083     */
   2084     whalBus_TNETWIF_HandleBusTxn_Complete(pWhalCtrl->hWhalBus);
   2085 }
   2086 
   2087 
   2088 /*
   2089  * ----------------------------------------------------------------------------
   2090  * Function : Enable/Disable/Check/Handle interrupts - call HwCtrl object
   2091  *
   2092  * Input    :
   2093  * Output   :
   2094  * Process  :
   2095  * Note(s)  : Done
   2096  * -----------------------------------------------------------------------------
   2097  */
   2098 int whalCtrl_HandleInterrupts (TI_HANDLE hWhalCtrl)
   2099 {
   2100     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2101 
   2102     /*
   2103     At this point the interrupts are masked!
   2104     it register at this position and remove its request after the interrupts are enabled again.
   2105     */
   2106     return FwEvent(pWhalCtrl->hFwEvent);
   2107 }
   2108 
   2109 void whalCtrl_EnableInterrupts (TI_HANDLE hWhalCtrl)
   2110 {
   2111     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2112 
   2113     FwEvent_EnableInterrupts(pWhalCtrl->hFwEvent);
   2114 }
   2115 
   2116 void whalCtrl_DisableInterrupts (TI_HANDLE hWhalCtrl)
   2117 {
   2118     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2119 
   2120     FwEvent_DisableInterrupts(pWhalCtrl->hFwEvent);
   2121 }
   2122 
   2123 UINT32  whalCtrl_CheckInterrupts  (TI_HANDLE hWhalCtrl)
   2124 {
   2125     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2126 
   2127     return FwEvent_CheckInterrupts(pWhalCtrl->hFwEvent);
   2128 }
   2129 
   2130 
   2131 void  whalCtr_SlaveAckMaskNotification (TI_HANDLE hWhalCtrl)
   2132 {
   2133     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2134 
   2135     FwEvent_StateChanged(pWhalCtrl->hFwEvent);
   2136 }
   2137 
   2138 /*
   2139  * ----------------------------------------------------------------------------
   2140  * Function : whalCtrl_isCardIn
   2141  *
   2142  * Input    :
   2143  * Output   :
   2144  * Process  :
   2145  * Note(s)  : Done
   2146  * -----------------------------------------------------------------------------
   2147  */
   2148 BOOL whalCtrl_isCardIn (TI_HANDLE hWhalCtrl)
   2149 {
   2150     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2151 
   2152     return whalBus_FwCtrl_isCardIn(pWhalCtrl->pHwCtrl->hWhalBus);
   2153 }
   2154 
   2155 /*
   2156  * ----------------------------------------------------------------------------
   2157  * Function : whalCtrl_setSend4xWackInfo
   2158  *
   2159  * Input    :
   2160  * Output   :
   2161  * Process  :
   2162  * Note(s)  :
   2163  * -----------------------------------------------------------------------------
   2164  */
   2165 int whalCtrl_setSend4xWackInfo(TI_HANDLE hWhalCtrl, UINT8 Send4xWackInfo)
   2166 {
   2167     /* not implemented */
   2168     return NOK;
   2169 }
   2170 /*
   2171  * ----------------------------------------------------------------------------
   2172  * Function : whalCtrl_getSend4xWackInfo
   2173  *
   2174  * Input    :
   2175  * Output   :
   2176  * Process  :
   2177  * Note(s)  :
   2178  * -----------------------------------------------------------------------------
   2179  */
   2180 int whalCtrl_getSend4xWackInfo(TI_HANDLE hWhalCtrl, UINT8 *Send4xWackInfo)
   2181 {
   2182     /* not implemented */
   2183     return NOK;
   2184 }
   2185 
   2186 
   2187 /*
   2188  * ----------------------------------------------------------------------------
   2189  * Function : whalCtrl_SetSlotTime
   2190  *
   2191  * Input    :
   2192  * Output   :
   2193  * Process  :
   2194  * Note(s)  : Done
   2195  * -----------------------------------------------------------------------------
   2196  */
   2197 int whalCtrl_SetSlotTime (TI_HANDLE hWhalCtrl, slotTime_e SlotTimeVal)
   2198 {
   2199     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2200 
   2201     pWhalCtrl->pWhalParams->WlanParams.SlotTime = SlotTimeVal;
   2202     WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG, ("whalCtrl_SetSlotTime : Slot time = %d\n",
   2203               SlotTimeVal));
   2204 
   2205     /* Configure the new Slot-Time value to the FW. */
   2206     return whal_hwCtrl_SetSlotTime(pWhalCtrl->pHwCtrl, SlotTimeVal);
   2207 }
   2208 
   2209 /*
   2210  * ----------------------------------------------------------------------------
   2211  * Function : whalCtrl_SetPreamble
   2212  *
   2213  * Input    :
   2214  * Output   :
   2215  * Process  :
   2216  * Note(s)  : Done
   2217  * -----------------------------------------------------------------------------
   2218  */
   2219 int whalCtrl_SetPreamble (TI_HANDLE hWhalCtrl, preamble_e preambleVal)
   2220 {
   2221     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2222 
   2223     pWhalCtrl->pWhalParams->WlanParams.preamble= preambleVal;
   2224     WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG, ("whalCtrl_SetPreamble : preamble = %d\n",
   2225               preambleVal));
   2226 
   2227     return whal_hwCtrl_SetPreamble(pWhalCtrl->pHwCtrl, preambleVal);
   2228 }
   2229 
   2230 /*
   2231  * ----------------------------------------------------------------------------
   2232  * Function : whalCtrl_SetFrameRate
   2233  *
   2234  * Input    : bCtrlFrame - Whether to set new Ctrl rate+modulation or new Mgmt rate+modulation
   2235  * Output   :
   2236  * Process  :
   2237  * Note(s)  : Modulation is determined using the rate and the previously configured preamble
   2238  * -----------------------------------------------------------------------------
   2239  */
   2240 int whalCtrl_SetFrameRate (TI_HANDLE hWhalCtrl,
   2241                             rate_e   txFrmRate,
   2242                             BOOL     bCtrlFrame)
   2243 {
   2244     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2245 
   2246     whal_ParamsSetHwGenTxParams (pWhalCtrl->pWhalParams, txFrmRate, bCtrlFrame);
   2247 
   2248     WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   2249                 ("whalCtrl_SetFrameRate : txCtrlFrmRate = %d , txCtrlFrmModulation = %d , txMgmtFrmRate = %d , txMgmtFrmModulation = %d\n",
   2250                 pWhalCtrl->pWhalParams->BssInfoParams.txCtrlFrmRate,pWhalCtrl->pWhalParams->BssInfoParams.txCtrlFrmModulation,
   2251                 pWhalCtrl->pWhalParams->BssInfoParams.txMgmtFrmRate,pWhalCtrl->pWhalParams->BssInfoParams.txMgmtFrmModulation));
   2252 
   2253     return whal_hwCtrl_SetFrameRate(pWhalCtrl->pHwCtrl,
   2254                                     pWhalCtrl->pWhalParams->BssInfoParams.txCtrlFrmRate,
   2255                                     pWhalCtrl->pWhalParams->BssInfoParams.txCtrlFrmModulation,
   2256                                     pWhalCtrl->pWhalParams->BssInfoParams.txMgmtFrmRate,
   2257                                     pWhalCtrl->pWhalParams->BssInfoParams.txMgmtFrmModulation);
   2258 }
   2259 
   2260 /*
   2261  * ----------------------------------------------------------------------------
   2262  * Function : whalCtrl_SetCwMin
   2263  *
   2264  * Input    :
   2265  * Output   :
   2266  * Process  :
   2267  * Note(s)  : Done
   2268  * -----------------------------------------------------------------------------
   2269  */
   2270 int whalCtrl_SetCwMin (TI_HANDLE hWhalCtrl, UINT8 CwMin)
   2271 {
   2272   WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2273     pWhalCtrl->pWhalParams->WlanParams.CwMin = CwMin;
   2274     return OK;
   2275 }
   2276 
   2277 /*
   2278  * ----------------------------------------------------------------------------
   2279  * Function : whalCtrl_SetPacketDetectionThreshold
   2280  *
   2281  * Input    :
   2282  * Output   :
   2283  * Process  :
   2284  * Note(s)  : Done
   2285  * -----------------------------------------------------------------------------
   2286  */
   2287 int whalCtrl_SetPacketDetectionThreshold (TI_HANDLE hWhalCtrl, UINT8 PDThreshold)
   2288 {
   2289   WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2290 
   2291   pWhalCtrl->pWhalParams->WlanParams.PacketDetectionThreshold = PDThreshold;
   2292     return whal_hwCtrl_PacketDetectionThreshold(pWhalCtrl->pHwCtrl, &PDThreshold);
   2293 }
   2294 
   2295 /*
   2296  * ----------------------------------------------------------------------------
   2297  * Function : whalCtrl_SetEnergyDetection
   2298  *
   2299  * Input    :
   2300  * Output   :
   2301  * Process  :
   2302  * Note(s)  : Done
   2303  * -----------------------------------------------------------------------------
   2304  */
   2305 int whalCtrl_SetEnergyDetection (TI_HANDLE hWhalCtrl, BOOL energyDetection)
   2306 {
   2307   WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2308 
   2309     return whal_hwCtrl_SetEnergyDetection(pWhalCtrl->pHwCtrl, energyDetection);
   2310 }
   2311 
   2312 /*
   2313  * ----------------------------------------------------------------------------
   2314  * Function : whalCtrl_SwitchChannel
   2315  *
   2316  * Input    : channel - newChannelNumber
   2317  * Output   :
   2318  * Process  :
   2319  * Note(s)  : Done
   2320  * -----------------------------------------------------------------------------
   2321  */
   2322 int whalCtrl_SwitchChannel(TI_HANDLE hWhalCtrl , UINT8 channel)
   2323 {
   2324     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2325 
   2326     return whal_hwCtrl_switchChannel(pWhalCtrl->pHwCtrl, channel);
   2327 
   2328 }
   2329 
   2330 /*
   2331  * ----------------------------------------------------------------------------
   2332  * Function : whalCtrl_DisableTx
   2333  *
   2334  * Input    : None
   2335  * Output   :
   2336  * Process  :
   2337  * Note(s)  : Done
   2338  * -----------------------------------------------------------------------------
   2339  */
   2340 int whalCtrl_DisableTx(TI_HANDLE hWhalCtrl)
   2341 {
   2342     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2343 
   2344     return whal_hwCtrl_DisableTx(pWhalCtrl->pHwCtrl);
   2345 
   2346 }
   2347 
   2348 /*
   2349  * ----------------------------------------------------------------------------
   2350  * Function : whalCtrl_EnableTx
   2351  *
   2352  * Input    : None
   2353  * Output   :
   2354  * Process  :
   2355  * Note(s)  : Done
   2356  * -----------------------------------------------------------------------------
   2357  */
   2358 int whalCtrl_EnableTx(TI_HANDLE hWhalCtrl)
   2359 {
   2360     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2361 
   2362     return whal_hwCtrl_EnableTx(pWhalCtrl->pHwCtrl, whal_ParamsGetRadioChannel(pWhalCtrl->pWhalParams));
   2363 }
   2364 
   2365 /*
   2366  * ----------------------------------------------------------------------------
   2367  * Function : whalCtrl_GetTime
   2368  *
   2369  * Input    : None
   2370  * Output   :
   2371  * Process  :
   2372  * Note(s)  : Get Mac time from the Event Mbox (For Tx expiry Time)
   2373  * -----------------------------------------------------------------------------
   2374  */
   2375 UINT32  whalCtrl_GetTime(TI_HANDLE hWhalCtrl)
   2376 {
   2377     return 0;
   2378 }
   2379 
   2380 /*
   2381  * ----------------------------------------------------------------------------
   2382  * Function : whalCtrl_setDtimPeriod
   2383  *
   2384  * Input    : dtimPeriod - new Dtim Period
   2385  * Output   :
   2386  * Process  :
   2387  * Note(s)  : Done
   2388  * -----------------------------------------------------------------------------
   2389  */
   2390 int whalCtrl_setDtimPeriod(TI_HANDLE hWhalCtrl, UINT8 dtimPeriod, UINT16 TBTT)
   2391 {
   2392     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2393     UINT8 localDtimPeriod = (UINT8)dtimPeriod;
   2394     UINT16 localTBTT = (UINT16)TBTT;
   2395 
   2396     whal_ParamsSetDtimCount(pWhalCtrl->pWhalParams, (UINT8)dtimPeriod);
   2397 
   2398     whal_hwInfoElemDtimPeriodSet (pWhalCtrl->pHwCtrl->pHwMboxConfig, &localDtimPeriod, &localTBTT);
   2399 
   2400     WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   2401         ("whalCtrl_setDtimPeriod: DITIM=%d TBTT=%d\n",localDtimPeriod,localTBTT));
   2402 
   2403     return OK;
   2404 }
   2405 
   2406 /*
   2407  * ----------------------------------------------------------------------------
   2408  * Function : whalCtrl_GetDtimCount
   2409  *
   2410  * Input    :
   2411  * Output   : UINT8
   2412  * Process  :
   2413  * Note(s)  : Done
   2414  * -----------------------------------------------------------------------------
   2415  */
   2416 UINT8 whalCtrl_GetDtimCount(TI_HANDLE hWhalCtrl)
   2417 {
   2418     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2419     return whal_ParamsGetDtimCount(pWhalCtrl->pWhalParams);
   2420 }
   2421 
   2422 /*
   2423  * ----------------------------------------------------------------------------
   2424  * Function : whalCtrl_InterrogateMbox
   2425  *
   2426  * Input    :
   2427  * Output   : UINT8
   2428  * Process  :
   2429  * Note(s)  : Done
   2430  * -----------------------------------------------------------------------------
   2431  */
   2432 int whalCtrl_InterrogateMbox(TI_HANDLE hWhalCtrl , void *CB_Func, TI_HANDLE CB_handle, void *CB_Buf)
   2433 {
   2434    WHAL_CTRL           *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2435 
   2436    whal_hwInfoElemStationIdForRecoveryGet (pWhalCtrl->pHwCtrl->pHwMboxConfig, CB_Func, CB_handle, CB_Buf);
   2437 
   2438    return OK;
   2439 }
   2440 
   2441 /*
   2442  * ----------------------------------------------------------------------------
   2443  * Function : whalCtrl_InterrogateGwsiStatisitics
   2444  *
   2445  * Input    : Retrieve Statistics
   2446  * Output   :
   2447  * Process  :
   2448  * Note(s)  : Done
   2449  * -----------------------------------------------------------------------------
   2450  */
   2451 int whalCtrl_InterrogateGwsiStatisitics(TI_HANDLE hWhalCtrl, void * CB_Func, TI_HANDLE CB_handle, void * CB_Buf)
   2452 {
   2453    WHAL_CTRL * pWhalCtrl = (WHAL_CTRL *) hWhalCtrl;
   2454 
   2455    whal_hwInfoElemAcxReadGwsiStatisiticsGet (pWhalCtrl->pHwCtrl->pHwMboxConfig, CB_Func, CB_handle, CB_Buf);
   2456 
   2457    return OK;
   2458 }
   2459 
   2460 
   2461 /*
   2462  * ----------------------------------------------------------------------------
   2463  * Function : whalCtrl_InterrogateGwsiCounters
   2464  *
   2465  * Input    : Retrieve Counters
   2466  * Output   :
   2467  * Process  :
   2468  * Note(s)  : Done
   2469  * -----------------------------------------------------------------------------
   2470  */
   2471 int whalCtrl_InterrogateGwsiCounters(TI_HANDLE hWhalCtrl, void * CB_Func, TI_HANDLE CB_handle, void * CB_Buf)
   2472 {
   2473    WHAL_CTRL * pWhalCtrl = (WHAL_CTRL *) hWhalCtrl;
   2474 
   2475    whal_hwInfoElemAcxReadGwsiCountersGet (pWhalCtrl->pHwCtrl->pHwMboxConfig, CB_Func, CB_handle, CB_Buf);
   2476 
   2477    return OK;
   2478 }
   2479 
   2480 
   2481 /* ----------------------------------------------------------------------------
   2482  * Function : whalCtrl_getTsf
   2483  *
   2484  * Input    : hwHalCtrl handle, pTsf container for the FW mac timer
   2485  * Output   :
   2486  * Process  :
   2487  * Note(s)  : The time will be in usec
   2488  * -----------------------------------------------------------------------------
   2489  */
   2490 int whalCtrl_getTsf(TI_HANDLE hwHalCtrl, UINT32 *pTsf)
   2491 {
   2492     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hwHalCtrl;
   2493 
   2494     if (pTsf == NULL){
   2495             WLAN_REPORT_FATAL_ERROR(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   2496                 ("whalCtrl_getTsf: got pTsf paramerter as NULL\n"));
   2497 
   2498         return NOK;
   2499     }
   2500 
   2501     return(whal_hwCtrl_getTsf(pWhalCtrl->pHwCtrl, pTsf));
   2502 }
   2503 
   2504 
   2505 int whalCtrl_SendGenCmd (TI_HANDLE hWhalCtrl, char* pBuf, UINT32 Length)
   2506 {
   2507     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2508     short CmdId;
   2509 
   2510     if ((Length < CMD_DISABLE_RX) || (pBuf == NULL)){
   2511         WLAN_REPORT_REPLY(pWhalCtrl->hReport, HAL_HW_DATA_MODULE_LOG,
   2512         ("whalCtrl_SendGenCmd: Parameter error\n"));
   2513 
   2514         return NOK;
   2515     }
   2516 
   2517     os_memoryCopy(pWhalCtrl, (void *)&CmdId, (void *)pBuf, sizeof(CmdId));
   2518     return (whal_hwCtrl_GenCmd(pWhalCtrl->pHwCtrl, CmdId, pBuf+SIZE_OF_HEADER, (Length - SIZE_OF_HEADER)));
   2519 }
   2520 
   2521 
   2522 int whalCtrl_IsCardInstalled(TI_HANDLE hWhalCtrl)
   2523 {
   2524     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2525     return whalBus_FwCtrl_isCardIn(pWhalCtrl->pHwCtrl->hWhalBus);
   2526 }
   2527 
   2528 
   2529 /*
   2530  * ----------------------------------------------------------------------------
   2531  * Function : whalCtrl_SetBeaconInterval
   2532  *
   2533  * Input    :
   2534  * Output   :
   2535  * Process  :
   2536  * Note(s)  : Done
   2537  * -----------------------------------------------------------------------------
   2538  */
   2539 void whalCtrl_SetBeaconInterval(TI_HANDLE hWhalCtrl , UINT16 Val)
   2540 {
   2541     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2542     whal_ParamsSetBeaconInterval(pWhalCtrl->pWhalParams ,Val);
   2543 }
   2544 
   2545 /*
   2546  * ----------------------------------------------------------------------------
   2547  * Function : whalCtrl_GetBeaconInterval
   2548  *
   2549  * Input    :
   2550  * Output   : UINT16
   2551  * Process  :
   2552  * Note(s)  : Done
   2553  * -----------------------------------------------------------------------------
   2554  */
   2555 UINT16 whalCtrl_GetBeaconInterval(TI_HANDLE hWhalCtrl)
   2556 {
   2557     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2558     return whal_ParamsGetBeaconInterval(pWhalCtrl->pWhalParams);
   2559 }
   2560 
   2561 
   2562 /****************************************************************************
   2563  *                      whalCtrl_exitFromInitMode()
   2564  ****************************************************************************
   2565  * DESCRIPTION: change the interrupt module to work in operational mode
   2566  *              and the Queue to work in Async Mode
   2567  * INPUTS:
   2568  *
   2569  * OUTPUT:  None
   2570  *
   2571  * RETURNS: OK.
   2572  ****************************************************************************/
   2573 void whalCtrl_exitFromInitMode(TI_HANDLE hWhalCtrl)
   2574 {
   2575     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2576 
   2577     /* Notify Event MailBox about init complete */
   2578     eventMbox_InitComplete (pWhalCtrl->hEventMbox);
   2579 
   2580     /*
   2581     this call must be the last cmd send to the FW because upon its completion the os_complete will be called
   2582     */
   2583 
   2584     whal_hwInfoElemStationIdGet (pWhalCtrl->pHwCtrl->pHwMboxConfig,
   2585                                      (void*)((TnetwDrv_t*)pWhalCtrl->hTNETW_Driver)->fConfigureEndCB,
   2586                                      ((TnetwDrv_t*)pWhalCtrl->hTNETW_Driver)->fConfigureEndObj,
   2587                                      &pWhalCtrl->pHwCtrl->mbox);
   2588 
   2589     /*
   2590      * In case of full asynchronous mode the code below is executed earlier -
   2591      * upon starting configuring the firmware via command mailbox
   2592      */
   2593 
   2594   #if defined(USE_SYNC_API)
   2595 
   2596     whalBus_ExitFromInitMode (pWhalCtrl->hWhalBus);
   2597 
   2598     os_enableIrq (pWhalCtrl->hOs);
   2599 
   2600   #endif
   2601 }
   2602 
   2603 /****************************************************************************
   2604  *                      whalCtrl_exitFromInitModePart1()
   2605  ****************************************************************************
   2606  * DESCRIPTION: Notify Event MailBox about init complete
   2607  *
   2608  * INPUTS:
   2609  *
   2610  * OUTPUT:  None
   2611  *
   2612  * RETURNS: OK.
   2613  ****************************************************************************/
   2614 void whalCtrl_exitFromInitModePart1(TI_HANDLE hWhalCtrl)
   2615 {
   2616     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2617 
   2618     /* Notify Event MailBox about init complete */
   2619     eventMbox_InitComplete (pWhalCtrl->hEventMbox);
   2620 
   2621 }
   2622 
   2623 /****************************************************************************
   2624  *                      whalCtrl_exitFromInitModePart2()
   2625  ****************************************************************************
   2626  * DESCRIPTION: change the interrupt module to work in operational mode
   2627  *              and the Queue to work in Async Mode
   2628  * INPUTS:
   2629  *
   2630  * OUTPUT:  None
   2631  *
   2632  * RETURNS: OK.
   2633  ****************************************************************************/
   2634 void whalCtrl_exitFromInitModePart2(TI_HANDLE hWhalCtrl)
   2635 {
   2636     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2637 
   2638 
   2639     /*
   2640     this call must be the last cmd send to the FW because upon its completion the os_complete will be called
   2641     */
   2642 
   2643     whal_hwInfoElemStationIdGet (pWhalCtrl->pHwCtrl->pHwMboxConfig,
   2644                                      (void*)((TnetwDrv_t*)pWhalCtrl->hTNETW_Driver)->fConfigureEndCB,
   2645                                      ((TnetwDrv_t*)pWhalCtrl->hTNETW_Driver)->fConfigureEndObj,
   2646                                      &pWhalCtrl->pHwCtrl->mbox);
   2647 
   2648     /*
   2649      * In case of full asynchronous mode the code below is executed earlier -
   2650      * upon starting configuring the firmware via command mailbox
   2651      */
   2652 
   2653   #if defined(USE_SYNC_API)
   2654 
   2655     whalBus_ExitFromInitMode (pWhalCtrl->hWhalBus);
   2656 
   2657     os_enableIrq (pWhalCtrl->hOs);
   2658 
   2659   #endif
   2660 }
   2661 
   2662 
   2663 /*
   2664  * ----------------------------------------------------------------------------
   2665  * Function : whalCtrl_NoiseHistogramCmd
   2666  *
   2667  * Input    :
   2668  * Output   :
   2669  * Process  :
   2670  * Note(s)  :  Done
   2671  * -----------------------------------------------------------------------------
   2672  */
   2673 int whalCtrl_NoiseHistogramCmd(TI_HANDLE hWhalCtrl, whalCtrl_noiseHistogram_t* pNoiseHistParams)
   2674 {
   2675     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2676 
   2677     /* Send the Noise Histogram command*/
   2678     return (whal_hwCtrl_NoiseHistogramCmd(pWhalCtrl->pHwCtrl, pNoiseHistParams));
   2679 }
   2680 
   2681 /*
   2682  * ----------------------------------------------------------------------------
   2683  * Function : whalCtrl_powerMgmtOptionsConfig
   2684  *
   2685  * Input    : 1) TI_HANDLE - handle to the WhalCtrl object.
   2686  *
   2687  * Output   :  TI_STATUS - OK on success else NOK.
   2688  *
   2689  * Process  : configuration of the power managment options mailbox command.
   2690  *
   2691  * Note(s)  :
   2692  * -----------------------------------------------------------------------------
   2693  */
   2694 TI_STATUS whalCtrl_powerMgmtConfig(TI_HANDLE theWhalCtrlHandle,
   2695                                     whalCtrl_powerSaveParams_t* powerSaveParams)
   2696  /*whalCtrl_powerMgmtConfig_t thePowerMgmtConfig)*/
   2697 {
   2698     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL*)theWhalCtrlHandle;
   2699 
   2700 
   2701 
   2702     int powerMgmtConfStatus;
   2703 
   2704     /*
   2705     breaking the debug information into 2 section due to the fact that this message is
   2706     too long and exceed message buffer limitation.
   2707     */
   2708     WLAN_REPORT_INFORMATION(pWhalCtrl->hReport,
   2709                             HAL_CTRL_MODULE_LOG,
   2710                             ("whalCtrlPowerSaveParams -:\n\
   2711                              ps802_11Enable = 0x%X\n\
   2712                              hangOverPeriod = 0x%X\n\
   2713                  needToSendNullData = 0x%X\n\
   2714                  numNullPktRetries = 0x%X\n\
   2715                              NullPktRateModulation = 0x%X\n",
   2716                              powerSaveParams->ps802_11Enable,
   2717                              powerSaveParams->hangOverPeriod,
   2718                  powerSaveParams->needToSendNullData,
   2719                  powerSaveParams->numNullPktRetries,
   2720                              powerSaveParams->NullPktRateModulation));
   2721 
   2722 
   2723     /*
   2724     PowerMgmtOptions IE
   2725     */
   2726 
   2727     powerMgmtConfStatus = whal_hwCtrl_PowerMgmtConfigurationSet (pWhalCtrl->pHwCtrl,
   2728                                                                 powerSaveParams);
   2729 
   2730     return (TI_STATUS)powerMgmtConfStatus;
   2731 }
   2732 
   2733 
   2734 /*
   2735  * ----------------------------------------------------------------------------
   2736  * Function : whalCtrl_SetBeaconFiltering
   2737  *
   2738  * Input    : UINT8, UINT8
   2739  * Output   :
   2740  * Process  :
   2741  * Note(s)  : Done
   2742  * -----------------------------------------------------------------------------
   2743  */
   2744 int whalCtrl_SetBeaconFiltering(TI_HANDLE hWhalCtrl, UINT8 beaconFilteringStatus, UINT8 numOfBeaconsToBuffer)
   2745 {
   2746     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2747 
   2748 
   2749     pWhalCtrl->pWhalParams->WlanParams.beaconFilterParams.desiredState = beaconFilteringStatus;
   2750     pWhalCtrl->pWhalParams->WlanParams.beaconFilterParams.numOfElements = numOfBeaconsToBuffer;
   2751 
   2752 
   2753     WLAN_REPORT_INFORMATION(pWhalCtrl->hReport,
   2754                             HAL_CTRL_MODULE_LOG,
   2755                             ("whalCtrl_SetBeaconFiltering  :\n\
   2756                               beaconFilteringStatus = %s \n\
   2757                               numberOfBeaconsToBuffer = %d\n",
   2758                               (beaconFilteringStatus == FALSE) ? "BUFFERING" : "FILTERING",
   2759                               numOfBeaconsToBuffer));
   2760 
   2761     return whal_hwCtrl_SetBeaconFiltering(pWhalCtrl->pHwCtrl, beaconFilteringStatus, numOfBeaconsToBuffer);
   2762 }
   2763 
   2764 
   2765 /*
   2766  * ----------------------------------------------------------------------------
   2767  * Function : whalCtrl_GetBeaconFiltering
   2768  *
   2769  * Input    : UINT8, UINT8
   2770  * Output   :
   2771  * Process  :
   2772  * Note(s)  : Done
   2773  * -----------------------------------------------------------------------------
   2774  */
   2775 int whalCtrl_GetBeaconFiltering(TI_HANDLE hWhalCtrl)
   2776 {
   2777     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2778 
   2779     if ( NULL == pWhalCtrl )
   2780     {
   2781         WLAN_OS_REPORT(("whalCtrl_GetBeaconFiltering-hWhalCtrl = NULL !"));
   2782         return NOK ;
   2783     }
   2784     else
   2785     {
   2786         if ( NULL == pWhalCtrl->pWhalParams )
   2787         {
   2788             WLAN_REPORT_ERROR(pWhalCtrl->hReport , HAL_CTRL_MODULE_LOG , ("whalCtrl_GetBeaconFiltering : pWhalParams = NULL !!!")) ;
   2789             return NOK ;
   2790         }
   2791         return (OK);
   2792     }
   2793 
   2794 }
   2795 
   2796 
   2797 /*
   2798  * ----------------------------------------------------------------------------
   2799  * Function : whalCtrl_SetBeaconFilterIETable
   2800  *
   2801  * Input    : Number of IE in table, Table, Table szie
   2802  * Output   :
   2803  * Process  : transfer paramaters to the HAL, check for size limit
   2804  * Note(s)  : Done
   2805  * -----------------------------------------------------------------------------
   2806  */
   2807 int whalCtrl_SetBeaconFilterIETable(TI_HANDLE hWhalCtrl, UINT8 *numberOfIEs, UINT8 * IETable, UINT8 *IETableSize)
   2808 {
   2809     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2810 
   2811 
   2812     if (*IETableSize > BEACON_FILTER_TABLE_MAX_SIZE)
   2813     {
   2814         WLAN_REPORT_ERROR(pWhalCtrl->hReport,
   2815                           HAL_CTRL_MODULE_LOG,
   2816                           ("whalCtrl_SetBeaconFilterIETable : Table size is too big %d (>%d)\n",
   2817             *IETableSize, BEACON_FILTER_TABLE_MAX_SIZE));
   2818         return PARAM_VALUE_NOT_VALID;
   2819     }
   2820 
   2821     os_memoryZero (pWhalCtrl->hOs, (void *)pWhalCtrl->pWhalParams->WlanParams.beaconFilterIETable.IETable, BEACON_FILTER_TABLE_MAX_SIZE);
   2822     os_memoryCopy(pWhalCtrl->hOs, (void *)pWhalCtrl->pWhalParams->WlanParams.beaconFilterIETable.IETable, (void *)IETable, *IETableSize);
   2823     pWhalCtrl->pWhalParams->WlanParams.beaconFilterIETable.numberOfIEs  = *numberOfIEs;
   2824     pWhalCtrl->pWhalParams->WlanParams.beaconFilterIETable.IETableSize  = *IETableSize;
   2825 
   2826 
   2827     WLAN_REPORT_INFORMATION(pWhalCtrl->hReport,
   2828                             HAL_CTRL_MODULE_LOG,
   2829                             ("whalCtrl_SetBeaconFilterIETable : \n\
   2830                               Number of IE = %d \n\
   2831                               IETable = 0x%p \n\
   2832                               IETableSize = %d\n",
   2833                               *numberOfIEs, IETable, *IETableSize));
   2834 
   2835     return whal_hwCtrl_SetBeaconFilterIETable(pWhalCtrl->pHwCtrl, numberOfIEs, IETable, IETableSize ) ;
   2836 }
   2837 
   2838 
   2839 
   2840 /*
   2841  * ----------------------------------------------------------------------------
   2842  * Function : whalCtrl_wakeUpCondition
   2843  *
   2844  * Input    : 1) TI_HANDLE - handle to the WhalCtrl object.
   2845  *
   2846  * Output   :  TI_STATUS - OK on success else NOK.
   2847  *
   2848  * Process  : configuration of the power managment options mailbox command.
   2849  *
   2850  * Note(s)  :
   2851  * -----------------------------------------------------------------------------
   2852  */
   2853 TI_STATUS whalCtrl_wakeUpCondition(TI_HANDLE theWhalCtrlHandle,
   2854                                    whalCtrl_powerMgmtConfig_t thePowerMgmtConfig)
   2855 {
   2856     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL*)theWhalCtrlHandle;
   2857     whalCtrl_powerMgmtConfig_t *pPowerMgmtOptionsConfig = &thePowerMgmtConfig;
   2858     int status;
   2859 
   2860     /*
   2861     breaking the debug information into 2 section due to the fact that this message is
   2862     too long and exceed message buffer limitation.
   2863     */
   2864     WLAN_REPORT_INFORMATION(pWhalCtrl->hReport,
   2865                             HAL_CTRL_MODULE_LOG,
   2866                             ("whalCtrl_wakeUpCondition :\n\
   2867                              listenInterval = 0x%X\n",
   2868                              pPowerMgmtOptionsConfig->listenInterval));
   2869 
   2870     status = whal_hwCtrl_wakeUpCondition (pWhalCtrl->pHwCtrl,
   2871                                          pPowerMgmtOptionsConfig);
   2872 
   2873     return (TI_STATUS)status;
   2874 }
   2875 
   2876 /*
   2877  * ----------------------------------------------------------------------------
   2878  * Function : whalCtrl_PMConfig
   2879  *
   2880  * Input    : 1) TI_HANDLE - handle to the WhalCtrl object.
   2881  *
   2882  * Output   :  TI_STATUS - OK on success else NOK.
   2883  *
   2884  * Process  : configuration of the power managment options mailbox command.
   2885  *
   2886  * Note(s)  :
   2887  * -----------------------------------------------------------------------------
   2888  */
   2889 TI_STATUS whalCtrl_PMConfig(TI_HANDLE theWhalCtrlHandle,
   2890                             whalCtrl_powerMgmtConfig_t thePowerMgmtConfig)
   2891 {
   2892     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL*)theWhalCtrlHandle;
   2893     whalCtrl_powerMgmtConfig_t *pPowerMgmtOptionsConfig = &thePowerMgmtConfig;
   2894     TI_STATUS  status;
   2895 
   2896     WLAN_REPORT_INFORMATION(pWhalCtrl->hReport,
   2897                             HAL_CTRL_MODULE_LOG,
   2898                             ("whalCtrl_PMConfig :\n\
   2899                              ELPEnable = 0x%X\n\
   2900                              BBWakeUpTime = 0x%X\n\
   2901                              PLLlockTime = 0x%X\n",
   2902                              pPowerMgmtOptionsConfig->ELPEnable,
   2903                              pPowerMgmtOptionsConfig->BBWakeUpTime,
   2904                              pPowerMgmtOptionsConfig->PLLlockTime));
   2905 
   2906     status = (TI_STATUS)whal_hwCtrl_PMConfig (pWhalCtrl->pHwCtrl, pPowerMgmtOptionsConfig);
   2907     return status;
   2908 }
   2909 
   2910 /*
   2911  * ----------------------------------------------------------------------------
   2912  * Function : whalCtrl_BcnBrcOptions
   2913  *
   2914  * Input    : 1) TI_HANDLE - handle to the WhalCtrl object.
   2915  *
   2916  * Output   :  TI_STATUS - OK on success else NOK.
   2917  *
   2918  * Process  : configuration of the power managment options mailbox command.
   2919  *
   2920  * Note(s)  :
   2921  * -----------------------------------------------------------------------------
   2922  */
   2923 TI_STATUS whalCtrl_BcnBrcOptions(TI_HANDLE theWhalCtrlHandle,
   2924                             whalCtrl_powerMgmtConfig_t thePowerMgmtConfig)
   2925 {
   2926     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL*)theWhalCtrlHandle;
   2927     whalCtrl_powerMgmtConfig_t *pPowerMgmtBcnBrcOptions = &thePowerMgmtConfig;
   2928     TI_STATUS  status;
   2929 
   2930     /* Just take the last configured parameter of ConsecutivePsPollDeliveryFailureThreshold */
   2931     pPowerMgmtBcnBrcOptions->ConsecutivePsPollDeliveryFailureThreshold =
   2932         (whal_ParamsGetWlanParams (pWhalCtrl->pWhalParams))->ConsecutivePsPollDeliveryFailureThreshold;
   2933 
   2934     WLAN_REPORT_INFORMATION(pWhalCtrl->hReport,
   2935                             HAL_CTRL_MODULE_LOG,
   2936                             ("whalCtrl_BcnBrcOptions :\n\
   2937                              BeaconRxTimeout = 0x%X\n\
   2938                              BroadcastRxTimeout = 0x%X\n\
   2939                              RxBroadcastInPs = 0x%X\n",
   2940                              pPowerMgmtBcnBrcOptions->BcnBrcOptions.BeaconRxTimeout,
   2941                              pPowerMgmtBcnBrcOptions->BcnBrcOptions.BroadcastRxTimeout,
   2942                              pPowerMgmtBcnBrcOptions->BcnBrcOptions.RxBroadcastInPs));
   2943 
   2944     status = (TI_STATUS)whal_hwCtrl_BcnBrcOptions (pWhalCtrl->pHwCtrl, pPowerMgmtBcnBrcOptions);
   2945     return status;
   2946 }
   2947 
   2948 /*
   2949  * ----------------------------------------------------------------------------
   2950  * Function : whalCtrl_RegisterCmdCompleteGenericCB
   2951  *
   2952  * Input    : 1) hWhalCtrl - this
   2953  *            2) CbFunc    - The Callback
   2954  *
   2955  *
   2956  * Note(s)  :  None
   2957  * -----------------------------------------------------------------------------
   2958  */
   2959 int  whalCtrl_RegisterCmdCompleteGenericCB(TI_HANDLE hWhalCtrl, void *CbFunc, void *CbObj)
   2960 {
   2961     WHAL_CTRL   *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2962 
   2963     return CmdQueue_RegisterCmdCompleteGenericCB(((TnetwDrv_t*)pWhalCtrl->hTNETW_Driver)->hCmdQueue,CbFunc,CbObj);
   2964 }
   2965 
   2966 
   2967 /*
   2968  * ----------------------------------------------------------------------------
   2969  * Function : whalCtrl_EventMbox_RegisterForEvent
   2970  *
   2971  * Input    : 1) hWhalCtrl - this
   2972  *            2) EventBit  - The Event id
   2973  *            3) CbFunc    - The Callback
   2974  *            4) CbObj     - The Callback Handle
   2975  *
   2976  * Note(s)  :  None
   2977  * -----------------------------------------------------------------------------
   2978  */
   2979 int  whalCtrl_EventMbox_RegisterForEvent(TI_HANDLE hWhalCtrl, int EventBit, void *CbFunc, void *CbObj)
   2980 {
   2981     WHAL_CTRL   *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2982 
   2983     return eventMbox_RegisterEventCB(pWhalCtrl->hEventMbox,
   2984                                              EventBit, CbFunc, CbObj);
   2985 }
   2986 /*
   2987  * ----------------------------------------------------------------------------
   2988  * Function : whalCtrl_EventMbox_Disable
   2989  *
   2990  * Input    : 1) hWhalCtrl - this
   2991  *            2) EventBit  - The Event id
   2992  *
   2993  * Note(s)  :  None
   2994  * -----------------------------------------------------------------------------
   2995  */
   2996 int whalCtrl_EventMbox_Disable(TI_HANDLE hWhalCtrl, int EventBit)
   2997 {
   2998     WHAL_CTRL   *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   2999 
   3000     return eventMbox_EvMask(pWhalCtrl->hEventMbox, EventBit);
   3001 }
   3002 /*
   3003  * ----------------------------------------------------------------------------
   3004  * Function : whalCtrl_EventMbox_Enable
   3005  *
   3006  * Input    : 1) hWhalCtrl - this
   3007  *            2) EventBit  - The Event id
   3008  *
   3009  * Note(s)  :  None
   3010  * -----------------------------------------------------------------------------
   3011  */
   3012 int whalCtrl_EventMbox_Enable(TI_HANDLE hWhalCtrl, int EventBit)
   3013 {
   3014     WHAL_CTRL   *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3015 
   3016     return eventMbox_EvUnMask(pWhalCtrl->hEventMbox, EventBit);
   3017 }
   3018 
   3019 /*
   3020  * ----------------------------------------------------------------------------
   3021  * Function : whalCtrl_GetRadioStandByState
   3022  *
   3023  * Input    :
   3024  *
   3025  * Note(s)  :  None
   3026  * -----------------------------------------------------------------------------
   3027  */
   3028 int whalCtrl_GetRadioStandByState(TI_HANDLE hWhalCtrl)
   3029 {
   3030     WHAL_CTRL   *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3031 
   3032     return whalBus_FwCtrl_GetRadioStandByState(pWhalCtrl->pHwCtrl->hWhalBus);
   3033 }
   3034 
   3035 
   3036 /*
   3037  * ----------------------------------------------------------------------------
   3038  * Function : whalCtrl_GetFWInfo
   3039  *
   3040  * Input    :
   3041  * Output   :  FWInfo
   3042  * Process  :  Retrieves the FWInfo
   3043  * Note(s)  :  Done
   3044  * -----------------------------------------------------------------------------
   3045  */
   3046 TI_STATUS  whalCtrl_GetFWInfo   (TI_HANDLE hWhalCtrl, whalCtrl_chip_t *pChip_Version)
   3047 {
   3048     int i;
   3049     char *StaId;
   3050 
   3051     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3052     WlanParams_T *pWlanParams = whal_ParamsGetWlanParams(pWhalCtrl->pWhalParams);
   3053 
   3054     /*
   3055      * return parameters from the wlan hardware
   3056      */
   3057     StaId = (char *)(whal_ParamsGetSrcMac(pWhalCtrl->pWhalParams));
   3058     for (i=0; i<6; i++)
   3059     {
   3060         pChip_Version->macAddress.addr[i] = StaId[i];
   3061     }
   3062     pChip_Version->preamble = (preamble_e)pWlanParams->preamble;
   3063 
   3064 
   3065     /* update the EEPROM version*/
   3066     pChip_Version->e2Ver.major = pWlanParams->majorE2Ver;
   3067     pChip_Version->e2Ver.minor = pWlanParams->minorE2Ver;
   3068 
   3069     /*
   3070      * get radio number and type
   3071      */
   3072     {
   3073         UINT32 RadioType;
   3074         UINT32 RadioNumber;
   3075 
   3076         whalCtrl_getRadioNumber(hWhalCtrl, &RadioType, &RadioNumber);
   3077 
   3078         pChip_Version->radioType = (radioType_e)RadioType;
   3079         pChip_Version->e2Ver.last = RadioNumber;
   3080     }
   3081 
   3082     /* update the firmware version*/
   3083     os_memoryCopy(pWhalCtrl->hOs, (void *)pChip_Version->fwVer,
   3084                   (void *)(whal_ParamsGetFwVersion(pWhalCtrl->pWhalParams)), FW_VERSION_LEN);
   3085     WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   3086                              ("FW version is %s\n", pChip_Version->fwVer));
   3087 
   3088     WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   3089                              ("E2 Major version is %d\n", pChip_Version->e2Ver.major));
   3090     WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   3091                              ("E2 Minor version is %d\n", pChip_Version->e2Ver.minor));
   3092     WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   3093                              ("E2 Last version is %d\n", pChip_Version->e2Ver.last));
   3094 
   3095     return OK;
   3096 }
   3097 
   3098 /*
   3099  * ----------------------------------------------------------------------------
   3100  * Function : whalCtrl_SwitchChannelCmd
   3101  *
   3102  * Input    :
   3103  * Output   :
   3104  * Process  :
   3105  * Note(s)  :  Done
   3106  * -----------------------------------------------------------------------------
   3107  */
   3108 int whalCtrl_SwitchChannelCmd (TI_HANDLE hWhalCtrl, whalCtrl_switchChannelCmd_t* pSwitchChannelCmd)
   3109 {
   3110     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3111 
   3112 
   3113     WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   3114                             ("\n SwitchChannelCmd :\n \
   3115                               channelNumber = %d\n \
   3116                               switchTime = %d\n \
   3117                               txFlag = %d\n \
   3118                               flush = %d \n ",
   3119                              pSwitchChannelCmd->channelNumber,
   3120                              pSwitchChannelCmd->switchTime,
   3121                              pSwitchChannelCmd->txFlag,
   3122                              pSwitchChannelCmd->flush));
   3123 
   3124     /*
   3125      * save Bss info parameters
   3126      */
   3127     pWhalCtrl->pWhalParams->BssInfoParams.RadioChannel = pSwitchChannelCmd->channelNumber;
   3128 
   3129     /*
   3130      * call the hardware to start/join the bss
   3131      */
   3132     return whal_hwCtrl_SwitchChannelCmd(pWhalCtrl->pHwCtrl, pSwitchChannelCmd);
   3133 
   3134 }
   3135 
   3136 /*
   3137  * ----------------------------------------------------------------------------
   3138  * Function : whalCtrl_SwitchChannelCancelCmd
   3139  *
   3140  * Input    :
   3141  * Output   :
   3142  * Process  :
   3143  * Note(s)  :  Done
   3144  * -----------------------------------------------------------------------------
   3145  */
   3146 int whalCtrl_SwitchChannelCancelCmd (TI_HANDLE hWhalCtrl, UINT8 channel)
   3147 {
   3148     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3149 
   3150     WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   3151                             ("\n whalCtrl_SwitchChannelCancelCmd :\n "));
   3152 
   3153     /*
   3154      * save Bss info parameters
   3155      */
   3156     pWhalCtrl->pWhalParams->BssInfoParams.RadioChannel = channel;
   3157 
   3158     /*
   3159      * call the hardware to start/join the bss
   3160      */
   3161     return whal_hwCtrl_SwitchChannelCancelCmd(pWhalCtrl->pHwCtrl);
   3162 
   3163 }
   3164 
   3165 
   3166 /*
   3167  * ----------------------------------------------------------------------------
   3168  * Function : whalCtrl_SetRSSIParamsCmd
   3169  *
   3170  * Input    :   pointer to stuct "whalCtrl_roamingTriggerCmd_t", but only the
   3171  *              following parameters are relevant;
   3172  *              RSSIthreshold
   3173  *              RSSIFilterWeight
   3174  *              RSSIFilterDepth
   3175  *
   3176  * Output   :
   3177  * Process  :
   3178  * -----------------------------------------------------------------------------
   3179  */
   3180 int whalCtrl_SetRSSIParamsCmd (TI_HANDLE hWhalCtrl, whalCtrl_roamingTriggerCmd_t* pRoamingTriggerCmd)
   3181 {
   3182     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3183 
   3184     WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   3185                             ("\n SetRSSIParamsCmd :\n \
   3186                               RSSIthreshold = %d\n \
   3187                               RSSIFilterWeight = %d\n \
   3188                               RSSIFilterDepth = %d \n ",
   3189                               pRoamingTriggerCmd->rssiThreshold,
   3190                               pRoamingTriggerCmd->rssiFilterWeight,
   3191                               pRoamingTriggerCmd->rssiFilterDepth));
   3192 
   3193     pWhalCtrl->pWhalParams->WlanParams.roamTriggers.rssiThreshold = pRoamingTriggerCmd->rssiThreshold;
   3194     pWhalCtrl->pWhalParams->WlanParams.roamTriggers.rssiFilterWeight = pRoamingTriggerCmd->rssiFilterWeight;
   3195     pWhalCtrl->pWhalParams->WlanParams.roamTriggers.rssiFilterDepth = pRoamingTriggerCmd->rssiFilterDepth;
   3196     pWhalCtrl->pWhalParams->WlanParams.roamTriggers.lowRSSIEventType = pRoamingTriggerCmd->lowRSSIEventType;
   3197 
   3198     return   whal_hwCtrl_SetRSSIParams( pWhalCtrl->pHwCtrl, pRoamingTriggerCmd);
   3199 }
   3200 
   3201 /*
   3202  * ----------------------------------------------------------------------------
   3203  * Function : whalCtrl_SetSNRParamsCmd
   3204  *
   3205  * Input    :
   3206  *
   3207  * Output   :
   3208  * Process  :
   3209  * -----------------------------------------------------------------------------
   3210  */
   3211 int whalCtrl_SetSNRParamsCmd (TI_HANDLE hWhalCtrl, whalCtrl_roamingTriggerCmd_t *pRoamingTriggerCmd)
   3212 {
   3213     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3214 
   3215 
   3216     WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   3217                             ("\n whalCtrl_SetSNRParamsCmd :\n \
   3218                               SNRThreshold = %d\n \
   3219                               SNRFilterWeight = %d\n \
   3220                               SNRFilterDepth = %d \n \
   3221                               EdgeLevel = %d \n ",
   3222                               pRoamingTriggerCmd->snrThreshold,
   3223                               pRoamingTriggerCmd->snrFilterWeight,
   3224                               pRoamingTriggerCmd->snrFilterDepth,
   3225                               pRoamingTriggerCmd->lowSNREventType));
   3226 
   3227 
   3228     pWhalCtrl->pWhalParams->WlanParams.roamTriggers.snrThreshold        =  pRoamingTriggerCmd->snrThreshold;
   3229     pWhalCtrl->pWhalParams->WlanParams.roamTriggers.snrFilterWeight         =  pRoamingTriggerCmd->snrFilterWeight;
   3230     pWhalCtrl->pWhalParams->WlanParams.roamTriggers.snrFilterDepth      =  pRoamingTriggerCmd->snrFilterDepth;
   3231     pWhalCtrl->pWhalParams->WlanParams.roamTriggers.lowSNREventType     =  pRoamingTriggerCmd->lowSNREventType;
   3232 
   3233     return whal_hwCtrl_SetSNRParams(pWhalCtrl->pHwCtrl, &pWhalCtrl->pWhalParams->WlanParams.roamTriggers);
   3234 }
   3235 
   3236 /*
   3237  * ----------------------------------------------------------------------------
   3238  * Function : whalCtrl_SetMaxTxRetryParamsCmd
   3239  *
   3240  * Input    :   pointer to stuct "whalCtrl_roamingTriggerCmd_t", but only the
   3241  *              following parameters are relevant;
   3242  *              maxTxRetry
   3243  *
   3244  * Output   :
   3245  * Process  :
   3246  * -----------------------------------------------------------------------------
   3247  */
   3248 int whalCtrl_SetMaxTxRetryParamsCmd (TI_HANDLE hWhalCtrl, whalCtrl_roamingTriggerCmd_t* pRoamingTriggerCmd)
   3249 {
   3250     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3251 
   3252     WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   3253                             ("\n SetMaxTxRetryParamsCmdCmd :\n \
   3254                               maxTxRetry = %d \n ",
   3255                               pRoamingTriggerCmd->maxTxRetry));
   3256     pWhalCtrl->pWhalParams->WlanParams.roamTriggers.maxTxRetry = pRoamingTriggerCmd->maxTxRetry;
   3257 
   3258     return   whal_hwCtrl_SetMaxTxRetryParams(pWhalCtrl->pHwCtrl, pRoamingTriggerCmd);
   3259 }
   3260 
   3261 
   3262 /*
   3263  * ----------------------------------------------------------------------------
   3264  * Function : whalCtrl_SetBssLossTsfThresholdParamsCmd
   3265  *
   3266  * Input    :   pointer to stuct "whalCtrl_roamingTriggerCmd_t", but only the
   3267  *              following parameters are relevant;
   3268  *              BssLossTimeout
   3269  *              TsfMissThreshold
   3270  *
   3271  * Output   :
   3272  * Process  :
   3273  * -----------------------------------------------------------------------------
   3274  */
   3275 int whalCtrl_SetBssLossTsfThresholdParamsCmd (TI_HANDLE hWhalCtrl, whalCtrl_roamingTriggerCmd_t* pRoamingTriggerCmd)
   3276 {
   3277     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3278 
   3279     WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   3280                             ("\n whalCtrl_SetBssLossTsfThresholdParamsCmd :\n \
   3281                               BssLossTimeout = %d\n \
   3282                               TsfMissThreshold = %d \n ",
   3283                               pRoamingTriggerCmd->BssLossTimeout,
   3284                               pRoamingTriggerCmd->TsfMissThreshold));
   3285 
   3286     pWhalCtrl->pWhalParams->WlanParams.roamTriggers.BssLossTimeout = pRoamingTriggerCmd->BssLossTimeout;
   3287     pWhalCtrl->pWhalParams->WlanParams.roamTriggers.TsfMissThreshold = pRoamingTriggerCmd->TsfMissThreshold;
   3288 
   3289     return   whal_hwCtrl_SetBssLossTsfThresholdParams(  pWhalCtrl->pHwCtrl, pRoamingTriggerCmd);
   3290 }
   3291 
   3292 /*
   3293  * ----------------------------------------------------------------------------
   3294  * Function : whalCtrl_GetAverageRSSI
   3295  *
   3296  * Input    :   averageRSSI - pointer for return verage RSSI result
   3297  *
   3298  * Output   :   averageRSSI
   3299  * Process  :
   3300  * -----------------------------------------------------------------------------
   3301  */
   3302 int whalCtrl_GetAverageRSSI (TI_HANDLE hWhalCtrl, INT8* averageRSSI)
   3303 {
   3304 #ifdef TI_DBG /* remove the #ifdef TI_DBG when implementing this function */
   3305     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3306 
   3307     WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   3308                             ("\n GetAverageRSSI :\n \
   3309                               averageRSSI = NOT IMPLEMENTED\n"));
   3310 #endif /* TI_DBG */
   3311     return NOK;
   3312 }
   3313 
   3314 
   3315 /*
   3316  * ----------------------------------------------------------------------------
   3317  * Function : whalCtrl_GetAverageRSSI
   3318  *
   3319  * Input    :   averageRSSI - pointer for return verage RSSI result
   3320  *
   3321  * Output   :   averageRSSI
   3322  * Process  :
   3323  * -----------------------------------------------------------------------------
   3324  */
   3325 int whalCtrl_GetAsynRSSI (TI_HANDLE hWhalCtrl,void *CB_Func, TI_HANDLE CB_handle, PUINT8 CB_Buf)
   3326 {
   3327     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3328     int status ;
   3329 
   3330     status = whal_hwCtrl_GetAsynRSSI(pWhalCtrl->pHwCtrl,CB_Func,CB_handle,CB_Buf);
   3331 
   3332     WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   3333                             ("\n whalCtrl_GetAsynRSSI AYNC!!!! :\n "));
   3334 
   3335     return status;
   3336 }
   3337 
   3338 
   3339 /*
   3340  * ----------------------------------------------------------------------------
   3341  * Function : whalCtrl_FwDisconnect
   3342  * Input    : None
   3343  * Output   :
   3344  * Process  :
   3345  * Note(s)  : Done
   3346  * -----------------------------------------------------------------------------
   3347  */
   3348 
   3349 int whalCtrl_FwDisconnect(TI_HANDLE hWhalCtrl, UINT32 ConfigOptions, UINT32 FilterOptions)
   3350 {
   3351     WHAL_CTRL *pWhalCtrl        = (WHAL_CTRL *)hWhalCtrl;
   3352     WlanParams_T *pWlanParams   = whal_ParamsGetWlanParams(pWhalCtrl->pWhalParams);
   3353 
   3354     pWlanParams->bJoin = FALSE;
   3355 
   3356     WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   3357                              ("Sending FW disconnect, ConfigOptions=%x, FilterOPtions=%x\n",
   3358                               ConfigOptions, FilterOptions));
   3359 
   3360     return whal_hwCtrl_FwDisconnect(pWhalCtrl->pHwCtrl, ConfigOptions, FilterOptions);
   3361 
   3362 } /* whalCtrl_FwDisconnect()*/
   3363 
   3364 /*
   3365  * ----------------------------------------------------------------------------
   3366  * Function : whalCtrl_resetTxCounters
   3367  * Input    : None
   3368  * Output   :
   3369  * Process  : Reset the HAL Tx statistics counters.
   3370  * Note(s)  : Done
   3371  * -----------------------------------------------------------------------------
   3372  */
   3373 
   3374 void whalCtrl_resetTxCounters(TI_HANDLE hWhalCtrl)
   3375 {
   3376 /*
   3377     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3378 
   3379     whalBus_resetTxCounters(pWhalCtrl->hWhalBus);
   3380 */
   3381 }
   3382 
   3383 
   3384 /*---------------------------------------------------------
   3385   debug commands for testing the Roaming trigger functions
   3386 -----------------------------------------------------------*/
   3387 #ifdef ROAMING_TRIGGER_DBG
   3388 int whalCtrl_dbgRoamingCommands (TI_HANDLE hWhalCtrl)
   3389 {
   3390     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3391     whalCtrl_roamingTriggerCmd_t roamingTriggerCmd;
   3392     whalCtrl_roamingTriggerCmd_t *pCmd ;
   3393     int stt1, stt4;
   3394     INT8 rssiVal ;
   3395 
   3396     pCmd = &roamingTriggerCmd ;
   3397 
   3398     pCmd->rssiFilterDepth   = 15;
   3399     pCmd->rssiFilterWeight  = 20;
   3400     pCmd->rssiThreshold     = -70;
   3401     pCmd->lowRSSIEventType  = 0;
   3402     stt1 = whalCtrl_SetRSSIParamsCmd (pWhalCtrl, pCmd);
   3403 
   3404     pCmd->maxTxRetry        = 10;
   3405     stt1 = whalCtrl_SetMaxTxRetryParamsCmd (pWhalCtrl, pCmd);
   3406 
   3407     pCmd->BssLossTimeout    = 1;
   3408     pCmd->TsfMissThreshold  = 6;
   3409     stt1 = whalCtrl_SetBssLossTsfThresholdParamsCmd (pWhalCtrl, pCmd);
   3410 
   3411     stt4 = whalCtrl_GetAverageRSSI(pWhalCtrl,&rssiVal);
   3412 
   3413     return (OK);
   3414 }
   3415 
   3416 
   3417 TI_STATUS whalCtrl_dbgRegisterRoamingEventCB(TI_HANDLE hWhalCtrl)
   3418 {
   3419     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3420 
   3421     whalCtrl_EventMbox_RegisterForEvent(pWhalCtrl,
   3422                                         HAL_EVENT_RSSI_LEVEL,
   3423                                         (void *)whalCtrl_dbg_RSSI_LEVEL,
   3424                                         pWhalCtrl);
   3425     whalCtrl_EventMbox_Enable(pWhalCtrl, HAL_EVENT_RSSI_LEVEL);
   3426 
   3427     whalCtrl_EventMbox_RegisterForEvent(pWhalCtrl,
   3428                                         HAL_EVENT_SYNCHRONIZATION_TIMEOUT,
   3429                                         (void *)whalCtrl_dbg_SYNCHRONIZATION,
   3430                                         pWhalCtrl);
   3431     whalCtrl_EventMbox_Enable(pWhalCtrl, HAL_EVENT_SYNCHRONIZATION_TIMEOUT);
   3432 
   3433     whalCtrl_EventMbox_RegisterForEvent(pWhalCtrl,
   3434                                         HAL_EVENT_BSS_LOSE,
   3435                                         (void *)whalCtrl_dbg_BSS_LOSE,
   3436                                         pWhalCtrl);
   3437     whalCtrl_EventMbox_Enable(pWhalCtrl, HAL_EVENT_BSS_LOSE);
   3438 
   3439     whalCtrl_EventMbox_RegisterForEvent(pWhalCtrl,
   3440                                         HAL_EVENT_MAX_TX_RETRY,
   3441                                         (void *)whalCtrl_dbg_MAX_TX_RETRY,
   3442                                         pWhalCtrl);
   3443     whalCtrl_EventMbox_Enable(pWhalCtrl, HAL_EVENT_MAX_TX_RETRY);
   3444 
   3445     return (OK);
   3446 }
   3447 
   3448 
   3449 
   3450 
   3451 
   3452 static void whalCtrl_dbg_RSSI_LEVEL(TI_HANDLE hWhalCtrl,char* str , UINT32 strLen)
   3453 {
   3454     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3455     INT8       averageRssi ;
   3456 
   3457     os_memoryCopy(pWhalCtrl->hOs, (void *)&averageRssi, (void *)str, strLen);
   3458 
   3459 
   3460     WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, SITE_MGR_MODULE_LOG,
   3461                            ("got event: whalCtrl_dbg_RSSI_LEVEL, averageRssi=0x%x\n",averageRssi));
   3462 
   3463 }
   3464 
   3465 TI_STATUS whalCtrl_dbg_SYNCHRONIZATION(TI_HANDLE hWhalCtrl)
   3466 {
   3467     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3468 
   3469     WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, SITE_MGR_MODULE_LOG,
   3470                            ("got event: whalCtrl_dbg_SYNCHRONIZATION\n"));
   3471 
   3472     return OK;
   3473 }
   3474 
   3475 TI_STATUS whalCtrl_dbg_BSS_LOSE(TI_HANDLE hWhalCtrl)
   3476 {
   3477     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3478 
   3479     WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, SITE_MGR_MODULE_LOG,
   3480                            ("got event: whalCtrl_dbg_BSS_LOSE\n"));
   3481 
   3482     return OK;
   3483 }
   3484 
   3485 TI_STATUS whalCtrl_dbg_MAX_TX_RETRY(TI_HANDLE hWhalCtrl)
   3486 {
   3487     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3488 
   3489     WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, SITE_MGR_MODULE_LOG,
   3490                            ("got event: whalCtrl_dbg_MAX_TX_RETRY\n"));
   3491 
   3492     return OK;
   3493 }
   3494 #endif
   3495 /*---------------------------------------------------------
   3496   debug commands for testing the Roaming trigger functions
   3497 -----------------------------------------------------------*/
   3498 
   3499 
   3500 /****************************************************************************
   3501  *                      whalCtrl_measurementParams()
   3502  ****************************************************************************
   3503  * DESCRIPTION: send Command for measurement configuration
   3504  *              to the mailbox
   3505  *
   3506  * INPUTS: None
   3507  *
   3508  * OUTPUT:  None
   3509  *
   3510  * RETURNS: OK or NOK
   3511  ****************************************************************************/
   3512 int whalCtrl_measurementCmd (TI_HANDLE hWhalCtrl, whalCtrl_MeasurementParameters_t *pMeasurementParams,
   3513                              void* CommandResponseCB, TI_HANDLE CB_handle)
   3514 {
   3515     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3516 
   3517     return (whal_hwCtrl_measurement (pWhalCtrl->pHwCtrl, pMeasurementParams, CommandResponseCB, CB_handle));
   3518 }
   3519 
   3520 /****************************************************************************
   3521  *                      whalCtrl_measurementStop()
   3522  ****************************************************************************
   3523  * DESCRIPTION: send Command for stoping measurement
   3524  *
   3525  * INPUTS: None
   3526  *
   3527  * OUTPUT:  None
   3528  *
   3529  * RETURNS: OK or NOK
   3530  ****************************************************************************/
   3531 int whalCtrl_measurementStop (TI_HANDLE hWhalCtrl,void* CommandResponseCB, TI_HANDLE CB_handle)
   3532 {
   3533     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3534 
   3535     return (whal_hwCtrl_measurementStop (pWhalCtrl->pHwCtrl, CommandResponseCB, CB_handle));
   3536 }
   3537 
   3538 /****************************************************************************
   3539  *                      whalCtrl_ApDiscoveryCmd()
   3540  ****************************************************************************
   3541  * DESCRIPTION: send Command for AP Discovery
   3542  *              to the mailbox
   3543  *
   3544  * INPUTS: None
   3545  *
   3546  * OUTPUT:  None
   3547  *
   3548  * RETURNS: OK or NOK
   3549  ****************************************************************************/
   3550 int whalCtrl_ApDiscoveryCmd (TI_HANDLE hWhalCtrl, whalCtrl_ApDiscoveryParameters_t* pApDiscoveryParams)
   3551 {
   3552     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3553 
   3554     return (whal_hwCtrl_ApDiscovery (pWhalCtrl->pHwCtrl, pApDiscoveryParams));
   3555 }
   3556 
   3557 /****************************************************************************
   3558  *                      whalCtrl_ApDiscoveryStop()
   3559  ****************************************************************************
   3560  * DESCRIPTION: send Command for stoping AP Discovery
   3561  *
   3562  * INPUTS: None
   3563  *
   3564  * OUTPUT:  None
   3565  *
   3566  * RETURNS: OK or NOK
   3567  ****************************************************************************/
   3568 int whalCtrl_ApDiscoveryStop (TI_HANDLE hWhalCtrl)
   3569 {
   3570     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3571 
   3572     return (whal_hwCtrl_ApDiscoveryStop (pWhalCtrl->pHwCtrl));
   3573 }
   3574 
   3575 /*
   3576  * ----------------------------------------------------------------------------
   3577  * Function : whalCtrl_SetGroupIpAddressesTable
   3578  *
   3579  * Input    :
   3580  * Output   :
   3581  * Process  :  Configures the Group table
   3582  * Note(s)  :  Done
   3583  * -----------------------------------------------------------------------------
   3584  */
   3585 int whalCtrl_SetGroupAddressesTable(TI_HANDLE hWhalCtrl,
   3586                                       UINT8 numGroupAddrs,
   3587                                       macAddress_t *Group_addr,
   3588                                       UINT8 isEnabled)
   3589 {
   3590     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3591     if ( numGroupAddrs > MAX_MULTICAST_GROUP_ADDRS)
   3592     {
   3593             WLAN_REPORT_ERROR(pWhalCtrl->hReport, HAL_HW_CTRL_MODULE_LOG,
   3594                     ("whalCtrl_SetGroupAddressesTable: numGroupAddrs=%d !!!\n", numGroupAddrs));
   3595         return PARAM_VALUE_NOT_VALID;
   3596     }
   3597     return whal_hwCtrl_SetGroupAddressesTable(pWhalCtrl->pHwCtrl,
   3598                                               numGroupAddrs, Group_addr,isEnabled);
   3599 }
   3600 
   3601 /*
   3602 * ----------------------------------------------------------------------------
   3603 * Function : whalCtrl_GetGroupIpAddressesTable
   3604 *
   3605 * Input    :
   3606 * Output   :
   3607 * Process  :  Retrieve the Group table
   3608 * -----------------------------------------------------------------------------
   3609 */
   3610 int whalCtrl_GetGroupAddressesTable(TI_HANDLE hWhalCtrl,UINT8* pisEnabled, UINT8* pnumGroupAddrs, macAddress_t *Group_addr)
   3611 {
   3612     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3613     return whal_hwCtrl_GetGroupAddressesTable(pWhalCtrl->pHwCtrl,
   3614         pisEnabled, pnumGroupAddrs, Group_addr);
   3615 }
   3616 
   3617 
   3618 /****************************************************************************
   3619  *                      whalCtrl_ElpCtrl_SetMode()
   3620  ****************************************************************************
   3621  * DESCRIPTION: wrapper function for the lower TNETWIF_ElpCtrl_Mode
   3622  *
   3623  * INPUTS:
   3624  *      hWhalCtrl       The current context handle
   3625  *      mode            The ElpCtrl mode
   3626  *
   3627  * OUTPUT:  None
   3628  *
   3629  * RETURNS: OK or NOK
   3630  ****************************************************************************/
   3631 int whalCtrl_ElpCtrl_SetMode(TI_HANDLE hWhalCtrl, elpCtrl_Mode_e mode)
   3632 {
   3633     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3634 
   3635     return whalBus_TNETWIF_ElpCtrl_SetMode(pWhalCtrl->hWhalBus, mode);
   3636 }
   3637 
   3638 /*
   3639  * ----------------------------------------------------------------------------
   3640  * Function : whalCtrl_SetMinPowerLevel
   3641  *
   3642  * Input    :   1) theWhalCtrlHandle - handle to the WhalCtrl object.
   3643  *          2) minPowerPolicy - the min power policy to set
   3644  *
   3645  * Output   :  TI_STATUS - OK on success else NOK.
   3646  *
   3647  * Process  : configuration of the min power policy to the FW.
   3648  *
   3649  * Note(s)  :
   3650  * -----------------------------------------------------------------------------
   3651  */
   3652  TI_STATUS whalCtrl_SetMinPowerLevel(TI_HANDLE theWhalCtrlHandle,
   3653                                     powerAutho_PowerPolicy_e minPowerPolicy)
   3654 {
   3655     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL*)theWhalCtrlHandle;
   3656     WlanParams_T *pWlanParams = &pWhalCtrl->pWhalParams->WlanParams;
   3657 
   3658     /* save th eparameter inside the WlanParams */
   3659     pWlanParams->minPowerLevel = minPowerPolicy;
   3660 
   3661     return (TI_STATUS)whal_hwCtrl_MinPowerLevelSet(pWhalCtrl->pHwCtrl,minPowerPolicy);
   3662 }
   3663 
   3664 /*
   3665  * ----------------------------------------------------------------------------
   3666  * Function : whalCtrl_GetMinPowerLevel
   3667  *
   3668  * Input    :   1) theWhalCtrlHandle - handle to the WhalCtrl object.
   3669  *          2) minPowerPolicy - a pointer to the min power policy to get
   3670  *
   3671  * Output   :  TI_STATUS - OK on success else NOK.
   3672  *
   3673  * Process  : gets the min power policy that was configured to the FW.
   3674  *
   3675  * Note(s)  :
   3676  * -----------------------------------------------------------------------------
   3677  */
   3678  TI_STATUS whalCtrl_GetMinPowerLevel(TI_HANDLE theWhalCtrlHandle,
   3679                                     powerAutho_PowerPolicy_e* minPowerPolicy)
   3680 {
   3681     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL*)theWhalCtrlHandle;
   3682     WlanParams_T *pWlanParams = &pWhalCtrl->pWhalParams->WlanParams;
   3683 
   3684     /* save th eparameter inside the WlanParams */
   3685     *minPowerPolicy = pWlanParams->minPowerLevel;
   3686 
   3687     return OK;
   3688 }
   3689 
   3690 
   3691 
   3692  /*
   3693  * ----------------------------------------------------------------------------
   3694  * Function : whalCtrl_SetInfoElemEventMask
   3695  *
   3696  * Input    :  eventMask - Vector to be Masked
   3697  *
   3698  * Process  : set FW with the Masked Vector
   3699  *
   3700  * Note(s)  : called from eventMbox.c
   3701  * -----------------------------------------------------------------------------
   3702  */
   3703  void whalCtrl_SetInfoElemEventMask(TI_HANDLE hWhalCtrl,UINT32 eventMask)
   3704  {
   3705     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL*)hWhalCtrl;
   3706 
   3707     whal_hwInfoElemEventMaskSet (pWhalCtrl->pHwCtrl->pHwMboxConfig, eventMask);
   3708  }
   3709 
   3710 
   3711 
   3712 /*
   3713 * ----------------------------------------------------------------------------
   3714 * Function : whalCtrl_RxPER
   3715 *
   3716 * Input    :
   3717 *
   3718 * Output   :
   3719 * Process  :
   3720 * -----------------------------------------------------------------------------
   3721 */
   3722 int whalCtrl_RxPER(TI_HANDLE hWhalCtrl, PLT_RxPerCmd_e eRxPerCmd, TI_HANDLE CB_Handle, void *CB_Func)
   3723 {
   3724     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3725     int status ;
   3726     status = whal_hwCmdBit_RxPER(pWhalCtrl->pHwCtrl->pHwMboxCmdBit, eRxPerCmd, CB_Handle, CB_Func);
   3727     return status;
   3728 }
   3729 
   3730 /*
   3731 * ----------------------------------------------------------------------------
   3732 * Function : whalCtrl_TxCW
   3733 *
   3734 * Input    :
   3735 *
   3736 * Output   :
   3737 * Process  :
   3738 * -----------------------------------------------------------------------------
   3739 */
   3740 int whalCtrl_TxCW(TI_HANDLE hWhalCtrl, TestCmdChannelBand_t* PltTxCarrier, void * CB_Func, TI_HANDLE CB_handle, void * CB_Buf)
   3741 {
   3742     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3743     int status ;
   3744 
   3745     WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_HW_CTRL_MODULE_LOG,
   3746         ("whalCtrl_TxCW: chID = %d bandID = %d\n ",
   3747         PltTxCarrier->channel,
   3748         PltTxCarrier->band));
   3749 
   3750     status = whal_hwCmdBit_Telec(pWhalCtrl->pHwCtrl->pHwMboxCmdBit,PltTxCarrier->channel, PltTxCarrier->band, CB_Func, CB_handle, CB_Buf);
   3751     return status;
   3752 }
   3753 
   3754 /*
   3755 * ----------------------------------------------------------------------------
   3756 * Function : whalCtrl_TxContinues
   3757 *
   3758 * Input    :
   3759 *
   3760 * Output   :
   3761 * Process  :
   3762 * -----------------------------------------------------------------------------
   3763 */
   3764 int whalCtrl_TxContinues(TI_HANDLE hWhalCtrl, PltTxContinues_t* pPLT_TX_Continues, void * CB_Func, TI_HANDLE CB_handle, void * CB_Buf)
   3765 {
   3766     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3767     int status ;
   3768 
   3769 	status = whal_hwCmdBit_Fcc(pWhalCtrl->pHwCtrl->pHwMboxCmdBit,
   3770                       pPLT_TX_Continues->chID, pPLT_TX_Continues->rate,
   3771 					  pPLT_TX_Continues->preamble, pPLT_TX_Continues->band,
   3772                       pPLT_TX_Continues->InterPacketDelay, pPLT_TX_Continues->mode, pPLT_TX_Continues->NumOfFrames,
   3773                       pPLT_TX_Continues->aSeqNumMode, pPLT_TX_Continues->aPacketLength, (uint8*)&(pPLT_TX_Continues->aPeerMacAddr),
   3774                       CB_Func, CB_handle, CB_Buf);
   3775     return status;
   3776 }
   3777 
   3778 /*
   3779 * ----------------------------------------------------------------------------
   3780 * Function : whalCtrl_WriteRegister
   3781 *
   3782 * Input    :
   3783 *
   3784 * Output   :
   3785 * Process  :
   3786 * -----------------------------------------------------------------------------
   3787 */
   3788 int whalCtrl_WriteRegister(TI_HANDLE hWhalCtrl, TI_HANDLE CB_Handle, void* CB_Func, void* CB_Buf)
   3789 {
   3790     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3791     int status ;
   3792 
   3793     status = whal_hwCmdBit_WriteRegister(pWhalCtrl->pHwCtrl->pHwMboxCmdBit, CB_Handle, CB_Func, CB_Buf);
   3794     return status;
   3795 }
   3796 
   3797 
   3798 /*
   3799 * ----------------------------------------------------------------------------
   3800 * Function : whalCtrl_ReadRegister
   3801 *
   3802 * Input    :
   3803 *
   3804 * Output   :
   3805 * Process  :
   3806 * -----------------------------------------------------------------------------
   3807 */
   3808 int whalCtrl_ReadRegister(TI_HANDLE hWhalCtrl, TI_HANDLE CB_Handle, void* CB_Func, void* CB_Buf)
   3809 {
   3810     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3811     int status ;
   3812 
   3813     status = whal_hwCmdBit_ReadRegister(pWhalCtrl->pHwCtrl->pHwMboxCmdBit, CB_Handle, CB_Func, CB_Buf);
   3814     return status;
   3815 }
   3816 
   3817 /****************************************************************************************
   3818 *                        whalCtrl_ReadMib()
   3819 ****************************************************************************************
   3820 DESCRIPTION:      Read configuration information and statistics
   3821 
   3822   INPUT:
   3823 
   3824     OUTPUT:
   3825 
   3826       RETURN:
   3827 
   3828 ************************************************************************/
   3829 int whalCtrl_ReadMib(TI_HANDLE hWhalCtrl, TI_HANDLE CB_Handle, void* CB_Func, void* CB_Buf)
   3830 {
   3831     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3832     PLT_MIB_t* pMibBuf = (PLT_MIB_t*)CB_Buf;
   3833     CmdQueue_InterrogateCB_t RetFunc = (CmdQueue_InterrogateCB_t)CB_Func;
   3834     TI_STATUS Status;
   3835 
   3836 
   3837 
   3838     WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   3839         ("whalCtrl_ReadMib :pMibBuf %p:\n",pMibBuf));
   3840 
   3841     WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   3842         ("whalCtrl_ReadMib :aMib %x:\n",pMibBuf->aMib));
   3843 
   3844     switch (pMibBuf->aMib)
   3845     {
   3846     case PLT_MIB_dot11StationId:
   3847     /*
   3848     * Use the Station ID CallBack as the Read MIB Cb to get back context
   3849         */
   3850         return(whalCtrl_InterrogateMbox(hWhalCtrl , CB_Func, CB_Handle, CB_Buf));
   3851 /*  break; */
   3852 
   3853     case PLT_MIB_dot11MaxReceiveLifetime:
   3854         {
   3855             whalParamInfo_t ParamInfo;
   3856             ParamInfo.paramType = (UINT32)HAL_CTRL_DOT11_MAX_RX_MSDU_LIFE_TIME;
   3857             ParamInfo.paramLength = sizeof(ParamInfo.content.halCtrlMaxRxMsduLifetime);
   3858             Status = whalCtrl_GetParam(hWhalCtrl, &ParamInfo);
   3859             pMibBuf->aData.MaxReceiveLifeTime = ParamInfo.content.halCtrlMaxRxMsduLifetime / 1024; /* converting from usecs to TUs*/
   3860             pMibBuf->Length = sizeof(pMibBuf->aData.MaxReceiveLifeTime);
   3861             RetFunc(CB_Handle, Status, (void*)pMibBuf);
   3862         }
   3863         break;
   3864 
   3865 
   3866     case PLT_MIB_dot11GroupAddressesTable:
   3867         {
   3868             Status = (TI_STATUS)whalCtrl_GetGroupAddressesTable(
   3869                 hWhalCtrl,
   3870                 &pMibBuf->aData.GroupAddressTable.bFilteringEnable,
   3871                 &pMibBuf->aData.GroupAddressTable.nNumberOfAddresses,
   3872                 pMibBuf->aData.GroupAddressTable.GroupTable);
   3873 
   3874                pMibBuf->Length = sizeof(pMibBuf->aData.GroupAddressTable.bFilteringEnable) +
   3875                                  sizeof(pMibBuf->aData.GroupAddressTable.nNumberOfAddresses) +
   3876                                  pMibBuf->aData.GroupAddressTable.nNumberOfAddresses * sizeof(macAddress_t);
   3877 
   3878             RetFunc(CB_Handle, Status, CB_Buf);
   3879         }
   3880 
   3881         break;
   3882 
   3883     case PLT_MIB_ctsToSelf:
   3884         {
   3885             whalParamInfo_t ParamInfo;
   3886             ParamInfo.paramType = (UINT32)HAL_CTRL_CTS_TO_SELF_PARAM;
   3887             ParamInfo.paramLength = sizeof(ParamInfo.content.halCtrlCtsToSelf);
   3888             Status = whalCtrl_GetParam(hWhalCtrl, &ParamInfo);
   3889             pMibBuf->aData.CTSToSelfEnable = ParamInfo.content.halCtrlCtsToSelf;
   3890             pMibBuf->Length = sizeof(pMibBuf->aData.CTSToSelfEnable);
   3891             RetFunc(CB_Handle, Status, CB_Buf);
   3892         }
   3893         break;
   3894 
   3895     case PLT_MIB_arpIpAddressesTable:
   3896         {
   3897             IpAddress_t IpAddress;
   3898             IPver_e IPver;
   3899             UINT8 Enable;
   3900             TI_STATUS status;
   3901 
   3902             pMibBuf->Length = sizeof(PLT_MIB_ArpIpAddressesTable_t);
   3903             status = (TI_STATUS)whalCtrl_GetArpIpAddressesTable(pWhalCtrl->pHwCtrl,
   3904                                                     &IpAddress,
   3905                                                     &Enable,
   3906                                                     &IPver);
   3907             if (status == OK)
   3908             {
   3909                 pMibBuf->aData.ArpIpAddressesTable.FilteringEnable = Enable;
   3910 
   3911                 if (IP_VER_4 == IPver) /* IP_VER_4 only */
   3912                 {
   3913                     os_memoryCopy(pWhalCtrl->hOs,
   3914                         (PVOID)pMibBuf->aData.ArpIpAddressesTable.addr,
   3915                         (PVOID)IpAddress.addr,
   3916                         IP_V4_ADDR_LEN);
   3917                 }
   3918                 else
   3919                 {
   3920                     status = NOK;
   3921                 }
   3922             }
   3923             RetFunc(CB_Handle, status, CB_Buf);
   3924             return status;
   3925         }
   3926 
   3927 
   3928         /*break; Unreachble code*/
   3929 
   3930     case PLT_MIB_templateFrame:
   3931         whalCtrl_ReadTemplateFrameMib(hWhalCtrl, CB_Handle, CB_Func,  CB_Buf);
   3932         break;
   3933 
   3934     case PLT_MIB_rxFilter:
   3935         {
   3936             UINT32 RxConfigOption;
   3937             UINT32 RxFilterOption;
   3938 
   3939             pMibBuf->Length = 1;
   3940             pMibBuf->aData.RxFilter = 0;
   3941 
   3942             /*Get RX filter data*/
   3943             Status = (TI_STATUS)whalCtrl_GetRxFilters(pWhalCtrl, &RxConfigOption, &RxFilterOption);
   3944             if (OK == Status)
   3945             {
   3946                 /*Translate to MIB bitmap*/
   3947                 if ((RxConfigOption & RX_CFG_MAC) == RX_CFG_ENABLE_ANY_DEST_MAC)
   3948                     pMibBuf->aData.RxFilter |= PLT_MIB_RX_FILTER_PROMISCOUS_SET;
   3949 
   3950                 if ((RxConfigOption & RX_CFG_BSSID) == RX_CFG_ENABLE_ONLY_MY_BSSID)
   3951                     pMibBuf->aData.RxFilter |= PLT_MIB_RX_FILTER_BSSID_SET;
   3952             }
   3953             RetFunc(CB_Handle, Status, CB_Buf);
   3954         }
   3955         break;
   3956 
   3957     case PLT_MIB_beaconFilterIETable:
   3958         return (whalCtrl_PltMibGetBeaconFilterIETable(hWhalCtrl, CB_Handle, CB_Func, CB_Buf));
   3959 /*        break; */
   3960 
   3961     case PLT_MIB_txRatePolicy:
   3962         return (whalCtrl_PLT_ReadMIB_TxRatePolicy(hWhalCtrl, CB_Handle, CB_Func, CB_Buf));
   3963 /*      break; */
   3964 
   3965 
   3966     case PLT_MIB_countersTable:
   3967         return(whalCtrl_InterrogateGwsiCounters (hWhalCtrl , CB_Func, CB_Handle, CB_Buf));
   3968 /*      break; */
   3969 
   3970 
   3971     case PLT_MIB_statisticsTable:
   3972         return (whalCtrl_InterrogateGwsiStatisitics(hWhalCtrl , CB_Func, CB_Handle, CB_Buf));
   3973 /*        break; */
   3974 
   3975     default:
   3976         WLAN_REPORT_ERROR(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   3977             ("whalCtrl_ReadMib:MIB aMib 0x%x Not supported\n",pMibBuf->aMib));
   3978         return NOK;
   3979     }
   3980     return OK;
   3981 
   3982 }
   3983 
   3984 /****************************************************************************************
   3985 *                        whalCtrl_WriteMib()
   3986 ****************************************************************************************
   3987 DESCRIPTION:      Set configuration information
   3988 
   3989 INPUT:
   3990 
   3991 OUTPUT:
   3992 
   3993 RETURN:
   3994 
   3995 ************************************************************************/
   3996 int whalCtrl_WriteMib(TI_HANDLE hWhalCtrl, PLT_MIB_t* pMib)
   3997 {
   3998     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   3999 
   4000     WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   4001         ("whalCtrl_WriteMib :pMib %p:\n",pMib));
   4002 
   4003     WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   4004         ("whalCtrl_WriteMib :aMib %x:\n",pMib->aMib));
   4005 
   4006     WLAN_REPORT_HEX_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   4007         (PUINT8)pMib, min(sizeof(PLT_MIB_t), pMib->Length));
   4008 
   4009     if (NULL == pMib)
   4010     {
   4011         WLAN_REPORT_ERROR(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   4012         ("whalCtrl_WriteMib :pMib = NULL !!\n"));
   4013         return PARAM_VALUE_NOT_VALID;
   4014     }
   4015 
   4016 
   4017     switch (pMib->aMib)
   4018     {
   4019     case PLT_MIB_dot11MaxReceiveLifetime:
   4020         {
   4021             whalParamInfo_t ParamInfo;
   4022             ParamInfo.paramType = (UINT32)HAL_CTRL_DOT11_MAX_RX_MSDU_LIFE_TIME;
   4023             ParamInfo.paramLength = sizeof(ParamInfo.content.halCtrlMaxRxMsduLifetime);
   4024             ParamInfo.content.halCtrlMaxRxMsduLifetime = pMib->aData.MaxReceiveLifeTime;
   4025             ParamInfo.content.halCtrlMaxRxMsduLifetime *= 1024; /* converting from TUs to usecs */
   4026             return whalCtrl_SetParam(hWhalCtrl, &ParamInfo);
   4027         }
   4028 /*        break;  */
   4029 
   4030     case PLT_MIB_ctsToSelf:
   4031         {
   4032             whalParamInfo_t ParamInfo;
   4033             ParamInfo.paramType = (UINT32)HAL_CTRL_CTS_TO_SELF_PARAM;
   4034             ParamInfo.paramLength = sizeof(ParamInfo.content.halCtrlCtsToSelf);
   4035             ParamInfo.content.halCtrlCtsToSelf = pMib->aData.CTSToSelfEnable;
   4036             return whalCtrl_SetParam(hWhalCtrl, &ParamInfo);
   4037         }
   4038 /*        break; */
   4039 
   4040     case PLT_MIB_dot11GroupAddressesTable:
   4041         {
   4042 
   4043             if ( NULL == pMib->aData.GroupAddressTable.GroupTable)
   4044             {
   4045                 WLAN_REPORT_ERROR(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   4046                     ("whalCtrl_WriteMib(PLT_MIB_dot11GroupAddressesTable) :GroupTable = NULL !!\n"));
   4047                 return PARAM_VALUE_NOT_VALID;
   4048             }
   4049 
   4050             return whalCtrl_SetGroupAddressesTable(hWhalCtrl,
   4051                 pMib->aData.GroupAddressTable.nNumberOfAddresses,
   4052                 pMib->aData.GroupAddressTable.GroupTable,
   4053                 pMib->aData.GroupAddressTable.bFilteringEnable);
   4054         }
   4055 /*        break;  */
   4056 
   4057     case PLT_MIB_arpIpAddressesTable:
   4058         {
   4059             IpAddress_t IpAddress;
   4060             IpAddress.addr[0] =  pMib->aData.ArpIpAddressesTable.addr[0];
   4061             IpAddress.addr[1] =  pMib->aData.ArpIpAddressesTable.addr[1];
   4062             IpAddress.addr[2] =  pMib->aData.ArpIpAddressesTable.addr[2];
   4063             IpAddress.addr[3] =  pMib->aData.ArpIpAddressesTable.addr[3];
   4064 
   4065             WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   4066                 ("whalCtrl_WriteMib(PLT_MIB_arpIpAddressesTable) IpAddress:\n"));
   4067             WLAN_REPORT_HEX_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   4068                                         (PUINT8)&IpAddress, 4);
   4069 
   4070             return whalCtrl_SetarpIpAddressesTable(hWhalCtrl,
   4071                 &IpAddress,
   4072                 pMib->aData.ArpIpAddressesTable.FilteringEnable,
   4073                 IP_VER_4);
   4074         }
   4075 /*        break; */
   4076 
   4077     case PLT_MIB_templateFrame:
   4078         return whalCtrl_WriteTemplateFrameMib(hWhalCtrl, pMib);
   4079 /*        break; */
   4080 
   4081     case PLT_MIB_beaconFilterIETable:
   4082         return whalCtrl_PltMibSetBeaconFilterIETable(hWhalCtrl, pMib);
   4083 /*        break;  */
   4084 
   4085     case PLT_MIB_rxFilter:
   4086         {
   4087             UINT32 whal_rx_filter = 0;
   4088             tiUINT8 Mib_Rx_Filter = pMib->aData.RxFilter;
   4089 
   4090             /*
   4091             * Construct the WHAL rx filter element
   4092             */
   4093             if (Mib_Rx_Filter & PLT_MIB_RX_FILTER_PROMISCOUS_SET )
   4094             {
   4095                 WLAN_REPORT_INFORMATION(pWhalCtrl->hReport,HAL_CTRL_MODULE_LOG,("\n whalCtrl_WriteMib PLT_MIB_rxFilter - RX_CFG_ENABLE_ANY_DEST_MAC\n")) ;
   4096                 whal_rx_filter = RX_CFG_ENABLE_ANY_DEST_MAC;
   4097             }
   4098             else
   4099             {
   4100                 whal_rx_filter = RX_CFG_ENABLE_ONLY_MY_DEST_MAC;
   4101                 WLAN_REPORT_INFORMATION(pWhalCtrl->hReport,HAL_CTRL_MODULE_LOG,("\n halCtrl_WriteMib PLT_MIB_rxFilter - RX_CFG_ENABLE_ONLY_MY_DEST_MAC\n")) ;
   4102             }
   4103 
   4104             if ( Mib_Rx_Filter & PLT_MIB_RX_FILTER_BSSID_SET )
   4105             {
   4106                 whal_rx_filter = whal_rx_filter | RX_CFG_ENABLE_ONLY_MY_BSSID;
   4107                 WLAN_REPORT_INFORMATION(pWhalCtrl->hReport,HAL_CTRL_MODULE_LOG,("\n halCtrl_WriteMib PLT_MIB_rxFilter - RX_CFG_ENABLE_ONLY_MY_BSSID\n")) ;
   4108             }
   4109             else
   4110             {
   4111                 whal_rx_filter = whal_rx_filter | RX_CFG_ENABLE_ANY_BSSID;
   4112                 WLAN_REPORT_INFORMATION(pWhalCtrl->hReport,HAL_CTRL_MODULE_LOG,("\n halCtrl_WriteMib PLT_MIB_rxFilter - RX_CFG_ENABLE_ANY_BSSID\n") );
   4113             }
   4114 
   4115             /*
   4116             * Activates the whalCtrl_setRxFilters function
   4117             */
   4118             return whalCtrl_setRxFilters(hWhalCtrl, whal_rx_filter, RX_FILTER_OPTION_DEF);
   4119 
   4120         }
   4121 /*        break;  */
   4122 
   4123     case PLT_MIB_txRatePolicy:
   4124         return whalCtrl_PLT_WriteMIB_TxRatePolicy(hWhalCtrl, pMib);
   4125 /*      break;  */
   4126 
   4127     default:
   4128         WLAN_REPORT_ERROR(pWhalCtrl->hReport,
   4129             HAL_CTRL_MODULE_LOG,
   4130             ("%s(%d) - whalCtrl_WriteMib - ERROR - MIB element not supported, %d\n\n",
   4131             __FILE__,__LINE__,pMib->aMib));
   4132 
   4133         return NOK;
   4134 
   4135     } /* switch */
   4136 
   4137 /*    return OK;*/
   4138 }
   4139 
   4140 
   4141 int whalCtrl_ReadTemplateFrameMib(TI_HANDLE hWhalCtrl, TI_HANDLE CB_Handle, void* CB_Func, void* CB_Buf)
   4142 {
   4143     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   4144     PLT_MIB_t* pMibBuf = (PLT_MIB_t*)CB_Buf;
   4145     CmdQueue_InterrogateCB_t RetFunc = (CmdQueue_InterrogateCB_t)CB_Func;
   4146     TemplateParams_T* pTemplateParams;
   4147     whalCtrl_templateType_e templateType;
   4148 
   4149     switch(pMibBuf->aData.TemplateFrame.FrameType)
   4150     {
   4151     case PLT_TEMPLATE_TYPE_BEACON:
   4152         templateType = BEACON_TEMPLATE;
   4153         pMibBuf->aData.TemplateFrame.Rate = pWhalCtrl->pWhalParams->BssInfoParams.txCtrlFrmRateDriverFormat;
   4154         break;
   4155 
   4156     case PLT_TEMPLATE_TYPE_PROBE_REQUEST:
   4157         templateType = PROBE_REQUEST_TEMPLATE;
   4158         pMibBuf->aData.TemplateFrame.Rate = DRV_RATE_INVALID;
   4159         break;
   4160 
   4161     case PLT_TEMPLATE_TYPE_NULL_FRAME:
   4162         {
   4163             TI_HANDLE hHalCtrl;
   4164             TI_HANDLE hMacServices;
   4165             TnetwDrv_TEMP_GetHandles(pWhalCtrl->hTNETW_Driver, &hHalCtrl, &hMacServices);
   4166             pMibBuf->aData.TemplateFrame.Rate = MacServices_powerSrv_GetRateModulation(hMacServices);
   4167             templateType = NULL_DATA_TEMPLATE;
   4168         }
   4169         break;
   4170 
   4171     case PLT_TEMPLATE_TYPE_PROBE_RESPONSE:
   4172         templateType = PROBE_RESPONSE_TEMPLATE;
   4173         pMibBuf->aData.TemplateFrame.Rate = pWhalCtrl->pWhalParams->BssInfoParams.txCtrlFrmRateDriverFormat;
   4174         break;
   4175 
   4176     case PLT_TEMPLATE_TYPE_QOS_NULL_FRAME:
   4177         templateType = QOS_NULL_DATA_TEMPLATE;
   4178         pMibBuf->aData.TemplateFrame.Rate = pWhalCtrl->pWhalParams->BssInfoParams.txCtrlFrmRateDriverFormat;
   4179         break;
   4180 
   4181     case PLT_TEMPLATE_TYPE_PS_POLL:
   4182         templateType = PS_POLL_TEMPLATE;
   4183         pMibBuf->aData.TemplateFrame.Rate = pWhalCtrl->pWhalParams->BssInfoParams.txCtrlFrmRateDriverFormat;
   4184         break;
   4185     default:
   4186            WLAN_REPORT_ERROR(pWhalCtrl->hReport,
   4187                 HAL_CTRL_MODULE_LOG,
   4188                 ("%s(%d) - whalCtrl_ReadTemplateFrameMib - ERROR - template is not supported, %d\n\n",
   4189                 __FILE__,__LINE__,pMibBuf->aData.TemplateFrame.FrameType));
   4190             return PARAM_NOT_SUPPORTED;
   4191         }
   4192 
   4193     pTemplateParams =  whalCtrl_GetTemplate(hWhalCtrl, templateType);
   4194 
   4195     if (pTemplateParams)
   4196     {
   4197         pMibBuf->Length = pTemplateParams->Size + 10;
   4198 
   4199         pMibBuf->aData.TemplateFrame.Length = pTemplateParams->Size;
   4200 
   4201         os_memoryCopy(pWhalCtrl->hOs,
   4202             pMibBuf->aData.TemplateFrame.Data,
   4203             pTemplateParams->Buffer,
   4204             pTemplateParams->Size);
   4205 
   4206 
   4207         pMibBuf->aData.TemplateFrame.Rate = whalUtils_DRV_RATE2GwsiRate(pMibBuf->aData.TemplateFrame.Rate);
   4208         RetFunc(CB_Handle, OK, CB_Buf);
   4209         return OK;
   4210     }
   4211 
   4212     RetFunc(CB_Handle, NOK, CB_Buf);
   4213     return NOK;
   4214 }
   4215 
   4216 int whalCtrl_WriteTemplateFrameMib(TI_HANDLE hWhalCtrl, PLT_MIB_t* pMib)
   4217 {
   4218     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   4219     rate_e rate;
   4220     whalCtrl_setTemplate_t   whal_set_template_s;
   4221 
   4222 
   4223     /*convert the rate to driver rate*/
   4224     rate = (rate_e)whalUtils_GwsiRate2DRV_RATE(pMib->aData.TemplateFrame.Rate);
   4225 
   4226     /*
   4227     * Construct the template MIB element
   4228     */
   4229     switch(pMib->aData.TemplateFrame.FrameType)
   4230     {
   4231     case PLT_TEMPLATE_TYPE_BEACON:
   4232         whal_set_template_s.templateType = BEACON_TEMPLATE;
   4233 
   4234         /* Set new Mgmt rate (write it to Fw along with the modulation) */
   4235         whalCtrl_SetFrameRate(hWhalCtrl, rate, FALSE);
   4236 
   4237         break;
   4238 
   4239     case PLT_TEMPLATE_TYPE_PROBE_REQUEST:
   4240         whal_set_template_s.templateType = PROBE_REQUEST_TEMPLATE;
   4241         break;
   4242 
   4243     case PLT_TEMPLATE_TYPE_NULL_FRAME:
   4244         {
   4245             TI_HANDLE hHalCtrl;
   4246             TI_HANDLE hMacServices;
   4247             TnetwDrv_TEMP_GetHandles(pWhalCtrl->hTNETW_Driver, &hHalCtrl, &hMacServices);
   4248 
   4249             whal_set_template_s.templateType = NULL_DATA_TEMPLATE;
   4250             MacServices_powerSrv_SetRateModulation(hMacServices,
   4251                 (UINT16)whalUtils_GwsiRate2DRV_RATE_MASK(pMib->aData.TemplateFrame.Rate));
   4252         }
   4253         break;
   4254 
   4255     case PLT_TEMPLATE_TYPE_PROBE_RESPONSE:
   4256         whal_set_template_s.templateType = PROBE_RESPONSE_TEMPLATE;
   4257 
   4258         /* Set new Mgmt rate (write it to Fw along with the modulation) */
   4259         whalCtrl_SetFrameRate(hWhalCtrl, rate, FALSE);
   4260 
   4261         break;
   4262 
   4263     case PLT_TEMPLATE_TYPE_QOS_NULL_FRAME:
   4264         whal_set_template_s.templateType = QOS_NULL_DATA_TEMPLATE;
   4265 
   4266         /* Set new Ctrl rate (write it to Fw along with the modulation) */
   4267         whalCtrl_SetFrameRate(hWhalCtrl, rate, TRUE);
   4268 
   4269         break;
   4270 
   4271     case PLT_TEMPLATE_TYPE_PS_POLL:
   4272         whal_set_template_s.templateType = PS_POLL_TEMPLATE;
   4273 
   4274         /* Set new Ctrl rate (write it to Fw along with the modulation) */
   4275         whalCtrl_SetFrameRate(hWhalCtrl, rate, TRUE);
   4276 
   4277         break;
   4278 
   4279     default:
   4280         WLAN_REPORT_ERROR(pWhalCtrl->hReport,
   4281             HAL_CTRL_MODULE_LOG,
   4282             ("%s(%d) - whalCtrl_WriteTemplateFrameMib - ERROR - template is not supported, %d\n\n",
   4283             __FILE__,__LINE__,pMib->aData.TemplateFrame.FrameType));
   4284         return PARAM_NOT_SUPPORTED;
   4285     }
   4286 
   4287     whal_set_template_s.templateLen = pMib->aData.TemplateFrame.Length;
   4288     whal_set_template_s.pTemplate = (UINT8 *) &(pMib->aData.TemplateFrame.Data);
   4289 
   4290 
   4291     return whalCtrl_SetTemplate(hWhalCtrl, &whal_set_template_s);
   4292 }
   4293 
   4294 int whalCtrl_PltMibSetBeaconFilterIETable(TI_HANDLE hWhalCtrl, PLT_MIB_t* pMib)
   4295 {
   4296     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *) hWhalCtrl;
   4297     UINT8 numOf221IE = 0 ;
   4298     UINT8 i = 0 ;
   4299     UINT8 IETableLen = 0 ;
   4300     UINT8 numOfIEs = 0 ;
   4301     UINT8 *IETable = NULL ;
   4302 
   4303     numOfIEs = pMib->aData.BeaconFilter.iNumberOfIEs;
   4304     IETable = pMib->aData.BeaconFilter.iIETable;
   4305     /*find the actual IETableLen */
   4306     for ( i = 0 ; i < numOfIEs ; i++ )
   4307     {
   4308         if ( IETable[IETableLen] == 0xdd )
   4309         {
   4310              IETableLen += 8;
   4311              numOf221IE++;
   4312         }
   4313         else
   4314             IETableLen += 2;
   4315     }
   4316 
   4317     WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   4318         ("\nwhalCtrl_PltMibSetBeaconFilterIETable,IETable=0x%x Num Of IE=%d ( including %d 221 ) - Table Len=%d\n",
   4319         IETable , numOfIEs , numOf221IE , IETableLen ));
   4320 
   4321     return whalCtrl_SetBeaconFilterIETable(hWhalCtrl, &numOfIEs, IETable, &IETableLen);
   4322 }
   4323 
   4324 int whalCtrl_PltMibGetBeaconFilterIETable(TI_HANDLE hWhalCtrl, TI_HANDLE CB_Handle, void* CB_Func, void* CB_Buf)
   4325 {
   4326     PLT_MIB_t* pMib = (PLT_MIB_t*)CB_Buf;
   4327     CmdQueue_InterrogateCB_t RetFunc = (CmdQueue_InterrogateCB_t)CB_Func;
   4328     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   4329     UINT8 IETableSize = 0;
   4330 
   4331 
   4332     /*Get params*/
   4333     pMib->aData.BeaconFilter.iNumberOfIEs = pWhalCtrl->pWhalParams->WlanParams.beaconFilterIETable.numberOfIEs;
   4334     IETableSize = pWhalCtrl->pWhalParams->WlanParams.beaconFilterIETable.IETableSize;
   4335 
   4336     os_memoryZero (pWhalCtrl->hOs,
   4337                    pMib->aData.BeaconFilter.iIETable,
   4338                    sizeof(pMib->aData.BeaconFilter.iIETable));
   4339 
   4340     os_memoryCopy(pWhalCtrl->hOs,
   4341                   pMib->aData.BeaconFilter.iIETable,
   4342                   pWhalCtrl->pWhalParams->WlanParams.beaconFilterIETable.IETable,
   4343                   IETableSize);
   4344     pMib->Length = IETableSize + 1;
   4345 
   4346     RetFunc(CB_Handle, OK, CB_Buf);
   4347     return OK;
   4348 
   4349 }
   4350 
   4351 /**
   4352  * \author \n
   4353  * \date \n
   4354  * \brief Coordinates between legacy TxRatePolicy implementation and the MIB format: \n
   4355  *        Converts the pGwsi_txRatePolicy back to whal commands
   4356  *        Activates the whal whalCtrl_set function
   4357  * Function Scope \e Public.\n
   4358  * \param  - \n
   4359  * \return \n
   4360  */
   4361 
   4362 int whalCtrl_PLT_WriteMIB_TxRatePolicy(TI_HANDLE hWhalCtrl, PLT_MIB_t* pMib)                /* Pointer to the MIB data*/
   4363 {
   4364     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
   4365     whalParamInfo_t param;
   4366 
   4367     if (NULL == pMib)
   4368     {
   4369         WLAN_REPORT_ERROR(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
   4370             ("ERROR : whalCtrl_PLT_WriteMIB_TxRatePolicy pMib=NULL !!!"));
   4371     }
   4372 
   4373 
   4374     param.paramType = (UINT32)HAL_CTRL_TX_RATE_CLASS_PARAMS;
   4375     param.content.pTxRatePlicy = &pMib->aData.txRatePolicy;
   4376 
   4377     /*
   4378      * Call WhalCtrl Set I/F
   4379      */
   4380     return(whalCtrl_SetParam(hWhalCtrl, &param));
   4381 }
   4382 
   4383 /**
   4384  * \author \n
   4385  * \date \n
   4386  * \brief Coordinates between legacy TxRatePolicy implementation and the MIB format: \n
   4387  *        Converts the pGwsi_txRatePolicy back to whal commands
   4388  *        Activates the whal whalCtrl_set function
   4389  * Function Scope \e Public.\n
   4390  * \param  - \n
   4391  * \return \n
   4392  */
   4393 
   4394 int whalCtrl_PLT_ReadMIB_TxRatePolicy(TI_HANDLE hWhalCtrl, TI_HANDLE CB_Handle, void* CB_Func, void* CB_Buf)
   4395 {
   4396     PLT_MIB_t* pMib = (PLT_MIB_t*)CB_Buf;
   4397     CmdQueue_InterrogateCB_t RetFunc = (CmdQueue_InterrogateCB_t)CB_Func;
   4398     whalParamInfo_t     param;
   4399     tiUINT32 Status = OK;
   4400 
   4401 
   4402     param.paramType = (UINT32)HAL_CTRL_TX_RATE_CLASS_PARAMS;
   4403     whalCtrl_GetParam(hWhalCtrl, &param);
   4404     if (param.content.pTxRatePlicy == NULL)
   4405         Status = NOK;
   4406 
   4407     /*Copy the data form the param to the MIB*/
   4408     pMib->aData.txRatePolicy = *param.content.pTxRatePlicy;
   4409     pMib->Length = pMib->aData.txRatePolicy.numOfRateClasses * sizeof(pMib->aData.txRatePolicy.rateClass[0]) +
   4410                        sizeof(pMib->aData.txRatePolicy.numOfRateClasses);
   4411     RetFunc(CB_Handle, Status, CB_Buf);
   4412     return Status;
   4413 }
   4414 
   4415 /*
   4416  * ----------------------------------------------------------------------------
   4417  * Function : whalCtrl_updateSecuritySeqNum
   4418  *
   4419  * Process  : Update the current TKIP/AES security-sequence-number according to the last
   4420  *              Tx data packet seq-number, for reloading it to the FW in case of recovery.
   4421  *            The complete 32 bit number is deduced from the 8 LS bits provided by the FW
   4422  *              in the Tx-Result, assuming the total number is never incremented in more
   4423  *              than 255 per one packet (limited by max fragments per packet).
   4424  *
   4425  * Input    : 1) theWhalCtrlHandle - handle to the WhalCtrl object.
   4426  *            2) securitySeqNumLsByte - the LS byte of the last Tx frame security-sequence-number.
   4427  *
   4428  * -----------------------------------------------------------------------------
   4429  */
   4430  void whalCtrl_updateSecuritySeqNum(TI_HANDLE hWhalCtrl, UINT8 securitySeqNumLsByte)
   4431 {
   4432     WHAL_CTRL *pWhalCtrl = (WHAL_CTRL*)hWhalCtrl;
   4433     HwCtrl_T  *pHwCtrl   = (HwCtrl_T *)pWhalCtrl->pHwCtrl;
   4434 
   4435     /* If 8 lsb wrap around occurred (new < old). */
   4436     if ( (UINT16)securitySeqNumLsByte < (pHwCtrl->SecuritySeqNumLow & 0xFF))
   4437     {
   4438         /* Increment the upper byte of the 16 lsb. */
   4439         pHwCtrl->SecuritySeqNumLow += 0x100;
   4440 
   4441         /* If 16 bit wrap around occurred, increment the upper 32 bit. */
   4442         if( !(pHwCtrl->SecuritySeqNumLow & 0xFF00) )
   4443             pHwCtrl->SecuritySeqNumHigh++;
   4444     }
   4445 
   4446     /* Save new sequence number 8 lsb (received from the FW). */
   4447     pHwCtrl->SecuritySeqNumLow &= 0xFF00;
   4448     pHwCtrl->SecuritySeqNumLow |= (UINT16)securitySeqNumLsByte;
   4449 }
   4450 
   4451 
   4452  /*
   4453  * ----------------------------------------------------------------------------
   4454  * Function : whalCtrl_setBetParams
   4455  *
   4456  * Input    :   enabled               - 0 to disable BET, 0 to disable BET
   4457  *              MaximumConsecutiveET  - Max number of consecutive beacons
   4458  *                                      that may be early terminated.
   4459  * Output   :
   4460  * Process  :  Configures Beacon Early Termination information element.
   4461  * Note(s)  :  None
   4462  * -----------------------------------------------------------------------------
   4463  */
   4464 int whalCtrl_setBetParams(TI_HANDLE hWhalCtrl, UINT8 Enable, UINT8 MaximumConsecutiveET)
   4465 {
   4466     WHAL_CTRL * pWhalCtrl = (WHAL_CTRL *) hWhalCtrl;
   4467 
   4468     pWhalCtrl->pWhalParams->WlanParams.BetEnable = Enable;
   4469     pWhalCtrl->pWhalParams->WlanParams.MaximumConsecutiveET = MaximumConsecutiveET;
   4470 
   4471     return whal_hwCtrl_setBetParams(pWhalCtrl->pHwCtrl, Enable, MaximumConsecutiveET);
   4472 }
   4473 
   4474