3 #include "ah_internal.h"
8 #define OFDM IEEE80211_T_OFDM
9 #define CCK IEEE80211_T_CCK
10 #define TURBO IEEE80211_T_TURBO
11 #define XR ATHEROS_T_XR
12 #define HT IEEE80211_T_HT
14 HAL_RATE_TABLE ar5416_11a_table = {
15 8, /* number of rates */
19 /* valid rateCode Preamble dot11Rate Rate */
20 /* 6 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 6000, 0x0b, 0x00, (0x80|12), 0 },
21 /* 9 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 9000, 0x0f, 0x00, 18, 0 },
22 /* 12 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 12000, 0x0a, 0x00, (0x80|24), 2 },
23 /* 18 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 18000, 0x0e, 0x00, 36, 2 },
24 /* 24 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 24000, 0x09, 0x00, (0x80|48), 4 },
25 /* 36 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 36000, 0x0d, 0x00, 72, 4 },
26 /* 48 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 48000, 0x08, 0x00, 96, 4 },
27 /* 54 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 54000, 0x0c, 0x00, 108, 4 }
31 HAL_RATE_TABLE ar5416_11b_table = {
32 4, /* number of rates */
36 /* valid rateCode Preamble dot11Rate Rate */
37 /* 1 Mb */ { AH_TRUE, CCK, 60, 60, 60, 1000, 0x1b, 0x00, (0x80| 2), 0 },
38 /* 2 Mb */ { AH_TRUE, CCK, 60, 60, 60, 2000, 0x1a, 0x04, (0x80| 4), 1 },
39 /* 5.5 Mb */ { AH_TRUE, CCK, 60, 60, 60, 5500, 0x19, 0x04, (0x80|11), 1 },
40 /* 11 Mb */ { AH_TRUE, CCK, 60, 60, 60, 11000, 0x18, 0x04, (0x80|22), 1 }
44 HAL_RATE_TABLE ar5416_11g_table = {
45 12, /* number of rates */
49 /* valid rateCode Preamble dot11Rate Rate */
50 /* 1 Mb */ { AH_TRUE, CCK, 60, 60, 60, 1000, 0x1b, 0x00, (0x80| 2), 0 },
51 /* 2 Mb */ { AH_TRUE, CCK, 60, 60, 60, 2000, 0x1a, 0x04, (0x80| 4), 1 },
52 /* 5.5 Mb */ { AH_TRUE, CCK, 60, 60, 60, 5500, 0x19, 0x04, (0x80|11), 2 },
53 /* 11 Mb */ { AH_TRUE, CCK, 60, 60, 60, 11000, 0x18, 0x04, (0x80|22), 3 },
54 /* Hardware workaround - remove rates 6, 9 from rate ctrl */
55 /* 6 Mb */ { AH_FALSE, OFDM, 60, 60, 60, 6000, 0x0b, 0x00, 12, 4 },
56 /* 9 Mb */ { AH_FALSE, OFDM, 60, 60, 60, 9000, 0x0f, 0x00, 18, 4 },
57 /* 12 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 12000, 0x0a, 0x00, 24, 6 },
58 /* 18 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 18000, 0x0e, 0x00, 36, 6 },
59 /* 24 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 24000, 0x09, 0x00, 48, 8 },
60 /* 36 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 36000, 0x0d, 0x00, 72, 8 },
61 /* 48 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 48000, 0x08, 0x00, 96, 8 },
62 /* 54 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 54000, 0x0c, 0x00, 108, 8 }
66 HAL_RATE_TABLE ar5416_11ng_table = {
68 28, /* number of rates */
72 /* valid rateCode Preamble dot11Rate Rate */
73 /* 1 Mb */ { AH_TRUE, CCK, 60, 60, 60, 1000, 0x1b, 0x00, (0x80| 2), 0 },
74 /* 2 Mb */ { AH_TRUE, CCK, 60, 60, 60, 2000, 0x1a, 0x04, (0x80| 4), 1 },
75 /* 5.5 Mb */ { AH_TRUE, CCK, 60, 60, 60, 5500, 0x19, 0x04, (0x80|11), 2 },
76 /* 11 Mb */ { AH_TRUE, CCK, 60, 60, 60, 11000, 0x18, 0x04, (0x80|22), 3 },
77 /* Hardware workaround - remove rates 6, 9 from rate ctrl */
78 /* 6 Mb */ { AH_FALSE, OFDM, 60, 60, 60, 6000, 0x0b, 0x00, 12, 4 },
79 /* 9 Mb */ { AH_FALSE, OFDM, 60, 60, 60, 9000, 0x0f, 0x00, 18, 4 },
80 /* 12 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 12000, 0x0a, 0x00, 24, 6 },
81 /* 18 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 18000, 0x0e, 0x00, 36, 6 },
82 /* 24 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 24000, 0x09, 0x00, 48, 8 },
83 /* 36 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 36000, 0x0d, 0x00, 72, 8 },
84 /* 48 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 48000, 0x08, 0x00, 96, 8 },
85 /* 54 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 54000, 0x0c, 0x00, 108, 8 },
86 /* 6.5 Mb */ { AH_TRUE, HT, 60,60, 60, 6500, 0x80, 0x00, 0, 4 },
87 /* 13 Mb */ { AH_TRUE, HT, 60, 60, 60, 13000, 0x81, 0x00, 1, 6 },
88 /*19.5 Mb */ { AH_TRUE, HT, 60,60, 60, 19500, 0x82, 0x00, 2, 6 },
89 /* 26 Mb */ { AH_TRUE, HT, 60, 60, 60, 26000, 0x83, 0x00, 3, 8 },
90 /* 39 Mb */ { AH_TRUE, HT, 60, 60, 60, 39000, 0x84, 0x00, 4, 8 },
91 /* 52 Mb */ { AH_TRUE, HT, 60, 60, 60, 52000, 0x85, 0x00, 5, 8 },
92 /*58.5 Mb */ { AH_TRUE, HT, 60,60,60, 58500, 0x86, 0x00, 6, 8 },
93 /* 65 Mb */ { AH_TRUE, HT, 60, 60, 60, 65000, 0x87, 0x00, 7, 8 },
94 /* 13 Mb */ { AH_TRUE, HT, 60, 60, 60, 13000, 0x88, 0x00, 8, 4 },
95 /* 26 Mb */ { AH_TRUE, HT, 60, 60, 60, 26000, 0x89, 0x00, 9, 6 },
96 /* 39 Mb */ { AH_TRUE, HT, 60, 60, 60, 39000, 0x8a, 0x00, 10, 6 },
97 /* 52 Mb */ { AH_TRUE, HT, 60, 60, 60, 52000, 0x8b, 0x00, 11, 8 },
98 /* 78 Mb */ { AH_TRUE, HT, 60, 60, 60, 78000, 0x8c, 0x00, 12, 8 },
99 /* 104 Mb */ { AH_TRUE, HT, 60, 60, 60, 104000, 0x8d, 0x00, 13, 8 },
100 /* 117 Mb */ { AH_TRUE, HT, 60, 60, 60, 117000, 0x8e, 0x00, 14, 8 },
101 /* 130 Mb */ { AH_TRUE, HT, 60, 60, 60, 130000, 0x8f, 0x00, 15, 8 },
105 HAL_RATE_TABLE ar5416_11na_table = {
107 24, /* number of rates */
111 /* valid rateCode Preamble dot11Rate Rate */
112 /* 6 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 6000, 0x0b, 0x00, (0x80|12), 0 },
113 /* 9 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 9000, 0x0f, 0x00, 18, 0 },
114 /* 12 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 12000, 0x0a, 0x00, (0x80|24), 2 },
115 /* 18 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 18000, 0x0e, 0x00, 36, 2 },
116 /* 24 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 24000, 0x09, 0x00, (0x80|48), 4 },
117 /* 36 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 36000, 0x0d, 0x00, 72, 4 },
118 /* 48 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 48000, 0x08, 0x00, 96, 4 },
119 /* 54 Mb */ { AH_TRUE, OFDM, 60, 60, 60, 54000, 0x0c, 0x00, 108, 4 },
120 /* 6.5 Mb */ { AH_TRUE, HT, 60, 60, 60, 6500, 0x80, 0x00, 0, 0 },
121 /* 13 Mb */ { AH_TRUE, HT, 60, 60, 60, 13000, 0x81, 0x00, 1, 2 },
122 /*19.5 Mb */ { AH_TRUE, HT, 60, 60, 60, 19500, 0x82, 0x00, 2, 2 },
123 /* 26 Mb */ { AH_TRUE, HT, 60, 60, 60, 26000, 0x83, 0x00, 3, 4 },
124 /* 39 Mb */ { AH_TRUE, HT, 60, 60, 60, 39000, 0x84, 0x00, 4, 4 },
125 /* 52 Mb */ { AH_TRUE, HT, 60, 60, 60, 52000, 0x85, 0x00, 5, 4 },
126 /*58.5 Mb */ { AH_TRUE, HT, 60, 60, 60, 58500, 0x86, 0x00, 6, 4 },
127 /* 65 Mb */ { AH_TRUE, HT, 60, 60, 60, 65000, 0x87, 0x00, 7, 4 },
128 /* 13 Mb */ { AH_TRUE, HT, 60, 60, 60, 13000, 0x88, 0x00, 8, 0 },
129 /* 26 Mb */ { AH_TRUE, HT, 60, 60, 60, 26000, 0x89, 0x00, 9, 2 },
130 /* 39 Mb */ { AH_TRUE, HT, 60, 60, 60, 39000, 0x8a, 0x00, 10, 2 },
131 /* 52 Mb */ { AH_TRUE, HT, 60, 60, 60, 52000, 0x8b, 0x00, 11, 4 },
132 /* 78 Mb */ { AH_TRUE, HT, 60, 60, 60, 78000, 0x8c, 0x00, 12, 4 },
133 /* 104 Mb */ { AH_TRUE, HT, 60, 60, 60, 104000, 0x8d, 0x00, 13, 4 },
134 /* 117 Mb */ { AH_TRUE, HT, 60, 60, 60, 117000, 0x8e, 0x00, 14, 4 },
135 /* 130 Mb */ { AH_TRUE, HT, 60, 60, 60, 130000, 0x8f, 0x00, 15, 4 },
139 adf_os_export_symbol(ar5416_11na_table);
148 const HAL_RATE_TABLE *
149 ar5416GetRateTable(struct ath_hal *ah, a_uint32_t mode)
154 rt = &ar5416_11a_table;
157 rt = &ar5416_11b_table;
160 rt = &ar5416_11g_table;
163 rt = &ar5416_11ng_table;
166 rt = &ar5416_11na_table;
177 #define OFDM IEEE80211_T_OFDM
178 #define CCK IEEE80211_T_CCK
179 #define TURBO IEEE80211_T_TURBO
180 #define XR ATHEROS_T_XR
181 #define HT IEEE80211_T_HT
183 HAL_RATE_TABLE ar5416_11ng_table = {
185 33, /* number of rates */
189 /* valid rateCode Preamble dot11Rate Rate */
190 /*[ 0] 1 Mb */ { AH_TRUE, CCK, 1000, 0x1b, 0x00, (0x80| 2), 0 },
191 /*[ 1] 2 Mb */ { AH_TRUE, CCK, 2000, 0x1a, 0x04, (0x80| 4), 1 },
192 /*[ 2] 5.5 Mb */ { AH_TRUE, CCK, 5500, 0x19, 0x04, (0x80|11), 2 },
193 /*[ 3] 11 Mb */ { AH_TRUE, CCK, 11000, 0x18, 0x04, (0x80|22), 3 },
194 /* Hardware workaround - remove rates 6, 9 from rate ctrl */
195 /*[ 4] 6 Mb */ { AH_FALSE, OFDM, 6000, 0x0b, 0x00, 12, 4 },
196 /*[ 5] 9 Mb */ { AH_FALSE, OFDM, 9000, 0x0f, 0x00, 18, 4 },
197 /*[ 6] 12 Mb */ { AH_TRUE, OFDM, 12000, 0x0a, 0x00, 24, 6 },
198 /*[ 7] 18 Mb */ { AH_TRUE, OFDM, 18000, 0x0e, 0x00, 36, 6 },
199 /*[ 8] 24 Mb */ { AH_TRUE, OFDM, 24000, 0x09, 0x00, 48, 8 },
200 /*[ 9] 36 Mb */ { AH_TRUE, OFDM, 36000, 0x0d, 0x00, 72, 8 },
201 /*[10] 48 Mb */ { AH_TRUE, OFDM, 48000, 0x08, 0x00, 96, 8 },
202 /*[11] 54 Mb */ { AH_TRUE, OFDM, 54000, 0x0c, 0x00, 108, 8 },
203 /*[12] 6.5 Mb */ { AH_TRUE, HT, 6500, 0x80, 0x00, 0, 4 },
204 /*[13] 13 Mb */ { AH_TRUE, HT, 13000, 0x81, 0x00, 1, 6 },
205 /*[14]19.5 Mb */ { AH_TRUE, HT, 19500, 0x82, 0x00, 2, 6 },
206 /*[15] 26 Mb */ { AH_TRUE, HT, 26000, 0x83, 0x00, 3, 8 },
207 /*[16] 39 Mb */ { AH_TRUE, HT, 39000, 0x84, 0x00, 4, 8 },
208 /*[17] 39 Mb */ { AH_TRUE, HT, 39000, 0x84, 0x00, 4, 8 },
209 /*[18] 52 Mb */ { AH_TRUE, HT, 52000, 0x85, 0x00, 5, 8 },
210 /*[19] 52 Mb */ { AH_TRUE, HT, 52000, 0x85, 0x00, 5, 8 },
211 /*[20]58.5 Mb */ { AH_TRUE, HT, 58500, 0x86, 0x00, 6, 8 },
212 /*[21]58.5 Mb */ { AH_TRUE, HT, 58500, 0x86, 0x00, 6, 8 },
213 /*[22] 65 Mb */ { AH_TRUE, HT, 65000, 0x87, 0x00, 7, 8 },
214 /*[23] 65 Mb */ { AH_TRUE, HT, 65000, 0x87, 0x00, 7, 8 },
215 /*[24] 52 Mb */ { AH_TRUE, HT, 52000, 0x8b, 0x00, 11, 8 },
216 /*[25] 78 Mb */ { AH_TRUE, HT, 78000, 0x8c, 0x00, 12, 8 },
217 /*[26] 78 Mb */ { AH_TRUE, HT, 78000, 0x8c, 0x00, 12, 8 },
218 /*[27] 104 Mb */ { AH_TRUE, HT, 104000, 0x8d, 0x00, 13, 8 },
219 /*[28] 104 Mb */ { AH_TRUE, HT, 104000, 0x8d, 0x00, 13, 8 },
220 /*[29] 117 Mb */ { AH_TRUE, HT, 117000, 0x8e, 0x00, 14, 8 },
221 /*[30] 117 Mb */ { AH_TRUE, HT, 117000, 0x8e, 0x00, 14, 8 },
222 /*[31] 130 Mb */ { AH_TRUE, HT, 130000, 0x8f, 0x00, 15, 8 },
223 /*[32] 130 Mb */ { AH_TRUE, HT, 130000, 0x8f, 0x00, 15, 8 },
227 #ifdef ATH_SUPPORT_A_MODE
229 HAL_RATE_TABLE ar5416_11na_table = {
231 28, /* number of rates */
235 /* valid rateCode Preamble dot11Rate Rate */
236 /*[ 0] 6 Mb */ { AH_TRUE, OFDM, 6000, 0x0b, 0x00, (0x80|12), 0 },
237 /*[ 1] 9 Mb */ { AH_TRUE, OFDM, 9000, 0x0f, 0x00, 18, 0 },
238 /*[ 2] 12 Mb */ { AH_TRUE, OFDM, 12000, 0x0a, 0x00, (0x80|24), 2 },
239 /*[ 3] 18 Mb */ { AH_TRUE, OFDM, 18000, 0x0e, 0x00, 36, 2 },
240 /*[ 4] 24 Mb */ { AH_TRUE, OFDM, 24000, 0x09, 0x00, (0x80|48), 4 },
241 /*[ 5] 36 Mb */ { AH_TRUE, OFDM, 36000, 0x0d, 0x00, 72, 4 },
242 /*[ 6] 48 Mb */ { AH_TRUE, OFDM, 48000, 0x08, 0x00, 96, 4 },
243 /*[ 7] 54 Mb */ { AH_TRUE, OFDM, 54000, 0x0c, 0x00, 108, 4 },
244 /*[ 8] 6.5 Mb */ { AH_TRUE, HT, 6500, 0x80, 0x00, 0, 0 },
245 /*[ 9] 13 Mb */ { AH_TRUE, HT, 13000, 0x81, 0x00, 1, 2 },
246 /*[10]19.5 Mb */ { AH_TRUE, HT, 19500, 0x82, 0x00, 2, 2 },
247 /*[11] 26 Mb */ { AH_TRUE, HT, 26000, 0x83, 0x00, 3, 4 },
248 /*[12] 39 Mb */ { AH_TRUE, HT, 39000, 0x84, 0x00, 4, 4 },
249 /*[13] 39 Mb */ { AH_TRUE, HT, 39000, 0x84, 0x00, 4, 4 },
250 /*[14] 52 Mb */ { AH_TRUE, HT, 52000, 0x85, 0x00, 5, 4 },
251 /*[15] 52 Mb */ { AH_TRUE, HT, 52000, 0x85, 0x00, 5, 4 },
252 /*[16]58.5 Mb */ { AH_TRUE, HT, 58500, 0x86, 0x00, 6, 4 },
253 /*[17]58.5 Mb */ { AH_TRUE, HT, 58500, 0x86, 0x00, 6, 4 },
254 /*[18] 65 Mb */ { AH_TRUE, HT, 65000, 0x87, 0x00, 7, 4 },
255 /*[19] 65 Mb */ { AH_TRUE, HT, 65000, 0x87, 0x00, 7, 4 },
256 /*[20] 52 Mb */ { AH_TRUE, HT, 52000, 0x8b, 0x00, 11, 4 },
257 /*[21] 78 Mb */ { AH_TRUE, HT, 78000, 0x8c, 0x00, 12, 4 },
258 /*[22] 78 Mb */ { AH_TRUE, HT, 78000, 0x8c, 0x00, 12, 4 },
259 /*[23] 104 Mb */ { AH_TRUE, HT, 104000, 0x8d, 0x00, 13, 4 },
260 /*[24] 104 Mb */ { AH_TRUE, HT, 104000, 0x8d, 0x00, 13, 4 },
261 /*[25] 117 Mb */ { AH_TRUE, HT, 117000, 0x8e, 0x00, 14, 4 },
262 /*[26] 117 Mb */ { AH_TRUE, HT, 117000, 0x8e, 0x00, 14, 4 },
263 /*[27] 130 Mb */ { AH_TRUE, HT, 130000, 0x8f, 0x00, 15, 4 },
275 const HAL_RATE_TABLE *
276 ar5416GetRateTable(struct ath_hal *ah, a_uint32_t mode)
281 rt = &ar5416_11ng_table;
283 #ifdef ATH_SUPPORT_A_MODE
285 rt = &ar5416_11na_table;