| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- /*
- **
- */
- /*! \file "nic_rate.c"
- \brief This file contains the transmission rate handling routines.
- This file contains the transmission rate handling routines for setting up
- ACK/CTS Rate, Highest Tx Rate, Lowest Tx Rate, Initial Tx Rate and do
- conversion between Rate Set and Data Rates.
- */
- /*
- ** Log: rate.c
- **
- ** 07 12 2013 terry.wu
- ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
- ** 1. Update VHT IE composing function
- ** 2. disable bow
- ** 3. Exchange bss/sta rec update sequence for temp solution
- **
- ** 11 06 2012 eason.tsai
- ** [BORA00002255] [MT6630 Wi-Fi][Driver] develop
- ** .
- **
- ** 09 17 2012 cm.chang
- ** [BORA00002149] [MT6630 Wi-Fi] Initial software development
- ** Duplicate source from MT6620 v2.3 driver branch
- ** (Davinci label: MT6620_WIFI_Driver_V2_3_120913_1942_As_MT6630_Base)
- *
- * 07 08 2010 cp.wu
- *
- * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository.
- *
- * 06 08 2010 cp.wu
- * [WPD00003833][MT6620 and MT5931] Driver migration
- * add rate.c.
- *
- * 03 16 2010 kevin.huang
- * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support
- * Add AdHoc Mode
- *
- * 12 18 2009 cm.chang
- * [BORA00000018]Integrate WIFI part into BORA for the 1st time
- * .
- *
- * Nov 23 2009 mtk01461
- * [BORA00000018] Integrate WIFI part into BORA for the 1st time
- * Update comments
- *
- * Nov 16 2009 mtk01461
- * [BORA00000018] Integrate WIFI part into BORA for the 1st time
- * Fix DBGLOG
- *
- * Nov 5 2009 mtk01461
- * [BORA00000018] Integrate WIFI part into BORA for the 1st time
- *
- ** \main\maintrunk.MT5921\12 2008-12-19 17:19:32 GMT mtk01461
- ** Fix the problem that do not ASSERT the length of Supported Rate IE == 8
- ** \main\maintrunk.MT5921\11 2008-12-01 18:17:42 GMT mtk01088
- ** fixed the lint "possible using null pointer" warning
- ** \main\maintrunk.MT5921\10 2008-08-20 00:16:36 GMT mtk01461
- ** Update for Driver Review
- ** \main\maintrunk.MT5921\9 2008-04-13 21:17:13 GMT mtk01461
- ** Revise GEN Link Speed OID
- ** \main\maintrunk.MT5921\8 2008-03-28 10:40:13 GMT mtk01461
- ** Add rateGetRateSetFromDataRates() for set desired rate OID
- ** \main\maintrunk.MT5921\7 2008-03-26 09:16:20 GMT mtk01461
- ** Add adopt operational rate as ACK rate if BasicRateSet was not found
- ** Add comments
- ** \main\maintrunk.MT5921\6 2008-02-21 15:01:39 GMT mtk01461
- ** Add initial rate according rx signal quality support
- ** \main\maintrunk.MT5921\5 2008-01-07 15:06:44 GMT mtk01461
- ** Fix typo of rate adaptation of CtrlResp Frame
- ** \main\maintrunk.MT5921\4 2007-10-25 18:05:12 GMT mtk01461
- ** Add VOIP SCAN Support & Refine Roaming
- */
- /*******************************************************************************
- * C O M P I L E R F L A G S
- ********************************************************************************
- */
- /*******************************************************************************
- * E X T E R N A L R E F E R E N C E S
- ********************************************************************************
- */
- #include "precomp.h"
- /*******************************************************************************
- * C O N S T A N T S
- ********************************************************************************
- */
- const UINT_16 au2RateCCKLong[CCK_RATE_NUM] = {
- RATE_CCK_1M_LONG, /* RATE_1M_INDEX = 0 */
- RATE_CCK_2M_LONG, /* RATE_2M_INDEX */
- RATE_CCK_5_5M_LONG, /* RATE_5_5M_INDEX */
- RATE_CCK_11M_LONG /* RATE_11M_INDEX */
- };
- const UINT_16 au2RateCCKShort[CCK_RATE_NUM] = {
- RATE_CCK_1M_LONG, /* RATE_1M_INDEX = 0 */
- RATE_CCK_2M_SHORT, /* RATE_2M_INDEX */
- RATE_CCK_5_5M_SHORT, /* RATE_5_5M_INDEX */
- RATE_CCK_11M_SHORT /* RATE_11M_INDEX */
- };
- const UINT_16 au2RateOFDM[OFDM_RATE_NUM] = {
- RATE_OFDM_6M, /* RATE_6M_INDEX */
- RATE_OFDM_9M, /* RATE_9M_INDEX */
- RATE_OFDM_12M, /* RATE_12M_INDEX */
- RATE_OFDM_18M, /* RATE_18M_INDEX */
- RATE_OFDM_24M, /* RATE_24M_INDEX */
- RATE_OFDM_36M, /* RATE_36M_INDEX */
- RATE_OFDM_48M, /* RATE_48M_INDEX */
- RATE_OFDM_54M /* RATE_54M_INDEX */
- };
- const UINT_16 au2RateHTMixed[HT_RATE_NUM] = {
- RATE_MM_MCS_32, /* RATE_MCS32_INDEX, */
- RATE_MM_MCS_0, /* RATE_MCS0_INDEX, */
- RATE_MM_MCS_1, /* RATE_MCS1_INDEX, */
- RATE_MM_MCS_2, /* RATE_MCS2_INDEX, */
- RATE_MM_MCS_3, /* RATE_MCS3_INDEX, */
- RATE_MM_MCS_4, /* RATE_MCS4_INDEX, */
- RATE_MM_MCS_5, /* RATE_MCS5_INDEX, */
- RATE_MM_MCS_6, /* RATE_MCS6_INDEX, */
- RATE_MM_MCS_7 /* RATE_MCS7_INDEX, */
- };
- const UINT_16 au2RateHTGreenField[HT_RATE_NUM] = {
- RATE_GF_MCS_32, /* RATE_MCS32_INDEX, */
- RATE_GF_MCS_0, /* RATE_MCS0_INDEX, */
- RATE_GF_MCS_1, /* RATE_MCS1_INDEX, */
- RATE_GF_MCS_2, /* RATE_MCS2_INDEX, */
- RATE_GF_MCS_3, /* RATE_MCS3_INDEX, */
- RATE_GF_MCS_4, /* RATE_MCS4_INDEX, */
- RATE_GF_MCS_5, /* RATE_MCS5_INDEX, */
- RATE_GF_MCS_6, /* RATE_MCS6_INDEX, */
- RATE_GF_MCS_7, /* RATE_MCS7_INDEX, */
- };
- const UINT_16 au2RateVHT[VHT_RATE_NUM] = {
- RATE_VHT_MCS_0, /* RATE_MCS0_INDEX, */
- RATE_VHT_MCS_1, /* RATE_MCS1_INDEX, */
- RATE_VHT_MCS_2, /* RATE_MCS2_INDEX, */
- RATE_VHT_MCS_3, /* RATE_MCS3_INDEX, */
- RATE_VHT_MCS_4, /* RATE_MCS4_INDEX, */
- RATE_VHT_MCS_5, /* RATE_MCS5_INDEX, */
- RATE_VHT_MCS_6, /* RATE_MCS6_INDEX, */
- RATE_VHT_MCS_7, /* RATE_MCS7_INDEX, */
- RATE_VHT_MCS_8, /* RATE_MCS8_INDEX, */
- RATE_VHT_MCS_9 /* RATE_MCS9_INDEX, */
- };
- /*******************************************************************************
- * D A T A T Y P E S
- ********************************************************************************
- */
- /*******************************************************************************
- * P U B L I C D A T A
- ********************************************************************************
- */
- /*******************************************************************************
- * P R I V A T E D A T A
- ********************************************************************************
- */
- /*******************************************************************************
- * M A C R O S
- ********************************************************************************
- */
- /*******************************************************************************
- * F U N C T I O N D E C L A R A T I O N S
- ********************************************************************************
- */
- /*******************************************************************************
- * F U N C T I O N S
- ********************************************************************************
- */
- WLAN_STATUS nicRateIndex2RateCode(IN UINT_8 ucPreambleOption, IN UINT_8 ucRateIndex, OUT PUINT_16 pu2RateCode)
- {
- switch (ucPreambleOption) {
- case PREAMBLE_DEFAULT_LONG_NONE:
- if (ucRateIndex >= CCK_RATE_NUM)
- return WLAN_STATUS_INVALID_DATA;
- *pu2RateCode = au2RateCCKLong[ucRateIndex];
- break;
- case PREAMBLE_OPTION_SHORT:
- if (ucRateIndex >= CCK_RATE_NUM)
- return WLAN_STATUS_INVALID_DATA;
- *pu2RateCode = au2RateCCKShort[ucRateIndex];
- break;
- case PREAMBLE_OFDM_MODE:
- if (ucRateIndex >= OFDM_RATE_NUM)
- return WLAN_STATUS_INVALID_DATA;
- *pu2RateCode = au2RateOFDM[ucRateIndex];
- break;
- case PREAMBLE_HT_MIXED_MODE:
- if (ucRateIndex >= HT_RATE_NUM)
- return WLAN_STATUS_INVALID_DATA;
- *pu2RateCode = au2RateHTMixed[ucRateIndex];
- break;
- case PREAMBLE_HT_GREEN_FIELD:
- if (ucRateIndex >= HT_RATE_NUM)
- return WLAN_STATUS_INVALID_DATA;
- *pu2RateCode = au2RateHTGreenField[ucRateIndex];
- break;
- case PREAMBLE_VHT_FIELD:
- if (ucRateIndex >= VHT_RATE_NUM)
- return WLAN_STATUS_INVALID_DATA;
- *pu2RateCode = au2RateVHT[ucRateIndex];
- break;
- default:
- return WLAN_STATUS_INVALID_DATA;
- }
- return WLAN_STATUS_SUCCESS;
- }
|