1/*
2 * rate.h
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.h
36 *  \brief Rate conversion
37 *
38 *  \see   rate.c
39 */
40
41#ifndef RATE_H
42#define RATE_H
43
44#include "TWDriver.h"
45
46
47typedef enum
48{
49    NET_BASIC_MASK      = 0x80,
50    NET_RATE_1M         = 0x02,
51    NET_RATE_2M         = 0x04,
52    NET_RATE_5_5M       = 0x0B,
53    NET_RATE_11M        = 0x16,
54    NET_RATE_22M        = 0x2C,
55    NET_RATE_6M         = 0x0C,
56    NET_RATE_9M         = 0x12,
57    NET_RATE_12M        = 0x18,
58    NET_RATE_18M        = 0x24,
59    NET_RATE_24M        = 0x30,
60    NET_RATE_36M        = 0x48,
61    NET_RATE_48M        = 0x60,
62    NET_RATE_54M        = 0x6C,
63    NET_RATE_MCS0       = 0x0D, /* MCS0 6.5M */
64    NET_RATE_MCS1       = 0x1A, /* MCS1 13M */
65    NET_RATE_MCS2       = 0x27, /* MCS2 19.5M */
66    NET_RATE_MCS3       = 0x34, /* MCS3 26M */
67    NET_RATE_MCS4       = 0x4E, /* MCS4 39M */
68    NET_RATE_MCS5       = 0x68, /* MCS5 52M */
69    NET_RATE_MCS6       = 0x75, /* MCS6 58.5M */
70    NET_RATE_MCS7       = 0x7F  /* MCS7 65M */
71
72} ENetRate;
73
74
75typedef enum
76{
77    NET_RATE_1M_BASIC   = (NET_RATE_1M   | NET_BASIC_MASK),
78    NET_RATE_2M_BASIC   = (NET_RATE_2M   | NET_BASIC_MASK),
79    NET_RATE_5_5M_BASIC = (NET_RATE_5_5M | NET_BASIC_MASK),
80    NET_RATE_11M_BASIC  = (NET_RATE_11M  | NET_BASIC_MASK),
81    NET_RATE_22M_BASIC  = (NET_RATE_22M  | NET_BASIC_MASK),
82    NET_RATE_6M_BASIC   = (NET_RATE_6M   | NET_BASIC_MASK),
83    NET_RATE_9M_BASIC   = (NET_RATE_9M   | NET_BASIC_MASK),
84    NET_RATE_12M_BASIC  = (NET_RATE_12M  | NET_BASIC_MASK),
85    NET_RATE_18M_BASIC  = (NET_RATE_18M  | NET_BASIC_MASK),
86    NET_RATE_24M_BASIC  = (NET_RATE_24M  | NET_BASIC_MASK),
87    NET_RATE_36M_BASIC  = (NET_RATE_36M  | NET_BASIC_MASK),
88    NET_RATE_48M_BASIC  = (NET_RATE_48M  | NET_BASIC_MASK),
89    NET_RATE_54M_BASIC  = (NET_RATE_54M  | NET_BASIC_MASK),
90    NET_RATE_MCS0_BASIC  = (NET_RATE_MCS0  | NET_BASIC_MASK),
91    NET_RATE_MCS1_BASIC  = (NET_RATE_MCS1  | NET_BASIC_MASK),
92    NET_RATE_MCS2_BASIC  = (NET_RATE_MCS2  | NET_BASIC_MASK),
93    NET_RATE_MCS3_BASIC  = (NET_RATE_MCS3  | NET_BASIC_MASK),
94    NET_RATE_MCS4_BASIC  = (NET_RATE_MCS4  | NET_BASIC_MASK),
95    NET_RATE_MCS5_BASIC  = (NET_RATE_MCS5  | NET_BASIC_MASK),
96    NET_RATE_MCS6_BASIC  = (NET_RATE_MCS6  | NET_BASIC_MASK),
97    NET_RATE_MCS7_BASIC  = (NET_RATE_MCS7  | NET_BASIC_MASK)
98
99} ENetRateBasic;
100
101
102typedef enum
103{
104    BASIC_RATE_SET_1_2                  = 0,
105    BASIC_RATE_SET_1_2_5_5_11           = 1,
106    BASIC_RATE_SET_UP_TO_12             = 2,
107    BASIC_RATE_SET_UP_TO_18             = 3,
108    BASIC_RATE_SET_1_2_5_5_6_11_12_24   = 4,
109    BASIC_RATE_SET_UP_TO_36             = 5,
110    BASIC_RATE_SET_UP_TO_48             = 6,
111    BASIC_RATE_SET_UP_TO_54             = 7,
112    BASIC_RATE_SET_UP_TO_24             = 8,
113    BASIC_RATE_SET_6_12_24              = 9,
114    BASIC_RATE_SET_ALL_MCS_RATES        = 10
115} EBasicRateSet;
116
117
118/* Keep increasing define values - related to increasing suported rates */
119typedef enum
120{
121    SUPPORTED_RATE_SET_1_2              = 0,
122    SUPPORTED_RATE_SET_1_2_5_5_11       = 1,
123    SUPPORTED_RATE_SET_1_2_5_5_11_22    = 2,
124    SUPPORTED_RATE_SET_UP_TO_18         = 3,
125    SUPPORTED_RATE_SET_UP_TO_24         = 4,
126    SUPPORTED_RATE_SET_UP_TO_36         = 5,
127    SUPPORTED_RATE_SET_UP_TO_48         = 6,
128    SUPPORTED_RATE_SET_UP_TO_54         = 7,
129    SUPPORTED_RATE_SET_ALL              = 8,
130    SUPPORTED_RATE_SET_ALL_OFDM         = 9,
131    SUPPORTED_RATE_SET_ALL_MCS_RATES    = 10
132
133} ESupportedRateSet;
134
135
136typedef enum
137{
138    DRV_MODULATION_NONE     = 0,
139    DRV_MODULATION_CCK      = 1,
140    DRV_MODULATION_PBCC     = 2,
141    DRV_MODULATION_QPSK     = 3,
142    DRV_MODULATION_OFDM     = 4
143
144} EModulationType;
145
146
147#define NET_BASIC_RATE(rate)       ((rate) & NET_BASIC_MASK)
148#define NET_ACTIVE_RATE(rate)      (!NET_BASIC_RATE (rate))
149
150
151ERate     rate_NumberToDrv (TI_UINT32 rate);
152TI_UINT32 rate_DrvToNumber (ERate eRate);
153ERate     rate_NetToDrv (TI_UINT32 rate);
154ENetRate  rate_DrvToNet (ERate eRate);
155TI_STATUS rate_DrvBitmapToNetStr (TI_UINT32 uSuppRatesBitMap, TI_UINT32 uBasicRatesBitMap, TI_UINT8 *string, TI_UINT32 *len, TI_UINT32 *pFirstOfdmRate);
156TI_STATUS rate_NetStrToDrvBitmap (TI_UINT32 *pBitMap, TI_UINT8 *string, TI_UINT32 len);
157TI_STATUS rate_NetBasicStrToDrvBitmap (TI_UINT32 *pBitMap, TI_UINT8 *string, TI_UINT32 len);
158TI_STATUS rate_McsNetStrToDrvBitmap (TI_UINT32 *pBitMap, TI_UINT8 *string);
159TI_STATUS rate_DrvBitmapToHwBitmap (TI_UINT32 uDrvBitmap, TI_UINT32 *pHwBitmap);
160TI_STATUS rate_PolicyToDrv (ETxRateClassId ePolicyRate, ERate *eAppRate);
161TI_UINT32 rate_BasicToDrvBitmap (EBasicRateSet eBasicRateSet, TI_BOOL bDot11a);
162TI_UINT32 rate_SupportedToDrvBitmap (ESupportedRateSet eSupportedRateSet, TI_BOOL bDot11a);
163
164ERate     rate_GetMaxFromDrvBitmap (TI_UINT32 uBitMap);
165ENetRate  rate_GetMaxBasicFromStr (TI_UINT8 *pRatesString, TI_UINT32 len, ENetRate eMaxRate);
166ENetRate  rate_GetMaxActiveFromStr (TI_UINT8 *pRatesString, TI_UINT32 len, ENetRate eMaxRate);
167
168TI_STATUS rate_ValidateVsBand (TI_UINT32 *pSupportedMask, TI_UINT32 *pBasicMask, TI_BOOL bDot11a);
169
170TI_UINT32 rate_GetDrvBitmapForDefaultBasicSet (void);
171TI_UINT32 rate_GetDrvBitmapForDefaultSupporteSet (void);
172
173#endif
174
175
176