]> Pileus Git - ~andy/linux/blob - drivers/staging/vt6656/baseband.c
Merge branch 'next' of git://git.monstr.eu/linux-2.6-microblaze
[~andy/linux] / drivers / staging / vt6656 / 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: Jerry Chen
25  *
26  * Date: Jun. 5, 2002
27  *
28  * Functions:
29  *      BBuGetFrameTime        - Calculate data frame transmitting time
30  *      BBvCalculateParameter   - Calculate PhyLength, PhyService and Phy Signal parameter for baseband Tx
31  *      BBbVT3184Init          - VIA VT3184 baseband chip init code
32  *
33  * Revision History:
34  *
35  *
36  */
37
38 #include "tmacro.h"
39 #include "tether.h"
40 #include "mac.h"
41 #include "baseband.h"
42 #include "rf.h"
43 #include "srom.h"
44 #include "control.h"
45 #include "datarate.h"
46 #include "rndis.h"
47
48 static int          msglevel                =MSG_LEVEL_INFO;
49 //static int          msglevel                =MSG_LEVEL_DEBUG;
50
51 u8 abyVT3184_AGC[] = {
52     0x00,   //0
53     0x00,   //1
54     0x02,   //2
55     0x02,   //3  //RobertYu:20060505, 0x04,   //3
56     0x04,   //4
57     0x04,   //5  //RobertYu:20060505, 0x06,   //5
58     0x06,   //6
59     0x06,   //7
60     0x08,   //8
61     0x08,   //9
62     0x0A,   //A
63     0x0A,   //B
64     0x0C,   //C
65     0x0C,   //D
66     0x0E,   //E
67     0x0E,   //F
68     0x10,   //10
69     0x10,   //11
70     0x12,   //12
71     0x12,   //13
72     0x14,   //14
73     0x14,   //15
74     0x16,   //16
75     0x16,   //17
76     0x18,   //18
77     0x18,   //19
78     0x1A,   //1A
79     0x1A,   //1B
80     0x1C,   //1C
81     0x1C,   //1D
82     0x1E,   //1E
83     0x1E,   //1F
84     0x20,   //20
85     0x20,   //21
86     0x22,   //22
87     0x22,   //23
88     0x24,   //24
89     0x24,   //25
90     0x26,   //26
91     0x26,   //27
92     0x28,   //28
93     0x28,   //29
94     0x2A,   //2A
95     0x2A,   //2B
96     0x2C,   //2C
97     0x2C,   //2D
98     0x2E,   //2E
99     0x2E,   //2F
100     0x30,   //30
101     0x30,   //31
102     0x32,   //32
103     0x32,   //33
104     0x34,   //34
105     0x34,   //35
106     0x36,   //36
107     0x36,   //37
108     0x38,   //38
109     0x38,   //39
110     0x3A,   //3A
111     0x3A,   //3B
112     0x3C,   //3C
113     0x3C,   //3D
114     0x3E,   //3E
115     0x3E    //3F
116 };
117
118 u8 abyVT3184_AL2230[] = {
119         0x31,//00
120         0x00,
121         0x00,
122         0x00,
123         0x00,
124         0x80,
125         0x00,
126         0x00,
127         0x70,
128         0x45,//tx   //0x64 for FPGA
129         0x2A,
130         0x76,
131         0x00,
132         0x00,
133         0x80,
134         0x00,
135         0x00,//10
136         0x00,
137         0x00,
138         0x00,
139         0x00,
140         0x00,
141         0x00,
142         0x00,
143         0x00,
144         0x00,
145         0x00,
146         0x8e,       //RobertYu:20060522, //0x8d,
147         0x0a,       //RobertYu:20060515, //0x09,
148         0x00,
149         0x00,
150         0x00,
151         0x00,//20
152         0x00,
153         0x00,
154         0x00,
155         0x00,
156         0x4a,
157         0x00,
158         0x00,
159         0x00,
160         0x00,
161         0x00,
162         0x00,
163         0x00,
164         0x4a,
165         0x00,
166         0x0c,       //RobertYu:20060522, //0x10,
167         0x26,//30
168         0x5b,
169         0x00,
170         0x00,
171         0x00,
172         0x00,
173         0xaa,
174         0xaa,
175         0xff,
176         0xff,
177         0x79,
178         0x00,
179         0x00,
180         0x0b,
181         0x48,
182         0x04,
183         0x00,//40
184         0x08,
185         0x00,
186         0x08,
187         0x08,
188         0x14,
189         0x05,
190         0x09,
191         0x00,
192         0x00,
193         0x00,
194         0x00,
195         0x09,
196         0x73,
197         0x00,
198         0xc5,
199         0x00,//50   //RobertYu:20060505, //0x15,//50
200         0x19,
201         0x00,
202         0x00,
203         0x00,
204         0x00,
205         0x00,
206         0x00,
207         0x00,
208         0xd0,       //RobertYu:20060505, //0xb0,
209         0x00,
210         0x00,
211         0x00,
212         0x00,
213         0x00,
214         0x00,
215         0xe4,//60
216         0x80,
217         0x00,
218         0x00,
219         0x00,
220         0x00,
221         0x98,
222         0x0a,
223         0x00,
224         0x00,
225         0x00,
226         0x00,
227         0x00,       //0x80 for FPGA
228         0x03,
229         0x01,
230         0x00,
231         0x00,//70
232         0x00,
233         0x00,
234         0x00,
235         0x00,
236         0x00,
237         0x00,
238         0x00,
239         0x00,
240         0x00,
241         0x00,
242         0x00,
243         0x00,
244         0x00,
245         0x00,
246         0x00,
247         0x8c,//80
248         0x01,
249         0x09,
250         0x00,
251         0x00,
252         0x00,
253         0x00,
254         0x00,
255         0x08,
256         0x00,
257         0x1f,       //RobertYu:20060516, //0x0f,
258         0xb7,
259         0x88,
260         0x47,
261         0xaa,
262         0x00,       //RobertYu:20060505, //0x02,
263         0x20,//90   //RobertYu:20060505, //0x22,//90
264         0x00,
265         0x00,
266         0x00,
267         0x00,
268         0x00,
269         0x00,
270         0xeb,
271         0x00,
272         0x00,
273         0x00,
274         0x00,
275         0x00,
276         0x00,
277         0x00,
278         0x01,
279         0x00,//a0
280         0x00,
281         0x00,
282         0x00,
283         0x00,
284         0x00,
285         0x10,
286         0x00,
287         0x18,
288         0x00,
289         0x00,
290         0x00,
291         0x00,
292         0x15,       //RobertYu:20060516, //0x00,
293         0x00,
294         0x18,
295         0x38,//b0
296         0x30,
297         0x00,
298         0x00,
299         0xff,
300         0x0f,
301         0xe4,
302         0xe2,
303         0x00,
304         0x00,
305         0x00,
306         0x03,
307         0x01,
308         0x00,
309         0x00,
310         0x00,
311         0x18,//c0
312         0x20,
313         0x07,
314         0x18,
315         0xff,
316         0xff,       //RobertYu:20060509, //0x2c,
317         0x0e,       //RobertYu:20060530, //0x0c,
318         0x0a,
319         0x0e,
320         0x00,       //RobertYu:20060505, //0x01,
321         0x82,       //RobertYu:20060516, //0x8f,
322         0xa7,
323         0x3c,
324         0x10,
325         0x30,       //RobertYu:20060627, //0x0b,
326         0x05,       //RobertYu:20060516, //0x25,
327         0x40,//d0
328         0x12,
329         0x00,
330         0x00,
331         0x10,
332         0x28,
333         0x80,
334         0x2A,
335         0x00,
336         0x00,
337         0x00,
338         0x00,
339         0x00,
340         0x00,
341         0x00,
342         0x00,
343         0x00,//e0
344         0xf3,       //RobertYu:20060516, //0xd3,
345         0x00,
346         0x00,
347         0x00,
348         0x10,
349         0x00,
350         0x12,       //RobertYu:20060627, //0x10,
351         0x00,
352         0xf4,
353         0x00,
354         0xff,
355         0x79,
356         0x20,
357         0x30,
358         0x05,       //RobertYu:20060516, //0x0c,
359         0x00,//f0
360         0x3e,
361         0x00,
362         0x00,
363         0x00,
364         0x00,
365         0x00,
366         0x00,
367         0x00,
368         0x00,
369         0x00,
370         0x00,
371         0x00,
372         0x00,
373         0x00,
374         0x00
375 };
376
377 //{{RobertYu:20060515, new BB setting for VT3226D0
378 u8 abyVT3184_VT3226D0[] = {
379         0x31,//00
380         0x00,
381         0x00,
382         0x00,
383         0x00,
384         0x80,
385         0x00,
386         0x00,
387         0x70,
388         0x45,//tx   //0x64 for FPGA
389         0x2A,
390         0x76,
391         0x00,
392         0x00,
393         0x80,
394         0x00,
395         0x00,//10
396         0x00,
397         0x00,
398         0x00,
399         0x00,
400         0x00,
401         0x00,
402         0x00,
403         0x00,
404         0x00,
405         0x00,
406         0x8e,       //RobertYu:20060525, //0x8d,
407         0x0a,       //RobertYu:20060515, //0x09,
408         0x00,
409         0x00,
410         0x00,
411         0x00,//20
412         0x00,
413         0x00,
414         0x00,
415         0x00,
416         0x4a,
417         0x00,
418         0x00,
419         0x00,
420         0x00,
421         0x00,
422         0x00,
423         0x00,
424         0x4a,
425         0x00,
426         0x0c,       //RobertYu:20060525, //0x10,
427         0x26,//30
428         0x5b,
429         0x00,
430         0x00,
431         0x00,
432         0x00,
433         0xaa,
434         0xaa,
435         0xff,
436         0xff,
437         0x79,
438         0x00,
439         0x00,
440         0x0b,
441         0x48,
442         0x04,
443         0x00,//40
444         0x08,
445         0x00,
446         0x08,
447         0x08,
448         0x14,
449         0x05,
450         0x09,
451         0x00,
452         0x00,
453         0x00,
454         0x00,
455         0x09,
456         0x73,
457         0x00,
458         0xc5,
459         0x00,//50   //RobertYu:20060505, //0x15,//50
460         0x19,
461         0x00,
462         0x00,
463         0x00,
464         0x00,
465         0x00,
466         0x00,
467         0x00,
468         0xd0,       //RobertYu:20060505, //0xb0,
469         0x00,
470         0x00,
471         0x00,
472         0x00,
473         0x00,
474         0x00,
475         0xe4,//60
476         0x80,
477         0x00,
478         0x00,
479         0x00,
480         0x00,
481         0x98,
482         0x0a,
483         0x00,
484         0x00,
485         0x00,
486         0x00,
487         0x00,       //0x80 for FPGA
488         0x03,
489         0x01,
490         0x00,
491         0x00,//70
492         0x00,
493         0x00,
494         0x00,
495         0x00,
496         0x00,
497         0x00,
498         0x00,
499         0x00,
500         0x00,
501         0x00,
502         0x00,
503         0x00,
504         0x00,
505         0x00,
506         0x00,
507         0x8c,//80
508         0x01,
509         0x09,
510         0x00,
511         0x00,
512         0x00,
513         0x00,
514         0x00,
515         0x08,
516         0x00,
517         0x1f,       //RobertYu:20060515, //0x0f,
518         0xb7,
519         0x88,
520         0x47,
521         0xaa,
522         0x00,       //RobertYu:20060505, //0x02,
523         0x20,//90   //RobertYu:20060505, //0x22,//90
524         0x00,
525         0x00,
526         0x00,
527         0x00,
528         0x00,
529         0x00,
530         0xeb,
531         0x00,
532         0x00,
533         0x00,
534         0x00,
535         0x00,
536         0x00,
537         0x00,
538         0x01,
539         0x00,//a0
540         0x00,
541         0x00,
542         0x00,
543         0x00,
544         0x00,
545         0x10,
546         0x00,
547         0x18,
548         0x00,
549         0x00,
550         0x00,
551         0x00,
552         0x00,
553         0x00,
554         0x18,
555         0x38,//b0
556         0x30,
557         0x00,
558         0x00,
559         0xff,
560         0x0f,
561         0xe4,
562         0xe2,
563         0x00,
564         0x00,
565         0x00,
566         0x03,
567         0x01,
568         0x00,
569         0x00,
570         0x00,
571         0x18,//c0
572         0x20,
573         0x07,
574         0x18,
575         0xff,
576         0xff,       //RobertYu:20060509, //0x2c,
577         0x10,       //RobertYu:20060525, //0x0c,
578         0x0a,
579         0x0e,
580         0x00,       //RobertYu:20060505, //0x01,
581         0x84,       //RobertYu:20060525, //0x8f,
582         0xa7,
583         0x3c,
584         0x10,
585         0x24,       //RobertYu:20060627, //0x18,
586         0x05,       //RobertYu:20060515, //0x25,
587         0x40,//d0
588         0x12,
589         0x00,
590         0x00,
591         0x10,
592         0x28,
593         0x80,
594         0x2A,
595         0x00,
596         0x00,
597         0x00,
598         0x00,
599         0x00,
600         0x00,
601         0x00,
602         0x00,
603         0x00,//e0
604         0xf3,       //RobertYu:20060515, //0xd3,
605         0x00,
606         0x00,
607         0x00,
608         0x10,
609         0x00,
610         0x10,       //RobertYu:20060627, //0x0e,
611         0x00,
612         0xf4,
613         0x00,
614         0xff,
615         0x79,
616         0x20,
617         0x30,
618         0x08,       //RobertYu:20060515, //0x0c,
619         0x00,//f0
620         0x3e,
621         0x00,
622         0x00,
623         0x00,
624         0x00,
625         0x00,
626         0x00,
627         0x00,
628         0x00,
629         0x00,
630         0x00,
631         0x00,
632         0x00,
633         0x00,
634         0x00,
635 };
636
637 const u16 awcFrameTime[MAX_RATE] =
638 {10, 20, 55, 110, 24, 36, 48, 72, 96, 144, 192, 216};
639
640 /*
641 static
642 unsigned long
643 s_ulGetLowSQ3(PSDevice pDevice);
644
645 static
646 unsigned long
647 s_ulGetRatio(PSDevice pDevice);
648
649 static
650 void
651 s_vClearSQ3Value(PSDevice pDevice);
652 */
653
654 /*
655  * Description: Calculate data frame transmitting time
656  *
657  * Parameters:
658  *  In:
659  *      byPreambleType  - Preamble Type
660  *      byPktType        - PK_TYPE_11A, PK_TYPE_11B, PK_TYPE_11GB, PK_TYPE_11GA
661  *      cbFrameLength   - Baseband Type
662  *      wRate           - Tx Rate
663  *  Out:
664  *
665  * Return Value: FrameTime
666  *
667  */
668 unsigned int
669 BBuGetFrameTime(
670      u8 byPreambleType,
671      u8 byPktType,
672      unsigned int cbFrameLength,
673      u16 wRate
674     )
675 {
676     unsigned int uFrameTime;
677     unsigned int uPreamble;
678     unsigned int uTmp;
679     unsigned int uRateIdx = (unsigned int)wRate;
680     unsigned int uRate = 0;
681
682     if (uRateIdx > RATE_54M) {
683         ASSERT(0);
684         return 0;
685     }
686
687     uRate = (unsigned int)awcFrameTime[uRateIdx];
688
689     if (uRateIdx <= 3) {          //CCK mode
690
691         if (byPreambleType == 1) {//Short
692             uPreamble = 96;
693         } else {
694             uPreamble = 192;
695         }
696         uFrameTime = (cbFrameLength * 80) / uRate;  //?????
697         uTmp = (uFrameTime * uRate) / 80;
698         if (cbFrameLength != uTmp) {
699             uFrameTime ++;
700         }
701
702         return (uPreamble + uFrameTime);
703     }
704     else {
705         uFrameTime = (cbFrameLength * 8 + 22) / uRate;   //????????
706         uTmp = ((uFrameTime * uRate) - 22) / 8;
707         if(cbFrameLength != uTmp) {
708             uFrameTime ++;
709         }
710         uFrameTime = uFrameTime * 4;    //???????
711         if(byPktType != PK_TYPE_11A) {
712             uFrameTime += 6;
713         }
714         return (20 + uFrameTime); //??????
715     }
716 }
717
718 /*
719  * Description: Calculate Length, Service, and Signal fields of Phy for Tx
720  *
721  * Parameters:
722  *  In:
723  *      pDevice         - Device Structure
724  *      cbFrameLength   - Tx Frame Length
725  *      wRate           - Tx Rate
726  *  Out:
727  *      pwPhyLen        - pointer to Phy Length field
728  *      pbyPhySrv       - pointer to Phy Service field
729  *      pbyPhySgn       - pointer to Phy Signal field
730  *
731  * Return Value: none
732  *
733  */
734 void BBvCalculateParameter(struct vnt_private *pDevice, u32 cbFrameLength,
735         u16 wRate, u8 byPacketType, u16 *pwPhyLen, u8 *pbyPhySrv,
736                 u8 *pbyPhySgn)
737 {
738         u32 cbBitCount;
739         u32 cbUsCount = 0;
740         u32 cbTmp;
741         int bExtBit;
742         u8 byPreambleType = pDevice->byPreambleType;
743         int bCCK = pDevice->bCCK;
744
745     cbBitCount = cbFrameLength * 8;
746     bExtBit = false;
747
748     switch (wRate) {
749     case RATE_1M :
750         cbUsCount = cbBitCount;
751         *pbyPhySgn = 0x00;
752         break;
753
754     case RATE_2M :
755         cbUsCount = cbBitCount / 2;
756         if (byPreambleType == 1)
757             *pbyPhySgn = 0x09;
758         else // long preamble
759             *pbyPhySgn = 0x01;
760         break;
761
762     case RATE_5M :
763         if (bCCK == false)
764             cbBitCount ++;
765         cbUsCount = (cbBitCount * 10) / 55;
766         cbTmp = (cbUsCount * 55) / 10;
767         if (cbTmp != cbBitCount)
768             cbUsCount ++;
769         if (byPreambleType == 1)
770             *pbyPhySgn = 0x0a;
771         else // long preamble
772             *pbyPhySgn = 0x02;
773         break;
774
775     case RATE_11M :
776
777         if (bCCK == false)
778             cbBitCount ++;
779         cbUsCount = cbBitCount / 11;
780         cbTmp = cbUsCount * 11;
781         if (cbTmp != cbBitCount) {
782             cbUsCount ++;
783             if ((cbBitCount - cbTmp) <= 3)
784                 bExtBit = true;
785         }
786         if (byPreambleType == 1)
787             *pbyPhySgn = 0x0b;
788         else // long preamble
789             *pbyPhySgn = 0x03;
790         break;
791
792     case RATE_6M :
793         if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
794             *pbyPhySgn = 0x9B; //1001 1011
795         }
796         else {//11g, 2.4GHZ
797             *pbyPhySgn = 0x8B; //1000 1011
798         }
799         break;
800
801     case RATE_9M :
802         if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
803             *pbyPhySgn = 0x9F; //1001 1111
804         }
805         else {//11g, 2.4GHZ
806             *pbyPhySgn = 0x8F; //1000 1111
807         }
808         break;
809
810     case RATE_12M :
811         if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
812             *pbyPhySgn = 0x9A; //1001 1010
813         }
814         else {//11g, 2.4GHZ
815             *pbyPhySgn = 0x8A; //1000 1010
816         }
817         break;
818
819     case RATE_18M :
820         if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
821             *pbyPhySgn = 0x9E; //1001 1110
822         }
823         else {//11g, 2.4GHZ
824             *pbyPhySgn = 0x8E; //1000 1110
825         }
826         break;
827
828     case RATE_24M :
829         if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
830             *pbyPhySgn = 0x99; //1001 1001
831         }
832         else {//11g, 2.4GHZ
833             *pbyPhySgn = 0x89; //1000 1001
834         }
835         break;
836
837     case RATE_36M :
838         if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
839             *pbyPhySgn = 0x9D; //1001 1101
840         }
841         else {//11g, 2.4GHZ
842             *pbyPhySgn = 0x8D; //1000 1101
843         }
844         break;
845
846     case RATE_48M :
847         if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
848             *pbyPhySgn = 0x98; //1001 1000
849         }
850         else {//11g, 2.4GHZ
851             *pbyPhySgn = 0x88; //1000 1000
852         }
853         break;
854
855     case RATE_54M :
856         if (byPacketType == PK_TYPE_11A) {//11a, 5GHZ
857             *pbyPhySgn = 0x9C; //1001 1100
858         }
859         else {//11g, 2.4GHZ
860             *pbyPhySgn = 0x8C; //1000 1100
861         }
862         break;
863
864     default :
865         if (byPacketType == PK_TYPE_11A) {//11a, 5GHZ
866             *pbyPhySgn = 0x9C; //1001 1100
867         }
868         else {//11g, 2.4GHZ
869             *pbyPhySgn = 0x8C; //1000 1100
870         }
871         break;
872     }
873
874     if (byPacketType == PK_TYPE_11B) {
875         *pbyPhySrv = 0x00;
876         if (bExtBit)
877             *pbyPhySrv = *pbyPhySrv | 0x80;
878         *pwPhyLen = (u16) cbUsCount;
879     }
880     else {
881         *pbyPhySrv = 0x00;
882         *pwPhyLen = (u16)cbFrameLength;
883     }
884 }
885
886 /*
887  * Description: Set Antenna mode
888  *
889  * Parameters:
890  *  In:
891  *      pDevice          - Device Structure
892  *      byAntennaMode    - Antenna Mode
893  *  Out:
894  *      none
895  *
896  * Return Value: none
897  *
898  */
899 void BBvSetAntennaMode(struct vnt_private *pDevice, u8 byAntennaMode)
900 {
901     switch (byAntennaMode) {
902         case ANT_TXA:
903         case ANT_TXB:
904             break;
905         case ANT_RXA:
906             pDevice->byBBRxConf &= 0xFC;
907             break;
908         case ANT_RXB:
909             pDevice->byBBRxConf &= 0xFE;
910             pDevice->byBBRxConf |= 0x02;
911             break;
912     }
913
914     CONTROLnsRequestOut(pDevice,
915                     MESSAGE_TYPE_SET_ANTMD,
916                     (u16) byAntennaMode,
917                     0,
918                     0,
919                     NULL);
920 }
921
922 /*
923  * Description: Set Antenna mode
924  *
925  * Parameters:
926  *  In:
927  *      pDevice          - Device Structure
928  *      byAntennaMode    - Antenna Mode
929  *  Out:
930  *      none
931  *
932  * Return Value: none
933  *
934  */
935
936 int BBbVT3184Init(struct vnt_private *pDevice)
937 {
938         int ntStatus;
939     u16                    wLength;
940     u8 *                   pbyAddr;
941     u8 *                   pbyAgc;
942     u16                    wLengthAgc;
943     u8                    abyArray[256];
944
945     ntStatus = CONTROLnsRequestIn(pDevice,
946                                   MESSAGE_TYPE_READ,
947                                   0,
948                                   MESSAGE_REQUEST_EEPROM,
949                                   EEP_MAX_CONTEXT_SIZE,
950                                   pDevice->abyEEPROM);
951     if (ntStatus != STATUS_SUCCESS) {
952         return false;
953     }
954
955 //    if ((pDevice->abyEEPROM[EEP_OFS_RADIOCTL]&0x06)==0x04)
956 //        return false;
957
958 //zonetype initial
959  pDevice->byOriginalZonetype = pDevice->abyEEPROM[EEP_OFS_ZONETYPE];
960  if(pDevice->config_file.ZoneType >= 0) {         //read zonetype file ok!
961   if ((pDevice->config_file.ZoneType == 0)&&
962         (pDevice->abyEEPROM[EEP_OFS_ZONETYPE] !=0x00)){          //for USA
963     pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0;
964     pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0B;
965     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Init Zone Type :USA\n");
966   }
967  else if((pDevice->config_file.ZoneType == 1)&&
968              (pDevice->abyEEPROM[EEP_OFS_ZONETYPE]!=0x01)){   //for Japan
969     pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0x01;
970     pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0D;
971     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Init Zone Type :Japan\n");
972   }
973  else if((pDevice->config_file.ZoneType == 2)&&
974              (pDevice->abyEEPROM[EEP_OFS_ZONETYPE]!=0x02)){   //for Europe
975     pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0x02;
976     pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0D;
977     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Init Zone Type :Europe\n");
978   }
979 else {
980    if(pDevice->config_file.ZoneType !=pDevice->abyEEPROM[EEP_OFS_ZONETYPE])
981       printk("zonetype in file[%02x] mismatch with in EEPROM[%02x]\n",pDevice->config_file.ZoneType,pDevice->abyEEPROM[EEP_OFS_ZONETYPE]);
982    else
983       printk("Read Zonetype file success,use default zonetype setting[%02x]\n",pDevice->config_file.ZoneType);
984  }
985 }
986
987     if ( !pDevice->bZoneRegExist ) {
988         pDevice->byZoneType = pDevice->abyEEPROM[EEP_OFS_ZONETYPE];
989     }
990     pDevice->byRFType = pDevice->abyEEPROM[EEP_OFS_RFTYPE];
991
992     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Zone Type %x\n", pDevice->byZoneType);
993     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"RF Type %d\n", pDevice->byRFType);
994
995     if ((pDevice->byRFType == RF_AL2230) || (pDevice->byRFType == RF_AL2230S)) {
996         pDevice->byBBRxConf = abyVT3184_AL2230[10];
997         wLength = sizeof(abyVT3184_AL2230);
998         pbyAddr = abyVT3184_AL2230;
999         pbyAgc = abyVT3184_AGC;
1000         wLengthAgc = sizeof(abyVT3184_AGC);
1001
1002         pDevice->abyBBVGA[0] = 0x1C;
1003         pDevice->abyBBVGA[1] = 0x10;
1004         pDevice->abyBBVGA[2] = 0x0;
1005         pDevice->abyBBVGA[3] = 0x0;
1006         pDevice->ldBmThreshold[0] = -70;
1007         pDevice->ldBmThreshold[1] = -48;
1008         pDevice->ldBmThreshold[2] = 0;
1009         pDevice->ldBmThreshold[3] = 0;
1010     }
1011     else if (pDevice->byRFType == RF_AIROHA7230) {
1012         pDevice->byBBRxConf = abyVT3184_AL2230[10];
1013         wLength = sizeof(abyVT3184_AL2230);
1014         pbyAddr = abyVT3184_AL2230;
1015         pbyAgc = abyVT3184_AGC;
1016         wLengthAgc = sizeof(abyVT3184_AGC);
1017
1018         // Init ANT B select,TX Config CR09 = 0x61->0x45, 0x45->0x41(VC1/VC2 define, make the ANT_A, ANT_B inverted)
1019         //pbyAddr[0x09] = 0x41;
1020         // Init ANT B select,RX Config CR10 = 0x28->0x2A, 0x2A->0x28(VC1/VC2 define, make the ANT_A, ANT_B inverted)
1021         //pbyAddr[0x0a] = 0x28;
1022         // Select VC1/VC2, CR215 = 0x02->0x06
1023         pbyAddr[0xd7] = 0x06;
1024
1025         pDevice->abyBBVGA[0] = 0x1C;
1026         pDevice->abyBBVGA[1] = 0x10;
1027         pDevice->abyBBVGA[2] = 0x0;
1028         pDevice->abyBBVGA[3] = 0x0;
1029         pDevice->ldBmThreshold[0] = -70;
1030         pDevice->ldBmThreshold[1] = -48;
1031         pDevice->ldBmThreshold[2] = 0;
1032         pDevice->ldBmThreshold[3] = 0;
1033     }
1034     else if ( (pDevice->byRFType == RF_VT3226) || (pDevice->byRFType == RF_VT3226D0) ) {
1035         pDevice->byBBRxConf = abyVT3184_VT3226D0[10];   //RobertYu:20060515
1036         wLength = sizeof(abyVT3184_VT3226D0);           //RobertYu:20060515
1037         pbyAddr = abyVT3184_VT3226D0;                   //RobertYu:20060515
1038         pbyAgc = abyVT3184_AGC;
1039         wLengthAgc = sizeof(abyVT3184_AGC);
1040
1041         pDevice->abyBBVGA[0] = 0x20; //RobertYu:20060104, reguest by Jack
1042         pDevice->abyBBVGA[1] = 0x10;
1043         pDevice->abyBBVGA[2] = 0x0;
1044         pDevice->abyBBVGA[3] = 0x0;
1045         pDevice->ldBmThreshold[0] = -70;
1046         pDevice->ldBmThreshold[1] = -48;
1047         pDevice->ldBmThreshold[2] = 0;
1048         pDevice->ldBmThreshold[3] = 0;
1049         // Fix VT3226 DFC system timing issue
1050         MACvRegBitsOn(pDevice, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT);
1051     //}}
1052     //{{RobertYu:20060609
1053     } else if ( (pDevice->byRFType == RF_VT3342A0) ) {
1054         pDevice->byBBRxConf = abyVT3184_VT3226D0[10];
1055         wLength = sizeof(abyVT3184_VT3226D0);
1056         pbyAddr = abyVT3184_VT3226D0;
1057         pbyAgc = abyVT3184_AGC;
1058         wLengthAgc = sizeof(abyVT3184_AGC);
1059
1060         pDevice->abyBBVGA[0] = 0x20;
1061         pDevice->abyBBVGA[1] = 0x10;
1062         pDevice->abyBBVGA[2] = 0x0;
1063         pDevice->abyBBVGA[3] = 0x0;
1064         pDevice->ldBmThreshold[0] = -70;
1065         pDevice->ldBmThreshold[1] = -48;
1066         pDevice->ldBmThreshold[2] = 0;
1067         pDevice->ldBmThreshold[3] = 0;
1068         // Fix VT3226 DFC system timing issue
1069         MACvRegBitsOn(pDevice, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT);
1070     //}}
1071     } else {
1072         return true;
1073     }
1074
1075    memcpy(abyArray, pbyAddr, wLength);
1076    CONTROLnsRequestOut(pDevice,
1077                     MESSAGE_TYPE_WRITE,
1078                     0,
1079                     MESSAGE_REQUEST_BBREG,
1080                     wLength,
1081                     abyArray
1082                     );
1083
1084    memcpy(abyArray, pbyAgc, wLengthAgc);
1085    CONTROLnsRequestOut(pDevice,
1086                     MESSAGE_TYPE_WRITE,
1087                     0,
1088                     MESSAGE_REQUEST_BBAGC,
1089                     wLengthAgc,
1090                     abyArray
1091                     );
1092
1093     if ((pDevice->byRFType == RF_VT3226) || //RobertYu:20051116, 20060111 remove VT3226D0
1094          (pDevice->byRFType == RF_VT3342A0)  //RobertYu:20060609
1095          ) {
1096         ControlvWriteByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_ITRTMSET,0x23);
1097         MACvRegBitsOn(pDevice,MAC_REG_PAPEDELAY,0x01);
1098     }
1099     else if (pDevice->byRFType == RF_VT3226D0)
1100     {
1101         ControlvWriteByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_ITRTMSET,0x11);
1102         MACvRegBitsOn(pDevice,MAC_REG_PAPEDELAY,0x01);
1103     }
1104
1105     ControlvWriteByte(pDevice,MESSAGE_REQUEST_BBREG,0x04,0x7F);
1106     ControlvWriteByte(pDevice,MESSAGE_REQUEST_BBREG,0x0D,0x01);
1107
1108     RFbRFTableDownload(pDevice);
1109     return true;//ntStatus;
1110 }
1111
1112 /*
1113  * Description: Set ShortSlotTime mode
1114  *
1115  * Parameters:
1116  *  In:
1117  *      pDevice     - Device Structure
1118  *  Out:
1119  *      none
1120  *
1121  * Return Value: none
1122  *
1123  */
1124 void BBvSetShortSlotTime(struct vnt_private *pDevice)
1125 {
1126     u8 byBBVGA=0;
1127
1128         if (pDevice->bShortSlotTime)
1129         pDevice->byBBRxConf &= 0xDF;//1101 1111
1130         else
1131         pDevice->byBBRxConf |= 0x20;//0010 0000
1132
1133     ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0xE7, &byBBVGA);
1134         if (byBBVGA == pDevice->abyBBVGA[0])
1135         pDevice->byBBRxConf |= 0x20;//0010 0000
1136
1137     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0A, pDevice->byBBRxConf);
1138 }
1139
1140 void BBvSetVGAGainOffset(struct vnt_private *pDevice, u8 byData)
1141 {
1142
1143     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xE7, byData);
1144
1145     // patch for 3253B0 Baseband with Cardbus module
1146         if (pDevice->bShortSlotTime)
1147                 pDevice->byBBRxConf &= 0xDF; /* 1101 1111 */
1148         else
1149                 pDevice->byBBRxConf |= 0x20; /* 0010 0000 */
1150
1151     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0A, pDevice->byBBRxConf);//CR10
1152 }
1153
1154 /*
1155  * Description: BBvSetDeepSleep
1156  *
1157  * Parameters:
1158  *  In:
1159  *      pDevice          - Device Structure
1160  *  Out:
1161  *      none
1162  *
1163  * Return Value: none
1164  *
1165  */
1166 void BBvSetDeepSleep(struct vnt_private *pDevice)
1167 {
1168     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0c, 0x17);//CR12
1169     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0D, 0xB9);//CR13
1170 }
1171
1172 void BBvExitDeepSleep(struct vnt_private *pDevice)
1173 {
1174     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0C, 0x00);//CR12
1175     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0D, 0x01);//CR13
1176 }
1177
1178 static unsigned long s_ulGetLowSQ3(struct vnt_private *pDevice)
1179 {
1180         int ii;
1181         unsigned long ulSQ3 = 0;
1182         unsigned long ulMaxPacket;
1183
1184     ulMaxPacket = pDevice->aulPktNum[RATE_54M];
1185         if (pDevice->aulPktNum[RATE_54M] != 0)
1186         ulSQ3 = pDevice->aulSQ3Val[RATE_54M] / pDevice->aulPktNum[RATE_54M];
1187
1188         for (ii = RATE_48M; ii >= RATE_6M; ii--)
1189                 if (pDevice->aulPktNum[ii] > ulMaxPacket) {
1190             ulMaxPacket = pDevice->aulPktNum[ii];
1191             ulSQ3 = pDevice->aulSQ3Val[ii] / pDevice->aulPktNum[ii];
1192         }
1193
1194     return ulSQ3;
1195 }
1196
1197 static unsigned long s_ulGetRatio(struct vnt_private *pDevice)
1198 {
1199         int ii, jj;
1200         unsigned long ulRatio = 0;
1201         unsigned long ulMaxPacket;
1202         unsigned long ulPacketNum;
1203
1204     //This is a thousand-ratio
1205     ulMaxPacket = pDevice->aulPktNum[RATE_54M];
1206     if ( pDevice->aulPktNum[RATE_54M] != 0 ) {
1207         ulPacketNum = pDevice->aulPktNum[RATE_54M];
1208         ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
1209         ulRatio += TOP_RATE_54M;
1210     }
1211         for (ii = RATE_48M; ii >= RATE_1M; ii--)
1212         if ( pDevice->aulPktNum[ii] > ulMaxPacket ) {
1213             ulPacketNum = 0;
1214             for ( jj=RATE_54M;jj>=ii;jj--)
1215                 ulPacketNum += pDevice->aulPktNum[jj];
1216             ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
1217             ulRatio += TOP_RATE_48M;
1218             ulMaxPacket = pDevice->aulPktNum[ii];
1219         }
1220
1221     return ulRatio;
1222 }
1223
1224 static void s_vClearSQ3Value(struct vnt_private *pDevice)
1225 {
1226     int ii;
1227     pDevice->uDiversityCnt = 0;
1228
1229     for ( ii=RATE_1M;ii<MAX_RATE;ii++) {
1230         pDevice->aulPktNum[ii] = 0;
1231         pDevice->aulSQ3Val[ii] = 0;
1232     }
1233 }
1234
1235 /*
1236  * Description: Antenna Diversity
1237  *
1238  * Parameters:
1239  *  In:
1240  *      pDevice          - Device Structure
1241  *      byRSR            - RSR from received packet
1242  *      bySQ3            - SQ3 value from received packet
1243  *  Out:
1244  *      none
1245  *
1246  * Return Value: none
1247  *
1248  */
1249
1250 void BBvAntennaDiversity(struct vnt_private *pDevice,
1251         u8 byRxRate, u8 bySQ3)
1252 {
1253
1254     pDevice->uDiversityCnt++;
1255     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pDevice->uDiversityCnt = %d\n", (int)pDevice->uDiversityCnt);
1256
1257     if (byRxRate == 2) {
1258         pDevice->aulPktNum[RATE_1M]++;
1259     }
1260     else if (byRxRate==4) {
1261         pDevice->aulPktNum[RATE_2M]++;
1262     }
1263     else if (byRxRate==11) {
1264         pDevice->aulPktNum[RATE_5M]++;
1265     }
1266     else if (byRxRate==22) {
1267         pDevice->aulPktNum[RATE_11M]++;
1268     }
1269     else if(byRxRate==12){
1270         pDevice->aulPktNum[RATE_6M]++;
1271         pDevice->aulSQ3Val[RATE_6M] += bySQ3;
1272     }
1273     else if(byRxRate==18){
1274         pDevice->aulPktNum[RATE_9M]++;
1275         pDevice->aulSQ3Val[RATE_9M] += bySQ3;
1276     }
1277     else if(byRxRate==24){
1278         pDevice->aulPktNum[RATE_12M]++;
1279         pDevice->aulSQ3Val[RATE_12M] += bySQ3;
1280     }
1281     else if(byRxRate==36){
1282         pDevice->aulPktNum[RATE_18M]++;
1283         pDevice->aulSQ3Val[RATE_18M] += bySQ3;
1284     }
1285     else if(byRxRate==48){
1286         pDevice->aulPktNum[RATE_24M]++;
1287         pDevice->aulSQ3Val[RATE_24M] += bySQ3;
1288     }
1289     else if(byRxRate==72){
1290         pDevice->aulPktNum[RATE_36M]++;
1291         pDevice->aulSQ3Val[RATE_36M] += bySQ3;
1292     }
1293     else if(byRxRate==96){
1294         pDevice->aulPktNum[RATE_48M]++;
1295         pDevice->aulSQ3Val[RATE_48M] += bySQ3;
1296     }
1297     else if(byRxRate==108){
1298         pDevice->aulPktNum[RATE_54M]++;
1299         pDevice->aulSQ3Val[RATE_54M] += bySQ3;
1300     }
1301
1302     if (pDevice->byAntennaState == 0) {
1303
1304         if (pDevice->uDiversityCnt > pDevice->ulDiversityNValue) {
1305             DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ulDiversityNValue=[%d],54M-[%d]\n",(int)pDevice->ulDiversityNValue, (int)pDevice->aulPktNum[RATE_54M]);
1306
1307             pDevice->ulSQ3_State0 = s_ulGetLowSQ3(pDevice);
1308             pDevice->ulRatio_State0 = s_ulGetRatio(pDevice);
1309             DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State0, SQ3= [%08x] rate = [%08x]\n",(int)pDevice->ulSQ3_State0,(int)pDevice->ulRatio_State0);
1310
1311             if ( ((pDevice->aulPktNum[RATE_54M] < pDevice->ulDiversityNValue/2) &&
1312                   (pDevice->ulSQ3_State0 > pDevice->ulSQ3TH) ) ||
1313                  (pDevice->ulSQ3_State0 == 0 ) )  {
1314
1315                 if ( pDevice->byTMax == 0 )
1316                     return;
1317
1318                 bScheduleCommand((void *) pDevice,
1319                                  WLAN_CMD_CHANGE_ANTENNA,
1320                                  NULL);
1321
1322                 pDevice->byAntennaState = 1;
1323
1324                 del_timer(&pDevice->TimerSQ3Tmax3);
1325                 del_timer(&pDevice->TimerSQ3Tmax2);
1326                 pDevice->TimerSQ3Tmax1.expires =  RUN_AT(pDevice->byTMax * HZ);
1327                 add_timer(&pDevice->TimerSQ3Tmax1);
1328
1329             } else {
1330                 pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
1331                 add_timer(&pDevice->TimerSQ3Tmax3);
1332             }
1333             s_vClearSQ3Value(pDevice);
1334
1335         }
1336     } else { //byAntennaState == 1
1337
1338         if (pDevice->uDiversityCnt > pDevice->ulDiversityMValue) {
1339
1340             del_timer(&pDevice->TimerSQ3Tmax1);
1341             pDevice->ulSQ3_State1 = s_ulGetLowSQ3(pDevice);
1342             pDevice->ulRatio_State1 = s_ulGetRatio(pDevice);
1343             DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State1, rate0 = %08x,rate1 = %08x\n",(int)pDevice->ulRatio_State0,(int)pDevice->ulRatio_State1);
1344
1345             if ( ((pDevice->ulSQ3_State1 == 0) && (pDevice->ulSQ3_State0 != 0)) ||
1346                  ((pDevice->ulSQ3_State1 == 0) && (pDevice->ulSQ3_State0 == 0) && (pDevice->ulRatio_State1 < pDevice->ulRatio_State0)) ||
1347                  ((pDevice->ulSQ3_State1 != 0) && (pDevice->ulSQ3_State0 != 0) && (pDevice->ulSQ3_State0 < pDevice->ulSQ3_State1))
1348                ) {
1349
1350                 bScheduleCommand((void *) pDevice,
1351                                  WLAN_CMD_CHANGE_ANTENNA,
1352                                  NULL);
1353
1354                 pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
1355                 pDevice->TimerSQ3Tmax2.expires =  RUN_AT(pDevice->byTMax2 * HZ);
1356                 add_timer(&pDevice->TimerSQ3Tmax3);
1357                 add_timer(&pDevice->TimerSQ3Tmax2);
1358
1359             }
1360             pDevice->byAntennaState = 0;
1361             s_vClearSQ3Value(pDevice);
1362         }
1363     } //byAntennaState
1364 }
1365
1366 /*+
1367  *
1368  * Description:
1369  *  Timer for SQ3 antenna diversity
1370  *
1371  * Parameters:
1372  *  In:
1373  *      pvSysSpec1
1374  *      hDeviceContext - Pointer to the adapter
1375  *      pvSysSpec2
1376  *      pvSysSpec3
1377  *  Out:
1378  *      none
1379  *
1380  * Return Value: none
1381  *
1382 -*/
1383
1384 void TimerSQ3CallBack(struct vnt_private *pDevice)
1385 {
1386
1387     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"TimerSQ3CallBack...");
1388     spin_lock_irq(&pDevice->lock);
1389
1390     bScheduleCommand((void *) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL);
1391     pDevice->byAntennaState = 0;
1392     s_vClearSQ3Value(pDevice);
1393     pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
1394     pDevice->TimerSQ3Tmax2.expires =  RUN_AT(pDevice->byTMax2 * HZ);
1395     add_timer(&pDevice->TimerSQ3Tmax3);
1396     add_timer(&pDevice->TimerSQ3Tmax2);
1397
1398     spin_unlock_irq(&pDevice->lock);
1399 }
1400
1401 /*+
1402  *
1403  * Description:
1404  *  Timer for SQ3 antenna diversity
1405  *
1406  * Parameters:
1407  *  In:
1408  *      pvSysSpec1
1409  *      hDeviceContext - Pointer to the adapter
1410  *      pvSysSpec2
1411  *      pvSysSpec3
1412  *  Out:
1413  *      none
1414  *
1415  * Return Value: none
1416  *
1417 -*/
1418
1419 void TimerSQ3Tmax3CallBack(struct vnt_private *pDevice)
1420 {
1421
1422     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"TimerSQ3Tmax3CallBack...");
1423     spin_lock_irq(&pDevice->lock);
1424
1425     pDevice->ulRatio_State0 = s_ulGetRatio(pDevice);
1426     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State0 = [%08x]\n",(int)pDevice->ulRatio_State0);
1427
1428     s_vClearSQ3Value(pDevice);
1429     if ( pDevice->byTMax == 0 ) {
1430         pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
1431         add_timer(&pDevice->TimerSQ3Tmax3);
1432         spin_unlock_irq(&pDevice->lock);
1433         return;
1434     }
1435
1436     bScheduleCommand((void *) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL);
1437     pDevice->byAntennaState = 1;
1438     del_timer(&pDevice->TimerSQ3Tmax3);
1439     del_timer(&pDevice->TimerSQ3Tmax2);
1440     pDevice->TimerSQ3Tmax1.expires =  RUN_AT(pDevice->byTMax * HZ);
1441     add_timer(&pDevice->TimerSQ3Tmax1);
1442
1443     spin_unlock_irq(&pDevice->lock);
1444 }
1445
1446 void BBvUpdatePreEDThreshold(struct vnt_private *pDevice, int bScanning)
1447 {
1448
1449     switch(pDevice->byRFType)
1450     {
1451         case RF_AL2230:
1452         case RF_AL2230S:
1453         case RF_AIROHA7230:
1454             //RobertYu:20060627, update new table
1455
1456             if( bScanning )
1457             {   // need Max sensitivity //RSSI -69, -70,....
1458                 if(pDevice->byBBPreEDIndex == 0) break;
1459                 pDevice->byBBPreEDIndex = 0;
1460                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1461                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1462                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -69, -70, -71,...\n");
1463                 break;
1464             }
1465
1466             if(pDevice->byBBPreEDRSSI <= 45) { // RSSI 0, -1,-2,....-45
1467                 if(pDevice->byBBPreEDIndex == 20) break;
1468                 pDevice->byBBPreEDIndex = 20;
1469                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1470                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1471                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI 0, -1,-2,..-45\n");
1472             } else if(pDevice->byBBPreEDRSSI <= 46)  { //RSSI -46
1473                 if(pDevice->byBBPreEDIndex == 19) break;
1474                 pDevice->byBBPreEDIndex = 19;
1475                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x1A); //CR201(0xC9)
1476                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1477                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -46\n");
1478             } else if(pDevice->byBBPreEDRSSI <= 47)  { //RSSI -47
1479                 if(pDevice->byBBPreEDIndex == 18) break;
1480                 pDevice->byBBPreEDIndex = 18;
1481                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x15); //CR201(0xC9)
1482                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1483                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -47\n");
1484             } else if(pDevice->byBBPreEDRSSI <= 49)  { //RSSI -48, -49
1485                 if(pDevice->byBBPreEDIndex == 17) break;
1486                 pDevice->byBBPreEDIndex = 17;
1487                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0E); //CR201(0xC9)
1488                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1489                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -48,-49\n");
1490             } else if(pDevice->byBBPreEDRSSI <= 51)  { //RSSI -50, -51
1491                 if(pDevice->byBBPreEDIndex == 16) break;
1492                 pDevice->byBBPreEDIndex = 16;
1493                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x09); //CR201(0xC9)
1494                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1495                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -50,-51\n");
1496             } else if(pDevice->byBBPreEDRSSI <= 53)  { //RSSI -52, -53
1497                 if(pDevice->byBBPreEDIndex == 15) break;
1498                 pDevice->byBBPreEDIndex = 15;
1499                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x06); //CR201(0xC9)
1500                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1501                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -52,-53\n");
1502             } else if(pDevice->byBBPreEDRSSI <= 55)  { //RSSI -54, -55
1503                 if(pDevice->byBBPreEDIndex == 14) break;
1504                 pDevice->byBBPreEDIndex = 14;
1505                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x03); //CR201(0xC9)
1506                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1507                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -54,-55\n");
1508             } else if(pDevice->byBBPreEDRSSI <= 56)  { //RSSI -56
1509                 if(pDevice->byBBPreEDIndex == 13) break;
1510                 pDevice->byBBPreEDIndex = 13;
1511                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1512                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xA0); //CR206(0xCE)
1513                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -56\n");
1514             } else if(pDevice->byBBPreEDRSSI <= 57)  { //RSSI -57
1515                 if(pDevice->byBBPreEDIndex == 12) break;
1516                 pDevice->byBBPreEDIndex = 12;
1517                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1518                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x20); //CR206(0xCE)
1519                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -57\n");
1520             } else if(pDevice->byBBPreEDRSSI <= 58)  { //RSSI -58
1521                 if(pDevice->byBBPreEDIndex == 11) break;
1522                 pDevice->byBBPreEDIndex = 11;
1523                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1524                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xA0); //CR206(0xCE)
1525                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -58\n");
1526             } else if(pDevice->byBBPreEDRSSI <= 59)  { //RSSI -59
1527                 if(pDevice->byBBPreEDIndex == 10) break;
1528                 pDevice->byBBPreEDIndex = 10;
1529                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1530                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x54); //CR206(0xCE)
1531                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -59\n");
1532             } else if(pDevice->byBBPreEDRSSI <= 60)  { //RSSI -60
1533                 if(pDevice->byBBPreEDIndex == 9) break;
1534                 pDevice->byBBPreEDIndex = 9;
1535                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1536                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x18); //CR206(0xCE)
1537                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -60\n");
1538             } else if(pDevice->byBBPreEDRSSI <= 61)  { //RSSI -61
1539                 if(pDevice->byBBPreEDIndex == 8) break;
1540                 pDevice->byBBPreEDIndex = 8;
1541                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1542                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xE3); //CR206(0xCE)
1543                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -61\n");
1544             } else if(pDevice->byBBPreEDRSSI <= 62)  { //RSSI -62
1545                 if(pDevice->byBBPreEDIndex == 7) break;
1546                 pDevice->byBBPreEDIndex = 7;
1547                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1548                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xB9); //CR206(0xCE)
1549                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -62\n");
1550             } else if(pDevice->byBBPreEDRSSI <= 63)  { //RSSI -63
1551                 if(pDevice->byBBPreEDIndex == 6) break;
1552                 pDevice->byBBPreEDIndex = 6;
1553                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1554                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x93); //CR206(0xCE)
1555                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -63\n");
1556             } else if(pDevice->byBBPreEDRSSI <= 64)  { //RSSI -64
1557                 if(pDevice->byBBPreEDIndex == 5) break;
1558                 pDevice->byBBPreEDIndex = 5;
1559                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1560                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x79); //CR206(0xCE)
1561                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -64\n");
1562             } else if(pDevice->byBBPreEDRSSI <= 65)  { //RSSI -65
1563                 if(pDevice->byBBPreEDIndex == 4) break;
1564                 pDevice->byBBPreEDIndex = 4;
1565                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1566                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x62); //CR206(0xCE)
1567                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -65\n");
1568             } else if(pDevice->byBBPreEDRSSI <= 66)  { //RSSI -66
1569                 if(pDevice->byBBPreEDIndex == 3) break;
1570                 pDevice->byBBPreEDIndex = 3;
1571                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1572                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x51); //CR206(0xCE)
1573                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -66\n");
1574             } else if(pDevice->byBBPreEDRSSI <= 67)  { //RSSI -67
1575                 if(pDevice->byBBPreEDIndex == 2) break;
1576                 pDevice->byBBPreEDIndex = 2;
1577                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1578                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x43); //CR206(0xCE)
1579                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -67\n");
1580             } else if(pDevice->byBBPreEDRSSI <= 68)  { //RSSI -68
1581                 if(pDevice->byBBPreEDIndex == 1) break;
1582                 pDevice->byBBPreEDIndex = 1;
1583                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1584                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x36); //CR206(0xCE)
1585                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -68\n");
1586             } else { //RSSI -69, -70,....
1587                 if(pDevice->byBBPreEDIndex == 0) break;
1588                 pDevice->byBBPreEDIndex = 0;
1589                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1590                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1591                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -69, -70,...\n");
1592             }
1593             break;
1594
1595         case RF_VT3226:
1596         case RF_VT3226D0:
1597             //RobertYu:20060627, update new table
1598
1599             if( bScanning )
1600             {   // need Max sensitivity  //RSSI -69, -70, ...
1601                 if(pDevice->byBBPreEDIndex == 0) break;
1602                 pDevice->byBBPreEDIndex = 0;
1603                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1604                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x24); //CR206(0xCE)
1605                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -69, -70,..\n");
1606                 break;
1607             }
1608
1609             if(pDevice->byBBPreEDRSSI <= 41) { // RSSI 0, -1,-2,....-41
1610                 if(pDevice->byBBPreEDIndex == 22) break;
1611                 pDevice->byBBPreEDIndex = 22;
1612                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1613                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1614                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI 0, -1,-2,..-41\n");
1615             } else if(pDevice->byBBPreEDRSSI <= 42)  { //RSSI -42
1616                 if(pDevice->byBBPreEDIndex == 21) break;
1617                 pDevice->byBBPreEDIndex = 21;
1618                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x36); //CR201(0xC9)
1619                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1620                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -42\n");
1621             } else if(pDevice->byBBPreEDRSSI <= 43)  { //RSSI -43
1622                 if(pDevice->byBBPreEDIndex == 20) break;
1623                 pDevice->byBBPreEDIndex = 20;
1624                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x26); //CR201(0xC9)
1625                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1626                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -43\n");
1627             } else if(pDevice->byBBPreEDRSSI <= 45)  { //RSSI -44, -45
1628                 if(pDevice->byBBPreEDIndex == 19) break;
1629                 pDevice->byBBPreEDIndex = 19;
1630                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x18); //CR201(0xC9)
1631                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1632                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -44,-45\n");
1633             } else if(pDevice->byBBPreEDRSSI <= 47)  { //RSSI -46, -47
1634                 if(pDevice->byBBPreEDIndex == 18) break;
1635                 pDevice->byBBPreEDIndex = 18;
1636                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x11); //CR201(0xC9)
1637                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1638                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -46,-47\n");
1639             } else if(pDevice->byBBPreEDRSSI <= 49)  { //RSSI -48, -49
1640                 if(pDevice->byBBPreEDIndex == 17) break;
1641                 pDevice->byBBPreEDIndex = 17;
1642                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0a); //CR201(0xC9)
1643                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1644                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -48,-49\n");
1645             } else if(pDevice->byBBPreEDRSSI <= 51)  { //RSSI -50, -51
1646                 if(pDevice->byBBPreEDIndex == 16) break;
1647                 pDevice->byBBPreEDIndex = 16;
1648                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x07); //CR201(0xC9)
1649                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1650                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -50,-51\n");
1651             } else if(pDevice->byBBPreEDRSSI <= 53)  { //RSSI -52, -53
1652                 if(pDevice->byBBPreEDIndex == 15) break;
1653                 pDevice->byBBPreEDIndex = 15;
1654                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x04); //CR201(0xC9)
1655                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1656                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -52,-53\n");
1657             } else if(pDevice->byBBPreEDRSSI <= 55)  { //RSSI -54, -55
1658                 if(pDevice->byBBPreEDIndex == 14) break;
1659                 pDevice->byBBPreEDIndex = 14;
1660                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1661                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1662                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -54,-55\n");
1663             } else if(pDevice->byBBPreEDRSSI <= 56)  { //RSSI -56
1664                 if(pDevice->byBBPreEDIndex == 13) break;
1665                 pDevice->byBBPreEDIndex = 13;
1666                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1667                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1668                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -56\n");
1669             } else if(pDevice->byBBPreEDRSSI <= 57)  { //RSSI -57
1670                 if(pDevice->byBBPreEDIndex == 12) break;
1671                 pDevice->byBBPreEDIndex = 12;
1672                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1673                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xB0); //CR206(0xCE)
1674                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -57\n");
1675             } else if(pDevice->byBBPreEDRSSI <= 58)  { //RSSI -58
1676                 if(pDevice->byBBPreEDIndex == 11) break;
1677                 pDevice->byBBPreEDIndex = 11;
1678                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1679                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x70); //CR206(0xCE)
1680                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -58\n");
1681             } else if(pDevice->byBBPreEDRSSI <= 59)  { //RSSI -59
1682                 if(pDevice->byBBPreEDIndex == 10) break;
1683                 pDevice->byBBPreEDIndex = 10;
1684                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1685                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1686                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -59\n");
1687             } else if(pDevice->byBBPreEDRSSI <= 60)  { //RSSI -60
1688                 if(pDevice->byBBPreEDIndex == 9) break;
1689                 pDevice->byBBPreEDIndex = 9;
1690                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1691                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xEA); //CR206(0xCE)
1692                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -60\n");
1693             } else if(pDevice->byBBPreEDRSSI <= 61)  { //RSSI -61
1694                 if(pDevice->byBBPreEDIndex == 8) break;
1695                 pDevice->byBBPreEDIndex = 8;
1696                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1697                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1698                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -61\n");
1699             } else if(pDevice->byBBPreEDRSSI <= 62)  { //RSSI -62
1700                 if(pDevice->byBBPreEDIndex == 7) break;
1701                 pDevice->byBBPreEDIndex = 7;
1702                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1703                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x9C); //CR206(0xCE)
1704                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -62\n");
1705             } else if(pDevice->byBBPreEDRSSI <= 63)  { //RSSI -63
1706                 if(pDevice->byBBPreEDIndex == 6) break;
1707                 pDevice->byBBPreEDIndex = 6;
1708                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1709                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x80); //CR206(0xCE)
1710                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -63\n");
1711             } else if(pDevice->byBBPreEDRSSI <= 64)  { //RSSI -64
1712                 if(pDevice->byBBPreEDIndex == 5) break;
1713                 pDevice->byBBPreEDIndex = 5;
1714                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1715                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x68); //CR206(0xCE)
1716                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -64\n");
1717             } else if(pDevice->byBBPreEDRSSI <= 65)  { //RSSI -65
1718                 if(pDevice->byBBPreEDIndex == 4) break;
1719                 pDevice->byBBPreEDIndex = 4;
1720                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1721                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x52); //CR206(0xCE)
1722                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -65\n");
1723             } else if(pDevice->byBBPreEDRSSI <= 66)  { //RSSI -66
1724                 if(pDevice->byBBPreEDIndex == 3) break;
1725                 pDevice->byBBPreEDIndex = 3;
1726                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1727                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x43); //CR206(0xCE)
1728                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -66\n");
1729             } else if(pDevice->byBBPreEDRSSI <= 67)  { //RSSI -67
1730                 if(pDevice->byBBPreEDIndex == 2) break;
1731                 pDevice->byBBPreEDIndex = 2;
1732                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1733                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x36); //CR206(0xCE)
1734                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -67\n");
1735             } else if(pDevice->byBBPreEDRSSI <= 68)  { //RSSI -68
1736                 if(pDevice->byBBPreEDIndex == 1) break;
1737                 pDevice->byBBPreEDIndex = 1;
1738                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1739                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x2D); //CR206(0xCE)
1740                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -68\n");
1741             } else { //RSSI -69, -70, ...
1742                 if(pDevice->byBBPreEDIndex == 0) break;
1743                 pDevice->byBBPreEDIndex = 0;
1744                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1745                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x24); //CR206(0xCE)
1746                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -69, -70,..\n");
1747             }
1748             break;
1749
1750         case RF_VT3342A0: //RobertYu:20060627, testing table
1751             if( bScanning )
1752             {   // need Max sensitivity  //RSSI -67, -68, ...
1753                 if(pDevice->byBBPreEDIndex == 0) break;
1754                 pDevice->byBBPreEDIndex = 0;
1755                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1756                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x38); //CR206(0xCE)
1757                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -67, -68,..\n");
1758                 break;
1759             }
1760
1761             if(pDevice->byBBPreEDRSSI <= 41) { // RSSI 0, -1,-2,....-41
1762                 if(pDevice->byBBPreEDIndex == 20) break;
1763                 pDevice->byBBPreEDIndex = 20;
1764                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1765                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1766                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI 0, -1,-2,..-41\n");
1767             } else if(pDevice->byBBPreEDRSSI <= 42)  { //RSSI -42
1768                 if(pDevice->byBBPreEDIndex == 19) break;
1769                 pDevice->byBBPreEDIndex = 19;
1770                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x36); //CR201(0xC9)
1771                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1772                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -42\n");
1773             } else if(pDevice->byBBPreEDRSSI <= 43)  { //RSSI -43
1774                 if(pDevice->byBBPreEDIndex == 18) break;
1775                 pDevice->byBBPreEDIndex = 18;
1776                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x26); //CR201(0xC9)
1777                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1778                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -43\n");
1779             } else if(pDevice->byBBPreEDRSSI <= 45)  { //RSSI -44, -45
1780                 if(pDevice->byBBPreEDIndex == 17) break;
1781                 pDevice->byBBPreEDIndex = 17;
1782                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x18); //CR201(0xC9)
1783                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1784                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -44,-45\n");
1785             } else if(pDevice->byBBPreEDRSSI <= 47)  { //RSSI -46, -47
1786                 if(pDevice->byBBPreEDIndex == 16) break;
1787                 pDevice->byBBPreEDIndex = 16;
1788                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x11); //CR201(0xC9)
1789                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1790                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -46,-47\n");
1791             } else if(pDevice->byBBPreEDRSSI <= 49)  { //RSSI -48, -49
1792                 if(pDevice->byBBPreEDIndex == 15) break;
1793                 pDevice->byBBPreEDIndex = 15;
1794                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0a); //CR201(0xC9)
1795                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1796                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -48,-49\n");
1797             } else if(pDevice->byBBPreEDRSSI <= 51)  { //RSSI -50, -51
1798                 if(pDevice->byBBPreEDIndex == 14) break;
1799                 pDevice->byBBPreEDIndex = 14;
1800                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x07); //CR201(0xC9)
1801                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1802                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -50,-51\n");
1803             } else if(pDevice->byBBPreEDRSSI <= 53)  { //RSSI -52, -53
1804                 if(pDevice->byBBPreEDIndex == 13) break;
1805                 pDevice->byBBPreEDIndex = 13;
1806                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x04); //CR201(0xC9)
1807                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1808                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -52,-53\n");
1809             } else if(pDevice->byBBPreEDRSSI <= 55)  { //RSSI -54, -55
1810                 if(pDevice->byBBPreEDIndex == 12) break;
1811                 pDevice->byBBPreEDIndex = 12;
1812                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1813                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1814                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -54,-55\n");
1815             } else if(pDevice->byBBPreEDRSSI <= 56)  { //RSSI -56
1816                 if(pDevice->byBBPreEDIndex == 11) break;
1817                 pDevice->byBBPreEDIndex = 11;
1818                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1819                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1820                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -56\n");
1821             } else if(pDevice->byBBPreEDRSSI <= 57)  { //RSSI -57
1822                 if(pDevice->byBBPreEDIndex == 10) break;
1823                 pDevice->byBBPreEDIndex = 10;
1824                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1825                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xB0); //CR206(0xCE)
1826                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -57\n");
1827             } else if(pDevice->byBBPreEDRSSI <= 58)  { //RSSI -58
1828                 if(pDevice->byBBPreEDIndex == 9) break;
1829                 pDevice->byBBPreEDIndex = 9;
1830                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1831                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x70); //CR206(0xCE)
1832                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -58\n");
1833             } else if(pDevice->byBBPreEDRSSI <= 59)  { //RSSI -59
1834                 if(pDevice->byBBPreEDIndex == 8) break;
1835                 pDevice->byBBPreEDIndex = 8;
1836                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1837                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1838                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -59\n");
1839             } else if(pDevice->byBBPreEDRSSI <= 60)  { //RSSI -60
1840                 if(pDevice->byBBPreEDIndex == 7) break;
1841                 pDevice->byBBPreEDIndex = 7;
1842                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1843                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xEA); //CR206(0xCE)
1844                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -60\n");
1845             } else if(pDevice->byBBPreEDRSSI <= 61)  { //RSSI -61
1846                 if(pDevice->byBBPreEDIndex == 6) break;
1847                 pDevice->byBBPreEDIndex = 6;
1848                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1849                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1850                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -61\n");
1851             } else if(pDevice->byBBPreEDRSSI <= 62)  { //RSSI -62
1852                 if(pDevice->byBBPreEDIndex == 5) break;
1853                 pDevice->byBBPreEDIndex = 5;
1854                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1855                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x9C); //CR206(0xCE)
1856                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -62\n");
1857             } else if(pDevice->byBBPreEDRSSI <= 63)  { //RSSI -63
1858                 if(pDevice->byBBPreEDIndex == 4) break;
1859                 pDevice->byBBPreEDIndex = 4;
1860                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1861                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x80); //CR206(0xCE)
1862                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -63\n");
1863             } else if(pDevice->byBBPreEDRSSI <= 64)  { //RSSI -64
1864                 if(pDevice->byBBPreEDIndex == 3) break;
1865                 pDevice->byBBPreEDIndex = 3;
1866                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1867                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x68); //CR206(0xCE)
1868                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -64\n");
1869             } else if(pDevice->byBBPreEDRSSI <= 65)  { //RSSI -65
1870                 if(pDevice->byBBPreEDIndex == 2) break;
1871                 pDevice->byBBPreEDIndex = 2;
1872                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1873                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x52); //CR206(0xCE)
1874                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -65\n");
1875             } else if(pDevice->byBBPreEDRSSI <= 66)  { //RSSI -66
1876                 if(pDevice->byBBPreEDIndex == 1) break;
1877                 pDevice->byBBPreEDIndex = 1;
1878                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1879                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x43); //CR206(0xCE)
1880                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -66\n");
1881             } else { //RSSI -67, -68, ...
1882                 if(pDevice->byBBPreEDIndex == 0) break;
1883                 pDevice->byBBPreEDIndex = 0;
1884                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1885                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x38); //CR206(0xCE)
1886                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -67, -68,..\n");
1887             }
1888             break;
1889
1890     }
1891
1892 }
1893