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