Commit | Line | Data |
---|---|---|
6fa3eb70 S |
1 | /* |
2 | ** | |
3 | */ | |
4 | ||
5 | /*! \file "nic_rate.c" | |
6 | \brief This file contains the transmission rate handling routines. | |
7 | ||
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. | |
11 | */ | |
12 | ||
13 | ||
14 | ||
15 | /* | |
16 | ** $Log: rate.c $ | |
17 | ** | |
18 | ** 07 12 2013 terry.wu | |
19 | ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation | |
20 | ** 1. Update VHT IE composing function | |
21 | ** 2. disable bow | |
22 | ** 3. Exchange bss/sta rec update sequence for temp solution | |
23 | ** | |
24 | ** 11 06 2012 eason.tsai | |
25 | ** [BORA00002255] [MT6630 Wi-Fi][Driver] develop | |
26 | ** . | |
27 | ** | |
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) | |
32 | * | |
33 | * 07 08 2010 cp.wu | |
34 | * | |
35 | * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. | |
36 | * | |
37 | * 06 08 2010 cp.wu | |
38 | * [WPD00003833][MT6620 and MT5931] Driver migration | |
39 | * add rate.c. | |
40 | * | |
41 | * 03 16 2010 kevin.huang | |
42 | * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support | |
43 | * Add AdHoc Mode | |
44 | * | |
45 | * 12 18 2009 cm.chang | |
46 | * [BORA00000018]Integrate WIFI part into BORA for the 1st time | |
47 | * . | |
48 | * | |
49 | * Nov 23 2009 mtk01461 | |
50 | * [BORA00000018] Integrate WIFI part into BORA for the 1st time | |
51 | * Update comments | |
52 | * | |
53 | * Nov 16 2009 mtk01461 | |
54 | * [BORA00000018] Integrate WIFI part into BORA for the 1st time | |
55 | * Fix DBGLOG | |
56 | * | |
57 | * Nov 5 2009 mtk01461 | |
58 | * [BORA00000018] Integrate WIFI part into BORA for the 1st time | |
59 | * | |
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 | |
72 | ** Add comments | |
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 | |
79 | */ | |
80 | ||
81 | /******************************************************************************* | |
82 | * C O M P I L E R F L A G S | |
83 | ******************************************************************************** | |
84 | */ | |
85 | ||
86 | /******************************************************************************* | |
87 | * E X T E R N A L R E F E R E N C E S | |
88 | ******************************************************************************** | |
89 | */ | |
90 | #include "precomp.h" | |
91 | ||
92 | /******************************************************************************* | |
93 | * C O N S T A N T S | |
94 | ******************************************************************************** | |
95 | */ | |
96 | ||
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 */ | |
102 | }; | |
103 | ||
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 */ | |
109 | }; | |
110 | ||
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 */ | |
120 | }; | |
121 | ||
122 | ||
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, */ | |
133 | }; | |
134 | ||
135 | ||
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, */ | |
146 | }; | |
147 | ||
148 | ||
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, */ | |
160 | }; | |
161 | ||
162 | /******************************************************************************* | |
163 | * D A T A T Y P E S | |
164 | ******************************************************************************** | |
165 | */ | |
166 | ||
167 | /******************************************************************************* | |
168 | * P U B L I C D A T A | |
169 | ******************************************************************************** | |
170 | */ | |
171 | ||
172 | /******************************************************************************* | |
173 | * P R I V A T E D A T A | |
174 | ******************************************************************************** | |
175 | */ | |
176 | ||
177 | /******************************************************************************* | |
178 | * M A C R O S | |
179 | ******************************************************************************** | |
180 | */ | |
181 | ||
182 | /******************************************************************************* | |
183 | * F U N C T I O N D E C L A R A T I O N S | |
184 | ******************************************************************************** | |
185 | */ | |
186 | ||
187 | /******************************************************************************* | |
188 | * F U N C T I O N S | |
189 | ******************************************************************************** | |
190 | */ | |
191 | ||
192 | WLAN_STATUS | |
193 | nicRateIndex2RateCode(IN UINT_8 ucPreambleOption, IN UINT_8 ucRateIndex, OUT PUINT_16 pu2RateCode) | |
194 | { | |
195 | switch (ucPreambleOption) { | |
196 | case PREAMBLE_DEFAULT_LONG_NONE: | |
197 | if (ucRateIndex >= CCK_RATE_NUM) { | |
198 | return WLAN_STATUS_INVALID_DATA; | |
199 | } | |
200 | *pu2RateCode = au2RateCCKLong[ucRateIndex]; | |
201 | break; | |
202 | ||
203 | case PREAMBLE_OPTION_SHORT: | |
204 | if (ucRateIndex >= CCK_RATE_NUM) { | |
205 | return WLAN_STATUS_INVALID_DATA; | |
206 | } | |
207 | *pu2RateCode = au2RateCCKShort[ucRateIndex]; | |
208 | break; | |
209 | ||
210 | case PREAMBLE_OFDM_MODE: | |
211 | if (ucRateIndex >= OFDM_RATE_NUM) { | |
212 | return WLAN_STATUS_INVALID_DATA; | |
213 | } | |
214 | *pu2RateCode = au2RateOFDM[ucRateIndex]; | |
215 | break; | |
216 | ||
217 | case PREAMBLE_HT_MIXED_MODE: | |
218 | if (ucRateIndex >= HT_RATE_NUM) { | |
219 | return WLAN_STATUS_INVALID_DATA; | |
220 | } | |
221 | *pu2RateCode = au2RateHTMixed[ucRateIndex]; | |
222 | break; | |
223 | ||
224 | case PREAMBLE_HT_GREEN_FIELD: | |
225 | if (ucRateIndex >= HT_RATE_NUM) { | |
226 | return WLAN_STATUS_INVALID_DATA; | |
227 | } | |
228 | *pu2RateCode = au2RateHTGreenField[ucRateIndex]; | |
229 | break; | |
230 | ||
231 | case PREAMBLE_VHT_FIELD: | |
232 | if (ucRateIndex >= VHT_RATE_NUM) { | |
233 | return WLAN_STATUS_INVALID_DATA; | |
234 | } | |
235 | *pu2RateCode = au2RateVHT[ucRateIndex]; | |
236 | break; | |
237 | ||
238 | default: | |
239 | return WLAN_STATUS_INVALID_DATA; | |
240 | } | |
241 | ||
242 | return WLAN_STATUS_SUCCESS; | |
243 | } |