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/*																		   */
3864064216a8433360745f69edddce19a606659163The Android Open Source Project/*	  MODULE:	tx.h												       */
3964064216a8433360745f69edddce19a606659163The Android Open Source Project/*    PURPOSE:	Tx module Header file		 							   */
4064064216a8433360745f69edddce19a606659163The Android Open Source Project/*																		   */
4164064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************/
4264064216a8433360745f69edddce19a606659163The Android Open Source Project#ifndef _RATE_ADAPTATION_H_
4364064216a8433360745f69edddce19a606659163The Android Open Source Project#define _RATE_ADAPTATION_H_
4464064216a8433360745f69edddce19a606659163The Android Open Source Project
4564064216a8433360745f69edddce19a606659163The Android Open Source Project#include "osTIType.h"
4664064216a8433360745f69edddce19a606659163The Android Open Source Project#include "paramIn.h"
4764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "paramOut.h"
4864064216a8433360745f69edddce19a606659163The Android Open Source Project
4964064216a8433360745f69edddce19a606659163The Android Open Source Project#define 	DEF_LOW_RATE_THRESHOLD 				DRV_RATE_AUTO  /* TBD Below this rate generate roaming event */
5064064216a8433360745f69edddce19a606659163The Android Open Source Project
5164064216a8433360745f69edddce19a606659163The Android Open Source Project#define RATE_ADAPTATION_MODULE_LOG				CTRL_DATA_MODULE_LOG
5264064216a8433360745f69edddce19a606659163The Android Open Source Project
5364064216a8433360745f69edddce19a606659163The Android Open Source Project
5464064216a8433360745f69edddce19a606659163The Android Open Source Project#define TS_EXCEEDS(currTime,expTime) (currTime > expTime)
5564064216a8433360745f69edddce19a606659163The Android Open Source Project#define TS_ADVANCE(currTime,expTime,delta) (expTime = currTime + (delta))
5664064216a8433360745f69edddce19a606659163The Android Open Source Project
5764064216a8433360745f69edddce19a606659163The Android Open Source Project
5864064216a8433360745f69edddce19a606659163The Android Open Source Project/*#define NUM_OF_RATES_ENTRIES			5*/
5964064216a8433360745f69edddce19a606659163The Android Open Source Project
6064064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef struct
6164064216a8433360745f69edddce19a606659163The Android Open Source Project{
6264064216a8433360745f69edddce19a606659163The Android Open Source Project	rate_e				rate;
6364064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT8				rateNumber; /* Rate as actual number - used to compare 2 rates */
6464064216a8433360745f69edddce19a606659163The Android Open Source Project	modulationType_e	modulation;
6564064216a8433360745f69edddce19a606659163The Android Open Source Project	BOOL				fourXEnable;
6664064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT8				rateAdaptFallBack;
6764064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT8				rateAdaptStepUp;
6864064216a8433360745f69edddce19a606659163The Android Open Source Project	BOOL				valid;
6964064216a8433360745f69edddce19a606659163The Android Open Source Project
7064064216a8433360745f69edddce19a606659163The Android Open Source Project}rateModulation4x_table_t;
7164064216a8433360745f69edddce19a606659163The Android Open Source Project
7264064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef struct
7364064216a8433360745f69edddce19a606659163The Android Open Source Project{
7464064216a8433360745f69edddce19a606659163The Android Open Source Project	TI_HANDLE			hOs;
7564064216a8433360745f69edddce19a606659163The Android Open Source Project	TI_HANDLE			hReport;
7664064216a8433360745f69edddce19a606659163The Android Open Source Project	TI_HANDLE			hCtrlData;
7764064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE           hEvHandler;
7864064216a8433360745f69edddce19a606659163The Android Open Source Project
7964064216a8433360745f69edddce19a606659163The Android Open Source Project
8064064216a8433360745f69edddce19a606659163The Android Open Source Project	/* Rate Adaptation Algorithm Parameters */
8164064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT32				expirTimeTick;
8264064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT32				txCount;
8364064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT32				txFailCount;
8464064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32              txRateFallBackCount;
8564064216a8433360745f69edddce19a606659163The Android Open Source Project    	UINT32				txSkipCount;
8664064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT8				currRateIndex;
8764064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT8				maxRateIndex;
8864064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT8				stepUpFlag;
8964064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT8				stepUpTxPacketsThreshold;		/* RATE_NUM_SETPUP_PKTS	10  The amount of packets to commite the alghorithem after step up.*/
9064064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT8				contTxPacketsThreshold;      /*#define WDRV_TX_RATE_NUM_CONT_PKTS		30  The amount of packets to commite the alghorithem in contiuse.  */
9164064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT8				lowRateThreshold;
9264064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT32				ctrlDataFBShortInterval;
9364064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT32				ctrlDataFBLongInterval;
9464064216a8433360745f69edddce19a606659163The Android Open Source Project
9564064216a8433360745f69edddce19a606659163The Android Open Source Project	TI_HANDLE			pTimer;
9664064216a8433360745f69edddce19a606659163The Android Open Source Project	TI_HANDLE			hAPConnection;
9764064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT32				rateAdapt_timeout;
9864064216a8433360745f69edddce19a606659163The Android Open Source Project
9964064216a8433360745f69edddce19a606659163The Android Open Source Project
10064064216a8433360745f69edddce19a606659163The Android Open Source Project	rateModulation4x_table_t	RatesMap[MAX_SUPPORTED_RATES];
10164064216a8433360745f69edddce19a606659163The Android Open Source Project
10264064216a8433360745f69edddce19a606659163The Android Open Source Project	tspecsRateParameters_t		tspecsRateParameters[MAX_NUM_OF_AC];
10364064216a8433360745f69edddce19a606659163The Android Open Source Project
10464064216a8433360745f69edddce19a606659163The Android Open Source Project} rateAdaptation_t;
10564064216a8433360745f69edddce19a606659163The Android Open Source Project
10664064216a8433360745f69edddce19a606659163The Android Open Source ProjectrateAdaptation_t* rateAdaptation_create(TI_HANDLE hOs);
10764064216a8433360745f69edddce19a606659163The Android Open Source Project
10864064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rateAdaptation_config(rateAdaptation_t*			pRateAdaptation,
10964064216a8433360745f69edddce19a606659163The Android Open Source Project	   							TI_HANDLE					hOs,
11064064216a8433360745f69edddce19a606659163The Android Open Source Project								TI_HANDLE					hReport,
11164064216a8433360745f69edddce19a606659163The Android Open Source Project								TI_HANDLE					hCtrlData,
11264064216a8433360745f69edddce19a606659163The Android Open Source Project                                TI_HANDLE					hEvHandler,
11364064216a8433360745f69edddce19a606659163The Android Open Source Project								TI_HANDLE					hAPConnection,
11464064216a8433360745f69edddce19a606659163The Android Open Source Project								rateAdaptationInitParam_t*	rateAdaptationInitParam);
11564064216a8433360745f69edddce19a606659163The Android Open Source Project
11664064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rateAdaptation_destroy(rateAdaptation_t* pRateAdaptation);
11764064216a8433360745f69edddce19a606659163The Android Open Source Project
11864064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rateAdaptation_start(rateAdaptation_t* pRateAdaptation);
11964064216a8433360745f69edddce19a606659163The Android Open Source Project
12064064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rateAdaptation_stop(rateAdaptation_t* pRateAdaptation);
12164064216a8433360745f69edddce19a606659163The Android Open Source Project
12264064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rateAdaptation_stopTimer(rateAdaptation_t* pRateAdaptation);
12364064216a8433360745f69edddce19a606659163The Android Open Source Project
12464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rateAdaptation_updateRateAdaptation(rateAdaptation_t* pRateAdaptation,
12564064216a8433360745f69edddce19a606659163The Android Open Source Project											  rate_e			actualTxRate,
12664064216a8433360745f69edddce19a606659163The Android Open Source Project											  rate_e			requestTxRate,
12764064216a8433360745f69edddce19a606659163The Android Open Source Project											  UINT32			TxStatus,
12864064216a8433360745f69edddce19a606659163The Android Open Source Project                                              int               txNumWaiting);
12964064216a8433360745f69edddce19a606659163The Android Open Source Project
13064064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rateAdaptation_configLowRateThrsh(rateAdaptation_t* pRateAdaptation, UINT8 rate);
13164064216a8433360745f69edddce19a606659163The Android Open Source Project
13264064216a8433360745f69edddce19a606659163The Android Open Source Project/* Get functions */
13364064216a8433360745f69edddce19a606659163The Android Open Source ProjectrateModulation4x_table_t* rateAdaptation_getCurrent(rateAdaptation_t* pRateAdaptation);
13464064216a8433360745f69edddce19a606659163The Android Open Source Projectrate_e rateAdaptation_getCurrentRate(rateAdaptation_t* pRateAdaptation);
13564064216a8433360745f69edddce19a606659163The Android Open Source ProjectmodulationType_e rateAdaptation_getCurrentModulation(rateAdaptation_t* pRateAdaptation);
13664064216a8433360745f69edddce19a606659163The Android Open Source ProjectBOOL rateAdaptation_getCurrentFourXEnable(rateAdaptation_t* pRateAdaptation);
13764064216a8433360745f69edddce19a606659163The Android Open Source Project
13864064216a8433360745f69edddce19a606659163The Android Open Source Project/* Set functions */
13964064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rateAdaptation_setCurrentRate(rateAdaptation_t* pRateAdaptation, rate_e rate);
14064064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rateAdaptation_setMaxActivRate(rateAdaptation_t* pRateAdaptation, rate_e rate);
14164064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid rateAdaptation_updateModulation(rateAdaptation_t* pRateAdaptation,
14264064216a8433360745f69edddce19a606659163The Android Open Source Project									 modulationType_e modulation,
14364064216a8433360745f69edddce19a606659163The Android Open Source Project									 bssType_e bssType);
14464064216a8433360745f69edddce19a606659163The Android Open Source Project
14564064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid rateAdaptation_update4xEnable(rateAdaptation_t* pRateAdaptation,
14664064216a8433360745f69edddce19a606659163The Android Open Source Project								   BOOL				 enable4x,
14764064216a8433360745f69edddce19a606659163The Android Open Source Project								   bssType_e		 bssType);
14864064216a8433360745f69edddce19a606659163The Android Open Source Project
14964064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rateAdaptation_buildRateMapTable(rateAdaptation_t		*pRateAdaptation,
15064064216a8433360745f69edddce19a606659163The Android Open Source Project										   ctrlData_rateAdapt_t *currTable,
15164064216a8433360745f69edddce19a606659163The Android Open Source Project										   UINT32				supportedBitMap,
15264064216a8433360745f69edddce19a606659163The Android Open Source Project										   UINT32				clientBitMap,
15364064216a8433360745f69edddce19a606659163The Android Open Source Project										   modulationType_e		modulation,
15464064216a8433360745f69edddce19a606659163The Android Open Source Project										   BOOL					enable4x,
15564064216a8433360745f69edddce19a606659163The Android Open Source Project										   bssType_e			bssType);
15664064216a8433360745f69edddce19a606659163The Android Open Source Project
15764064216a8433360745f69edddce19a606659163The Android Open Source Project/* utils functions */
15864064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS rateAdaptation_Utils_IsRateInBitmap(rateAdaptation_t	*pRateAdaptation,
15964064216a8433360745f69edddce19a606659163The Android Open Source Project								UINT32			ratesBitMap,
16064064216a8433360745f69edddce19a606659163The Android Open Source Project								rate_e			rate);
16164064216a8433360745f69edddce19a606659163The Android Open Source Project
16264064216a8433360745f69edddce19a606659163The Android Open Source ProjectUINT32 rateAdaptation_Utils_buildRateBitMap(rateAdaptation_t	*pRateAdaptation,
16364064216a8433360745f69edddce19a606659163The Android Open Source Project											ctrlData_rateAdapt_t *currTable,
16464064216a8433360745f69edddce19a606659163The Android Open Source Project											rate_e			rate,
16564064216a8433360745f69edddce19a606659163The Android Open Source Project											UINT32			supportedBitMap,
16664064216a8433360745f69edddce19a606659163The Android Open Source Project											UINT32			clientBitMap);
16764064216a8433360745f69edddce19a606659163The Android Open Source Project
16864064216a8433360745f69edddce19a606659163The Android Open Source ProjectBOOL rateAdaptation_isRateInTable(ctrlData_rateAdapt_t *currTable,
16964064216a8433360745f69edddce19a606659163The Android Open Source Project								rate_e			rate);
17064064216a8433360745f69edddce19a606659163The Android Open Source Project
17164064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid rateAdaptation_setTspecsRateEvent(rateAdaptation_t* pRateAdaptation,
17264064216a8433360745f69edddce19a606659163The Android Open Source Project											 UINT8			acID,
17364064216a8433360745f69edddce19a606659163The Android Open Source Project											BOOL			enableEvent);
17464064216a8433360745f69edddce19a606659163The Android Open Source Project
17564064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid rateAdaptation_setTspecsRateThresholds(rateAdaptation_t* pRateAdaptation,
17664064216a8433360745f69edddce19a606659163The Android Open Source Project											 UINT8			acID,
17764064216a8433360745f69edddce19a606659163The Android Open Source Project											 UINT8			highRateThreshold,
17864064216a8433360745f69edddce19a606659163The Android Open Source Project											 UINT8			lowRateThreshold);
17964064216a8433360745f69edddce19a606659163The Android Open Source Project
18064064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid rateAdaptation_print(rateAdaptation_t* pRateAdaptation);
18164064216a8433360745f69edddce19a606659163The Android Open Source Project
18264064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
183