1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35#include "mac.h"
36#include "rf.h"
37#include "baseband.h"
38#include "control.h"
39#include "rndis.h"
40#include "datarate.h"
41
42static int msglevel =MSG_LEVEL_INFO;
43
44
45#define BY_AL2230_REG_LEN 23
46#define CB_AL2230_INIT_SEQ 15
47#define AL2230_PWR_IDX_LEN 64
48
49#define BY_AL7230_REG_LEN 23
50#define CB_AL7230_INIT_SEQ 16
51#define AL7230_PWR_IDX_LEN 64
52
53
54#define BY_VT3226_REG_LEN 23
55#define CB_VT3226_INIT_SEQ 11
56#define VT3226_PWR_IDX_LEN 64
57
58
59
60#define BY_VT3342_REG_LEN 23
61#define CB_VT3342_INIT_SEQ 13
62#define VT3342_PWR_IDX_LEN 64
63
64
65
66
67
68
69
70
71
72BYTE abyAL2230InitTable[CB_AL2230_INIT_SEQ][3] = {
73 {0x03, 0xF7, 0x90},
74 {0x03, 0x33, 0x31},
75 {0x01, 0xB8, 0x02},
76 {0x00, 0xFF, 0xF3},
77 {0x00, 0x05, 0xA4},
78 {0x0F, 0x4D, 0xC5},
79 {0x08, 0x05, 0xB6},
80 {0x01, 0x47, 0xC7},
81 {0x00, 0x06, 0x88},
82 {0x04, 0x03, 0xB9},
83 {0x00, 0xDB, 0xBA},
84 {0x00, 0x09, 0x9B},
85 {0x0B, 0xDF, 0xFC},
86 {0x00, 0x00, 0x0D},
87 {0x00, 0x58, 0x0F}
88 };
89
90BYTE abyAL2230ChannelTable0[CB_MAX_CHANNEL_24G][3] = {
91 {0x03, 0xF7, 0x90},
92 {0x03, 0xF7, 0x90},
93 {0x03, 0xE7, 0x90},
94 {0x03, 0xE7, 0x90},
95 {0x03, 0xF7, 0xA0},
96 {0x03, 0xF7, 0xA0},
97 {0x03, 0xE7, 0xA0},
98 {0x03, 0xE7, 0xA0},
99 {0x03, 0xF7, 0xB0},
100 {0x03, 0xF7, 0xB0},
101 {0x03, 0xE7, 0xB0},
102 {0x03, 0xE7, 0xB0},
103 {0x03, 0xF7, 0xC0},
104 {0x03, 0xE7, 0xC0}
105 };
106
107BYTE abyAL2230ChannelTable1[CB_MAX_CHANNEL_24G][3] = {
108 {0x03, 0x33, 0x31},
109 {0x0B, 0x33, 0x31},
110 {0x03, 0x33, 0x31},
111 {0x0B, 0x33, 0x31},
112 {0x03, 0x33, 0x31},
113 {0x0B, 0x33, 0x31},
114 {0x03, 0x33, 0x31},
115 {0x0B, 0x33, 0x31},
116 {0x03, 0x33, 0x31},
117 {0x0B, 0x33, 0x31},
118 {0x03, 0x33, 0x31},
119 {0x0B, 0x33, 0x31},
120 {0x03, 0x33, 0x31},
121 {0x06, 0x66, 0x61}
122 };
123
124
125
126BYTE abyAL7230InitTable[CB_AL7230_INIT_SEQ][3] = {
127 {0x20, 0x37, 0x90},
128 {0x13, 0x33, 0x31},
129 {0x84, 0x1F, 0xF2},
130 {0x3F, 0xDF, 0xA3},
131 {0x7F, 0xD7, 0x84},
132
133
134 {0x80, 0x2B, 0x55},
135 {0x56, 0xAF, 0x36},
136 {0xCE, 0x02, 0x07},
137 {0x6E, 0xBC, 0x98},
138 {0x22, 0x1B, 0xB9},
139 {0xE0, 0x00, 0x0A},
140 {0x08, 0x03, 0x1B},
141
142
143 {0x00, 0x0A, 0x3C},
144 {0xFF, 0xFF, 0xFD},
145 {0x00, 0x00, 0x0E},
146 {0x1A, 0xBA, 0x8F}
147 };
148
149BYTE abyAL7230InitTableAMode[CB_AL7230_INIT_SEQ][3] = {
150 {0x2F, 0xF5, 0x20},
151 {0x00, 0x00, 0x01},
152 {0x45, 0x1F, 0xE2},
153 {0x5F, 0xDF, 0xA3},
154 {0x6F, 0xD7, 0x84},
155 {0x85, 0x3F, 0x55},
156 {0x56, 0xAF, 0x36},
157 {0xCE, 0x02, 0x07},
158 {0x6E, 0xBC, 0x98},
159 {0x22, 0x1B, 0xB9},
160 {0xE0, 0x60, 0x0A},
161 {0x08, 0x03, 0x1B},
162 {0x00, 0x14, 0x7C},
163 {0xFF, 0xFF, 0xFD},
164 {0x00, 0x00, 0x0E},
165 {0x12, 0xBA, 0xCF}
166 };
167
168BYTE abyAL7230ChannelTable0[CB_MAX_CHANNEL][3] = {
169 {0x20, 0x37, 0x90},
170 {0x20, 0x37, 0x90},
171 {0x20, 0x37, 0x90},
172 {0x20, 0x37, 0x90},
173 {0x20, 0x37, 0xA0},
174 {0x20, 0x37, 0xA0},
175 {0x20, 0x37, 0xA0},
176 {0x20, 0x37, 0xA0},
177 {0x20, 0x37, 0xB0},
178 {0x20, 0x37, 0xB0},
179 {0x20, 0x37, 0xB0},
180 {0x20, 0x37, 0xB0},
181 {0x20, 0x37, 0xC0},
182 {0x20, 0x37, 0xC0},
183
184
185 {0x0F, 0xF5, 0x20},
186 {0x2F, 0xF5, 0x20},
187 {0x0F, 0xF5, 0x20},
188 {0x0F, 0xF5, 0x20},
189 {0x2F, 0xF5, 0x20},
190 {0x0F, 0xF5, 0x20},
191 {0x2F, 0xF5, 0x30},
192 {0x2F, 0xF5, 0x30},
193
194
195
196
197 {0x0F, 0xF5, 0x40},
198 {0x2F, 0xF5, 0x40},
199 {0x0F, 0xF5, 0x40},
200 {0x0F, 0xF5, 0x40},
201 {0x2F, 0xF5, 0x40},
202 {0x2F, 0xF5, 0x50},
203 {0x2F, 0xF5, 0x60},
204 {0x2F, 0xF5, 0x60},
205 {0x2F, 0xF5, 0x70},
206 {0x2F, 0xF5, 0x70},
207 {0x2F, 0xF5, 0x70},
208 {0x2F, 0xF5, 0x70},
209 {0x2F, 0xF5, 0x70},
210 {0x2F, 0xF5, 0x70},
211 {0x2F, 0xF5, 0x80},
212 {0x2F, 0xF5, 0x80},
213 {0x2F, 0xF5, 0x80},
214 {0x2F, 0xF5, 0x90},
215
216 {0x2F, 0xF5, 0xC0},
217 {0x2F, 0xF5, 0xC0},
218 {0x2F, 0xF5, 0xC0},
219 {0x2F, 0xF5, 0xD0},
220 {0x2F, 0xF5, 0xD0},
221 {0x2F, 0xF5, 0xD0},
222 {0x2F, 0xF5, 0xE0},
223 {0x2F, 0xF5, 0xE0},
224 {0x2F, 0xF5, 0xE0},
225 {0x2F, 0xF5, 0xF0},
226 {0x2F, 0xF5, 0xF0},
227 {0x2F, 0xF6, 0x00},
228 {0x2F, 0xF6, 0x00},
229 {0x2F, 0xF6, 0x00},
230 {0x2F, 0xF6, 0x10},
231 {0x2F, 0xF6, 0x10}
232 };
233
234BYTE abyAL7230ChannelTable1[CB_MAX_CHANNEL][3] = {
235 {0x13, 0x33, 0x31},
236 {0x1B, 0x33, 0x31},
237 {0x03, 0x33, 0x31},
238 {0x0B, 0x33, 0x31},
239 {0x13, 0x33, 0x31},
240 {0x1B, 0x33, 0x31},
241 {0x03, 0x33, 0x31},
242 {0x0B, 0x33, 0x31},
243 {0x13, 0x33, 0x31},
244 {0x1B, 0x33, 0x31},
245 {0x03, 0x33, 0x31},
246 {0x0B, 0x33, 0x31},
247 {0x13, 0x33, 0x31},
248 {0x06, 0x66, 0x61},
249
250
251 {0x1D, 0x55, 0x51},
252 {0x00, 0x00, 0x01},
253 {0x02, 0xAA, 0xA1},
254 {0x08, 0x00, 0x01},
255 {0x0A, 0xAA, 0xA1},
256 {0x0D, 0x55, 0x51},
257 {0x15, 0x55, 0x51},
258 {0x00, 0x00, 0x01},
259
260
261
262 {0x1D, 0x55, 0x51},
263 {0x00, 0x00, 0x01},
264 {0x02, 0xAA, 0xA1},
265 {0x08, 0x00, 0x01},
266 {0x0A, 0xAA, 0xA1},
267 {0x15, 0x55, 0x51},
268 {0x05, 0x55, 0x51},
269 {0x0A, 0xAA, 0xA1},
270 {0x10, 0x00, 0x01},
271 {0x15, 0x55, 0x51},
272 {0x1A, 0xAA, 0xA1},
273 {0x00, 0x00, 0x01},
274 {0x05, 0x55, 0x51},
275 {0x0A, 0xAA, 0xA1},
276 {0x15, 0x55, 0x51},
277 {0x00, 0x00, 0x01},
278 {0x0A, 0xAA, 0xA1},
279 {0x15, 0x55, 0x51},
280 {0x15, 0x55, 0x51},
281 {0x00, 0x00, 0x01},
282 {0x0A, 0xAA, 0xA1},
283 {0x15, 0x55, 0x51},
284 {0x00, 0x00, 0x01},
285 {0x0A, 0xAA, 0xA1},
286 {0x15, 0x55, 0x51},
287 {0x00, 0x00, 0x01},
288 {0x0A, 0xAA, 0xA1},
289 {0x15, 0x55, 0x51},
290 {0x00, 0x00, 0x01},
291 {0x18, 0x00, 0x01},
292 {0x02, 0xAA, 0xA1},
293 {0x0D, 0x55, 0x51},
294 {0x18, 0x00, 0x01},
295 {0x02, 0xAA, 0xB1}
296 };
297
298BYTE abyAL7230ChannelTable2[CB_MAX_CHANNEL][3] = {
299 {0x7F, 0xD7, 0x84},
300 {0x7F, 0xD7, 0x84},
301 {0x7F, 0xD7, 0x84},
302 {0x7F, 0xD7, 0x84},
303 {0x7F, 0xD7, 0x84},
304 {0x7F, 0xD7, 0x84},
305 {0x7F, 0xD7, 0x84},
306 {0x7F, 0xD7, 0x84},
307 {0x7F, 0xD7, 0x84},
308 {0x7F, 0xD7, 0x84},
309 {0x7F, 0xD7, 0x84},
310 {0x7F, 0xD7, 0x84},
311 {0x7F, 0xD7, 0x84},
312 {0x7F, 0xD7, 0x84},
313
314
315 {0x7F, 0xD7, 0x84},
316 {0x6F, 0xD7, 0x84},
317 {0x7F, 0xD7, 0x84},
318 {0x7F, 0xD7, 0x84},
319 {0x7F, 0xD7, 0x84},
320 {0x7F, 0xD7, 0x84},
321 {0x7F, 0xD7, 0x84},
322 {0x6F, 0xD7, 0x84},
323
324
325
326 {0x7F, 0xD7, 0x84},
327 {0x6F, 0xD7, 0x84},
328 {0x7F, 0xD7, 0x84},
329 {0x7F, 0xD7, 0x84},
330 {0x7F, 0xD7, 0x84},
331 {0x7F, 0xD7, 0x84},
332 {0x7F, 0xD7, 0x84},
333 {0x7F, 0xD7, 0x84},
334 {0x7F, 0xD7, 0x84},
335 {0x7F, 0xD7, 0x84},
336 {0x7F, 0xD7, 0x84},
337 {0x6F, 0xD7, 0x84},
338 {0x7F, 0xD7, 0x84},
339 {0x7F, 0xD7, 0x84},
340 {0x7F, 0xD7, 0x84},
341 {0x6F, 0xD7, 0x84},
342 {0x7F, 0xD7, 0x84},
343 {0x7F, 0xD7, 0x84},
344 {0x7F, 0xD7, 0x84},
345 {0x6F, 0xD7, 0x84},
346 {0x7F, 0xD7, 0x84},
347 {0x7F, 0xD7, 0x84},
348 {0x6F, 0xD7, 0x84},
349 {0x7F, 0xD7, 0x84},
350 {0x7F, 0xD7, 0x84},
351 {0x6F, 0xD7, 0x84},
352 {0x7F, 0xD7, 0x84},
353 {0x7F, 0xD7, 0x84},
354 {0x6F, 0xD7, 0x84},
355 {0x7F, 0xD7, 0x84},
356 {0x7F, 0xD7, 0x84},
357 {0x7F, 0xD7, 0x84},
358 {0x7F, 0xD7, 0x84},
359 {0x7F, 0xD7, 0x84}
360 };
361
362
363BYTE abyVT3226_InitTable[CB_VT3226_INIT_SEQ][3] = {
364 {0x03, 0xFF, 0x80},
365 {0x02, 0x82, 0xA1},
366 {0x03, 0xC6, 0xA2},
367 {0x01, 0x97, 0x93},
368 {0x03, 0x66, 0x64},
369 {0x00, 0x61, 0xA5},
370 {0x01, 0x7B, 0xD6},
371 {0x00, 0x80, 0x17},
372 {0x03, 0xF8, 0x08},
373 {0x00, 0x02, 0x39},
374 {0x02, 0x00, 0x2A}
375 };
376
377BYTE abyVT3226D0_InitTable[CB_VT3226_INIT_SEQ][3] = {
378 {0x03, 0xFF, 0x80},
379 {0x03, 0x02, 0x21},
380 {0x03, 0xC6, 0xA2},
381 {0x01, 0x97, 0x93},
382 {0x03, 0x66, 0x64},
383 {0x00, 0x71, 0xA5},
384 {0x01, 0x15, 0xC6},
385 {0x01, 0x2E, 0x07},
386 {0x00, 0x58, 0x08},
387 {0x00, 0x02, 0x79},
388 {0x02, 0x01, 0xAA}
389 };
390
391
392BYTE abyVT3226_ChannelTable0[CB_MAX_CHANNEL_24G][3] = {
393 {0x01, 0x97, 0x83},
394 {0x01, 0x97, 0x83},
395 {0x01, 0x97, 0x93},
396 {0x01, 0x97, 0x93},
397 {0x01, 0x97, 0x93},
398 {0x01, 0x97, 0x93},
399 {0x01, 0x97, 0xA3},
400 {0x01, 0x97, 0xA3},
401 {0x01, 0x97, 0xA3},
402 {0x01, 0x97, 0xA3},
403 {0x01, 0x97, 0xB3},
404 {0x01, 0x97, 0xB3},
405 {0x01, 0x97, 0xB3},
406 {0x03, 0x37, 0xC3}
407 };
408
409BYTE abyVT3226_ChannelTable1[CB_MAX_CHANNEL_24G][3] = {
410 {0x02, 0x66, 0x64},
411 {0x03, 0x66, 0x64},
412 {0x00, 0x66, 0x64},
413 {0x01, 0x66, 0x64},
414 {0x02, 0x66, 0x64},
415 {0x03, 0x66, 0x64},
416 {0x00, 0x66, 0x64},
417 {0x01, 0x66, 0x64},
418 {0x02, 0x66, 0x64},
419 {0x03, 0x66, 0x64},
420 {0x00, 0x66, 0x64},
421 {0x01, 0x66, 0x64},
422 {0x02, 0x66, 0x64},
423 {0x00, 0xCC, 0xC4}
424 };
425
426
427
428
429DWORD dwVT3226D0LoCurrentTable[CB_MAX_CHANNEL_24G] = {
430 0x0135C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW,
431 0x0135C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW,
432 0x0235C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW,
433 0x0235C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW,
434 0x0235C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW,
435 0x0335C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW,
436 0x0335C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW,
437 0x0335C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW,
438 0x0335C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW,
439 0x0335C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW,
440 0x0335C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW,
441 0x0335C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW,
442 0x0335C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW,
443 0x0135C600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW
444};
445
446
447
448
449BYTE abyVT3342A0_InitTable[CB_VT3342_INIT_SEQ][3] = {
450 {0x03, 0xFF, 0x80},
451 {0x02, 0x08, 0x81},
452 {0x00, 0xC6, 0x02},
453 {0x03, 0xC5, 0x13},
454 {0x00, 0xEE, 0xE4},
455 {0x00, 0x71, 0xA5},
456 {0x01, 0x75, 0x46},
457 {0x01, 0x40, 0x27},
458 {0x01, 0x54, 0x08},
459 {0x00, 0x01, 0x69},
460 {0x02, 0x00, 0xAA},
461 {0x00, 0x08, 0xCB},
462 {0x01, 0x70, 0x0C}
463 };
464
465
466
467
468
469
470
471
472BYTE abyVT3342_ChannelTable0[CB_MAX_CHANNEL][3] = {
473 {0x02, 0x05, 0x03},
474 {0x01, 0x15, 0x03},
475 {0x03, 0xC5, 0x03},
476 {0x02, 0x65, 0x03},
477 {0x01, 0x15, 0x13},
478 {0x03, 0xC5, 0x13},
479 {0x02, 0x05, 0x13},
480 {0x01, 0x15, 0x13},
481 {0x03, 0xC5, 0x13},
482 {0x02, 0x65, 0x13},
483 {0x01, 0x15, 0x23},
484 {0x03, 0xC5, 0x23},
485 {0x02, 0x05, 0x23},
486 {0x00, 0xD5, 0x23},
487
488
489 {0x01, 0x15, 0x13},
490 {0x01, 0x15, 0x13},
491 {0x01, 0x15, 0x13},
492 {0x01, 0x15, 0x13},
493 {0x01, 0x15, 0x13},
494 {0x01, 0x15, 0x13},
495 {0x01, 0x15, 0x13},
496 {0x01, 0x15, 0x13},
497
498
499
500 {0x01, 0x15, 0x13},
501 {0x01, 0x15, 0x13},
502 {0x01, 0x15, 0x13},
503 {0x01, 0x15, 0x13},
504 {0x01, 0x15, 0x13},
505 {0x01, 0x15, 0x13},
506 {0x01, 0x15, 0x13},
507 {0x01, 0x55, 0x63},
508 {0x01, 0x55, 0x63},
509 {0x02, 0xA5, 0x63},
510 {0x02, 0xA5, 0x63},
511 {0x00, 0x05, 0x73},
512 {0x00, 0x05, 0x73},
513 {0x01, 0x55, 0x73},
514 {0x02, 0xA5, 0x73},
515 {0x00, 0x05, 0x83},
516 {0x01, 0x55, 0x83},
517 {0x02, 0xA5, 0x83},
518
519 {0x02, 0xA5, 0x83},
520 {0x02, 0xA5, 0x83},
521 {0x02, 0xA5, 0x83},
522 {0x02, 0xA5, 0x83},
523 {0x02, 0xA5, 0x83},
524 {0x02, 0xA5, 0x83},
525 {0x02, 0xA5, 0x83},
526 {0x02, 0xA5, 0x83},
527 {0x02, 0xA5, 0x83},
528 {0x02, 0xA5, 0x83},
529 {0x02, 0xA5, 0x83},
530
531 {0x00, 0x05, 0xF3},
532 {0x01, 0x56, 0x03},
533 {0x02, 0xA6, 0x03},
534 {0x00, 0x06, 0x03},
535 {0x00, 0x06, 0x03}
536 };
537
538BYTE abyVT3342_ChannelTable1[CB_MAX_CHANNEL][3] = {
539 {0x01, 0x99, 0x94},
540 {0x02, 0x44, 0x44},
541 {0x02, 0xEE, 0xE4},
542 {0x03, 0x99, 0x94},
543 {0x00, 0x44, 0x44},
544 {0x00, 0xEE, 0xE4},
545 {0x01, 0x99, 0x94},
546 {0x02, 0x44, 0x44},
547 {0x02, 0xEE, 0xE4},
548 {0x03, 0x99, 0x94},
549 {0x00, 0x44, 0x44},
550 {0x00, 0xEE, 0xE4},
551 {0x01, 0x99, 0x94},
552 {0x03, 0x33, 0x34},
553
554
555 {0x00, 0x44, 0x44},
556 {0x00, 0x44, 0x44},
557 {0x00, 0x44, 0x44},
558 {0x00, 0x44, 0x44},
559 {0x00, 0x44, 0x44},
560 {0x00, 0x44, 0x44},
561 {0x00, 0x44, 0x44},
562 {0x00, 0x44, 0x44},
563
564
565
566 {0x00, 0x44, 0x44},
567 {0x00, 0x44, 0x44},
568 {0x00, 0x44, 0x44},
569 {0x00, 0x44, 0x44},
570 {0x00, 0x44, 0x44},
571 {0x00, 0x44, 0x44},
572 {0x00, 0x44, 0x44},
573 {0x01, 0x55, 0x54},
574 {0x01, 0x55, 0x54},
575 {0x02, 0xAA, 0xA4},
576 {0x02, 0xAA, 0xA4},
577 {0x00, 0x00, 0x04},
578 {0x00, 0x00, 0x04},
579 {0x01, 0x55, 0x54},
580 {0x02, 0xAA, 0xA4},
581 {0x00, 0x00, 0x04},
582 {0x01, 0x55, 0x54},
583 {0x02, 0xAA, 0xA4},
584 {0x02, 0xAA, 0xA4},
585 {0x02, 0xAA, 0xA4},
586 {0x02, 0xAA, 0xA4},
587 {0x02, 0xAA, 0xA4},
588 {0x02, 0xAA, 0xA4},
589 {0x02, 0xAA, 0xA4},
590 {0x02, 0xAA, 0xA4},
591 {0x02, 0xAA, 0xA4},
592 {0x02, 0xAA, 0xA4},
593 {0x02, 0xAA, 0xA4},
594 {0x02, 0xAA, 0xA4},
595 {0x03, 0x00, 0x04},
596 {0x00, 0x55, 0x54},
597 {0x01, 0xAA, 0xA4},
598 {0x03, 0x00, 0x04},
599 {0x03, 0x00, 0x04}
600 };
601
602
603
604
605
606
607
608
609const DWORD dwAL2230PowerTable[AL2230_PWR_IDX_LEN] = {
610 0x04040900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
611 0x04041900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
612 0x04042900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
613 0x04043900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
614 0x04044900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
615 0x04045900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
616 0x04046900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
617 0x04047900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
618 0x04048900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
619 0x04049900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
620 0x0404A900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
621 0x0404B900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
622 0x0404C900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
623 0x0404D900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
624 0x0404E900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
625 0x0404F900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
626 0x04050900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
627 0x04051900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
628 0x04052900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
629 0x04053900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
630 0x04054900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
631 0x04055900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
632 0x04056900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
633 0x04057900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
634 0x04058900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
635 0x04059900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
636 0x0405A900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
637 0x0405B900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
638 0x0405C900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
639 0x0405D900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
640 0x0405E900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
641 0x0405F900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
642 0x04060900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
643 0x04061900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
644 0x04062900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
645 0x04063900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
646 0x04064900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
647 0x04065900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
648 0x04066900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
649 0x04067900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
650 0x04068900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
651 0x04069900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
652 0x0406A900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
653 0x0406B900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
654 0x0406C900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
655 0x0406D900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
656 0x0406E900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
657 0x0406F900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
658 0x04070900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
659 0x04071900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
660 0x04072900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
661 0x04073900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
662 0x04074900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
663 0x04075900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
664 0x04076900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
665 0x04077900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
666 0x04078900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
667 0x04079900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
668 0x0407A900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
669 0x0407B900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
670 0x0407C900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
671 0x0407D900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
672 0x0407E900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW,
673 0x0407F900+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW
674 };
675
676
677
678
679
680
681
682
683
684
685const BYTE RFaby11aChannelIndex[200] = {
686
687 00, 00, 00, 00, 00, 00, 23, 24, 25, 00,
688 26, 27, 00, 00, 00, 28, 00, 00, 00, 00,
689 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
690 00, 00, 00, 29, 00, 30, 00, 31, 00, 32,
691 00, 33, 00, 34, 00, 35, 00, 36, 00, 00,
692 00, 37, 00, 00, 00, 38, 00, 00, 00, 39,
693 00, 00, 00, 40, 00, 00, 00, 00, 00, 00,
694 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
695 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
696 00, 00, 00, 00, 00, 00, 00, 00, 00, 41,
697
698 00, 00, 00, 42, 00, 00, 00, 43, 00, 00,
699 00, 44, 00, 00, 00, 45, 00, 00, 00, 46,
700 00, 00, 00, 47, 00, 00, 00, 48, 00, 00,
701 00, 49, 00, 00, 00, 50, 00, 00, 00, 51,
702 00, 00, 00, 00, 00, 00, 00, 00, 52, 00,
703 00, 00, 53, 00, 00, 00, 54, 00, 00, 00,
704 55, 00, 00, 00, 56, 00, 00, 00, 00, 00,
705 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
706 00, 00, 15, 16, 17, 00, 18, 19, 20, 00,
707 00, 21, 00, 00, 00, 22, 00, 00, 00, 00
708};
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725BOOL IFRFbWriteEmbeded (PSDevice pDevice, DWORD dwData)
726{
727 BYTE pbyData[4];
728
729 pbyData[0] = (BYTE)dwData;
730 pbyData[1] = (BYTE)(dwData>>8);
731 pbyData[2] = (BYTE)(dwData>>16);
732 pbyData[3] = (BYTE)(dwData>>24);
733 CONTROLnsRequestOut(pDevice,
734 MESSAGE_TYPE_WRITE_IFRF,
735 0,
736 0,
737 4,
738 pbyData
739 );
740
741
742 return TRUE;
743}
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759BOOL RFbSetPower (
760 PSDevice pDevice,
761 unsigned int uRATE,
762 unsigned int uCH
763 )
764{
765BOOL bResult = TRUE;
766BYTE byPwr = pDevice->byCCKPwr;
767
768 if (pDevice->dwDiagRefCount != 0) {
769 return TRUE;
770 }
771
772 switch (uRATE) {
773 case RATE_1M:
774 case RATE_2M:
775 case RATE_5M:
776 case RATE_11M:
777 byPwr = pDevice->abyCCKPwrTbl[uCH-1];
778 break;
779 case RATE_6M:
780 case RATE_9M:
781 case RATE_18M:
782 case RATE_24M:
783 case RATE_36M:
784 case RATE_48M:
785 case RATE_54M:
786 if (uCH > CB_MAX_CHANNEL_24G) {
787 byPwr = pDevice->abyOFDMAPwrTbl[uCH-15];
788 } else {
789 byPwr = pDevice->abyOFDMPwrTbl[uCH-1];
790 }
791 break;
792 }
793
794 bResult = RFbRawSetPower(pDevice, byPwr, uRATE);
795
796 return bResult;
797}
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813BOOL RFbRawSetPower (
814 PSDevice pDevice,
815 BYTE byPwr,
816 unsigned int uRATE
817 )
818{
819BOOL bResult = TRUE;
820
821 if (pDevice->byCurPwr == byPwr)
822 return TRUE;
823
824 pDevice->byCurPwr = byPwr;
825
826 switch (pDevice->byRFType) {
827
828 case RF_AL2230 :
829 if (pDevice->byCurPwr >= AL2230_PWR_IDX_LEN)
830 return FALSE;
831 bResult &= IFRFbWriteEmbeded(pDevice, dwAL2230PowerTable[pDevice->byCurPwr]);
832 if (uRATE <= RATE_11M)
833 bResult &= IFRFbWriteEmbeded(pDevice, 0x0001B400+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW);
834 else
835 bResult &= IFRFbWriteEmbeded(pDevice, 0x0005A400+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW);
836 break;
837
838 case RF_AL2230S :
839 if (pDevice->byCurPwr >= AL2230_PWR_IDX_LEN)
840 return FALSE;
841 bResult &= IFRFbWriteEmbeded(pDevice, dwAL2230PowerTable[pDevice->byCurPwr]);
842 if (uRATE <= RATE_11M) {
843 bResult &= IFRFbWriteEmbeded(pDevice, 0x040C1400+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW);
844 bResult &= IFRFbWriteEmbeded(pDevice, 0x00299B00+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW);
845 }else {
846 bResult &= IFRFbWriteEmbeded(pDevice, 0x0005A400+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW);
847 bResult &= IFRFbWriteEmbeded(pDevice, 0x00099B00+(BY_AL2230_REG_LEN<<3)+IFREGCTL_REGW);
848 }
849 break;
850
851
852 case RF_AIROHA7230:
853 {
854 DWORD dwMax7230Pwr;
855
856 if (uRATE <= RATE_11M) {
857 bResult &= IFRFbWriteEmbeded(pDevice, 0x111BB900+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW);
858 }
859 else {
860 bResult &= IFRFbWriteEmbeded(pDevice, 0x221BB900+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW);
861 }
862
863 if (pDevice->byCurPwr > AL7230_PWR_IDX_LEN) return FALSE;
864
865
866 dwMax7230Pwr = 0x080C0B00 | ( (pDevice->byCurPwr) << 12 ) |
867 (BY_AL7230_REG_LEN << 3 ) | IFREGCTL_REGW;
868
869 bResult &= IFRFbWriteEmbeded(pDevice, dwMax7230Pwr);
870 break;
871 }
872 break;
873
874 case RF_VT3226:
875 {
876 DWORD dwVT3226Pwr;
877
878 if (pDevice->byCurPwr >= VT3226_PWR_IDX_LEN)
879 return FALSE;
880 dwVT3226Pwr = ((0x3F-pDevice->byCurPwr) << 20 ) | ( 0x17 << 8 ) |
881 (BY_VT3226_REG_LEN << 3 ) | IFREGCTL_REGW;
882 bResult &= IFRFbWriteEmbeded(pDevice, dwVT3226Pwr);
883 break;
884 }
885
886 case RF_VT3226D0:
887 {
888 DWORD dwVT3226Pwr;
889
890 if (pDevice->byCurPwr >= VT3226_PWR_IDX_LEN)
891 return FALSE;
892
893 if (uRATE <= RATE_11M) {
894
895 dwVT3226Pwr = ((0x3F-pDevice->byCurPwr) << 20 ) | ( 0xE07 << 8 ) |
896 (BY_VT3226_REG_LEN << 3 ) | IFREGCTL_REGW;
897 bResult &= IFRFbWriteEmbeded(pDevice, dwVT3226Pwr);
898
899 bResult &= IFRFbWriteEmbeded(pDevice, 0x03C6A200+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW);
900 if (pDevice->sMgmtObj.eScanState != WMAC_NO_SCANNING) {
901
902 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"@@@@ RFbRawSetPower> 11B mode uCurrChannel[%d]\n", pDevice->sMgmtObj.uScanChannel);
903 bResult &= IFRFbWriteEmbeded(pDevice, dwVT3226D0LoCurrentTable[pDevice->sMgmtObj.uScanChannel-1]);
904 } else {
905 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"@@@@ RFbRawSetPower> 11B mode uCurrChannel[%d]\n", pDevice->sMgmtObj.uCurrChannel);
906 bResult &= IFRFbWriteEmbeded(pDevice, dwVT3226D0LoCurrentTable[pDevice->sMgmtObj.uCurrChannel-1]);
907 }
908
909 bResult &= IFRFbWriteEmbeded(pDevice, 0x015C0800+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW);
910 } else {
911 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"@@@@ RFbRawSetPower> 11G mode\n");
912 dwVT3226Pwr = ((0x3F-pDevice->byCurPwr) << 20 ) | ( 0x7 << 8 ) |
913 (BY_VT3226_REG_LEN << 3 ) | IFREGCTL_REGW;
914 bResult &= IFRFbWriteEmbeded(pDevice, dwVT3226Pwr);
915 bResult &= IFRFbWriteEmbeded(pDevice, 0x00C6A200+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW);
916 bResult &= IFRFbWriteEmbeded(pDevice, 0x016BC600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW);
917 bResult &= IFRFbWriteEmbeded(pDevice, 0x00900800+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW);
918 }
919 break;
920 }
921
922
923 case RF_VT3342A0:
924 {
925 DWORD dwVT3342Pwr;
926
927 if (pDevice->byCurPwr >= VT3342_PWR_IDX_LEN)
928 return FALSE;
929
930 dwVT3342Pwr = ((0x3F-pDevice->byCurPwr) << 20 ) | ( 0x27 << 8 ) |
931 (BY_VT3342_REG_LEN << 3 ) | IFREGCTL_REGW;
932 bResult &= IFRFbWriteEmbeded(pDevice, dwVT3342Pwr);
933 break;
934 }
935
936 default :
937 break;
938 }
939 return bResult;
940}
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957void
958RFvRSSITodBm (
959 PSDevice pDevice,
960 BYTE byCurrRSSI,
961 long * pldBm
962 )
963{
964 BYTE byIdx = (((byCurrRSSI & 0xC0) >> 6) & 0x03);
965 signed long b = (byCurrRSSI & 0x3F);
966 signed long a = 0;
967 BYTE abyAIROHARF[4] = {0, 18, 0, 40};
968
969 switch (pDevice->byRFType) {
970 case RF_AL2230:
971 case RF_AL2230S:
972 case RF_AIROHA7230:
973 case RF_VT3226:
974 case RF_VT3226D0:
975 case RF_VT3342A0:
976 a = abyAIROHARF[byIdx];
977 break;
978 default:
979 break;
980 }
981
982 *pldBm = -1 * (a + b * 2);
983}
984
985
986
987void
988RFbRFTableDownload (
989 PSDevice pDevice
990 )
991{
992WORD wLength1 = 0,wLength2 = 0 ,wLength3 = 0;
993PBYTE pbyAddr1 = NULL,pbyAddr2 = NULL,pbyAddr3 = NULL;
994WORD wLength,wValue;
995BYTE abyArray[256];
996
997 switch ( pDevice->byRFType ) {
998 case RF_AL2230:
999 case RF_AL2230S:
1000 wLength1 = CB_AL2230_INIT_SEQ * 3;
1001 wLength2 = CB_MAX_CHANNEL_24G * 3;
1002 wLength3 = CB_MAX_CHANNEL_24G * 3;
1003 pbyAddr1 = &(abyAL2230InitTable[0][0]);
1004 pbyAddr2 = &(abyAL2230ChannelTable0[0][0]);
1005 pbyAddr3 = &(abyAL2230ChannelTable1[0][0]);
1006 break;
1007 case RF_AIROHA7230:
1008 wLength1 = CB_AL7230_INIT_SEQ * 3;
1009 wLength2 = CB_MAX_CHANNEL * 3;
1010 wLength3 = CB_MAX_CHANNEL * 3;
1011 pbyAddr1 = &(abyAL7230InitTable[0][0]);
1012 pbyAddr2 = &(abyAL7230ChannelTable0[0][0]);
1013 pbyAddr3 = &(abyAL7230ChannelTable1[0][0]);
1014 break;
1015 case RF_VT3226:
1016 wLength1 = CB_VT3226_INIT_SEQ * 3;
1017 wLength2 = CB_MAX_CHANNEL_24G * 3;
1018 wLength3 = CB_MAX_CHANNEL_24G * 3;
1019 pbyAddr1 = &(abyVT3226_InitTable[0][0]);
1020 pbyAddr2 = &(abyVT3226_ChannelTable0[0][0]);
1021 pbyAddr3 = &(abyVT3226_ChannelTable1[0][0]);
1022 break;
1023 case RF_VT3226D0:
1024 wLength1 = CB_VT3226_INIT_SEQ * 3;
1025 wLength2 = CB_MAX_CHANNEL_24G * 3;
1026 wLength3 = CB_MAX_CHANNEL_24G * 3;
1027 pbyAddr1 = &(abyVT3226D0_InitTable[0][0]);
1028 pbyAddr2 = &(abyVT3226_ChannelTable0[0][0]);
1029 pbyAddr3 = &(abyVT3226_ChannelTable1[0][0]);
1030 break;
1031 case RF_VT3342A0:
1032 wLength1 = CB_VT3342_INIT_SEQ * 3;
1033 wLength2 = CB_MAX_CHANNEL * 3;
1034 wLength3 = CB_MAX_CHANNEL * 3;
1035 pbyAddr1 = &(abyVT3342A0_InitTable[0][0]);
1036 pbyAddr2 = &(abyVT3342_ChannelTable0[0][0]);
1037 pbyAddr3 = &(abyVT3342_ChannelTable1[0][0]);
1038 break;
1039
1040 }
1041
1042
1043 memcpy(abyArray, pbyAddr1, wLength1);
1044 CONTROLnsRequestOut(pDevice,
1045 MESSAGE_TYPE_WRITE,
1046 0,
1047 MESSAGE_REQUEST_RF_INIT,
1048 wLength1,
1049 abyArray
1050 );
1051
1052 wValue = 0;
1053 while ( wLength2 > 0 ) {
1054
1055 if ( wLength2 >= 64 ) {
1056 wLength = 64;
1057 } else {
1058 wLength = wLength2;
1059 }
1060 memcpy(abyArray, pbyAddr2, wLength);
1061 CONTROLnsRequestOut(pDevice,
1062 MESSAGE_TYPE_WRITE,
1063 wValue,
1064 MESSAGE_REQUEST_RF_CH0,
1065 wLength,
1066 abyArray);
1067
1068 wLength2 -= wLength;
1069 wValue += wLength;
1070 pbyAddr2 += wLength;
1071 }
1072
1073 wValue = 0;
1074 while ( wLength3 > 0 ) {
1075
1076 if ( wLength3 >= 64 ) {
1077 wLength = 64;
1078 } else {
1079 wLength = wLength3;
1080 }
1081 memcpy(abyArray, pbyAddr3, wLength);
1082 CONTROLnsRequestOut(pDevice,
1083 MESSAGE_TYPE_WRITE,
1084 wValue,
1085 MESSAGE_REQUEST_RF_CH1,
1086 wLength,
1087 abyArray);
1088
1089 wLength3 -= wLength;
1090 wValue += wLength;
1091 pbyAddr3 += wLength;
1092 }
1093
1094
1095 if ( pDevice->byRFType == RF_AIROHA7230 ) {
1096 wLength1 = CB_AL7230_INIT_SEQ * 3;
1097 wLength2 = CB_MAX_CHANNEL * 3;
1098 pbyAddr1 = &(abyAL7230InitTableAMode[0][0]);
1099 pbyAddr2 = &(abyAL7230ChannelTable2[0][0]);
1100 memcpy(abyArray, pbyAddr1, wLength1);
1101
1102 CONTROLnsRequestOut(pDevice,
1103 MESSAGE_TYPE_WRITE,
1104 0,
1105 MESSAGE_REQUEST_RF_INIT2,
1106 wLength1,
1107 abyArray);
1108
1109
1110 wValue = 0;
1111 while ( wLength2 > 0 ) {
1112
1113 if ( wLength2 >= 64 ) {
1114 wLength = 64;
1115 } else {
1116 wLength = wLength2;
1117 }
1118 memcpy(abyArray, pbyAddr2, wLength);
1119 CONTROLnsRequestOut(pDevice,
1120 MESSAGE_TYPE_WRITE,
1121 wValue,
1122 MESSAGE_REQUEST_RF_CH2,
1123 wLength,
1124 abyArray);
1125
1126 wLength2 -= wLength;
1127 wValue += wLength;
1128 pbyAddr2 += wLength;
1129 }
1130 }
1131
1132}
1133
1134
1135BOOL s_bVT3226D0_11bLoCurrentAdjust(
1136 PSDevice pDevice,
1137 BYTE byChannel,
1138 BOOL b11bMode)
1139{
1140 BOOL bResult;
1141
1142 bResult = TRUE;
1143 if( b11bMode )
1144 bResult &= IFRFbWriteEmbeded(pDevice, dwVT3226D0LoCurrentTable[byChannel-1]);
1145 else
1146 bResult &= IFRFbWriteEmbeded(pDevice, 0x016BC600+(BY_VT3226_REG_LEN<<3)+IFREGCTL_REGW);
1147
1148 return bResult;
1149}
1150
1151
1152