1/*
2 * rate.c
3 *
4 * Copyright(c) 1998 - 2009 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/** \file  rate.c
36 *  \brief Rate conversion
37 *
38 *  \see   rate.h
39 */
40#define __FILE_ID__  FILE_ID_131
41#include "tidef.h"
42#include "rate.h"
43
44ERate rate_NetToDrv (TI_UINT32 rate)
45{
46    switch (rate)
47    {
48        case NET_RATE_1M:
49        case NET_RATE_1M_BASIC:
50            return DRV_RATE_1M;
51
52        case NET_RATE_2M:
53        case NET_RATE_2M_BASIC:
54            return DRV_RATE_2M;
55
56        case NET_RATE_5_5M:
57        case NET_RATE_5_5M_BASIC:
58            return DRV_RATE_5_5M;
59
60        case NET_RATE_11M:
61        case NET_RATE_11M_BASIC:
62            return DRV_RATE_11M;
63
64        case NET_RATE_22M:
65        case NET_RATE_22M_BASIC:
66            return DRV_RATE_22M;
67
68        case NET_RATE_6M:
69        case NET_RATE_6M_BASIC:
70            return DRV_RATE_6M;
71
72        case NET_RATE_9M:
73        case NET_RATE_9M_BASIC:
74            return DRV_RATE_9M;
75
76        case NET_RATE_12M:
77        case NET_RATE_12M_BASIC:
78            return DRV_RATE_12M;
79
80        case NET_RATE_18M:
81        case NET_RATE_18M_BASIC:
82            return DRV_RATE_18M;
83
84        case NET_RATE_24M:
85        case NET_RATE_24M_BASIC:
86            return DRV_RATE_24M;
87
88        case NET_RATE_36M:
89        case NET_RATE_36M_BASIC:
90            return DRV_RATE_36M;
91
92        case NET_RATE_48M:
93        case NET_RATE_48M_BASIC:
94            return DRV_RATE_48M;
95
96        case NET_RATE_54M:
97        case NET_RATE_54M_BASIC:
98            return DRV_RATE_54M;
99
100        case NET_RATE_MCS0:
101        case NET_RATE_MCS0_BASIC:
102            return DRV_RATE_MCS_0;
103
104        case NET_RATE_MCS1:
105        case NET_RATE_MCS1_BASIC:
106            return DRV_RATE_MCS_1;
107
108        case NET_RATE_MCS2:
109        case NET_RATE_MCS2_BASIC:
110            return DRV_RATE_MCS_2;
111
112        case NET_RATE_MCS3:
113        case NET_RATE_MCS3_BASIC:
114            return DRV_RATE_MCS_3;
115
116        case NET_RATE_MCS4:
117        case NET_RATE_MCS4_BASIC:
118            return DRV_RATE_MCS_4;
119
120        case NET_RATE_MCS5:
121        case NET_RATE_MCS5_BASIC:
122            return DRV_RATE_MCS_5;
123
124        case NET_RATE_MCS6:
125        case NET_RATE_MCS6_BASIC:
126            return DRV_RATE_MCS_6;
127
128        case NET_RATE_MCS7:
129        case NET_RATE_MCS7_BASIC:
130            return DRV_RATE_MCS_7;
131
132        default:
133            return DRV_RATE_INVALID;
134    }
135}
136
137/************************************************************************
138 *                        hostToNetworkRate                         *
139 ************************************************************************
140DESCRIPTION: Translates a host rate (1, 2, 3, ....) to network rate (0x02, 0x82, 0x84, etc...)
141
142INPUT:      rate        -   Host rate
143
144OUTPUT:
145
146
147RETURN:     Network rate if the input rate is valid, otherwise returns 0.
148
149************************************************************************/
150ENetRate rate_DrvToNet (ERate rate)
151{
152    switch (rate)
153    {
154        case DRV_RATE_AUTO:
155            return 0;
156
157        case DRV_RATE_1M:
158            return NET_RATE_1M;
159
160        case DRV_RATE_2M:
161            return NET_RATE_2M;
162
163        case DRV_RATE_5_5M:
164            return NET_RATE_5_5M;
165
166        case DRV_RATE_11M:
167            return NET_RATE_11M;
168
169        case DRV_RATE_22M:
170            return NET_RATE_22M;
171
172        case DRV_RATE_6M:
173            return NET_RATE_6M;
174
175        case DRV_RATE_9M:
176            return NET_RATE_9M;
177
178        case DRV_RATE_12M:
179            return NET_RATE_12M;
180
181        case DRV_RATE_18M:
182            return NET_RATE_18M;
183
184        case DRV_RATE_24M:
185            return NET_RATE_24M;
186
187        case DRV_RATE_36M:
188            return NET_RATE_36M;
189
190        case DRV_RATE_48M:
191            return NET_RATE_48M;
192
193        case DRV_RATE_54M:
194            return NET_RATE_54M;
195
196        case DRV_RATE_MCS_0:
197            return NET_RATE_MCS0;
198
199        case DRV_RATE_MCS_1:
200            return NET_RATE_MCS1;
201
202        case DRV_RATE_MCS_2:
203            return NET_RATE_MCS2;
204
205        case DRV_RATE_MCS_3:
206            return NET_RATE_MCS3;
207
208        case DRV_RATE_MCS_4:
209            return NET_RATE_MCS4;
210
211        case DRV_RATE_MCS_5:
212            return NET_RATE_MCS5;
213
214        case DRV_RATE_MCS_6:
215            return NET_RATE_MCS6;
216
217        case DRV_RATE_MCS_7:
218            return NET_RATE_MCS7;
219
220        default:
221            return 0;
222    }
223}
224
225/***************************************************************************
226*                   getMaxActiveRatefromBitmap                             *
227****************************************************************************
228* DESCRIPTION:
229*
230* INPUTS:       hCtrlData - the object
231*
232* OUTPUT:
233*
234* RETURNS:
235***************************************************************************/
236ERate rate_GetMaxFromDrvBitmap (TI_UINT32 uRateBitMap)
237{
238    if (uRateBitMap & DRV_RATE_MASK_MCS_7_OFDM)
239    {
240        return DRV_RATE_MCS_7;
241    }
242
243    if (uRateBitMap & DRV_RATE_MASK_MCS_6_OFDM)
244    {
245        return DRV_RATE_MCS_6;
246    }
247
248    if (uRateBitMap & DRV_RATE_MASK_MCS_5_OFDM)
249    {
250        return DRV_RATE_MCS_5;
251    }
252
253    if (uRateBitMap & DRV_RATE_MASK_MCS_4_OFDM)
254    {
255        return DRV_RATE_MCS_4;
256    }
257
258    if (uRateBitMap & DRV_RATE_MASK_MCS_3_OFDM)
259    {
260        return DRV_RATE_MCS_3;
261    }
262
263    if (uRateBitMap & DRV_RATE_MASK_MCS_2_OFDM)
264    {
265        return DRV_RATE_MCS_2;
266    }
267
268    if (uRateBitMap & DRV_RATE_MASK_MCS_1_OFDM)
269    {
270        return DRV_RATE_MCS_1;
271    }
272
273    if (uRateBitMap & DRV_RATE_MASK_MCS_0_OFDM)
274    {
275        return DRV_RATE_MCS_0;
276    }
277
278    if (uRateBitMap & DRV_RATE_MASK_54_OFDM)
279    {
280        return DRV_RATE_54M;
281    }
282
283    if (uRateBitMap & DRV_RATE_MASK_48_OFDM)
284    {
285        return DRV_RATE_48M;
286    }
287
288    if (uRateBitMap & DRV_RATE_MASK_36_OFDM)
289    {
290        return DRV_RATE_36M;
291    }
292
293    if (uRateBitMap & DRV_RATE_MASK_24_OFDM)
294    {
295        return DRV_RATE_24M;
296    }
297
298    if (uRateBitMap & DRV_RATE_MASK_22_PBCC)
299    {
300        return DRV_RATE_22M;
301    }
302
303    if (uRateBitMap & DRV_RATE_MASK_18_OFDM)
304    {
305        return DRV_RATE_18M;
306    }
307
308    if (uRateBitMap & DRV_RATE_MASK_12_OFDM)
309    {
310        return DRV_RATE_12M;
311    }
312
313    if (uRateBitMap & DRV_RATE_MASK_11_CCK)
314    {
315        return DRV_RATE_11M;
316    }
317
318    if (uRateBitMap & DRV_RATE_MASK_9_OFDM)
319    {
320        return DRV_RATE_9M;
321    }
322
323    if (uRateBitMap & DRV_RATE_MASK_6_OFDM)
324    {
325        return DRV_RATE_6M;
326    }
327
328    if (uRateBitMap & DRV_RATE_MASK_5_5_CCK)
329    {
330        return DRV_RATE_5_5M;
331    }
332
333    if (uRateBitMap & DRV_RATE_MASK_2_BARKER)
334    {
335        return DRV_RATE_2M;
336    }
337
338    if (uRateBitMap & DRV_RATE_MASK_1_BARKER)
339    {
340        return DRV_RATE_1M;
341    }
342
343    return DRV_RATE_INVALID;
344}
345
346/************************************************************************
347 *                        validateNetworkRate                           *
348 ************************************************************************
349DESCRIPTION: Verify that the input nitwork rate is valid
350
351INPUT:      rate    -   input network rate
352
353OUTPUT:
354
355
356RETURN:     TI_OK if valid, otherwise TI_NOK
357
358************************************************************************/
359static TI_STATUS rate_ValidateNet (ENetRate eRate)
360{
361    switch (eRate)
362    {
363        case NET_RATE_1M:
364        case NET_RATE_1M_BASIC:
365        case NET_RATE_2M:
366        case NET_RATE_2M_BASIC:
367        case NET_RATE_5_5M:
368        case NET_RATE_5_5M_BASIC:
369        case NET_RATE_11M:
370        case NET_RATE_11M_BASIC:
371        case NET_RATE_22M:
372        case NET_RATE_22M_BASIC:
373        case NET_RATE_6M:
374        case NET_RATE_6M_BASIC:
375        case NET_RATE_9M:
376        case NET_RATE_9M_BASIC:
377        case NET_RATE_12M:
378        case NET_RATE_12M_BASIC:
379        case NET_RATE_18M:
380        case NET_RATE_18M_BASIC:
381        case NET_RATE_24M:
382        case NET_RATE_24M_BASIC:
383        case NET_RATE_36M:
384        case NET_RATE_36M_BASIC:
385        case NET_RATE_48M:
386        case NET_RATE_48M_BASIC:
387        case NET_RATE_54M:
388        case NET_RATE_54M_BASIC:
389            return TI_OK;
390
391        default:
392            return TI_NOK;
393    }
394}
395
396/************************************************************************
397 *                        getMaxBasicRate                           *
398 ************************************************************************
399DESCRIPTION: Goes over an array of network rates and returns the max basic rate
400
401INPUT:      pRates      -   Rate array
402
403OUTPUT:
404
405
406RETURN:     Max basic rate (in network units)
407
408************************************************************************/
409ENetRate rate_GetMaxBasicFromStr (TI_UINT8 *pRatesString, TI_UINT32 len, ENetRate eMaxRate)
410{
411    TI_UINT32   i;
412
413    for (i = 0; i < len; i++)
414    {
415        if (NET_BASIC_RATE (pRatesString[i]) && rate_ValidateNet (pRatesString[i]) == TI_OK)
416        {
417            eMaxRate = TI_MAX (pRatesString[i], eMaxRate);
418        }
419    }
420
421    return eMaxRate;
422}
423
424/************************************************************************
425 *                        getMaxActiveRate                          *
426 ************************************************************************
427DESCRIPTION: Goes over an array of network rates and returns the max active rate
428
429INPUT:      pRates      -   Rate array
430
431OUTPUT:
432
433
434RETURN:     Max active rate (in network units)
435
436************************************************************************/
437ENetRate rate_GetMaxActiveFromStr (TI_UINT8 *pRatesString, TI_UINT32 len, ENetRate eMaxRate)
438{
439    TI_UINT32   i;
440
441    for (i = 0; i < len; i++)
442    {
443        if (NET_ACTIVE_RATE (pRatesString[i]) && rate_ValidateNet (pRatesString[i]) == TI_OK)
444        {
445            eMaxRate = TI_MAX (pRatesString[i], eMaxRate);
446        }
447    }
448
449    return eMaxRate;
450}
451
452TI_UINT32 rate_DrvToNumber (ERate eRate)
453{
454    switch (eRate)
455    {
456        case DRV_RATE_1M:
457            return 1;
458
459        case DRV_RATE_2M:
460            return 2;
461
462        case DRV_RATE_5_5M:
463            return 5;
464
465        case DRV_RATE_11M:
466            return 11;
467
468        case DRV_RATE_22M:
469            return 22;
470
471        case DRV_RATE_6M:
472            return 6;
473
474        case DRV_RATE_9M:
475            return 9;
476
477        case DRV_RATE_12M:
478            return 12;
479
480        case DRV_RATE_18M:
481            return 18;
482
483        case DRV_RATE_24M:
484            return 24;
485
486        case DRV_RATE_36M:
487            return 36;
488
489        case DRV_RATE_48M:
490            return 48;
491
492        case DRV_RATE_54M:
493            return 54;
494
495        case DRV_RATE_MCS_0:
496            return 6;
497
498        case DRV_RATE_MCS_1:
499            return 13;
500
501        case DRV_RATE_MCS_2:
502            return 19;
503
504        case DRV_RATE_MCS_3:
505            return 26;
506
507        case DRV_RATE_MCS_4:
508            return 39;
509
510        case DRV_RATE_MCS_5:
511            return 52;
512
513        case DRV_RATE_MCS_6:
514            return 58;
515
516        case DRV_RATE_MCS_7:
517            return 65;
518
519        default:
520            return 0;
521    }
522}
523
524/************************************************************************
525 *                        bitMapToNetworkStringRates                    *
526 ************************************************************************
527DESCRIPTION: Converts bit map to the rates string
528
529INPUT:      suppRatesBitMap     -   bit map of supported rates
530            basicRatesBitMap    -   bit map of basic rates
531
532OUTPUT:     string - network format rates array,
533            len - rates array length
534            firstOFDMrateLoc - the index of first OFDM rate in the rates array.
535
536
537RETURN:     None
538
539************************************************************************/
540TI_STATUS rate_DrvBitmapToNetStr (TI_UINT32   uSuppRatesBitMap,
541                                  TI_UINT32   uBasicRatesBitMap,
542                                  TI_UINT8    *string,
543                                  TI_UINT32   *len,
544                                  TI_UINT32   *pFirstOfdmRate)
545{
546    TI_UINT32   i = 0;
547
548    if (uSuppRatesBitMap & DRV_RATE_MASK_1_BARKER)
549    {
550        if (uBasicRatesBitMap & DRV_RATE_MASK_1_BARKER)
551        {
552            string[i++] = NET_RATE_1M_BASIC;
553        }
554        else
555        {
556            string[i++] = NET_RATE_1M;
557        }
558    }
559
560    if (uSuppRatesBitMap & DRV_RATE_MASK_2_BARKER)
561    {
562        if (uBasicRatesBitMap & DRV_RATE_MASK_2_BARKER)
563        {
564            string[i++] = NET_RATE_2M_BASIC;
565        }
566        else
567        {
568            string[i++] = NET_RATE_2M;
569        }
570    }
571
572    if (uSuppRatesBitMap & DRV_RATE_MASK_5_5_CCK)
573    {
574        if (uBasicRatesBitMap & DRV_RATE_MASK_5_5_CCK)
575        {
576            string[i++] = NET_RATE_5_5M_BASIC;
577        }
578        else
579        {
580            string[i++] = NET_RATE_5_5M;
581        }
582    }
583
584    if (uSuppRatesBitMap & DRV_RATE_MASK_11_CCK)
585    {
586        if (uBasicRatesBitMap & DRV_RATE_MASK_11_CCK)
587        {
588            string[i++] = NET_RATE_11M_BASIC;
589        }
590        else
591        {
592            string[i++] = NET_RATE_11M;
593        }
594    }
595
596    if (uSuppRatesBitMap & DRV_RATE_MASK_22_PBCC)
597    {
598        if (uBasicRatesBitMap & DRV_RATE_MASK_22_PBCC)
599        {
600            string[i++] = NET_RATE_22M_BASIC;
601        }
602        else
603        {
604            string[i++] = NET_RATE_22M;
605        }
606    }
607
608    *pFirstOfdmRate = i;
609
610    if (uSuppRatesBitMap & DRV_RATE_MASK_6_OFDM)
611    {
612        if (uBasicRatesBitMap & DRV_RATE_MASK_6_OFDM)
613        {
614            string[i++] = NET_RATE_6M_BASIC;
615        }
616        else
617        {
618            string[i++] = NET_RATE_6M;
619        }
620    }
621
622    if (uSuppRatesBitMap & DRV_RATE_MASK_9_OFDM)
623    {
624        if (uBasicRatesBitMap & DRV_RATE_MASK_9_OFDM)
625        {
626            string[i++] = NET_RATE_9M_BASIC;
627        }
628        else
629        {
630            string[i++] = NET_RATE_9M;
631        }
632    }
633
634    if (uSuppRatesBitMap & DRV_RATE_MASK_12_OFDM)
635    {
636        if (uBasicRatesBitMap & DRV_RATE_MASK_12_OFDM)
637        {
638            string[i++] = NET_RATE_12M_BASIC;
639        }
640        else
641        {
642            string[i++] = NET_RATE_12M;
643        }
644    }
645
646    if (uSuppRatesBitMap & DRV_RATE_MASK_18_OFDM)
647    {
648        if (uBasicRatesBitMap & DRV_RATE_MASK_18_OFDM)
649        {
650            string[i++] = NET_RATE_18M_BASIC;
651        }
652        else
653        {
654            string[i++] = NET_RATE_18M;
655        }
656    }
657
658    if (uSuppRatesBitMap & DRV_RATE_MASK_24_OFDM)
659    {
660        if (uBasicRatesBitMap & DRV_RATE_MASK_24_OFDM)
661        {
662            string[i++] = NET_RATE_24M_BASIC;
663        }
664        else
665        {
666            string[i++] = NET_RATE_24M;
667        }
668    }
669
670    if (uSuppRatesBitMap & DRV_RATE_MASK_36_OFDM)
671    {
672        if (uBasicRatesBitMap & DRV_RATE_MASK_36_OFDM)
673        {
674            string[i++] = NET_RATE_36M_BASIC;
675        }
676        else
677        {
678            string[i++] = NET_RATE_36M;
679        }
680    }
681
682    if (uSuppRatesBitMap & DRV_RATE_MASK_48_OFDM)
683    {
684        if (uBasicRatesBitMap & DRV_RATE_MASK_48_OFDM)
685        {
686            string[i++] = NET_RATE_48M_BASIC;
687        }
688        else
689        {
690            string[i++] = NET_RATE_48M;
691        }
692    }
693
694    if (uSuppRatesBitMap & DRV_RATE_MASK_54_OFDM)
695    {
696        if (uBasicRatesBitMap & DRV_RATE_MASK_54_OFDM)
697        {
698            string[i++] = NET_RATE_54M_BASIC;
699        }
700        else
701        {
702            string[i++] = NET_RATE_54M;
703        }
704    }
705
706/*
707 * Don't convert MCS rates,
708 * it is only for basic and extended rates, otherwise it will exceed 16 bytes string
709 * the code below is a sample and can be used in the future, if need to parse MCS rates bit map to string
710 */
711#if 0
712    if (uSuppRatesBitMap & DRV_RATE_MASK_MCS_0_OFDM)
713    {
714        if (uBasicRatesBitMap & DRV_RATE_MASK_MCS_0_OFDM)
715        {
716            string[i++] = NET_RATE_MCS0_BASIC;
717        }
718        else
719        {
720            string[i++] = NET_RATE_MCS0;
721        }
722    }
723
724    if (uSuppRatesBitMap & DRV_RATE_MASK_MCS_1_OFDM)
725    {
726        if (uBasicRatesBitMap & DRV_RATE_MASK_MCS_1_OFDM)
727        {
728            string[i++] = NET_RATE_MCS1_BASIC;
729        }
730        else
731        {
732            string[i++] = NET_RATE_MCS1;
733        }
734    }
735
736    if (uSuppRatesBitMap & DRV_RATE_MASK_MCS_2_OFDM)
737    {
738        if (uBasicRatesBitMap & DRV_RATE_MASK_MCS_2_OFDM)
739        {
740            string[i++] = NET_RATE_MCS2_BASIC;
741        }
742        else
743        {
744            string[i++] = NET_RATE_MCS2;
745        }
746    }
747
748    if (uSuppRatesBitMap & DRV_RATE_MASK_MCS_3_OFDM)
749    {
750        if (uBasicRatesBitMap & DRV_RATE_MASK_MCS_3_OFDM)
751        {
752            string[i++] = NET_RATE_MCS3_BASIC;
753        }
754        else
755        {
756            string[i++] = NET_RATE_MCS3;
757        }
758    }
759
760    if (uSuppRatesBitMap & DRV_RATE_MASK_MCS_4_OFDM)
761    {
762        if (uBasicRatesBitMap & DRV_RATE_MASK_MCS_4_OFDM)
763        {
764            string[i++] = NET_RATE_MCS4_BASIC;
765        }
766        else
767        {
768            string[i++] = NET_RATE_MCS4;
769        }
770    }
771
772    if (uSuppRatesBitMap & DRV_RATE_MASK_MCS_5_OFDM)
773    {
774        if (uBasicRatesBitMap & DRV_RATE_MASK_MCS_5_OFDM)
775        {
776            string[i++] = NET_RATE_MCS5_BASIC;
777        }
778        else
779        {
780            string[i++] = NET_RATE_MCS5;
781        }
782    }
783
784    if (uSuppRatesBitMap & DRV_RATE_MASK_MCS_6_OFDM)
785    {
786        if (uBasicRatesBitMap & DRV_RATE_MASK_MCS_6_OFDM)
787        {
788            string[i++] = NET_RATE_MCS6_BASIC;
789        }
790        else
791        {
792            string[i++] = NET_RATE_MCS6;
793        }
794    }
795
796    if (uSuppRatesBitMap & DRV_RATE_MASK_MCS_7_OFDM)
797    {
798        if (uBasicRatesBitMap & DRV_RATE_MASK_MCS_7_OFDM)
799        {
800            string[i++] = NET_RATE_MCS7_BASIC;
801        }
802        else
803        {
804            string[i++] = NET_RATE_MCS7;
805        }
806    }
807#endif
808
809    *len = i;
810
811    return TI_OK;
812}
813
814/************************************************************************
815 *                        networkStringToBitMapSuppRates                *
816 ************************************************************************
817DESCRIPTION: Converts supported rates string to the bit map
818
819INPUT:      string      -   array of rates in the network format
820            len - array length
821
822OUTPUT:     bitMap - bit map of rates.
823
824RETURN:     None
825
826************************************************************************/
827TI_STATUS rate_NetStrToDrvBitmap (TI_UINT32 *pBitMap, TI_UINT8 *string, TI_UINT32 len)
828{
829    TI_UINT32   i;
830
831    *pBitMap = 0;
832
833    for (i = 0; i < len; i++)
834    {
835        switch (string[i])
836        {
837            case NET_RATE_1M:
838            case NET_RATE_1M_BASIC:
839                *pBitMap |= DRV_RATE_MASK_1_BARKER;
840                break;
841
842            case NET_RATE_2M:
843            case NET_RATE_2M_BASIC:
844                *pBitMap |= DRV_RATE_MASK_2_BARKER;
845                break;
846
847            case NET_RATE_5_5M:
848            case NET_RATE_5_5M_BASIC:
849                *pBitMap |= DRV_RATE_MASK_5_5_CCK;
850                break;
851
852            case NET_RATE_11M:
853            case NET_RATE_11M_BASIC:
854                *pBitMap |= DRV_RATE_MASK_11_CCK;
855                break;
856
857            case NET_RATE_22M:
858            case NET_RATE_22M_BASIC:
859                *pBitMap |= DRV_RATE_MASK_22_PBCC;
860                break;
861
862            case NET_RATE_6M:
863            case NET_RATE_6M_BASIC:
864                *pBitMap |= DRV_RATE_MASK_6_OFDM;
865                break;
866
867            case NET_RATE_9M:
868            case NET_RATE_9M_BASIC:
869                *pBitMap |= DRV_RATE_MASK_9_OFDM;
870                break;
871
872            case NET_RATE_12M:
873            case NET_RATE_12M_BASIC:
874                *pBitMap |= DRV_RATE_MASK_12_OFDM;
875                break;
876
877            case NET_RATE_18M:
878            case NET_RATE_18M_BASIC:
879                *pBitMap |= DRV_RATE_MASK_18_OFDM;
880                break;
881
882            case NET_RATE_24M:
883            case NET_RATE_24M_BASIC:
884                *pBitMap |= DRV_RATE_MASK_24_OFDM;
885                break;
886
887            case NET_RATE_36M:
888            case NET_RATE_36M_BASIC:
889                *pBitMap |= DRV_RATE_MASK_36_OFDM;
890                break;
891
892            case NET_RATE_48M:
893            case NET_RATE_48M_BASIC:
894                *pBitMap |= DRV_RATE_MASK_48_OFDM;
895                break;
896
897            case NET_RATE_54M:
898            case NET_RATE_54M_BASIC:
899                *pBitMap |= DRV_RATE_MASK_54_OFDM;
900                break;
901
902            case NET_RATE_MCS0:
903            case NET_RATE_MCS0_BASIC:
904                *pBitMap |= DRV_RATE_MASK_MCS_0_OFDM;
905                break;
906
907            case NET_RATE_MCS1:
908            case NET_RATE_MCS1_BASIC:
909                *pBitMap |= DRV_RATE_MASK_MCS_1_OFDM;
910                break;
911
912            case NET_RATE_MCS2:
913            case NET_RATE_MCS2_BASIC:
914                *pBitMap |= DRV_RATE_MASK_MCS_2_OFDM;
915                break;
916
917            case NET_RATE_MCS3:
918            case NET_RATE_MCS3_BASIC:
919                *pBitMap |= DRV_RATE_MASK_MCS_3_OFDM;
920                break;
921
922            case NET_RATE_MCS4:
923            case NET_RATE_MCS4_BASIC:
924                *pBitMap |= DRV_RATE_MASK_MCS_4_OFDM;
925                break;
926
927            case NET_RATE_MCS5:
928            case NET_RATE_MCS5_BASIC:
929                *pBitMap |= DRV_RATE_MASK_MCS_5_OFDM;
930                break;
931
932            case NET_RATE_MCS6:
933            case NET_RATE_MCS6_BASIC:
934                *pBitMap |= DRV_RATE_MASK_MCS_6_OFDM;
935                break;
936
937            case NET_RATE_MCS7:
938            case NET_RATE_MCS7_BASIC:
939                *pBitMap |= DRV_RATE_MASK_MCS_7_OFDM;
940                break;
941
942            default:
943                break;
944        }
945    }
946
947    return TI_OK;
948}
949
950/************************************************************************
951 *                        networkStringToBitMapBasicRates               *
952 ************************************************************************
953DESCRIPTION: Converts basic rates string to the bit map
954
955INPUT:      string      -   array of rates in the network format
956            len - array length
957
958OUTPUT:     bitMap - bit map of rates.
959
960RETURN:     None
961
962************************************************************************/
963TI_STATUS rate_NetBasicStrToDrvBitmap (TI_UINT32 *pBitMap, TI_UINT8 *string, TI_UINT32 len)
964{
965    TI_UINT32   i;
966
967    *pBitMap = 0;
968
969    for (i = 0; i < len; i++)
970    {
971        switch (string[i])
972        {
973            case NET_RATE_1M_BASIC:
974                *pBitMap |= DRV_RATE_MASK_1_BARKER;
975                break;
976
977            case NET_RATE_2M_BASIC:
978                *pBitMap |= DRV_RATE_MASK_2_BARKER;
979                break;
980
981            case NET_RATE_5_5M_BASIC:
982                *pBitMap |= DRV_RATE_MASK_5_5_CCK;
983                break;
984
985            case NET_RATE_11M_BASIC:
986                *pBitMap |= DRV_RATE_MASK_11_CCK;
987                break;
988
989            case NET_RATE_22M_BASIC:
990                *pBitMap |= DRV_RATE_MASK_22_PBCC;
991                break;
992
993            case NET_RATE_6M_BASIC:
994                *pBitMap |= DRV_RATE_MASK_6_OFDM;
995                break;
996
997            case NET_RATE_9M_BASIC:
998                *pBitMap |= DRV_RATE_MASK_9_OFDM;
999                break;
1000
1001            case NET_RATE_12M_BASIC:
1002                *pBitMap |= DRV_RATE_MASK_12_OFDM;
1003                break;
1004
1005            case NET_RATE_18M_BASIC:
1006                *pBitMap |= DRV_RATE_MASK_18_OFDM;
1007                break;
1008
1009            case NET_RATE_24M_BASIC:
1010                *pBitMap |= DRV_RATE_MASK_24_OFDM;
1011                break;
1012
1013            case NET_RATE_36M_BASIC:
1014                *pBitMap |= DRV_RATE_MASK_36_OFDM;
1015                break;
1016
1017            case NET_RATE_48M_BASIC:
1018                *pBitMap |= DRV_RATE_MASK_48_OFDM;
1019                break;
1020
1021            case NET_RATE_54M_BASIC:
1022                *pBitMap |= DRV_RATE_MASK_54_OFDM;
1023                break;
1024
1025            case NET_RATE_MCS0_BASIC:
1026                *pBitMap |= DRV_RATE_MASK_MCS_0_OFDM;
1027                break;
1028
1029            case NET_RATE_MCS1_BASIC:
1030                *pBitMap |= DRV_RATE_MASK_MCS_1_OFDM;
1031                break;
1032
1033            case NET_RATE_MCS2_BASIC:
1034                *pBitMap |= DRV_RATE_MASK_MCS_2_OFDM;
1035                break;
1036
1037            case NET_RATE_MCS3_BASIC:
1038                *pBitMap |= DRV_RATE_MASK_MCS_3_OFDM;
1039                break;
1040
1041            case NET_RATE_MCS4_BASIC:
1042                *pBitMap |= DRV_RATE_MASK_MCS_4_OFDM;
1043                break;
1044
1045            case NET_RATE_MCS5_BASIC:
1046                *pBitMap |= DRV_RATE_MASK_MCS_5_OFDM;
1047                break;
1048
1049            case NET_RATE_MCS6_BASIC:
1050                *pBitMap |= DRV_RATE_MASK_MCS_6_OFDM;
1051                break;
1052
1053            case NET_RATE_MCS7_BASIC:
1054                *pBitMap |= DRV_RATE_MASK_MCS_7_OFDM;
1055                break;
1056
1057            default:
1058                break;
1059        }
1060    }
1061
1062    return TI_OK;
1063}
1064
1065
1066/************************************************************************
1067 *                        rate_McsNetStrToDrvBitmap                     *
1068 ************************************************************************
1069DESCRIPTION: Converts MCS IEs rates bit map to driver bit map.
1070             supported only MCS0 - MCS7
1071
1072INPUT:      string - HT capabilities IE in the network format
1073            len - IE array length
1074
1075OUTPUT:     bitMap - bit map of rates.
1076
1077RETURN:     None
1078
1079************************************************************************/
1080TI_STATUS rate_McsNetStrToDrvBitmap (TI_UINT32 *pBitMap, TI_UINT8 *string)
1081{
1082    *pBitMap = string[0];
1083
1084    *pBitMap = *pBitMap << (DRV_RATE_MCS_0 - 1);
1085
1086    return TI_OK;
1087}
1088
1089
1090TI_STATUS rate_DrvBitmapToHwBitmap (TI_UINT32 uDrvBitMap, TI_UINT32 *pHwBitmap)
1091{
1092    TI_UINT32   uHwBitMap = 0;
1093
1094    if (uDrvBitMap & DRV_RATE_MASK_1_BARKER)
1095    {
1096        uHwBitMap |= HW_BIT_RATE_1MBPS;
1097    }
1098
1099    if (uDrvBitMap & DRV_RATE_MASK_2_BARKER)
1100    {
1101        uHwBitMap |= HW_BIT_RATE_2MBPS;
1102    }
1103
1104    if (uDrvBitMap & DRV_RATE_MASK_5_5_CCK)
1105    {
1106        uHwBitMap |= HW_BIT_RATE_5_5MBPS;
1107    }
1108
1109    if (uDrvBitMap & DRV_RATE_MASK_11_CCK)
1110    {
1111        uHwBitMap |= HW_BIT_RATE_11MBPS;
1112    }
1113
1114    if (uDrvBitMap & DRV_RATE_MASK_22_PBCC)
1115    {
1116        uHwBitMap |= HW_BIT_RATE_22MBPS;
1117    }
1118
1119    if (uDrvBitMap & DRV_RATE_MASK_6_OFDM)
1120    {
1121        uHwBitMap |= HW_BIT_RATE_6MBPS;
1122    }
1123
1124    if (uDrvBitMap & DRV_RATE_MASK_9_OFDM)
1125    {
1126        uHwBitMap |= HW_BIT_RATE_9MBPS;
1127    }
1128
1129    if (uDrvBitMap & DRV_RATE_MASK_12_OFDM)
1130    {
1131        uHwBitMap |= HW_BIT_RATE_12MBPS;
1132    }
1133
1134    if (uDrvBitMap & DRV_RATE_MASK_18_OFDM)
1135    {
1136        uHwBitMap |= HW_BIT_RATE_18MBPS;
1137    }
1138
1139    if (uDrvBitMap & DRV_RATE_MASK_24_OFDM)
1140    {
1141        uHwBitMap |= HW_BIT_RATE_24MBPS;
1142    }
1143
1144    if (uDrvBitMap & DRV_RATE_MASK_36_OFDM)
1145    {
1146        uHwBitMap |= HW_BIT_RATE_36MBPS;
1147    }
1148
1149    if (uDrvBitMap & DRV_RATE_MASK_48_OFDM)
1150    {
1151        uHwBitMap |= HW_BIT_RATE_48MBPS;
1152    }
1153
1154    if (uDrvBitMap & DRV_RATE_MASK_54_OFDM)
1155    {
1156        uHwBitMap |= HW_BIT_RATE_54MBPS;
1157    }
1158
1159    if (uDrvBitMap & DRV_RATE_MASK_MCS_0_OFDM)
1160    {
1161        uHwBitMap |= HW_BIT_RATE_MCS_0;
1162    }
1163
1164    if (uDrvBitMap & DRV_RATE_MASK_MCS_1_OFDM)
1165    {
1166        uHwBitMap |= HW_BIT_RATE_MCS_1;
1167    }
1168
1169    if (uDrvBitMap & DRV_RATE_MASK_MCS_2_OFDM)
1170    {
1171        uHwBitMap |= HW_BIT_RATE_MCS_2;
1172    }
1173
1174    if (uDrvBitMap & DRV_RATE_MASK_MCS_3_OFDM)
1175    {
1176        uHwBitMap |= HW_BIT_RATE_MCS_3;
1177    }
1178
1179    if (uDrvBitMap & DRV_RATE_MASK_MCS_4_OFDM)
1180    {
1181        uHwBitMap |= HW_BIT_RATE_MCS_4;
1182    }
1183
1184    if (uDrvBitMap & DRV_RATE_MASK_MCS_5_OFDM)
1185    {
1186        uHwBitMap |= HW_BIT_RATE_MCS_5;
1187    }
1188
1189    if (uDrvBitMap & DRV_RATE_MASK_MCS_6_OFDM)
1190    {
1191        uHwBitMap |= HW_BIT_RATE_MCS_6;
1192    }
1193
1194    if (uDrvBitMap & DRV_RATE_MASK_MCS_7_OFDM)
1195    {
1196        uHwBitMap |= HW_BIT_RATE_MCS_7;
1197    }
1198
1199    *pHwBitmap = uHwBitMap;
1200
1201    return TI_OK;
1202}
1203
1204TI_STATUS rate_PolicyToDrv (ETxRateClassId ePolicyRate, ERate *eAppRate)
1205{
1206    TI_UINT8     Rate = 0;
1207    TI_STATUS status = TI_OK;
1208
1209    switch (ePolicyRate)
1210    {
1211        case txPolicy1    :   Rate =  DRV_RATE_1M   ;    break;
1212        case txPolicy2    :   Rate =  DRV_RATE_2M   ;    break;
1213        case txPolicy5_5  :   Rate =  DRV_RATE_5_5M ;    break;
1214        case txPolicy11   :   Rate =  DRV_RATE_11M  ;    break;
1215        case txPolicy22   :   Rate =  DRV_RATE_22M  ;    break;
1216        case txPolicy6    :   Rate =  DRV_RATE_6M   ;    break;
1217        case txPolicy9    :   Rate =  DRV_RATE_9M   ;    break;
1218        case txPolicy12   :   Rate =  DRV_RATE_12M  ;    break;
1219        case txPolicy18   :   Rate =  DRV_RATE_18M  ;    break;
1220        case txPolicy24   :   Rate =  DRV_RATE_24M  ;    break;
1221        case txPolicy36   :   Rate =  DRV_RATE_36M  ;    break;
1222        case txPolicy48   :   Rate =  DRV_RATE_48M  ;    break;
1223        case txPolicy54   :   Rate =  DRV_RATE_54M  ;    break;
1224        case txPolicyMcs0 :   Rate =  DRV_RATE_MCS_0;    break;
1225        case txPolicyMcs1 :   Rate =  DRV_RATE_MCS_1;    break;
1226        case txPolicyMcs2 :   Rate =  DRV_RATE_MCS_2;    break;
1227        case txPolicyMcs3 :   Rate =  DRV_RATE_MCS_3;    break;
1228        case txPolicyMcs4 :   Rate =  DRV_RATE_MCS_4;    break;
1229        case txPolicyMcs5 :   Rate =  DRV_RATE_MCS_5;    break;
1230        case txPolicyMcs6 :   Rate =  DRV_RATE_MCS_6;    break;
1231        case txPolicyMcs7 :   Rate =  DRV_RATE_MCS_7;    break;
1232
1233        default:
1234            status = TI_NOK;
1235            break;
1236    }
1237
1238    if (status == TI_OK)
1239        *eAppRate = Rate;
1240    else
1241        *eAppRate = DRV_RATE_INVALID;
1242
1243    return status;
1244}
1245
1246
1247TI_UINT32 rate_BasicToDrvBitmap (EBasicRateSet eBasicRateSet, TI_BOOL bDot11a)
1248{
1249    if (!bDot11a)
1250    {
1251        switch (eBasicRateSet)
1252        {
1253            case BASIC_RATE_SET_1_2:
1254                return DRV_RATE_MASK_1_BARKER |
1255                       DRV_RATE_MASK_2_BARKER;
1256
1257            case BASIC_RATE_SET_1_2_5_5_11:
1258                return DRV_RATE_MASK_1_BARKER |
1259                       DRV_RATE_MASK_2_BARKER |
1260                       DRV_RATE_MASK_5_5_CCK |
1261                       DRV_RATE_MASK_11_CCK;
1262
1263            case BASIC_RATE_SET_UP_TO_12:
1264                return DRV_RATE_MASK_1_BARKER |
1265                       DRV_RATE_MASK_2_BARKER |
1266                       DRV_RATE_MASK_5_5_CCK |
1267                       DRV_RATE_MASK_11_CCK |
1268                       DRV_RATE_MASK_6_OFDM |
1269                       DRV_RATE_MASK_9_OFDM |
1270                       DRV_RATE_MASK_12_OFDM;
1271
1272            case BASIC_RATE_SET_UP_TO_18:
1273                return DRV_RATE_MASK_1_BARKER |
1274                       DRV_RATE_MASK_2_BARKER |
1275                       DRV_RATE_MASK_5_5_CCK |
1276                       DRV_RATE_MASK_11_CCK |
1277                       DRV_RATE_MASK_6_OFDM |
1278                       DRV_RATE_MASK_9_OFDM |
1279                       DRV_RATE_MASK_12_OFDM |
1280                       DRV_RATE_MASK_18_OFDM;
1281
1282            case BASIC_RATE_SET_UP_TO_24:
1283                return DRV_RATE_MASK_1_BARKER |
1284                       DRV_RATE_MASK_2_BARKER |
1285                       DRV_RATE_MASK_5_5_CCK |
1286                       DRV_RATE_MASK_11_CCK |
1287                       DRV_RATE_MASK_6_OFDM |
1288                       DRV_RATE_MASK_9_OFDM |
1289                       DRV_RATE_MASK_12_OFDM |
1290                       DRV_RATE_MASK_18_OFDM |
1291                       DRV_RATE_MASK_24_OFDM;
1292
1293            case BASIC_RATE_SET_UP_TO_36:
1294                return DRV_RATE_MASK_1_BARKER |
1295                       DRV_RATE_MASK_2_BARKER |
1296                       DRV_RATE_MASK_5_5_CCK |
1297                       DRV_RATE_MASK_11_CCK |
1298                       DRV_RATE_MASK_6_OFDM |
1299                       DRV_RATE_MASK_9_OFDM |
1300                       DRV_RATE_MASK_12_OFDM |
1301                       DRV_RATE_MASK_18_OFDM |
1302                       DRV_RATE_MASK_24_OFDM |
1303                       DRV_RATE_MASK_36_OFDM;
1304
1305            case BASIC_RATE_SET_UP_TO_48:
1306                return DRV_RATE_MASK_1_BARKER |
1307                       DRV_RATE_MASK_2_BARKER |
1308                       DRV_RATE_MASK_5_5_CCK |
1309                       DRV_RATE_MASK_11_CCK |
1310                       DRV_RATE_MASK_6_OFDM |
1311                       DRV_RATE_MASK_9_OFDM |
1312                       DRV_RATE_MASK_12_OFDM |
1313                       DRV_RATE_MASK_18_OFDM |
1314                       DRV_RATE_MASK_24_OFDM |
1315                       DRV_RATE_MASK_36_OFDM |
1316                       DRV_RATE_MASK_48_OFDM;
1317
1318            case BASIC_RATE_SET_UP_TO_54:
1319                return DRV_RATE_MASK_1_BARKER |
1320                       DRV_RATE_MASK_2_BARKER |
1321                       DRV_RATE_MASK_5_5_CCK |
1322                       DRV_RATE_MASK_11_CCK |
1323                       DRV_RATE_MASK_6_OFDM |
1324                       DRV_RATE_MASK_9_OFDM |
1325                       DRV_RATE_MASK_12_OFDM |
1326                       DRV_RATE_MASK_18_OFDM |
1327                       DRV_RATE_MASK_24_OFDM |
1328                       DRV_RATE_MASK_36_OFDM |
1329                       DRV_RATE_MASK_48_OFDM |
1330                       DRV_RATE_MASK_54_OFDM;
1331
1332            case BASIC_RATE_SET_6_12_24:
1333                return DRV_RATE_MASK_6_OFDM |
1334                       DRV_RATE_MASK_12_OFDM |
1335                       DRV_RATE_MASK_24_OFDM;
1336
1337            case BASIC_RATE_SET_1_2_5_5_6_11_12_24:
1338                return DRV_RATE_MASK_1_BARKER |
1339                       DRV_RATE_MASK_2_BARKER |
1340                       DRV_RATE_MASK_5_5_CCK |
1341                       DRV_RATE_MASK_11_CCK |
1342                       DRV_RATE_MASK_6_OFDM |
1343                       DRV_RATE_MASK_12_OFDM |
1344                       DRV_RATE_MASK_24_OFDM;
1345
1346            case BASIC_RATE_SET_ALL_MCS_RATES:
1347                return DRV_RATE_MASK_MCS_0_OFDM |
1348                       DRV_RATE_MASK_MCS_1_OFDM |
1349                       DRV_RATE_MASK_MCS_2_OFDM |
1350                       DRV_RATE_MASK_MCS_3_OFDM |
1351                       DRV_RATE_MASK_MCS_4_OFDM |
1352                       DRV_RATE_MASK_MCS_5_OFDM |
1353                       DRV_RATE_MASK_MCS_6_OFDM |
1354                       DRV_RATE_MASK_MCS_7_OFDM |
1355                       DRV_RATE_MASK_1_BARKER   |
1356                       DRV_RATE_MASK_2_BARKER   |
1357                       DRV_RATE_MASK_5_5_CCK    |
1358                       DRV_RATE_MASK_11_CCK;
1359
1360
1361            default:
1362                return DRV_RATE_MASK_1_BARKER |
1363                       DRV_RATE_MASK_2_BARKER;
1364        }
1365    }
1366    else
1367    {
1368        switch (eBasicRateSet)
1369        {
1370            case BASIC_RATE_SET_UP_TO_12:
1371                return DRV_RATE_MASK_6_OFDM |
1372                       DRV_RATE_MASK_9_OFDM |
1373                       DRV_RATE_MASK_12_OFDM;
1374
1375            case BASIC_RATE_SET_UP_TO_18:
1376                return DRV_RATE_MASK_6_OFDM |
1377                       DRV_RATE_MASK_9_OFDM |
1378                       DRV_RATE_MASK_12_OFDM |
1379                       DRV_RATE_MASK_18_OFDM;
1380
1381            case BASIC_RATE_SET_UP_TO_24:
1382                return DRV_RATE_MASK_6_OFDM |
1383                       DRV_RATE_MASK_9_OFDM |
1384                       DRV_RATE_MASK_12_OFDM |
1385                       DRV_RATE_MASK_18_OFDM |
1386                       DRV_RATE_MASK_24_OFDM;
1387
1388            case BASIC_RATE_SET_UP_TO_36:
1389                return DRV_RATE_MASK_6_OFDM |
1390                       DRV_RATE_MASK_9_OFDM |
1391                       DRV_RATE_MASK_12_OFDM |
1392                       DRV_RATE_MASK_18_OFDM |
1393                       DRV_RATE_MASK_24_OFDM |
1394                       DRV_RATE_MASK_36_OFDM;
1395
1396            case BASIC_RATE_SET_UP_TO_48:
1397                return DRV_RATE_MASK_6_OFDM |
1398                       DRV_RATE_MASK_9_OFDM |
1399                       DRV_RATE_MASK_12_OFDM |
1400                       DRV_RATE_MASK_18_OFDM |
1401                       DRV_RATE_MASK_24_OFDM |
1402                       DRV_RATE_MASK_36_OFDM |
1403                       DRV_RATE_MASK_48_OFDM;
1404
1405            case BASIC_RATE_SET_UP_TO_54:
1406                return DRV_RATE_MASK_6_OFDM |
1407                       DRV_RATE_MASK_9_OFDM |
1408                       DRV_RATE_MASK_12_OFDM |
1409                       DRV_RATE_MASK_18_OFDM |
1410                       DRV_RATE_MASK_24_OFDM |
1411                       DRV_RATE_MASK_36_OFDM |
1412                       DRV_RATE_MASK_48_OFDM |
1413                       DRV_RATE_MASK_54_OFDM;
1414
1415            case BASIC_RATE_SET_6_12_24:
1416                return DRV_RATE_MASK_6_OFDM |
1417                       DRV_RATE_MASK_12_OFDM |
1418                       DRV_RATE_MASK_24_OFDM;
1419
1420            case BASIC_RATE_SET_ALL_MCS_RATES:
1421                return DRV_RATE_MASK_MCS_0_OFDM |
1422                       DRV_RATE_MASK_MCS_1_OFDM |
1423                       DRV_RATE_MASK_MCS_2_OFDM |
1424                       DRV_RATE_MASK_MCS_3_OFDM |
1425                       DRV_RATE_MASK_MCS_4_OFDM |
1426                       DRV_RATE_MASK_MCS_5_OFDM |
1427                       DRV_RATE_MASK_MCS_6_OFDM |
1428                       DRV_RATE_MASK_MCS_7_OFDM |
1429                       DRV_RATE_MASK_6_OFDM |
1430                       DRV_RATE_MASK_12_OFDM |
1431                       DRV_RATE_MASK_24_OFDM;
1432
1433            default:
1434                return DRV_RATE_MASK_6_OFDM |
1435                       DRV_RATE_MASK_12_OFDM |
1436                       DRV_RATE_MASK_24_OFDM;
1437        }
1438    }
1439}
1440
1441TI_UINT32 rate_SupportedToDrvBitmap (ESupportedRateSet eSupportedRateSet, TI_BOOL bDot11a)
1442{
1443    if (!bDot11a)
1444    {
1445        switch (eSupportedRateSet)
1446        {
1447            case SUPPORTED_RATE_SET_1_2:
1448                return DRV_RATE_MASK_1_BARKER |
1449                       DRV_RATE_MASK_2_BARKER;
1450
1451            case SUPPORTED_RATE_SET_1_2_5_5_11:
1452                return DRV_RATE_MASK_1_BARKER |
1453                       DRV_RATE_MASK_2_BARKER |
1454                       DRV_RATE_MASK_5_5_CCK |
1455                       DRV_RATE_MASK_11_CCK;
1456
1457            case SUPPORTED_RATE_SET_1_2_5_5_11_22:
1458                return DRV_RATE_MASK_1_BARKER |
1459                       DRV_RATE_MASK_2_BARKER |
1460                       DRV_RATE_MASK_5_5_CCK |
1461                       DRV_RATE_MASK_11_CCK |
1462                       DRV_RATE_MASK_22_PBCC;
1463
1464            case SUPPORTED_RATE_SET_UP_TO_18:
1465                return DRV_RATE_MASK_1_BARKER |
1466                       DRV_RATE_MASK_2_BARKER |
1467                       DRV_RATE_MASK_5_5_CCK |
1468                       DRV_RATE_MASK_11_CCK |
1469                       DRV_RATE_MASK_6_OFDM |
1470                       DRV_RATE_MASK_9_OFDM |
1471                       DRV_RATE_MASK_12_OFDM |
1472                       DRV_RATE_MASK_18_OFDM;
1473
1474            case SUPPORTED_RATE_SET_UP_TO_24:
1475                return DRV_RATE_MASK_1_BARKER |
1476                       DRV_RATE_MASK_2_BARKER |
1477                       DRV_RATE_MASK_5_5_CCK |
1478                       DRV_RATE_MASK_11_CCK |
1479                       DRV_RATE_MASK_6_OFDM |
1480                       DRV_RATE_MASK_9_OFDM |
1481                       DRV_RATE_MASK_12_OFDM |
1482                       DRV_RATE_MASK_18_OFDM |
1483                       DRV_RATE_MASK_24_OFDM;
1484
1485            case SUPPORTED_RATE_SET_UP_TO_36:
1486                return DRV_RATE_MASK_1_BARKER |
1487                       DRV_RATE_MASK_2_BARKER |
1488                       DRV_RATE_MASK_5_5_CCK |
1489                       DRV_RATE_MASK_11_CCK |
1490                       DRV_RATE_MASK_6_OFDM |
1491                       DRV_RATE_MASK_9_OFDM |
1492                       DRV_RATE_MASK_12_OFDM |
1493                       DRV_RATE_MASK_18_OFDM |
1494                       DRV_RATE_MASK_24_OFDM |
1495                       DRV_RATE_MASK_36_OFDM;
1496
1497            case SUPPORTED_RATE_SET_UP_TO_48:
1498                return DRV_RATE_MASK_1_BARKER |
1499                       DRV_RATE_MASK_2_BARKER |
1500                       DRV_RATE_MASK_5_5_CCK |
1501                       DRV_RATE_MASK_11_CCK |
1502                       DRV_RATE_MASK_6_OFDM |
1503                       DRV_RATE_MASK_9_OFDM |
1504                       DRV_RATE_MASK_12_OFDM |
1505                       DRV_RATE_MASK_18_OFDM |
1506                       DRV_RATE_MASK_24_OFDM |
1507                       DRV_RATE_MASK_36_OFDM |
1508                       DRV_RATE_MASK_48_OFDM;
1509
1510            case SUPPORTED_RATE_SET_UP_TO_54:
1511                return DRV_RATE_MASK_1_BARKER |
1512                       DRV_RATE_MASK_2_BARKER |
1513                       DRV_RATE_MASK_5_5_CCK |
1514                       DRV_RATE_MASK_11_CCK |
1515                       DRV_RATE_MASK_6_OFDM |
1516                       DRV_RATE_MASK_9_OFDM |
1517                       DRV_RATE_MASK_12_OFDM |
1518                       DRV_RATE_MASK_18_OFDM |
1519                       DRV_RATE_MASK_24_OFDM |
1520                       DRV_RATE_MASK_36_OFDM |
1521                       DRV_RATE_MASK_48_OFDM |
1522                       DRV_RATE_MASK_54_OFDM;
1523
1524            case SUPPORTED_RATE_SET_ALL:
1525                return DRV_RATE_MASK_1_BARKER |
1526                       DRV_RATE_MASK_2_BARKER |
1527                       DRV_RATE_MASK_5_5_CCK |
1528                       DRV_RATE_MASK_11_CCK |
1529                       DRV_RATE_MASK_22_PBCC |
1530                       DRV_RATE_MASK_6_OFDM |
1531                       DRV_RATE_MASK_9_OFDM |
1532                       DRV_RATE_MASK_12_OFDM |
1533                       DRV_RATE_MASK_18_OFDM |
1534                       DRV_RATE_MASK_24_OFDM |
1535                       DRV_RATE_MASK_36_OFDM |
1536                       DRV_RATE_MASK_48_OFDM |
1537                       DRV_RATE_MASK_54_OFDM;
1538
1539            case SUPPORTED_RATE_SET_ALL_OFDM:
1540                return DRV_RATE_MASK_6_OFDM |
1541                       DRV_RATE_MASK_9_OFDM |
1542                       DRV_RATE_MASK_12_OFDM |
1543                       DRV_RATE_MASK_18_OFDM |
1544                       DRV_RATE_MASK_24_OFDM |
1545                       DRV_RATE_MASK_36_OFDM |
1546                       DRV_RATE_MASK_48_OFDM |
1547                       DRV_RATE_MASK_54_OFDM;
1548
1549            case SUPPORTED_RATE_SET_ALL_MCS_RATES:
1550                return DRV_RATE_MASK_MCS_0_OFDM |
1551                       DRV_RATE_MASK_MCS_1_OFDM |
1552                       DRV_RATE_MASK_MCS_2_OFDM |
1553                       DRV_RATE_MASK_MCS_3_OFDM |
1554                       DRV_RATE_MASK_MCS_4_OFDM |
1555                       DRV_RATE_MASK_MCS_5_OFDM |
1556                       DRV_RATE_MASK_MCS_6_OFDM |
1557                       DRV_RATE_MASK_MCS_7_OFDM |
1558                       DRV_RATE_MASK_1_BARKER |
1559                       DRV_RATE_MASK_2_BARKER |
1560                       DRV_RATE_MASK_5_5_CCK |
1561                       DRV_RATE_MASK_11_CCK |
1562                       DRV_RATE_MASK_22_PBCC |
1563                       DRV_RATE_MASK_6_OFDM |
1564                       DRV_RATE_MASK_9_OFDM |
1565                       DRV_RATE_MASK_12_OFDM |
1566                       DRV_RATE_MASK_18_OFDM |
1567                       DRV_RATE_MASK_24_OFDM |
1568                       DRV_RATE_MASK_36_OFDM |
1569                       DRV_RATE_MASK_48_OFDM |
1570                       DRV_RATE_MASK_54_OFDM;
1571
1572            default:
1573                return DRV_RATE_MASK_1_BARKER |
1574                       DRV_RATE_MASK_2_BARKER |
1575                       DRV_RATE_MASK_5_5_CCK |
1576                       DRV_RATE_MASK_11_CCK |
1577                       DRV_RATE_MASK_22_PBCC |
1578                       DRV_RATE_MASK_6_OFDM |
1579                       DRV_RATE_MASK_9_OFDM |
1580                       DRV_RATE_MASK_12_OFDM |
1581                       DRV_RATE_MASK_18_OFDM |
1582                       DRV_RATE_MASK_24_OFDM |
1583                       DRV_RATE_MASK_36_OFDM |
1584                       DRV_RATE_MASK_48_OFDM |
1585                       DRV_RATE_MASK_54_OFDM;
1586        }
1587    }
1588    else
1589    {
1590        switch (eSupportedRateSet)
1591        {
1592            case SUPPORTED_RATE_SET_UP_TO_18:
1593                return DRV_RATE_MASK_6_OFDM |
1594                       DRV_RATE_MASK_9_OFDM |
1595                       DRV_RATE_MASK_12_OFDM |
1596                       DRV_RATE_MASK_18_OFDM;
1597
1598            case SUPPORTED_RATE_SET_UP_TO_24:
1599                return DRV_RATE_MASK_6_OFDM |
1600                       DRV_RATE_MASK_9_OFDM |
1601                       DRV_RATE_MASK_12_OFDM |
1602                       DRV_RATE_MASK_18_OFDM |
1603                       DRV_RATE_MASK_24_OFDM;
1604
1605            case SUPPORTED_RATE_SET_UP_TO_36:
1606                return DRV_RATE_MASK_6_OFDM |
1607                       DRV_RATE_MASK_9_OFDM |
1608                       DRV_RATE_MASK_12_OFDM |
1609                       DRV_RATE_MASK_18_OFDM |
1610                       DRV_RATE_MASK_24_OFDM |
1611                       DRV_RATE_MASK_36_OFDM;
1612
1613            case SUPPORTED_RATE_SET_UP_TO_48:
1614                return DRV_RATE_MASK_6_OFDM |
1615                       DRV_RATE_MASK_9_OFDM |
1616                       DRV_RATE_MASK_12_OFDM |
1617                       DRV_RATE_MASK_18_OFDM |
1618                       DRV_RATE_MASK_24_OFDM |
1619                       DRV_RATE_MASK_36_OFDM |
1620                       DRV_RATE_MASK_48_OFDM;
1621
1622            case SUPPORTED_RATE_SET_UP_TO_54:
1623                return DRV_RATE_MASK_6_OFDM |
1624                       DRV_RATE_MASK_9_OFDM |
1625                       DRV_RATE_MASK_12_OFDM |
1626                       DRV_RATE_MASK_18_OFDM |
1627                       DRV_RATE_MASK_24_OFDM |
1628                       DRV_RATE_MASK_36_OFDM |
1629                       DRV_RATE_MASK_48_OFDM |
1630                       DRV_RATE_MASK_54_OFDM;
1631
1632            case SUPPORTED_RATE_SET_ALL:
1633            case SUPPORTED_RATE_SET_ALL_OFDM:
1634                return DRV_RATE_MASK_6_OFDM |
1635                       DRV_RATE_MASK_9_OFDM |
1636                       DRV_RATE_MASK_12_OFDM |
1637                       DRV_RATE_MASK_18_OFDM |
1638                       DRV_RATE_MASK_24_OFDM |
1639                       DRV_RATE_MASK_36_OFDM |
1640                       DRV_RATE_MASK_48_OFDM |
1641                       DRV_RATE_MASK_54_OFDM;
1642
1643            case SUPPORTED_RATE_SET_ALL_MCS_RATES:
1644                return DRV_RATE_MASK_MCS_0_OFDM |
1645                       DRV_RATE_MASK_MCS_1_OFDM |
1646                       DRV_RATE_MASK_MCS_2_OFDM |
1647                       DRV_RATE_MASK_MCS_3_OFDM |
1648                       DRV_RATE_MASK_MCS_4_OFDM |
1649                       DRV_RATE_MASK_MCS_5_OFDM |
1650                       DRV_RATE_MASK_MCS_6_OFDM |
1651                       DRV_RATE_MASK_MCS_7_OFDM |
1652                       DRV_RATE_MASK_6_OFDM |
1653                       DRV_RATE_MASK_9_OFDM |
1654                       DRV_RATE_MASK_12_OFDM |
1655                       DRV_RATE_MASK_18_OFDM |
1656                       DRV_RATE_MASK_24_OFDM |
1657                       DRV_RATE_MASK_36_OFDM |
1658                       DRV_RATE_MASK_48_OFDM |
1659                       DRV_RATE_MASK_54_OFDM;
1660
1661            default:
1662                return DRV_RATE_MASK_6_OFDM |
1663                       DRV_RATE_MASK_9_OFDM |
1664                       DRV_RATE_MASK_12_OFDM |
1665                       DRV_RATE_MASK_18_OFDM |
1666                       DRV_RATE_MASK_24_OFDM |
1667                       DRV_RATE_MASK_36_OFDM |
1668                       DRV_RATE_MASK_48_OFDM |
1669                       DRV_RATE_MASK_54_OFDM;
1670        }
1671    }
1672}
1673
1674TI_STATUS rate_ValidateVsBand (TI_UINT32 *pSupportedMask, TI_UINT32 *pBasicMask, TI_BOOL bDot11a)
1675{
1676    if (bDot11a)
1677    {
1678        *pSupportedMask &= ~
1679            (
1680                DRV_RATE_MASK_1_BARKER |
1681                DRV_RATE_MASK_2_BARKER |
1682                DRV_RATE_MASK_5_5_CCK |
1683                DRV_RATE_MASK_11_CCK |
1684                DRV_RATE_MASK_22_PBCC
1685            );
1686    }
1687
1688    *pBasicMask &= *pSupportedMask;
1689
1690    if (*pBasicMask == 0)
1691    {
1692        if (bDot11a)
1693        {
1694            *pBasicMask = DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_24_OFDM;
1695        }
1696        else
1697        {
1698            *pBasicMask = DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER;
1699        }
1700    }
1701
1702    return TI_OK;
1703}
1704
1705/*-----------------------------------------------------------------------------
1706Routine Name:    RateNumberToHost
1707Routine Description:
1708Arguments:
1709Return Value:    None
1710-----------------------------------------------------------------------------*/
1711ERate rate_NumberToDrv (TI_UINT32 rate)
1712{
1713    switch (rate)
1714    {
1715        case 0x1:
1716            return DRV_RATE_1M;
1717
1718        case 0x2:
1719            return DRV_RATE_2M;
1720
1721        case 0x5:
1722            return DRV_RATE_5_5M;
1723
1724        case 0xB:
1725            return DRV_RATE_11M;
1726
1727        case 0x16:
1728            return DRV_RATE_22M;
1729
1730        case 0x6:
1731            return DRV_RATE_6M;
1732
1733        case 0x9:
1734            return DRV_RATE_9M;
1735
1736        case 0xC:
1737            return DRV_RATE_12M;
1738
1739        case 0x12:
1740            return DRV_RATE_18M;
1741
1742        case 0x18:
1743            return DRV_RATE_24M;
1744
1745        case 0x24:
1746            return DRV_RATE_36M;
1747
1748        case 0x30:
1749            return DRV_RATE_48M;
1750
1751        case 0x36:
1752            return DRV_RATE_54M;
1753
1754        /* MCS rate */
1755        case 0x7:
1756            return DRV_RATE_MCS_0;
1757
1758        case 0xD:
1759            return DRV_RATE_MCS_1;
1760
1761        case 0x13:
1762            return DRV_RATE_MCS_2;
1763
1764        case 0x1A:
1765            return DRV_RATE_MCS_3;
1766
1767        case 0x27:
1768            return DRV_RATE_MCS_4;
1769
1770        case 0x34:
1771            return DRV_RATE_MCS_5;
1772
1773        case 0x3A:
1774            return DRV_RATE_MCS_6;
1775
1776        case 0x41:
1777            return DRV_RATE_MCS_7;
1778
1779        default:
1780            return DRV_RATE_6M;
1781    }
1782}
1783
1784TI_UINT32 rate_GetDrvBitmapForDefaultBasicSet ()
1785{
1786    return rate_BasicToDrvBitmap (BASIC_RATE_SET_1_2_5_5_11, TI_FALSE);
1787}
1788
1789TI_UINT32 rate_GetDrvBitmapForDefaultSupporteSet ()
1790{
1791    return rate_SupportedToDrvBitmap (SUPPORTED_RATE_SET_1_2_5_5_11, TI_FALSE);
1792}
1793
1794