]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/staging/vt6655/baseband.c
staging: vt6655: Convert DBG_PRT to pr_<level>
[karo-tx-linux.git] / drivers / staging / vt6655 / baseband.c
1 /*
2  * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
3  * All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  *
20  * File: baseband.c
21  *
22  * Purpose: Implement functions to access baseband
23  *
24  * Author: Kyle Hsu
25  *
26  * Date: Aug.22, 2002
27  *
28  * Functions:
29  *      BBuGetFrameTime        - Calculate data frame transmitting time
30  *      BBvCaculateParameter   - Caculate PhyLength, PhyService and Phy Signal parameter for baseband Tx
31  *      BBbReadEmbedded         - Embedded read baseband register via MAC
32  *      BBbWriteEmbedded        - Embedded write baseband register via MAC
33  *      BBbIsRegBitsOn         - Test if baseband register bits on
34  *      BBbIsRegBitsOff        - Test if baseband register bits off
35  *      BBbVT3253Init          - VIA VT3253 baseband chip init code
36  *      BBvReadAllRegs         - Read All Baseband Registers
37  *      BBvLoopbackOn          - Turn on BaseBand Loopback mode
38  *      BBvLoopbackOff         - Turn off BaseBand Loopback mode
39  *
40  * Revision History:
41  *      06-10-2003 Bryan YC Fan:  Re-write codes to support VT3253 spec.
42  *      08-07-2003 Bryan YC Fan:  Add MAXIM2827/2825 and RFMD2959 support.
43  *      08-26-2003 Kyle Hsu    :  Modify BBuGetFrameTime() and BBvCalculateParameter().
44  *                                cancel the setting of MAC_REG_SOFTPWRCTL on BBbVT3253Init().
45  *                                Add the comments.
46  *      09-01-2003 Bryan YC Fan:  RF & BB tables updated.
47  *                                Modified BBvLoopbackOn & BBvLoopbackOff().
48  *
49  *
50  */
51
52 #include "tmacro.h"
53 #include "tether.h"
54 #include "mac.h"
55 #include "baseband.h"
56 #include "srom.h"
57 #include "rf.h"
58
59 /*---------------------  Static Classes  ----------------------------*/
60
61 /*---------------------  Static Variables  --------------------------*/
62
63 /*---------------------  Static Functions  --------------------------*/
64
65 /*---------------------  Export Variables  --------------------------*/
66
67 /*---------------------  Static Definitions -------------------------*/
68
69 /*---------------------  Static Classes  ----------------------------*/
70
71 /*---------------------  Static Variables  --------------------------*/
72
73 #define CB_VT3253_INIT_FOR_RFMD 446
74 static unsigned char byVT3253InitTab_RFMD[CB_VT3253_INIT_FOR_RFMD][2] = {
75         {0x00, 0x30},
76         {0x01, 0x00},
77         {0x02, 0x00},
78         {0x03, 0x00},
79         {0x04, 0x00},
80         {0x05, 0x00},
81         {0x06, 0x00},
82         {0x07, 0x00},
83         {0x08, 0x70},
84         {0x09, 0x45},
85         {0x0a, 0x2a},
86         {0x0b, 0x76},
87         {0x0c, 0x00},
88         {0x0d, 0x01},
89         {0x0e, 0x80},
90         {0x0f, 0x00},
91         {0x10, 0x00},
92         {0x11, 0x00},
93         {0x12, 0x00},
94         {0x13, 0x00},
95         {0x14, 0x00},
96         {0x15, 0x00},
97         {0x16, 0x00},
98         {0x17, 0x00},
99         {0x18, 0x00},
100         {0x19, 0x00},
101         {0x1a, 0x00},
102         {0x1b, 0x9d},
103         {0x1c, 0x05},
104         {0x1d, 0x00},
105         {0x1e, 0x00},
106         {0x1f, 0x00},
107         {0x20, 0x00},
108         {0x21, 0x00},
109         {0x22, 0x00},
110         {0x23, 0x00},
111         {0x24, 0x00},
112         {0x25, 0x4a},
113         {0x26, 0x00},
114         {0x27, 0x00},
115         {0x28, 0x00},
116         {0x29, 0x00},
117         {0x2a, 0x00},
118         {0x2b, 0x00},
119         {0x2c, 0x00},
120         {0x2d, 0xa8},
121         {0x2e, 0x1a},
122         {0x2f, 0x0c},
123         {0x30, 0x26},
124         {0x31, 0x5b},
125         {0x32, 0x00},
126         {0x33, 0x00},
127         {0x34, 0x00},
128         {0x35, 0x00},
129         {0x36, 0xaa},
130         {0x37, 0xaa},
131         {0x38, 0xff},
132         {0x39, 0xff},
133         {0x3a, 0x00},
134         {0x3b, 0x00},
135         {0x3c, 0x00},
136         {0x3d, 0x0d},
137         {0x3e, 0x51},
138         {0x3f, 0x04},
139         {0x40, 0x00},
140         {0x41, 0x08},
141         {0x42, 0x00},
142         {0x43, 0x08},
143         {0x44, 0x06},
144         {0x45, 0x14},
145         {0x46, 0x05},
146         {0x47, 0x08},
147         {0x48, 0x00},
148         {0x49, 0x00},
149         {0x4a, 0x00},
150         {0x4b, 0x00},
151         {0x4c, 0x09},
152         {0x4d, 0x80},
153         {0x4e, 0x00},
154         {0x4f, 0xc5},
155         {0x50, 0x14},
156         {0x51, 0x19},
157         {0x52, 0x00},
158         {0x53, 0x00},
159         {0x54, 0x00},
160         {0x55, 0x00},
161         {0x56, 0x00},
162         {0x57, 0x00},
163         {0x58, 0x00},
164         {0x59, 0xb0},
165         {0x5a, 0x00},
166         {0x5b, 0x00},
167         {0x5c, 0x00},
168         {0x5d, 0x00},
169         {0x5e, 0x00},
170         {0x5f, 0x00},
171         {0x60, 0x44},
172         {0x61, 0x04},
173         {0x62, 0x00},
174         {0x63, 0x00},
175         {0x64, 0x00},
176         {0x65, 0x00},
177         {0x66, 0x04},
178         {0x67, 0xb7},
179         {0x68, 0x00},
180         {0x69, 0x00},
181         {0x6a, 0x00},
182         {0x6b, 0x00},
183         {0x6c, 0x00},
184         {0x6d, 0x03},
185         {0x6e, 0x01},
186         {0x6f, 0x00},
187         {0x70, 0x00},
188         {0x71, 0x00},
189         {0x72, 0x00},
190         {0x73, 0x00},
191         {0x74, 0x00},
192         {0x75, 0x00},
193         {0x76, 0x00},
194         {0x77, 0x00},
195         {0x78, 0x00},
196         {0x79, 0x00},
197         {0x7a, 0x00},
198         {0x7b, 0x00},
199         {0x7c, 0x00},
200         {0x7d, 0x00},
201         {0x7e, 0x00},
202         {0x7f, 0x00},
203         {0x80, 0x0b},
204         {0x81, 0x00},
205         {0x82, 0x3c},
206         {0x83, 0x00},
207         {0x84, 0x00},
208         {0x85, 0x00},
209         {0x86, 0x00},
210         {0x87, 0x00},
211         {0x88, 0x08},
212         {0x89, 0x00},
213         {0x8a, 0x08},
214         {0x8b, 0xa6},
215         {0x8c, 0x84},
216         {0x8d, 0x47},
217         {0x8e, 0xbb},
218         {0x8f, 0x02},
219         {0x90, 0x21},
220         {0x91, 0x0c},
221         {0x92, 0x04},
222         {0x93, 0x22},
223         {0x94, 0x00},
224         {0x95, 0x00},
225         {0x96, 0x00},
226         {0x97, 0xeb},
227         {0x98, 0x00},
228         {0x99, 0x00},
229         {0x9a, 0x00},
230         {0x9b, 0x00},
231         {0x9c, 0x00},
232         {0x9d, 0x00},
233         {0x9e, 0x00},
234         {0x9f, 0x00},
235         {0xa0, 0x00},
236         {0xa1, 0x00},
237         {0xa2, 0x00},
238         {0xa3, 0x00},
239         {0xa4, 0x00},
240         {0xa5, 0x00},
241         {0xa6, 0x10},
242         {0xa7, 0x04},
243         {0xa8, 0x10},
244         {0xa9, 0x00},
245         {0xaa, 0x8f},
246         {0xab, 0x00},
247         {0xac, 0x00},
248         {0xad, 0x00},
249         {0xae, 0x00},
250         {0xaf, 0x80},
251         {0xb0, 0x38},
252         {0xb1, 0x00},
253         {0xb2, 0x00},
254         {0xb3, 0x00},
255         {0xb4, 0xee},
256         {0xb5, 0xff},
257         {0xb6, 0x10},
258         {0xb7, 0x00},
259         {0xb8, 0x00},
260         {0xb9, 0x00},
261         {0xba, 0x00},
262         {0xbb, 0x03},
263         {0xbc, 0x00},
264         {0xbd, 0x00},
265         {0xbe, 0x00},
266         {0xbf, 0x00},
267         {0xc0, 0x10},
268         {0xc1, 0x10},
269         {0xc2, 0x18},
270         {0xc3, 0x20},
271         {0xc4, 0x10},
272         {0xc5, 0x00},
273         {0xc6, 0x22},
274         {0xc7, 0x14},
275         {0xc8, 0x0f},
276         {0xc9, 0x08},
277         {0xca, 0xa4},
278         {0xcb, 0xa7},
279         {0xcc, 0x3c},
280         {0xcd, 0x10},
281         {0xce, 0x20},
282         {0xcf, 0x00},
283         {0xd0, 0x00},
284         {0xd1, 0x10},
285         {0xd2, 0x00},
286         {0xd3, 0x00},
287         {0xd4, 0x10},
288         {0xd5, 0x33},
289         {0xd6, 0x70},
290         {0xd7, 0x01},
291         {0xd8, 0x00},
292         {0xd9, 0x00},
293         {0xda, 0x00},
294         {0xdb, 0x00},
295         {0xdc, 0x00},
296         {0xdd, 0x00},
297         {0xde, 0x00},
298         {0xdf, 0x00},
299         {0xe0, 0x00},
300         {0xe1, 0x00},
301         {0xe2, 0xcc},
302         {0xe3, 0x04},
303         {0xe4, 0x08},
304         {0xe5, 0x10},
305         {0xe6, 0x00},
306         {0xe7, 0x0e},
307         {0xe8, 0x88},
308         {0xe9, 0xd4},
309         {0xea, 0x05},
310         {0xeb, 0xf0},
311         {0xec, 0x79},
312         {0xed, 0x0f},
313         {0xee, 0x04},
314         {0xef, 0x04},
315         {0xf0, 0x00},
316         {0xf1, 0x00},
317         {0xf2, 0x00},
318         {0xf3, 0x00},
319         {0xf4, 0x00},
320         {0xf5, 0x00},
321         {0xf6, 0x00},
322         {0xf7, 0x00},
323         {0xf8, 0x00},
324         {0xf9, 0x00},
325         {0xF0, 0x00},
326         {0xF1, 0xF8},
327         {0xF0, 0x80},
328         {0xF0, 0x00},
329         {0xF1, 0xF4},
330         {0xF0, 0x81},
331         {0xF0, 0x01},
332         {0xF1, 0xF0},
333         {0xF0, 0x82},
334         {0xF0, 0x02},
335         {0xF1, 0xEC},
336         {0xF0, 0x83},
337         {0xF0, 0x03},
338         {0xF1, 0xE8},
339         {0xF0, 0x84},
340         {0xF0, 0x04},
341         {0xF1, 0xE4},
342         {0xF0, 0x85},
343         {0xF0, 0x05},
344         {0xF1, 0xE0},
345         {0xF0, 0x86},
346         {0xF0, 0x06},
347         {0xF1, 0xDC},
348         {0xF0, 0x87},
349         {0xF0, 0x07},
350         {0xF1, 0xD8},
351         {0xF0, 0x88},
352         {0xF0, 0x08},
353         {0xF1, 0xD4},
354         {0xF0, 0x89},
355         {0xF0, 0x09},
356         {0xF1, 0xD0},
357         {0xF0, 0x8A},
358         {0xF0, 0x0A},
359         {0xF1, 0xCC},
360         {0xF0, 0x8B},
361         {0xF0, 0x0B},
362         {0xF1, 0xC8},
363         {0xF0, 0x8C},
364         {0xF0, 0x0C},
365         {0xF1, 0xC4},
366         {0xF0, 0x8D},
367         {0xF0, 0x0D},
368         {0xF1, 0xC0},
369         {0xF0, 0x8E},
370         {0xF0, 0x0E},
371         {0xF1, 0xBC},
372         {0xF0, 0x8F},
373         {0xF0, 0x0F},
374         {0xF1, 0xB8},
375         {0xF0, 0x90},
376         {0xF0, 0x10},
377         {0xF1, 0xB4},
378         {0xF0, 0x91},
379         {0xF0, 0x11},
380         {0xF1, 0xB0},
381         {0xF0, 0x92},
382         {0xF0, 0x12},
383         {0xF1, 0xAC},
384         {0xF0, 0x93},
385         {0xF0, 0x13},
386         {0xF1, 0xA8},
387         {0xF0, 0x94},
388         {0xF0, 0x14},
389         {0xF1, 0xA4},
390         {0xF0, 0x95},
391         {0xF0, 0x15},
392         {0xF1, 0xA0},
393         {0xF0, 0x96},
394         {0xF0, 0x16},
395         {0xF1, 0x9C},
396         {0xF0, 0x97},
397         {0xF0, 0x17},
398         {0xF1, 0x98},
399         {0xF0, 0x98},
400         {0xF0, 0x18},
401         {0xF1, 0x94},
402         {0xF0, 0x99},
403         {0xF0, 0x19},
404         {0xF1, 0x90},
405         {0xF0, 0x9A},
406         {0xF0, 0x1A},
407         {0xF1, 0x8C},
408         {0xF0, 0x9B},
409         {0xF0, 0x1B},
410         {0xF1, 0x88},
411         {0xF0, 0x9C},
412         {0xF0, 0x1C},
413         {0xF1, 0x84},
414         {0xF0, 0x9D},
415         {0xF0, 0x1D},
416         {0xF1, 0x80},
417         {0xF0, 0x9E},
418         {0xF0, 0x1E},
419         {0xF1, 0x7C},
420         {0xF0, 0x9F},
421         {0xF0, 0x1F},
422         {0xF1, 0x78},
423         {0xF0, 0xA0},
424         {0xF0, 0x20},
425         {0xF1, 0x74},
426         {0xF0, 0xA1},
427         {0xF0, 0x21},
428         {0xF1, 0x70},
429         {0xF0, 0xA2},
430         {0xF0, 0x22},
431         {0xF1, 0x6C},
432         {0xF0, 0xA3},
433         {0xF0, 0x23},
434         {0xF1, 0x68},
435         {0xF0, 0xA4},
436         {0xF0, 0x24},
437         {0xF1, 0x64},
438         {0xF0, 0xA5},
439         {0xF0, 0x25},
440         {0xF1, 0x60},
441         {0xF0, 0xA6},
442         {0xF0, 0x26},
443         {0xF1, 0x5C},
444         {0xF0, 0xA7},
445         {0xF0, 0x27},
446         {0xF1, 0x58},
447         {0xF0, 0xA8},
448         {0xF0, 0x28},
449         {0xF1, 0x54},
450         {0xF0, 0xA9},
451         {0xF0, 0x29},
452         {0xF1, 0x50},
453         {0xF0, 0xAA},
454         {0xF0, 0x2A},
455         {0xF1, 0x4C},
456         {0xF0, 0xAB},
457         {0xF0, 0x2B},
458         {0xF1, 0x48},
459         {0xF0, 0xAC},
460         {0xF0, 0x2C},
461         {0xF1, 0x44},
462         {0xF0, 0xAD},
463         {0xF0, 0x2D},
464         {0xF1, 0x40},
465         {0xF0, 0xAE},
466         {0xF0, 0x2E},
467         {0xF1, 0x3C},
468         {0xF0, 0xAF},
469         {0xF0, 0x2F},
470         {0xF1, 0x38},
471         {0xF0, 0xB0},
472         {0xF0, 0x30},
473         {0xF1, 0x34},
474         {0xF0, 0xB1},
475         {0xF0, 0x31},
476         {0xF1, 0x30},
477         {0xF0, 0xB2},
478         {0xF0, 0x32},
479         {0xF1, 0x2C},
480         {0xF0, 0xB3},
481         {0xF0, 0x33},
482         {0xF1, 0x28},
483         {0xF0, 0xB4},
484         {0xF0, 0x34},
485         {0xF1, 0x24},
486         {0xF0, 0xB5},
487         {0xF0, 0x35},
488         {0xF1, 0x20},
489         {0xF0, 0xB6},
490         {0xF0, 0x36},
491         {0xF1, 0x1C},
492         {0xF0, 0xB7},
493         {0xF0, 0x37},
494         {0xF1, 0x18},
495         {0xF0, 0xB8},
496         {0xF0, 0x38},
497         {0xF1, 0x14},
498         {0xF0, 0xB9},
499         {0xF0, 0x39},
500         {0xF1, 0x10},
501         {0xF0, 0xBA},
502         {0xF0, 0x3A},
503         {0xF1, 0x0C},
504         {0xF0, 0xBB},
505         {0xF0, 0x3B},
506         {0xF1, 0x08},
507         {0xF0, 0x00},
508         {0xF0, 0x3C},
509         {0xF1, 0x04},
510         {0xF0, 0xBD},
511         {0xF0, 0x3D},
512         {0xF1, 0x00},
513         {0xF0, 0xBE},
514         {0xF0, 0x3E},
515         {0xF1, 0x00},
516         {0xF0, 0xBF},
517         {0xF0, 0x3F},
518         {0xF1, 0x00},
519         {0xF0, 0xC0},
520         {0xF0, 0x00},
521 };
522
523 #define CB_VT3253B0_INIT_FOR_RFMD 256
524 static unsigned char byVT3253B0_RFMD[CB_VT3253B0_INIT_FOR_RFMD][2] = {
525         {0x00, 0x31},
526         {0x01, 0x00},
527         {0x02, 0x00},
528         {0x03, 0x00},
529         {0x04, 0x00},
530         {0x05, 0x81},
531         {0x06, 0x00},
532         {0x07, 0x00},
533         {0x08, 0x38},
534         {0x09, 0x45},
535         {0x0a, 0x2a},
536         {0x0b, 0x76},
537         {0x0c, 0x00},
538         {0x0d, 0x00},
539         {0x0e, 0x80},
540         {0x0f, 0x00},
541         {0x10, 0x00},
542         {0x11, 0x00},
543         {0x12, 0x00},
544         {0x13, 0x00},
545         {0x14, 0x00},
546         {0x15, 0x00},
547         {0x16, 0x00},
548         {0x17, 0x00},
549         {0x18, 0x00},
550         {0x19, 0x00},
551         {0x1a, 0x00},
552         {0x1b, 0x8e},
553         {0x1c, 0x06},
554         {0x1d, 0x00},
555         {0x1e, 0x00},
556         {0x1f, 0x00},
557         {0x20, 0x00},
558         {0x21, 0x00},
559         {0x22, 0x00},
560         {0x23, 0x00},
561         {0x24, 0x00},
562         {0x25, 0x4a},
563         {0x26, 0x00},
564         {0x27, 0x00},
565         {0x28, 0x00},
566         {0x29, 0x00},
567         {0x2a, 0x00},
568         {0x2b, 0x00},
569         {0x2c, 0x00},
570         {0x2d, 0x34},
571         {0x2e, 0x18},
572         {0x2f, 0x0c},
573         {0x30, 0x26},
574         {0x31, 0x5b},
575         {0x32, 0x00},
576         {0x33, 0x00},
577         {0x34, 0x00},
578         {0x35, 0x00},
579         {0x36, 0xaa},
580         {0x37, 0xaa},
581         {0x38, 0xff},
582         {0x39, 0xff},
583         {0x3a, 0xf8},
584         {0x3b, 0x00},
585         {0x3c, 0x00},
586         {0x3d, 0x09},
587         {0x3e, 0x0d},
588         {0x3f, 0x04},
589         {0x40, 0x00},
590         {0x41, 0x08},
591         {0x42, 0x00},
592         {0x43, 0x08},
593         {0x44, 0x08},
594         {0x45, 0x14},
595         {0x46, 0x05},
596         {0x47, 0x08},
597         {0x48, 0x00},
598         {0x49, 0x00},
599         {0x4a, 0x00},
600         {0x4b, 0x00},
601         {0x4c, 0x09},
602         {0x4d, 0x80},
603         {0x4e, 0x00},
604         {0x4f, 0xc5},
605         {0x50, 0x14},
606         {0x51, 0x19},
607         {0x52, 0x00},
608         {0x53, 0x00},
609         {0x54, 0x00},
610         {0x55, 0x00},
611         {0x56, 0x00},
612         {0x57, 0x00},
613         {0x58, 0x00},
614         {0x59, 0xb0},
615         {0x5a, 0x00},
616         {0x5b, 0x00},
617         {0x5c, 0x00},
618         {0x5d, 0x00},
619         {0x5e, 0x00},
620         {0x5f, 0x00},
621         {0x60, 0x39},
622         {0x61, 0x83},
623         {0x62, 0x00},
624         {0x63, 0x00},
625         {0x64, 0x00},
626         {0x65, 0x00},
627         {0x66, 0xc0},
628         {0x67, 0x49},
629         {0x68, 0x00},
630         {0x69, 0x00},
631         {0x6a, 0x00},
632         {0x6b, 0x00},
633         {0x6c, 0x00},
634         {0x6d, 0x03},
635         {0x6e, 0x01},
636         {0x6f, 0x00},
637         {0x70, 0x00},
638         {0x71, 0x00},
639         {0x72, 0x00},
640         {0x73, 0x00},
641         {0x74, 0x00},
642         {0x75, 0x00},
643         {0x76, 0x00},
644         {0x77, 0x00},
645         {0x78, 0x00},
646         {0x79, 0x00},
647         {0x7a, 0x00},
648         {0x7b, 0x00},
649         {0x7c, 0x00},
650         {0x7d, 0x00},
651         {0x7e, 0x00},
652         {0x7f, 0x00},
653         {0x80, 0x89},
654         {0x81, 0x00},
655         {0x82, 0x0e},
656         {0x83, 0x00},
657         {0x84, 0x00},
658         {0x85, 0x00},
659         {0x86, 0x00},
660         {0x87, 0x00},
661         {0x88, 0x08},
662         {0x89, 0x00},
663         {0x8a, 0x0e},
664         {0x8b, 0xa7},
665         {0x8c, 0x88},
666         {0x8d, 0x47},
667         {0x8e, 0xaa},
668         {0x8f, 0x02},
669         {0x90, 0x23},
670         {0x91, 0x0c},
671         {0x92, 0x06},
672         {0x93, 0x08},
673         {0x94, 0x00},
674         {0x95, 0x00},
675         {0x96, 0x00},
676         {0x97, 0xeb},
677         {0x98, 0x00},
678         {0x99, 0x00},
679         {0x9a, 0x00},
680         {0x9b, 0x00},
681         {0x9c, 0x00},
682         {0x9d, 0x00},
683         {0x9e, 0x00},
684         {0x9f, 0x00},
685         {0xa0, 0x00},
686         {0xa1, 0x00},
687         {0xa2, 0x00},
688         {0xa3, 0xcd},
689         {0xa4, 0x07},
690         {0xa5, 0x33},
691         {0xa6, 0x18},
692         {0xa7, 0x00},
693         {0xa8, 0x18},
694         {0xa9, 0x00},
695         {0xaa, 0x28},
696         {0xab, 0x00},
697         {0xac, 0x00},
698         {0xad, 0x00},
699         {0xae, 0x00},
700         {0xaf, 0x18},
701         {0xb0, 0x38},
702         {0xb1, 0x30},
703         {0xb2, 0x00},
704         {0xb3, 0x00},
705         {0xb4, 0x00},
706         {0xb5, 0x00},
707         {0xb6, 0x84},
708         {0xb7, 0xfd},
709         {0xb8, 0x00},
710         {0xb9, 0x00},
711         {0xba, 0x00},
712         {0xbb, 0x03},
713         {0xbc, 0x00},
714         {0xbd, 0x00},
715         {0xbe, 0x00},
716         {0xbf, 0x00},
717         {0xc0, 0x10},
718         {0xc1, 0x20},
719         {0xc2, 0x18},
720         {0xc3, 0x20},
721         {0xc4, 0x10},
722         {0xc5, 0x2c},
723         {0xc6, 0x1e},
724         {0xc7, 0x10},
725         {0xc8, 0x12},
726         {0xc9, 0x01},
727         {0xca, 0x6f},
728         {0xcb, 0xa7},
729         {0xcc, 0x3c},
730         {0xcd, 0x10},
731         {0xce, 0x00},
732         {0xcf, 0x22},
733         {0xd0, 0x00},
734         {0xd1, 0x10},
735         {0xd2, 0x00},
736         {0xd3, 0x00},
737         {0xd4, 0x10},
738         {0xd5, 0x33},
739         {0xd6, 0x80},
740         {0xd7, 0x21},
741         {0xd8, 0x00},
742         {0xd9, 0x00},
743         {0xda, 0x00},
744         {0xdb, 0x00},
745         {0xdc, 0x00},
746         {0xdd, 0x00},
747         {0xde, 0x00},
748         {0xdf, 0x00},
749         {0xe0, 0x00},
750         {0xe1, 0xB3},
751         {0xe2, 0x00},
752         {0xe3, 0x00},
753         {0xe4, 0x00},
754         {0xe5, 0x10},
755         {0xe6, 0x00},
756         {0xe7, 0x18},
757         {0xe8, 0x08},
758         {0xe9, 0xd4},
759         {0xea, 0x00},
760         {0xeb, 0xff},
761         {0xec, 0x79},
762         {0xed, 0x10},
763         {0xee, 0x30},
764         {0xef, 0x02},
765         {0xf0, 0x00},
766         {0xf1, 0x09},
767         {0xf2, 0x00},
768         {0xf3, 0x00},
769         {0xf4, 0x00},
770         {0xf5, 0x00},
771         {0xf6, 0x00},
772         {0xf7, 0x00},
773         {0xf8, 0x00},
774         {0xf9, 0x00},
775         {0xfa, 0x00},
776         {0xfb, 0x00},
777         {0xfc, 0x00},
778         {0xfd, 0x00},
779         {0xfe, 0x00},
780         {0xff, 0x00},
781 };
782
783 #define CB_VT3253B0_AGC_FOR_RFMD2959 195
784 /* For RFMD2959 */
785 static unsigned char byVT3253B0_AGC4_RFMD2959[CB_VT3253B0_AGC_FOR_RFMD2959][2] = {
786         {0xF0, 0x00},
787         {0xF1, 0x3E},
788         {0xF0, 0x80},
789         {0xF0, 0x00},
790         {0xF1, 0x3E},
791         {0xF0, 0x81},
792         {0xF0, 0x01},
793         {0xF1, 0x3E},
794         {0xF0, 0x82},
795         {0xF0, 0x02},
796         {0xF1, 0x3E},
797         {0xF0, 0x83},
798         {0xF0, 0x03},
799         {0xF1, 0x3B},
800         {0xF0, 0x84},
801         {0xF0, 0x04},
802         {0xF1, 0x39},
803         {0xF0, 0x85},
804         {0xF0, 0x05},
805         {0xF1, 0x38},
806         {0xF0, 0x86},
807         {0xF0, 0x06},
808         {0xF1, 0x37},
809         {0xF0, 0x87},
810         {0xF0, 0x07},
811         {0xF1, 0x36},
812         {0xF0, 0x88},
813         {0xF0, 0x08},
814         {0xF1, 0x35},
815         {0xF0, 0x89},
816         {0xF0, 0x09},
817         {0xF1, 0x35},
818         {0xF0, 0x8A},
819         {0xF0, 0x0A},
820         {0xF1, 0x34},
821         {0xF0, 0x8B},
822         {0xF0, 0x0B},
823         {0xF1, 0x34},
824         {0xF0, 0x8C},
825         {0xF0, 0x0C},
826         {0xF1, 0x33},
827         {0xF0, 0x8D},
828         {0xF0, 0x0D},
829         {0xF1, 0x32},
830         {0xF0, 0x8E},
831         {0xF0, 0x0E},
832         {0xF1, 0x31},
833         {0xF0, 0x8F},
834         {0xF0, 0x0F},
835         {0xF1, 0x30},
836         {0xF0, 0x90},
837         {0xF0, 0x10},
838         {0xF1, 0x2F},
839         {0xF0, 0x91},
840         {0xF0, 0x11},
841         {0xF1, 0x2F},
842         {0xF0, 0x92},
843         {0xF0, 0x12},
844         {0xF1, 0x2E},
845         {0xF0, 0x93},
846         {0xF0, 0x13},
847         {0xF1, 0x2D},
848         {0xF0, 0x94},
849         {0xF0, 0x14},
850         {0xF1, 0x2C},
851         {0xF0, 0x95},
852         {0xF0, 0x15},
853         {0xF1, 0x2B},
854         {0xF0, 0x96},
855         {0xF0, 0x16},
856         {0xF1, 0x2B},
857         {0xF0, 0x97},
858         {0xF0, 0x17},
859         {0xF1, 0x2A},
860         {0xF0, 0x98},
861         {0xF0, 0x18},
862         {0xF1, 0x29},
863         {0xF0, 0x99},
864         {0xF0, 0x19},
865         {0xF1, 0x28},
866         {0xF0, 0x9A},
867         {0xF0, 0x1A},
868         {0xF1, 0x27},
869         {0xF0, 0x9B},
870         {0xF0, 0x1B},
871         {0xF1, 0x26},
872         {0xF0, 0x9C},
873         {0xF0, 0x1C},
874         {0xF1, 0x25},
875         {0xF0, 0x9D},
876         {0xF0, 0x1D},
877         {0xF1, 0x24},
878         {0xF0, 0x9E},
879         {0xF0, 0x1E},
880         {0xF1, 0x24},
881         {0xF0, 0x9F},
882         {0xF0, 0x1F},
883         {0xF1, 0x23},
884         {0xF0, 0xA0},
885         {0xF0, 0x20},
886         {0xF1, 0x22},
887         {0xF0, 0xA1},
888         {0xF0, 0x21},
889         {0xF1, 0x21},
890         {0xF0, 0xA2},
891         {0xF0, 0x22},
892         {0xF1, 0x20},
893         {0xF0, 0xA3},
894         {0xF0, 0x23},
895         {0xF1, 0x20},
896         {0xF0, 0xA4},
897         {0xF0, 0x24},
898         {0xF1, 0x1F},
899         {0xF0, 0xA5},
900         {0xF0, 0x25},
901         {0xF1, 0x1E},
902         {0xF0, 0xA6},
903         {0xF0, 0x26},
904         {0xF1, 0x1D},
905         {0xF0, 0xA7},
906         {0xF0, 0x27},
907         {0xF1, 0x1C},
908         {0xF0, 0xA8},
909         {0xF0, 0x28},
910         {0xF1, 0x1B},
911         {0xF0, 0xA9},
912         {0xF0, 0x29},
913         {0xF1, 0x1B},
914         {0xF0, 0xAA},
915         {0xF0, 0x2A},
916         {0xF1, 0x1A},
917         {0xF0, 0xAB},
918         {0xF0, 0x2B},
919         {0xF1, 0x1A},
920         {0xF0, 0xAC},
921         {0xF0, 0x2C},
922         {0xF1, 0x19},
923         {0xF0, 0xAD},
924         {0xF0, 0x2D},
925         {0xF1, 0x18},
926         {0xF0, 0xAE},
927         {0xF0, 0x2E},
928         {0xF1, 0x17},
929         {0xF0, 0xAF},
930         {0xF0, 0x2F},
931         {0xF1, 0x16},
932         {0xF0, 0xB0},
933         {0xF0, 0x30},
934         {0xF1, 0x15},
935         {0xF0, 0xB1},
936         {0xF0, 0x31},
937         {0xF1, 0x15},
938         {0xF0, 0xB2},
939         {0xF0, 0x32},
940         {0xF1, 0x15},
941         {0xF0, 0xB3},
942         {0xF0, 0x33},
943         {0xF1, 0x14},
944         {0xF0, 0xB4},
945         {0xF0, 0x34},
946         {0xF1, 0x13},
947         {0xF0, 0xB5},
948         {0xF0, 0x35},
949         {0xF1, 0x12},
950         {0xF0, 0xB6},
951         {0xF0, 0x36},
952         {0xF1, 0x11},
953         {0xF0, 0xB7},
954         {0xF0, 0x37},
955         {0xF1, 0x10},
956         {0xF0, 0xB8},
957         {0xF0, 0x38},
958         {0xF1, 0x0F},
959         {0xF0, 0xB9},
960         {0xF0, 0x39},
961         {0xF1, 0x0E},
962         {0xF0, 0xBA},
963         {0xF0, 0x3A},
964         {0xF1, 0x0D},
965         {0xF0, 0xBB},
966         {0xF0, 0x3B},
967         {0xF1, 0x0C},
968         {0xF0, 0xBC},
969         {0xF0, 0x3C},
970         {0xF1, 0x0B},
971         {0xF0, 0xBD},
972         {0xF0, 0x3D},
973         {0xF1, 0x0B},
974         {0xF0, 0xBE},
975         {0xF0, 0x3E},
976         {0xF1, 0x0A},
977         {0xF0, 0xBF},
978         {0xF0, 0x3F},
979         {0xF1, 0x09},
980         {0xF0, 0x00},
981 };
982
983 #define CB_VT3253B0_INIT_FOR_AIROHA2230 256
984 /* For AIROHA */
985 static unsigned char byVT3253B0_AIROHA2230[CB_VT3253B0_INIT_FOR_AIROHA2230][2] = {
986         {0x00, 0x31},
987         {0x01, 0x00},
988         {0x02, 0x00},
989         {0x03, 0x00},
990         {0x04, 0x00},
991         {0x05, 0x80},
992         {0x06, 0x00},
993         {0x07, 0x00},
994         {0x08, 0x70},
995         {0x09, 0x41},
996         {0x0a, 0x2A},
997         {0x0b, 0x76},
998         {0x0c, 0x00},
999         {0x0d, 0x00},
1000         {0x0e, 0x80},
1001         {0x0f, 0x00},
1002         {0x10, 0x00},
1003         {0x11, 0x00},
1004         {0x12, 0x00},
1005         {0x13, 0x00},
1006         {0x14, 0x00},
1007         {0x15, 0x00},
1008         {0x16, 0x00},
1009         {0x17, 0x00},
1010         {0x18, 0x00},
1011         {0x19, 0x00},
1012         {0x1a, 0x00},
1013         {0x1b, 0x8f},
1014         {0x1c, 0x09},
1015         {0x1d, 0x00},
1016         {0x1e, 0x00},
1017         {0x1f, 0x00},
1018         {0x20, 0x00},
1019         {0x21, 0x00},
1020         {0x22, 0x00},
1021         {0x23, 0x00},
1022         {0x24, 0x00},
1023         {0x25, 0x4a},
1024         {0x26, 0x00},
1025         {0x27, 0x00},
1026         {0x28, 0x00},
1027         {0x29, 0x00},
1028         {0x2a, 0x00},
1029         {0x2b, 0x00},
1030         {0x2c, 0x00},
1031         {0x2d, 0x4a},
1032         {0x2e, 0x00},
1033         {0x2f, 0x0a},
1034         {0x30, 0x26},
1035         {0x31, 0x5b},
1036         {0x32, 0x00},
1037         {0x33, 0x00},
1038         {0x34, 0x00},
1039         {0x35, 0x00},
1040         {0x36, 0xaa},
1041         {0x37, 0xaa},
1042         {0x38, 0xff},
1043         {0x39, 0xff},
1044         {0x3a, 0x79},
1045         {0x3b, 0x00},
1046         {0x3c, 0x00},
1047         {0x3d, 0x0b},
1048         {0x3e, 0x48},
1049         {0x3f, 0x04},
1050         {0x40, 0x00},
1051         {0x41, 0x08},
1052         {0x42, 0x00},
1053         {0x43, 0x08},
1054         {0x44, 0x08},
1055         {0x45, 0x14},
1056         {0x46, 0x05},
1057         {0x47, 0x09},
1058         {0x48, 0x00},
1059         {0x49, 0x00},
1060         {0x4a, 0x00},
1061         {0x4b, 0x00},
1062         {0x4c, 0x09},
1063         {0x4d, 0x73},
1064         {0x4e, 0x00},
1065         {0x4f, 0xc5},
1066         {0x50, 0x15},
1067         {0x51, 0x19},
1068         {0x52, 0x00},
1069         {0x53, 0x00},
1070         {0x54, 0x00},
1071         {0x55, 0x00},
1072         {0x56, 0x00},
1073         {0x57, 0x00},
1074         {0x58, 0x00},
1075         {0x59, 0xb0},
1076         {0x5a, 0x00},
1077         {0x5b, 0x00},
1078         {0x5c, 0x00},
1079         {0x5d, 0x00},
1080         {0x5e, 0x00},
1081         {0x5f, 0x00},
1082         {0x60, 0xe4},
1083         {0x61, 0x80},
1084         {0x62, 0x00},
1085         {0x63, 0x00},
1086         {0x64, 0x00},
1087         {0x65, 0x00},
1088         {0x66, 0x98},
1089         {0x67, 0x0a},
1090         {0x68, 0x00},
1091         {0x69, 0x00},
1092         {0x6a, 0x00},
1093         {0x6b, 0x00},
1094         {0x6c, 0x00}, /* RobertYu:20050125, request by JJSue */
1095         {0x6d, 0x03},
1096         {0x6e, 0x01},
1097         {0x6f, 0x00},
1098         {0x70, 0x00},
1099         {0x71, 0x00},
1100         {0x72, 0x00},
1101         {0x73, 0x00},
1102         {0x74, 0x00},
1103         {0x75, 0x00},
1104         {0x76, 0x00},
1105         {0x77, 0x00},
1106         {0x78, 0x00},
1107         {0x79, 0x00},
1108         {0x7a, 0x00},
1109         {0x7b, 0x00},
1110         {0x7c, 0x00},
1111         {0x7d, 0x00},
1112         {0x7e, 0x00},
1113         {0x7f, 0x00},
1114         {0x80, 0x8c},
1115         {0x81, 0x01},
1116         {0x82, 0x09},
1117         {0x83, 0x00},
1118         {0x84, 0x00},
1119         {0x85, 0x00},
1120         {0x86, 0x00},
1121         {0x87, 0x00},
1122         {0x88, 0x08},
1123         {0x89, 0x00},
1124         {0x8a, 0x0f},
1125         {0x8b, 0xb7},
1126         {0x8c, 0x88},
1127         {0x8d, 0x47},
1128         {0x8e, 0xaa},
1129         {0x8f, 0x02},
1130         {0x90, 0x22},
1131         {0x91, 0x00},
1132         {0x92, 0x00},
1133         {0x93, 0x00},
1134         {0x94, 0x00},
1135         {0x95, 0x00},
1136         {0x96, 0x00},
1137         {0x97, 0xeb},
1138         {0x98, 0x00},
1139         {0x99, 0x00},
1140         {0x9a, 0x00},
1141         {0x9b, 0x00},
1142         {0x9c, 0x00},
1143         {0x9d, 0x00},
1144         {0x9e, 0x00},
1145         {0x9f, 0x01},
1146         {0xa0, 0x00},
1147         {0xa1, 0x00},
1148         {0xa2, 0x00},
1149         {0xa3, 0x00},
1150         {0xa4, 0x00},
1151         {0xa5, 0x00},
1152         {0xa6, 0x10},
1153         {0xa7, 0x00},
1154         {0xa8, 0x18},
1155         {0xa9, 0x00},
1156         {0xaa, 0x00},
1157         {0xab, 0x00},
1158         {0xac, 0x00},
1159         {0xad, 0x00},
1160         {0xae, 0x00},
1161         {0xaf, 0x18},
1162         {0xb0, 0x38},
1163         {0xb1, 0x30},
1164         {0xb2, 0x00},
1165         {0xb3, 0x00},
1166         {0xb4, 0xff},
1167         {0xb5, 0x0f},
1168         {0xb6, 0xe4},
1169         {0xb7, 0xe2},
1170         {0xb8, 0x00},
1171         {0xb9, 0x00},
1172         {0xba, 0x00},
1173         {0xbb, 0x03},
1174         {0xbc, 0x01},
1175         {0xbd, 0x00},
1176         {0xbe, 0x00},
1177         {0xbf, 0x00},
1178         {0xc0, 0x18},
1179         {0xc1, 0x20},
1180         {0xc2, 0x07},
1181         {0xc3, 0x18},
1182         {0xc4, 0xff},
1183         {0xc5, 0x2c},
1184         {0xc6, 0x0c},
1185         {0xc7, 0x0a},
1186         {0xc8, 0x0e},
1187         {0xc9, 0x01},
1188         {0xca, 0x68},
1189         {0xcb, 0xa7},
1190         {0xcc, 0x3c},
1191         {0xcd, 0x10},
1192         {0xce, 0x00},
1193         {0xcf, 0x25},
1194         {0xd0, 0x40},
1195         {0xd1, 0x12},
1196         {0xd2, 0x00},
1197         {0xd3, 0x00},
1198         {0xd4, 0x10},
1199         {0xd5, 0x28},
1200         {0xd6, 0x80},
1201         {0xd7, 0x2A},
1202         {0xd8, 0x00},
1203         {0xd9, 0x00},
1204         {0xda, 0x00},
1205         {0xdb, 0x00},
1206         {0xdc, 0x00},
1207         {0xdd, 0x00},
1208         {0xde, 0x00},
1209         {0xdf, 0x00},
1210         {0xe0, 0x00},
1211         {0xe1, 0xB3},
1212         {0xe2, 0x00},
1213         {0xe3, 0x00},
1214         {0xe4, 0x00},
1215         {0xe5, 0x10},
1216         {0xe6, 0x00},
1217         {0xe7, 0x1C},
1218         {0xe8, 0x00},
1219         {0xe9, 0xf4},
1220         {0xea, 0x00},
1221         {0xeb, 0xff},
1222         {0xec, 0x79},
1223         {0xed, 0x20},
1224         {0xee, 0x30},
1225         {0xef, 0x01},
1226         {0xf0, 0x00},
1227         {0xf1, 0x3e},
1228         {0xf2, 0x00},
1229         {0xf3, 0x00},
1230         {0xf4, 0x00},
1231         {0xf5, 0x00},
1232         {0xf6, 0x00},
1233         {0xf7, 0x00},
1234         {0xf8, 0x00},
1235         {0xf9, 0x00},
1236         {0xfa, 0x00},
1237         {0xfb, 0x00},
1238         {0xfc, 0x00},
1239         {0xfd, 0x00},
1240         {0xfe, 0x00},
1241         {0xff, 0x00},
1242 };
1243
1244 #define CB_VT3253B0_INIT_FOR_UW2451 256
1245 /* For UW2451 */
1246 static unsigned char byVT3253B0_UW2451[CB_VT3253B0_INIT_FOR_UW2451][2] = {
1247         {0x00, 0x31},
1248         {0x01, 0x00},
1249         {0x02, 0x00},
1250         {0x03, 0x00},
1251         {0x04, 0x00},
1252         {0x05, 0x81},
1253         {0x06, 0x00},
1254         {0x07, 0x00},
1255         {0x08, 0x38},
1256         {0x09, 0x45},
1257         {0x0a, 0x28},
1258         {0x0b, 0x76},
1259         {0x0c, 0x00},
1260         {0x0d, 0x00},
1261         {0x0e, 0x80},
1262         {0x0f, 0x00},
1263         {0x10, 0x00},
1264         {0x11, 0x00},
1265         {0x12, 0x00},
1266         {0x13, 0x00},
1267         {0x14, 0x00},
1268         {0x15, 0x00},
1269         {0x16, 0x00},
1270         {0x17, 0x00},
1271         {0x18, 0x00},
1272         {0x19, 0x00},
1273         {0x1a, 0x00},
1274         {0x1b, 0x8f},
1275         {0x1c, 0x0f},
1276         {0x1d, 0x00},
1277         {0x1e, 0x00},
1278         {0x1f, 0x00},
1279         {0x20, 0x00},
1280         {0x21, 0x00},
1281         {0x22, 0x00},
1282         {0x23, 0x00},
1283         {0x24, 0x00},
1284         {0x25, 0x4a},
1285         {0x26, 0x00},
1286         {0x27, 0x00},
1287         {0x28, 0x00},
1288         {0x29, 0x00},
1289         {0x2a, 0x00},
1290         {0x2b, 0x00},
1291         {0x2c, 0x00},
1292         {0x2d, 0x18},
1293         {0x2e, 0x00},
1294         {0x2f, 0x0a},
1295         {0x30, 0x26},
1296         {0x31, 0x5b},
1297         {0x32, 0x00},
1298         {0x33, 0x00},
1299         {0x34, 0x00},
1300         {0x35, 0x00},
1301         {0x36, 0xaa},
1302         {0x37, 0xaa},
1303         {0x38, 0xff},
1304         {0x39, 0xff},
1305         {0x3a, 0x00},
1306         {0x3b, 0x00},
1307         {0x3c, 0x00},
1308         {0x3d, 0x03},
1309         {0x3e, 0x1d},
1310         {0x3f, 0x04},
1311         {0x40, 0x00},
1312         {0x41, 0x08},
1313         {0x42, 0x00},
1314         {0x43, 0x08},
1315         {0x44, 0x08},
1316         {0x45, 0x14},
1317         {0x46, 0x05},
1318         {0x47, 0x09},
1319         {0x48, 0x00},
1320         {0x49, 0x00},
1321         {0x4a, 0x00},
1322         {0x4b, 0x00},
1323         {0x4c, 0x09},
1324         {0x4d, 0x90},
1325         {0x4e, 0x00},
1326         {0x4f, 0xc5},
1327         {0x50, 0x15},
1328         {0x51, 0x19},
1329         {0x52, 0x00},
1330         {0x53, 0x00},
1331         {0x54, 0x00},
1332         {0x55, 0x00},
1333         {0x56, 0x00},
1334         {0x57, 0x00},
1335         {0x58, 0x00},
1336         {0x59, 0xb0},
1337         {0x5a, 0x00},
1338         {0x5b, 0x00},
1339         {0x5c, 0x00},
1340         {0x5d, 0x00},
1341         {0x5e, 0x00},
1342         {0x5f, 0x00},
1343         {0x60, 0xb3},
1344         {0x61, 0x81},
1345         {0x62, 0x00},
1346         {0x63, 0x00},
1347         {0x64, 0x00},
1348         {0x65, 0x00},
1349         {0x66, 0x57},
1350         {0x67, 0x6c},
1351         {0x68, 0x00},
1352         {0x69, 0x00},
1353         {0x6a, 0x00},
1354         {0x6b, 0x00},
1355         {0x6c, 0x00}, /* RobertYu:20050125, request by JJSue */
1356         {0x6d, 0x03},
1357         {0x6e, 0x01},
1358         {0x6f, 0x00},
1359         {0x70, 0x00},
1360         {0x71, 0x00},
1361         {0x72, 0x00},
1362         {0x73, 0x00},
1363         {0x74, 0x00},
1364         {0x75, 0x00},
1365         {0x76, 0x00},
1366         {0x77, 0x00},
1367         {0x78, 0x00},
1368         {0x79, 0x00},
1369         {0x7a, 0x00},
1370         {0x7b, 0x00},
1371         {0x7c, 0x00},
1372         {0x7d, 0x00},
1373         {0x7e, 0x00},
1374         {0x7f, 0x00},
1375         {0x80, 0x8c},
1376         {0x81, 0x00},
1377         {0x82, 0x0e},
1378         {0x83, 0x00},
1379         {0x84, 0x00},
1380         {0x85, 0x00},
1381         {0x86, 0x00},
1382         {0x87, 0x00},
1383         {0x88, 0x08},
1384         {0x89, 0x00},
1385         {0x8a, 0x0e},
1386         {0x8b, 0xa7},
1387         {0x8c, 0x88},
1388         {0x8d, 0x47},
1389         {0x8e, 0xaa},
1390         {0x8f, 0x02},
1391         {0x90, 0x00},
1392         {0x91, 0x00},
1393         {0x92, 0x00},
1394         {0x93, 0x00},
1395         {0x94, 0x00},
1396         {0x95, 0x00},
1397         {0x96, 0x00},
1398         {0x97, 0xe3},
1399         {0x98, 0x00},
1400         {0x99, 0x00},
1401         {0x9a, 0x00},
1402         {0x9b, 0x00},
1403         {0x9c, 0x00},
1404         {0x9d, 0x00},
1405         {0x9e, 0x00},
1406         {0x9f, 0x00},
1407         {0xa0, 0x00},
1408         {0xa1, 0x00},
1409         {0xa2, 0x00},
1410         {0xa3, 0x00},
1411         {0xa4, 0x00},
1412         {0xa5, 0x00},
1413         {0xa6, 0x10},
1414         {0xa7, 0x00},
1415         {0xa8, 0x18},
1416         {0xa9, 0x00},
1417         {0xaa, 0x00},
1418         {0xab, 0x00},
1419         {0xac, 0x00},
1420         {0xad, 0x00},
1421         {0xae, 0x00},
1422         {0xaf, 0x18},
1423         {0xb0, 0x18},
1424         {0xb1, 0x30},
1425         {0xb2, 0x00},
1426         {0xb3, 0x00},
1427         {0xb4, 0x00},
1428         {0xb5, 0x00},
1429         {0xb6, 0x00},
1430         {0xb7, 0x00},
1431         {0xb8, 0x00},
1432         {0xb9, 0x00},
1433         {0xba, 0x00},
1434         {0xbb, 0x03},
1435         {0xbc, 0x01},
1436         {0xbd, 0x00},
1437         {0xbe, 0x00},
1438         {0xbf, 0x00},
1439         {0xc0, 0x10},
1440         {0xc1, 0x20},
1441         {0xc2, 0x00},
1442         {0xc3, 0x20},
1443         {0xc4, 0x00},
1444         {0xc5, 0x2c},
1445         {0xc6, 0x1c},
1446         {0xc7, 0x10},
1447         {0xc8, 0x10},
1448         {0xc9, 0x01},
1449         {0xca, 0x68},
1450         {0xcb, 0xa7},
1451         {0xcc, 0x3c},
1452         {0xcd, 0x09},
1453         {0xce, 0x00},
1454         {0xcf, 0x20},
1455         {0xd0, 0x40},
1456         {0xd1, 0x10},
1457         {0xd2, 0x00},
1458         {0xd3, 0x00},
1459         {0xd4, 0x20},
1460         {0xd5, 0x28},
1461         {0xd6, 0xa0},
1462         {0xd7, 0x2a},
1463         {0xd8, 0x00},
1464         {0xd9, 0x00},
1465         {0xda, 0x00},
1466         {0xdb, 0x00},
1467         {0xdc, 0x00},
1468         {0xdd, 0x00},
1469         {0xde, 0x00},
1470         {0xdf, 0x00},
1471         {0xe0, 0x00},
1472         {0xe1, 0xd3},
1473         {0xe2, 0xc0},
1474         {0xe3, 0x00},
1475         {0xe4, 0x00},
1476         {0xe5, 0x10},
1477         {0xe6, 0x00},
1478         {0xe7, 0x12},
1479         {0xe8, 0x12},
1480         {0xe9, 0x34},
1481         {0xea, 0x00},
1482         {0xeb, 0xff},
1483         {0xec, 0x79},
1484         {0xed, 0x20},
1485         {0xee, 0x30},
1486         {0xef, 0x01},
1487         {0xf0, 0x00},
1488         {0xf1, 0x3e},
1489         {0xf2, 0x00},
1490         {0xf3, 0x00},
1491         {0xf4, 0x00},
1492         {0xf5, 0x00},
1493         {0xf6, 0x00},
1494         {0xf7, 0x00},
1495         {0xf8, 0x00},
1496         {0xf9, 0x00},
1497         {0xfa, 0x00},
1498         {0xfb, 0x00},
1499         {0xfc, 0x00},
1500         {0xfd, 0x00},
1501         {0xfe, 0x00},
1502         {0xff, 0x00},
1503 };
1504
1505 #define CB_VT3253B0_AGC 193
1506 /* For AIROHA */
1507 static unsigned char byVT3253B0_AGC[CB_VT3253B0_AGC][2] = {
1508         {0xF0, 0x00},
1509         {0xF1, 0x00},
1510         {0xF0, 0x80},
1511         {0xF0, 0x01},
1512         {0xF1, 0x00},
1513         {0xF0, 0x81},
1514         {0xF0, 0x02},
1515         {0xF1, 0x02},
1516         {0xF0, 0x82},
1517         {0xF0, 0x03},
1518         {0xF1, 0x04},
1519         {0xF0, 0x83},
1520         {0xF0, 0x03},
1521         {0xF1, 0x04},
1522         {0xF0, 0x84},
1523         {0xF0, 0x04},
1524         {0xF1, 0x06},
1525         {0xF0, 0x85},
1526         {0xF0, 0x05},
1527         {0xF1, 0x06},
1528         {0xF0, 0x86},
1529         {0xF0, 0x06},
1530         {0xF1, 0x06},
1531         {0xF0, 0x87},
1532         {0xF0, 0x07},
1533         {0xF1, 0x08},
1534         {0xF0, 0x88},
1535         {0xF0, 0x08},
1536         {0xF1, 0x08},
1537         {0xF0, 0x89},
1538         {0xF0, 0x09},
1539         {0xF1, 0x0A},
1540         {0xF0, 0x8A},
1541         {0xF0, 0x0A},
1542         {0xF1, 0x0A},
1543         {0xF0, 0x8B},
1544         {0xF0, 0x0B},
1545         {0xF1, 0x0C},
1546         {0xF0, 0x8C},
1547         {0xF0, 0x0C},
1548         {0xF1, 0x0C},
1549         {0xF0, 0x8D},
1550         {0xF0, 0x0D},
1551         {0xF1, 0x0E},
1552         {0xF0, 0x8E},
1553         {0xF0, 0x0E},
1554         {0xF1, 0x0E},
1555         {0xF0, 0x8F},
1556         {0xF0, 0x0F},
1557         {0xF1, 0x10},
1558         {0xF0, 0x90},
1559         {0xF0, 0x10},
1560         {0xF1, 0x10},
1561         {0xF0, 0x91},
1562         {0xF0, 0x11},
1563         {0xF1, 0x12},
1564         {0xF0, 0x92},
1565         {0xF0, 0x12},
1566         {0xF1, 0x12},
1567         {0xF0, 0x93},
1568         {0xF0, 0x13},
1569         {0xF1, 0x14},
1570         {0xF0, 0x94},
1571         {0xF0, 0x14},
1572         {0xF1, 0x14},
1573         {0xF0, 0x95},
1574         {0xF0, 0x15},
1575         {0xF1, 0x16},
1576         {0xF0, 0x96},
1577         {0xF0, 0x16},
1578         {0xF1, 0x16},
1579         {0xF0, 0x97},
1580         {0xF0, 0x17},
1581         {0xF1, 0x18},
1582         {0xF0, 0x98},
1583         {0xF0, 0x18},
1584         {0xF1, 0x18},
1585         {0xF0, 0x99},
1586         {0xF0, 0x19},
1587         {0xF1, 0x1A},
1588         {0xF0, 0x9A},
1589         {0xF0, 0x1A},
1590         {0xF1, 0x1A},
1591         {0xF0, 0x9B},
1592         {0xF0, 0x1B},
1593         {0xF1, 0x1C},
1594         {0xF0, 0x9C},
1595         {0xF0, 0x1C},
1596         {0xF1, 0x1C},
1597         {0xF0, 0x9D},
1598         {0xF0, 0x1D},
1599         {0xF1, 0x1E},
1600         {0xF0, 0x9E},
1601         {0xF0, 0x1E},
1602         {0xF1, 0x1E},
1603         {0xF0, 0x9F},
1604         {0xF0, 0x1F},
1605         {0xF1, 0x20},
1606         {0xF0, 0xA0},
1607         {0xF0, 0x20},
1608         {0xF1, 0x20},
1609         {0xF0, 0xA1},
1610         {0xF0, 0x21},
1611         {0xF1, 0x22},
1612         {0xF0, 0xA2},
1613         {0xF0, 0x22},
1614         {0xF1, 0x22},
1615         {0xF0, 0xA3},
1616         {0xF0, 0x23},
1617         {0xF1, 0x24},
1618         {0xF0, 0xA4},
1619         {0xF0, 0x24},
1620         {0xF1, 0x24},
1621         {0xF0, 0xA5},
1622         {0xF0, 0x25},
1623         {0xF1, 0x26},
1624         {0xF0, 0xA6},
1625         {0xF0, 0x26},
1626         {0xF1, 0x26},
1627         {0xF0, 0xA7},
1628         {0xF0, 0x27},
1629         {0xF1, 0x28},
1630         {0xF0, 0xA8},
1631         {0xF0, 0x28},
1632         {0xF1, 0x28},
1633         {0xF0, 0xA9},
1634         {0xF0, 0x29},
1635         {0xF1, 0x2A},
1636         {0xF0, 0xAA},
1637         {0xF0, 0x2A},
1638         {0xF1, 0x2A},
1639         {0xF0, 0xAB},
1640         {0xF0, 0x2B},
1641         {0xF1, 0x2C},
1642         {0xF0, 0xAC},
1643         {0xF0, 0x2C},
1644         {0xF1, 0x2C},
1645         {0xF0, 0xAD},
1646         {0xF0, 0x2D},
1647         {0xF1, 0x2E},
1648         {0xF0, 0xAE},
1649         {0xF0, 0x2E},
1650         {0xF1, 0x2E},
1651         {0xF0, 0xAF},
1652         {0xF0, 0x2F},
1653         {0xF1, 0x30},
1654         {0xF0, 0xB0},
1655         {0xF0, 0x30},
1656         {0xF1, 0x30},
1657         {0xF0, 0xB1},
1658         {0xF0, 0x31},
1659         {0xF1, 0x32},
1660         {0xF0, 0xB2},
1661         {0xF0, 0x32},
1662         {0xF1, 0x32},
1663         {0xF0, 0xB3},
1664         {0xF0, 0x33},
1665         {0xF1, 0x34},
1666         {0xF0, 0xB4},
1667         {0xF0, 0x34},
1668         {0xF1, 0x34},
1669         {0xF0, 0xB5},
1670         {0xF0, 0x35},
1671         {0xF1, 0x36},
1672         {0xF0, 0xB6},
1673         {0xF0, 0x36},
1674         {0xF1, 0x36},
1675         {0xF0, 0xB7},
1676         {0xF0, 0x37},
1677         {0xF1, 0x38},
1678         {0xF0, 0xB8},
1679         {0xF0, 0x38},
1680         {0xF1, 0x38},
1681         {0xF0, 0xB9},
1682         {0xF0, 0x39},
1683         {0xF1, 0x3A},
1684         {0xF0, 0xBA},
1685         {0xF0, 0x3A},
1686         {0xF1, 0x3A},
1687         {0xF0, 0xBB},
1688         {0xF0, 0x3B},
1689         {0xF1, 0x3C},
1690         {0xF0, 0xBC},
1691         {0xF0, 0x3C},
1692         {0xF1, 0x3C},
1693         {0xF0, 0xBD},
1694         {0xF0, 0x3D},
1695         {0xF1, 0x3E},
1696         {0xF0, 0xBE},
1697         {0xF0, 0x3E},
1698         {0xF1, 0x3E},
1699         {0xF0, 0xBF},
1700         {0xF0, 0x00},
1701 };
1702
1703 static const unsigned short awcFrameTime[MAX_RATE] =
1704 {10, 20, 55, 110, 24, 36, 48, 72, 96, 144, 192, 216};
1705
1706 /*---------------------  Static Functions  --------------------------*/
1707
1708 static
1709 unsigned long
1710 s_ulGetRatio(struct vnt_private *pDevice);
1711
1712 static
1713 void
1714 s_vChangeAntenna(
1715         struct vnt_private *pDevice
1716 );
1717
1718 static
1719 void
1720 s_vChangeAntenna(
1721         struct vnt_private *pDevice
1722 )
1723 {
1724         if (pDevice->dwRxAntennaSel == 0) {
1725                 pDevice->dwRxAntennaSel = 1;
1726                 if (pDevice->bTxRxAntInv == true)
1727                         BBvSetRxAntennaMode(pDevice->PortOffset, ANT_A);
1728                 else
1729                         BBvSetRxAntennaMode(pDevice->PortOffset, ANT_B);
1730         } else {
1731                 pDevice->dwRxAntennaSel = 0;
1732                 if (pDevice->bTxRxAntInv == true)
1733                         BBvSetRxAntennaMode(pDevice->PortOffset, ANT_B);
1734                 else
1735                         BBvSetRxAntennaMode(pDevice->PortOffset, ANT_A);
1736         }
1737         if (pDevice->dwTxAntennaSel == 0) {
1738                 pDevice->dwTxAntennaSel = 1;
1739                 BBvSetTxAntennaMode(pDevice->PortOffset, ANT_B);
1740         } else {
1741                 pDevice->dwTxAntennaSel = 0;
1742                 BBvSetTxAntennaMode(pDevice->PortOffset, ANT_A);
1743         }
1744 }
1745
1746 /*---------------------  Export Variables  --------------------------*/
1747 /*
1748  * Description: Calculate data frame transmitting time
1749  *
1750  * Parameters:
1751  *  In:
1752  *      byPreambleType  - Preamble Type
1753  *      byPktType        - PK_TYPE_11A, PK_TYPE_11B, PK_TYPE_11GB, PK_TYPE_11GA
1754  *      cbFrameLength   - Baseband Type
1755  *      wRate           - Tx Rate
1756  *  Out:
1757  *
1758  * Return Value: FrameTime
1759  *
1760  */
1761 unsigned int
1762 BBuGetFrameTime(
1763         unsigned char byPreambleType,
1764         unsigned char byPktType,
1765         unsigned int cbFrameLength,
1766         unsigned short wRate
1767 )
1768 {
1769         unsigned int uFrameTime;
1770         unsigned int uPreamble;
1771         unsigned int uTmp;
1772         unsigned int uRateIdx = (unsigned int) wRate;
1773         unsigned int uRate = 0;
1774
1775         if (uRateIdx > RATE_54M) {
1776                 ASSERT(0);
1777                 return 0;
1778         }
1779
1780         uRate = (unsigned int)awcFrameTime[uRateIdx];
1781
1782         if (uRateIdx <= 3) {          /* CCK mode */
1783                 if (byPreambleType == 1) /* Short */
1784                         uPreamble = 96;
1785                 else
1786                         uPreamble = 192;
1787
1788                 uFrameTime = (cbFrameLength * 80) / uRate;  /* ????? */
1789                 uTmp = (uFrameTime * uRate) / 80;
1790                 if (cbFrameLength != uTmp)
1791                         uFrameTime++;
1792
1793                 return uPreamble + uFrameTime;
1794         } else {
1795                 uFrameTime = (cbFrameLength * 8 + 22) / uRate; /* ???????? */
1796                 uTmp = ((uFrameTime * uRate) - 22) / 8;
1797                 if (cbFrameLength != uTmp)
1798                         uFrameTime++;
1799
1800                 uFrameTime = uFrameTime * 4;    /* ??????? */
1801                 if (byPktType != PK_TYPE_11A)
1802                         uFrameTime += 6;     /* ?????? */
1803
1804                 return 20 + uFrameTime; /* ?????? */
1805         }
1806 }
1807
1808 /*
1809  * Description: Calculate Length, Service, and Signal fields of Phy for Tx
1810  *
1811  * Parameters:
1812  *  In:
1813  *      pDevice         - Device Structure
1814  *      cbFrameLength   - Tx Frame Length
1815  *      wRate           - Tx Rate
1816  *  Out:
1817  *      pwPhyLen        - pointer to Phy Length field
1818  *      pbyPhySrv       - pointer to Phy Service field
1819  *      pbyPhySgn       - pointer to Phy Signal field
1820  *
1821  * Return Value: none
1822  *
1823  */
1824 void
1825 BBvCalculateParameter(
1826         struct vnt_private *pDevice,
1827         unsigned int cbFrameLength,
1828         unsigned short wRate,
1829         unsigned char byPacketType,
1830         unsigned short *pwPhyLen,
1831         unsigned char *pbyPhySrv,
1832         unsigned char *pbyPhySgn
1833 )
1834 {
1835         unsigned int cbBitCount;
1836         unsigned int cbUsCount = 0;
1837         unsigned int cbTmp;
1838         bool bExtBit;
1839         unsigned char byPreambleType = pDevice->byPreambleType;
1840         bool bCCK = pDevice->bCCK;
1841
1842         cbBitCount = cbFrameLength * 8;
1843         bExtBit = false;
1844
1845         switch (wRate) {
1846         case RATE_1M:
1847                 cbUsCount = cbBitCount;
1848                 *pbyPhySgn = 0x00;
1849                 break;
1850
1851         case RATE_2M:
1852                 cbUsCount = cbBitCount / 2;
1853                 if (byPreambleType == 1)
1854                         *pbyPhySgn = 0x09;
1855                 else /* long preamble */
1856                         *pbyPhySgn = 0x01;
1857                 break;
1858
1859         case RATE_5M:
1860                 if (!bCCK)
1861                         cbBitCount++;
1862                 cbUsCount = (cbBitCount * 10) / 55;
1863                 cbTmp = (cbUsCount * 55) / 10;
1864                 if (cbTmp != cbBitCount)
1865                         cbUsCount++;
1866                 if (byPreambleType == 1)
1867                         *pbyPhySgn = 0x0a;
1868                 else /* long preamble */
1869                         *pbyPhySgn = 0x02;
1870                 break;
1871
1872         case RATE_11M:
1873
1874                 if (!bCCK)
1875                         cbBitCount++;
1876                 cbUsCount = cbBitCount / 11;
1877                 cbTmp = cbUsCount * 11;
1878                 if (cbTmp != cbBitCount) {
1879                         cbUsCount++;
1880                         if ((cbBitCount - cbTmp) <= 3)
1881                                 bExtBit = true;
1882                 }
1883                 if (byPreambleType == 1)
1884                         *pbyPhySgn = 0x0b;
1885                 else /* long preamble */
1886                         *pbyPhySgn = 0x03;
1887                 break;
1888
1889         case RATE_6M:
1890                 if (byPacketType == PK_TYPE_11A) { /*11a, 5GHZ */
1891                         *pbyPhySgn = 0x9B; /* 1001 1011 */
1892                 } else {/* 11g, 2.4GHZ */
1893                         *pbyPhySgn = 0x8B; /* 1000 1011 */
1894                 }
1895                 break;
1896
1897         case RATE_9M:
1898                 if (byPacketType == PK_TYPE_11A) {/* 11a, 5GHZ */
1899                         *pbyPhySgn = 0x9F; /* 1001 1111 */
1900                 } else {/* 11g, 2.4GHZ */
1901                         *pbyPhySgn = 0x8F; /* 1000 1111 */
1902                 }
1903                 break;
1904
1905         case RATE_12M:
1906                 if (byPacketType == PK_TYPE_11A) {/* 11a, 5GHZ */
1907                         *pbyPhySgn = 0x9A; /* 1001 1010 */
1908                 } else {/* 11g, 2.4GHZ */
1909                         *pbyPhySgn = 0x8A; /* 1000 1010 */
1910                 }
1911                 break;
1912
1913         case RATE_18M:
1914                 if (byPacketType == PK_TYPE_11A) {/* 11a, 5GHZ */
1915                         *pbyPhySgn = 0x9E; /* 1001 1110 */
1916                 } else {/* 11g, 2.4GHZ */
1917                         *pbyPhySgn = 0x8E; /* 1000 1110 */
1918                 }
1919                 break;
1920
1921         case RATE_24M:
1922                 if (byPacketType == PK_TYPE_11A) {/* 11a, 5GHZ */
1923                         *pbyPhySgn = 0x99; /* 1001 1001 */
1924                 } else {/* 11g, 2.4GHZ */
1925                         *pbyPhySgn = 0x89; /* 1000 1001 */
1926                 }
1927                 break;
1928
1929         case RATE_36M:
1930                 if (byPacketType == PK_TYPE_11A) {/* 11a, 5GHZ */
1931                         *pbyPhySgn = 0x9D; /* 1001 1101 */
1932                 } else {/* 11g, 2.4GHZ */
1933                         *pbyPhySgn = 0x8D; /* 1000 1101 */
1934                 }
1935                 break;
1936
1937         case RATE_48M:
1938                 if (byPacketType == PK_TYPE_11A) {/* 11a, 5GHZ */
1939                         *pbyPhySgn = 0x98; /* 1001 1000 */
1940                 } else {/* 11g, 2.4GHZ */
1941                         *pbyPhySgn = 0x88; /* 1000 1000 */
1942                 }
1943                 break;
1944
1945         case RATE_54M:
1946                 if (byPacketType == PK_TYPE_11A) {/* 11a, 5GHZ */
1947                         *pbyPhySgn = 0x9C; /* 1001 1100 */
1948                 } else {/* 11g, 2.4GHZ */
1949                         *pbyPhySgn = 0x8C; /* 1000 1100 */
1950                 }
1951                 break;
1952
1953         default:
1954                 if (byPacketType == PK_TYPE_11A) {/* 11a, 5GHZ */
1955                         *pbyPhySgn = 0x9C; /* 1001 1100 */
1956                 } else {/* 11g, 2.4GHZ */
1957                         *pbyPhySgn = 0x8C; /* 1000 1100 */
1958                 }
1959                 break;
1960         }
1961
1962         if (byPacketType == PK_TYPE_11B) {
1963                 *pbyPhySrv = 0x00;
1964                 if (bExtBit)
1965                         *pbyPhySrv = *pbyPhySrv | 0x80;
1966                 *pwPhyLen = (unsigned short)cbUsCount;
1967         } else {
1968                 *pbyPhySrv = 0x00;
1969                 *pwPhyLen = (unsigned short)cbFrameLength;
1970         }
1971 }
1972
1973 /*
1974  * Description: Read a byte from BASEBAND, by embedded programming
1975  *
1976  * Parameters:
1977  *  In:
1978  *      dwIoBase    - I/O base address
1979  *      byBBAddr    - address of register in Baseband
1980  *  Out:
1981  *      pbyData     - data read
1982  *
1983  * Return Value: true if succeeded; false if failed.
1984  *
1985  */
1986 bool BBbReadEmbedded(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned char *pbyData)
1987 {
1988         unsigned short ww;
1989         unsigned char byValue;
1990
1991         /* BB reg offset */
1992         VNSvOutPortB(dwIoBase + MAC_REG_BBREGADR, byBBAddr);
1993
1994         /* turn on REGR */
1995         MACvRegBitsOn(dwIoBase, MAC_REG_BBREGCTL, BBREGCTL_REGR);
1996         /* W_MAX_TIMEOUT is the timeout period */
1997         for (ww = 0; ww < W_MAX_TIMEOUT; ww++) {
1998                 VNSvInPortB(dwIoBase + MAC_REG_BBREGCTL, &byValue);
1999                 if (byValue & BBREGCTL_DONE)
2000                         break;
2001         }
2002
2003         /* get BB data */
2004         VNSvInPortB(dwIoBase + MAC_REG_BBREGDATA, pbyData);
2005
2006         if (ww == W_MAX_TIMEOUT) {
2007                 DBG_PORT80(0x30);
2008                 pr_debug(" DBG_PORT80(0x30)\n");
2009                 return false;
2010         }
2011         return true;
2012 }
2013
2014 /*
2015  * Description: Write a Byte to BASEBAND, by embedded programming
2016  *
2017  * Parameters:
2018  *  In:
2019  *      dwIoBase    - I/O base address
2020  *      byBBAddr    - address of register in Baseband
2021  *      byData      - data to write
2022  *  Out:
2023  *      none
2024  *
2025  * Return Value: true if succeeded; false if failed.
2026  *
2027  */
2028 bool BBbWriteEmbedded(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned char byData)
2029 {
2030         unsigned short ww;
2031         unsigned char byValue;
2032
2033         /* BB reg offset */
2034         VNSvOutPortB(dwIoBase + MAC_REG_BBREGADR, byBBAddr);
2035         /* set BB data */
2036         VNSvOutPortB(dwIoBase + MAC_REG_BBREGDATA, byData);
2037
2038         /* turn on BBREGCTL_REGW */
2039         MACvRegBitsOn(dwIoBase, MAC_REG_BBREGCTL, BBREGCTL_REGW);
2040         /* W_MAX_TIMEOUT is the timeout period */
2041         for (ww = 0; ww < W_MAX_TIMEOUT; ww++) {
2042                 VNSvInPortB(dwIoBase + MAC_REG_BBREGCTL, &byValue);
2043                 if (byValue & BBREGCTL_DONE)
2044                         break;
2045         }
2046
2047         if (ww == W_MAX_TIMEOUT) {
2048                 DBG_PORT80(0x31);
2049                 pr_debug(" DBG_PORT80(0x31)\n");
2050                 return false;
2051         }
2052         return true;
2053 }
2054
2055 /*
2056  * Description: Test if all bits are set for the Baseband register
2057  *
2058  * Parameters:
2059  *  In:
2060  *      dwIoBase    - I/O base address
2061  *      byBBAddr    - address of register in Baseband
2062  *      byTestBits  - TestBits
2063  *  Out:
2064  *      none
2065  *
2066  * Return Value: true if all TestBits are set; false otherwise.
2067  *
2068  */
2069 bool BBbIsRegBitsOn(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned char byTestBits)
2070 {
2071         unsigned char byOrgData;
2072
2073         BBbReadEmbedded(dwIoBase, byBBAddr, &byOrgData);
2074         return (byOrgData & byTestBits) == byTestBits;
2075 }
2076
2077 /*
2078  * Description: Test if all bits are clear for the Baseband register
2079  *
2080  * Parameters:
2081  *  In:
2082  *      dwIoBase    - I/O base address
2083  *      byBBAddr    - address of register in Baseband
2084  *      byTestBits  - TestBits
2085  *  Out:
2086  *      none
2087  *
2088  * Return Value: true if all TestBits are clear; false otherwise.
2089  *
2090  */
2091 bool BBbIsRegBitsOff(void __iomem *dwIoBase, unsigned char byBBAddr, unsigned char byTestBits)
2092 {
2093         unsigned char byOrgData;
2094
2095         BBbReadEmbedded(dwIoBase, byBBAddr, &byOrgData);
2096         return (byOrgData & byTestBits) == 0;
2097 }
2098
2099 /*
2100  * Description: VIA VT3253 Baseband chip init function
2101  *
2102  * Parameters:
2103  *  In:
2104  *      dwIoBase    - I/O base address
2105  *      byRevId     - Revision ID
2106  *      byRFType    - RF type
2107  *  Out:
2108  *      none
2109  *
2110  * Return Value: true if succeeded; false if failed.
2111  *
2112  */
2113
2114 bool BBbVT3253Init(struct vnt_private *pDevice)
2115 {
2116         bool bResult = true;
2117         int        ii;
2118         void __iomem *dwIoBase = pDevice->PortOffset;
2119         unsigned char byRFType = pDevice->byRFType;
2120         unsigned char byLocalID = pDevice->byLocalID;
2121
2122         if (byRFType == RF_RFMD2959) {
2123                 if (byLocalID <= REV_ID_VT3253_A1) {
2124                         for (ii = 0; ii < CB_VT3253_INIT_FOR_RFMD; ii++)
2125                                 bResult &= BBbWriteEmbedded(dwIoBase, byVT3253InitTab_RFMD[ii][0], byVT3253InitTab_RFMD[ii][1]);
2126
2127                 } else {
2128                         for (ii = 0; ii < CB_VT3253B0_INIT_FOR_RFMD; ii++)
2129                                 bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_RFMD[ii][0], byVT3253B0_RFMD[ii][1]);
2130
2131                         for (ii = 0; ii < CB_VT3253B0_AGC_FOR_RFMD2959; ii++)
2132                                 bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AGC4_RFMD2959[ii][0], byVT3253B0_AGC4_RFMD2959[ii][1]);
2133
2134                         VNSvOutPortD(dwIoBase + MAC_REG_ITRTMSET, 0x23);
2135                         MACvRegBitsOn(dwIoBase, MAC_REG_PAPEDELAY, BIT0);
2136                 }
2137                 pDevice->abyBBVGA[0] = 0x18;
2138                 pDevice->abyBBVGA[1] = 0x0A;
2139                 pDevice->abyBBVGA[2] = 0x0;
2140                 pDevice->abyBBVGA[3] = 0x0;
2141                 pDevice->ldBmThreshold[0] = -70;
2142                 pDevice->ldBmThreshold[1] = -50;
2143                 pDevice->ldBmThreshold[2] = 0;
2144                 pDevice->ldBmThreshold[3] = 0;
2145         } else if ((byRFType == RF_AIROHA) || (byRFType == RF_AL2230S)) {
2146                 for (ii = 0; ii < CB_VT3253B0_INIT_FOR_AIROHA2230; ii++)
2147                         bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AIROHA2230[ii][0], byVT3253B0_AIROHA2230[ii][1]);
2148
2149                 for (ii = 0; ii < CB_VT3253B0_AGC; ii++)
2150                         bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]);
2151
2152                 pDevice->abyBBVGA[0] = 0x1C;
2153                 pDevice->abyBBVGA[1] = 0x10;
2154                 pDevice->abyBBVGA[2] = 0x0;
2155                 pDevice->abyBBVGA[3] = 0x0;
2156                 pDevice->ldBmThreshold[0] = -70;
2157                 pDevice->ldBmThreshold[1] = -48;
2158                 pDevice->ldBmThreshold[2] = 0;
2159                 pDevice->ldBmThreshold[3] = 0;
2160         } else if (byRFType == RF_UW2451) {
2161                 for (ii = 0; ii < CB_VT3253B0_INIT_FOR_UW2451; ii++)
2162                         bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_UW2451[ii][0], byVT3253B0_UW2451[ii][1]);
2163
2164                 for (ii = 0; ii < CB_VT3253B0_AGC; ii++)
2165                         bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]);
2166
2167                 VNSvOutPortB(dwIoBase + MAC_REG_ITRTMSET, 0x23);
2168                 MACvRegBitsOn(dwIoBase, MAC_REG_PAPEDELAY, BIT0);
2169
2170                 pDevice->abyBBVGA[0] = 0x14;
2171                 pDevice->abyBBVGA[1] = 0x0A;
2172                 pDevice->abyBBVGA[2] = 0x0;
2173                 pDevice->abyBBVGA[3] = 0x0;
2174                 pDevice->ldBmThreshold[0] = -60;
2175                 pDevice->ldBmThreshold[1] = -50;
2176                 pDevice->ldBmThreshold[2] = 0;
2177                 pDevice->ldBmThreshold[3] = 0;
2178         } else if (byRFType == RF_UW2452) {
2179                 for (ii = 0; ii < CB_VT3253B0_INIT_FOR_UW2451; ii++)
2180                         bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_UW2451[ii][0], byVT3253B0_UW2451[ii][1]);
2181
2182                 /* Init ANT B select,TX Config CR09 = 0x61->0x45, 0x45->0x41(VC1/VC2 define, make the ANT_A, ANT_B inverted) */
2183                 /*bResult &= BBbWriteEmbedded(dwIoBase,0x09,0x41);*/
2184                 /* Init ANT B select,RX Config CR10 = 0x28->0x2A, 0x2A->0x28(VC1/VC2 define, make the ANT_A, ANT_B inverted) */
2185                 /*bResult &= BBbWriteEmbedded(dwIoBase,0x0a,0x28);*/
2186                 /* Select VC1/VC2, CR215 = 0x02->0x06 */
2187                 bResult &= BBbWriteEmbedded(dwIoBase, 0xd7, 0x06);
2188
2189                 /* {{RobertYu:20050125, request by Jack */
2190                 bResult &= BBbWriteEmbedded(dwIoBase, 0x90, 0x20);
2191                 bResult &= BBbWriteEmbedded(dwIoBase, 0x97, 0xeb);
2192                 /* }} */
2193
2194                 /* {{RobertYu:20050221, request by Jack */
2195                 bResult &= BBbWriteEmbedded(dwIoBase, 0xa6, 0x00);
2196                 bResult &= BBbWriteEmbedded(dwIoBase, 0xa8, 0x30);
2197                 /* }} */
2198                 bResult &= BBbWriteEmbedded(dwIoBase, 0xb0, 0x58);
2199
2200                 for (ii = 0; ii < CB_VT3253B0_AGC; ii++)
2201                         bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]);
2202
2203                 pDevice->abyBBVGA[0] = 0x14;
2204                 pDevice->abyBBVGA[1] = 0x0A;
2205                 pDevice->abyBBVGA[2] = 0x0;
2206                 pDevice->abyBBVGA[3] = 0x0;
2207                 pDevice->ldBmThreshold[0] = -60;
2208                 pDevice->ldBmThreshold[1] = -50;
2209                 pDevice->ldBmThreshold[2] = 0;
2210                 pDevice->ldBmThreshold[3] = 0;
2211                 /* }} RobertYu */
2212
2213         } else if (byRFType == RF_VT3226) {
2214                 for (ii = 0; ii < CB_VT3253B0_INIT_FOR_AIROHA2230; ii++)
2215                         bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AIROHA2230[ii][0], byVT3253B0_AIROHA2230[ii][1]);
2216
2217                 for (ii = 0; ii < CB_VT3253B0_AGC; ii++)
2218                         bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]);
2219
2220                 pDevice->abyBBVGA[0] = 0x1C;
2221                 pDevice->abyBBVGA[1] = 0x10;
2222                 pDevice->abyBBVGA[2] = 0x0;
2223                 pDevice->abyBBVGA[3] = 0x0;
2224                 pDevice->ldBmThreshold[0] = -70;
2225                 pDevice->ldBmThreshold[1] = -48;
2226                 pDevice->ldBmThreshold[2] = 0;
2227                 pDevice->ldBmThreshold[3] = 0;
2228                 /* Fix VT3226 DFC system timing issue */
2229                 MACvSetRFLE_LatchBase(dwIoBase);
2230                 /* {{ RobertYu: 20050104 */
2231         } else if (byRFType == RF_AIROHA7230) {
2232                 for (ii = 0; ii < CB_VT3253B0_INIT_FOR_AIROHA2230; ii++)
2233                         bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AIROHA2230[ii][0], byVT3253B0_AIROHA2230[ii][1]);
2234
2235
2236                 /* {{ RobertYu:20050223, request by JerryChung */
2237                 /* Init ANT B select,TX Config CR09 = 0x61->0x45, 0x45->0x41(VC1/VC2 define, make the ANT_A, ANT_B inverted) */
2238                 /*bResult &= BBbWriteEmbedded(dwIoBase,0x09,0x41);*/
2239                 /* Init ANT B select,RX Config CR10 = 0x28->0x2A, 0x2A->0x28(VC1/VC2 define, make the ANT_A, ANT_B inverted) */
2240                 /*bResult &= BBbWriteEmbedded(dwIoBase,0x0a,0x28);*/
2241                 /* Select VC1/VC2, CR215 = 0x02->0x06 */
2242                 bResult &= BBbWriteEmbedded(dwIoBase, 0xd7, 0x06);
2243                 /* }} */
2244
2245                 for (ii = 0; ii < CB_VT3253B0_AGC; ii++)
2246                         bResult &= BBbWriteEmbedded(dwIoBase, byVT3253B0_AGC[ii][0], byVT3253B0_AGC[ii][1]);
2247
2248                 pDevice->abyBBVGA[0] = 0x1C;
2249                 pDevice->abyBBVGA[1] = 0x10;
2250                 pDevice->abyBBVGA[2] = 0x0;
2251                 pDevice->abyBBVGA[3] = 0x0;
2252                 pDevice->ldBmThreshold[0] = -70;
2253                 pDevice->ldBmThreshold[1] = -48;
2254                 pDevice->ldBmThreshold[2] = 0;
2255                 pDevice->ldBmThreshold[3] = 0;
2256                 /* }} RobertYu */
2257         } else {
2258                 /* No VGA Table now */
2259                 pDevice->bUpdateBBVGA = false;
2260                 pDevice->abyBBVGA[0] = 0x1C;
2261         }
2262
2263         if (byLocalID > REV_ID_VT3253_A1) {
2264                 BBbWriteEmbedded(dwIoBase, 0x04, 0x7F);
2265                 BBbWriteEmbedded(dwIoBase, 0x0D, 0x01);
2266         }
2267
2268         return bResult;
2269 }
2270
2271 /*
2272  * Description: Read All Baseband Registers
2273  *
2274  * Parameters:
2275  *  In:
2276  *      dwIoBase    - I/O base address
2277  *      pbyBBRegs   - Point to struct that stores Baseband Registers
2278  *  Out:
2279  *      none
2280  *
2281  * Return Value: none
2282  *
2283  */
2284 void BBvReadAllRegs(void __iomem *dwIoBase, unsigned char *pbyBBRegs)
2285 {
2286         int  ii;
2287         unsigned char byBase = 1;
2288
2289         for (ii = 0; ii < BB_MAX_CONTEXT_SIZE; ii++) {
2290                 BBbReadEmbedded(dwIoBase, (unsigned char)(ii*byBase), pbyBBRegs);
2291                 pbyBBRegs += byBase;
2292         }
2293 }
2294
2295 /*
2296  * Description: Turn on BaseBand Loopback mode
2297  *
2298  * Parameters:
2299  *  In:
2300  *      dwIoBase    - I/O base address
2301  *      bCCK        - If CCK is set
2302  *  Out:
2303  *      none
2304  *
2305  * Return Value: none
2306  *
2307  */
2308
2309 void BBvLoopbackOn(struct vnt_private *pDevice)
2310 {
2311         unsigned char byData;
2312         void __iomem *dwIoBase = pDevice->PortOffset;
2313
2314         /* CR C9 = 0x00 */
2315         BBbReadEmbedded(dwIoBase, 0xC9, &pDevice->byBBCRc9); /* CR201 */
2316         BBbWriteEmbedded(dwIoBase, 0xC9, 0);
2317         BBbReadEmbedded(dwIoBase, 0x4D, &pDevice->byBBCR4d); /* CR77 */
2318         BBbWriteEmbedded(dwIoBase, 0x4D, 0x90);
2319
2320         /* CR 88 = 0x02(CCK), 0x03(OFDM) */
2321         BBbReadEmbedded(dwIoBase, 0x88, &pDevice->byBBCR88); /* CR136 */
2322
2323         if (pDevice->uConnectionRate <= RATE_11M) { /* CCK */
2324                 /* Enable internal digital loopback: CR33 |= 0000 0001 */
2325                 BBbReadEmbedded(dwIoBase, 0x21, &byData); /* CR33 */
2326                 BBbWriteEmbedded(dwIoBase, 0x21, (unsigned char)(byData | 0x01)); /* CR33 */
2327                 /* CR154 = 0x00 */
2328                 BBbWriteEmbedded(dwIoBase, 0x9A, 0);    /* CR154 */
2329
2330                 BBbWriteEmbedded(dwIoBase, 0x88, 0x02); /* CR239 */
2331         } else { /* OFDM */
2332                 /* Enable internal digital loopback:CR154 |= 0000 0001 */
2333                 BBbReadEmbedded(dwIoBase, 0x9A, &byData); /* CR154 */
2334                 BBbWriteEmbedded(dwIoBase, 0x9A, (unsigned char)(byData | 0x01)); /* CR154 */
2335                 /* CR33 = 0x00 */
2336                 BBbWriteEmbedded(dwIoBase, 0x21, 0);    /* CR33 */
2337
2338                 BBbWriteEmbedded(dwIoBase, 0x88, 0x03); /* CR239 */
2339         }
2340
2341         /* CR14 = 0x00 */
2342         BBbWriteEmbedded(dwIoBase, 0x0E, 0); /* CR14 */
2343
2344         /* Disable TX_IQUN */
2345         BBbReadEmbedded(pDevice->PortOffset, 0x09, &pDevice->byBBCR09);
2346         BBbWriteEmbedded(pDevice->PortOffset, 0x09, (unsigned char)(pDevice->byBBCR09 & 0xDE));
2347 }
2348
2349 /*
2350  * Description: Turn off BaseBand Loopback mode
2351  *
2352  * Parameters:
2353  *  In:
2354  *      pDevice         - Device Structure
2355  *
2356  *  Out:
2357  *      none
2358  *
2359  * Return Value: none
2360  *
2361  */
2362 void BBvLoopbackOff(struct vnt_private *pDevice)
2363 {
2364         unsigned char byData;
2365         void __iomem *dwIoBase = pDevice->PortOffset;
2366
2367         BBbWriteEmbedded(dwIoBase, 0xC9, pDevice->byBBCRc9); /* CR201 */
2368         BBbWriteEmbedded(dwIoBase, 0x88, pDevice->byBBCR88); /* CR136 */
2369         BBbWriteEmbedded(dwIoBase, 0x09, pDevice->byBBCR09); /* CR136 */
2370         BBbWriteEmbedded(dwIoBase, 0x4D, pDevice->byBBCR4d); /* CR77  */
2371
2372         if (pDevice->uConnectionRate <= RATE_11M) { /* CCK */
2373                 /* Set the CR33 Bit2 to disable internal Loopback. */
2374                 BBbReadEmbedded(dwIoBase, 0x21, &byData);/* CR33 */
2375                 BBbWriteEmbedded(dwIoBase, 0x21, (unsigned char)(byData & 0xFE)); /* CR33 */
2376         } else { /* OFDM */
2377                 BBbReadEmbedded(dwIoBase, 0x9A, &byData); /* CR154 */
2378                 BBbWriteEmbedded(dwIoBase, 0x9A, (unsigned char)(byData & 0xFE)); /* CR154 */
2379         }
2380         BBbReadEmbedded(dwIoBase, 0x0E, &byData); /* CR14 */
2381         BBbWriteEmbedded(dwIoBase, 0x0E, (unsigned char)(byData | 0x80)); /* CR14 */
2382 }
2383
2384 /*
2385  * Description: Set ShortSlotTime mode
2386  *
2387  * Parameters:
2388  *  In:
2389  *      pDevice     - Device Structure
2390  *  Out:
2391  *      none
2392  *
2393  * Return Value: none
2394  *
2395  */
2396 void
2397 BBvSetShortSlotTime(struct vnt_private *pDevice)
2398 {
2399         unsigned char byBBRxConf = 0;
2400         unsigned char byBBVGA = 0;
2401
2402         BBbReadEmbedded(pDevice->PortOffset, 0x0A, &byBBRxConf); /* CR10 */
2403
2404         if (pDevice->bShortSlotTime)
2405                 byBBRxConf &= 0xDF; /* 1101 1111 */
2406         else
2407                 byBBRxConf |= 0x20; /* 0010 0000 */
2408
2409         /* patch for 3253B0 Baseband with Cardbus module */
2410         BBbReadEmbedded(pDevice->PortOffset, 0xE7, &byBBVGA);
2411         if (byBBVGA == pDevice->abyBBVGA[0])
2412                 byBBRxConf |= 0x20; /* 0010 0000 */
2413
2414         BBbWriteEmbedded(pDevice->PortOffset, 0x0A, byBBRxConf); /* CR10 */
2415 }
2416
2417 void BBvSetVGAGainOffset(struct vnt_private *pDevice, unsigned char byData)
2418 {
2419         unsigned char byBBRxConf = 0;
2420
2421         BBbWriteEmbedded(pDevice->PortOffset, 0xE7, byData);
2422
2423         BBbReadEmbedded(pDevice->PortOffset, 0x0A, &byBBRxConf); /* CR10 */
2424         /* patch for 3253B0 Baseband with Cardbus module */
2425         if (byData == pDevice->abyBBVGA[0])
2426                 byBBRxConf |= 0x20; /* 0010 0000 */
2427         else if (pDevice->bShortSlotTime)
2428                 byBBRxConf &= 0xDF; /* 1101 1111 */
2429         else
2430                 byBBRxConf |= 0x20; /* 0010 0000 */
2431         pDevice->byBBVGACurrent = byData;
2432         BBbWriteEmbedded(pDevice->PortOffset, 0x0A, byBBRxConf); /* CR10 */
2433 }
2434
2435 /*
2436  * Description: Baseband SoftwareReset
2437  *
2438  * Parameters:
2439  *  In:
2440  *      dwIoBase    - I/O base address
2441  *  Out:
2442  *      none
2443  *
2444  * Return Value: none
2445  *
2446  */
2447 void
2448 BBvSoftwareReset(void __iomem *dwIoBase)
2449 {
2450         BBbWriteEmbedded(dwIoBase, 0x50, 0x40);
2451         BBbWriteEmbedded(dwIoBase, 0x50, 0);
2452         BBbWriteEmbedded(dwIoBase, 0x9C, 0x01);
2453         BBbWriteEmbedded(dwIoBase, 0x9C, 0);
2454 }
2455
2456 /*
2457  * Description: Baseband Power Save Mode ON
2458  *
2459  * Parameters:
2460  *  In:
2461  *      dwIoBase    - I/O base address
2462  *  Out:
2463  *      none
2464  *
2465  * Return Value: none
2466  *
2467  */
2468 void
2469 BBvPowerSaveModeON(void __iomem *dwIoBase)
2470 {
2471         unsigned char byOrgData;
2472
2473         BBbReadEmbedded(dwIoBase, 0x0D, &byOrgData);
2474         byOrgData |= BIT0;
2475         BBbWriteEmbedded(dwIoBase, 0x0D, byOrgData);
2476 }
2477
2478 /*
2479  * Description: Baseband Power Save Mode OFF
2480  *
2481  * Parameters:
2482  *  In:
2483  *      dwIoBase    - I/O base address
2484  *  Out:
2485  *      none
2486  *
2487  * Return Value: none
2488  *
2489  */
2490 void
2491 BBvPowerSaveModeOFF(void __iomem *dwIoBase)
2492 {
2493         unsigned char byOrgData;
2494
2495         BBbReadEmbedded(dwIoBase, 0x0D, &byOrgData);
2496         byOrgData &= ~(BIT0);
2497         BBbWriteEmbedded(dwIoBase, 0x0D, byOrgData);
2498 }
2499
2500 /*
2501  * Description: Set Tx Antenna mode
2502  *
2503  * Parameters:
2504  *  In:
2505  *      pDevice          - Device Structure
2506  *      byAntennaMode    - Antenna Mode
2507  *  Out:
2508  *      none
2509  *
2510  * Return Value: none
2511  *
2512  */
2513
2514 void
2515 BBvSetTxAntennaMode(void __iomem *dwIoBase, unsigned char byAntennaMode)
2516 {
2517         unsigned char byBBTxConf;
2518
2519         BBbReadEmbedded(dwIoBase, 0x09, &byBBTxConf); /* CR09 */
2520         if (byAntennaMode == ANT_DIVERSITY) {
2521                 /* bit 1 is diversity */
2522                 byBBTxConf |= 0x02;
2523         } else if (byAntennaMode == ANT_A) {
2524                 /* bit 2 is ANTSEL */
2525                 byBBTxConf &= 0xF9; /* 1111 1001 */
2526         } else if (byAntennaMode == ANT_B) {
2527                 byBBTxConf &= 0xFD; /* 1111 1101 */
2528                 byBBTxConf |= 0x04;
2529         }
2530         BBbWriteEmbedded(dwIoBase, 0x09, byBBTxConf); /* CR09 */
2531 }
2532
2533 /*
2534  * Description: Set Rx Antenna mode
2535  *
2536  * Parameters:
2537  *  In:
2538  *      pDevice          - Device Structure
2539  *      byAntennaMode    - Antenna Mode
2540  *  Out:
2541  *      none
2542  *
2543  * Return Value: none
2544  *
2545  */
2546
2547 void
2548 BBvSetRxAntennaMode(void __iomem *dwIoBase, unsigned char byAntennaMode)
2549 {
2550         unsigned char byBBRxConf;
2551
2552         BBbReadEmbedded(dwIoBase, 0x0A, &byBBRxConf); /* CR10 */
2553         if (byAntennaMode == ANT_DIVERSITY) {
2554                 byBBRxConf |= 0x01;
2555
2556         } else if (byAntennaMode == ANT_A) {
2557                 byBBRxConf &= 0xFC; /* 1111 1100 */
2558         } else if (byAntennaMode == ANT_B) {
2559                 byBBRxConf &= 0xFE; /* 1111 1110 */
2560                 byBBRxConf |= 0x02;
2561         }
2562         BBbWriteEmbedded(dwIoBase, 0x0A, byBBRxConf); /* CR10 */
2563 }
2564
2565 /*
2566  * Description: BBvSetDeepSleep
2567  *
2568  * Parameters:
2569  *  In:
2570  *      pDevice          - Device Structure
2571  *  Out:
2572  *      none
2573  *
2574  * Return Value: none
2575  *
2576  */
2577 void
2578 BBvSetDeepSleep(void __iomem *dwIoBase, unsigned char byLocalID)
2579 {
2580         BBbWriteEmbedded(dwIoBase, 0x0C, 0x17); /* CR12 */
2581         BBbWriteEmbedded(dwIoBase, 0x0D, 0xB9); /* CR13 */
2582 }
2583
2584 void
2585 BBvExitDeepSleep(void __iomem *dwIoBase, unsigned char byLocalID)
2586 {
2587         BBbWriteEmbedded(dwIoBase, 0x0C, 0x00); /* CR12 */
2588         BBbWriteEmbedded(dwIoBase, 0x0D, 0x01); /* CR13 */
2589 }
2590
2591 static
2592 unsigned long
2593 s_ulGetRatio(struct vnt_private *pDevice)
2594 {
2595         unsigned long ulRatio = 0;
2596         unsigned long ulMaxPacket;
2597         unsigned long ulPacketNum;
2598
2599         /* This is a thousand-ratio */
2600         ulMaxPacket = pDevice->uNumSQ3[RATE_54M];
2601         if (pDevice->uNumSQ3[RATE_54M] != 0) {
2602                 ulPacketNum = pDevice->uNumSQ3[RATE_54M];
2603                 ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
2604                 ulRatio += TOP_RATE_54M;
2605         }
2606         if (pDevice->uNumSQ3[RATE_48M] > ulMaxPacket) {
2607                 ulPacketNum = pDevice->uNumSQ3[RATE_54M] + pDevice->uNumSQ3[RATE_48M];
2608                 ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
2609                 ulRatio += TOP_RATE_48M;
2610                 ulMaxPacket = pDevice->uNumSQ3[RATE_48M];
2611         }
2612         if (pDevice->uNumSQ3[RATE_36M] > ulMaxPacket) {
2613                 ulPacketNum = pDevice->uNumSQ3[RATE_54M] + pDevice->uNumSQ3[RATE_48M] +
2614                         pDevice->uNumSQ3[RATE_36M];
2615                 ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
2616                 ulRatio += TOP_RATE_36M;
2617                 ulMaxPacket = pDevice->uNumSQ3[RATE_36M];
2618         }
2619         if (pDevice->uNumSQ3[RATE_24M] > ulMaxPacket) {
2620                 ulPacketNum = pDevice->uNumSQ3[RATE_54M] + pDevice->uNumSQ3[RATE_48M] +
2621                         pDevice->uNumSQ3[RATE_36M] + pDevice->uNumSQ3[RATE_24M];
2622                 ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
2623                 ulRatio += TOP_RATE_24M;
2624                 ulMaxPacket = pDevice->uNumSQ3[RATE_24M];
2625         }
2626         if (pDevice->uNumSQ3[RATE_18M] > ulMaxPacket) {
2627                 ulPacketNum = pDevice->uNumSQ3[RATE_54M] + pDevice->uNumSQ3[RATE_48M] +
2628                         pDevice->uNumSQ3[RATE_36M] + pDevice->uNumSQ3[RATE_24M] +
2629                         pDevice->uNumSQ3[RATE_18M];
2630                 ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
2631                 ulRatio += TOP_RATE_18M;
2632                 ulMaxPacket = pDevice->uNumSQ3[RATE_18M];
2633         }
2634         if (pDevice->uNumSQ3[RATE_12M] > ulMaxPacket) {
2635                 ulPacketNum = pDevice->uNumSQ3[RATE_54M] + pDevice->uNumSQ3[RATE_48M] +
2636                         pDevice->uNumSQ3[RATE_36M] + pDevice->uNumSQ3[RATE_24M] +
2637                         pDevice->uNumSQ3[RATE_18M] + pDevice->uNumSQ3[RATE_12M];
2638                 ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
2639                 ulRatio += TOP_RATE_12M;
2640                 ulMaxPacket = pDevice->uNumSQ3[RATE_12M];
2641         }
2642         if (pDevice->uNumSQ3[RATE_11M] > ulMaxPacket) {
2643                 ulPacketNum = pDevice->uDiversityCnt - pDevice->uNumSQ3[RATE_1M] -
2644                         pDevice->uNumSQ3[RATE_2M] - pDevice->uNumSQ3[RATE_5M] -
2645                         pDevice->uNumSQ3[RATE_6M] - pDevice->uNumSQ3[RATE_9M];
2646                 ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
2647                 ulRatio += TOP_RATE_11M;
2648                 ulMaxPacket = pDevice->uNumSQ3[RATE_11M];
2649         }
2650         if (pDevice->uNumSQ3[RATE_9M] > ulMaxPacket) {
2651                 ulPacketNum = pDevice->uDiversityCnt - pDevice->uNumSQ3[RATE_1M] -
2652                         pDevice->uNumSQ3[RATE_2M] - pDevice->uNumSQ3[RATE_5M] -
2653                         pDevice->uNumSQ3[RATE_6M];
2654                 ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
2655                 ulRatio += TOP_RATE_9M;
2656                 ulMaxPacket = pDevice->uNumSQ3[RATE_9M];
2657         }
2658         if (pDevice->uNumSQ3[RATE_6M] > ulMaxPacket) {
2659                 ulPacketNum = pDevice->uDiversityCnt - pDevice->uNumSQ3[RATE_1M] -
2660                         pDevice->uNumSQ3[RATE_2M] - pDevice->uNumSQ3[RATE_5M];
2661                 ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
2662                 ulRatio += TOP_RATE_6M;
2663                 ulMaxPacket = pDevice->uNumSQ3[RATE_6M];
2664         }
2665         if (pDevice->uNumSQ3[RATE_5M] > ulMaxPacket) {
2666                 ulPacketNum = pDevice->uDiversityCnt - pDevice->uNumSQ3[RATE_1M] -
2667                         pDevice->uNumSQ3[RATE_2M];
2668                 ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
2669                 ulRatio += TOP_RATE_55M;
2670                 ulMaxPacket = pDevice->uNumSQ3[RATE_5M];
2671         }
2672         if (pDevice->uNumSQ3[RATE_2M] > ulMaxPacket) {
2673                 ulPacketNum = pDevice->uDiversityCnt - pDevice->uNumSQ3[RATE_1M];
2674                 ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
2675                 ulRatio += TOP_RATE_2M;
2676                 ulMaxPacket = pDevice->uNumSQ3[RATE_2M];
2677         }
2678         if (pDevice->uNumSQ3[RATE_1M] > ulMaxPacket) {
2679                 ulPacketNum = pDevice->uDiversityCnt;
2680                 ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
2681                 ulRatio += TOP_RATE_1M;
2682         }
2683
2684         return ulRatio;
2685 }
2686
2687 void
2688 BBvClearAntDivSQ3Value(struct vnt_private *pDevice)
2689 {
2690         unsigned int ii;
2691
2692         pDevice->uDiversityCnt = 0;
2693         for (ii = 0; ii < MAX_RATE; ii++)
2694                 pDevice->uNumSQ3[ii] = 0;
2695 }
2696
2697 /*
2698  * Description: Antenna Diversity
2699  *
2700  * Parameters:
2701  *  In:
2702  *      pDevice          - Device Structure
2703  *      byRSR            - RSR from received packet
2704  *      bySQ3            - SQ3 value from received packet
2705  *  Out:
2706  *      none
2707  *
2708  * Return Value: none
2709  *
2710  */
2711
2712 void BBvAntennaDiversity(struct vnt_private *pDevice,
2713                          unsigned char byRxRate, unsigned char bySQ3)
2714 {
2715         if ((byRxRate >= MAX_RATE) || (pDevice->wAntDiversityMaxRate >= MAX_RATE))
2716                 return;
2717
2718         pDevice->uDiversityCnt++;
2719
2720         pDevice->uNumSQ3[byRxRate]++;
2721
2722         if (pDevice->byAntennaState == 0) {
2723                 if (pDevice->uDiversityCnt > pDevice->ulDiversityNValue) {
2724                         pr_debug("ulDiversityNValue=[%d],54M-[%d]\n",
2725                                  (int)pDevice->ulDiversityNValue,
2726                                  (int)pDevice->uNumSQ3[(int)pDevice->wAntDiversityMaxRate]);
2727
2728                         if (pDevice->uNumSQ3[pDevice->wAntDiversityMaxRate] < pDevice->uDiversityCnt/2) {
2729                                 pDevice->ulRatio_State0 = s_ulGetRatio(pDevice);
2730                                 pr_debug("SQ3_State0, rate = [%08x]\n",
2731                                          (int)pDevice->ulRatio_State0);
2732
2733                                 if (pDevice->byTMax == 0)
2734                                         return;
2735                                 pr_debug("1.[%08x], uNumSQ3[%d]=%d, %d\n",
2736                                          (int)pDevice->ulRatio_State0,
2737                                          (int)pDevice->wAntDiversityMaxRate,
2738                                          (int)pDevice->uNumSQ3[(int)pDevice->wAntDiversityMaxRate],
2739                                          (int)pDevice->uDiversityCnt);
2740
2741                                 s_vChangeAntenna(pDevice);
2742                                 pDevice->byAntennaState = 1;
2743                                 del_timer(&pDevice->TimerSQ3Tmax3);
2744                                 del_timer(&pDevice->TimerSQ3Tmax2);
2745                                 pDevice->TimerSQ3Tmax1.expires =  RUN_AT(pDevice->byTMax * HZ);
2746                                 add_timer(&pDevice->TimerSQ3Tmax1);
2747
2748                         } else {
2749                                 pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
2750                                 add_timer(&pDevice->TimerSQ3Tmax3);
2751                         }
2752                         BBvClearAntDivSQ3Value(pDevice);
2753
2754                 }
2755         } else { /* byAntennaState == 1 */
2756
2757                 if (pDevice->uDiversityCnt > pDevice->ulDiversityMValue) {
2758                         del_timer(&pDevice->TimerSQ3Tmax1);
2759
2760                         pDevice->ulRatio_State1 = s_ulGetRatio(pDevice);
2761                         pr_debug("RX:SQ3_State1, rate0 = %08x,rate1 = %08x\n",
2762                                  (int)pDevice->ulRatio_State0,
2763                                  (int)pDevice->ulRatio_State1);
2764
2765                         if (pDevice->ulRatio_State1 < pDevice->ulRatio_State0) {
2766                                 pr_debug("2.[%08x][%08x], uNumSQ3[%d]=%d, %d\n",
2767                                          (int)pDevice->ulRatio_State0,
2768                                          (int)pDevice->ulRatio_State1,
2769                                          (int)pDevice->wAntDiversityMaxRate,
2770                                          (int)pDevice->uNumSQ3[(int)pDevice->wAntDiversityMaxRate],
2771                                          (int)pDevice->uDiversityCnt);
2772
2773                                 s_vChangeAntenna(pDevice);
2774                                 pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
2775                                 pDevice->TimerSQ3Tmax2.expires =  RUN_AT(pDevice->byTMax2 * HZ);
2776                                 add_timer(&pDevice->TimerSQ3Tmax3);
2777                                 add_timer(&pDevice->TimerSQ3Tmax2);
2778                         }
2779                         pDevice->byAntennaState = 0;
2780                         BBvClearAntDivSQ3Value(pDevice);
2781                 }
2782         } /* byAntennaState */
2783 }
2784
2785 /*+
2786  *
2787  * Description:
2788  *  Timer for SQ3 antenna diversity
2789  *
2790  * Parameters:
2791  *  In:
2792  *  Out:
2793  *      none
2794  *
2795  * Return Value: none
2796  *
2797  -*/
2798
2799 void
2800 TimerSQ3CallBack(
2801         void *hDeviceContext
2802 )
2803 {
2804         struct vnt_private *pDevice = hDeviceContext;
2805
2806         pr_debug("TimerSQ3CallBack...\n");
2807         spin_lock_irq(&pDevice->lock);
2808
2809         pr_debug("3.[%08x][%08x], %d\n",
2810                  (int)pDevice->ulRatio_State0, (int)pDevice->ulRatio_State1,
2811                  (int)pDevice->uDiversityCnt);
2812
2813         s_vChangeAntenna(pDevice);
2814         pDevice->byAntennaState = 0;
2815         BBvClearAntDivSQ3Value(pDevice);
2816
2817         pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
2818         pDevice->TimerSQ3Tmax2.expires =  RUN_AT(pDevice->byTMax2 * HZ);
2819         add_timer(&pDevice->TimerSQ3Tmax3);
2820         add_timer(&pDevice->TimerSQ3Tmax2);
2821
2822         spin_unlock_irq(&pDevice->lock);
2823 }
2824
2825 /*+
2826  *
2827  * Description:
2828  *  Timer for SQ3 antenna diversity
2829  *
2830  * Parameters:
2831  *  In:
2832  *      pvSysSpec1
2833  *      hDeviceContext - Pointer to the adapter
2834  *      pvSysSpec2
2835  *      pvSysSpec3
2836  *  Out:
2837  *      none
2838  *
2839  * Return Value: none
2840  *
2841  -*/
2842
2843 void
2844 TimerState1CallBack(
2845         void *hDeviceContext
2846 )
2847 {
2848         struct vnt_private *pDevice = hDeviceContext;
2849
2850         pr_debug("TimerState1CallBack...\n");
2851
2852         spin_lock_irq(&pDevice->lock);
2853         if (pDevice->uDiversityCnt < pDevice->ulDiversityMValue/100) {
2854                 s_vChangeAntenna(pDevice);
2855                 pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
2856                 pDevice->TimerSQ3Tmax2.expires =  RUN_AT(pDevice->byTMax2 * HZ);
2857                 add_timer(&pDevice->TimerSQ3Tmax3);
2858                 add_timer(&pDevice->TimerSQ3Tmax2);
2859         } else {
2860                 pDevice->ulRatio_State1 = s_ulGetRatio(pDevice);
2861                 pr_debug("SQ3_State1, rate0 = %08x,rate1 = %08x\n",
2862                          (int)pDevice->ulRatio_State0,
2863                          (int)pDevice->ulRatio_State1);
2864
2865                 if (pDevice->ulRatio_State1 < pDevice->ulRatio_State0) {
2866                         pr_debug("2.[%08x][%08x], uNumSQ3[%d]=%d, %d\n",
2867                                  (int)pDevice->ulRatio_State0,
2868                                  (int)pDevice->ulRatio_State1,
2869                                  (int)pDevice->wAntDiversityMaxRate,
2870                                  (int)pDevice->uNumSQ3[(int)pDevice->wAntDiversityMaxRate],
2871                                  (int)pDevice->uDiversityCnt);
2872
2873                         s_vChangeAntenna(pDevice);
2874
2875                         pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
2876                         pDevice->TimerSQ3Tmax2.expires =  RUN_AT(pDevice->byTMax2 * HZ);
2877                         add_timer(&pDevice->TimerSQ3Tmax3);
2878                         add_timer(&pDevice->TimerSQ3Tmax2);
2879                 }
2880         }
2881         pDevice->byAntennaState = 0;
2882         BBvClearAntDivSQ3Value(pDevice);
2883         spin_unlock_irq(&pDevice->lock);
2884 }