164064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
264064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+**
364064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
464064216a8433360745f69edddce19a606659163The Android Open Source Project**| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved.      |**
564064216a8433360745f69edddce19a606659163The Android Open Source Project**| All rights reserved.                                                  |**
664064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
764064216a8433360745f69edddce19a606659163The Android Open Source Project**| Redistribution and use in source and binary forms, with or without    |**
864064216a8433360745f69edddce19a606659163The Android Open Source Project**| modification, are permitted provided that the following conditions    |**
964064216a8433360745f69edddce19a606659163The Android Open Source Project**| are met:                                                              |**
1064064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
1164064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Redistributions of source code must retain the above copyright     |**
1264064216a8433360745f69edddce19a606659163The Android Open Source Project**|    notice, this list of conditions and the following disclaimer.      |**
1364064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Redistributions in binary form must reproduce the above copyright  |**
1464064216a8433360745f69edddce19a606659163The Android Open Source Project**|    notice, this list of conditions and the following disclaimer in    |**
1564064216a8433360745f69edddce19a606659163The Android Open Source Project**|    the documentation and/or other materials provided with the         |**
1664064216a8433360745f69edddce19a606659163The Android Open Source Project**|    distribution.                                                      |**
1764064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Neither the name Texas Instruments nor the names of its            |**
1864064216a8433360745f69edddce19a606659163The Android Open Source Project**|    contributors may be used to endorse or promote products derived    |**
1964064216a8433360745f69edddce19a606659163The Android Open Source Project**|    from this software without specific prior written permission.      |**
2064064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
2164064216a8433360745f69edddce19a606659163The Android Open Source Project**| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |**
2264064216a8433360745f69edddce19a606659163The Android Open Source Project**| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |**
2364064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |**
2464064216a8433360745f69edddce19a606659163The Android Open Source Project**| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |**
2564064216a8433360745f69edddce19a606659163The Android Open Source Project**| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |**
2664064216a8433360745f69edddce19a606659163The Android Open Source Project**| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |**
2764064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |**
2864064216a8433360745f69edddce19a606659163The Android Open Source Project**| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |**
2964064216a8433360745f69edddce19a606659163The Android Open Source Project**| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |**
3064064216a8433360745f69edddce19a606659163The Android Open Source Project**| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |**
3164064216a8433360745f69edddce19a606659163The Android Open Source Project**| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |**
3264064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
3364064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+**
3464064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************/
3564064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************/
3664064216a8433360745f69edddce19a606659163The Android Open Source Project/*                                                                         */
3764064216a8433360745f69edddce19a606659163The Android Open Source Project/*      MODULE:     Ctrl.c                                                 */
3864064216a8433360745f69edddce19a606659163The Android Open Source Project/*      PURPOSE:    Control module functions                               */
3964064216a8433360745f69edddce19a606659163The Android Open Source Project/*                                                                         */
4064064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************/
4164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "Ctrl.h"
4264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "802_11Defs.h"
4364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "DataCtrl_Api.h"
4464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "osApi.h"
4564064216a8433360745f69edddce19a606659163The Android Open Source Project#include "report.h"
4664064216a8433360745f69edddce19a606659163The Android Open Source Project#include "utils.h"
4764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "smeApi.h"
4864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "siteMgrApi.h"
4964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "Ethernet.h"
5064064216a8433360745f69edddce19a606659163The Android Open Source Project#include "tx.h"
5164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "TrafficMonitorAPI.h"
5264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "TI_IPC_Api.h"
5364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "EvHandler.h"
5464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "apConn.h"
5564064216a8433360745f69edddce19a606659163The Android Open Source Project#include "TNETW_Driver_api.h"
5664064216a8433360745f69edddce19a606659163The Android Open Source Project#include "Core_AdaptTx.h"
5764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "whalCtrl_api.h"
5864064216a8433360745f69edddce19a606659163The Android Open Source Project
5964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void selectRateTable(TI_HANDLE hCtrlData, UINT32 rateMask);
6064064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void ctrlData_setTxRatePolicies(ctrlData_t *pCtrlData);
6164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void ctrlData_resetCounters(TI_HANDLE hCtrlData);
6264064216a8433360745f69edddce19a606659163The Android Open Source Project
6364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void ctrlData_resetCounters(TI_HANDLE hCtrlData);
6464064216a8433360745f69edddce19a606659163The Android Open Source Project
6564064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void ctrlData_UnregisterTrafficIntensityEvents (TI_HANDLE hCtrlData);
6664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void ctrlData_RegisterTrafficIntensityEvents (TI_HANDLE hCtrlData);
6764064216a8433360745f69edddce19a606659163The Android Open Source Project
6864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic UINT32 ctrlData_buildHwBitMapFromArray(policyClassRatesArray_t *pArray);
6964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void ctrlData_storeTSRateSet(ctrlData_t *pCtrlData, txDataQosParams_t *tsrsParams);
7064064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic rate_e ctrlData_getClosestTSRate(ctrlData_t *pCtrlData, UINT32 ac, rate_e givenRate);
7164064216a8433360745f69edddce19a606659163The Android Open Source Project
7264064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid ctrlData_TrafficThresholdCrossed(TI_HANDLE Context,UINT32 Cookie);
7364064216a8433360745f69edddce19a606659163The Android Open Source Project
7464064216a8433360745f69edddce19a606659163The Android Open Source Project
7564064216a8433360745f69edddce19a606659163The Android Open Source Project/* definitions for medium usage calculations - in uSec units*/
7664064216a8433360745f69edddce19a606659163The Android Open Source Project#define AVERAGE_ACK_TIME   10
7764064216a8433360745f69edddce19a606659163The Android Open Source Project#define AVERAGE_CTS_TIME   20
7864064216a8433360745f69edddce19a606659163The Android Open Source Project#define B_SIFS             10
7964064216a8433360745f69edddce19a606659163The Android Open Source Project
8064064216a8433360745f69edddce19a606659163The Android Open Source Project#define SHORT_PREAMBLE_TIME   96
8164064216a8433360745f69edddce19a606659163The Android Open Source Project#define LONG_PREAMBLE_TIME    192
8264064216a8433360745f69edddce19a606659163The Android Open Source Project
8364064216a8433360745f69edddce19a606659163The Android Open Source Project#define OFDM_PREAMBLE      12
8464064216a8433360745f69edddce19a606659163The Android Open Source Project#define OFDM_SIGNAL_EXT    6
8564064216a8433360745f69edddce19a606659163The Android Open Source Project#define OFDM_PLCP_HDR      24
8664064216a8433360745f69edddce19a606659163The Android Open Source Project
8764064216a8433360745f69edddce19a606659163The Android Open Source Project#define OFDM_DURATION           (B_SIFS + OFDM_PLCP_HDR + OFDM_SIGNAL_EXT)
8864064216a8433360745f69edddce19a606659163The Android Open Source Project#define NONOFDM_SHORT_DURATION  (B_SIFS + SHORT_PREAMBLE_TIME)
8964064216a8433360745f69edddce19a606659163The Android Open Source Project#define NONOFDM_LONG_DURATION   (B_SIFS + LONG_PREAMBLE_TIME)
9064064216a8433360745f69edddce19a606659163The Android Open Source Project
9164064216a8433360745f69edddce19a606659163The Android Open Source Project/*************************************************************************
9264064216a8433360745f69edddce19a606659163The Android Open Source Project*                        ctrlData_create                                 *
9364064216a8433360745f69edddce19a606659163The Android Open Source Project**************************************************************************
9464064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:  This function initializes the Ctrl data module.
9564064216a8433360745f69edddce19a606659163The Android Open Source Project*
9664064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUT:        hOs - handle to Os Abstraction Layer
9764064216a8433360745f69edddce19a606659163The Android Open Source Project*
9864064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT:       TxCmplt_CB - call back function that return to configMngr
9964064216a8433360745f69edddce19a606659163The Android Open Source Project*               in order to register in the Hal
10064064216a8433360745f69edddce19a606659163The Android Open Source Project*
10164064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURN:       Handle to the allocated Ctrl data control block
10264064216a8433360745f69edddce19a606659163The Android Open Source Project************************************************************************/
10364064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_HANDLE ctrlData_create(TI_HANDLE hOs)
10464064216a8433360745f69edddce19a606659163The Android Open Source Project{
10564064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t*         hCtrlData;
10664064216a8433360745f69edddce19a606659163The Android Open Source Project    rateAdaptation_t*   pRateAdaptation;
10764064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef SUPPORT_4X
10864064216a8433360745f69edddce19a606659163The Android Open Source Project    fourX_t*            pFourX;
10964064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
11064064216a8433360745f69edddce19a606659163The Android Open Source Project    classifier_t*       pClsfr;
11164064216a8433360745f69edddce19a606659163The Android Open Source Project
11264064216a8433360745f69edddce19a606659163The Android Open Source Project    if( hOs  == NULL )
11364064216a8433360745f69edddce19a606659163The Android Open Source Project    {
11464064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_OS_REPORT(("FATAL ERROR: ctrlData_create(): OS handle Error - Aborting\n"));
11564064216a8433360745f69edddce19a606659163The Android Open Source Project        return NULL;
11664064216a8433360745f69edddce19a606659163The Android Open Source Project    }
11764064216a8433360745f69edddce19a606659163The Android Open Source Project
11864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* alocate Control module control block */
11964064216a8433360745f69edddce19a606659163The Android Open Source Project    hCtrlData = os_memoryAlloc(hOs, (sizeof(ctrlData_t)));
12064064216a8433360745f69edddce19a606659163The Android Open Source Project    if(!hCtrlData)
12164064216a8433360745f69edddce19a606659163The Android Open Source Project        return NULL;
12264064216a8433360745f69edddce19a606659163The Android Open Source Project
12364064216a8433360745f69edddce19a606659163The Android Open Source Project    /* create rate adaptation module */
12464064216a8433360745f69edddce19a606659163The Android Open Source Project    pRateAdaptation = rateAdaptation_create(hOs);
12564064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef SUPPORT_4X
12664064216a8433360745f69edddce19a606659163The Android Open Source Project    /* create 4X module */
12764064216a8433360745f69edddce19a606659163The Android Open Source Project    pFourX = fourX_create(hOs);
12864064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
12964064216a8433360745f69edddce19a606659163The Android Open Source Project    /* create the classifier module */
13064064216a8433360745f69edddce19a606659163The Android Open Source Project    pClsfr = Classifier_create(hOs);
13164064216a8433360745f69edddce19a606659163The Android Open Source Project
13264064216a8433360745f69edddce19a606659163The Android Open Source Project    if ( (!pRateAdaptation)
13364064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef SUPPORT_4X
13464064216a8433360745f69edddce19a606659163The Android Open Source Project         || (!pFourX)
13564064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
13664064216a8433360745f69edddce19a606659163The Android Open Source Project       )
13764064216a8433360745f69edddce19a606659163The Android Open Source Project    {
13864064216a8433360745f69edddce19a606659163The Android Open Source Project        utils_nullMemoryFree(hOs, pRateAdaptation, sizeof(rateAdaptation_t));
13964064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef SUPPORT_4X
14064064216a8433360745f69edddce19a606659163The Android Open Source Project        utils_nullMemoryFree(hOs, pFourX, sizeof(fourX_t));
14164064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
14264064216a8433360745f69edddce19a606659163The Android Open Source Project        utils_nullMemoryFree(hOs, hCtrlData, sizeof(ctrlData_t));
14364064216a8433360745f69edddce19a606659163The Android Open Source Project
14464064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_OS_REPORT(("FATAL ERROR: ctrlData_create(): Error Creating Ctrl Module - Aborting\n"));
14564064216a8433360745f69edddce19a606659163The Android Open Source Project        return(NULL);
14664064216a8433360745f69edddce19a606659163The Android Open Source Project    }
14764064216a8433360745f69edddce19a606659163The Android Open Source Project
14864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* reset control module control block */
14964064216a8433360745f69edddce19a606659163The Android Open Source Project    os_memoryZero(hOs, hCtrlData, (sizeof(ctrlData_t)));
15064064216a8433360745f69edddce19a606659163The Android Open Source Project
15164064216a8433360745f69edddce19a606659163The Android Open Source Project    hCtrlData->pRateAdaptation = pRateAdaptation;
15264064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef SUPPORT_4X
15364064216a8433360745f69edddce19a606659163The Android Open Source Project    hCtrlData->pFourX = pFourX;
15464064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
15564064216a8433360745f69edddce19a606659163The Android Open Source Project    hCtrlData->pClsfr = pClsfr;
15664064216a8433360745f69edddce19a606659163The Android Open Source Project
15764064216a8433360745f69edddce19a606659163The Android Open Source Project    hCtrlData->hOs = hOs;
15864064216a8433360745f69edddce19a606659163The Android Open Source Project
15964064216a8433360745f69edddce19a606659163The Android Open Source Project    return(hCtrlData);
16064064216a8433360745f69edddce19a606659163The Android Open Source Project}
16164064216a8433360745f69edddce19a606659163The Android Open Source Project
16264064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************
16364064216a8433360745f69edddce19a606659163The Android Open Source Project*                           ctrlData_config                                *
16464064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************
16564064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:  This function configures the Ctrl Data module
16664064216a8433360745f69edddce19a606659163The Android Open Source Project*
16764064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS:       hCtrlData - The object
16864064216a8433360745f69edddce19a606659163The Android Open Source Project*               hWhalCtrl - Handle to the Whal Ctrl object
16964064216a8433360745f69edddce19a606659163The Android Open Source Project*               hSiteMgrHandle - Handle to the Site Mngr object
17064064216a8433360745f69edddce19a606659163The Android Open Source Project*               hTxData - Handle to the Tx Data object
17164064216a8433360745f69edddce19a606659163The Android Open Source Project*               hRxData - Handle to the Rx Data object
17264064216a8433360745f69edddce19a606659163The Android Open Source Project*               hOs - Handle to the Os Abstraction Layer
17364064216a8433360745f69edddce19a606659163The Android Open Source Project*               hReport - Handle to the Report object
17464064216a8433360745f69edddce19a606659163The Android Open Source Project*               ctrlDataInitParams - pointer to Ctrl module init parameters
17564064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT:
17664064216a8433360745f69edddce19a606659163The Android Open Source Project*
17764064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS:      OK - Configuration succesfull
17864064216a8433360745f69edddce19a606659163The Android Open Source Project*               NOK - Configuration unsuccesfull
17964064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/
18064064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS ctrlData_config(TI_HANDLE         hCtrlData,
18164064216a8433360745f69edddce19a606659163The Android Open Source Project                       TI_HANDLE            hWhalCtrl,
18264064216a8433360745f69edddce19a606659163The Android Open Source Project                       TI_HANDLE            hSiteMgrHandle,
18364064216a8433360745f69edddce19a606659163The Android Open Source Project                       TI_HANDLE            hTxData,
18464064216a8433360745f69edddce19a606659163The Android Open Source Project                       TI_HANDLE            hRxData,
18564064216a8433360745f69edddce19a606659163The Android Open Source Project                       TI_HANDLE            hOs,
18664064216a8433360745f69edddce19a606659163The Android Open Source Project                       TI_HANDLE            hReport,
18764064216a8433360745f69edddce19a606659163The Android Open Source Project                       TI_HANDLE            hMemMngr,
18864064216a8433360745f69edddce19a606659163The Android Open Source Project                       TI_HANDLE            hEvHandler,
18964064216a8433360745f69edddce19a606659163The Android Open Source Project                       TI_HANDLE            hAPConnection,
19064064216a8433360745f69edddce19a606659163The Android Open Source Project                       TI_HANDLE            hTrafficMonitor,
19164064216a8433360745f69edddce19a606659163The Android Open Source Project                       disassocSentCB_t     disassocSentCBFunc,
19264064216a8433360745f69edddce19a606659163The Android Open Source Project                       TI_HANDLE            disassocSentCBObj,
19364064216a8433360745f69edddce19a606659163The Android Open Source Project                       ctrlDataInitParams_t *ctrlDataInitParams)
19464064216a8433360745f69edddce19a606659163The Android Open Source Project{
19564064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
19664064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_STATUS Status = OK;
19764064216a8433360745f69edddce19a606659163The Android Open Source Project    rateClassClients_e clientIDindex;
19864064216a8433360745f69edddce19a606659163The Android Open Source Project    txRateClassId_e  TxRateIndex;
19964064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32 ac;
20064064216a8433360745f69edddce19a606659163The Android Open Source Project
20164064216a8433360745f69edddce19a606659163The Android Open Source Project    /* check parameters validity */
20264064216a8433360745f69edddce19a606659163The Android Open Source Project    if( hCtrlData == NULL || hWhalCtrl == NULL || hSiteMgrHandle == NULL || hRxData == NULL ||
20364064216a8433360745f69edddce19a606659163The Android Open Source Project        hTxData == NULL || hOs == NULL || hReport == NULL || hMemMngr == NULL || ctrlDataInitParams == NULL)
20464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
20564064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_OS_REPORT(("FATAL ERROR: ctrlData_config(): Parameters Error - Aborting\n"));
20664064216a8433360745f69edddce19a606659163The Android Open Source Project        return NOK;
20764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
20864064216a8433360745f69edddce19a606659163The Android Open Source Project
20964064216a8433360745f69edddce19a606659163The Android Open Source Project    /* set objects handles */
21064064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->hWhalCtrl =  hWhalCtrl;
21164064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->hSiteMgr =   hSiteMgrHandle;
21264064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->hTxData =    hTxData;
21364064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->hRxData =    hRxData;
21464064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->hOs =        hOs;
21564064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->hReport =    hReport;
21664064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->hAPConn = hAPConnection;
21764064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->hEvHandler = hEvHandler;
21864064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->hTrafficMonitor  = hTrafficMonitor;
21964064216a8433360745f69edddce19a606659163The Android Open Source Project
22064064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->disassocSentCBObj = disassocSentCBObj;
22164064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->disassocSentCBFunc = disassocSentCBFunc;
22264064216a8433360745f69edddce19a606659163The Android Open Source Project
22364064216a8433360745f69edddce19a606659163The Android Open Source Project    /*  set Control module parameters */
22464064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataRateControlEnable = ctrlDataInitParams->ctrlDataRateControlEnable;
22564064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataIbssProtectionType = ctrlDataInitParams->ctrlDataDesiredIbssProtection;
22664064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataRtsCtsStatus = ctrlDataInitParams->ctrlDataDesiredCtsRtsStatus;
22764064216a8433360745f69edddce19a606659163The Android Open Source Project
22864064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef SUPPORT_4X
22964064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataFourXEnable = ctrlDataInitParams->ctrlDataFourXEnable;
23064064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataCerruentFourXstate = ctrlDataInitParams->ctrlDataFourXEnable;
23164064216a8433360745f69edddce19a606659163The Android Open Source Project#else
23264064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataFourXEnable = FALSE;
23364064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataCerruentFourXstate = FALSE;
23464064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
23564064216a8433360745f69edddce19a606659163The Android Open Source Project
23664064216a8433360745f69edddce19a606659163The Android Open Source Project    MAC_COPY(pCtrlData->hOs, (&pCtrlData->ctrlDataDeviceMacAddress),
23764064216a8433360745f69edddce19a606659163The Android Open Source Project            (&ctrlDataInitParams->ctrlDataDeviceMacAddress));
23864064216a8433360745f69edddce19a606659163The Android Open Source Project
23964064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataStartStoplinkControlAlg = DEF_START_STOP_LINK_CTRL_ALG;
24064064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataCurrentBasicRate = DEF_BASIC_RATE;
24164064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataBasicRateBitMask = DEF_BASIC_RATE_MASK;
24264064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataCurrentBasicModulationType = DRV_MODULATION_QPSK;
24364064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataCurrentModulationType = DEF_CURRENT_MUDULATION_TYPE;
24464064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataCurrentBssType = BSS_INFRASTRUCTURE;
24564064216a8433360745f69edddce19a606659163The Android Open Source Project    os_memoryCopy(pCtrlData->hOs, &pCtrlData->ctrlDataRateTables,
24664064216a8433360745f69edddce19a606659163The Android Open Source Project                                  &ctrlDataInitParams->rateTable,
24764064216a8433360745f69edddce19a606659163The Android Open Source Project                                  sizeof(rateTables_t) );
24864064216a8433360745f69edddce19a606659163The Android Open Source Project
24964064216a8433360745f69edddce19a606659163The Android Open Source Project    for (clientIDindex = (rateClassClients_e)0 ; clientIDindex < NUM_OF_RATE_CLASS_CLIENTS ; clientIDindex++)
25064064216a8433360745f69edddce19a606659163The Android Open Source Project    {
25164064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->bIsClassAvailable[clientIDindex] = TRUE;
25264064216a8433360745f69edddce19a606659163The Android Open Source Project        /* by default all clients use all available rates */
25364064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->currClientRateMask[clientIDindex] = ALL_RATES_AVAILABLE;
25464064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->nextClientRateMask[clientIDindex] = ALL_RATES_AVAILABLE;
25564064216a8433360745f69edddce19a606659163The Android Open Source Project
25664064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Init Params are initialized for USER & SG policies only */
25764064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Set short/long retry for all ACs */
25864064216a8433360745f69edddce19a606659163The Android Open Source Project        for (ac=0; ac < MAX_NUM_OF_AC; ac++)
25964064216a8433360745f69edddce19a606659163The Android Open Source Project        {
26064064216a8433360745f69edddce19a606659163The Android Open Source Project            pCtrlData->ctrlDataTxRatePolicy.rateClass[clientIDindex*MAX_NUM_OF_AC+ac].longRetryLimit  = ctrlDataInitParams->ctrlDataTxRatePolicy[clientIDindex].longRetryLimit;
26164064216a8433360745f69edddce19a606659163The Android Open Source Project            pCtrlData->ctrlDataTxRatePolicy.rateClass[clientIDindex*MAX_NUM_OF_AC+ac].shortRetryLimit = ctrlDataInitParams->ctrlDataTxRatePolicy[clientIDindex].shortRetryLimit;
26264064216a8433360745f69edddce19a606659163The Android Open Source Project        }
26364064216a8433360745f69edddce19a606659163The Android Open Source Project
26464064216a8433360745f69edddce19a606659163The Android Open Source Project        for (TxRateIndex = txPolicy54; TxRateIndex < MAX_NUM_OF_TX_RATES_IN_CLASS; TxRateIndex++)
26564064216a8433360745f69edddce19a606659163The Android Open Source Project        {
26664064216a8433360745f69edddce19a606659163The Android Open Source Project            pCtrlData->policyClassRatesArrayCck[clientIDindex].txRate[TxRateIndex] = ctrlDataInitParams->policyClassRatesArrayCck[clientIDindex].txRate[TxRateIndex];
26764064216a8433360745f69edddce19a606659163The Android Open Source Project            pCtrlData->policyClassRatesArrayPbcc[clientIDindex].txRate[TxRateIndex] = ctrlDataInitParams->policyClassRatesArrayPbcc[clientIDindex].txRate[TxRateIndex];
26864064216a8433360745f69edddce19a606659163The Android Open Source Project            pCtrlData->policyClassRatesArrayOfdm[clientIDindex].txRate[TxRateIndex] = ctrlDataInitParams->policyClassRatesArrayOfdm[clientIDindex].txRate[TxRateIndex];
26964064216a8433360745f69edddce19a606659163The Android Open Source Project            pCtrlData->policyClassRatesArrayOfdmA[clientIDindex].txRate[TxRateIndex] = ctrlDataInitParams->policyClassRatesArrayOfdmA[clientIDindex].txRate[TxRateIndex];
27064064216a8433360745f69edddce19a606659163The Android Open Source Project        }
27164064216a8433360745f69edddce19a606659163The Android Open Source Project    }
27264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* By default use USER_RATE_CLASS */
27364064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->currClientRateID = USER_RATE_CLASS;
27464064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->configuredClientRateID = USER_RATE_CLASS;
27564064216a8433360745f69edddce19a606659163The Android Open Source Project
27664064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataCurrentRateTable = &pCtrlData->ctrlDataRateTables.ctrlDataCckRateTable;
27764064216a8433360745f69edddce19a606659163The Android Open Source Project
27864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* reset Counters */
27964064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_resetCounters(pCtrlData);
28064064216a8433360745f69edddce19a606659163The Android Open Source Project
28164064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Configure Rate Adaptation Module */
28264064216a8433360745f69edddce19a606659163The Android Open Source Project    rateAdaptation_config(pCtrlData->pRateAdaptation, hOs, hReport, pCtrlData, hEvHandler,
28364064216a8433360745f69edddce19a606659163The Android Open Source Project                          hAPConnection, &ctrlDataInitParams->rateAdaptationInitParam);
28464064216a8433360745f69edddce19a606659163The Android Open Source Project
28564064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef SUPPORT_4X
28664064216a8433360745f69edddce19a606659163The Android Open Source Project    /* configure fourX Module */
28764064216a8433360745f69edddce19a606659163The Android Open Source Project    fourX_config(pCtrlData->pFourX, hOs, hReport, hMemMngr, hWhalCtrl, hTxData,
28864064216a8433360745f69edddce19a606659163The Android Open Source Project                            &ctrlDataInitParams->fourXInitParams);
28964064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
29064064216a8433360745f69edddce19a606659163The Android Open Source Project
29164064216a8433360745f69edddce19a606659163The Android Open Source Project    /* configure the classifier Module */
29264064216a8433360745f69edddce19a606659163The Android Open Source Project    Status = Classifier_config(pCtrlData->pClsfr, hOs, hReport, &ctrlDataInitParams->ClsfrInitParam);
29364064216a8433360745f69edddce19a606659163The Android Open Source Project    if (Status != OK)
29464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
29564064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_OS_REPORT(("FATAL ERROR: ctrlData_config(): Classifier_config() failed - Aborting\n"));
29664064216a8433360745f69edddce19a606659163The Android Open Source Project        return Status;
29764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
29864064216a8433360745f69edddce19a606659163The Android Open Source Project
29964064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Initialize traffic intensity threshold parameters */
30064064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataTrafficIntensityEventsEnabled = ctrlDataInitParams->ctrlDataTrafficThresholdEnabled;
30164064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataTrafficIntensityThresholds.uHighThreshold = ctrlDataInitParams->ctrlDataTrafficThreshold.uHighThreshold;
30264064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataTrafficIntensityThresholds.uLowThreshold = ctrlDataInitParams->ctrlDataTrafficThreshold.uLowThreshold;
30364064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataTrafficIntensityThresholds.TestInterval = ctrlDataInitParams->ctrlDataTrafficThreshold.TestInterval;
30464064216a8433360745f69edddce19a606659163The Android Open Source Project
30564064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
30664064216a8433360745f69edddce19a606659163The Android Open Source Project       ("\nTraffic Intensity parameters:\nEvents enabled = %d\nuHighThreshold = %d\nuLowThreshold = %d\nTestInterval = %d\n\n",
30764064216a8433360745f69edddce19a606659163The Android Open Source Project       pCtrlData->ctrlDataTrafficIntensityEventsEnabled,
30864064216a8433360745f69edddce19a606659163The Android Open Source Project       pCtrlData->ctrlDataTrafficIntensityThresholds.uHighThreshold,
30964064216a8433360745f69edddce19a606659163The Android Open Source Project       pCtrlData->ctrlDataTrafficIntensityThresholds.uLowThreshold,
31064064216a8433360745f69edddce19a606659163The Android Open Source Project       pCtrlData->ctrlDataTrafficIntensityThresholds.TestInterval));
31164064216a8433360745f69edddce19a606659163The Android Open Source Project
31264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Register the traffic intensity events with the traffic monitor */
31364064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_RegisterTrafficIntensityEvents (pCtrlData);
31464064216a8433360745f69edddce19a606659163The Android Open Source Project
31564064216a8433360745f69edddce19a606659163The Android Open Source Project    /* If the events are enabled, start notification, if disabled - then do nothing */
31664064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_ToggleTrafficIntensityNotification (pCtrlData, pCtrlData->ctrlDataTrafficIntensityEventsEnabled);
31764064216a8433360745f69edddce19a606659163The Android Open Source Project
31864064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INIT(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
31964064216a8433360745f69edddce19a606659163The Android Open Source Project        (".....Ctrl Data configured successfully ...\n"));
32064064216a8433360745f69edddce19a606659163The Android Open Source Project
32164064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
32264064216a8433360745f69edddce19a606659163The Android Open Source Project}
32364064216a8433360745f69edddce19a606659163The Android Open Source Project
32464064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************
32564064216a8433360745f69edddce19a606659163The Android Open Source Project*                           ctrlData_unLoad                                *
32664064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************
32764064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:  This function unload the Ctrl data module.
32864064216a8433360745f69edddce19a606659163The Android Open Source Project*
32964064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS:       hCtrlData - the object
33064064216a8433360745f69edddce19a606659163The Android Open Source Project*
33164064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT:
33264064216a8433360745f69edddce19a606659163The Android Open Source Project*
33364064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS:      OK - Unload succesfull
33464064216a8433360745f69edddce19a606659163The Android Open Source Project*               NOK - Unload unsuccesfull
33564064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/
33664064216a8433360745f69edddce19a606659163The Android Open Source Project
33764064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS ctrlData_unLoad(TI_HANDLE hCtrlData)
33864064216a8433360745f69edddce19a606659163The Android Open Source Project{
33964064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
34064064216a8433360745f69edddce19a606659163The Android Open Source Project
34164064216a8433360745f69edddce19a606659163The Android Open Source Project    /* check parameters validity */
34264064216a8433360745f69edddce19a606659163The Android Open Source Project    if( pCtrlData == NULL )
34364064216a8433360745f69edddce19a606659163The Android Open Source Project    {
34464064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_ERROR(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
34564064216a8433360745f69edddce19a606659163The Android Open Source Project            (" ctrlData_unLoad() : parametrs value error \n"));
34664064216a8433360745f69edddce19a606659163The Android Open Source Project        return NOK;
34764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
34864064216a8433360745f69edddce19a606659163The Android Open Source Project
34964064216a8433360745f69edddce19a606659163The Android Open Source Project
35064064216a8433360745f69edddce19a606659163The Android Open Source Project    rateAdaptation_destroy(pCtrlData->pRateAdaptation);
35164064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef SUPPORT_4X
35264064216a8433360745f69edddce19a606659163The Android Open Source Project    fourX_destroy(pCtrlData->pFourX);
35364064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
35464064216a8433360745f69edddce19a606659163The Android Open Source Project    Classifier_destroy(pCtrlData->pClsfr);
35564064216a8433360745f69edddce19a606659163The Android Open Source Project
35664064216a8433360745f69edddce19a606659163The Android Open Source Project    /* free timer */
35764064216a8433360745f69edddce19a606659163The Android Open Source Project    /* free control module controll block */
35864064216a8433360745f69edddce19a606659163The Android Open Source Project    os_memoryFree(pCtrlData->hOs, hCtrlData, sizeof(ctrlData_t));
35964064216a8433360745f69edddce19a606659163The Android Open Source Project
36064064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
36164064216a8433360745f69edddce19a606659163The Android Open Source Project}
36264064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************
36364064216a8433360745f69edddce19a606659163The Android Open Source Project*                           ctrlData_getParam                              *
36464064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************
36564064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:  get a specific parameter
36664064216a8433360745f69edddce19a606659163The Android Open Source Project*
36764064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS:       hCtrlData - the object
36864064216a8433360745f69edddce19a606659163The Android Open Source Project*
36964064216a8433360745f69edddce19a606659163The Android Open Source Project*
37064064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT:       pParamInfo - structure which include the value of
37164064216a8433360745f69edddce19a606659163The Android Open Source Project*               the requested parameter
37264064216a8433360745f69edddce19a606659163The Android Open Source Project*
37364064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS:      OK
37464064216a8433360745f69edddce19a606659163The Android Open Source Project*               NOK
37564064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/
37664064216a8433360745f69edddce19a606659163The Android Open Source Project
37764064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS ctrlData_getParam(TI_HANDLE hCtrlData, paramInfo_t *pParamInfo)
37864064216a8433360745f69edddce19a606659163The Android Open Source Project{
37964064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
38064064216a8433360745f69edddce19a606659163The Android Open Source Project
38164064216a8433360745f69edddce19a606659163The Android Open Source Project    /* WLAN_REPORT_INFORMATION(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
38264064216a8433360745f69edddce19a606659163The Android Open Source Project        ("ctrlData_getParam() : param=0x%x \n", pParamInfo->paramType)); */
38364064216a8433360745f69edddce19a606659163The Android Open Source Project
38464064216a8433360745f69edddce19a606659163The Android Open Source Project    switch (pParamInfo->paramType)
38564064216a8433360745f69edddce19a606659163The Android Open Source Project    {
38664064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_RATE_CONTROL_ENABLE_PARAM:
38764064216a8433360745f69edddce19a606659163The Android Open Source Project        pParamInfo->content.ctrlDataRateControlEnable = pCtrlData->ctrlDataRateControlEnable;
38864064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
38964064216a8433360745f69edddce19a606659163The Android Open Source Project
39064064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_FOUR_X_ENABLE_PARAM:
39164064216a8433360745f69edddce19a606659163The Android Open Source Project        pParamInfo->content.ctrlDataFourXEnable = pCtrlData->ctrlDataFourXEnable;
39264064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
39364064216a8433360745f69edddce19a606659163The Android Open Source Project
39464064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_FOUR_X_CURRRENT_STATUS_PARAM:
39564064216a8433360745f69edddce19a606659163The Android Open Source Project        if (pCtrlData->ctrlDataCurrentBssType == BSS_INFRASTRUCTURE)
39664064216a8433360745f69edddce19a606659163The Android Open Source Project        {
39764064216a8433360745f69edddce19a606659163The Android Open Source Project            pParamInfo->content.ctrlDataCerruentFourXstate = pCtrlData->ctrlDataCerruentFourXstate;
39864064216a8433360745f69edddce19a606659163The Android Open Source Project        } else {
39964064216a8433360745f69edddce19a606659163The Android Open Source Project            pParamInfo->content.ctrlDataCerruentFourXstate = pCtrlData->ctrlDataFourXEnable;
40064064216a8433360745f69edddce19a606659163The Android Open Source Project        }
40164064216a8433360745f69edddce19a606659163The Android Open Source Project
40264064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
40364064216a8433360745f69edddce19a606659163The Android Open Source Project
40464064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CURRENT_BSSID_PARAM:
40564064216a8433360745f69edddce19a606659163The Android Open Source Project        MAC_COPY(pCtrlData->hOs, (&pParamInfo->content.ctrlDataCurrentBSSID),
40664064216a8433360745f69edddce19a606659163The Android Open Source Project                (&pCtrlData->ctrlDataCurrentBSSID));
40764064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
40864064216a8433360745f69edddce19a606659163The Android Open Source Project
40964064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CURRENT_BSS_TYPE_PARAM:
41064064216a8433360745f69edddce19a606659163The Android Open Source Project        pParamInfo->content.ctrlDataCurrentBssType = pCtrlData->ctrlDataCurrentBssType;
41164064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
41264064216a8433360745f69edddce19a606659163The Android Open Source Project
41364064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CURRENT_MODULATION_TYPE_PARAM:
41464064216a8433360745f69edddce19a606659163The Android Open Source Project        pParamInfo->content.ctrlDataCurrentModulationType = pCtrlData->ctrlDataCurrentModulationType;
41564064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
41664064216a8433360745f69edddce19a606659163The Android Open Source Project
41764064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CURRENT_PREAMBLE_TYPE_PARAM:
41864064216a8433360745f69edddce19a606659163The Android Open Source Project        pParamInfo->content.ctrlDataCurrentPreambleType = pCtrlData->ctrlDataCurrentPreambleType;
41964064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
42064064216a8433360745f69edddce19a606659163The Android Open Source Project
42164064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_MAC_ADDRESS:
42264064216a8433360745f69edddce19a606659163The Android Open Source Project        MAC_COPY(pCtrlData->hOs, (&pParamInfo->content.ctrlDataDeviceMacAddress), (&pCtrlData->ctrlDataDeviceMacAddress));
42364064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
42464064216a8433360745f69edddce19a606659163The Android Open Source Project
42564064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CURRENT_BASIC_RATE_PARAM:
42664064216a8433360745f69edddce19a606659163The Android Open Source Project        pParamInfo->content.ctrlDataCurrentBasicRate = pCtrlData->ctrlDataCurrentBasicRate;
42764064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
42864064216a8433360745f69edddce19a606659163The Android Open Source Project
42964064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CURRENT_BASIC_RATE_MASK_PARAM:
43064064216a8433360745f69edddce19a606659163The Android Open Source Project        pParamInfo->content.ctrlDataBasicRateBitMask = pCtrlData->ctrlDataBasicRateBitMask;
43164064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
43264064216a8433360745f69edddce19a606659163The Android Open Source Project
43364064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CURRENT_BASIC_MODULATION_PARAM:
43464064216a8433360745f69edddce19a606659163The Android Open Source Project        pParamInfo->content.ctrlDataCurrentBasicModulationType = pCtrlData->ctrlDataCurrentBasicModulationType;
43564064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
43664064216a8433360745f69edddce19a606659163The Android Open Source Project
43764064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_COUNTERS_PARAM:
43864064216a8433360745f69edddce19a606659163The Android Open Source Project        os_memoryCopy(pCtrlData->hOs,&pParamInfo->content.ctrlDataCounters,
43964064216a8433360745f69edddce19a606659163The Android Open Source Project            &pCtrlData->ctrlDataCounters, sizeof(ctrlDataCounters_t));
44064064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
44164064216a8433360745f69edddce19a606659163The Android Open Source Project
44264064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CURRENT_SUPPORTED_RATE_MASK_PARAM:
44364064216a8433360745f69edddce19a606659163The Android Open Source Project        pParamInfo->content.ctrlDataCurrentRateMask = pCtrlData->ctrlDataCurrentRateMask;
44464064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
44564064216a8433360745f69edddce19a606659163The Android Open Source Project
44664064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CURRENT_PROTECTION_STATUS_PARAM:
44764064216a8433360745f69edddce19a606659163The Android Open Source Project        pParamInfo->content.ctrlDataProtectionEnabled = pCtrlData->ctrlDataProtectionEnabled;
44864064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
44964064216a8433360745f69edddce19a606659163The Android Open Source Project
45064064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CURRENT_IBSS_PROTECTION_PARAM:
45164064216a8433360745f69edddce19a606659163The Android Open Source Project        pParamInfo->content.ctrlDataIbssProtecionType = pCtrlData->ctrlDataIbssProtectionType;
45264064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
45364064216a8433360745f69edddce19a606659163The Android Open Source Project
45464064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CURRENT_RTS_CTS_STATUS_PARAM:
45564064216a8433360745f69edddce19a606659163The Android Open Source Project        pParamInfo->content.ctrlDataRtsCtsStatus = pCtrlData->ctrlDataRtsCtsStatus;
45664064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
45764064216a8433360745f69edddce19a606659163The Android Open Source Project
45864064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CLSFR_TYPE:
45964064216a8433360745f69edddce19a606659163The Android Open Source Project        Classifier_getClsfrType (pCtrlData->pClsfr,&pParamInfo->content.ctrlDataClsfrType);
46064064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
46164064216a8433360745f69edddce19a606659163The Android Open Source Project        /*
46264064216a8433360745f69edddce19a606659163The Android Open Source Project         * NOTE: currently supporting only USER_RATE_CLASS!!!!!!!!!
46364064216a8433360745f69edddce19a606659163The Android Open Source Project         */
46464064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_SHORT_RETRY_LIMIT_PARAM:
46564064216a8433360745f69edddce19a606659163The Android Open Source Project        pParamInfo->content.TxRatePolicy.rateClass[USER_RATE_CLASS].shortRetryLimit = pCtrlData->ctrlDataTxRatePolicy.rateClass[USER_RATE_CLASS].shortRetryLimit;
46664064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
46764064216a8433360745f69edddce19a606659163The Android Open Source Project
46864064216a8433360745f69edddce19a606659163The Android Open Source Project        /*
46964064216a8433360745f69edddce19a606659163The Android Open Source Project         * NOTE: currently supporting only ONE txRatePolicy!!!!!!!!!
47064064216a8433360745f69edddce19a606659163The Android Open Source Project         */
47164064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_LONG_RETRY_LIMIT_PARAM:
47264064216a8433360745f69edddce19a606659163The Android Open Source Project        pParamInfo->content.TxRatePolicy.rateClass[USER_RATE_CLASS].longRetryLimit = pCtrlData->ctrlDataTxRatePolicy.rateClass[USER_RATE_CLASS].longRetryLimit;
47364064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
47464064216a8433360745f69edddce19a606659163The Android Open Source Project
47564064216a8433360745f69edddce19a606659163The Android Open Source Project
47664064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_TRAFFIC_INTENSITY_THRESHOLD:
47764064216a8433360745f69edddce19a606659163The Android Open Source Project        pParamInfo->content.ctrlDataTrafficIntensityThresholds.uHighThreshold = pCtrlData->ctrlDataTrafficIntensityThresholds.uHighThreshold;
47864064216a8433360745f69edddce19a606659163The Android Open Source Project        pParamInfo->content.ctrlDataTrafficIntensityThresholds.uLowThreshold = pCtrlData->ctrlDataTrafficIntensityThresholds.uLowThreshold;
47964064216a8433360745f69edddce19a606659163The Android Open Source Project        pParamInfo->content.ctrlDataTrafficIntensityThresholds.TestInterval = pCtrlData->ctrlDataTrafficIntensityThresholds.TestInterval;
48064064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
48164064216a8433360745f69edddce19a606659163The Android Open Source Project
48264064216a8433360745f69edddce19a606659163The Android Open Source Project    default:
48364064216a8433360745f69edddce19a606659163The Android Open Source Project        return (PARAM_NOT_SUPPORTED);
48464064216a8433360745f69edddce19a606659163The Android Open Source Project/*        WLAN_REPORT_ERROR(pCtrlData->hReport, TX_DATA_MODULE_LOG,
48564064216a8433360745f69edddce19a606659163The Android Open Source Project            (" ctrlData_getParam() : PARAMETER NOT SUPPORTED \n"));
48664064216a8433360745f69edddce19a606659163The Android Open Source Project        return NOK;
48764064216a8433360745f69edddce19a606659163The Android Open Source Project        break; - unreachable */
48864064216a8433360745f69edddce19a606659163The Android Open Source Project    }
48964064216a8433360745f69edddce19a606659163The Android Open Source Project
49064064216a8433360745f69edddce19a606659163The Android Open Source Project    return (OK);
49164064216a8433360745f69edddce19a606659163The Android Open Source Project}
49264064216a8433360745f69edddce19a606659163The Android Open Source Project
49345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt
49445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt/***************************************************************************
49545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*                           ctrlData_getParam                              *
49645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt****************************************************************************
49745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* DESCRIPTION:  get a specific parameter
49845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*
49945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* INPUTS:       hCtrlData - the object
50045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*
50145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*
50245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* OUTPUT:       pParamInfo - structure which include the value of
50345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*               the requested parameter
50445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*
50545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* RETURNS:      OK
50645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*               NOK
50745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt***************************************************************************/
50845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt/* note: ctrlData_getParamPartial() is part of ctrlData_getParam() it was implemented to reduce Stack usage */
50945544f73189f4649d4afb21a0dab72cd70971e2fDmitry ShmidtTI_STATUS ctrlData_getParamPartial(TI_HANDLE hCtrlData, paramInfoPartial_t *pParamInfo)
51045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt{
51145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
51245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt
51345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt  switch (pParamInfo->paramType)
51445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt    {
51545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt    case CTRL_DATA_CURRENT_PREAMBLE_TYPE_PARAM:
51645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt        pParamInfo->content.ctrlDataCurrentPreambleType = pCtrlData->ctrlDataCurrentPreambleType;
51745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt        break;
51845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt
51945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt	default:
52045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt        return (PARAM_NOT_SUPPORTED);
52145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt    }
52245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt
52345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt    return (OK);
52445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt}
52545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt
52664064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************
52764064216a8433360745f69edddce19a606659163The Android Open Source Project*                           ctrlData_buildSupportedHwRates                 *
52864064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************
52964064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:  builds HwRatesBitMap (supported rates) for txRatePolicy using 4 elements :
53064064216a8433360745f69edddce19a606659163The Android Open Source Project*               1) AP support
53164064216a8433360745f69edddce19a606659163The Android Open Source Project*               2) Driver support
53264064216a8433360745f69edddce19a606659163The Android Open Source Project*               3) Client support (using currClientRateMask[clientIDindex] )
53364064216a8433360745f69edddce19a606659163The Android Open Source Project*               4) Policy rates   (retries per client)
53464064216a8433360745f69edddce19a606659163The Android Open Source Project*
53564064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT:
53664064216a8433360745f69edddce19a606659163The Android Open Source Project*
53764064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS:      OK
53864064216a8433360745f69edddce19a606659163The Android Open Source Project*               NOK
53964064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/
54064064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic UINT32 ctrlData_buildSupportedHwRates(ctrlData_rateAdapt_t *pDriverTable,
54164064216a8433360745f69edddce19a606659163The Android Open Source Project                                             UINT32             APsupport,
54264064216a8433360745f69edddce19a606659163The Android Open Source Project                                             UINT32             clientSupport,
54364064216a8433360745f69edddce19a606659163The Android Open Source Project                                             UINT32             policySupport)
54464064216a8433360745f69edddce19a606659163The Android Open Source Project{
54564064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT16  AppRateBitMap = 0;
54664064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32  HwRatesBitMap, DriverTableBitMap = 0;
54764064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32 i = 0;
54864064216a8433360745f69edddce19a606659163The Android Open Source Project
54964064216a8433360745f69edddce19a606659163The Android Open Source Project    /* 1. Convert Rates table into bit mask */
55064064216a8433360745f69edddce19a606659163The Android Open Source Project    while (i <= pDriverTable->len)
55164064216a8433360745f69edddce19a606659163The Android Open Source Project    {
55264064216a8433360745f69edddce19a606659163The Android Open Source Project        DriverTableBitMap |= (1 << (pDriverTable->rateAdaptRatesTable[i++] - 1));
55364064216a8433360745f69edddce19a606659163The Android Open Source Project    }
55464064216a8433360745f69edddce19a606659163The Android Open Source Project
55564064216a8433360745f69edddce19a606659163The Android Open Source Project    /* 2. AND with other masks */
55664064216a8433360745f69edddce19a606659163The Android Open Source Project    AppRateBitMap = (UINT16)(DriverTableBitMap & APsupport & clientSupport & policySupport);
55764064216a8433360745f69edddce19a606659163The Android Open Source Project
55864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* In case there are no mutual rates, try to ignore policy settings */
55964064216a8433360745f69edddce19a606659163The Android Open Source Project    if (AppRateBitMap == 0)
56064064216a8433360745f69edddce19a606659163The Android Open Source Project    {
56164064216a8433360745f69edddce19a606659163The Android Open Source Project        AppRateBitMap = (UINT16)(DriverTableBitMap & APsupport);
56264064216a8433360745f69edddce19a606659163The Android Open Source Project    }
56364064216a8433360745f69edddce19a606659163The Android Open Source Project
56464064216a8433360745f69edddce19a606659163The Android Open Source Project    /* 3. Set total supported rates bit map for txRatePolicy */
56564064216a8433360745f69edddce19a606659163The Android Open Source Project    ConvertAppRatesToBitmap(AppRateBitMap, &HwRatesBitMap);
56664064216a8433360745f69edddce19a606659163The Android Open Source Project
56764064216a8433360745f69edddce19a606659163The Android Open Source Project    return HwRatesBitMap;
56864064216a8433360745f69edddce19a606659163The Android Open Source Project}
56964064216a8433360745f69edddce19a606659163The Android Open Source Project
57064064216a8433360745f69edddce19a606659163The Android Open Source Project
57164064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************
57264064216a8433360745f69edddce19a606659163The Android Open Source Project*                           ctrlData_setTxRatePolicies                     *
57364064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************
57464064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:  This function sets rate fallback policies to be configured to FW
57564064216a8433360745f69edddce19a606659163The Android Open Source Project*               If TSRS is defined to specific AC, the policy is derived from it,
57664064216a8433360745f69edddce19a606659163The Android Open Source Project*               otherwise it is derived from pre-defined map
57764064216a8433360745f69edddce19a606659163The Android Open Source Project*
57864064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS:       pCtrlData - the object
57964064216a8433360745f69edddce19a606659163The Android Open Source Project*
58064064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS:      -
58164064216a8433360745f69edddce19a606659163The Android Open Source Project*
58264064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/
58364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void ctrlData_setTxRatePolicies(ctrlData_t *pCtrlData)
58464064216a8433360745f69edddce19a606659163The Android Open Source Project{
58564064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32 ac, policyClassRateMask, supportedHwRatesBitMap, clientIDindex, hwRateIndex;
58664064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32 fwPolicyID;
58764064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8 shortRetryLimit, longRetryLimit;
58864064216a8433360745f69edddce19a606659163The Android Open Source Project    txRateClassId_e  txRateIndex;
58964064216a8433360745f69edddce19a606659163The Android Open Source Project    whalParamInfo_t param;
59064064216a8433360745f69edddce19a606659163The Android Open Source Project
59164064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->currClientRateID = pCtrlData->configuredClientRateID;
59264064216a8433360745f69edddce19a606659163The Android Open Source Project
59364064216a8433360745f69edddce19a606659163The Android Open Source Project    for (clientIDindex = 0, fwPolicyID = 0; clientIDindex < NUM_OF_RATE_CLASS_CLIENTS; clientIDindex++)
59464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
59564064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Retrieve retry limits stored in first AC of current class */
59664064216a8433360745f69edddce19a606659163The Android Open Source Project        shortRetryLimit = pCtrlData->ctrlDataTxRatePolicy.rateClass[fwPolicyID].shortRetryLimit;
59764064216a8433360745f69edddce19a606659163The Android Open Source Project        longRetryLimit = pCtrlData->ctrlDataTxRatePolicy.rateClass[fwPolicyID].longRetryLimit;
59864064216a8433360745f69edddce19a606659163The Android Open Source Project
59964064216a8433360745f69edddce19a606659163The Android Open Source Project        /* By default assume that this class can be enabled */
60064064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->bIsClassAvailable[clientIDindex] = TRUE;
60164064216a8433360745f69edddce19a606659163The Android Open Source Project
60264064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Update the rate mask from nextClientRateMask, where it was stored untill now */
60364064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->currClientRateMask[clientIDindex] = pCtrlData->nextClientRateMask[clientIDindex];
60464064216a8433360745f69edddce19a606659163The Android Open Source Project
60564064216a8433360745f69edddce19a606659163The Android Open Source Project        for (ac = 0; ac < MAX_NUM_OF_AC; ac++)
60664064216a8433360745f69edddce19a606659163The Android Open Source Project        {
60764064216a8433360745f69edddce19a606659163The Android Open Source Project            /* 1. Check if there is special rate set defined for this access category, */
60864064216a8433360745f69edddce19a606659163The Android Open Source Project            /*    then verify that at least one rate is mutual between TSRS and class policy, */
60964064216a8433360745f69edddce19a606659163The Android Open Source Project            /*    otherwise use default settings for this class */
61064064216a8433360745f69edddce19a606659163The Android Open Source Project            if (pCtrlData->tsrsParameters[ac].supportedRatesMask[clientIDindex] != 0)
61164064216a8433360745f69edddce19a606659163The Android Open Source Project            {
61264064216a8433360745f69edddce19a606659163The Android Open Source Project                /* Check if at least one rate is mutual between TSRS and current class policy, */
61364064216a8433360745f69edddce19a606659163The Android Open Source Project                /* otherwise use default for this class */
61464064216a8433360745f69edddce19a606659163The Android Open Source Project                policyClassRateMask = pCtrlData->tsrsParameters[ac].policyClassRateMask[clientIDindex];
61564064216a8433360745f69edddce19a606659163The Android Open Source Project            }
61664064216a8433360745f69edddce19a606659163The Android Open Source Project            else
61764064216a8433360745f69edddce19a606659163The Android Open Source Project            {
61864064216a8433360745f69edddce19a606659163The Android Open Source Project                policyClassRateMask = ctrlData_buildHwBitMapFromArray(&(pCtrlData->pCurrPolicyClassRatesArray[clientIDindex]));
61964064216a8433360745f69edddce19a606659163The Android Open Source Project            }
62064064216a8433360745f69edddce19a606659163The Android Open Source Project
62164064216a8433360745f69edddce19a606659163The Android Open Source Project            /* 2. Build a bitMap for the supported rates */
62264064216a8433360745f69edddce19a606659163The Android Open Source Project            supportedHwRatesBitMap = ctrlData_buildSupportedHwRates(
62364064216a8433360745f69edddce19a606659163The Android Open Source Project                                pCtrlData->ctrlDataCurrentRateTable,            /* according to radio mode */
62464064216a8433360745f69edddce19a606659163The Android Open Source Project                                pCtrlData->ctrlDataCurrentRateMask,             /* AP supported rates */
62564064216a8433360745f69edddce19a606659163The Android Open Source Project                                pCtrlData->currClientRateMask[clientIDindex],   /* STA supported rates */
62664064216a8433360745f69edddce19a606659163The Android Open Source Project                                policyClassRateMask);                           /* requested by class policy rates */
62764064216a8433360745f69edddce19a606659163The Android Open Source Project
62864064216a8433360745f69edddce19a606659163The Android Open Source Project            if (supportedHwRatesBitMap == 0)
62964064216a8433360745f69edddce19a606659163The Android Open Source Project            {
63064064216a8433360745f69edddce19a606659163The Android Open Source Project                WLAN_REPORT_ERROR(pCtrlData->hReport,CTRL_DATA_MODULE_LOG,
63164064216a8433360745f69edddce19a606659163The Android Open Source Project                                  ("%s No supported rates for client %d, ac %d \n", __FUNCTION__, clientIDindex, ac));
63264064216a8433360745f69edddce19a606659163The Android Open Source Project                pCtrlData->bIsClassAvailable[clientIDindex] = FALSE;
63364064216a8433360745f69edddce19a606659163The Android Open Source Project                pCtrlData->currClientRateID = USER_RATE_CLASS;
63464064216a8433360745f69edddce19a606659163The Android Open Source Project            }
63564064216a8433360745f69edddce19a606659163The Android Open Source Project
63664064216a8433360745f69edddce19a606659163The Android Open Source Project            /* 3. Configure retransmission for the rates */
63764064216a8433360745f69edddce19a606659163The Android Open Source Project            for (hwRateIndex = HW_BIT_RATE_54MBPS, txRateIndex = txPolicy54;
63864064216a8433360745f69edddce19a606659163The Android Open Source Project                 txRateIndex < MAX_NUM_OF_TX_RATES_IN_CLASS;
63964064216a8433360745f69edddce19a606659163The Android Open Source Project                 hwRateIndex >>= 1, txRateIndex++)
64064064216a8433360745f69edddce19a606659163The Android Open Source Project            {
64164064216a8433360745f69edddce19a606659163The Android Open Source Project                /* if supported rate */
64264064216a8433360745f69edddce19a606659163The Android Open Source Project                if (supportedHwRatesBitMap & hwRateIndex)
64364064216a8433360745f69edddce19a606659163The Android Open Source Project                {
64464064216a8433360745f69edddce19a606659163The Android Open Source Project                    /* if rate fall back is enabled */
64564064216a8433360745f69edddce19a606659163The Android Open Source Project                    if (pCtrlData->ctrlDataRateControlEnable)
64664064216a8433360745f69edddce19a606659163The Android Open Source Project                    {
64764064216a8433360745f69edddce19a606659163The Android Open Source Project                        /* Set retries as they were configured in ini file for this class; */
64864064216a8433360745f69edddce19a606659163The Android Open Source Project                        /* make sure at least one retransmission is defined, */
64964064216a8433360745f69edddce19a606659163The Android Open Source Project                        /* to take care of cases in which we ignored pre-defined policy */
65064064216a8433360745f69edddce19a606659163The Android Open Source Project                        pCtrlData->ctrlDataTxRatePolicy.rateClass[fwPolicyID].txRate[txRateIndex] =
65164064216a8433360745f69edddce19a606659163The Android Open Source Project                            (pCtrlData->pCurrPolicyClassRatesArray[clientIDindex].txRate[txRateIndex] > 1) ?
65264064216a8433360745f69edddce19a606659163The Android Open Source Project                            pCtrlData->pCurrPolicyClassRatesArray[clientIDindex].txRate[txRateIndex] : 1;
65364064216a8433360745f69edddce19a606659163The Android Open Source Project                    }
65464064216a8433360745f69edddce19a606659163The Android Open Source Project                    else /* no rate fallback */
65564064216a8433360745f69edddce19a606659163The Android Open Source Project                    {
65664064216a8433360745f69edddce19a606659163The Android Open Source Project                        /* set max reties because no fall back is implemented */
65764064216a8433360745f69edddce19a606659163The Android Open Source Project                        pCtrlData->ctrlDataTxRatePolicy.rateClass[fwPolicyID].txRate[txRateIndex] =
65864064216a8433360745f69edddce19a606659163The Android Open Source Project                            (shortRetryLimit > longRetryLimit) ? shortRetryLimit : longRetryLimit;
65964064216a8433360745f69edddce19a606659163The Android Open Source Project                        pCtrlData->ctrlDataTxRatePolicy.rateClass[fwPolicyID].flags |= TX_POLICY_FLAGS_TRUNCATE;
66064064216a8433360745f69edddce19a606659163The Android Open Source Project                    }
66164064216a8433360745f69edddce19a606659163The Android Open Source Project                }
66264064216a8433360745f69edddce19a606659163The Android Open Source Project                else
66364064216a8433360745f69edddce19a606659163The Android Open Source Project                {
66464064216a8433360745f69edddce19a606659163The Android Open Source Project                    pCtrlData->ctrlDataTxRatePolicy.rateClass[fwPolicyID].txRate[txRateIndex] = 0;
66564064216a8433360745f69edddce19a606659163The Android Open Source Project                }
66664064216a8433360745f69edddce19a606659163The Android Open Source Project
66764064216a8433360745f69edddce19a606659163The Android Open Source Project                WLAN_REPORT_INFORMATION(pCtrlData->hReport,CTRL_DATA_MODULE_LOG,
66864064216a8433360745f69edddce19a606659163The Android Open Source Project                    ("%s: AC %d, class %d, rate 0x%x[%d]\n", __FUNCTION__, ac, clientIDindex, hwRateIndex, pCtrlData->ctrlDataTxRatePolicy.rateClass[fwPolicyID].txRate[txRateIndex]));
66964064216a8433360745f69edddce19a606659163The Android Open Source Project            }
67064064216a8433360745f69edddce19a606659163The Android Open Source Project
67164064216a8433360745f69edddce19a606659163The Android Open Source Project            /* Note that Long/Short retries are pre-set during configuration stage */
67264064216a8433360745f69edddce19a606659163The Android Open Source Project
67364064216a8433360745f69edddce19a606659163The Android Open Source Project            /* 4. Finally, increase total number of policies */
67464064216a8433360745f69edddce19a606659163The Android Open Source Project            pCtrlData->tsrsParameters[ac].fwPolicyID[clientIDindex] = fwPolicyID++;
67564064216a8433360745f69edddce19a606659163The Android Open Source Project        }
67664064216a8433360745f69edddce19a606659163The Android Open Source Project    }
67764064216a8433360745f69edddce19a606659163The Android Open Source Project
67864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Download policies to the FW. Num of policies is 8 - one for each AC for every class */
67964064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
68064064216a8433360745f69edddce19a606659163The Android Open Source Project        ("%s: num of Rate policies: %d\n", __FUNCTION__, fwPolicyID));
68164064216a8433360745f69edddce19a606659163The Android Open Source Project
68264064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataTxRatePolicy.numOfRateClasses = fwPolicyID;
68364064216a8433360745f69edddce19a606659163The Android Open Source Project    param.paramType = HAL_CTRL_TX_RATE_CLASS_PARAMS;
68464064216a8433360745f69edddce19a606659163The Android Open Source Project    param.content.pTxRatePlicy = &pCtrlData->ctrlDataTxRatePolicy;
68564064216a8433360745f69edddce19a606659163The Android Open Source Project
68664064216a8433360745f69edddce19a606659163The Android Open Source Project    whalCtrl_SetParam(pCtrlData->hWhalCtrl, &param);
68764064216a8433360745f69edddce19a606659163The Android Open Source Project}
68864064216a8433360745f69edddce19a606659163The Android Open Source Project
68964064216a8433360745f69edddce19a606659163The Android Open Source Project
69064064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************
69164064216a8433360745f69edddce19a606659163The Android Open Source Project*                           ctrlData_setParam                              *
69264064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************
69364064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:  set a specific parameter
69464064216a8433360745f69edddce19a606659163The Android Open Source Project*
69564064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS:       hCtrlData - the object
69664064216a8433360745f69edddce19a606659163The Android Open Source Project*               pParamInfo - structure which include the value to set for
69764064216a8433360745f69edddce19a606659163The Android Open Source Project*               the requested parameter
69864064216a8433360745f69edddce19a606659163The Android Open Source Project*
69964064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT:
70064064216a8433360745f69edddce19a606659163The Android Open Source Project*
70164064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS:      OK
70264064216a8433360745f69edddce19a606659163The Android Open Source Project*               NOK
70364064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/
70464064216a8433360745f69edddce19a606659163The Android Open Source Project
70564064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS ctrlData_setParam(TI_HANDLE hCtrlData, paramInfo_t *pParamInfo)
70664064216a8433360745f69edddce19a606659163The Android Open Source Project{
70764064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
70864064216a8433360745f69edddce19a606659163The Android Open Source Project    whalParamInfo_t param;
70964064216a8433360745f69edddce19a606659163The Android Open Source Project    rateClassClients_e clientID;
71064064216a8433360745f69edddce19a606659163The Android Open Source Project
71164064216a8433360745f69edddce19a606659163The Android Open Source Project    /* WLAN_REPORT_INFORMATION(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
71264064216a8433360745f69edddce19a606659163The Android Open Source Project        ("ctrlData_setParam() : param=0x%x \n", pParamInfo->paramType)); */
71364064216a8433360745f69edddce19a606659163The Android Open Source Project
71464064216a8433360745f69edddce19a606659163The Android Open Source Project    switch (pParamInfo->paramType)
71564064216a8433360745f69edddce19a606659163The Android Open Source Project    {
71664064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_RATE_CONTROL_ENABLE_PARAM:
71764064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->ctrlDataRateControlEnable = pParamInfo->content.ctrlDataRateControlEnable;
71864064216a8433360745f69edddce19a606659163The Android Open Source Project        selectRateTable(pCtrlData, pCtrlData->ctrlDataCurrentRateMask);
71964064216a8433360745f69edddce19a606659163The Android Open Source Project
72064064216a8433360745f69edddce19a606659163The Android Open Source Project        ctrlData_setTxRatePolicies(pCtrlData);
72164064216a8433360745f69edddce19a606659163The Android Open Source Project
72264064216a8433360745f69edddce19a606659163The Android Open Source Project        rateAdaptation_buildRateMapTable(pCtrlData->pRateAdaptation,
72364064216a8433360745f69edddce19a606659163The Android Open Source Project                                                 pCtrlData->ctrlDataCurrentRateTable,
72464064216a8433360745f69edddce19a606659163The Android Open Source Project                                                 pCtrlData->ctrlDataCurrentRateMask,
72564064216a8433360745f69edddce19a606659163The Android Open Source Project                                                 pCtrlData->currClientRateMask[pCtrlData->currClientRateID],
72664064216a8433360745f69edddce19a606659163The Android Open Source Project                                                 pCtrlData->ctrlDataCurrentModulationType,
72764064216a8433360745f69edddce19a606659163The Android Open Source Project                                                 pCtrlData->ctrlDataCerruentFourXstate,
72864064216a8433360745f69edddce19a606659163The Android Open Source Project                                          pCtrlData->ctrlDataCurrentBssType);
72964064216a8433360745f69edddce19a606659163The Android Open Source Project
73064064216a8433360745f69edddce19a606659163The Android Open Source Project
73164064216a8433360745f69edddce19a606659163The Android Open Source Project
73264064216a8433360745f69edddce19a606659163The Android Open Source Project
73364064216a8433360745f69edddce19a606659163The Android Open Source Project
73464064216a8433360745f69edddce19a606659163The Android Open Source Project             if(pCtrlData->ctrlDataRateControlEnable == TRUE )
73564064216a8433360745f69edddce19a606659163The Android Open Source Project             {
73664064216a8433360745f69edddce19a606659163The Android Open Source Project                 /* start rate adaptation algorithm */
73764064216a8433360745f69edddce19a606659163The Android Open Source Project
73864064216a8433360745f69edddce19a606659163The Android Open Source Project                if( pCtrlData->ctrlDataStartStoplinkControlAlg == TRUE)
73964064216a8433360745f69edddce19a606659163The Android Open Source Project                {
74064064216a8433360745f69edddce19a606659163The Android Open Source Project
74164064216a8433360745f69edddce19a606659163The Android Open Source Project                rateAdaptation_start(pCtrlData->pRateAdaptation);
74264064216a8433360745f69edddce19a606659163The Android Open Source Project            }
74364064216a8433360745f69edddce19a606659163The Android Open Source Project            else
74464064216a8433360745f69edddce19a606659163The Android Open Source Project            {
74564064216a8433360745f69edddce19a606659163The Android Open Source Project                /* stop rate adaptation algorithm */
74664064216a8433360745f69edddce19a606659163The Android Open Source Project                rateAdaptation_stop(pCtrlData->pRateAdaptation);
74764064216a8433360745f69edddce19a606659163The Android Open Source Project            }
74864064216a8433360745f69edddce19a606659163The Android Open Source Project        }
74964064216a8433360745f69edddce19a606659163The Android Open Source Project        else
75064064216a8433360745f69edddce19a606659163The Android Open Source Project        {
75164064216a8433360745f69edddce19a606659163The Android Open Source Project            rateAdaptation_stopTimer(pCtrlData->pRateAdaptation);
75264064216a8433360745f69edddce19a606659163The Android Open Source Project        }
75364064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
75464064216a8433360745f69edddce19a606659163The Android Open Source Project
75564064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_FOUR_X_ENABLE_PARAM:
75664064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef SUPPORT_4X
75764064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->ctrlDataFourXEnable = pParamInfo->content.ctrlDataFourXEnable;
75864064216a8433360745f69edddce19a606659163The Android Open Source Project        if(pCtrlData->ctrlDataStartStoplinkControlAlg == TRUE)
75964064216a8433360745f69edddce19a606659163The Android Open Source Project        {
76064064216a8433360745f69edddce19a606659163The Android Open Source Project            if(pCtrlData->ctrlDataFourXEnable == TRUE)
76164064216a8433360745f69edddce19a606659163The Android Open Source Project            {
76264064216a8433360745f69edddce19a606659163The Android Open Source Project                pCtrlData->ctrlDataCerruentFourXstate = TRUE;
76364064216a8433360745f69edddce19a606659163The Android Open Source Project            }
76464064216a8433360745f69edddce19a606659163The Android Open Source Project            else
76564064216a8433360745f69edddce19a606659163The Android Open Source Project            {
76664064216a8433360745f69edddce19a606659163The Android Open Source Project                pCtrlData->ctrlDataCerruentFourXstate = FALSE;
76764064216a8433360745f69edddce19a606659163The Android Open Source Project            }
76864064216a8433360745f69edddce19a606659163The Android Open Source Project        }
76964064216a8433360745f69edddce19a606659163The Android Open Source Project        rateAdaptation_update4xEnable(pCtrlData->pRateAdaptation,
77064064216a8433360745f69edddce19a606659163The Android Open Source Project                                      pCtrlData->ctrlDataCerruentFourXstate,
77164064216a8433360745f69edddce19a606659163The Android Open Source Project                                      pCtrlData->ctrlDataCurrentBssType );
77264064216a8433360745f69edddce19a606659163The Android Open Source Project
77364064216a8433360745f69edddce19a606659163The Android Open Source Project#else
77464064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->ctrlDataFourXEnable = FALSE;
77564064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->ctrlDataCerruentFourXstate = FALSE;
77664064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
77764064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
77864064216a8433360745f69edddce19a606659163The Android Open Source Project
77964064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CURRENT_RATE_CLASS_CLIENT:
78064064216a8433360745f69edddce19a606659163The Android Open Source Project        /* set a new rate class client to be used on data packets */
78164064216a8433360745f69edddce19a606659163The Android Open Source Project        clientID = pParamInfo->content.ctrlDataRateClassID;
78264064216a8433360745f69edddce19a606659163The Android Open Source Project        /* always save the wanted configuration , even when not enabled */
78364064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->configuredClientRateID = clientID;
78464064216a8433360745f69edddce19a606659163The Android Open Source Project
78564064216a8433360745f69edddce19a606659163The Android Open Source Project        if (clientID == pCtrlData->currClientRateID)
78664064216a8433360745f69edddce19a606659163The Android Open Source Project        {
78764064216a8433360745f69edddce19a606659163The Android Open Source Project            /* Do nothing - already configured */
78864064216a8433360745f69edddce19a606659163The Android Open Source Project            break;
78964064216a8433360745f69edddce19a606659163The Android Open Source Project        }
79064064216a8433360745f69edddce19a606659163The Android Open Source Project        else
79164064216a8433360745f69edddce19a606659163The Android Open Source Project        {
79264064216a8433360745f69edddce19a606659163The Android Open Source Project            if (TRUE == pCtrlData->bIsClassAvailable[clientID])
79364064216a8433360745f69edddce19a606659163The Android Open Source Project            {
79464064216a8433360745f69edddce19a606659163The Android Open Source Project                /* use the new clientID + reset rateAdaptation tables */
79564064216a8433360745f69edddce19a606659163The Android Open Source Project                pCtrlData->currClientRateID = clientID;
79664064216a8433360745f69edddce19a606659163The Android Open Source Project                selectRateTable(pCtrlData, pCtrlData->ctrlDataCurrentRateMask);
79764064216a8433360745f69edddce19a606659163The Android Open Source Project                rateAdaptation_buildRateMapTable(pCtrlData->pRateAdaptation,
79864064216a8433360745f69edddce19a606659163The Android Open Source Project                                                     pCtrlData->ctrlDataCurrentRateTable,
79964064216a8433360745f69edddce19a606659163The Android Open Source Project                                                     pCtrlData->ctrlDataCurrentRateMask,
80064064216a8433360745f69edddce19a606659163The Android Open Source Project                                                     pCtrlData->currClientRateMask[pCtrlData->currClientRateID],
80164064216a8433360745f69edddce19a606659163The Android Open Source Project                                                     pCtrlData->ctrlDataCurrentModulationType,
80264064216a8433360745f69edddce19a606659163The Android Open Source Project                                                     pCtrlData->ctrlDataCerruentFourXstate,
80364064216a8433360745f69edddce19a606659163The Android Open Source Project                                                     pCtrlData->ctrlDataCurrentBssType);
80464064216a8433360745f69edddce19a606659163The Android Open Source Project                break;
80564064216a8433360745f69edddce19a606659163The Android Open Source Project
80664064216a8433360745f69edddce19a606659163The Android Open Source Project            }
80764064216a8433360745f69edddce19a606659163The Android Open Source Project            else
80864064216a8433360745f69edddce19a606659163The Android Open Source Project            {
80964064216a8433360745f69edddce19a606659163The Android Open Source Project                /* The class could not be configured due to no rate support - don't use it */
81064064216a8433360745f69edddce19a606659163The Android Open Source Project                WLAN_REPORT_ERROR(pCtrlData->hReport,CTRL_DATA_MODULE_LOG,
81164064216a8433360745f69edddce19a606659163The Android Open Source Project                    ("%s: Can't enable rate class ID %d\n",__FUNCTION__,clientID));
81264064216a8433360745f69edddce19a606659163The Android Open Source Project                break;
81364064216a8433360745f69edddce19a606659163The Android Open Source Project            }
81464064216a8433360745f69edddce19a606659163The Android Open Source Project        }
81564064216a8433360745f69edddce19a606659163The Android Open Source Project
81664064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_NEXT_RATE_MASK_FOR_CLIENT:
81764064216a8433360745f69edddce19a606659163The Android Open Source Project        /* configure the next rate mask to be used for a specific client on the next connection */
81864064216a8433360745f69edddce19a606659163The Android Open Source Project        /* NOTE : changing USER_RATE_CLASS configuration is not advisable */
81964064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->nextClientRateMask[pParamInfo->content.ctrlDataRateClassMask.clientID] =
82064064216a8433360745f69edddce19a606659163The Android Open Source Project            pParamInfo->content.ctrlDataRateClassMask.clientRateMask;
82164064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
82264064216a8433360745f69edddce19a606659163The Android Open Source Project
82364064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_FOUR_X_CURRRENT_STATUS_PARAM:
82464064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef SUPPORT_4X
82564064216a8433360745f69edddce19a606659163The Android Open Source Project        if((pCtrlData->ctrlDataFourXEnable == TRUE) &&
82664064216a8433360745f69edddce19a606659163The Android Open Source Project           (pCtrlData->ctrlDataCurrentBssType == BSS_INFRASTRUCTURE))
82764064216a8433360745f69edddce19a606659163The Android Open Source Project            pCtrlData->ctrlDataCerruentFourXstate = pParamInfo->content.ctrlDataCerruentFourXstate;
82864064216a8433360745f69edddce19a606659163The Android Open Source Project        else
82964064216a8433360745f69edddce19a606659163The Android Open Source Project            pCtrlData->ctrlDataCerruentFourXstate = FALSE;
83064064216a8433360745f69edddce19a606659163The Android Open Source Project#else
83164064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->ctrlDataCerruentFourXstate = FALSE;
83264064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
83364064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
83464064216a8433360745f69edddce19a606659163The Android Open Source Project
83564064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CURRENT_BSSID_PARAM:
83664064216a8433360745f69edddce19a606659163The Android Open Source Project        MAC_COPY(pCtrlData->hOs, (&pCtrlData->ctrlDataCurrentBSSID),
83764064216a8433360745f69edddce19a606659163The Android Open Source Project            (&pParamInfo->content.ctrlDataCurrentBSSID));
83864064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
83964064216a8433360745f69edddce19a606659163The Android Open Source Project
84064064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CURRENT_BSS_TYPE_PARAM:
84164064216a8433360745f69edddce19a606659163The Android Open Source Project        if( pParamInfo->content.ctrlDataCurrentBssType != BSS_INFRASTRUCTURE &&
84264064216a8433360745f69edddce19a606659163The Android Open Source Project            pParamInfo->content.ctrlDataCurrentBssType != BSS_INDEPENDENT )
84364064216a8433360745f69edddce19a606659163The Android Open Source Project            return(PARAM_VALUE_NOT_VALID);
84464064216a8433360745f69edddce19a606659163The Android Open Source Project
84564064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->ctrlDataCurrentBssType = pParamInfo->content.ctrlDataCurrentBssType;
84664064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
84764064216a8433360745f69edddce19a606659163The Android Open Source Project
84864064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CURRENT_MODULATION_TYPE_PARAM:
84964064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->ctrlDataCurrentModulationType = pParamInfo->content.ctrlDataCurrentModulationType;
85064064216a8433360745f69edddce19a606659163The Android Open Source Project        /* update rate modulatin table for Rate adaptation algorithm */
85164064216a8433360745f69edddce19a606659163The Android Open Source Project
85264064216a8433360745f69edddce19a606659163The Android Open Source Project        rateAdaptation_updateModulation(pCtrlData->pRateAdaptation,
85364064216a8433360745f69edddce19a606659163The Android Open Source Project                                        pCtrlData->ctrlDataCurrentModulationType,
85464064216a8433360745f69edddce19a606659163The Android Open Source Project                                        pCtrlData->ctrlDataCurrentBssType);
85564064216a8433360745f69edddce19a606659163The Android Open Source Project
85664064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
85764064216a8433360745f69edddce19a606659163The Android Open Source Project
85864064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CURRENT_PREAMBLE_TYPE_PARAM:
85964064216a8433360745f69edddce19a606659163The Android Open Source Project        if( pParamInfo->content.ctrlDataCurrentPreambleType != PREAMBLE_LONG &&
86064064216a8433360745f69edddce19a606659163The Android Open Source Project            pParamInfo->content.ctrlDataCurrentPreambleType != PREAMBLE_SHORT )
86164064216a8433360745f69edddce19a606659163The Android Open Source Project            return(PARAM_VALUE_NOT_VALID);
86264064216a8433360745f69edddce19a606659163The Android Open Source Project
86364064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->ctrlDataCurrentPreambleType = pParamInfo->content.ctrlDataCurrentPreambleType;
86464064216a8433360745f69edddce19a606659163The Android Open Source Project
86564064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
86664064216a8433360745f69edddce19a606659163The Android Open Source Project
86764064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_MAC_ADDRESS:
86864064216a8433360745f69edddce19a606659163The Android Open Source Project        {
86964064216a8433360745f69edddce19a606659163The Android Open Source Project            int status;
87064064216a8433360745f69edddce19a606659163The Android Open Source Project			status = whalCtrl_SetMacAddress(pCtrlData->hWhalCtrl, &pParamInfo->content.ctrlDataDeviceMacAddress);
87164064216a8433360745f69edddce19a606659163The Android Open Source Project			WLAN_REPORT_ERROR(pCtrlData->hReport, TX_DATA_MODULE_LOG,
87264064216a8433360745f69edddce19a606659163The Android Open Source Project							  (" ctrlData_setParam() : MAC ADDRESS SET STATUS: %d \n",status));
87364064216a8433360745f69edddce19a606659163The Android Open Source Project			if(status == OK)
87464064216a8433360745f69edddce19a606659163The Android Open Source Project				MAC_COPY(pCtrlData->hOs, (&pCtrlData->ctrlDataDeviceMacAddress),
87564064216a8433360745f69edddce19a606659163The Android Open Source Project						 (&pParamInfo->content.ctrlDataDeviceMacAddress));
87664064216a8433360745f69edddce19a606659163The Android Open Source Project
87764064216a8433360745f69edddce19a606659163The Android Open Source Project        }
87864064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
87964064216a8433360745f69edddce19a606659163The Android Open Source Project
88064064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CURRENT_BASIC_RATE_PARAM:
88164064216a8433360745f69edddce19a606659163The Android Open Source Project
88264064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->ctrlDataCurrentBasicRate = pParamInfo->content.ctrlDataCurrentBasicRate;
88364064216a8433360745f69edddce19a606659163The Android Open Source Project        /* for Basic Rate Set use the USER_RATE_CLASS (otherwise we could get 0 rates) */
88464064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->ctrlDataBasicRateBitMask = rateAdaptation_Utils_buildRateBitMap(pCtrlData->pRateAdaptation,
88564064216a8433360745f69edddce19a606659163The Android Open Source Project                                                                                   pCtrlData->ctrlDataCurrentRateTable,
88664064216a8433360745f69edddce19a606659163The Android Open Source Project                                                                                   pCtrlData->ctrlDataCurrentBasicRate,
88764064216a8433360745f69edddce19a606659163The Android Open Source Project                                                                                   pCtrlData->ctrlDataCurrentRateMask,
88864064216a8433360745f69edddce19a606659163The Android Open Source Project                                                                                   pCtrlData->currClientRateMask[USER_RATE_CLASS]);
88964064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
89064064216a8433360745f69edddce19a606659163The Android Open Source Project
89164064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CURRENT_BASIC_RATE_MASK_PARAM:
89264064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->ctrlDataBasicRateBitMask = pParamInfo->content.ctrlDataBasicRateBitMask;
89364064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
89464064216a8433360745f69edddce19a606659163The Android Open Source Project
89564064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CURRENT_BASIC_MODULATION_PARAM:
89664064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->ctrlDataCurrentBasicModulationType = pParamInfo->content.ctrlDataCurrentBasicModulationType;
89764064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
89864064216a8433360745f69edddce19a606659163The Android Open Source Project
89964064216a8433360745f69edddce19a606659163The Android Open Source Project
90064064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CURRENT_SUPPORTED_RATE_MASK_PARAM:
90164064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->ctrlDataCurrentRateMask = pParamInfo->content.ctrlDataCurrentRateMask;
90264064216a8433360745f69edddce19a606659163The Android Open Source Project        selectRateTable(pCtrlData, pCtrlData->ctrlDataCurrentRateMask);
90364064216a8433360745f69edddce19a606659163The Android Open Source Project        rateAdaptation_buildRateMapTable(pCtrlData->pRateAdaptation,
90464064216a8433360745f69edddce19a606659163The Android Open Source Project                                         pCtrlData->ctrlDataCurrentRateTable,
90564064216a8433360745f69edddce19a606659163The Android Open Source Project                                         pCtrlData->ctrlDataCurrentRateMask,
90664064216a8433360745f69edddce19a606659163The Android Open Source Project                                         pCtrlData->currClientRateMask[pCtrlData->currClientRateID],
90764064216a8433360745f69edddce19a606659163The Android Open Source Project                                         (modulationType_e)pCtrlData->ctrlDataCerruentFourXstate,
90864064216a8433360745f69edddce19a606659163The Android Open Source Project                                         pCtrlData->ctrlDataCurrentModulationType,
90964064216a8433360745f69edddce19a606659163The Android Open Source Project                                         pCtrlData->ctrlDataCurrentBssType);
91064064216a8433360745f69edddce19a606659163The Android Open Source Project
91164064216a8433360745f69edddce19a606659163The Android Open Source Project
91264064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
91364064216a8433360745f69edddce19a606659163The Android Open Source Project
91464064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CURRENT_ACTIVE_RATE_PARAM:
91564064216a8433360745f69edddce19a606659163The Android Open Source Project        rateAdaptation_setCurrentRate(pCtrlData->pRateAdaptation, pParamInfo->content.ctrlDataCurrentActiveRate);
91664064216a8433360745f69edddce19a606659163The Android Open Source Project
91764064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
91864064216a8433360745f69edddce19a606659163The Android Open Source Project
91964064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_TSRS_PARAM:
92064064216a8433360745f69edddce19a606659163The Android Open Source Project        ctrlData_storeTSRateSet(pCtrlData, &pParamInfo->content.txDataQosParams);
92164064216a8433360745f69edddce19a606659163The Android Open Source Project
92264064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
92364064216a8433360745f69edddce19a606659163The Android Open Source Project
92464064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CURRENT_PROTECTION_STATUS_PARAM:
92564064216a8433360745f69edddce19a606659163The Android Open Source Project        if (pCtrlData->ctrlDataProtectionEnabled != pParamInfo->content.ctrlDataProtectionEnabled)
92664064216a8433360745f69edddce19a606659163The Android Open Source Project        {
92764064216a8433360745f69edddce19a606659163The Android Open Source Project            pCtrlData->ctrlDataProtectionEnabled = pParamInfo->content.ctrlDataProtectionEnabled;
92864064216a8433360745f69edddce19a606659163The Android Open Source Project
92964064216a8433360745f69edddce19a606659163The Android Open Source Project            /* set indication also to TNET */
93064064216a8433360745f69edddce19a606659163The Android Open Source Project            param.paramType = HAL_CTRL_CTS_TO_SELF_PARAM;
93164064216a8433360745f69edddce19a606659163The Android Open Source Project            if(pCtrlData->ctrlDataProtectionEnabled == TRUE)
93264064216a8433360745f69edddce19a606659163The Android Open Source Project                param.content.halCtrlCtsToSelf = CTS_TO_SELF_ENABLE;
93364064216a8433360745f69edddce19a606659163The Android Open Source Project            else
93464064216a8433360745f69edddce19a606659163The Android Open Source Project                param.content.halCtrlCtsToSelf = CTS_TO_SELF_DISABLE;
93564064216a8433360745f69edddce19a606659163The Android Open Source Project
93664064216a8433360745f69edddce19a606659163The Android Open Source Project            whalCtrl_SetParam(pCtrlData->hWhalCtrl,&param);
93764064216a8433360745f69edddce19a606659163The Android Open Source Project
93864064216a8433360745f69edddce19a606659163The Android Open Source Project
93964064216a8433360745f69edddce19a606659163The Android Open Source Project            /* In case of using protection fragmentation should be disabled */
94064064216a8433360745f69edddce19a606659163The Android Open Source Project            param.paramType = HAL_CTRL_FRAG_THRESHOLD_PARAM;
94164064216a8433360745f69edddce19a606659163The Android Open Source Project            if(pCtrlData->ctrlDataProtectionEnabled == TRUE)
94264064216a8433360745f69edddce19a606659163The Android Open Source Project            {
94364064216a8433360745f69edddce19a606659163The Android Open Source Project                /* save last non-protection mode fragmentation threshold */
94464064216a8433360745f69edddce19a606659163The Android Open Source Project                whalCtrl_GetParam(pCtrlData->hWhalCtrl,&param);
94564064216a8433360745f69edddce19a606659163The Android Open Source Project                pCtrlData->lastFragmentThreshold = param.content.halCtrlFragThreshold;
94664064216a8433360745f69edddce19a606659163The Android Open Source Project                /* set fragmentation threshold to max (disable) */
94764064216a8433360745f69edddce19a606659163The Android Open Source Project                param.content.halCtrlFragThreshold = HAL_CTRL_FRAG_THRESHOLD_MAX;
94864064216a8433360745f69edddce19a606659163The Android Open Source Project            }
94964064216a8433360745f69edddce19a606659163The Android Open Source Project            else
95064064216a8433360745f69edddce19a606659163The Android Open Source Project                param.content.halCtrlFragThreshold = pCtrlData->lastFragmentThreshold;
95164064216a8433360745f69edddce19a606659163The Android Open Source Project
95264064216a8433360745f69edddce19a606659163The Android Open Source Project            whalCtrl_SetParam(pCtrlData->hWhalCtrl,&param);
95364064216a8433360745f69edddce19a606659163The Android Open Source Project        }
95464064216a8433360745f69edddce19a606659163The Android Open Source Project
95564064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
95664064216a8433360745f69edddce19a606659163The Android Open Source Project
95764064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CURRENT_IBSS_PROTECTION_PARAM:
95864064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->ctrlDataIbssProtectionType = pParamInfo->content.ctrlDataIbssProtecionType;
95964064216a8433360745f69edddce19a606659163The Android Open Source Project
96064064216a8433360745f69edddce19a606659163The Android Open Source Project        /* set indication also to TNET */
96164064216a8433360745f69edddce19a606659163The Android Open Source Project        param.paramType = HAL_CTRL_CTS_TO_SELF_PARAM;
96264064216a8433360745f69edddce19a606659163The Android Open Source Project        if(pCtrlData->ctrlDataIbssProtectionType != ERP_PROTECTION_NONE)
96364064216a8433360745f69edddce19a606659163The Android Open Source Project            param.content.halCtrlCtsToSelf = CTS_TO_SELF_ENABLE;
96464064216a8433360745f69edddce19a606659163The Android Open Source Project        else
96564064216a8433360745f69edddce19a606659163The Android Open Source Project            param.content.halCtrlCtsToSelf = CTS_TO_SELF_DISABLE;
96664064216a8433360745f69edddce19a606659163The Android Open Source Project
96764064216a8433360745f69edddce19a606659163The Android Open Source Project        whalCtrl_SetParam(pCtrlData->hWhalCtrl,&param);
96864064216a8433360745f69edddce19a606659163The Android Open Source Project
96964064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
97064064216a8433360745f69edddce19a606659163The Android Open Source Project
97164064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CURRENT_RTS_CTS_STATUS_PARAM:
97264064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->ctrlDataRtsCtsStatus = pParamInfo->content.ctrlDataRtsCtsStatus;
97364064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
97464064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CLSFR_TYPE:
97564064216a8433360745f69edddce19a606659163The Android Open Source Project        ctrlData_clsfrSetClsfrType (pCtrlData->pClsfr,pParamInfo->content.ctrlDataClsfrType);
97664064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
97764064216a8433360745f69edddce19a606659163The Android Open Source Project
97864064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CLSFR_CONFIG:
97964064216a8433360745f69edddce19a606659163The Android Open Source Project            Classifier_InsertClsfrEntry(pCtrlData->pClsfr, 1, &pParamInfo->content.ctrlDataClsfrInsertTable);
98064064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
98164064216a8433360745f69edddce19a606659163The Android Open Source Project
98264064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_CLSFR_REMOVE_ENTRY:
98364064216a8433360745f69edddce19a606659163The Android Open Source Project         classifier_RemoveClsfrEntry(pCtrlData->pClsfr, &pParamInfo->content.ctrlDataClsfrInsertTable);
98464064216a8433360745f69edddce19a606659163The Android Open Source Project       break;
98564064216a8433360745f69edddce19a606659163The Android Open Source Project
98664064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_GET_USER_PRIORITY_OF_STREAM:
98764064216a8433360745f69edddce19a606659163The Android Open Source Project       Classifier_deriveUserPriorityFromStream (pCtrlData->pClsfr,&pParamInfo->content.ctrlDataUpOfStream);
98864064216a8433360745f69edddce19a606659163The Android Open Source Project       break;
98964064216a8433360745f69edddce19a606659163The Android Open Source Project            /*
99064064216a8433360745f69edddce19a606659163The Android Open Source Project         * NOTE: currently supporting only ONE txRatePolicy!!!!!!!!!
99164064216a8433360745f69edddce19a606659163The Android Open Source Project         */
99264064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_SHORT_RETRY_LIMIT_PARAM:
99364064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->ctrlDataTxRatePolicy.rateClass[USER_RATE_CLASS].shortRetryLimit = pParamInfo->content.TxRatePolicy.rateClass[USER_RATE_CLASS].shortRetryLimit;
99464064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
99564064216a8433360745f69edddce19a606659163The Android Open Source Project
99664064216a8433360745f69edddce19a606659163The Android Open Source Project        /*
99764064216a8433360745f69edddce19a606659163The Android Open Source Project         * NOTE: currently supporting only ONE txRatePolicy!!!!!!!!!
99864064216a8433360745f69edddce19a606659163The Android Open Source Project         */
99964064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_LONG_RETRY_LIMIT_PARAM:
100064064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->ctrlDataTxRatePolicy.rateClass[USER_RATE_CLASS].longRetryLimit = pParamInfo->content.TxRatePolicy.rateClass[USER_RATE_CLASS].longRetryLimit;
100164064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
100264064216a8433360745f69edddce19a606659163The Android Open Source Project
100364064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_TOGGLE_TRAFFIC_INTENSITY_EVENTS:
100464064216a8433360745f69edddce19a606659163The Android Open Source Project
100564064216a8433360745f69edddce19a606659163The Android Open Source Project            /* Enable or disable events according to flag */
100664064216a8433360745f69edddce19a606659163The Android Open Source Project            ctrlData_ToggleTrafficIntensityNotification (pCtrlData, (BOOL)pParamInfo->content.ctrlDataTrafficIntensityEventsFlag);
100764064216a8433360745f69edddce19a606659163The Android Open Source Project
100864064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
100964064216a8433360745f69edddce19a606659163The Android Open Source Project
101064064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_TRAFFIC_INTENSITY_THRESHOLD:
101164064216a8433360745f69edddce19a606659163The Android Open Source Project        {
101264064216a8433360745f69edddce19a606659163The Android Open Source Project            OS_802_11_TRAFFIC_INTENSITY_THRESHOLD_PARAMS *localParams = &pParamInfo->content.ctrlDataTrafficIntensityThresholds;
101364064216a8433360745f69edddce19a606659163The Android Open Source Project            BOOL savedEnableFlag;   /* Used to save previous enable/disable flag - before stopping/starting events for change in params */
101464064216a8433360745f69edddce19a606659163The Android Open Source Project
101564064216a8433360745f69edddce19a606659163The Android Open Source Project            /* If any of the parameters has changed, we need to re-register with the Traffic Monitor */
101664064216a8433360745f69edddce19a606659163The Android Open Source Project            if ((localParams->uHighThreshold != pCtrlData->ctrlDataTrafficIntensityThresholds.uHighThreshold) ||
101764064216a8433360745f69edddce19a606659163The Android Open Source Project                (localParams->uLowThreshold != pCtrlData->ctrlDataTrafficIntensityThresholds.uLowThreshold) ||
101864064216a8433360745f69edddce19a606659163The Android Open Source Project                (localParams->TestInterval != pCtrlData->ctrlDataTrafficIntensityThresholds.TestInterval))
101964064216a8433360745f69edddce19a606659163The Android Open Source Project            {
102064064216a8433360745f69edddce19a606659163The Android Open Source Project
102164064216a8433360745f69edddce19a606659163The Android Open Source Project                os_memoryCopy(pCtrlData->hOs, &pCtrlData->ctrlDataTrafficIntensityThresholds,
102264064216a8433360745f69edddce19a606659163The Android Open Source Project                                localParams,
102364064216a8433360745f69edddce19a606659163The Android Open Source Project                                sizeof(OS_802_11_TRAFFIC_INTENSITY_THRESHOLD_PARAMS));
102464064216a8433360745f69edddce19a606659163The Android Open Source Project
102564064216a8433360745f69edddce19a606659163The Android Open Source Project                savedEnableFlag = pCtrlData->ctrlDataTrafficIntensityEventsEnabled;
102664064216a8433360745f69edddce19a606659163The Android Open Source Project
102764064216a8433360745f69edddce19a606659163The Android Open Source Project                /* Turn off traffic events */
102864064216a8433360745f69edddce19a606659163The Android Open Source Project                ctrlData_ToggleTrafficIntensityNotification (pCtrlData, FALSE);
102964064216a8433360745f69edddce19a606659163The Android Open Source Project
103064064216a8433360745f69edddce19a606659163The Android Open Source Project                /* Unregister current events */
103164064216a8433360745f69edddce19a606659163The Android Open Source Project                ctrlData_UnregisterTrafficIntensityEvents (pCtrlData);
103264064216a8433360745f69edddce19a606659163The Android Open Source Project
103364064216a8433360745f69edddce19a606659163The Android Open Source Project                /* And re-register with new thresholds */
103464064216a8433360745f69edddce19a606659163The Android Open Source Project                ctrlData_RegisterTrafficIntensityEvents (pCtrlData);
103564064216a8433360745f69edddce19a606659163The Android Open Source Project
103664064216a8433360745f69edddce19a606659163The Android Open Source Project                /* Enable events if they were enabled  */
103764064216a8433360745f69edddce19a606659163The Android Open Source Project                ctrlData_ToggleTrafficIntensityNotification (pCtrlData, savedEnableFlag);
103864064216a8433360745f69edddce19a606659163The Android Open Source Project
103964064216a8433360745f69edddce19a606659163The Android Open Source Project            }
104064064216a8433360745f69edddce19a606659163The Android Open Source Project        }
104164064216a8433360745f69edddce19a606659163The Android Open Source Project
104264064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
104364064216a8433360745f69edddce19a606659163The Android Open Source Project
104464064216a8433360745f69edddce19a606659163The Android Open Source Project    default:
104564064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_ERROR(pCtrlData->hReport, TX_DATA_MODULE_LOG,
104664064216a8433360745f69edddce19a606659163The Android Open Source Project            (" ctrlData_setParam() : PARAMETER NOT SUPPORTED \n"));
104764064216a8433360745f69edddce19a606659163The Android Open Source Project        return (PARAM_NOT_SUPPORTED);
104864064216a8433360745f69edddce19a606659163The Android Open Source Project/*        break; - unrechable */
104964064216a8433360745f69edddce19a606659163The Android Open Source Project    }
105064064216a8433360745f69edddce19a606659163The Android Open Source Project
105164064216a8433360745f69edddce19a606659163The Android Open Source Project    return (OK);
105264064216a8433360745f69edddce19a606659163The Android Open Source Project}
105364064216a8433360745f69edddce19a606659163The Android Open Source Project
105464064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************
105564064216a8433360745f69edddce19a606659163The Android Open Source Project*                           ctrlData_getTspecsRateThresholds                                   *
105664064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************
105764064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:  The function retrieves the current low/high phy rate thresholds.
105864064216a8433360745f69edddce19a606659163The Android Open Source Project*
105964064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS:       hCtrlData - the object
106064064216a8433360745f69edddce19a606659163The Android Open Source Project*               uAC       - The AC number.
106164064216a8433360745f69edddce19a606659163The Android Open Source Project*
106264064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT:       pHighThreshold - The current phy rate high threshold
106364064216a8433360745f69edddce19a606659163The Android Open Source Project*               pHighThreshold - The current phy rate low threshold
106464064216a8433360745f69edddce19a606659163The Android Open Source Project*
106564064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS:
106664064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/
106764064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid ctrlData_getTspecsRateThresholds(TI_HANDLE hCtrlData, UINT8 uAC, UINT32* pHighThreshold, UINT32* pLowThreshold)
106864064216a8433360745f69edddce19a606659163The Android Open Source Project{
106964064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
107064064216a8433360745f69edddce19a606659163The Android Open Source Project    rateAdaptation_t* pRateAdaptation = (rateAdaptation_t*)pCtrlData->pRateAdaptation;
107164064216a8433360745f69edddce19a606659163The Android Open Source Project
107264064216a8433360745f69edddce19a606659163The Android Open Source Project    *pHighThreshold = hostToUtilityRate(RateNumberToHost(pRateAdaptation->tspecsRateParameters[uAC].highRateThreshold));
107364064216a8433360745f69edddce19a606659163The Android Open Source Project    *pLowThreshold = hostToUtilityRate(RateNumberToHost(pRateAdaptation->tspecsRateParameters[uAC].lowRateThreshold));
107464064216a8433360745f69edddce19a606659163The Android Open Source Project}
107564064216a8433360745f69edddce19a606659163The Android Open Source Project
107664064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************
107764064216a8433360745f69edddce19a606659163The Android Open Source Project*                           selectRateTable                                *
107864064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************
107964064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:
108064064216a8433360745f69edddce19a606659163The Android Open Source Project*
108164064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS:       hCtrlData - the object
108264064216a8433360745f69edddce19a606659163The Android Open Source Project*
108364064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT:
108464064216a8433360745f69edddce19a606659163The Android Open Source Project*
108564064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS:
108664064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/
108764064216a8433360745f69edddce19a606659163The Android Open Source Project
108864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void selectRateTable(TI_HANDLE hCtrlData, UINT32 rateMask)
108964064216a8433360745f69edddce19a606659163The Android Open Source Project{
109064064216a8433360745f69edddce19a606659163The Android Open Source Project    paramInfo_t param;
109164064216a8433360745f69edddce19a606659163The Android Open Source Project    rate_e      rate;
109264064216a8433360745f69edddce19a606659163The Android Open Source Project
109364064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
109464064216a8433360745f69edddce19a606659163The Android Open Source Project
109564064216a8433360745f69edddce19a606659163The Android Open Source Project    rate = getMaxRatefromBitmap(rateMask);
109664064216a8433360745f69edddce19a606659163The Android Open Source Project
109764064216a8433360745f69edddce19a606659163The Android Open Source Project    param.paramType = SITE_MGR_OPERATIONAL_MODE_PARAM;
109864064216a8433360745f69edddce19a606659163The Android Open Source Project    siteMgr_getParam(pCtrlData->hSiteMgr, &param);
109964064216a8433360745f69edddce19a606659163The Android Open Source Project
110064064216a8433360745f69edddce19a606659163The Android Open Source Project    switch(param.content.siteMgrDot11OperationalMode)
110164064216a8433360745f69edddce19a606659163The Android Open Source Project    {
110264064216a8433360745f69edddce19a606659163The Android Open Source Project        case DOT11_B_MODE:
110364064216a8433360745f69edddce19a606659163The Android Open Source Project        {
110464064216a8433360745f69edddce19a606659163The Android Open Source Project            if(rate == DRV_RATE_22M)
110564064216a8433360745f69edddce19a606659163The Android Open Source Project            {
110664064216a8433360745f69edddce19a606659163The Android Open Source Project                pCtrlData->ctrlDataCurrentRateTable = &pCtrlData->ctrlDataRateTables.ctrlDataPbccRateTable;
110764064216a8433360745f69edddce19a606659163The Android Open Source Project                pCtrlData->pCurrPolicyClassRatesArray = pCtrlData->policyClassRatesArrayPbcc;
110864064216a8433360745f69edddce19a606659163The Android Open Source Project            }
110964064216a8433360745f69edddce19a606659163The Android Open Source Project            else
111064064216a8433360745f69edddce19a606659163The Android Open Source Project            {
111164064216a8433360745f69edddce19a606659163The Android Open Source Project                pCtrlData->ctrlDataCurrentRateTable = &pCtrlData->ctrlDataRateTables.ctrlDataCckRateTable;
111264064216a8433360745f69edddce19a606659163The Android Open Source Project                pCtrlData->pCurrPolicyClassRatesArray = pCtrlData->policyClassRatesArrayCck;
111364064216a8433360745f69edddce19a606659163The Android Open Source Project
111464064216a8433360745f69edddce19a606659163The Android Open Source Project            }
111564064216a8433360745f69edddce19a606659163The Android Open Source Project        }
111664064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
111764064216a8433360745f69edddce19a606659163The Android Open Source Project
111864064216a8433360745f69edddce19a606659163The Android Open Source Project        case DOT11_G_MODE:
111964064216a8433360745f69edddce19a606659163The Android Open Source Project            if( (rate == DRV_RATE_22M) ||
112064064216a8433360745f69edddce19a606659163The Android Open Source Project                (rate == DRV_RATE_11M) ||
112164064216a8433360745f69edddce19a606659163The Android Open Source Project                (rate == DRV_RATE_5_5M)||
112264064216a8433360745f69edddce19a606659163The Android Open Source Project                (rate == DRV_RATE_2M)  ||
112364064216a8433360745f69edddce19a606659163The Android Open Source Project                (rate == DRV_RATE_1M)    )
112464064216a8433360745f69edddce19a606659163The Android Open Source Project            {
112564064216a8433360745f69edddce19a606659163The Android Open Source Project                pCtrlData->ctrlDataCurrentRateTable = &pCtrlData->ctrlDataRateTables.ctrlDataPbccRateTable;
112664064216a8433360745f69edddce19a606659163The Android Open Source Project                pCtrlData->pCurrPolicyClassRatesArray = pCtrlData->policyClassRatesArrayPbcc;
112764064216a8433360745f69edddce19a606659163The Android Open Source Project            }
112864064216a8433360745f69edddce19a606659163The Android Open Source Project            else
112964064216a8433360745f69edddce19a606659163The Android Open Source Project            {
113064064216a8433360745f69edddce19a606659163The Android Open Source Project                pCtrlData->ctrlDataCurrentRateTable = &pCtrlData->ctrlDataRateTables.ctrlDataOfdmRateTable ;
113164064216a8433360745f69edddce19a606659163The Android Open Source Project                pCtrlData->pCurrPolicyClassRatesArray = pCtrlData->policyClassRatesArrayOfdm;
113264064216a8433360745f69edddce19a606659163The Android Open Source Project            }
113364064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
113464064216a8433360745f69edddce19a606659163The Android Open Source Project
113564064216a8433360745f69edddce19a606659163The Android Open Source Project        case DOT11_A_MODE:
113664064216a8433360745f69edddce19a606659163The Android Open Source Project            pCtrlData->ctrlDataCurrentRateTable = &pCtrlData->ctrlDataRateTables.ctrlDataOfdmARateTable;
113764064216a8433360745f69edddce19a606659163The Android Open Source Project            pCtrlData->pCurrPolicyClassRatesArray = pCtrlData->policyClassRatesArrayOfdmA;
113864064216a8433360745f69edddce19a606659163The Android Open Source Project
113964064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
114064064216a8433360745f69edddce19a606659163The Android Open Source Project        case DOT11_DUAL_MODE:
114164064216a8433360745f69edddce19a606659163The Android Open Source Project        case DOT11_MAX_MODE:
114264064216a8433360745f69edddce19a606659163The Android Open Source Project            WLAN_REPORT_ERROR(pCtrlData->hReport,CTRL_DATA_MODULE_LOG,
114364064216a8433360745f69edddce19a606659163The Android Open Source Project                ("%s ctrlDataCurrentRateTable not configured !!!",__FUNCTION__));
114464064216a8433360745f69edddce19a606659163The Android Open Source Project            break;
114564064216a8433360745f69edddce19a606659163The Android Open Source Project
114664064216a8433360745f69edddce19a606659163The Android Open Source Project    }
114764064216a8433360745f69edddce19a606659163The Android Open Source Project
114864064216a8433360745f69edddce19a606659163The Android Open Source Project
114964064216a8433360745f69edddce19a606659163The Android Open Source Project
115064064216a8433360745f69edddce19a606659163The Android Open Source Project}
115164064216a8433360745f69edddce19a606659163The Android Open Source Project
115264064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************
115364064216a8433360745f69edddce19a606659163The Android Open Source Project*                           ctrlData_start                                 *
115464064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************
115564064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:  This function start the link control algorithms. It start
115664064216a8433360745f69edddce19a606659163The Android Open Source Project*               each algorithm (Rate Adaptation) if needed.
115764064216a8433360745f69edddce19a606659163The Android Open Source Project*
115864064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS:       hCtrlData - the object
115964064216a8433360745f69edddce19a606659163The Android Open Source Project*
116064064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT:
116164064216a8433360745f69edddce19a606659163The Android Open Source Project*
116264064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS:      OK
116364064216a8433360745f69edddce19a606659163The Android Open Source Project*               NOK
116464064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/
116564064216a8433360745f69edddce19a606659163The Android Open Source Project
116664064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS ctrlData_start(TI_HANDLE hCtrlData)
116764064216a8433360745f69edddce19a606659163The Android Open Source Project{
116864064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
116964064216a8433360745f69edddce19a606659163The Android Open Source Project
117064064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataStartStoplinkControlAlg = TRUE;
117164064216a8433360745f69edddce19a606659163The Android Open Source Project
117264064216a8433360745f69edddce19a606659163The Android Open Source Project
117364064216a8433360745f69edddce19a606659163The Android Open Source Project    /* start Rate Adaptation if needed */
117464064216a8433360745f69edddce19a606659163The Android Open Source Project    if(pCtrlData->ctrlDataRateControlEnable == TRUE)
117564064216a8433360745f69edddce19a606659163The Android Open Source Project    {
117664064216a8433360745f69edddce19a606659163The Android Open Source Project        rateAdaptation_start(pCtrlData->pRateAdaptation);
117764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
117864064216a8433360745f69edddce19a606659163The Android Open Source Project
117964064216a8433360745f69edddce19a606659163The Android Open Source Project
118064064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
118164064216a8433360745f69edddce19a606659163The Android Open Source Project        (" ctrlData_start() : Link control algorithms started successfully \n"));
118264064216a8433360745f69edddce19a606659163The Android Open Source Project
118364064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
118464064216a8433360745f69edddce19a606659163The Android Open Source Project}
118564064216a8433360745f69edddce19a606659163The Android Open Source Project
118664064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************
118764064216a8433360745f69edddce19a606659163The Android Open Source Project*                           ctrlData_stop                                  *
118864064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************
118964064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:  This function stop the link control algorithms.
119064064216a8433360745f69edddce19a606659163The Android Open Source Project*
119164064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS:       hCtrlData - the object
119264064216a8433360745f69edddce19a606659163The Android Open Source Project*
119364064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT:
119464064216a8433360745f69edddce19a606659163The Android Open Source Project*
119564064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS:      OK
119664064216a8433360745f69edddce19a606659163The Android Open Source Project*               NOK
119764064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/
119864064216a8433360745f69edddce19a606659163The Android Open Source Project
119964064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS ctrlData_stop(TI_HANDLE hCtrlData)
120064064216a8433360745f69edddce19a606659163The Android Open Source Project{
120164064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
120264064216a8433360745f69edddce19a606659163The Android Open Source Project
120364064216a8433360745f69edddce19a606659163The Android Open Source Project    /* stop link control algorithm */
120464064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataStartStoplinkControlAlg = FALSE;
120564064216a8433360745f69edddce19a606659163The Android Open Source Project
120664064216a8433360745f69edddce19a606659163The Android Open Source Project    /* set modulation option to default value*/
120764064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataCurrentModulationType = DEF_CURRENT_MUDULATION_TYPE;
120864064216a8433360745f69edddce19a606659163The Android Open Source Project
120964064216a8433360745f69edddce19a606659163The Android Open Source Project    /* set Preamble length option to default value*/
121064064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataCurrentPreambleType = DEF_CURRENT_PREAMBLE;
121164064216a8433360745f69edddce19a606659163The Android Open Source Project
121264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* set mgmt rate to default value */
121364064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataCurrentBasicRate = DEF_BASIC_RATE;
121464064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataBasicRateBitMask = DEF_BASIC_RATE_MASK;
121564064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataCurrentBasicModulationType = DRV_MODULATION_QPSK;
121664064216a8433360745f69edddce19a606659163The Android Open Source Project
121764064216a8433360745f69edddce19a606659163The Android Open Source Project    os_memoryZero(pCtrlData->hOs,
121864064216a8433360745f69edddce19a606659163The Android Open Source Project                  &pCtrlData->tsrsParameters,
121964064216a8433360745f69edddce19a606659163The Android Open Source Project                  sizeof(pCtrlData->tsrsParameters));
122064064216a8433360745f69edddce19a606659163The Android Open Source Project
122164064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
122264064216a8433360745f69edddce19a606659163The Android Open Source Project        (" ctrlData_stop() : Link control algorithms stoped \n"));
122364064216a8433360745f69edddce19a606659163The Android Open Source Project
122464064216a8433360745f69edddce19a606659163The Android Open Source Project    rateAdaptation_stop(pCtrlData->pRateAdaptation);
122564064216a8433360745f69edddce19a606659163The Android Open Source Project
122664064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
122764064216a8433360745f69edddce19a606659163The Android Open Source Project}
122864064216a8433360745f69edddce19a606659163The Android Open Source Project
122964064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************
123064064216a8433360745f69edddce19a606659163The Android Open Source Project*                       ctrlData_receiveParamFromRx                        *
123164064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************
123264064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:  This function receive Msdu Rx parameters from the Rx data
123364064216a8433360745f69edddce19a606659163The Android Open Source Project*               module, update counters.
123464064216a8433360745f69edddce19a606659163The Android Open Source Project*
123564064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS:       hCtrlData - the object
123664064216a8433360745f69edddce19a606659163The Android Open Source Project*               pRxMsduInfo - Information about the receive msdu
123764064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT:
123864064216a8433360745f69edddce19a606659163The Android Open Source Project*
123964064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS:      OK
124064064216a8433360745f69edddce19a606659163The Android Open Source Project*               NOK
124164064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/
124264064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef SUPPORT_4X
124364064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS ctrlData_rxMsdu(TI_HANDLE         hCtrlData,
124464064216a8433360745f69edddce19a606659163The Android Open Source Project                          mem_MSDU_T        **pRxMsdu)
124564064216a8433360745f69edddce19a606659163The Android Open Source Project{
124664064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
124764064216a8433360745f69edddce19a606659163The Android Open Source Project
124864064216a8433360745f69edddce19a606659163The Android Open Source Project    if(pCtrlData->ctrlDataStartStoplinkControlAlg == FALSE)
124964064216a8433360745f69edddce19a606659163The Android Open Source Project        return OK;
125064064216a8433360745f69edddce19a606659163The Android Open Source Project
125164064216a8433360745f69edddce19a606659163The Android Open Source Project    if((pCtrlData->ctrlDataFourXEnable == TRUE) &&
125264064216a8433360745f69edddce19a606659163The Android Open Source Project       (pCtrlData->ctrlDataCurrentBssType == BSS_INFRASTRUCTURE))
125364064216a8433360745f69edddce19a606659163The Android Open Source Project    {
125464064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Call fourX function */
125564064216a8433360745f69edddce19a606659163The Android Open Source Project        if(fourX_rxMsdu(pCtrlData->pFourX, pRxMsdu) != OK)
125664064216a8433360745f69edddce19a606659163The Android Open Source Project        {
125764064216a8433360745f69edddce19a606659163The Android Open Source Project            WLAN_REPORT_ERROR(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
125864064216a8433360745f69edddce19a606659163The Android Open Source Project                (" failed in fourX_rxMsdu\n"));
125964064216a8433360745f69edddce19a606659163The Android Open Source Project            return NOK;
126064064216a8433360745f69edddce19a606659163The Android Open Source Project        }
126164064216a8433360745f69edddce19a606659163The Android Open Source Project    }
126264064216a8433360745f69edddce19a606659163The Android Open Source Project
126364064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
126464064216a8433360745f69edddce19a606659163The Android Open Source Project}
126564064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
126664064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************
126764064216a8433360745f69edddce19a606659163The Android Open Source Project*                       ctrlData_getTxAttributes                           *
126864064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************
126964064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:  This function set the transmited parameters for a
127064064216a8433360745f69edddce19a606659163The Android Open Source Project*               specific msdu
127164064216a8433360745f69edddce19a606659163The Android Open Source Project*
127264064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS:       hCtrlData - the object
127364064216a8433360745f69edddce19a606659163The Android Open Source Project*               txFlags - Information about the msdu
127464064216a8433360745f69edddce19a606659163The Android Open Source Project*
127564064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT:       pTxAttr - pointer to the tx parameters structure
127664064216a8433360745f69edddce19a606659163The Android Open Source Project*
127764064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS:      OK
127864064216a8433360745f69edddce19a606659163The Android Open Source Project*               NOK
127964064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/
128064064216a8433360745f69edddce19a606659163The Android Open Source Project
128164064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS ctrlData_getTxAttributes(TI_HANDLE hCtrlData, UINT32 txFlags,
128264064216a8433360745f69edddce19a606659163The Android Open Source Project                                txData_attr_t *pTxAttr, UINT32 ac)
128364064216a8433360745f69edddce19a606659163The Android Open Source Project{
128464064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
128564064216a8433360745f69edddce19a606659163The Android Open Source Project    rateModulation4x_table_t* pRateModulation;
128664064216a8433360745f69edddce19a606659163The Android Open Source Project
128764064216a8433360745f69edddce19a606659163The Android Open Source Project    os_memoryZero(pCtrlData->hOs, pTxAttr, sizeof(txData_attr_t));
128864064216a8433360745f69edddce19a606659163The Android Open Source Project
128964064216a8433360745f69edddce19a606659163The Android Open Source Project
129064064216a8433360745f69edddce19a606659163The Android Open Source Project    if( ((txFlags & TX_DATA_MULTICAST_FRAME) && (pCtrlData->ctrlDataCurrentBssType == BSS_INDEPENDENT)) ||
129164064216a8433360745f69edddce19a606659163The Android Open Source Project            (txFlags & TX_DATA_MGMT_MSDU) )
129264064216a8433360745f69edddce19a606659163The Android Open Source Project    {
129364064216a8433360745f69edddce19a606659163The Android Open Source Project        /* BCAST packets in IBSS should be sent at 2M and not in the highest basic rate. */
129464064216a8433360745f69edddce19a606659163The Android Open Source Project        if (pCtrlData->ctrlDataCurrentRateMask & DRV_RATE_MASK_2_BARKER)
129564064216a8433360745f69edddce19a606659163The Android Open Source Project        {
129664064216a8433360745f69edddce19a606659163The Android Open Source Project            pTxAttr->Rate = DRV_RATE_2M;
129764064216a8433360745f69edddce19a606659163The Android Open Source Project        }
129864064216a8433360745f69edddce19a606659163The Android Open Source Project        else
129964064216a8433360745f69edddce19a606659163The Android Open Source Project        {
130064064216a8433360745f69edddce19a606659163The Android Open Source Project            pTxAttr->Rate = ctrlData_getClosestTSRate(pCtrlData, ac, pCtrlData->ctrlDataCurrentBasicRate);
130164064216a8433360745f69edddce19a606659163The Android Open Source Project        }
130264064216a8433360745f69edddce19a606659163The Android Open Source Project
130364064216a8433360745f69edddce19a606659163The Android Open Source Project        /* by default use USER_RATE_CLASS for this kind of packets */
130464064216a8433360745f69edddce19a606659163The Android Open Source Project        pTxAttr->txRatePolicyId = pCtrlData->tsrsParameters[ac].fwPolicyID[USER_RATE_CLASS];
130564064216a8433360745f69edddce19a606659163The Android Open Source Project    }
130664064216a8433360745f69edddce19a606659163The Android Open Source Project    /* For regular data packets use the rate-adaptation rates. */
130764064216a8433360745f69edddce19a606659163The Android Open Source Project    else
130864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
130964064216a8433360745f69edddce19a606659163The Android Open Source Project        pRateModulation = rateAdaptation_getCurrent(pCtrlData->pRateAdaptation);
131064064216a8433360745f69edddce19a606659163The Android Open Source Project        pTxAttr->Rate = ctrlData_getClosestTSRate(pCtrlData, ac, pRateModulation->rate);
131164064216a8433360745f69edddce19a606659163The Android Open Source Project
131264064216a8433360745f69edddce19a606659163The Android Open Source Project        /* rate class Id ( retries profile per rate) */
131364064216a8433360745f69edddce19a606659163The Android Open Source Project        pTxAttr->txRatePolicyId = pCtrlData->tsrsParameters[ac].fwPolicyID[pCtrlData->currClientRateID];
131464064216a8433360745f69edddce19a606659163The Android Open Source Project
131564064216a8433360745f69edddce19a606659163The Android Open Source Project        /* For voice delivery PSPoll, use only basic rates */
131664064216a8433360745f69edddce19a606659163The Android Open Source Project        if (txFlags & TX_DATA_PS_POLL)
131764064216a8433360745f69edddce19a606659163The Android Open Source Project        {
131864064216a8433360745f69edddce19a606659163The Android Open Source Project            paramInfo_t param;
131964064216a8433360745f69edddce19a606659163The Android Open Source Project            modulationType_e tempModulation;
132064064216a8433360745f69edddce19a606659163The Android Open Source Project
132164064216a8433360745f69edddce19a606659163The Android Open Source Project            param.paramType = SITE_MGR_OPERATIONAL_MODE_PARAM;
132264064216a8433360745f69edddce19a606659163The Android Open Source Project            siteMgr_getParam(pCtrlData->hSiteMgr, &param);
132364064216a8433360745f69edddce19a606659163The Android Open Source Project
132464064216a8433360745f69edddce19a606659163The Android Open Source Project            /* Get the max rate and modulation from the BasicRateBitMask. */
132564064216a8433360745f69edddce19a606659163The Android Open Source Project            getMaxRate(pCtrlData->ctrlDataBasicRateBitMask,
132664064216a8433360745f69edddce19a606659163The Android Open Source Project                       &pTxAttr->Rate,
132764064216a8433360745f69edddce19a606659163The Android Open Source Project                       &tempModulation,
132864064216a8433360745f69edddce19a606659163The Android Open Source Project                       param.content.siteMgrDot11OperationalMode);
132964064216a8433360745f69edddce19a606659163The Android Open Source Project        }
133064064216a8433360745f69edddce19a606659163The Android Open Source Project
133164064216a8433360745f69edddce19a606659163The Android Open Source Project
133264064216a8433360745f69edddce19a606659163The Android Open Source Project    }
133364064216a8433360745f69edddce19a606659163The Android Open Source Project
133464064216a8433360745f69edddce19a606659163The Android Open Source Project    /* convert Application rate to HW rate */
133564064216a8433360745f69edddce19a606659163The Android Open Source Project    ConvertAppRateToHwBitMapRate(pTxAttr->Rate, &(pTxAttr->HwRate));
133664064216a8433360745f69edddce19a606659163The Android Open Source Project
133764064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_DEBUG_TX(pCtrlData->hReport,
133864064216a8433360745f69edddce19a606659163The Android Open Source Project            ("%s: Rate = %d, HwRate = 0x%x\n",
133964064216a8433360745f69edddce19a606659163The Android Open Source Project                __FUNCTION__,
134064064216a8433360745f69edddce19a606659163The Android Open Source Project                pTxAttr->Rate,
134164064216a8433360745f69edddce19a606659163The Android Open Source Project                pTxAttr->HwRate));
134264064216a8433360745f69edddce19a606659163The Android Open Source Project
134364064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
134464064216a8433360745f69edddce19a606659163The Android Open Source Project}
134564064216a8433360745f69edddce19a606659163The Android Open Source Project
134664064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************
134764064216a8433360745f69edddce19a606659163The Android Open Source Project*                        ctrlData_txCompleteStatus                         *
134864064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************
134964064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:  This function is called by the Hal for every Tx supportedBitMap
135064064216a8433360745f69edddce19a606659163The Android Open Source Project*               Interrupt - it update the rate adaptation algorithm about
135164064216a8433360745f69edddce19a606659163The Android Open Source Project*               the status of the last transmission and used as a trigger
135264064216a8433360745f69edddce19a606659163The Android Open Source Project*               for the Tx scheduler.
135364064216a8433360745f69edddce19a606659163The Android Open Source Project*
135464064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS:       hCtrlData - the object
135564064216a8433360745f69edddce19a606659163The Android Open Source Project*               CmpltTxAttr - Information structure about the last
135664064216a8433360745f69edddce19a606659163The Android Open Source Project*               transmission
135764064216a8433360745f69edddce19a606659163The Android Open Source Project*
135864064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT:
135964064216a8433360745f69edddce19a606659163The Android Open Source Project*
136064064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS:      void
136164064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/
136264064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid ctrlData_txCompleteStatus( TI_HANDLE hCtrlData,
136364064216a8433360745f69edddce19a606659163The Android Open Source Project                                       txCompleteAttr_t *pTxCompleteAttr )
136464064216a8433360745f69edddce19a606659163The Android Open Source Project{
136564064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
136664064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8       txCompleteFlags;
136764064216a8433360745f69edddce19a606659163The Android Open Source Project    BOOL        frameDataType = 0;
136864064216a8433360745f69edddce19a606659163The Android Open Source Project    rate_e      txActualRate;
136964064216a8433360745f69edddce19a606659163The Android Open Source Project    rate_e      txRequestRate;
137064064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8       qId;
137164064216a8433360745f69edddce19a606659163The Android Open Source Project    txPacketIdAttr_t    *pPacketId = (txPacketIdAttr_t*)pTxCompleteAttr->packetId;
137264064216a8433360745f69edddce19a606659163The Android Open Source Project
137364064216a8433360745f69edddce19a606659163The Android Open Source Project
137464064216a8433360745f69edddce19a606659163The Android Open Source Project    /*
137564064216a8433360745f69edddce19a606659163The Android Open Source Project     * perform rate adaptation algorithm if host processes packets
137664064216a8433360745f69edddce19a606659163The Android Open Source Project     * and  not TNET.
137764064216a8433360745f69edddce19a606659163The Android Open Source Project     * NOTE: MSDU was already freed in sendPacketTransfer
137864064216a8433360745f69edddce19a606659163The Android Open Source Project     */
137964064216a8433360745f69edddce19a606659163The Android Open Source Project    frameDataType = pPacketId->bDataMsdu;
138064064216a8433360745f69edddce19a606659163The Android Open Source Project    qId = pPacketId->txQid;
138164064216a8433360745f69edddce19a606659163The Android Open Source Project
138264064216a8433360745f69edddce19a606659163The Android Open Source Project    ConvertHwBitRateToAppRate(pTxCompleteAttr->rate, &txActualRate);
138364064216a8433360745f69edddce19a606659163The Android Open Source Project    ConvertHwBitRateToAppRate(pPacketId->maxTransmitRate, &txRequestRate);
138464064216a8433360745f69edddce19a606659163The Android Open Source Project
138564064216a8433360745f69edddce19a606659163The Android Open Source Project    /* perform rate adaptation algorithm if needed */
138664064216a8433360745f69edddce19a606659163The Android Open Source Project    if((pCtrlData->ctrlDataRateControlEnable == TRUE ) &&
138764064216a8433360745f69edddce19a606659163The Android Open Source Project       (pCtrlData->ctrlDataStartStoplinkControlAlg == TRUE) &&
138864064216a8433360745f69edddce19a606659163The Android Open Source Project           (frameDataType))
138964064216a8433360745f69edddce19a606659163The Android Open Source Project
139064064216a8433360745f69edddce19a606659163The Android Open Source Project    {
139164064216a8433360745f69edddce19a606659163The Android Open Source Project        rateAdaptation_updateRateAdaptation(pCtrlData->pRateAdaptation, txActualRate,
139264064216a8433360745f69edddce19a606659163The Android Open Source Project                                            txRequestRate,pTxCompleteAttr->status, 0);
139364064216a8433360745f69edddce19a606659163The Android Open Source Project    }
139464064216a8433360745f69edddce19a606659163The Android Open Source Project    txCompleteFlags = pPacketId->txCompleteFlags;
139564064216a8433360745f69edddce19a606659163The Android Open Source Project
139664064216a8433360745f69edddce19a606659163The Android Open Source Project    if(txCompleteFlags & TX_DATA_DISASSOC_SYNC_TRIG)
139764064216a8433360745f69edddce19a606659163The Android Open Source Project    {
139864064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_INFORMATION(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,("Call disconnect test upon NULL data"));
139964064216a8433360745f69edddce19a606659163The Android Open Source Project            pCtrlData->disassocSentCBFunc( pCtrlData->disassocSentCBObj );
140064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
140164064216a8433360745f69edddce19a606659163The Android Open Source Project
140264064216a8433360745f69edddce19a606659163The Android Open Source Project
140364064216a8433360745f69edddce19a606659163The Android Open Source Project    if(txCompleteFlags & TX_DATA_DEAUTH_SYNC_TRIG)
140464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
140564064216a8433360745f69edddce19a606659163The Android Open Source Project            WLAN_REPORT_INFORMATION(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
140664064216a8433360745f69edddce19a606659163The Android Open Source Project            ("De Auth TxCmplt: txStatus = %d, txActualRate = %d  \n",pTxCompleteAttr->status,pTxCompleteAttr->rate));
140764064216a8433360745f69edddce19a606659163The Android Open Source Project            pCtrlData->disassocSentCBFunc( pCtrlData->disassocSentCBObj );
140864064216a8433360745f69edddce19a606659163The Android Open Source Project    }
140945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt
141064064216a8433360745f69edddce19a606659163The Android Open Source Project    if(txData_isQueueUseMediumTime(pCtrlData->hTxData , qId) == TRUE )
141164064216a8433360745f69edddce19a606659163The Android Open Source Project    {
141264064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_INFORMATION(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
141364064216a8433360745f69edddce19a606659163The Android Open Source Project            (" ctrlData_txCompleteStatus() :usedTime = %d  qNum = %d\n",
141464064216a8433360745f69edddce19a606659163The Android Open Source Project            pTxCompleteAttr->actualDurationInAir, qId));
141564064216a8433360745f69edddce19a606659163The Android Open Source Project
141664064216a8433360745f69edddce19a606659163The Android Open Source Project        txData_updateUsedTime(pCtrlData->hTxData,
141764064216a8433360745f69edddce19a606659163The Android Open Source Project                              qId,
141864064216a8433360745f69edddce19a606659163The Android Open Source Project                              pTxCompleteAttr->actualDurationInAir);
141964064216a8433360745f69edddce19a606659163The Android Open Source Project    }
142064064216a8433360745f69edddce19a606659163The Android Open Source Project    /*
142164064216a8433360745f69edddce19a606659163The Android Open Source Project     * update tx complete status to txData (which schedule another packet also );
142264064216a8433360745f69edddce19a606659163The Android Open Source Project     */
142364064216a8433360745f69edddce19a606659163The Android Open Source Project    txData_txCompleteUpdate( pCtrlData->hTxData, pTxCompleteAttr );
142464064216a8433360745f69edddce19a606659163The Android Open Source Project
142564064216a8433360745f69edddce19a606659163The Android Open Source Project}
142664064216a8433360745f69edddce19a606659163The Android Open Source Project
142764064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************
142864064216a8433360745f69edddce19a606659163The Android Open Source Project*                        ctrlData_resetCounters                            *
142964064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************
143064064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:  This function reset the Ctrl Data module counters
143164064216a8433360745f69edddce19a606659163The Android Open Source Project*
143264064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS:       hCtrlData - the object
143364064216a8433360745f69edddce19a606659163The Android Open Source Project*
143464064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT:
143564064216a8433360745f69edddce19a606659163The Android Open Source Project*
143664064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS:      void
143764064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/
143864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void ctrlData_resetCounters(TI_HANDLE hCtrlData)
143964064216a8433360745f69edddce19a606659163The Android Open Source Project{
144064064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
144164064216a8433360745f69edddce19a606659163The Android Open Source Project
144264064216a8433360745f69edddce19a606659163The Android Open Source Project    os_memoryZero(pCtrlData->hOs,&pCtrlData->ctrlDataCounters,
144364064216a8433360745f69edddce19a606659163The Android Open Source Project                                sizeof(ctrlDataCounters_t));
144464064216a8433360745f69edddce19a606659163The Android Open Source Project}
144564064216a8433360745f69edddce19a606659163The Android Open Source Project
144664064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************
144764064216a8433360745f69edddce19a606659163The Android Open Source Project*                   ctrlData_getCurrBssTypeAndCurrBssId                    *
144864064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************
144964064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:  This function return the current BSSID and the
145064064216a8433360745f69edddce19a606659163The Android Open Source Project*               current BSS Type
145164064216a8433360745f69edddce19a606659163The Android Open Source Project*
145264064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS:       hCtrlData - the object
145364064216a8433360745f69edddce19a606659163The Android Open Source Project*
145464064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT:       pCurrBssid - pointer to return the current bssid
145564064216a8433360745f69edddce19a606659163The Android Open Source Project*               pCurrBssType - pointer to return the current bss type
145664064216a8433360745f69edddce19a606659163The Android Open Source Project*
145764064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS:      void
145864064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/
145964064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid ctrlData_getCurrBssTypeAndCurrBssId(TI_HANDLE hCtrlData, macAddress_t *pCurrBssid,
146064064216a8433360745f69edddce19a606659163The Android Open Source Project                                           bssType_e *pCurrBssType)
146164064216a8433360745f69edddce19a606659163The Android Open Source Project{
146264064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
146364064216a8433360745f69edddce19a606659163The Android Open Source Project
146464064216a8433360745f69edddce19a606659163The Android Open Source Project    MAC_COPY(pCtrlData->hOs, (pCurrBssid), (&pCtrlData->ctrlDataCurrentBSSID));
146564064216a8433360745f69edddce19a606659163The Android Open Source Project    *pCurrBssType = pCtrlData->ctrlDataCurrentBssType;
146664064216a8433360745f69edddce19a606659163The Android Open Source Project
146764064216a8433360745f69edddce19a606659163The Android Open Source Project}
146864064216a8433360745f69edddce19a606659163The Android Open Source Project
146964064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef SUPPORT_4X
147064064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************
147164064216a8433360745f69edddce19a606659163The Android Open Source Project*                   ctrlData_get4xInfoElemnt                               *
147264064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************
147364064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:
147464064216a8433360745f69edddce19a606659163The Android Open Source Project*
147564064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS:       hCtrlData - the object
147664064216a8433360745f69edddce19a606659163The Android Open Source Project*
147764064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT:
147864064216a8433360745f69edddce19a606659163The Android Open Source Project*
147964064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS:
148064064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/
148164064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS ctrlData_get4xInfoElemnt(TI_HANDLE hCtrlData,
148264064216a8433360745f69edddce19a606659163The Android Open Source Project                                   dot11_4X_t* fourXInfoElemnt)
148364064216a8433360745f69edddce19a606659163The Android Open Source Project{
148464064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_STATUS Status = NOK;
148564064216a8433360745f69edddce19a606659163The Android Open Source Project
148664064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
148764064216a8433360745f69edddce19a606659163The Android Open Source Project
148864064216a8433360745f69edddce19a606659163The Android Open Source Project    if((pCtrlData->ctrlDataFourXEnable == TRUE) &&
148964064216a8433360745f69edddce19a606659163The Android Open Source Project       (pCtrlData->ctrlDataCurrentBssType == BSS_INFRASTRUCTURE))
149064064216a8433360745f69edddce19a606659163The Android Open Source Project    {
149164064216a8433360745f69edddce19a606659163The Android Open Source Project        Status = fourXManager_get4xInfoElemnt(pCtrlData->pFourX, fourXInfoElemnt);
149264064216a8433360745f69edddce19a606659163The Android Open Source Project    }
149364064216a8433360745f69edddce19a606659163The Android Open Source Project
149464064216a8433360745f69edddce19a606659163The Android Open Source Project    return Status;
149564064216a8433360745f69edddce19a606659163The Android Open Source Project}
149664064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
149764064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************
149864064216a8433360745f69edddce19a606659163The Android Open Source Project*                           ctrlData_get4xStatus                           *
149964064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************
150064064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:
150164064216a8433360745f69edddce19a606659163The Android Open Source Project*
150264064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS:       hCtrlData - the object
150364064216a8433360745f69edddce19a606659163The Android Open Source Project*
150464064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT:
150564064216a8433360745f69edddce19a606659163The Android Open Source Project*
150664064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS:
150764064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/
150864064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS ctrlData_get4xStatus(TI_HANDLE hCtrlData,BOOL* fourXEnable)
150964064216a8433360745f69edddce19a606659163The Android Open Source Project{
151064064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
151164064216a8433360745f69edddce19a606659163The Android Open Source Project
151264064216a8433360745f69edddce19a606659163The Android Open Source Project    *fourXEnable = pCtrlData->ctrlDataCerruentFourXstate;
151364064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
151464064216a8433360745f69edddce19a606659163The Android Open Source Project}
151564064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef SUPPORT_4X
151664064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************
151764064216a8433360745f69edddce19a606659163The Android Open Source Project*                           ctrlData_evalSite                              *
151864064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************
151964064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:
152064064216a8433360745f69edddce19a606659163The Android Open Source Project*
152164064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS:       hCtrlData - the object
152264064216a8433360745f69edddce19a606659163The Android Open Source Project*
152364064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT:
152464064216a8433360745f69edddce19a606659163The Android Open Source Project*
152564064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS:
152664064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/
152764064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS ctrlData_evalSite(TI_HANDLE hCtrlData,
152864064216a8433360745f69edddce19a606659163The Android Open Source Project                            dot11_4X_t* site4xParams,
152964064216a8433360745f69edddce19a606659163The Android Open Source Project                            UINT32 *matchingLevel)
153064064216a8433360745f69edddce19a606659163The Android Open Source Project{
153164064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
153264064216a8433360745f69edddce19a606659163The Android Open Source Project
153364064216a8433360745f69edddce19a606659163The Android Open Source Project    if((pCtrlData->ctrlDataFourXEnable == TRUE) &&
153464064216a8433360745f69edddce19a606659163The Android Open Source Project       (pCtrlData->ctrlDataCurrentBssType == BSS_INFRASTRUCTURE))
153564064216a8433360745f69edddce19a606659163The Android Open Source Project    {
153664064216a8433360745f69edddce19a606659163The Android Open Source Project        return (fourXManager_evalSite(pCtrlData->pFourX, site4xParams, matchingLevel));
153764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
153864064216a8433360745f69edddce19a606659163The Android Open Source Project
153964064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
154064064216a8433360745f69edddce19a606659163The Android Open Source Project}
154164064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
154264064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************
154364064216a8433360745f69edddce19a606659163The Android Open Source Project*                           ctrlData_setSite                               *
154464064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************
154564064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:
154664064216a8433360745f69edddce19a606659163The Android Open Source Project*
154764064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS:       hCtrlData - the object
154864064216a8433360745f69edddce19a606659163The Android Open Source Project*
154964064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT:
155064064216a8433360745f69edddce19a606659163The Android Open Source Project*
155164064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS:
155264064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/
155364064216a8433360745f69edddce19a606659163The Android Open Source Project
155464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS ctrlData_setSite(TI_HANDLE hCtrlData,
155564064216a8433360745f69edddce19a606659163The Android Open Source Project                           dot11_4X_t* site4xParams)
155664064216a8433360745f69edddce19a606659163The Android Open Source Project{
155764064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_STATUS   status = NOK;
155864064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
155964064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef SUPPORT_4X
156064064216a8433360745f69edddce19a606659163The Android Open Source Project    if((pCtrlData->ctrlDataFourXEnable == TRUE) &&
156164064216a8433360745f69edddce19a606659163The Android Open Source Project       (pCtrlData->ctrlDataCurrentBssType == BSS_INFRASTRUCTURE))
156264064216a8433360745f69edddce19a606659163The Android Open Source Project    {
156364064216a8433360745f69edddce19a606659163The Android Open Source Project        status = fourXManager_setSite(pCtrlData->pFourX, site4xParams);
156464064216a8433360745f69edddce19a606659163The Android Open Source Project    }
156564064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
156664064216a8433360745f69edddce19a606659163The Android Open Source Project    if(status != OK)
156764064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->ctrlDataCerruentFourXstate = FALSE;
156864064216a8433360745f69edddce19a606659163The Android Open Source Project    else
156964064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->ctrlDataCerruentFourXstate = TRUE;
157064064216a8433360745f69edddce19a606659163The Android Open Source Project
157164064216a8433360745f69edddce19a606659163The Android Open Source Project    return status;
157264064216a8433360745f69edddce19a606659163The Android Open Source Project}
157364064216a8433360745f69edddce19a606659163The Android Open Source Project
157464064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef SUPPORT_4X
157564064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************
157664064216a8433360745f69edddce19a606659163The Android Open Source Project*                       ctrlData_txDequeueMsdu                            *
157764064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************
157864064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:
157964064216a8433360745f69edddce19a606659163The Android Open Source Project*
158064064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS:       hCtrlData - the object
158164064216a8433360745f69edddce19a606659163The Android Open Source Project*
158264064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT:
158364064216a8433360745f69edddce19a606659163The Android Open Source Project*
158464064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS:
158564064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/
158664064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS ctrlData_txDequeueMsdu(TI_HANDLE          hCtrlData,
158764064216a8433360745f69edddce19a606659163The Android Open Source Project                                 mem_MSDU_T**       buildMsduPtr,
158864064216a8433360745f69edddce19a606659163The Android Open Source Project                                 MsduList_t*        pMsduList,
158964064216a8433360745f69edddce19a606659163The Android Open Source Project                                 whalTx_attr_t*     pWhalTx_attr,
159064064216a8433360745f69edddce19a606659163The Android Open Source Project                                 hwTxInformation_t* pHwTxInformation)
159164064216a8433360745f69edddce19a606659163The Android Open Source Project{
159264064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_STATUS   status;
159364064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32      currNumOfMsdu;
159464064216a8433360745f69edddce19a606659163The Android Open Source Project
159564064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
159664064216a8433360745f69edddce19a606659163The Android Open Source Project
159764064216a8433360745f69edddce19a606659163The Android Open Source Project    *buildMsduPtr = NULL;
159864064216a8433360745f69edddce19a606659163The Android Open Source Project
159964064216a8433360745f69edddce19a606659163The Android Open Source Project    currNumOfMsdu = msduList_getCurrNumOfMsdu(pMsduList);
160064064216a8433360745f69edddce19a606659163The Android Open Source Project    if(currNumOfMsdu == 0)
160164064216a8433360745f69edddce19a606659163The Android Open Source Project        return DO_NOT_SEND_MSDU;
160264064216a8433360745f69edddce19a606659163The Android Open Source Project
160364064216a8433360745f69edddce19a606659163The Android Open Source Project    if(pCtrlData->ctrlDataCerruentFourXstate == TRUE)
160464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
160564064216a8433360745f69edddce19a606659163The Android Open Source Project        /* call 4x */
160664064216a8433360745f69edddce19a606659163The Android Open Source Project        status = fourX_txMsduDeQueue(pCtrlData->pFourX, buildMsduPtr, pMsduList, pHwTxInformation);
160764064216a8433360745f69edddce19a606659163The Android Open Source Project        if(status != OK)
160864064216a8433360745f69edddce19a606659163The Android Open Source Project        {
160964064216a8433360745f69edddce19a606659163The Android Open Source Project            return DO_NOT_SEND_MSDU;
161064064216a8433360745f69edddce19a606659163The Android Open Source Project        }
161164064216a8433360745f69edddce19a606659163The Android Open Source Project
161264064216a8433360745f69edddce19a606659163The Android Open Source Project        ctrlData_getTxAttributes(pCtrlData, (*buildMsduPtr)->txFlags, pWhalTx_attr, QOS_AC_BE); /* stub */
161364064216a8433360745f69edddce19a606659163The Android Open Source Project        return SEND_ONE_MSDU;
161464064216a8433360745f69edddce19a606659163The Android Open Source Project
161564064216a8433360745f69edddce19a606659163The Android Open Source Project    }
161664064216a8433360745f69edddce19a606659163The Android Open Source Project    return FOUR_X_DISABLE;
161764064216a8433360745f69edddce19a606659163The Android Open Source Project
161864064216a8433360745f69edddce19a606659163The Android Open Source Project}
161964064216a8433360745f69edddce19a606659163The Android Open Source Project
162064064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************
162164064216a8433360745f69edddce19a606659163The Android Open Source Project*                       ctrlData_txMsdu                                    *
162264064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************
162364064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:
162464064216a8433360745f69edddce19a606659163The Android Open Source Project*
162564064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS:       hCtrlData - the object
162664064216a8433360745f69edddce19a606659163The Android Open Source Project*
162764064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT:
162864064216a8433360745f69edddce19a606659163The Android Open Source Project*
162964064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS:
163064064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/
163164064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS ctrlData_txMsdu(TI_HANDLE         hCtrlData,
163264064216a8433360745f69edddce19a606659163The Android Open Source Project                          mem_MSDU_T**      msduPtr)
163364064216a8433360745f69edddce19a606659163The Android Open Source Project{
163464064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
163564064216a8433360745f69edddce19a606659163The Android Open Source Project
163664064216a8433360745f69edddce19a606659163The Android Open Source Project    if(pCtrlData->ctrlDataCerruentFourXstate == TRUE)
163764064216a8433360745f69edddce19a606659163The Android Open Source Project    {
163864064216a8433360745f69edddce19a606659163The Android Open Source Project        fourX_txMsduBeforInsertToQueue(pCtrlData->pFourX, msduPtr);
163964064216a8433360745f69edddce19a606659163The Android Open Source Project    }
164064064216a8433360745f69edddce19a606659163The Android Open Source Project
164164064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
164264064216a8433360745f69edddce19a606659163The Android Open Source Project}
164364064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* SUPPORT_4X */
164464064216a8433360745f69edddce19a606659163The Android Open Source Project
164564064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************
164664064216a8433360745f69edddce19a606659163The Android Open Source Project*                       ctrlData_setTspecsRateEvent                       *
164764064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************
164864064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:
164964064216a8433360745f69edddce19a606659163The Android Open Source Project*
165064064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS:       hCtrlData - the object
165164064216a8433360745f69edddce19a606659163The Android Open Source Project*
165264064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT:
165364064216a8433360745f69edddce19a606659163The Android Open Source Project*
165464064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS:
165564064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/
165664064216a8433360745f69edddce19a606659163The Android Open Source Project
165764064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid ctrlData_setTspecsRateEvent(TI_HANDLE          hCtrlData,
165864064216a8433360745f69edddce19a606659163The Android Open Source Project                                    UINT8           acID,
165964064216a8433360745f69edddce19a606659163The Android Open Source Project                                    BOOL            enableEvent)
166064064216a8433360745f69edddce19a606659163The Android Open Source Project{
166164064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
166264064216a8433360745f69edddce19a606659163The Android Open Source Project
166364064216a8433360745f69edddce19a606659163The Android Open Source Project     rateAdaptation_setTspecsRateEvent(pCtrlData->pRateAdaptation, acID, enableEvent);
166464064216a8433360745f69edddce19a606659163The Android Open Source Project
166564064216a8433360745f69edddce19a606659163The Android Open Source Project}
166664064216a8433360745f69edddce19a606659163The Android Open Source Project
166764064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************
166864064216a8433360745f69edddce19a606659163The Android Open Source Project*                   ctrlData_setTspecsRateThresholds                      *
166964064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************
167064064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:
167164064216a8433360745f69edddce19a606659163The Android Open Source Project*
167264064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS:       hCtrlData - the object
167364064216a8433360745f69edddce19a606659163The Android Open Source Project*
167464064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT:
167564064216a8433360745f69edddce19a606659163The Android Open Source Project*
167664064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS:
167764064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/
167864064216a8433360745f69edddce19a606659163The Android Open Source Project
167964064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid ctrlData_setTspecsRateThresholds(TI_HANDLE     hCtrlData,
168064064216a8433360745f69edddce19a606659163The Android Open Source Project                                      UINT8         acID,
168164064216a8433360745f69edddce19a606659163The Android Open Source Project                                      UINT8     highRateThreshold,
168264064216a8433360745f69edddce19a606659163The Android Open Source Project                                      UINT8     lowRateThreshold)
168364064216a8433360745f69edddce19a606659163The Android Open Source Project{
168464064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
168564064216a8433360745f69edddce19a606659163The Android Open Source Project
168664064216a8433360745f69edddce19a606659163The Android Open Source Project    rateAdaptation_setTspecsRateThresholds(pCtrlData->pRateAdaptation, acID, highRateThreshold, lowRateThreshold);
168764064216a8433360745f69edddce19a606659163The Android Open Source Project}
168864064216a8433360745f69edddce19a606659163The Android Open Source Project
168964064216a8433360745f69edddce19a606659163The Android Open Source Project/************************************************************************
169064064216a8433360745f69edddce19a606659163The Android Open Source Project *                        Classifier functions
169164064216a8433360745f69edddce19a606659163The Android Open Source Project ************************************************************************ */
169264064216a8433360745f69edddce19a606659163The Android Open Source Project
169364064216a8433360745f69edddce19a606659163The Android Open Source Project/************************************************************************
169464064216a8433360745f69edddce19a606659163The Android Open Source Project *                        ctrlData_clsfrClassifyTxMSDU
169564064216a8433360745f69edddce19a606659163The Android Open Source Project ************************************************************************
169664064216a8433360745f69edddce19a606659163The Android Open Source Project
169764064216a8433360745f69edddce19a606659163The Android Open Source ProjectInput:
169864064216a8433360745f69edddce19a606659163The Android Open Source Project
169964064216a8433360745f69edddce19a606659163The Android Open Source Project* hCtrlData: hCtrlData - the object
170064064216a8433360745f69edddce19a606659163The Android Open Source Project* pMsdu: pointer to the MSDU
170164064216a8433360745f69edddce19a606659163The Android Open Source Project* packet_DTag: NDIS Packet 802.1 user priority (UP)
170264064216a8433360745f69edddce19a606659163The Android Open Source Project
170364064216a8433360745f69edddce19a606659163The Android Open Source ProjectOutput:
170464064216a8433360745f69edddce19a606659163The Android Open Source Project
170564064216a8433360745f69edddce19a606659163The Android Open Source ProjectOK on success and PARAM_VALUE_NOT_VALID in case of input parameters problems.
170664064216a8433360745f69edddce19a606659163The Android Open Source ProjectIf the value PARAM_VALUE_NOT_VALID is returned, the MSDU qosTag field is zero.
170764064216a8433360745f69edddce19a606659163The Android Open Source Project
170864064216a8433360745f69edddce19a606659163The Android Open Source ProjectDescription:
170964064216a8433360745f69edddce19a606659163The Android Open Source Project
171064064216a8433360745f69edddce19a606659163The Android Open Source ProjectThis function performs the classification algorithm on the MSDU by calling the
171164064216a8433360745f69edddce19a606659163The Android Open Source ProjectClassifier_classifyTxMSDU API.
171264064216a8433360745f69edddce19a606659163The Android Open Source Project
171364064216a8433360745f69edddce19a606659163The Android Open Source Project************************************************************************/
171464064216a8433360745f69edddce19a606659163The Android Open Source Project
171564064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS ctrlData_ClsfrClassifyTxMSDU(TI_HANDLE    hCtrlData,
171664064216a8433360745f69edddce19a606659163The Android Open Source Project                                       mem_MSDU_T   *pMsdu,
171764064216a8433360745f69edddce19a606659163The Android Open Source Project                                       UINT8        packet_DTag)
171864064216a8433360745f69edddce19a606659163The Android Open Source Project{
171964064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
172064064216a8433360745f69edddce19a606659163The Android Open Source Project
172164064216a8433360745f69edddce19a606659163The Android Open Source Project    /* check parameters validity */
172264064216a8433360745f69edddce19a606659163The Android Open Source Project    if(!hCtrlData)
172364064216a8433360745f69edddce19a606659163The Android Open Source Project        return NOK;
172464064216a8433360745f69edddce19a606659163The Android Open Source Project
172564064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pMsdu == NULL)
172664064216a8433360745f69edddce19a606659163The Android Open Source Project    {
172764064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_ERROR(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
172864064216a8433360745f69edddce19a606659163The Android Open Source Project            (" ctrlData_ClsfrClassifyTxMSDU() : parametrs value error (the MSDU's qosTag is not updated) \n"));
172964064216a8433360745f69edddce19a606659163The Android Open Source Project        return PARAM_VALUE_NOT_VALID;
173064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
173164064216a8433360745f69edddce19a606659163The Android Open Source Project
173264064216a8433360745f69edddce19a606659163The Android Open Source Project    return (Classifier_classifyTxMSDU(pCtrlData->pClsfr, pMsdu, packet_DTag));
173364064216a8433360745f69edddce19a606659163The Android Open Source Project
173464064216a8433360745f69edddce19a606659163The Android Open Source Project}
173564064216a8433360745f69edddce19a606659163The Android Open Source Project
173664064216a8433360745f69edddce19a606659163The Android Open Source Project
173764064216a8433360745f69edddce19a606659163The Android Open Source Project
173864064216a8433360745f69edddce19a606659163The Android Open Source Project/************************************************************************
173964064216a8433360745f69edddce19a606659163The Android Open Source Project *                        ctrlData_clsfrSetClsfrType
174064064216a8433360745f69edddce19a606659163The Android Open Source Project ************************************************************************
174164064216a8433360745f69edddce19a606659163The Android Open Source Project
174264064216a8433360745f69edddce19a606659163The Android Open Source ProjectInput:
174364064216a8433360745f69edddce19a606659163The Android Open Source Project
174464064216a8433360745f69edddce19a606659163The Android Open Source Project* hCtrlData: hCtrlData - the object
174564064216a8433360745f69edddce19a606659163The Android Open Source Project* newClsfrType: the new classifier type
174664064216a8433360745f69edddce19a606659163The Android Open Source Project
174764064216a8433360745f69edddce19a606659163The Android Open Source ProjectOutput:
174864064216a8433360745f69edddce19a606659163The Android Open Source Project
174964064216a8433360745f69edddce19a606659163The Android Open Source ProjectOK on success and PARAM_VALUE_NOT_VALID in case of input parameters problems.
175064064216a8433360745f69edddce19a606659163The Android Open Source ProjectIf the value PARAM_VALUE_NOT_VALID is returned, the classifier type is not updated.
175164064216a8433360745f69edddce19a606659163The Android Open Source Project
175264064216a8433360745f69edddce19a606659163The Android Open Source ProjectDescription:
175364064216a8433360745f69edddce19a606659163The Android Open Source Project
175464064216a8433360745f69edddce19a606659163The Android Open Source ProjectThis function changes the active classifier type by calling the
175564064216a8433360745f69edddce19a606659163The Android Open Source ProjectClassifier_setClsfrType API.
175664064216a8433360745f69edddce19a606659163The Android Open Source Project
175764064216a8433360745f69edddce19a606659163The Android Open Source Project************************************************************************/
175864064216a8433360745f69edddce19a606659163The Android Open Source Project
175964064216a8433360745f69edddce19a606659163The Android Open Source Project
176064064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS ctrlData_clsfrSetClsfrType(TI_HANDLE          hCtrlData,
176164064216a8433360745f69edddce19a606659163The Android Open Source Project                                    clsfrTypeAndSupport     newClsfrType)
176264064216a8433360745f69edddce19a606659163The Android Open Source Project{
176364064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
176464064216a8433360745f69edddce19a606659163The Android Open Source Project    /* check parameters validity */
176564064216a8433360745f69edddce19a606659163The Android Open Source Project    if(!hCtrlData)
176664064216a8433360745f69edddce19a606659163The Android Open Source Project        return PARAM_VALUE_NOT_VALID;
176764064216a8433360745f69edddce19a606659163The Android Open Source Project
176864064216a8433360745f69edddce19a606659163The Android Open Source Project    return (Classifier_setClsfrType(pCtrlData->pClsfr, (clsfr_type_e)newClsfrType.ClsfrType));
176964064216a8433360745f69edddce19a606659163The Android Open Source Project
177064064216a8433360745f69edddce19a606659163The Android Open Source Project}
177164064216a8433360745f69edddce19a606659163The Android Open Source Project
177264064216a8433360745f69edddce19a606659163The Android Open Source Project
177364064216a8433360745f69edddce19a606659163The Android Open Source Project/*-----------------------------------------------------------------------------
177464064216a8433360745f69edddce19a606659163The Android Open Source ProjectRoutine Name: ctrlData_ToggleTrafficIntensityNotification
177564064216a8433360745f69edddce19a606659163The Android Open Source ProjectRoutine Description: turns ON/OFF traffic intensity notification events
177664064216a8433360745f69edddce19a606659163The Android Open Source Project                     from Traffic Monitor module
177764064216a8433360745f69edddce19a606659163The Android Open Source ProjectArguments:
177864064216a8433360745f69edddce19a606659163The Android Open Source ProjectReturn Value:
177964064216a8433360745f69edddce19a606659163The Android Open Source Project-----------------------------------------------------------------------------*/
178064064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid ctrlData_ToggleTrafficIntensityNotification (TI_HANDLE hCtrlData, BOOL enabledFlag)
178164064216a8433360745f69edddce19a606659163The Android Open Source Project{
178264064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
178364064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8 idx;
178464064216a8433360745f69edddce19a606659163The Android Open Source Project
178564064216a8433360745f69edddce19a606659163The Android Open Source Project   if (enabledFlag)
178664064216a8433360745f69edddce19a606659163The Android Open Source Project   {
178764064216a8433360745f69edddce19a606659163The Android Open Source Project      for (idx=0; idx < CTRL_DATA_TRAFFIC_INTENSITY_MAX_EVENTS; idx++)
178864064216a8433360745f69edddce19a606659163The Android Open Source Project      {
178964064216a8433360745f69edddce19a606659163The Android Open Source Project         TrafficMonitor_StartEventNotif (pCtrlData->hTrafficMonitor,pCtrlData->ctrlDataTrafficThresholdEvents[idx]);
179064064216a8433360745f69edddce19a606659163The Android Open Source Project      }
179164064216a8433360745f69edddce19a606659163The Android Open Source Project      WLAN_REPORT_INFORMATION(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
179264064216a8433360745f69edddce19a606659163The Android Open Source Project         ("ctrlData_ToggleTrafficIntensityNotification (TRUE)\n"));
179364064216a8433360745f69edddce19a606659163The Android Open Source Project   }
179464064216a8433360745f69edddce19a606659163The Android Open Source Project   else
179564064216a8433360745f69edddce19a606659163The Android Open Source Project   {
179664064216a8433360745f69edddce19a606659163The Android Open Source Project      for (idx=0; idx < CTRL_DATA_TRAFFIC_INTENSITY_MAX_EVENTS; idx++)
179764064216a8433360745f69edddce19a606659163The Android Open Source Project      {
179864064216a8433360745f69edddce19a606659163The Android Open Source Project         TrafficMonitor_StopEventNotif (pCtrlData->hTrafficMonitor,pCtrlData->ctrlDataTrafficThresholdEvents[idx]);
179964064216a8433360745f69edddce19a606659163The Android Open Source Project      }
180064064216a8433360745f69edddce19a606659163The Android Open Source Project      WLAN_REPORT_INFORMATION(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
180164064216a8433360745f69edddce19a606659163The Android Open Source Project         ("ctrlData_ToggleTrafficIntensityNotification (FALSE)\n"));
180264064216a8433360745f69edddce19a606659163The Android Open Source Project   }
180364064216a8433360745f69edddce19a606659163The Android Open Source Project   pCtrlData->ctrlDataTrafficIntensityEventsEnabled = enabledFlag;
180464064216a8433360745f69edddce19a606659163The Android Open Source Project
180564064216a8433360745f69edddce19a606659163The Android Open Source Project}
180664064216a8433360745f69edddce19a606659163The Android Open Source Project
180764064216a8433360745f69edddce19a606659163The Android Open Source Project/*-----------------------------------------------------------------------------
180864064216a8433360745f69edddce19a606659163The Android Open Source ProjectRoutine Name: ctrlData_UnregisterTrafficIntensityEvents
180964064216a8433360745f69edddce19a606659163The Android Open Source ProjectRoutine Description: unregisters existing events from traffic monitor
181064064216a8433360745f69edddce19a606659163The Android Open Source ProjectArguments:
181164064216a8433360745f69edddce19a606659163The Android Open Source ProjectReturn Value:
181264064216a8433360745f69edddce19a606659163The Android Open Source Project-----------------------------------------------------------------------------*/
181364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void ctrlData_UnregisterTrafficIntensityEvents (TI_HANDLE hCtrlData)
181464064216a8433360745f69edddce19a606659163The Android Open Source Project{
181564064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
181664064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8 idx;
181764064216a8433360745f69edddce19a606659163The Android Open Source Project
181864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Loop through events and unregister them */
181964064216a8433360745f69edddce19a606659163The Android Open Source Project    for (idx=0; idx < CTRL_DATA_TRAFFIC_INTENSITY_MAX_EVENTS; idx++)
182064064216a8433360745f69edddce19a606659163The Android Open Source Project    {
182164064216a8433360745f69edddce19a606659163The Android Open Source Project       TrafficMonitor_UnregEvent (pCtrlData->hTrafficMonitor,pCtrlData->ctrlDataTrafficThresholdEvents[idx]);
182264064216a8433360745f69edddce19a606659163The Android Open Source Project    }
182364064216a8433360745f69edddce19a606659163The Android Open Source Project
182464064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
182564064216a8433360745f69edddce19a606659163The Android Open Source Project       ("ctrlData_UnregisterTrafficIntensityEvents: Unregistered all events\n"));
182664064216a8433360745f69edddce19a606659163The Android Open Source Project
182764064216a8433360745f69edddce19a606659163The Android Open Source Project}
182864064216a8433360745f69edddce19a606659163The Android Open Source Project
182964064216a8433360745f69edddce19a606659163The Android Open Source Project
183064064216a8433360745f69edddce19a606659163The Android Open Source Project/*-----------------------------------------------------------------------------
183164064216a8433360745f69edddce19a606659163The Android Open Source ProjectRoutine Name: ctrlData_RegisterTrafficIntensityEvents
183264064216a8433360745f69edddce19a606659163The Android Open Source ProjectRoutine Description: Registers traffic intensity threshold events through traffic monitor
183364064216a8433360745f69edddce19a606659163The Android Open Source ProjectArguments:
183464064216a8433360745f69edddce19a606659163The Android Open Source ProjectReturn Value:
183564064216a8433360745f69edddce19a606659163The Android Open Source Project-----------------------------------------------------------------------------*/
183664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void ctrlData_RegisterTrafficIntensityEvents (TI_HANDLE hCtrlData)
183764064216a8433360745f69edddce19a606659163The Android Open Source Project{
183864064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
183964064216a8433360745f69edddce19a606659163The Android Open Source Project    TrafficAlertRegParm_t TrafficAlertRegParm;
184064064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_STATUS status;
184164064216a8433360745f69edddce19a606659163The Android Open Source Project
184264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Register high threshold "direction up" event */
184364064216a8433360745f69edddce19a606659163The Android Open Source Project    TrafficAlertRegParm.CallBack = ctrlData_TrafficThresholdCrossed;
184464064216a8433360745f69edddce19a606659163The Android Open Source Project    TrafficAlertRegParm.Context = hCtrlData;
184564064216a8433360745f69edddce19a606659163The Android Open Source Project    TrafficAlertRegParm.Cookie =  CTRL_DATA_TRAFFIC_INTENSITY_HIGH_CROSSED_ABOVE;
184664064216a8433360745f69edddce19a606659163The Android Open Source Project    TrafficAlertRegParm.Direction = TRAFF_UP;
184764064216a8433360745f69edddce19a606659163The Android Open Source Project    TrafficAlertRegParm.Trigger = TRAFF_EDGE;
184864064216a8433360745f69edddce19a606659163The Android Open Source Project    TrafficAlertRegParm.TimeIntervalMs = pCtrlData->ctrlDataTrafficIntensityThresholds.TestInterval;
184964064216a8433360745f69edddce19a606659163The Android Open Source Project    TrafficAlertRegParm.Threshold = pCtrlData->ctrlDataTrafficIntensityThresholds.uHighThreshold;
185064064216a8433360745f69edddce19a606659163The Android Open Source Project    TrafficAlertRegParm.MonitorType = TX_RX_DIRECTED_FRAMES;
185164064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataTrafficThresholdEvents[0] = TrafficMonitor_RegEvent(pCtrlData->hTrafficMonitor,&TrafficAlertRegParm,FALSE);
185264064216a8433360745f69edddce19a606659163The Android Open Source Project
185364064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pCtrlData->ctrlDataTrafficThresholdEvents[0] == NULL)
185464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
185564064216a8433360745f69edddce19a606659163The Android Open Source Project         WLAN_REPORT_ERROR(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
185664064216a8433360745f69edddce19a606659163The Android Open Source Project            (" ctrlData_RegisterTrafficIntensityEvents() : Failed to register high treshold event (TRAFF_UP) \n"));
185764064216a8433360745f69edddce19a606659163The Android Open Source Project         return;
185864064216a8433360745f69edddce19a606659163The Android Open Source Project    }
185964064216a8433360745f69edddce19a606659163The Android Open Source Project
186064064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Register high threshold "direction down" event*/
186164064216a8433360745f69edddce19a606659163The Android Open Source Project    TrafficAlertRegParm.Cookie =  CTRL_DATA_TRAFFIC_INTENSITY_HIGH_CROSSED_BELOW;
186264064216a8433360745f69edddce19a606659163The Android Open Source Project    TrafficAlertRegParm.Direction = TRAFF_DOWN;
186364064216a8433360745f69edddce19a606659163The Android Open Source Project    TrafficAlertRegParm.Trigger = TRAFF_EDGE;
186464064216a8433360745f69edddce19a606659163The Android Open Source Project    TrafficAlertRegParm.Threshold = pCtrlData->ctrlDataTrafficIntensityThresholds.uHighThreshold;
186564064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataTrafficThresholdEvents[1] = TrafficMonitor_RegEvent(pCtrlData->hTrafficMonitor,&TrafficAlertRegParm,FALSE);
186664064216a8433360745f69edddce19a606659163The Android Open Source Project
186764064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pCtrlData->ctrlDataTrafficThresholdEvents[1] == NULL)
186864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
186964064216a8433360745f69edddce19a606659163The Android Open Source Project         WLAN_REPORT_ERROR(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
187064064216a8433360745f69edddce19a606659163The Android Open Source Project            (" ctrlData_RegisterTrafficIntensityEvents() : Failed to register high treshold event (TRAFF_DOWN) \n"));
187164064216a8433360745f69edddce19a606659163The Android Open Source Project         return;
187264064216a8433360745f69edddce19a606659163The Android Open Source Project    }
187364064216a8433360745f69edddce19a606659163The Android Open Source Project
187464064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Define the "direction below" and "direction above" events as opposites (events that reset eachother)*/
187564064216a8433360745f69edddce19a606659163The Android Open Source Project    status = TrafficMonitor_SetRstCondition(pCtrlData->hTrafficMonitor,
187664064216a8433360745f69edddce19a606659163The Android Open Source Project                                            pCtrlData->ctrlDataTrafficThresholdEvents[0],
187764064216a8433360745f69edddce19a606659163The Android Open Source Project                                            pCtrlData->ctrlDataTrafficThresholdEvents[1],
187864064216a8433360745f69edddce19a606659163The Android Open Source Project                                            TRUE);
187964064216a8433360745f69edddce19a606659163The Android Open Source Project
188064064216a8433360745f69edddce19a606659163The Android Open Source Project    if (status != OK)
188164064216a8433360745f69edddce19a606659163The Android Open Source Project    {
188264064216a8433360745f69edddce19a606659163The Android Open Source Project      WLAN_REPORT_ERROR (pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
188364064216a8433360745f69edddce19a606659163The Android Open Source Project         ("ctrlData_RegisterTrafficIntensityEvents: TrafficMonitor_SetRstCondition returned status = %d\n",status));
188464064216a8433360745f69edddce19a606659163The Android Open Source Project    }
188564064216a8433360745f69edddce19a606659163The Android Open Source Project
188664064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Register low threshold "direction up" event */
188764064216a8433360745f69edddce19a606659163The Android Open Source Project    TrafficAlertRegParm.Cookie =  CTRL_DATA_TRAFFIC_INTENSITY_LOW_CROSSED_ABOVE;
188864064216a8433360745f69edddce19a606659163The Android Open Source Project    TrafficAlertRegParm.Direction = TRAFF_UP;
188964064216a8433360745f69edddce19a606659163The Android Open Source Project    TrafficAlertRegParm.Trigger = TRAFF_EDGE;
189064064216a8433360745f69edddce19a606659163The Android Open Source Project    TrafficAlertRegParm.Threshold = pCtrlData->ctrlDataTrafficIntensityThresholds.uLowThreshold;
189164064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataTrafficThresholdEvents[2] = TrafficMonitor_RegEvent(pCtrlData->hTrafficMonitor,&TrafficAlertRegParm,FALSE);
189264064216a8433360745f69edddce19a606659163The Android Open Source Project
189364064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pCtrlData->ctrlDataTrafficThresholdEvents[2] == NULL)
189464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
189564064216a8433360745f69edddce19a606659163The Android Open Source Project         WLAN_REPORT_ERROR(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
189664064216a8433360745f69edddce19a606659163The Android Open Source Project            (" ctrlData_RegisterTrafficIntensityEvents() : Failed to register low treshold event (TRAFF_UP) \n"));
189764064216a8433360745f69edddce19a606659163The Android Open Source Project         return;
189864064216a8433360745f69edddce19a606659163The Android Open Source Project    }
189964064216a8433360745f69edddce19a606659163The Android Open Source Project
190064064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Register low threshold "direction below" event */
190164064216a8433360745f69edddce19a606659163The Android Open Source Project    TrafficAlertRegParm.Cookie =  CTRL_DATA_TRAFFIC_INTENSITY_LOW_CROSSED_BELOW;
190264064216a8433360745f69edddce19a606659163The Android Open Source Project    TrafficAlertRegParm.Direction = TRAFF_DOWN;
190364064216a8433360745f69edddce19a606659163The Android Open Source Project    TrafficAlertRegParm.Trigger = TRAFF_EDGE;
190464064216a8433360745f69edddce19a606659163The Android Open Source Project    TrafficAlertRegParm.Threshold = pCtrlData->ctrlDataTrafficIntensityThresholds.uLowThreshold;
190564064216a8433360745f69edddce19a606659163The Android Open Source Project    pCtrlData->ctrlDataTrafficThresholdEvents[3] = TrafficMonitor_RegEvent(pCtrlData->hTrafficMonitor,&TrafficAlertRegParm,FALSE);
190664064216a8433360745f69edddce19a606659163The Android Open Source Project
190764064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pCtrlData->ctrlDataTrafficThresholdEvents[3] == NULL)
190864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
190964064216a8433360745f69edddce19a606659163The Android Open Source Project         WLAN_REPORT_ERROR(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
191064064216a8433360745f69edddce19a606659163The Android Open Source Project            (" ctrlData_RegisterTrafficIntensityEvents() : Failed to register low treshold event (TRAFF_DOWN) \n"));
191164064216a8433360745f69edddce19a606659163The Android Open Source Project         return;
191264064216a8433360745f69edddce19a606659163The Android Open Source Project    }
191364064216a8433360745f69edddce19a606659163The Android Open Source Project
191464064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Define the "direction below" and "direction above" events as opposites (events that reset eachother)*/
191564064216a8433360745f69edddce19a606659163The Android Open Source Project    status = TrafficMonitor_SetRstCondition(pCtrlData->hTrafficMonitor,
191664064216a8433360745f69edddce19a606659163The Android Open Source Project                                            pCtrlData->ctrlDataTrafficThresholdEvents[2],
191764064216a8433360745f69edddce19a606659163The Android Open Source Project                                            pCtrlData->ctrlDataTrafficThresholdEvents[3],
191864064216a8433360745f69edddce19a606659163The Android Open Source Project                                            TRUE);
191964064216a8433360745f69edddce19a606659163The Android Open Source Project
192064064216a8433360745f69edddce19a606659163The Android Open Source Project    if (status != OK)
192164064216a8433360745f69edddce19a606659163The Android Open Source Project    {
192264064216a8433360745f69edddce19a606659163The Android Open Source Project      WLAN_REPORT_ERROR (pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
192364064216a8433360745f69edddce19a606659163The Android Open Source Project         ("ctrlData_RegisterTrafficIntensityEvents: TrafficMonitor_SetRstCondition returned status = %d\n",status));
192464064216a8433360745f69edddce19a606659163The Android Open Source Project    }
192564064216a8433360745f69edddce19a606659163The Android Open Source Project
192664064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
192764064216a8433360745f69edddce19a606659163The Android Open Source Project       (" ctrlData_RegisterTrafficIntensityEvents() : finished registering all events \n"));
192864064216a8433360745f69edddce19a606659163The Android Open Source Project
192964064216a8433360745f69edddce19a606659163The Android Open Source Project}
193064064216a8433360745f69edddce19a606659163The Android Open Source Project
193164064216a8433360745f69edddce19a606659163The Android Open Source Project
193264064216a8433360745f69edddce19a606659163The Android Open Source Project/*-----------------------------------------------------------------------------
193364064216a8433360745f69edddce19a606659163The Android Open Source ProjectRoutine Name: ctrlData_TrafficThresholdCrossed
193464064216a8433360745f69edddce19a606659163The Android Open Source ProjectRoutine Description: called whenever traffic intensity threshold is crossed.
193564064216a8433360745f69edddce19a606659163The Android Open Source Project                     notifies event handler to send appropriate event with threshold parameters.
193664064216a8433360745f69edddce19a606659163The Android Open Source ProjectArguments:
193764064216a8433360745f69edddce19a606659163The Android Open Source ProjectReturn Value:
193864064216a8433360745f69edddce19a606659163The Android Open Source Project-----------------------------------------------------------------------------*/
193964064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid ctrlData_TrafficThresholdCrossed(TI_HANDLE Context,UINT32 Cookie)
194064064216a8433360745f69edddce19a606659163The Android Open Source Project{
194164064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)Context;
194264064216a8433360745f69edddce19a606659163The Android Open Source Project    trafficIntensityThresholdCross_t crossInfo;
194364064216a8433360745f69edddce19a606659163The Android Open Source Project
194464064216a8433360745f69edddce19a606659163The Android Open Source Project    switch(Cookie)
194564064216a8433360745f69edddce19a606659163The Android Open Source Project    {
194664064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_TRAFFIC_INTENSITY_HIGH_CROSSED_ABOVE:
194764064216a8433360745f69edddce19a606659163The Android Open Source Project            crossInfo.thresholdCross = (UINT32)HIGH_THRESHOLD_CROSS;
194864064216a8433360745f69edddce19a606659163The Android Open Source Project            crossInfo.thresholdCrossDirection = (UINT32)CROSS_ABOVE;
194964064216a8433360745f69edddce19a606659163The Android Open Source Project            EvHandlerSendEvent(pCtrlData->hEvHandler, IPC_EVENT_TRAFFIC_INTENSITY_THRESHOLD_CROSSED, (UINT8 *)&crossInfo,sizeof(trafficIntensityThresholdCross_t));
195064064216a8433360745f69edddce19a606659163The Android Open Source Project       break;
195164064216a8433360745f69edddce19a606659163The Android Open Source Project
195264064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_TRAFFIC_INTENSITY_HIGH_CROSSED_BELOW:
195364064216a8433360745f69edddce19a606659163The Android Open Source Project            crossInfo.thresholdCross = (UINT32)HIGH_THRESHOLD_CROSS;
195464064216a8433360745f69edddce19a606659163The Android Open Source Project            crossInfo.thresholdCrossDirection = (UINT32)CROSS_BELOW;
195564064216a8433360745f69edddce19a606659163The Android Open Source Project            EvHandlerSendEvent(pCtrlData->hEvHandler, IPC_EVENT_TRAFFIC_INTENSITY_THRESHOLD_CROSSED, (UINT8 *)&crossInfo,sizeof(trafficIntensityThresholdCross_t));
195664064216a8433360745f69edddce19a606659163The Android Open Source Project       break;
195764064216a8433360745f69edddce19a606659163The Android Open Source Project
195864064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_TRAFFIC_INTENSITY_LOW_CROSSED_ABOVE:
195964064216a8433360745f69edddce19a606659163The Android Open Source Project            crossInfo.thresholdCross = (UINT32)LOW_THRESHOLD_CROSS;
196064064216a8433360745f69edddce19a606659163The Android Open Source Project            crossInfo.thresholdCrossDirection = (UINT32)CROSS_ABOVE;
196164064216a8433360745f69edddce19a606659163The Android Open Source Project            EvHandlerSendEvent(pCtrlData->hEvHandler, IPC_EVENT_TRAFFIC_INTENSITY_THRESHOLD_CROSSED, (UINT8 *)&crossInfo,sizeof(trafficIntensityThresholdCross_t));
196264064216a8433360745f69edddce19a606659163The Android Open Source Project       break;
196364064216a8433360745f69edddce19a606659163The Android Open Source Project
196464064216a8433360745f69edddce19a606659163The Android Open Source Project    case CTRL_DATA_TRAFFIC_INTENSITY_LOW_CROSSED_BELOW:
196564064216a8433360745f69edddce19a606659163The Android Open Source Project            crossInfo.thresholdCross = (UINT32)LOW_THRESHOLD_CROSS;
196664064216a8433360745f69edddce19a606659163The Android Open Source Project            crossInfo.thresholdCrossDirection = (UINT32)CROSS_BELOW;
196764064216a8433360745f69edddce19a606659163The Android Open Source Project            EvHandlerSendEvent(pCtrlData->hEvHandler, IPC_EVENT_TRAFFIC_INTENSITY_THRESHOLD_CROSSED, (UINT8 *)&crossInfo,sizeof(trafficIntensityThresholdCross_t));
196864064216a8433360745f69edddce19a606659163The Android Open Source Project       break;
196964064216a8433360745f69edddce19a606659163The Android Open Source Project    default:
197064064216a8433360745f69edddce19a606659163The Android Open Source Project         WLAN_REPORT_ERROR(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
197164064216a8433360745f69edddce19a606659163The Android Open Source Project                (" ctrlData_TrafficThresholdCrossed() : Unknown cookie received from traffic monitor !!! \n"));
197264064216a8433360745f69edddce19a606659163The Android Open Source Project       break;
197364064216a8433360745f69edddce19a606659163The Android Open Source Project   }
197464064216a8433360745f69edddce19a606659163The Android Open Source Project
197564064216a8433360745f69edddce19a606659163The Android Open Source Project}
197664064216a8433360745f69edddce19a606659163The Android Open Source Project
197764064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************
197864064216a8433360745f69edddce19a606659163The Android Open Source Project*                           ctrlData_buildHwBitMapFromArray                 *
197964064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************
198064064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:  builds HwRatesBitMap (supported rates) for txRatePolicy
198164064216a8433360745f69edddce19a606659163The Android Open Source Project*               using an array that consist number of retries for each rate
198264064216a8433360745f69edddce19a606659163The Android Open Source Project*               all ew do is : if retry > 0 than the HwBit is ON.
198364064216a8433360745f69edddce19a606659163The Android Open Source Project*
198464064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS:       Array of retries
198564064216a8433360745f69edddce19a606659163The Android Open Source Project*
198664064216a8433360745f69edddce19a606659163The Android Open Source Project* OUTPUT:       Bit Map of Hw rates.
198764064216a8433360745f69edddce19a606659163The Android Open Source Project*
198864064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS:      Bit Map of Hw rates.
198964064216a8433360745f69edddce19a606659163The Android Open Source Project*
199064064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************/
199164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic UINT32 ctrlData_buildHwBitMapFromArray(policyClassRatesArray_t *pArray)
199264064216a8433360745f69edddce19a606659163The Android Open Source Project{
199364064216a8433360745f69edddce19a606659163The Android Open Source Project    txRateClassId_e  TxRateIndex;
199464064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32 policyRateMask = 0;
199564064216a8433360745f69edddce19a606659163The Android Open Source Project    rateMask_e tempArray[MAX_NUM_OF_TX_RATES_IN_CLASS] =
199664064216a8433360745f69edddce19a606659163The Android Open Source Project    {
199764064216a8433360745f69edddce19a606659163The Android Open Source Project    DRV_RATE_MASK_54_OFDM,DRV_RATE_MASK_48_OFDM,DRV_RATE_MASK_36_OFDM,
199864064216a8433360745f69edddce19a606659163The Android Open Source Project    DRV_RATE_MASK_24_OFDM,DRV_RATE_MASK_22_PBCC,DRV_RATE_MASK_18_OFDM,
199964064216a8433360745f69edddce19a606659163The Android Open Source Project    DRV_RATE_MASK_12_OFDM,DRV_RATE_MASK_11_CCK,DRV_RATE_MASK_9_OFDM,
200064064216a8433360745f69edddce19a606659163The Android Open Source Project    DRV_RATE_MASK_6_OFDM,DRV_RATE_MASK_5_5_CCK,DRV_RATE_MASK_2_BARKER,
200164064216a8433360745f69edddce19a606659163The Android Open Source Project    DRV_RATE_MASK_1_BARKER};
200264064216a8433360745f69edddce19a606659163The Android Open Source Project
200364064216a8433360745f69edddce19a606659163The Android Open Source Project
200464064216a8433360745f69edddce19a606659163The Android Open Source Project
200564064216a8433360745f69edddce19a606659163The Android Open Source Project    for (TxRateIndex = txPolicy54; TxRateIndex < MAX_NUM_OF_TX_RATES_IN_CLASS; TxRateIndex++)
200664064216a8433360745f69edddce19a606659163The Android Open Source Project    {
200764064216a8433360745f69edddce19a606659163The Android Open Source Project        if (pArray->txRate[TxRateIndex] > 0 )
200864064216a8433360745f69edddce19a606659163The Android Open Source Project        {
200964064216a8433360745f69edddce19a606659163The Android Open Source Project            policyRateMask |= tempArray[TxRateIndex];
201064064216a8433360745f69edddce19a606659163The Android Open Source Project        }
201164064216a8433360745f69edddce19a606659163The Android Open Source Project    }
201264064216a8433360745f69edddce19a606659163The Android Open Source Project
201364064216a8433360745f69edddce19a606659163The Android Open Source Project    return policyRateMask;
201464064216a8433360745f69edddce19a606659163The Android Open Source Project}
201564064216a8433360745f69edddce19a606659163The Android Open Source Project
201664064216a8433360745f69edddce19a606659163The Android Open Source Project
201764064216a8433360745f69edddce19a606659163The Android Open Source Project/*************************************************************************
201864064216a8433360745f69edddce19a606659163The Android Open Source Project *                                                                       *
201964064216a8433360745f69edddce19a606659163The Android Open Source Project *                          DEBUG FUNCTIONS                              *
202064064216a8433360745f69edddce19a606659163The Android Open Source Project *                                                                       *
202164064216a8433360745f69edddce19a606659163The Android Open Source Project *************************************************************************/
202264064216a8433360745f69edddce19a606659163The Android Open Source Project
202364064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid ctrlData_printTxParameters(TI_HANDLE hCtrlData)
202464064216a8433360745f69edddce19a606659163The Android Open Source Project{
202564064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("            Tx Parameters            \n"));
202664064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("-------------------------------------\n"));
202764064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("currentPreamble                     = %d\n\n",((ctrlData_t *)hCtrlData)->ctrlDataCurrentPreambleType));
202864064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("currentModulation                   = %d\n",  ((ctrlData_t *)hCtrlData)->ctrlDataCurrentModulationType));
202964064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("ctrlDataCurrentBasicModulationType  = %d\n",  ((ctrlData_t *)hCtrlData)->ctrlDataCurrentBasicModulationType));
203064064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("ctrlDataCurrentBasicRate            = %d\n",  ((ctrlData_t *)hCtrlData)->ctrlDataCurrentBasicRate));
203164064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("ctrlDataBasicRateBitMask            = 0x%X\n",((ctrlData_t *)hCtrlData)->ctrlDataBasicRateBitMask));
203264064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("ctrlDataCurrentRateMask             = 0x%X\n",((ctrlData_t *)hCtrlData)->ctrlDataCurrentRateMask));
203364064216a8433360745f69edddce19a606659163The Android Open Source Project}
203464064216a8433360745f69edddce19a606659163The Android Open Source Project
203564064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid ctrlData_printRateAdaptation(TI_HANDLE hCtrlData)
203664064216a8433360745f69edddce19a606659163The Android Open Source Project{
203764064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
203864064216a8433360745f69edddce19a606659163The Android Open Source Project
203964064216a8433360745f69edddce19a606659163The Android Open Source Project    rateAdaptation_print(pCtrlData->pRateAdaptation);
204064064216a8433360745f69edddce19a606659163The Android Open Source Project}
204164064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef SUPPORT_4X
204264064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid ctrlData_printFourX(TI_HANDLE hCtrlData)
204364064216a8433360745f69edddce19a606659163The Android Open Source Project{
204464064216a8433360745f69edddce19a606659163The Android Open Source Project    ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
204564064216a8433360745f69edddce19a606659163The Android Open Source Project
204664064216a8433360745f69edddce19a606659163The Android Open Source Project    fourX_printParams(pCtrlData->pFourX);
204764064216a8433360745f69edddce19a606659163The Android Open Source Project}
204864064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
204964064216a8433360745f69edddce19a606659163The Android Open Source Project
205064064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid ctrlData_printCtrlBlock(TI_HANDLE hCtrlData)
205164064216a8433360745f69edddce19a606659163The Android Open Source Project{
205264064216a8433360745f69edddce19a606659163The Android Open Source Project    rateClassClients_e  clientID;
205364064216a8433360745f69edddce19a606659163The Android Open Source Project    txRateClassId_e  TxRateIndex;
205464064216a8433360745f69edddce19a606659163The Android Open Source Project
205564064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("    CtrlData BLock    \n"));
205664064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("----------------------\n"));
205764064216a8433360745f69edddce19a606659163The Android Open Source Project
205864064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("hSiteMgr = 0x%X\n",((ctrlData_t *)hCtrlData)->hSiteMgr));
205964064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("hTxData = 0x%X\n",((ctrlData_t *)hCtrlData)->hTxData));
206064064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("hWhalCtrl = 0x%X\n",((ctrlData_t *)hCtrlData)->hWhalCtrl));
206164064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("hOs = 0x%X\n",((ctrlData_t *)hCtrlData)->hOs));
206264064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("hReport = 0x%X\n",((ctrlData_t *)hCtrlData)->hReport));
206364064216a8433360745f69edddce19a606659163The Android Open Source Project
206464064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("ctrlDataDeviceMacAddress = 0x%X.0x%X.0x%X.0x%X.0x%X.0x%X. \n", ((ctrlData_t *)hCtrlData)->ctrlDataDeviceMacAddress.addr[0],
206564064216a8433360745f69edddce19a606659163The Android Open Source Project                                                                                    ((ctrlData_t *)hCtrlData)->ctrlDataDeviceMacAddress.addr[1],
206664064216a8433360745f69edddce19a606659163The Android Open Source Project                                                                                    ((ctrlData_t *)hCtrlData)->ctrlDataDeviceMacAddress.addr[2],
206764064216a8433360745f69edddce19a606659163The Android Open Source Project                                                                                    ((ctrlData_t *)hCtrlData)->ctrlDataDeviceMacAddress.addr[3],
206864064216a8433360745f69edddce19a606659163The Android Open Source Project                                                                                    ((ctrlData_t *)hCtrlData)->ctrlDataDeviceMacAddress.addr[4],
206964064216a8433360745f69edddce19a606659163The Android Open Source Project                                                                                    ((ctrlData_t *)hCtrlData)->ctrlDataDeviceMacAddress.addr[5]));
207064064216a8433360745f69edddce19a606659163The Android Open Source Project
207164064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("ctrlDataCurrentBSSID = 0x%X.0x%X.0x%X.0x%X.0x%X.0x%X. \n", ((ctrlData_t *)hCtrlData)->ctrlDataCurrentBSSID.addr[0],
207264064216a8433360745f69edddce19a606659163The Android Open Source Project                                                                                ((ctrlData_t *)hCtrlData)->ctrlDataCurrentBSSID.addr[1],
207364064216a8433360745f69edddce19a606659163The Android Open Source Project                                                                                ((ctrlData_t *)hCtrlData)->ctrlDataCurrentBSSID.addr[2],
207464064216a8433360745f69edddce19a606659163The Android Open Source Project                                                                                ((ctrlData_t *)hCtrlData)->ctrlDataCurrentBSSID.addr[3],
207564064216a8433360745f69edddce19a606659163The Android Open Source Project                                                                                ((ctrlData_t *)hCtrlData)->ctrlDataCurrentBSSID.addr[4],
207664064216a8433360745f69edddce19a606659163The Android Open Source Project                                                                                ((ctrlData_t *)hCtrlData)->ctrlDataCurrentBSSID.addr[5]));
207764064216a8433360745f69edddce19a606659163The Android Open Source Project
207864064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("ctrlDataRateControlEnable = %d\n",((ctrlData_t *)hCtrlData)->ctrlDataRateControlEnable));
207964064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("ctrlDataFourXEnable = %d\n",((ctrlData_t *)hCtrlData)->ctrlDataFourXEnable));
208064064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("ctrlDataFourCurrState = %d\n",((ctrlData_t *)hCtrlData)->ctrlDataCerruentFourXstate));
208164064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("ctrlDataStartStoplinkControlAlg = %d\n",((ctrlData_t *)hCtrlData)->ctrlDataStartStoplinkControlAlg));
208264064216a8433360745f69edddce19a606659163The Android Open Source Project
208364064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("ctrlDataCurrentBssType = %d\n",((ctrlData_t *)hCtrlData)->ctrlDataCurrentBssType));
208464064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("ctrlDataCurrentModulationType = %d\n",((ctrlData_t *)hCtrlData)->ctrlDataCurrentModulationType));
208564064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("ctrlDataCurrentBasicRate = %d\n",((ctrlData_t *)hCtrlData)->ctrlDataCurrentBasicRate));
208664064216a8433360745f69edddce19a606659163The Android Open Source Project
208764064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("ctrlDataBasicRateBitMask = 0x%X\n",((ctrlData_t *)hCtrlData)->ctrlDataBasicRateBitMask));
208864064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("ctrlDataCurrentRateMask = 0x%X\n",((ctrlData_t *)hCtrlData)->ctrlDataCurrentRateMask));
208964064216a8433360745f69edddce19a606659163The Android Open Source Project
209064064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("ctrlDataCurrentBasicModulationType = %d\n",((ctrlData_t *)hCtrlData)->ctrlDataCurrentBasicModulationType));
209164064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("ctrlDataCurrentPreambleType = %d\n",((ctrlData_t *)hCtrlData)->ctrlDataCurrentPreambleType));
209264064216a8433360745f69edddce19a606659163The Android Open Source Project
209364064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("Traffic Intensity threshold events status: %s\n", (((ctrlData_t *)hCtrlData)->ctrlDataTrafficIntensityEventsEnabled ? "Enabled" : "Disabled")));
209464064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("Traffic Intensity high threshold: %d packets/sec \n", ((ctrlData_t *)hCtrlData)->ctrlDataTrafficIntensityThresholds.uHighThreshold));
209564064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("Traffic Intensity low threshold: %d packets/sec \n", ((ctrlData_t *)hCtrlData)->ctrlDataTrafficIntensityThresholds.uLowThreshold));
209664064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("Traffic Intensity test interval: %d ms\n", ((ctrlData_t *)hCtrlData)->ctrlDataTrafficIntensityThresholds.TestInterval));
209764064216a8433360745f69edddce19a606659163The Android Open Source Project
209864064216a8433360745f69edddce19a606659163The Android Open Source Project    for (clientID = (rateClassClients_e)0 ; clientID < NUM_OF_RATE_CLASS_CLIENTS ; clientID++)
209964064216a8433360745f69edddce19a606659163The Android Open Source Project    {
210064064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_OS_REPORT((" client = %d : bIsClassAvailable = %s currMask = 0x%x nextMask = 0x%x \n",
210164064216a8433360745f69edddce19a606659163The Android Open Source Project             clientID,(TRUE == ((ctrlData_t *)hCtrlData)->bIsClassAvailable[clientID] ? "TRUE" : "FALSE"),
210264064216a8433360745f69edddce19a606659163The Android Open Source Project             ((ctrlData_t *)hCtrlData)->currClientRateMask[clientID],((ctrlData_t *)hCtrlData)->nextClientRateMask[clientID]));
210364064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_OS_REPORT(("Policy for client %d (starting from 54): \n",clientID));
210464064216a8433360745f69edddce19a606659163The Android Open Source Project        for (TxRateIndex = txPolicy54; TxRateIndex < MAX_NUM_OF_TX_RATES_IN_CLASS; TxRateIndex++)
210564064216a8433360745f69edddce19a606659163The Android Open Source Project        {
210664064216a8433360745f69edddce19a606659163The Android Open Source Project            WLAN_OS_REPORT(("retries for rate %d = %d\n",TxRateIndex,((ctrlData_t *)hCtrlData)->ctrlDataTxRatePolicy.rateClass[clientID*MAX_NUM_OF_AC].txRate[TxRateIndex]));
210764064216a8433360745f69edddce19a606659163The Android Open Source Project        }
210864064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_OS_REPORT(("Long retry = %d  ,  Short retry = %d\n",
210964064216a8433360745f69edddce19a606659163The Android Open Source Project            ((ctrlData_t *)hCtrlData)->ctrlDataTxRatePolicy.rateClass[clientID].longRetryLimit,((ctrlData_t *)hCtrlData)->ctrlDataTxRatePolicy.rateClass[clientID*MAX_NUM_OF_AC].shortRetryLimit));
211064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
211164064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("current used client %d\n",((ctrlData_t *)hCtrlData)->currClientRateID));
211264064216a8433360745f69edddce19a606659163The Android Open Source Project}
211364064216a8433360745f69edddce19a606659163The Android Open Source Project
211464064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid ctrlData_printCtrlCounters(TI_HANDLE hCtrlData)
211564064216a8433360745f69edddce19a606659163The Android Open Source Project{
211664064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("    CtrlData Counters    \n"));
211764064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("-------------------------\n"));
211864064216a8433360745f69edddce19a606659163The Android Open Source Project
211964064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("icvFailCounter        = %d\n",((ctrlData_t *)hCtrlData)->ctrlDataCounters.icvFailCounter));
212064064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("keyNotFoundCounter    = %d\n",((ctrlData_t *)hCtrlData)->ctrlDataCounters.keyNotFoundCounter));
212164064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("MicFailureCounter     = %d\n",((ctrlData_t *)hCtrlData)->ctrlDataCounters.MicFailureCounter));
212264064216a8433360745f69edddce19a606659163The Android Open Source Project}
212364064216a8433360745f69edddce19a606659163The Android Open Source Project
212464064216a8433360745f69edddce19a606659163The Android Open Source Project
212564064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG
212664064216a8433360745f69edddce19a606659163The Android Open Source Project
212764064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid ctrlData_printClsfrTable ( TI_HANDLE hCtrlData )
212864064216a8433360745f69edddce19a606659163The Android Open Source Project{
212964064216a8433360745f69edddce19a606659163The Android Open Source Project   ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
213064064216a8433360745f69edddce19a606659163The Android Open Source Project   Classifier_dbgPrintClsfrTable (pCtrlData->pClsfr);
213164064216a8433360745f69edddce19a606659163The Android Open Source Project}
213264064216a8433360745f69edddce19a606659163The Android Open Source Project
213364064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid ctrlData_clearClsfrTable ( TI_HANDLE hCtrlData )
213464064216a8433360745f69edddce19a606659163The Android Open Source Project{
213564064216a8433360745f69edddce19a606659163The Android Open Source Project   clsfrTypeAndSupport myLocalType;
213664064216a8433360745f69edddce19a606659163The Android Open Source Project   ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
213764064216a8433360745f69edddce19a606659163The Android Open Source Project
213864064216a8433360745f69edddce19a606659163The Android Open Source Project   Classifier_getClsfrType (pCtrlData->pClsfr,&myLocalType);
213964064216a8433360745f69edddce19a606659163The Android Open Source Project   ctrlData_clsfrSetClsfrType (pCtrlData,myLocalType);
214064064216a8433360745f69edddce19a606659163The Android Open Source Project}
214164064216a8433360745f69edddce19a606659163The Android Open Source Project
214264064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
214364064216a8433360745f69edddce19a606659163The Android Open Source Project
214464064216a8433360745f69edddce19a606659163The Android Open Source Project
214564064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************
214664064216a8433360745f69edddce19a606659163The Android Open Source Project*                           ctrlData_storeTSRateSet
214764064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************
214864064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:  This function translates TSRS rates into map of retransmissions
214964064216a8433360745f69edddce19a606659163The Android Open Source Project*               similar to predefined clients rates retransmissions, and stores
215064064216a8433360745f69edddce19a606659163The Android Open Source Project*               in the Ctrl database
215164064216a8433360745f69edddce19a606659163The Android Open Source Project*
215264064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS:       pCtrlData - the object
215364064216a8433360745f69edddce19a606659163The Android Open Source Project*               acID
215464064216a8433360745f69edddce19a606659163The Android Open Source Project*               rates array
215564064216a8433360745f69edddce19a606659163The Android Open Source Project*
215664064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS:      -
215764064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************/
215864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void ctrlData_storeTSRateSet(ctrlData_t *pCtrlData, txDataQosParams_t *tsrsParams)
215964064216a8433360745f69edddce19a606659163The Android Open Source Project{
216064064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32 rateCount;
216164064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32 acID, rateID;
216264064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32 tsrsRequestedMap;
216364064216a8433360745f69edddce19a606659163The Android Open Source Project    rate_e rateNumber;
216464064216a8433360745f69edddce19a606659163The Android Open Source Project    rateClassClients_e clientNumber;
216564064216a8433360745f69edddce19a606659163The Android Open Source Project    txRateClassId_e rate_e_to_txRateClassId_e[DRV_RATE_MAX+1] =
216664064216a8433360745f69edddce19a606659163The Android Open Source Project    {
216764064216a8433360745f69edddce19a606659163The Android Open Source Project        txPolicy1,  txPolicy1, txPolicy2, txPolicy5_5, txPolicy11,
216864064216a8433360745f69edddce19a606659163The Android Open Source Project        txPolicy22, txPolicy6, txPolicy9, txPolicy12,  txPolicy18,
216964064216a8433360745f69edddce19a606659163The Android Open Source Project        txPolicy24, txPolicy36, txPolicy48, txPolicy54
217064064216a8433360745f69edddce19a606659163The Android Open Source Project    };
217164064216a8433360745f69edddce19a606659163The Android Open Source Project
217264064216a8433360745f69edddce19a606659163The Android Open Source Project    acID = tsrsParams->acID;
217364064216a8433360745f69edddce19a606659163The Android Open Source Project    os_memoryZero(pCtrlData->hOs,
217464064216a8433360745f69edddce19a606659163The Android Open Source Project                  &(pCtrlData->tsrsParameters[acID]),
217564064216a8433360745f69edddce19a606659163The Android Open Source Project                  sizeof(pCtrlData->tsrsParameters[acID]));
217664064216a8433360745f69edddce19a606659163The Android Open Source Project
217764064216a8433360745f69edddce19a606659163The Android Open Source Project
217864064216a8433360745f69edddce19a606659163The Android Open Source Project    for (clientNumber = (rateClassClients_e)0; clientNumber < NUM_OF_RATE_CLASS_CLIENTS; clientNumber++)
217964064216a8433360745f69edddce19a606659163The Android Open Source Project    {
218064064216a8433360745f69edddce19a606659163The Android Open Source Project        tsrsRequestedMap = 0;
218164064216a8433360745f69edddce19a606659163The Android Open Source Project
218264064216a8433360745f69edddce19a606659163The Android Open Source Project        for (rateCount = 0; rateCount < tsrsParams->tsrsArrLen; rateCount++)
218364064216a8433360745f69edddce19a606659163The Android Open Source Project        {
218464064216a8433360745f69edddce19a606659163The Android Open Source Project            /* Erase Most significant bit in case it was raised to mark nominal PHY rates (& 0x7F) */
218564064216a8433360745f69edddce19a606659163The Android Open Source Project            /* Convert multiplication of 500kb/sec to rate_e and then to txRateClassId_e */
218664064216a8433360745f69edddce19a606659163The Android Open Source Project            /* and update retransmission map in accordance to USER_RATE client definitions */
218764064216a8433360745f69edddce19a606659163The Android Open Source Project            rateNumber = RateNumberToHost((tsrsParams->tsrsArr[rateCount] & 0x7F) >> 1);
218864064216a8433360745f69edddce19a606659163The Android Open Source Project            rateID = rate_e_to_txRateClassId_e[rateNumber];
218964064216a8433360745f69edddce19a606659163The Android Open Source Project
219064064216a8433360745f69edddce19a606659163The Android Open Source Project            /* Update Rate Fallback policy map according to the class predefined policy map */
219164064216a8433360745f69edddce19a606659163The Android Open Source Project            if (pCtrlData->pCurrPolicyClassRatesArray[clientNumber].txRate[rateID] > 0)
219264064216a8433360745f69edddce19a606659163The Android Open Source Project            {
219364064216a8433360745f69edddce19a606659163The Android Open Source Project                pCtrlData->tsrsParameters[acID].policyClassRateMask[clientNumber] |= (1<<(rateNumber-1));
219464064216a8433360745f69edddce19a606659163The Android Open Source Project            }
219564064216a8433360745f69edddce19a606659163The Android Open Source Project            tsrsRequestedMap |= (1<<(rateNumber-1));
219664064216a8433360745f69edddce19a606659163The Android Open Source Project        }
219764064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Update supportedRatesMask according to TSRS rates and rates supported for this class */
219864064216a8433360745f69edddce19a606659163The Android Open Source Project        pCtrlData->tsrsParameters[acID].supportedRatesMask[clientNumber] =
219964064216a8433360745f69edddce19a606659163The Android Open Source Project            pCtrlData->nextClientRateMask[clientNumber] & tsrsRequestedMap;
220064064216a8433360745f69edddce19a606659163The Android Open Source Project
220164064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Check that Rate Fallback policy map is not empty; if this is a case, ignore pre-defined policy */
220264064216a8433360745f69edddce19a606659163The Android Open Source Project        if (pCtrlData->tsrsParameters[acID].policyClassRateMask[clientNumber] == 0)
220364064216a8433360745f69edddce19a606659163The Android Open Source Project        {
220464064216a8433360745f69edddce19a606659163The Android Open Source Project            pCtrlData->tsrsParameters[acID].policyClassRateMask[clientNumber] =
220564064216a8433360745f69edddce19a606659163The Android Open Source Project                pCtrlData->tsrsParameters[acID].supportedRatesMask[clientNumber];
220664064216a8433360745f69edddce19a606659163The Android Open Source Project        }
220764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
220864064216a8433360745f69edddce19a606659163The Android Open Source Project}
220964064216a8433360745f69edddce19a606659163The Android Open Source Project
221064064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************
221164064216a8433360745f69edddce19a606659163The Android Open Source Project*                           ctrlData_getClosestTSRate
221264064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************
221364064216a8433360745f69edddce19a606659163The Android Open Source Project* DESCRIPTION:  This function checks if the TSRS is defined for the requested
221464064216a8433360745f69edddce19a606659163The Android Open Source Project*               access category or not; if requested, it chooses from the TSRS
221564064216a8433360745f69edddce19a606659163The Android Open Source Project*               a rate that is as close as possible to the requestede one.
221664064216a8433360745f69edddce19a606659163The Android Open Source Project*
221764064216a8433360745f69edddce19a606659163The Android Open Source Project* INPUTS:       pCtrlData - the object
221864064216a8433360745f69edddce19a606659163The Android Open Source Project*               acID
221964064216a8433360745f69edddce19a606659163The Android Open Source Project*
222064064216a8433360745f69edddce19a606659163The Android Open Source Project* RETURNS:      -
222164064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************/
222264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic rate_e ctrlData_getClosestTSRate(ctrlData_t *pCtrlData, UINT32 ac, rate_e givenRate)
222364064216a8433360745f69edddce19a606659163The Android Open Source Project{
222464064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32 tsRate;
222564064216a8433360745f69edddce19a606659163The Android Open Source Project    rate_e resultRate;
222664064216a8433360745f69edddce19a606659163The Android Open Source Project
222764064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pCtrlData->tsrsParameters[ac].supportedRatesMask[pCtrlData->currClientRateID] != 0)
222864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
222964064216a8433360745f69edddce19a606659163The Android Open Source Project        /* From TSRS rates, choose the closest to the basic rate */
223064064216a8433360745f69edddce19a606659163The Android Open Source Project        /* ((1 << givenRate) - 1) gives a map of all rates <= givenRate */
223164064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Logical AND with TSRS supported rates gives a map of supported rates <= givenRate */
223264064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Now just pick the maximal */
223364064216a8433360745f69edddce19a606659163The Android Open Source Project        tsRate = pCtrlData->tsrsParameters[ac].supportedRatesMask[pCtrlData->currClientRateID]
223464064216a8433360745f69edddce19a606659163The Android Open Source Project                    & ((1 << givenRate) - 1);
223564064216a8433360745f69edddce19a606659163The Android Open Source Project        resultRate = calculateMaxSupportedRate(&tsRate);
223664064216a8433360745f69edddce19a606659163The Android Open Source Project
223764064216a8433360745f69edddce19a606659163The Android Open Source Project        if (resultRate == DRV_RATE_INVALID)
223864064216a8433360745f69edddce19a606659163The Android Open Source Project        {
223964064216a8433360745f69edddce19a606659163The Android Open Source Project            return givenRate;
224064064216a8433360745f69edddce19a606659163The Android Open Source Project        }
224164064216a8433360745f69edddce19a606659163The Android Open Source Project        else
224264064216a8433360745f69edddce19a606659163The Android Open Source Project        {
224364064216a8433360745f69edddce19a606659163The Android Open Source Project            return resultRate;
224464064216a8433360745f69edddce19a606659163The Android Open Source Project        }
224564064216a8433360745f69edddce19a606659163The Android Open Source Project    }
224664064216a8433360745f69edddce19a606659163The Android Open Source Project    else
224764064216a8433360745f69edddce19a606659163The Android Open Source Project    {
224864064216a8433360745f69edddce19a606659163The Android Open Source Project        return givenRate;
224964064216a8433360745f69edddce19a606659163The Android Open Source Project    }
225064064216a8433360745f69edddce19a606659163The Android Open Source Project}
225164064216a8433360745f69edddce19a606659163The Android Open Source Project
2252