|
1 /* |
|
2 * TIWhaUtils.cpp |
|
3 * |
|
4 * Copyright(c) 1998 - 2010 Texas Instruments. All rights reserved. |
|
5 * All rights reserved. |
|
6 * |
|
7 * This program and the accompanying materials are made available under the |
|
8 * terms of the Eclipse Public License v1.0 or BSD License which accompanies |
|
9 * this distribution. The Eclipse Public License is available at |
|
10 * http://www.eclipse.org/legal/epl-v10.html and the BSD License is as below. |
|
11 * |
|
12 * Redistribution and use in source and binary forms, with or without |
|
13 * modification, are permitted provided that the following conditions |
|
14 * are met: |
|
15 * |
|
16 * * Redistributions of source code must retain the above copyright |
|
17 * notice, this list of conditions and the following disclaimer. |
|
18 * * Redistributions in binary form must reproduce the above copyright |
|
19 * notice, this list of conditions and the following disclaimer in |
|
20 * the documentation and/or other materials provided with the |
|
21 * distribution. |
|
22 * * Neither the name Texas Instruments nor the names of its |
|
23 * contributors may be used to endorse or promote products derived |
|
24 * from this software without specific prior written permission. |
|
25 * |
|
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
27 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
28 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|
29 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|
30 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
31 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
32 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
33 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
34 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
35 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|
36 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
37 */ |
|
38 |
|
39 |
|
40 /** \file TIWhaUtils.cpp |
|
41 * \brief Utilities used by TIWha layer only |
|
42 * |
|
43 * \see |
|
44 */ |
|
45 |
|
46 #include "TIWhaUtils.h" |
|
47 #define __FILE_ID__ FILE_ID_148 |
|
48 |
|
49 /** |
|
50 * \fn WhaToTwdFrameType |
|
51 * |
|
52 * \return |
|
53 * \sa |
|
54 */ |
|
55 EMibTemplateType TIWhaUtils::WhaToTwdFrameType(WHA::TTemplateType aFrameType) |
|
56 { |
|
57 switch (aFrameType) |
|
58 { |
|
59 case WHA::KBeaconTemplate: return TEMPLATE_TYPE_BEACON; |
|
60 case WHA::KProbeRequestTemplate: return TEMPLATE_TYPE_PROBE_REQUEST; |
|
61 case WHA::KNullDataTemplate: return TEMPLATE_TYPE_NULL_FRAME; |
|
62 case WHA::KProbeResponseTemplate: return TEMPLATE_TYPE_PROBE_RESPONSE; |
|
63 case WHA::KQosNullDataTemplate: return TEMPLATE_TYPE_QOS_NULL_FRAME; |
|
64 case WHA::KPSPollTemplate: return TEMPLATE_TYPE_PS_POLL; |
|
65 default: |
|
66 WLAN_OS_REPORT (("ERROR: %s aFrameType = %d\n",__FUNCTION__,aFrameType)); |
|
67 return TEMPLATE_TYPE_BEACON; |
|
68 } |
|
69 } |
|
70 |
|
71 /** |
|
72 * \fn WhaToTwdRate |
|
73 * |
|
74 * \return |
|
75 * \sa |
|
76 */ |
|
77 ERate TIWhaUtils::WhaToTwdRate (WHA::TRate aRate) |
|
78 { |
|
79 /*Important Note: aRate = 0 - means don't care. Use 1M rate same as the default rate. |
|
80 UMAC sets probe req template with rate = 0, as it doesn't care for probe req rate*/ |
|
81 switch (aRate) |
|
82 { |
|
83 case 0: |
|
84 case WHA::KRate1Mbits: return DRV_RATE_1M; |
|
85 case WHA::KRate2Mbits: return DRV_RATE_2M; |
|
86 case WHA::KRate5_5Mbits: return DRV_RATE_5_5M; |
|
87 case WHA::KRate6Mbits: return DRV_RATE_6M; |
|
88 case WHA::KRate9Mbits: return DRV_RATE_9M; |
|
89 case WHA::KRate11Mbits: return DRV_RATE_11M; |
|
90 case WHA::KRate12Mbits: return DRV_RATE_12M; |
|
91 case WHA::KRate18Mbits: return DRV_RATE_18M; |
|
92 case WHA::KRate22Mbits: return DRV_RATE_22M; |
|
93 case WHA::KRate24Mbits: return DRV_RATE_24M; |
|
94 case WHA::KRate36Mbits: return DRV_RATE_36M; |
|
95 case WHA::KRate48Mbits: return DRV_RATE_48M; |
|
96 case WHA::KRate54Mbits: return DRV_RATE_54M; |
|
97 default: |
|
98 WLAN_OS_REPORT (("ERROR: %s aRate = %d\n",__FUNCTION__,aRate)); |
|
99 return DRV_RATE_1M; |
|
100 } |
|
101 } |
|
102 |
|
103 /** |
|
104 * \fn PolicyToWhaRate |
|
105 * |
|
106 * \param ePolicyRate |
|
107 * \return TRate |
|
108 * \sa |
|
109 */ |
|
110 WHA::TRate TIWhaUtils::PolicyToWhaRate (ETxRateClassId ePolicyRate) |
|
111 { |
|
112 switch (ePolicyRate) |
|
113 { |
|
114 #ifdef HT_SUPPORT |
|
115 case txPolicyMcs7: return WHA::KRate1Mbits; |
|
116 case txPolicyMcs6: return WHA::KRate1Mbits; |
|
117 case txPolicyMcs5: return WHA::KRate1Mbits; |
|
118 case txPolicyMcs4: return WHA::KRate1Mbits; |
|
119 case txPolicyMcs3: return WHA::KRate1Mbits; |
|
120 case txPolicyMcs2: return WHA::KRate1Mbits; |
|
121 case txPolicyMcs1: return WHA::KRate1Mbits; |
|
122 case txPolicyMcs0: return WHA::KRate1Mbits; |
|
123 #endif /* HT_SUPPORT */ |
|
124 case txPolicy54: return WHA::KRate54Mbits; |
|
125 case txPolicy48: return WHA::KRate48Mbits; |
|
126 case txPolicy36: return WHA::KRate36Mbits; |
|
127 case txPolicy24: return WHA::KRate24Mbits; |
|
128 case txPolicy22: return WHA::KRate22Mbits; |
|
129 case txPolicy18: return WHA::KRate18Mbits; |
|
130 case txPolicy12: return WHA::KRate12Mbits; |
|
131 case txPolicy11: return WHA::KRate11Mbits; |
|
132 case txPolicy9: return WHA::KRate9Mbits; |
|
133 case txPolicy6: return WHA::KRate6Mbits; |
|
134 case txPolicy5_5: return WHA::KRate5_5Mbits; |
|
135 case txPolicy2: return WHA::KRate2Mbits; |
|
136 case txPolicy1: return WHA::KRate1Mbits; |
|
137 |
|
138 default: |
|
139 WLAN_OS_REPORT (("ERROR: %s aRate = %d\n",__FUNCTION__,ePolicyRate)); |
|
140 return WHA::KRate1Mbits; |
|
141 } |
|
142 } |
|
143 |
|
144 /** |
|
145 * \fn WhaToMaskRate |
|
146 * \brief Rate mask to convert the TIWha rates |
|
147 * |
|
148 * |
|
149 * |
|
150 * \note |
|
151 * \param TIWhaRate |
|
152 * \return rateNask_e - corosponding aRate |
|
153 * \sa |
|
154 */ |
|
155 TI_UINT32 TIWhaUtils::WhaToMaskRate (WHA::TRate aRate) |
|
156 { |
|
157 |
|
158 TI_UINT32 rateMask =0; |
|
159 |
|
160 |
|
161 (aRate& WHA::KRate1Mbits ) ? rateMask |= DRV_RATE_MASK_1_BARKER : NULL; |
|
162 (aRate& WHA::KRate2Mbits ) ? rateMask |= DRV_RATE_MASK_2_BARKER : NULL; |
|
163 (aRate& WHA::KRate5_5Mbits )? rateMask |= DRV_RATE_MASK_5_5_CCK : NULL; |
|
164 (aRate& WHA::KRate6Mbits ) ? rateMask |= DRV_RATE_MASK_6_OFDM : NULL; |
|
165 (aRate& WHA::KRate9Mbits ) ? rateMask |= DRV_RATE_MASK_9_OFDM : NULL; |
|
166 (aRate& WHA::KRate11Mbits ) ? rateMask |= DRV_RATE_MASK_11_CCK : NULL; |
|
167 (aRate& WHA::KRate12Mbits ) ? rateMask |= DRV_RATE_MASK_12_OFDM : NULL; |
|
168 (aRate& WHA::KRate18Mbits ) ? rateMask |= DRV_RATE_MASK_18_OFDM : NULL; |
|
169 (aRate& WHA::KRate22Mbits ) ? rateMask |= DRV_RATE_MASK_22_PBCC : NULL; |
|
170 (aRate& WHA::KRate24Mbits ) ? rateMask |= DRV_RATE_MASK_24_OFDM : NULL; |
|
171 (aRate& WHA::KRate33Mbits ) ? rateMask |= DRV_RATE_MASK_1_BARKER : NULL; |
|
172 (aRate& WHA::KRate36Mbits ) ? rateMask |= DRV_RATE_MASK_36_OFDM : NULL; |
|
173 (aRate& WHA::KRate48Mbits ) ? rateMask |= DRV_RATE_MASK_48_OFDM : NULL; |
|
174 (aRate& WHA::KRate54Mbits ) ? rateMask |= DRV_RATE_MASK_54_OFDM : NULL; |
|
175 |
|
176 if (rateMask == 0) |
|
177 { |
|
178 WLAN_OS_REPORT (("ERROR: %s aRate = %d\n",__FUNCTION__,aRate)); |
|
179 rateMask|= DRV_RATE_MASK_1_BARKER; // as default |
|
180 } |
|
181 |
|
182 return rateMask; |
|
183 } |
|
184 |
|
185 |
|
186 /** |
|
187 * \fn HTWhaToMaskRate |
|
188 * \brief HT Rate mask to convert the TIWha rates |
|
189 * |
|
190 * |
|
191 * |
|
192 * \note |
|
193 * \param TIWhaRate |
|
194 * \param THtMcsSet |
|
195 * \return rateNask_e - corosponding aRate |
|
196 * \sa |
|
197 */ |
|
198 #ifdef HT_SUPPORT |
|
199 TI_UINT32 TIWhaUtils::HTWhaToMaskRate (WHA::TRate aRate,WHA::THtMcsSet aMcsRates) |
|
200 { |
|
201 TI_UINT32 rateMask =0; |
|
202 |
|
203 |
|
204 (aRate& WHA::KRate1Mbits ) ? rateMask |= DRV_RATE_MASK_1_BARKER : NULL; |
|
205 (aRate& WHA::KRate2Mbits ) ? rateMask |= DRV_RATE_MASK_2_BARKER : NULL; |
|
206 (aRate& WHA::KRate5_5Mbits )? rateMask |= DRV_RATE_MASK_5_5_CCK : NULL; |
|
207 (aRate& WHA::KRate6Mbits ) ? rateMask |= DRV_RATE_MASK_6_OFDM : NULL; |
|
208 (aRate& WHA::KRate9Mbits ) ? rateMask |= DRV_RATE_MASK_9_OFDM : NULL; |
|
209 (aRate& WHA::KRate11Mbits ) ? rateMask |= DRV_RATE_MASK_11_CCK : NULL; |
|
210 (aRate& WHA::KRate12Mbits ) ? rateMask |= DRV_RATE_MASK_12_OFDM : NULL; |
|
211 (aRate& WHA::KRate18Mbits ) ? rateMask |= DRV_RATE_MASK_18_OFDM : NULL; |
|
212 (aRate& WHA::KRate22Mbits ) ? rateMask |= DRV_RATE_MASK_22_PBCC : NULL; |
|
213 (aRate& WHA::KRate24Mbits ) ? rateMask |= DRV_RATE_MASK_24_OFDM : NULL; |
|
214 (aRate& WHA::KRate33Mbits ) ? rateMask |= DRV_RATE_MASK_1_BARKER : NULL; |
|
215 (aRate& WHA::KRate36Mbits ) ? rateMask |= DRV_RATE_MASK_36_OFDM : NULL; |
|
216 (aRate& WHA::KRate48Mbits ) ? rateMask |= DRV_RATE_MASK_48_OFDM : NULL; |
|
217 (aRate& WHA::KRate54Mbits ) ? rateMask |= DRV_RATE_MASK_54_OFDM : NULL; |
|
218 |
|
219 /* MCS Rates */ |
|
220 (aMcsRates[0] & WHA_MCS_0) ? rateMask |= DRV_RATE_MASK_MCS_0_OFDM : NULL; |
|
221 (aMcsRates[0] & WHA_MCS_1) ? rateMask |= DRV_RATE_MASK_MCS_1_OFDM : NULL; |
|
222 (aMcsRates[0] & WHA_MCS_2) ? rateMask |= DRV_RATE_MASK_MCS_2_OFDM : NULL; |
|
223 (aMcsRates[0] & WHA_MCS_3) ? rateMask |= DRV_RATE_MASK_MCS_3_OFDM : NULL; |
|
224 (aMcsRates[0] & WHA_MCS_4) ? rateMask |= DRV_RATE_MASK_MCS_4_OFDM : NULL; |
|
225 (aMcsRates[0] & WHA_MCS_5) ? rateMask |= DRV_RATE_MASK_MCS_5_OFDM : NULL; |
|
226 (aMcsRates[0] & WHA_MCS_6) ? rateMask |= DRV_RATE_MASK_MCS_6_OFDM : NULL; |
|
227 (aMcsRates[0] & WHA_MCS_7) ? rateMask |= DRV_RATE_MASK_MCS_7_OFDM : NULL; |
|
228 |
|
229 if (rateMask == 0) |
|
230 { |
|
231 WLAN_OS_REPORT (("ERROR: %s aRate = %d\n",__FUNCTION__,aRate)); |
|
232 rateMask|= DRV_RATE_MASK_1_BARKER; // as default |
|
233 } |
|
234 return rateMask; |
|
235 } |
|
236 #endif /* HT_SUPPORT */ |
|
237 |
|
238 |
|
239 TI_UINT32 TIWhaUtils::WhaRateToRatePolicy(WHA::StxAutoRatePolicy* pTxAutoRatePolicy) |
|
240 { |
|
241 TI_UINT32 aRateMask = 0; |
|
242 /* B/G Rates */ |
|
243 (pTxAutoRatePolicy->iBAndGRates & WHA::KRate1Mbits) ? aRateMask |= HW_BIT_RATE_1MBPS : NULL; |
|
244 (pTxAutoRatePolicy->iBAndGRates & WHA::KRate2Mbits) ? aRateMask |= HW_BIT_RATE_2MBPS : NULL; |
|
245 (pTxAutoRatePolicy->iBAndGRates & WHA::KRate5_5Mbits) ? aRateMask |= HW_BIT_RATE_5_5MBPS : NULL; |
|
246 (pTxAutoRatePolicy->iBAndGRates & WHA::KRate6Mbits) ? aRateMask |= HW_BIT_RATE_6MBPS : NULL; |
|
247 (pTxAutoRatePolicy->iBAndGRates & WHA::KRate9Mbits) ? aRateMask |= HW_BIT_RATE_9MBPS : NULL; |
|
248 (pTxAutoRatePolicy->iBAndGRates & WHA::KRate11Mbits) ? aRateMask |= HW_BIT_RATE_11MBPS : NULL; |
|
249 (pTxAutoRatePolicy->iBAndGRates & WHA::KRate12Mbits) ? aRateMask |= HW_BIT_RATE_12MBPS : NULL; |
|
250 (pTxAutoRatePolicy->iBAndGRates & WHA::KRate18Mbits) ? aRateMask |= HW_BIT_RATE_18MBPS : NULL; |
|
251 (pTxAutoRatePolicy->iBAndGRates & WHA::KRate22Mbits) ? aRateMask |= HW_BIT_RATE_22MBPS : NULL; |
|
252 (pTxAutoRatePolicy->iBAndGRates & WHA::KRate24Mbits) ? aRateMask |= HW_BIT_RATE_24MBPS : NULL; |
|
253 (pTxAutoRatePolicy->iBAndGRates & WHA::KRate36Mbits) ? aRateMask |= HW_BIT_RATE_36MBPS : NULL; |
|
254 (pTxAutoRatePolicy->iBAndGRates & WHA::KRate48Mbits) ? aRateMask |= HW_BIT_RATE_48MBPS : NULL; |
|
255 (pTxAutoRatePolicy->iBAndGRates & WHA::KRate54Mbits) ? aRateMask |= HW_BIT_RATE_54MBPS : NULL; |
|
256 |
|
257 return aRateMask; |
|
258 } |
|
259 |
|
260 #ifdef HT_SUPPORT |
|
261 TI_UINT32 TIWhaUtils::HTWhaRateToRatePolicy(WHA::StxAutoRatePolicy* pTxAutoRatePolicy) |
|
262 { |
|
263 TI_UINT32 aRateMask = 0; |
|
264 /* B/G Rates */ |
|
265 (pTxAutoRatePolicy->iBAndGRates & WHA::KRate1Mbits) ? aRateMask |= HW_BIT_RATE_1MBPS : NULL; |
|
266 (pTxAutoRatePolicy->iBAndGRates & WHA::KRate2Mbits) ? aRateMask |= HW_BIT_RATE_2MBPS : NULL; |
|
267 (pTxAutoRatePolicy->iBAndGRates & WHA::KRate5_5Mbits) ? aRateMask |= HW_BIT_RATE_5_5MBPS : NULL; |
|
268 (pTxAutoRatePolicy->iBAndGRates & WHA::KRate6Mbits) ? aRateMask |= HW_BIT_RATE_6MBPS : NULL; |
|
269 (pTxAutoRatePolicy->iBAndGRates & WHA::KRate9Mbits) ? aRateMask |= HW_BIT_RATE_9MBPS : NULL; |
|
270 (pTxAutoRatePolicy->iBAndGRates & WHA::KRate11Mbits) ? aRateMask |= HW_BIT_RATE_11MBPS : NULL; |
|
271 (pTxAutoRatePolicy->iBAndGRates & WHA::KRate12Mbits) ? aRateMask |= HW_BIT_RATE_12MBPS : NULL; |
|
272 (pTxAutoRatePolicy->iBAndGRates & WHA::KRate18Mbits) ? aRateMask |= HW_BIT_RATE_18MBPS : NULL; |
|
273 (pTxAutoRatePolicy->iBAndGRates & WHA::KRate22Mbits) ? aRateMask |= HW_BIT_RATE_22MBPS : NULL; |
|
274 (pTxAutoRatePolicy->iBAndGRates & WHA::KRate24Mbits) ? aRateMask |= HW_BIT_RATE_24MBPS : NULL; |
|
275 (pTxAutoRatePolicy->iBAndGRates & WHA::KRate36Mbits) ? aRateMask |= HW_BIT_RATE_36MBPS : NULL; |
|
276 (pTxAutoRatePolicy->iBAndGRates & WHA::KRate48Mbits) ? aRateMask |= HW_BIT_RATE_48MBPS : NULL; |
|
277 (pTxAutoRatePolicy->iBAndGRates & WHA::KRate54Mbits) ? aRateMask |= HW_BIT_RATE_54MBPS : NULL; |
|
278 |
|
279 /* 11n Rates */ |
|
280 (pTxAutoRatePolicy->iMcsSet[0] & WHA_MCS_0) ? aRateMask |= HW_BIT_RATE_MCS_0 : NULL; |
|
281 (pTxAutoRatePolicy->iMcsSet[0] & WHA_MCS_1) ? aRateMask |= HW_BIT_RATE_MCS_1 : NULL; |
|
282 (pTxAutoRatePolicy->iMcsSet[0] & WHA_MCS_2) ? aRateMask |= HW_BIT_RATE_MCS_2 : NULL; |
|
283 (pTxAutoRatePolicy->iMcsSet[0] & WHA_MCS_3) ? aRateMask |= HW_BIT_RATE_MCS_3 : NULL; |
|
284 (pTxAutoRatePolicy->iMcsSet[0] & WHA_MCS_4) ? aRateMask |= HW_BIT_RATE_MCS_4 : NULL; |
|
285 (pTxAutoRatePolicy->iMcsSet[0] & WHA_MCS_5) ? aRateMask |= HW_BIT_RATE_MCS_5 : NULL; |
|
286 (pTxAutoRatePolicy->iMcsSet[0] & WHA_MCS_6) ? aRateMask |= HW_BIT_RATE_MCS_6 : NULL; |
|
287 (pTxAutoRatePolicy->iMcsSet[0] & WHA_MCS_7) ? aRateMask |= HW_BIT_RATE_MCS_7 : NULL; |
|
288 |
|
289 return aRateMask; |
|
290 } |
|
291 #endif /* HT_SUPPORT */ |