6 \brief This file contains the transmission rate handling routines.
8 This file contains the transmission rate handling routines for setting up
9 ACK/CTS Rate, Highest Tx Rate, Lowest Tx Rate, Initial Tx Rate and do
10 conversion between Rate Set and Data Rates.
18 ** 07 12 2013 terry.wu
19 ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
20 ** 1. Update VHT IE composing function
22 ** 3. Exchange bss/sta rec update sequence for temp solution
24 ** 11 06 2012 eason.tsai
25 ** [BORA00002255] [MT6630 Wi-Fi][Driver] develop
28 ** 09 17 2012 cm.chang
29 ** [BORA00002149] [MT6630 Wi-Fi] Initial software development
30 ** Duplicate source from MT6620 v2.3 driver branch
31 ** (Davinci label: MT6620_WIFI_Driver_V2_3_120913_1942_As_MT6630_Base)
35 * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository.
38 * [WPD00003833][MT6620 and MT5931] Driver migration
41 * 03 16 2010 kevin.huang
42 * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support
46 * [BORA00000018]Integrate WIFI part into BORA for the 1st time
49 * Nov 23 2009 mtk01461
50 * [BORA00000018] Integrate WIFI part into BORA for the 1st time
53 * Nov 16 2009 mtk01461
54 * [BORA00000018] Integrate WIFI part into BORA for the 1st time
58 * [BORA00000018] Integrate WIFI part into BORA for the 1st time
60 ** \main\maintrunk.MT5921\12 2008-12-19 17:19:32 GMT mtk01461
61 ** Fix the problem that do not ASSERT the length of Supported Rate IE == 8
62 ** \main\maintrunk.MT5921\11 2008-12-01 18:17:42 GMT mtk01088
63 ** fixed the lint "possible using null pointer" warning
64 ** \main\maintrunk.MT5921\10 2008-08-20 00:16:36 GMT mtk01461
65 ** Update for Driver Review
66 ** \main\maintrunk.MT5921\9 2008-04-13 21:17:13 GMT mtk01461
67 ** Revise GEN Link Speed OID
68 ** \main\maintrunk.MT5921\8 2008-03-28 10:40:13 GMT mtk01461
69 ** Add rateGetRateSetFromDataRates() for set desired rate OID
70 ** \main\maintrunk.MT5921\7 2008-03-26 09:16:20 GMT mtk01461
71 ** Add adopt operational rate as ACK rate if BasicRateSet was not found
73 ** \main\maintrunk.MT5921\6 2008-02-21 15:01:39 GMT mtk01461
74 ** Add initial rate according rx signal quality support
75 ** \main\maintrunk.MT5921\5 2008-01-07 15:06:44 GMT mtk01461
76 ** Fix typo of rate adaptation of CtrlResp Frame
77 ** \main\maintrunk.MT5921\4 2007-10-25 18:05:12 GMT mtk01461
78 ** Add VOIP SCAN Support & Refine Roaming
81 /*******************************************************************************
82 * C O M P I L E R F L A G S
83 ********************************************************************************
86 /*******************************************************************************
87 * E X T E R N A L R E F E R E N C E S
88 ********************************************************************************
92 /*******************************************************************************
94 ********************************************************************************
97 const UINT_16 au2RateCCKLong
[CCK_RATE_NUM
] = {
98 RATE_CCK_1M_LONG
, /* RATE_1M_INDEX = 0 */
99 RATE_CCK_2M_LONG
, /* RATE_2M_INDEX */
100 RATE_CCK_5_5M_LONG
, /* RATE_5_5M_INDEX */
101 RATE_CCK_11M_LONG
/* RATE_11M_INDEX */
104 const UINT_16 au2RateCCKShort
[CCK_RATE_NUM
] = {
105 RATE_CCK_1M_LONG
, /* RATE_1M_INDEX = 0 */
106 RATE_CCK_2M_SHORT
, /* RATE_2M_INDEX */
107 RATE_CCK_5_5M_SHORT
, /* RATE_5_5M_INDEX */
108 RATE_CCK_11M_SHORT
/* RATE_11M_INDEX */
111 const UINT_16 au2RateOFDM
[OFDM_RATE_NUM
] = {
112 RATE_OFDM_6M
, /* RATE_6M_INDEX */
113 RATE_OFDM_9M
, /* RATE_9M_INDEX */
114 RATE_OFDM_12M
, /* RATE_12M_INDEX */
115 RATE_OFDM_18M
, /* RATE_18M_INDEX */
116 RATE_OFDM_24M
, /* RATE_24M_INDEX */
117 RATE_OFDM_36M
, /* RATE_36M_INDEX */
118 RATE_OFDM_48M
, /* RATE_48M_INDEX */
119 RATE_OFDM_54M
/* RATE_54M_INDEX */
123 const UINT_16 au2RateHTMixed
[HT_RATE_NUM
] = {
124 RATE_MM_MCS_32
, /* RATE_MCS32_INDEX, */
125 RATE_MM_MCS_0
, /* RATE_MCS0_INDEX, */
126 RATE_MM_MCS_1
, /* RATE_MCS1_INDEX, */
127 RATE_MM_MCS_2
, /* RATE_MCS2_INDEX, */
128 RATE_MM_MCS_3
, /* RATE_MCS3_INDEX, */
129 RATE_MM_MCS_4
, /* RATE_MCS4_INDEX, */
130 RATE_MM_MCS_5
, /* RATE_MCS5_INDEX, */
131 RATE_MM_MCS_6
, /* RATE_MCS6_INDEX, */
132 RATE_MM_MCS_7
/* RATE_MCS7_INDEX, */
136 const UINT_16 au2RateHTGreenField
[HT_RATE_NUM
] = {
137 RATE_GF_MCS_32
, /* RATE_MCS32_INDEX, */
138 RATE_GF_MCS_0
, /* RATE_MCS0_INDEX, */
139 RATE_GF_MCS_1
, /* RATE_MCS1_INDEX, */
140 RATE_GF_MCS_2
, /* RATE_MCS2_INDEX, */
141 RATE_GF_MCS_3
, /* RATE_MCS3_INDEX, */
142 RATE_GF_MCS_4
, /* RATE_MCS4_INDEX, */
143 RATE_GF_MCS_5
, /* RATE_MCS5_INDEX, */
144 RATE_GF_MCS_6
, /* RATE_MCS6_INDEX, */
145 RATE_GF_MCS_7
, /* RATE_MCS7_INDEX, */
149 const UINT_16 au2RateVHT
[VHT_RATE_NUM
] = {
150 RATE_VHT_MCS_0
, /* RATE_MCS0_INDEX, */
151 RATE_VHT_MCS_1
, /* RATE_MCS1_INDEX, */
152 RATE_VHT_MCS_2
, /* RATE_MCS2_INDEX, */
153 RATE_VHT_MCS_3
, /* RATE_MCS3_INDEX, */
154 RATE_VHT_MCS_4
, /* RATE_MCS4_INDEX, */
155 RATE_VHT_MCS_5
, /* RATE_MCS5_INDEX, */
156 RATE_VHT_MCS_6
, /* RATE_MCS6_INDEX, */
157 RATE_VHT_MCS_7
, /* RATE_MCS7_INDEX, */
158 RATE_VHT_MCS_8
, /* RATE_MCS8_INDEX, */
159 RATE_VHT_MCS_9
/* RATE_MCS9_INDEX, */
162 /*******************************************************************************
164 ********************************************************************************
167 /*******************************************************************************
168 * P U B L I C D A T A
169 ********************************************************************************
172 /*******************************************************************************
173 * P R I V A T E D A T A
174 ********************************************************************************
177 /*******************************************************************************
179 ********************************************************************************
182 /*******************************************************************************
183 * F U N C T I O N D E C L A R A T I O N S
184 ********************************************************************************
187 /*******************************************************************************
189 ********************************************************************************
193 nicRateIndex2RateCode(IN UINT_8 ucPreambleOption
, IN UINT_8 ucRateIndex
, OUT PUINT_16 pu2RateCode
)
195 switch (ucPreambleOption
) {
196 case PREAMBLE_DEFAULT_LONG_NONE
:
197 if (ucRateIndex
>= CCK_RATE_NUM
) {
198 return WLAN_STATUS_INVALID_DATA
;
200 *pu2RateCode
= au2RateCCKLong
[ucRateIndex
];
203 case PREAMBLE_OPTION_SHORT
:
204 if (ucRateIndex
>= CCK_RATE_NUM
) {
205 return WLAN_STATUS_INVALID_DATA
;
207 *pu2RateCode
= au2RateCCKShort
[ucRateIndex
];
210 case PREAMBLE_OFDM_MODE
:
211 if (ucRateIndex
>= OFDM_RATE_NUM
) {
212 return WLAN_STATUS_INVALID_DATA
;
214 *pu2RateCode
= au2RateOFDM
[ucRateIndex
];
217 case PREAMBLE_HT_MIXED_MODE
:
218 if (ucRateIndex
>= HT_RATE_NUM
) {
219 return WLAN_STATUS_INVALID_DATA
;
221 *pu2RateCode
= au2RateHTMixed
[ucRateIndex
];
224 case PREAMBLE_HT_GREEN_FIELD
:
225 if (ucRateIndex
>= HT_RATE_NUM
) {
226 return WLAN_STATUS_INVALID_DATA
;
228 *pu2RateCode
= au2RateHTGreenField
[ucRateIndex
];
231 case PREAMBLE_VHT_FIELD
:
232 if (ucRateIndex
>= VHT_RATE_NUM
) {
233 return WLAN_STATUS_INVALID_DATA
;
235 *pu2RateCode
= au2RateVHT
[ucRateIndex
];
239 return WLAN_STATUS_INVALID_DATA
;
242 return WLAN_STATUS_SUCCESS
;