tizen 2.4 release
[profile/mobile/platform/kernel/linux-3.10-sc7730.git] / 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         u8 data;
945
946     ntStatus = CONTROLnsRequestIn(pDevice,
947                                   MESSAGE_TYPE_READ,
948                                   0,
949                                   MESSAGE_REQUEST_EEPROM,
950                                   EEP_MAX_CONTEXT_SIZE,
951                                   pDevice->abyEEPROM);
952     if (ntStatus != STATUS_SUCCESS) {
953         return false;
954     }
955
956 //    if ((pDevice->abyEEPROM[EEP_OFS_RADIOCTL]&0x06)==0x04)
957 //        return false;
958
959 //zonetype initial
960  pDevice->byOriginalZonetype = pDevice->abyEEPROM[EEP_OFS_ZONETYPE];
961  if(pDevice->config_file.ZoneType >= 0) {         //read zonetype file ok!
962   if ((pDevice->config_file.ZoneType == 0)&&
963         (pDevice->abyEEPROM[EEP_OFS_ZONETYPE] !=0x00)){          //for USA
964     pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0;
965     pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0B;
966     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Init Zone Type :USA\n");
967   }
968  else if((pDevice->config_file.ZoneType == 1)&&
969              (pDevice->abyEEPROM[EEP_OFS_ZONETYPE]!=0x01)){   //for Japan
970     pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0x01;
971     pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0D;
972     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Init Zone Type :Japan\n");
973   }
974  else if((pDevice->config_file.ZoneType == 2)&&
975              (pDevice->abyEEPROM[EEP_OFS_ZONETYPE]!=0x02)){   //for Europe
976     pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0x02;
977     pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0D;
978     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Init Zone Type :Europe\n");
979   }
980 else {
981    if(pDevice->config_file.ZoneType !=pDevice->abyEEPROM[EEP_OFS_ZONETYPE])
982       printk("zonetype in file[%02x] mismatch with in EEPROM[%02x]\n",pDevice->config_file.ZoneType,pDevice->abyEEPROM[EEP_OFS_ZONETYPE]);
983    else
984       printk("Read Zonetype file success,use default zonetype setting[%02x]\n",pDevice->config_file.ZoneType);
985  }
986 }
987
988     if ( !pDevice->bZoneRegExist ) {
989         pDevice->byZoneType = pDevice->abyEEPROM[EEP_OFS_ZONETYPE];
990     }
991     pDevice->byRFType = pDevice->abyEEPROM[EEP_OFS_RFTYPE];
992
993     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Zone Type %x\n", pDevice->byZoneType);
994     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"RF Type %d\n", pDevice->byRFType);
995
996     if ((pDevice->byRFType == RF_AL2230) || (pDevice->byRFType == RF_AL2230S)) {
997         pDevice->byBBRxConf = abyVT3184_AL2230[10];
998         wLength = sizeof(abyVT3184_AL2230);
999         pbyAddr = abyVT3184_AL2230;
1000         pbyAgc = abyVT3184_AGC;
1001         wLengthAgc = sizeof(abyVT3184_AGC);
1002
1003         pDevice->abyBBVGA[0] = 0x1C;
1004         pDevice->abyBBVGA[1] = 0x10;
1005         pDevice->abyBBVGA[2] = 0x0;
1006         pDevice->abyBBVGA[3] = 0x0;
1007         pDevice->ldBmThreshold[0] = -70;
1008         pDevice->ldBmThreshold[1] = -48;
1009         pDevice->ldBmThreshold[2] = 0;
1010         pDevice->ldBmThreshold[3] = 0;
1011     }
1012     else if (pDevice->byRFType == RF_AIROHA7230) {
1013         pDevice->byBBRxConf = abyVT3184_AL2230[10];
1014         wLength = sizeof(abyVT3184_AL2230);
1015         pbyAddr = abyVT3184_AL2230;
1016         pbyAgc = abyVT3184_AGC;
1017         wLengthAgc = sizeof(abyVT3184_AGC);
1018
1019         // Init ANT B select,TX Config CR09 = 0x61->0x45, 0x45->0x41(VC1/VC2 define, make the ANT_A, ANT_B inverted)
1020         //pbyAddr[0x09] = 0x41;
1021         // Init ANT B select,RX Config CR10 = 0x28->0x2A, 0x2A->0x28(VC1/VC2 define, make the ANT_A, ANT_B inverted)
1022         //pbyAddr[0x0a] = 0x28;
1023         // Select VC1/VC2, CR215 = 0x02->0x06
1024         pbyAddr[0xd7] = 0x06;
1025
1026         pDevice->abyBBVGA[0] = 0x1C;
1027         pDevice->abyBBVGA[1] = 0x10;
1028         pDevice->abyBBVGA[2] = 0x0;
1029         pDevice->abyBBVGA[3] = 0x0;
1030         pDevice->ldBmThreshold[0] = -70;
1031         pDevice->ldBmThreshold[1] = -48;
1032         pDevice->ldBmThreshold[2] = 0;
1033         pDevice->ldBmThreshold[3] = 0;
1034     }
1035     else if ( (pDevice->byRFType == RF_VT3226) || (pDevice->byRFType == RF_VT3226D0) ) {
1036         pDevice->byBBRxConf = abyVT3184_VT3226D0[10];   //RobertYu:20060515
1037         wLength = sizeof(abyVT3184_VT3226D0);           //RobertYu:20060515
1038         pbyAddr = abyVT3184_VT3226D0;                   //RobertYu:20060515
1039         pbyAgc = abyVT3184_AGC;
1040         wLengthAgc = sizeof(abyVT3184_AGC);
1041
1042         pDevice->abyBBVGA[0] = 0x20; //RobertYu:20060104, reguest by Jack
1043         pDevice->abyBBVGA[1] = 0x10;
1044         pDevice->abyBBVGA[2] = 0x0;
1045         pDevice->abyBBVGA[3] = 0x0;
1046         pDevice->ldBmThreshold[0] = -70;
1047         pDevice->ldBmThreshold[1] = -48;
1048         pDevice->ldBmThreshold[2] = 0;
1049         pDevice->ldBmThreshold[3] = 0;
1050         // Fix VT3226 DFC system timing issue
1051         MACvRegBitsOn(pDevice, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT);
1052     //}}
1053     //{{RobertYu:20060609
1054     } else if ( (pDevice->byRFType == RF_VT3342A0) ) {
1055         pDevice->byBBRxConf = abyVT3184_VT3226D0[10];
1056         wLength = sizeof(abyVT3184_VT3226D0);
1057         pbyAddr = abyVT3184_VT3226D0;
1058         pbyAgc = abyVT3184_AGC;
1059         wLengthAgc = sizeof(abyVT3184_AGC);
1060
1061         pDevice->abyBBVGA[0] = 0x20;
1062         pDevice->abyBBVGA[1] = 0x10;
1063         pDevice->abyBBVGA[2] = 0x0;
1064         pDevice->abyBBVGA[3] = 0x0;
1065         pDevice->ldBmThreshold[0] = -70;
1066         pDevice->ldBmThreshold[1] = -48;
1067         pDevice->ldBmThreshold[2] = 0;
1068         pDevice->ldBmThreshold[3] = 0;
1069         // Fix VT3226 DFC system timing issue
1070         MACvRegBitsOn(pDevice, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT);
1071     //}}
1072     } else {
1073         return true;
1074     }
1075
1076    memcpy(abyArray, pbyAddr, wLength);
1077    CONTROLnsRequestOut(pDevice,
1078                     MESSAGE_TYPE_WRITE,
1079                     0,
1080                     MESSAGE_REQUEST_BBREG,
1081                     wLength,
1082                     abyArray
1083                     );
1084
1085    memcpy(abyArray, pbyAgc, wLengthAgc);
1086    CONTROLnsRequestOut(pDevice,
1087                     MESSAGE_TYPE_WRITE,
1088                     0,
1089                     MESSAGE_REQUEST_BBAGC,
1090                     wLengthAgc,
1091                     abyArray
1092                     );
1093
1094     if ((pDevice->byRFType == RF_VT3226) || //RobertYu:20051116, 20060111 remove VT3226D0
1095          (pDevice->byRFType == RF_VT3342A0)  //RobertYu:20060609
1096          ) {
1097         ControlvWriteByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_ITRTMSET,0x23);
1098         MACvRegBitsOn(pDevice,MAC_REG_PAPEDELAY,0x01);
1099     }
1100     else if (pDevice->byRFType == RF_VT3226D0)
1101     {
1102         ControlvWriteByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_ITRTMSET,0x11);
1103         MACvRegBitsOn(pDevice,MAC_REG_PAPEDELAY,0x01);
1104     }
1105
1106     ControlvWriteByte(pDevice,MESSAGE_REQUEST_BBREG,0x04,0x7F);
1107     ControlvWriteByte(pDevice,MESSAGE_REQUEST_BBREG,0x0D,0x01);
1108
1109     RFbRFTableDownload(pDevice);
1110
1111         /* Fix for TX USB resets from vendors driver */
1112         CONTROLnsRequestIn(pDevice, MESSAGE_TYPE_READ, USB_REG4,
1113                 MESSAGE_REQUEST_MEM, sizeof(data), &data);
1114
1115         data |= 0x2;
1116
1117         CONTROLnsRequestOut(pDevice, MESSAGE_TYPE_WRITE, USB_REG4,
1118                 MESSAGE_REQUEST_MEM, sizeof(data), &data);
1119
1120     return true;//ntStatus;
1121 }
1122
1123 /*
1124  * Description: Set ShortSlotTime mode
1125  *
1126  * Parameters:
1127  *  In:
1128  *      pDevice     - Device Structure
1129  *  Out:
1130  *      none
1131  *
1132  * Return Value: none
1133  *
1134  */
1135 void BBvSetShortSlotTime(struct vnt_private *pDevice)
1136 {
1137     u8 byBBVGA=0;
1138
1139         if (pDevice->bShortSlotTime)
1140         pDevice->byBBRxConf &= 0xDF;//1101 1111
1141         else
1142         pDevice->byBBRxConf |= 0x20;//0010 0000
1143
1144     ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0xE7, &byBBVGA);
1145         if (byBBVGA == pDevice->abyBBVGA[0])
1146         pDevice->byBBRxConf |= 0x20;//0010 0000
1147
1148     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0A, pDevice->byBBRxConf);
1149 }
1150
1151 void BBvSetVGAGainOffset(struct vnt_private *pDevice, u8 byData)
1152 {
1153
1154     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xE7, byData);
1155
1156     // patch for 3253B0 Baseband with Cardbus module
1157         if (pDevice->bShortSlotTime)
1158                 pDevice->byBBRxConf &= 0xDF; /* 1101 1111 */
1159         else
1160                 pDevice->byBBRxConf |= 0x20; /* 0010 0000 */
1161
1162     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0A, pDevice->byBBRxConf);//CR10
1163 }
1164
1165 /*
1166  * Description: BBvSetDeepSleep
1167  *
1168  * Parameters:
1169  *  In:
1170  *      pDevice          - Device Structure
1171  *  Out:
1172  *      none
1173  *
1174  * Return Value: none
1175  *
1176  */
1177 void BBvSetDeepSleep(struct vnt_private *pDevice)
1178 {
1179     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0c, 0x17);//CR12
1180     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0D, 0xB9);//CR13
1181 }
1182
1183 void BBvExitDeepSleep(struct vnt_private *pDevice)
1184 {
1185     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0C, 0x00);//CR12
1186     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0D, 0x01);//CR13
1187 }
1188
1189 static unsigned long s_ulGetLowSQ3(struct vnt_private *pDevice)
1190 {
1191         int ii;
1192         unsigned long ulSQ3 = 0;
1193         unsigned long ulMaxPacket;
1194
1195     ulMaxPacket = pDevice->aulPktNum[RATE_54M];
1196         if (pDevice->aulPktNum[RATE_54M] != 0)
1197         ulSQ3 = pDevice->aulSQ3Val[RATE_54M] / pDevice->aulPktNum[RATE_54M];
1198
1199         for (ii = RATE_48M; ii >= RATE_6M; ii--)
1200                 if (pDevice->aulPktNum[ii] > ulMaxPacket) {
1201             ulMaxPacket = pDevice->aulPktNum[ii];
1202             ulSQ3 = pDevice->aulSQ3Val[ii] / pDevice->aulPktNum[ii];
1203         }
1204
1205     return ulSQ3;
1206 }
1207
1208 static unsigned long s_ulGetRatio(struct vnt_private *pDevice)
1209 {
1210         int ii, jj;
1211         unsigned long ulRatio = 0;
1212         unsigned long ulMaxPacket;
1213         unsigned long ulPacketNum;
1214
1215     //This is a thousand-ratio
1216     ulMaxPacket = pDevice->aulPktNum[RATE_54M];
1217     if ( pDevice->aulPktNum[RATE_54M] != 0 ) {
1218         ulPacketNum = pDevice->aulPktNum[RATE_54M];
1219         ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
1220         ulRatio += TOP_RATE_54M;
1221     }
1222         for (ii = RATE_48M; ii >= RATE_1M; ii--)
1223         if ( pDevice->aulPktNum[ii] > ulMaxPacket ) {
1224             ulPacketNum = 0;
1225             for ( jj=RATE_54M;jj>=ii;jj--)
1226                 ulPacketNum += pDevice->aulPktNum[jj];
1227             ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
1228             ulRatio += TOP_RATE_48M;
1229             ulMaxPacket = pDevice->aulPktNum[ii];
1230         }
1231
1232     return ulRatio;
1233 }
1234
1235 static void s_vClearSQ3Value(struct vnt_private *pDevice)
1236 {
1237     int ii;
1238     pDevice->uDiversityCnt = 0;
1239
1240     for ( ii=RATE_1M;ii<MAX_RATE;ii++) {
1241         pDevice->aulPktNum[ii] = 0;
1242         pDevice->aulSQ3Val[ii] = 0;
1243     }
1244 }
1245
1246 /*
1247  * Description: Antenna Diversity
1248  *
1249  * Parameters:
1250  *  In:
1251  *      pDevice          - Device Structure
1252  *      byRSR            - RSR from received packet
1253  *      bySQ3            - SQ3 value from received packet
1254  *  Out:
1255  *      none
1256  *
1257  * Return Value: none
1258  *
1259  */
1260
1261 void BBvAntennaDiversity(struct vnt_private *pDevice,
1262         u8 byRxRate, u8 bySQ3)
1263 {
1264
1265     pDevice->uDiversityCnt++;
1266     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pDevice->uDiversityCnt = %d\n", (int)pDevice->uDiversityCnt);
1267
1268     if (byRxRate == 2) {
1269         pDevice->aulPktNum[RATE_1M]++;
1270     }
1271     else if (byRxRate==4) {
1272         pDevice->aulPktNum[RATE_2M]++;
1273     }
1274     else if (byRxRate==11) {
1275         pDevice->aulPktNum[RATE_5M]++;
1276     }
1277     else if (byRxRate==22) {
1278         pDevice->aulPktNum[RATE_11M]++;
1279     }
1280     else if(byRxRate==12){
1281         pDevice->aulPktNum[RATE_6M]++;
1282         pDevice->aulSQ3Val[RATE_6M] += bySQ3;
1283     }
1284     else if(byRxRate==18){
1285         pDevice->aulPktNum[RATE_9M]++;
1286         pDevice->aulSQ3Val[RATE_9M] += bySQ3;
1287     }
1288     else if(byRxRate==24){
1289         pDevice->aulPktNum[RATE_12M]++;
1290         pDevice->aulSQ3Val[RATE_12M] += bySQ3;
1291     }
1292     else if(byRxRate==36){
1293         pDevice->aulPktNum[RATE_18M]++;
1294         pDevice->aulSQ3Val[RATE_18M] += bySQ3;
1295     }
1296     else if(byRxRate==48){
1297         pDevice->aulPktNum[RATE_24M]++;
1298         pDevice->aulSQ3Val[RATE_24M] += bySQ3;
1299     }
1300     else if(byRxRate==72){
1301         pDevice->aulPktNum[RATE_36M]++;
1302         pDevice->aulSQ3Val[RATE_36M] += bySQ3;
1303     }
1304     else if(byRxRate==96){
1305         pDevice->aulPktNum[RATE_48M]++;
1306         pDevice->aulSQ3Val[RATE_48M] += bySQ3;
1307     }
1308     else if(byRxRate==108){
1309         pDevice->aulPktNum[RATE_54M]++;
1310         pDevice->aulSQ3Val[RATE_54M] += bySQ3;
1311     }
1312
1313     if (pDevice->byAntennaState == 0) {
1314
1315         if (pDevice->uDiversityCnt > pDevice->ulDiversityNValue) {
1316             DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ulDiversityNValue=[%d],54M-[%d]\n",(int)pDevice->ulDiversityNValue, (int)pDevice->aulPktNum[RATE_54M]);
1317
1318             pDevice->ulSQ3_State0 = s_ulGetLowSQ3(pDevice);
1319             pDevice->ulRatio_State0 = s_ulGetRatio(pDevice);
1320             DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State0, SQ3= [%08x] rate = [%08x]\n",(int)pDevice->ulSQ3_State0,(int)pDevice->ulRatio_State0);
1321
1322             if ( ((pDevice->aulPktNum[RATE_54M] < pDevice->ulDiversityNValue/2) &&
1323                   (pDevice->ulSQ3_State0 > pDevice->ulSQ3TH) ) ||
1324                  (pDevice->ulSQ3_State0 == 0 ) )  {
1325
1326                 if ( pDevice->byTMax == 0 )
1327                     return;
1328
1329                 bScheduleCommand((void *) pDevice,
1330                                  WLAN_CMD_CHANGE_ANTENNA,
1331                                  NULL);
1332
1333                 pDevice->byAntennaState = 1;
1334
1335                 del_timer(&pDevice->TimerSQ3Tmax3);
1336                 del_timer(&pDevice->TimerSQ3Tmax2);
1337                 pDevice->TimerSQ3Tmax1.expires =  RUN_AT(pDevice->byTMax * HZ);
1338                 add_timer(&pDevice->TimerSQ3Tmax1);
1339
1340             } else {
1341                 pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
1342                 add_timer(&pDevice->TimerSQ3Tmax3);
1343             }
1344             s_vClearSQ3Value(pDevice);
1345
1346         }
1347     } else { //byAntennaState == 1
1348
1349         if (pDevice->uDiversityCnt > pDevice->ulDiversityMValue) {
1350
1351             del_timer(&pDevice->TimerSQ3Tmax1);
1352             pDevice->ulSQ3_State1 = s_ulGetLowSQ3(pDevice);
1353             pDevice->ulRatio_State1 = s_ulGetRatio(pDevice);
1354             DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State1, rate0 = %08x,rate1 = %08x\n",(int)pDevice->ulRatio_State0,(int)pDevice->ulRatio_State1);
1355
1356             if ( ((pDevice->ulSQ3_State1 == 0) && (pDevice->ulSQ3_State0 != 0)) ||
1357                  ((pDevice->ulSQ3_State1 == 0) && (pDevice->ulSQ3_State0 == 0) && (pDevice->ulRatio_State1 < pDevice->ulRatio_State0)) ||
1358                  ((pDevice->ulSQ3_State1 != 0) && (pDevice->ulSQ3_State0 != 0) && (pDevice->ulSQ3_State0 < pDevice->ulSQ3_State1))
1359                ) {
1360
1361                 bScheduleCommand((void *) pDevice,
1362                                  WLAN_CMD_CHANGE_ANTENNA,
1363                                  NULL);
1364
1365                 pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
1366                 pDevice->TimerSQ3Tmax2.expires =  RUN_AT(pDevice->byTMax2 * HZ);
1367                 add_timer(&pDevice->TimerSQ3Tmax3);
1368                 add_timer(&pDevice->TimerSQ3Tmax2);
1369
1370             }
1371             pDevice->byAntennaState = 0;
1372             s_vClearSQ3Value(pDevice);
1373         }
1374     } //byAntennaState
1375 }
1376
1377 /*+
1378  *
1379  * Description:
1380  *  Timer for SQ3 antenna diversity
1381  *
1382  * Parameters:
1383  *  In:
1384  *      pvSysSpec1
1385  *      hDeviceContext - Pointer to the adapter
1386  *      pvSysSpec2
1387  *      pvSysSpec3
1388  *  Out:
1389  *      none
1390  *
1391  * Return Value: none
1392  *
1393 -*/
1394
1395 void TimerSQ3CallBack(struct vnt_private *pDevice)
1396 {
1397
1398     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"TimerSQ3CallBack...");
1399     spin_lock_irq(&pDevice->lock);
1400
1401     bScheduleCommand((void *) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL);
1402     pDevice->byAntennaState = 0;
1403     s_vClearSQ3Value(pDevice);
1404     pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
1405     pDevice->TimerSQ3Tmax2.expires =  RUN_AT(pDevice->byTMax2 * HZ);
1406     add_timer(&pDevice->TimerSQ3Tmax3);
1407     add_timer(&pDevice->TimerSQ3Tmax2);
1408
1409     spin_unlock_irq(&pDevice->lock);
1410 }
1411
1412 /*+
1413  *
1414  * Description:
1415  *  Timer for SQ3 antenna diversity
1416  *
1417  * Parameters:
1418  *  In:
1419  *      pvSysSpec1
1420  *      hDeviceContext - Pointer to the adapter
1421  *      pvSysSpec2
1422  *      pvSysSpec3
1423  *  Out:
1424  *      none
1425  *
1426  * Return Value: none
1427  *
1428 -*/
1429
1430 void TimerSQ3Tmax3CallBack(struct vnt_private *pDevice)
1431 {
1432
1433     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"TimerSQ3Tmax3CallBack...");
1434     spin_lock_irq(&pDevice->lock);
1435
1436     pDevice->ulRatio_State0 = s_ulGetRatio(pDevice);
1437     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State0 = [%08x]\n",(int)pDevice->ulRatio_State0);
1438
1439     s_vClearSQ3Value(pDevice);
1440     if ( pDevice->byTMax == 0 ) {
1441         pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
1442         add_timer(&pDevice->TimerSQ3Tmax3);
1443         spin_unlock_irq(&pDevice->lock);
1444         return;
1445     }
1446
1447     bScheduleCommand((void *) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL);
1448     pDevice->byAntennaState = 1;
1449     del_timer(&pDevice->TimerSQ3Tmax3);
1450     del_timer(&pDevice->TimerSQ3Tmax2);
1451     pDevice->TimerSQ3Tmax1.expires =  RUN_AT(pDevice->byTMax * HZ);
1452     add_timer(&pDevice->TimerSQ3Tmax1);
1453
1454     spin_unlock_irq(&pDevice->lock);
1455 }
1456
1457 void BBvUpdatePreEDThreshold(struct vnt_private *pDevice, int bScanning)
1458 {
1459
1460     switch(pDevice->byRFType)
1461     {
1462         case RF_AL2230:
1463         case RF_AL2230S:
1464         case RF_AIROHA7230:
1465             //RobertYu:20060627, update new table
1466
1467             if( bScanning )
1468             {   // need Max sensitivity //RSSI -69, -70,....
1469                 pDevice->byBBPreEDIndex = 0;
1470                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1471                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1472                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -69, -70, -71,...\n");
1473                 break;
1474             }
1475
1476             if(pDevice->byBBPreEDRSSI <= 45) { // RSSI 0, -1,-2,....-45
1477                 if(pDevice->byBBPreEDIndex == 20) break;
1478                 pDevice->byBBPreEDIndex = 20;
1479                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1480                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1481                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI 0, -1,-2,..-45\n");
1482             } else if(pDevice->byBBPreEDRSSI <= 46)  { //RSSI -46
1483                 if(pDevice->byBBPreEDIndex == 19) break;
1484                 pDevice->byBBPreEDIndex = 19;
1485                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x1A); //CR201(0xC9)
1486                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1487                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -46\n");
1488             } else if(pDevice->byBBPreEDRSSI <= 47)  { //RSSI -47
1489                 if(pDevice->byBBPreEDIndex == 18) break;
1490                 pDevice->byBBPreEDIndex = 18;
1491                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x15); //CR201(0xC9)
1492                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1493                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -47\n");
1494             } else if(pDevice->byBBPreEDRSSI <= 49)  { //RSSI -48, -49
1495                 if(pDevice->byBBPreEDIndex == 17) break;
1496                 pDevice->byBBPreEDIndex = 17;
1497                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0E); //CR201(0xC9)
1498                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1499                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -48,-49\n");
1500             } else if(pDevice->byBBPreEDRSSI <= 51)  { //RSSI -50, -51
1501                 if(pDevice->byBBPreEDIndex == 16) break;
1502                 pDevice->byBBPreEDIndex = 16;
1503                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x09); //CR201(0xC9)
1504                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1505                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -50,-51\n");
1506             } else if(pDevice->byBBPreEDRSSI <= 53)  { //RSSI -52, -53
1507                 if(pDevice->byBBPreEDIndex == 15) break;
1508                 pDevice->byBBPreEDIndex = 15;
1509                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x06); //CR201(0xC9)
1510                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1511                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -52,-53\n");
1512             } else if(pDevice->byBBPreEDRSSI <= 55)  { //RSSI -54, -55
1513                 if(pDevice->byBBPreEDIndex == 14) break;
1514                 pDevice->byBBPreEDIndex = 14;
1515                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x03); //CR201(0xC9)
1516                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1517                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -54,-55\n");
1518             } else if(pDevice->byBBPreEDRSSI <= 56)  { //RSSI -56
1519                 if(pDevice->byBBPreEDIndex == 13) break;
1520                 pDevice->byBBPreEDIndex = 13;
1521                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1522                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xA0); //CR206(0xCE)
1523                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -56\n");
1524             } else if(pDevice->byBBPreEDRSSI <= 57)  { //RSSI -57
1525                 if(pDevice->byBBPreEDIndex == 12) break;
1526                 pDevice->byBBPreEDIndex = 12;
1527                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1528                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x20); //CR206(0xCE)
1529                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -57\n");
1530             } else if(pDevice->byBBPreEDRSSI <= 58)  { //RSSI -58
1531                 if(pDevice->byBBPreEDIndex == 11) break;
1532                 pDevice->byBBPreEDIndex = 11;
1533                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1534                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xA0); //CR206(0xCE)
1535                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -58\n");
1536             } else if(pDevice->byBBPreEDRSSI <= 59)  { //RSSI -59
1537                 if(pDevice->byBBPreEDIndex == 10) break;
1538                 pDevice->byBBPreEDIndex = 10;
1539                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1540                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x54); //CR206(0xCE)
1541                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -59\n");
1542             } else if(pDevice->byBBPreEDRSSI <= 60)  { //RSSI -60
1543                 if(pDevice->byBBPreEDIndex == 9) break;
1544                 pDevice->byBBPreEDIndex = 9;
1545                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1546                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x18); //CR206(0xCE)
1547                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -60\n");
1548             } else if(pDevice->byBBPreEDRSSI <= 61)  { //RSSI -61
1549                 if(pDevice->byBBPreEDIndex == 8) break;
1550                 pDevice->byBBPreEDIndex = 8;
1551                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1552                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xE3); //CR206(0xCE)
1553                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -61\n");
1554             } else if(pDevice->byBBPreEDRSSI <= 62)  { //RSSI -62
1555                 if(pDevice->byBBPreEDIndex == 7) break;
1556                 pDevice->byBBPreEDIndex = 7;
1557                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1558                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xB9); //CR206(0xCE)
1559                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -62\n");
1560             } else if(pDevice->byBBPreEDRSSI <= 63)  { //RSSI -63
1561                 if(pDevice->byBBPreEDIndex == 6) break;
1562                 pDevice->byBBPreEDIndex = 6;
1563                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1564                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x93); //CR206(0xCE)
1565                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -63\n");
1566             } else if(pDevice->byBBPreEDRSSI <= 64)  { //RSSI -64
1567                 if(pDevice->byBBPreEDIndex == 5) break;
1568                 pDevice->byBBPreEDIndex = 5;
1569                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1570                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x79); //CR206(0xCE)
1571                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -64\n");
1572             } else if(pDevice->byBBPreEDRSSI <= 65)  { //RSSI -65
1573                 if(pDevice->byBBPreEDIndex == 4) break;
1574                 pDevice->byBBPreEDIndex = 4;
1575                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1576                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x62); //CR206(0xCE)
1577                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -65\n");
1578             } else if(pDevice->byBBPreEDRSSI <= 66)  { //RSSI -66
1579                 if(pDevice->byBBPreEDIndex == 3) break;
1580                 pDevice->byBBPreEDIndex = 3;
1581                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1582                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x51); //CR206(0xCE)
1583                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -66\n");
1584             } else if(pDevice->byBBPreEDRSSI <= 67)  { //RSSI -67
1585                 if(pDevice->byBBPreEDIndex == 2) break;
1586                 pDevice->byBBPreEDIndex = 2;
1587                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1588                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x43); //CR206(0xCE)
1589                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -67\n");
1590             } else if(pDevice->byBBPreEDRSSI <= 68)  { //RSSI -68
1591                 if(pDevice->byBBPreEDIndex == 1) break;
1592                 pDevice->byBBPreEDIndex = 1;
1593                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1594                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x36); //CR206(0xCE)
1595                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -68\n");
1596             } else { //RSSI -69, -70,....
1597                 if(pDevice->byBBPreEDIndex == 0) break;
1598                 pDevice->byBBPreEDIndex = 0;
1599                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1600                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1601                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -69, -70,...\n");
1602             }
1603             break;
1604
1605         case RF_VT3226:
1606         case RF_VT3226D0:
1607             //RobertYu:20060627, update new table
1608
1609             if( bScanning )
1610             {   // need Max sensitivity  //RSSI -69, -70, ...
1611                 pDevice->byBBPreEDIndex = 0;
1612                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1613                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x24); //CR206(0xCE)
1614                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -69, -70,..\n");
1615                 break;
1616             }
1617
1618             if(pDevice->byBBPreEDRSSI <= 41) { // RSSI 0, -1,-2,....-41
1619                 if(pDevice->byBBPreEDIndex == 22) break;
1620                 pDevice->byBBPreEDIndex = 22;
1621                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1622                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1623                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI 0, -1,-2,..-41\n");
1624             } else if(pDevice->byBBPreEDRSSI <= 42)  { //RSSI -42
1625                 if(pDevice->byBBPreEDIndex == 21) break;
1626                 pDevice->byBBPreEDIndex = 21;
1627                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x36); //CR201(0xC9)
1628                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1629                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -42\n");
1630             } else if(pDevice->byBBPreEDRSSI <= 43)  { //RSSI -43
1631                 if(pDevice->byBBPreEDIndex == 20) break;
1632                 pDevice->byBBPreEDIndex = 20;
1633                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x26); //CR201(0xC9)
1634                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1635                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -43\n");
1636             } else if(pDevice->byBBPreEDRSSI <= 45)  { //RSSI -44, -45
1637                 if(pDevice->byBBPreEDIndex == 19) break;
1638                 pDevice->byBBPreEDIndex = 19;
1639                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x18); //CR201(0xC9)
1640                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1641                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -44,-45\n");
1642             } else if(pDevice->byBBPreEDRSSI <= 47)  { //RSSI -46, -47
1643                 if(pDevice->byBBPreEDIndex == 18) break;
1644                 pDevice->byBBPreEDIndex = 18;
1645                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x11); //CR201(0xC9)
1646                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1647                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -46,-47\n");
1648             } else if(pDevice->byBBPreEDRSSI <= 49)  { //RSSI -48, -49
1649                 if(pDevice->byBBPreEDIndex == 17) break;
1650                 pDevice->byBBPreEDIndex = 17;
1651                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0a); //CR201(0xC9)
1652                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1653                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -48,-49\n");
1654             } else if(pDevice->byBBPreEDRSSI <= 51)  { //RSSI -50, -51
1655                 if(pDevice->byBBPreEDIndex == 16) break;
1656                 pDevice->byBBPreEDIndex = 16;
1657                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x07); //CR201(0xC9)
1658                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1659                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -50,-51\n");
1660             } else if(pDevice->byBBPreEDRSSI <= 53)  { //RSSI -52, -53
1661                 if(pDevice->byBBPreEDIndex == 15) break;
1662                 pDevice->byBBPreEDIndex = 15;
1663                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x04); //CR201(0xC9)
1664                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1665                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -52,-53\n");
1666             } else if(pDevice->byBBPreEDRSSI <= 55)  { //RSSI -54, -55
1667                 if(pDevice->byBBPreEDIndex == 14) break;
1668                 pDevice->byBBPreEDIndex = 14;
1669                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1670                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1671                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -54,-55\n");
1672             } else if(pDevice->byBBPreEDRSSI <= 56)  { //RSSI -56
1673                 if(pDevice->byBBPreEDIndex == 13) break;
1674                 pDevice->byBBPreEDIndex = 13;
1675                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1676                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1677                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -56\n");
1678             } else if(pDevice->byBBPreEDRSSI <= 57)  { //RSSI -57
1679                 if(pDevice->byBBPreEDIndex == 12) break;
1680                 pDevice->byBBPreEDIndex = 12;
1681                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1682                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xB0); //CR206(0xCE)
1683                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -57\n");
1684             } else if(pDevice->byBBPreEDRSSI <= 58)  { //RSSI -58
1685                 if(pDevice->byBBPreEDIndex == 11) break;
1686                 pDevice->byBBPreEDIndex = 11;
1687                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1688                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x70); //CR206(0xCE)
1689                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -58\n");
1690             } else if(pDevice->byBBPreEDRSSI <= 59)  { //RSSI -59
1691                 if(pDevice->byBBPreEDIndex == 10) break;
1692                 pDevice->byBBPreEDIndex = 10;
1693                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1694                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1695                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -59\n");
1696             } else if(pDevice->byBBPreEDRSSI <= 60)  { //RSSI -60
1697                 if(pDevice->byBBPreEDIndex == 9) break;
1698                 pDevice->byBBPreEDIndex = 9;
1699                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1700                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xEA); //CR206(0xCE)
1701                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -60\n");
1702             } else if(pDevice->byBBPreEDRSSI <= 61)  { //RSSI -61
1703                 if(pDevice->byBBPreEDIndex == 8) break;
1704                 pDevice->byBBPreEDIndex = 8;
1705                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1706                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1707                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -61\n");
1708             } else if(pDevice->byBBPreEDRSSI <= 62)  { //RSSI -62
1709                 if(pDevice->byBBPreEDIndex == 7) break;
1710                 pDevice->byBBPreEDIndex = 7;
1711                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1712                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x9C); //CR206(0xCE)
1713                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -62\n");
1714             } else if(pDevice->byBBPreEDRSSI <= 63)  { //RSSI -63
1715                 if(pDevice->byBBPreEDIndex == 6) break;
1716                 pDevice->byBBPreEDIndex = 6;
1717                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1718                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x80); //CR206(0xCE)
1719                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -63\n");
1720             } else if(pDevice->byBBPreEDRSSI <= 64)  { //RSSI -64
1721                 if(pDevice->byBBPreEDIndex == 5) break;
1722                 pDevice->byBBPreEDIndex = 5;
1723                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1724                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x68); //CR206(0xCE)
1725                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -64\n");
1726             } else if(pDevice->byBBPreEDRSSI <= 65)  { //RSSI -65
1727                 if(pDevice->byBBPreEDIndex == 4) break;
1728                 pDevice->byBBPreEDIndex = 4;
1729                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1730                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x52); //CR206(0xCE)
1731                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -65\n");
1732             } else if(pDevice->byBBPreEDRSSI <= 66)  { //RSSI -66
1733                 if(pDevice->byBBPreEDIndex == 3) break;
1734                 pDevice->byBBPreEDIndex = 3;
1735                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1736                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x43); //CR206(0xCE)
1737                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -66\n");
1738             } else if(pDevice->byBBPreEDRSSI <= 67)  { //RSSI -67
1739                 if(pDevice->byBBPreEDIndex == 2) break;
1740                 pDevice->byBBPreEDIndex = 2;
1741                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1742                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x36); //CR206(0xCE)
1743                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -67\n");
1744             } else if(pDevice->byBBPreEDRSSI <= 68)  { //RSSI -68
1745                 if(pDevice->byBBPreEDIndex == 1) break;
1746                 pDevice->byBBPreEDIndex = 1;
1747                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1748                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x2D); //CR206(0xCE)
1749                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -68\n");
1750             } else { //RSSI -69, -70, ...
1751                 if(pDevice->byBBPreEDIndex == 0) break;
1752                 pDevice->byBBPreEDIndex = 0;
1753                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1754                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x24); //CR206(0xCE)
1755                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -69, -70,..\n");
1756             }
1757             break;
1758
1759         case RF_VT3342A0: //RobertYu:20060627, testing table
1760             if( bScanning )
1761             {   // need Max sensitivity  //RSSI -67, -68, ...
1762                 pDevice->byBBPreEDIndex = 0;
1763                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1764                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x38); //CR206(0xCE)
1765                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -67, -68,..\n");
1766                 break;
1767             }
1768
1769             if(pDevice->byBBPreEDRSSI <= 41) { // RSSI 0, -1,-2,....-41
1770                 if(pDevice->byBBPreEDIndex == 20) break;
1771                 pDevice->byBBPreEDIndex = 20;
1772                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1773                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1774                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI 0, -1,-2,..-41\n");
1775             } else if(pDevice->byBBPreEDRSSI <= 42)  { //RSSI -42
1776                 if(pDevice->byBBPreEDIndex == 19) break;
1777                 pDevice->byBBPreEDIndex = 19;
1778                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x36); //CR201(0xC9)
1779                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1780                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -42\n");
1781             } else if(pDevice->byBBPreEDRSSI <= 43)  { //RSSI -43
1782                 if(pDevice->byBBPreEDIndex == 18) break;
1783                 pDevice->byBBPreEDIndex = 18;
1784                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x26); //CR201(0xC9)
1785                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1786                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -43\n");
1787             } else if(pDevice->byBBPreEDRSSI <= 45)  { //RSSI -44, -45
1788                 if(pDevice->byBBPreEDIndex == 17) break;
1789                 pDevice->byBBPreEDIndex = 17;
1790                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x18); //CR201(0xC9)
1791                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1792                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -44,-45\n");
1793             } else if(pDevice->byBBPreEDRSSI <= 47)  { //RSSI -46, -47
1794                 if(pDevice->byBBPreEDIndex == 16) break;
1795                 pDevice->byBBPreEDIndex = 16;
1796                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x11); //CR201(0xC9)
1797                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1798                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -46,-47\n");
1799             } else if(pDevice->byBBPreEDRSSI <= 49)  { //RSSI -48, -49
1800                 if(pDevice->byBBPreEDIndex == 15) break;
1801                 pDevice->byBBPreEDIndex = 15;
1802                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0a); //CR201(0xC9)
1803                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1804                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -48,-49\n");
1805             } else if(pDevice->byBBPreEDRSSI <= 51)  { //RSSI -50, -51
1806                 if(pDevice->byBBPreEDIndex == 14) break;
1807                 pDevice->byBBPreEDIndex = 14;
1808                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x07); //CR201(0xC9)
1809                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1810                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -50,-51\n");
1811             } else if(pDevice->byBBPreEDRSSI <= 53)  { //RSSI -52, -53
1812                 if(pDevice->byBBPreEDIndex == 13) break;
1813                 pDevice->byBBPreEDIndex = 13;
1814                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x04); //CR201(0xC9)
1815                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1816                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -52,-53\n");
1817             } else if(pDevice->byBBPreEDRSSI <= 55)  { //RSSI -54, -55
1818                 if(pDevice->byBBPreEDIndex == 12) break;
1819                 pDevice->byBBPreEDIndex = 12;
1820                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1821                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1822                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -54,-55\n");
1823             } else if(pDevice->byBBPreEDRSSI <= 56)  { //RSSI -56
1824                 if(pDevice->byBBPreEDIndex == 11) break;
1825                 pDevice->byBBPreEDIndex = 11;
1826                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1827                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1828                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -56\n");
1829             } else if(pDevice->byBBPreEDRSSI <= 57)  { //RSSI -57
1830                 if(pDevice->byBBPreEDIndex == 10) break;
1831                 pDevice->byBBPreEDIndex = 10;
1832                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1833                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xB0); //CR206(0xCE)
1834                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -57\n");
1835             } else if(pDevice->byBBPreEDRSSI <= 58)  { //RSSI -58
1836                 if(pDevice->byBBPreEDIndex == 9) break;
1837                 pDevice->byBBPreEDIndex = 9;
1838                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1839                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x70); //CR206(0xCE)
1840                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -58\n");
1841             } else if(pDevice->byBBPreEDRSSI <= 59)  { //RSSI -59
1842                 if(pDevice->byBBPreEDIndex == 8) break;
1843                 pDevice->byBBPreEDIndex = 8;
1844                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1845                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1846                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -59\n");
1847             } else if(pDevice->byBBPreEDRSSI <= 60)  { //RSSI -60
1848                 if(pDevice->byBBPreEDIndex == 7) break;
1849                 pDevice->byBBPreEDIndex = 7;
1850                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1851                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xEA); //CR206(0xCE)
1852                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -60\n");
1853             } else if(pDevice->byBBPreEDRSSI <= 61)  { //RSSI -61
1854                 if(pDevice->byBBPreEDIndex == 6) break;
1855                 pDevice->byBBPreEDIndex = 6;
1856                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1857                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1858                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -61\n");
1859             } else if(pDevice->byBBPreEDRSSI <= 62)  { //RSSI -62
1860                 if(pDevice->byBBPreEDIndex == 5) break;
1861                 pDevice->byBBPreEDIndex = 5;
1862                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1863                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x9C); //CR206(0xCE)
1864                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -62\n");
1865             } else if(pDevice->byBBPreEDRSSI <= 63)  { //RSSI -63
1866                 if(pDevice->byBBPreEDIndex == 4) break;
1867                 pDevice->byBBPreEDIndex = 4;
1868                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1869                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x80); //CR206(0xCE)
1870                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -63\n");
1871             } else if(pDevice->byBBPreEDRSSI <= 64)  { //RSSI -64
1872                 if(pDevice->byBBPreEDIndex == 3) break;
1873                 pDevice->byBBPreEDIndex = 3;
1874                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1875                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x68); //CR206(0xCE)
1876                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -64\n");
1877             } else if(pDevice->byBBPreEDRSSI <= 65)  { //RSSI -65
1878                 if(pDevice->byBBPreEDIndex == 2) break;
1879                 pDevice->byBBPreEDIndex = 2;
1880                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1881                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x52); //CR206(0xCE)
1882                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -65\n");
1883             } else if(pDevice->byBBPreEDRSSI <= 66)  { //RSSI -66
1884                 if(pDevice->byBBPreEDIndex == 1) break;
1885                 pDevice->byBBPreEDIndex = 1;
1886                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1887                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x43); //CR206(0xCE)
1888                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -66\n");
1889             } else { //RSSI -67, -68, ...
1890                 if(pDevice->byBBPreEDIndex == 0) break;
1891                 pDevice->byBBPreEDIndex = 0;
1892                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1893                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x38); //CR206(0xCE)
1894                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -67, -68,..\n");
1895             }
1896             break;
1897
1898     }
1899
1900 }
1901