Home | History | Annotate | Download | only in utils
      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 
     44 ERate 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  ************************************************************************
    140 DESCRIPTION: Translates a host rate (1, 2, 3, ....) to network rate (0x02, 0x82, 0x84, etc...)
    141 
    142 INPUT:      rate        -   Host rate
    143 
    144 OUTPUT:
    145 
    146 
    147 RETURN:     Network rate if the input rate is valid, otherwise returns 0.
    148 
    149 ************************************************************************/
    150 ENetRate 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 ***************************************************************************/
    236 ERate 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  ************************************************************************
    349 DESCRIPTION: Verify that the input nitwork rate is valid
    350 
    351 INPUT:      rate    -   input network rate
    352 
    353 OUTPUT:
    354 
    355 
    356 RETURN:     TI_OK if valid, otherwise TI_NOK
    357 
    358 ************************************************************************/
    359 static 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  ************************************************************************
    399 DESCRIPTION: Goes over an array of network rates and returns the max basic rate
    400 
    401 INPUT:      pRates      -   Rate array
    402 
    403 OUTPUT:
    404 
    405 
    406 RETURN:     Max basic rate (in network units)
    407 
    408 ************************************************************************/
    409 ENetRate 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  ************************************************************************
    427 DESCRIPTION: Goes over an array of network rates and returns the max active rate
    428 
    429 INPUT:      pRates      -   Rate array
    430 
    431 OUTPUT:
    432 
    433 
    434 RETURN:     Max active rate (in network units)
    435 
    436 ************************************************************************/
    437 ENetRate 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 
    452 TI_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  ************************************************************************
    527 DESCRIPTION: Converts bit map to the rates string
    528 
    529 INPUT:      suppRatesBitMap     -   bit map of supported rates
    530             basicRatesBitMap    -   bit map of basic rates
    531 
    532 OUTPUT:     string - network format rates array,
    533             len - rates array length
    534             firstOFDMrateLoc - the index of first OFDM rate in the rates array.
    535 
    536 
    537 RETURN:     None
    538 
    539 ************************************************************************/
    540 TI_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  ************************************************************************
    817 DESCRIPTION: Converts supported rates string to the bit map
    818 
    819 INPUT:      string      -   array of rates in the network format
    820             len - array length
    821 
    822 OUTPUT:     bitMap - bit map of rates.
    823 
    824 RETURN:     None
    825 
    826 ************************************************************************/
    827 TI_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  ************************************************************************
    953 DESCRIPTION: Converts basic rates string to the bit map
    954 
    955 INPUT:      string      -   array of rates in the network format
    956             len - array length
    957 
    958 OUTPUT:     bitMap - bit map of rates.
    959 
    960 RETURN:     None
    961 
    962 ************************************************************************/
    963 TI_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  ************************************************************************
   1069 DESCRIPTION: Converts MCS IEs rates bit map to driver bit map.
   1070              supported only MCS0 - MCS7
   1071 
   1072 INPUT:      string - HT capabilities IE in the network format
   1073             len - IE array length
   1074 
   1075 OUTPUT:     bitMap - bit map of rates.
   1076 
   1077 RETURN:     None
   1078 
   1079 ************************************************************************/
   1080 TI_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 
   1090 TI_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 
   1204 TI_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 
   1247 TI_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 
   1441 TI_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 
   1674 TI_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 /*-----------------------------------------------------------------------------
   1706 Routine Name:    RateNumberToHost
   1707 Routine Description:
   1708 Arguments:
   1709 Return Value:    None
   1710 -----------------------------------------------------------------------------*/
   1711 ERate 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 
   1784 TI_UINT32 rate_GetDrvBitmapForDefaultBasicSet ()
   1785 {
   1786     return rate_BasicToDrvBitmap (BASIC_RATE_SET_1_2_5_5_11, TI_FALSE);
   1787 }
   1788 
   1789 TI_UINT32 rate_GetDrvBitmapForDefaultSupporteSet ()
   1790 {
   1791     return rate_SupportedToDrvBitmap (SUPPORTED_RATE_SET_1_2_5_5_11, TI_FALSE);
   1792 }
   1793 
   1794