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