cm-kernel /drivers/net/wireless/tiwlan1251/common/src/core/data_ctrl/Ctrl/TrafficMonitor/RateAdaptation.h

Language C/C++ Header Lines 183
MD5 Hash dc86c3e3d6928d24bfb9b2af993f03e6 Estimated Cost $2,408 (why?)
Repository git://github.com/CyanogenMod/cm-kernel.git View Raw File View Project SPDX
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
/****************************************************************************
**+-----------------------------------------------------------------------+**
**|                                                                       |**
**| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved.      |**
**| All rights reserved.                                                  |**
**|                                                                       |**
**| Redistribution and use in source and binary forms, with or without    |**
**| modification, are permitted provided that the following conditions    |**
**| are met:                                                              |**
**|                                                                       |**
**|  * Redistributions of source code must retain the above copyright     |**
**|    notice, this list of conditions and the following disclaimer.      |**
**|  * Redistributions in binary form must reproduce the above copyright  |**
**|    notice, this list of conditions and the following disclaimer in    |**
**|    the documentation and/or other materials provided with the         |**
**|    distribution.                                                      |**
**|  * Neither the name Texas Instruments nor the names of its            |**
**|    contributors may be used to endorse or promote products derived    |**
**|    from this software without specific prior written permission.      |**
**|                                                                       |**
**| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |**
**| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |**
**| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |**
**| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |**
**| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |**
**| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |**
**| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |**
**| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |**
**| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |**
**| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |**
**| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |**
**|                                                                       |**
**+-----------------------------------------------------------------------+**
****************************************************************************/

/***************************************************************************/
/*																		   */
/*	  MODULE:	tx.h												       */
/*    PURPOSE:	Tx module Header file		 							   */
/*																		   */
/***************************************************************************/
#ifndef _RATE_ADAPTATION_H_
#define _RATE_ADAPTATION_H_

#include "osTIType.h"
#include "paramIn.h"
#include "paramOut.h"

#define 	DEF_LOW_RATE_THRESHOLD 				DRV_RATE_AUTO  /* TBD Below this rate generate roaming event */

#define RATE_ADAPTATION_MODULE_LOG				CTRL_DATA_MODULE_LOG


#define TS_EXCEEDS(currTime,expTime) (currTime > expTime)
#define TS_ADVANCE(currTime,expTime,delta) (expTime = currTime + (delta))


/*#define NUM_OF_RATES_ENTRIES			5*/

typedef struct
{
	rate_e				rate;
	UINT8				rateNumber; /* Rate as actual number - used to compare 2 rates */
	modulationType_e	modulation;
	BOOL				fourXEnable;
	UINT8				rateAdaptFallBack;
	UINT8				rateAdaptStepUp; 
	BOOL				valid;

}rateModulation4x_table_t;

typedef struct
{
	TI_HANDLE			hOs;
	TI_HANDLE			hReport;
	TI_HANDLE			hCtrlData;
    TI_HANDLE           hEvHandler;


	/* Rate Adaptation Algorithm Parameters */
	UINT32				expirTimeTick;
	UINT32				txCount;
	UINT32				txFailCount;
    UINT32              txRateFallBackCount;
    	UINT32				txSkipCount;
	UINT8				currRateIndex;
	UINT8				maxRateIndex;
	UINT8				stepUpFlag;
	UINT8				stepUpTxPacketsThreshold;		/* RATE_NUM_SETPUP_PKTS	10  The amount of packets to commite the alghorithem after step up.*/ 
	UINT8				contTxPacketsThreshold;      /*#define WDRV_TX_RATE_NUM_CONT_PKTS		30  The amount of packets to commite the alghorithem in contiuse.  */ 
	UINT8				lowRateThreshold;
	UINT32				ctrlDataFBShortInterval;
	UINT32				ctrlDataFBLongInterval;

	TI_HANDLE			pTimer;
	TI_HANDLE			hAPConnection;
	UINT32				rateAdapt_timeout;

	
	rateModulation4x_table_t	RatesMap[MAX_SUPPORTED_RATES];

	tspecsRateParameters_t		tspecsRateParameters[MAX_NUM_OF_AC];

} rateAdaptation_t;

rateAdaptation_t* rateAdaptation_create(TI_HANDLE hOs);

TI_STATUS rateAdaptation_config(rateAdaptation_t*			pRateAdaptation, 
	   							TI_HANDLE					hOs, 
								TI_HANDLE					hReport, 
								TI_HANDLE					hCtrlData, 
                                TI_HANDLE					hEvHandler,
								TI_HANDLE					hAPConnection,
								rateAdaptationInitParam_t*	rateAdaptationInitParam);

TI_STATUS rateAdaptation_destroy(rateAdaptation_t* pRateAdaptation);

TI_STATUS rateAdaptation_start(rateAdaptation_t* pRateAdaptation);

TI_STATUS rateAdaptation_stop(rateAdaptation_t* pRateAdaptation);

TI_STATUS rateAdaptation_stopTimer(rateAdaptation_t* pRateAdaptation);

TI_STATUS rateAdaptation_updateRateAdaptation(rateAdaptation_t* pRateAdaptation,
											  rate_e			actualTxRate,
											  rate_e			requestTxRate, 
											  UINT32			TxStatus,
                                              int               txNumWaiting);

TI_STATUS rateAdaptation_configLowRateThrsh(rateAdaptation_t* pRateAdaptation, UINT8 rate);

/* Get functions */
rateModulation4x_table_t* rateAdaptation_getCurrent(rateAdaptation_t* pRateAdaptation);	
rate_e rateAdaptation_getCurrentRate(rateAdaptation_t* pRateAdaptation);	
modulationType_e rateAdaptation_getCurrentModulation(rateAdaptation_t* pRateAdaptation);	
BOOL rateAdaptation_getCurrentFourXEnable(rateAdaptation_t* pRateAdaptation);	

/* Set functions */
TI_STATUS rateAdaptation_setCurrentRate(rateAdaptation_t* pRateAdaptation, rate_e rate);
TI_STATUS rateAdaptation_setMaxActivRate(rateAdaptation_t* pRateAdaptation, rate_e rate);	
void rateAdaptation_updateModulation(rateAdaptation_t* pRateAdaptation,
									 modulationType_e modulation,
									 bssType_e bssType);

void rateAdaptation_update4xEnable(rateAdaptation_t* pRateAdaptation,
								   BOOL				 enable4x,
								   bssType_e		 bssType);

TI_STATUS rateAdaptation_buildRateMapTable(rateAdaptation_t		*pRateAdaptation,
										   ctrlData_rateAdapt_t *currTable,
										   UINT32				supportedBitMap,
										   UINT32				clientBitMap,
										   modulationType_e		modulation,
										   BOOL					enable4x,
										   bssType_e			bssType);

/* utils functions */
TI_STATUS rateAdaptation_Utils_IsRateInBitmap(rateAdaptation_t	*pRateAdaptation,
								UINT32			ratesBitMap,
								rate_e			rate);

UINT32 rateAdaptation_Utils_buildRateBitMap(rateAdaptation_t	*pRateAdaptation,
											ctrlData_rateAdapt_t *currTable,
											rate_e			rate,
											UINT32			supportedBitMap,
											UINT32			clientBitMap);

BOOL rateAdaptation_isRateInTable(ctrlData_rateAdapt_t *currTable,
								rate_e			rate);

void rateAdaptation_setTspecsRateEvent(rateAdaptation_t* pRateAdaptation,
											 UINT8			acID,
											BOOL			enableEvent);

void rateAdaptation_setTspecsRateThresholds(rateAdaptation_t* pRateAdaptation,
											 UINT8			acID,
											 UINT8			highRateThreshold,
											 UINT8			lowRateThreshold);

void rateAdaptation_print(rateAdaptation_t* pRateAdaptation);

#endif
Back to Top