1/****************************************************************************
2**+-----------------------------------------------------------------------+**
3**|                                                                       |**
4**| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved.      |**
5**| All rights reserved.                                                  |**
6**|                                                                       |**
7**| Redistribution and use in source and binary forms, with or without    |**
8**| modification, are permitted provided that the following conditions    |**
9**| are met:                                                              |**
10**|                                                                       |**
11**|  * Redistributions of source code must retain the above copyright     |**
12**|    notice, this list of conditions and the following disclaimer.      |**
13**|  * Redistributions in binary form must reproduce the above copyright  |**
14**|    notice, this list of conditions and the following disclaimer in    |**
15**|    the documentation and/or other materials provided with the         |**
16**|    distribution.                                                      |**
17**|  * Neither the name Texas Instruments nor the names of its            |**
18**|    contributors may be used to endorse or promote products derived    |**
19**|    from this software without specific prior written permission.      |**
20**|                                                                       |**
21**| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |**
22**| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |**
23**| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |**
24**| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |**
25**| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |**
26**| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |**
27**| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |**
28**| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |**
29**| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |**
30**| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |**
31**| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |**
32**|                                                                       |**
33**+-----------------------------------------------------------------------+**
34****************************************************************************/
35
36/***************************************************************************/
37/*																		   */
38/*	  MODULE:	tx.h												       */
39/*    PURPOSE:	Tx module Header file		 							   */
40/*																		   */
41/***************************************************************************/
42#ifndef _RATE_ADAPTATION_H_
43#define _RATE_ADAPTATION_H_
44
45#include "osTIType.h"
46#include "paramIn.h"
47#include "paramOut.h"
48
49#define 	DEF_LOW_RATE_THRESHOLD 				DRV_RATE_AUTO  /* TBD Below this rate generate roaming event */
50
51#define RATE_ADAPTATION_MODULE_LOG				CTRL_DATA_MODULE_LOG
52
53
54#define TS_EXCEEDS(currTime,expTime) (currTime > expTime)
55#define TS_ADVANCE(currTime,expTime,delta) (expTime = currTime + (delta))
56
57
58/*#define NUM_OF_RATES_ENTRIES			5*/
59
60typedef struct
61{
62	rate_e				rate;
63	UINT8				rateNumber; /* Rate as actual number - used to compare 2 rates */
64	modulationType_e	modulation;
65	BOOL				fourXEnable;
66	UINT8				rateAdaptFallBack;
67	UINT8				rateAdaptStepUp;
68	BOOL				valid;
69
70}rateModulation4x_table_t;
71
72typedef struct
73{
74	TI_HANDLE			hOs;
75	TI_HANDLE			hReport;
76	TI_HANDLE			hCtrlData;
77    TI_HANDLE           hEvHandler;
78
79
80	/* Rate Adaptation Algorithm Parameters */
81	UINT32				expirTimeTick;
82	UINT32				txCount;
83	UINT32				txFailCount;
84    UINT32              txRateFallBackCount;
85    	UINT32				txSkipCount;
86	UINT8				currRateIndex;
87	UINT8				maxRateIndex;
88	UINT8				stepUpFlag;
89	UINT8				stepUpTxPacketsThreshold;		/* RATE_NUM_SETPUP_PKTS	10  The amount of packets to commite the alghorithem after step up.*/
90	UINT8				contTxPacketsThreshold;      /*#define WDRV_TX_RATE_NUM_CONT_PKTS		30  The amount of packets to commite the alghorithem in contiuse.  */
91	UINT8				lowRateThreshold;
92	UINT32				ctrlDataFBShortInterval;
93	UINT32				ctrlDataFBLongInterval;
94
95	TI_HANDLE			pTimer;
96	TI_HANDLE			hAPConnection;
97	UINT32				rateAdapt_timeout;
98
99
100	rateModulation4x_table_t	RatesMap[MAX_SUPPORTED_RATES];
101
102	tspecsRateParameters_t		tspecsRateParameters[MAX_NUM_OF_AC];
103
104} rateAdaptation_t;
105
106rateAdaptation_t* rateAdaptation_create(TI_HANDLE hOs);
107
108TI_STATUS rateAdaptation_config(rateAdaptation_t*			pRateAdaptation,
109	   							TI_HANDLE					hOs,
110								TI_HANDLE					hReport,
111								TI_HANDLE					hCtrlData,
112                                TI_HANDLE					hEvHandler,
113								TI_HANDLE					hAPConnection,
114								rateAdaptationInitParam_t*	rateAdaptationInitParam);
115
116TI_STATUS rateAdaptation_destroy(rateAdaptation_t* pRateAdaptation);
117
118TI_STATUS rateAdaptation_start(rateAdaptation_t* pRateAdaptation);
119
120TI_STATUS rateAdaptation_stop(rateAdaptation_t* pRateAdaptation);
121
122TI_STATUS rateAdaptation_stopTimer(rateAdaptation_t* pRateAdaptation);
123
124TI_STATUS rateAdaptation_updateRateAdaptation(rateAdaptation_t* pRateAdaptation,
125											  rate_e			actualTxRate,
126											  rate_e			requestTxRate,
127											  UINT32			TxStatus,
128                                              int               txNumWaiting);
129
130TI_STATUS rateAdaptation_configLowRateThrsh(rateAdaptation_t* pRateAdaptation, UINT8 rate);
131
132/* Get functions */
133rateModulation4x_table_t* rateAdaptation_getCurrent(rateAdaptation_t* pRateAdaptation);
134rate_e rateAdaptation_getCurrentRate(rateAdaptation_t* pRateAdaptation);
135modulationType_e rateAdaptation_getCurrentModulation(rateAdaptation_t* pRateAdaptation);
136BOOL rateAdaptation_getCurrentFourXEnable(rateAdaptation_t* pRateAdaptation);
137
138/* Set functions */
139TI_STATUS rateAdaptation_setCurrentRate(rateAdaptation_t* pRateAdaptation, rate_e rate);
140TI_STATUS rateAdaptation_setMaxActivRate(rateAdaptation_t* pRateAdaptation, rate_e rate);
141void rateAdaptation_updateModulation(rateAdaptation_t* pRateAdaptation,
142									 modulationType_e modulation,
143									 bssType_e bssType);
144
145void rateAdaptation_update4xEnable(rateAdaptation_t* pRateAdaptation,
146								   BOOL				 enable4x,
147								   bssType_e		 bssType);
148
149TI_STATUS rateAdaptation_buildRateMapTable(rateAdaptation_t		*pRateAdaptation,
150										   ctrlData_rateAdapt_t *currTable,
151										   UINT32				supportedBitMap,
152										   UINT32				clientBitMap,
153										   modulationType_e		modulation,
154										   BOOL					enable4x,
155										   bssType_e			bssType);
156
157/* utils functions */
158TI_STATUS rateAdaptation_Utils_IsRateInBitmap(rateAdaptation_t	*pRateAdaptation,
159								UINT32			ratesBitMap,
160								rate_e			rate);
161
162UINT32 rateAdaptation_Utils_buildRateBitMap(rateAdaptation_t	*pRateAdaptation,
163											ctrlData_rateAdapt_t *currTable,
164											rate_e			rate,
165											UINT32			supportedBitMap,
166											UINT32			clientBitMap);
167
168BOOL rateAdaptation_isRateInTable(ctrlData_rateAdapt_t *currTable,
169								rate_e			rate);
170
171void rateAdaptation_setTspecsRateEvent(rateAdaptation_t* pRateAdaptation,
172											 UINT8			acID,
173											BOOL			enableEvent);
174
175void rateAdaptation_setTspecsRateThresholds(rateAdaptation_t* pRateAdaptation,
176											 UINT8			acID,
177											 UINT8			highRateThreshold,
178											 UINT8			lowRateThreshold);
179
180void rateAdaptation_print(rateAdaptation_t* pRateAdaptation);
181
182#endif
183