]> Pileus Git - ~andy/linux/blob - drivers/staging/vt6656/baseband.c
Merge branch 'master' into for-next
[~andy/linux] / drivers / staging / vt6656 / baseband.c
1 /*
2  * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
3  * All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  *
20  * File: baseband.c
21  *
22  * Purpose: Implement functions to access baseband
23  *
24  * Author: Jerry Chen
25  *
26  * Date: Jun. 5, 2002
27  *
28  * Functions:
29  *      BBuGetFrameTime        - Calculate data frame transmitting time
30  *      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     switch (byAntennaMode) {
936         case ANT_TXA:
937         case ANT_TXB:
938             break;
939         case ANT_RXA:
940             pDevice->byBBRxConf &= 0xFC;
941             break;
942         case ANT_RXB:
943             pDevice->byBBRxConf &= 0xFE;
944             pDevice->byBBRxConf |= 0x02;
945             break;
946     }
947
948
949     CONTROLnsRequestOut(pDevice,
950                     MESSAGE_TYPE_SET_ANTMD,
951                     (WORD) byAntennaMode,
952                     0,
953                     0,
954                     NULL);
955 }
956
957 /*
958  * Description: Set Antenna mode
959  *
960  * Parameters:
961  *  In:
962  *      pDevice          - Device Structure
963  *      byAntennaMode    - Antenna Mode
964  *  Out:
965  *      none
966  *
967  * Return Value: none
968  *
969  */
970
971 BOOL BBbVT3184Init(PSDevice pDevice)
972 {
973         int ntStatus;
974     WORD                    wLength;
975     PBYTE                   pbyAddr;
976     PBYTE                   pbyAgc;
977     WORD                    wLengthAgc;
978     BYTE                    abyArray[256];
979
980     ntStatus = CONTROLnsRequestIn(pDevice,
981                                   MESSAGE_TYPE_READ,
982                                   0,
983                                   MESSAGE_REQUEST_EEPROM,
984                                   EEP_MAX_CONTEXT_SIZE,
985                                   pDevice->abyEEPROM);
986     if (ntStatus != STATUS_SUCCESS) {
987         return FALSE;
988     }
989
990
991 //    if ((pDevice->abyEEPROM[EEP_OFS_RADIOCTL]&0x06)==0x04)
992 //        return FALSE;
993
994 //zonetype initial
995  pDevice->byOriginalZonetype = pDevice->abyEEPROM[EEP_OFS_ZONETYPE];
996  if(pDevice->config_file.ZoneType >= 0) {         //read zonetype file ok!
997   if ((pDevice->config_file.ZoneType == 0)&&
998         (pDevice->abyEEPROM[EEP_OFS_ZONETYPE] !=0x00)){          //for USA
999     pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0;
1000     pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0B;
1001     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Init Zone Type :USA\n");
1002   }
1003  else if((pDevice->config_file.ZoneType == 1)&&
1004              (pDevice->abyEEPROM[EEP_OFS_ZONETYPE]!=0x01)){   //for Japan
1005     pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0x01;
1006     pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0D;
1007     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Init Zone Type :Japan\n");
1008   }
1009  else if((pDevice->config_file.ZoneType == 2)&&
1010              (pDevice->abyEEPROM[EEP_OFS_ZONETYPE]!=0x02)){   //for Europe
1011     pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0x02;
1012     pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0D;
1013     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Init Zone Type :Europe\n");
1014   }
1015 else {
1016    if(pDevice->config_file.ZoneType !=pDevice->abyEEPROM[EEP_OFS_ZONETYPE])
1017       printk("zonetype in file[%02x] mismatch with in EEPROM[%02x]\n",pDevice->config_file.ZoneType,pDevice->abyEEPROM[EEP_OFS_ZONETYPE]);
1018    else
1019       printk("Read Zonetype file success,use default zonetype setting[%02x]\n",pDevice->config_file.ZoneType);
1020  }
1021 }
1022
1023     if ( !pDevice->bZoneRegExist ) {
1024         pDevice->byZoneType = pDevice->abyEEPROM[EEP_OFS_ZONETYPE];
1025     }
1026     pDevice->byRFType = pDevice->abyEEPROM[EEP_OFS_RFTYPE];
1027
1028     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Zone Type %x\n", pDevice->byZoneType);
1029     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"RF Type %d\n", pDevice->byRFType);
1030
1031     if ((pDevice->byRFType == RF_AL2230) || (pDevice->byRFType == RF_AL2230S)) {
1032         pDevice->byBBRxConf = abyVT3184_AL2230[10];
1033         wLength = sizeof(abyVT3184_AL2230);
1034         pbyAddr = abyVT3184_AL2230;
1035         pbyAgc = abyVT3184_AGC;
1036         wLengthAgc = sizeof(abyVT3184_AGC);
1037
1038         pDevice->abyBBVGA[0] = 0x1C;
1039         pDevice->abyBBVGA[1] = 0x10;
1040         pDevice->abyBBVGA[2] = 0x0;
1041         pDevice->abyBBVGA[3] = 0x0;
1042         pDevice->ldBmThreshold[0] = -70;
1043         pDevice->ldBmThreshold[1] = -48;
1044         pDevice->ldBmThreshold[2] = 0;
1045         pDevice->ldBmThreshold[3] = 0;
1046     }
1047     else if (pDevice->byRFType == RF_AIROHA7230) {
1048         pDevice->byBBRxConf = abyVT3184_AL2230[10];
1049         wLength = sizeof(abyVT3184_AL2230);
1050         pbyAddr = abyVT3184_AL2230;
1051         pbyAgc = abyVT3184_AGC;
1052         wLengthAgc = sizeof(abyVT3184_AGC);
1053
1054         // Init ANT B select,TX Config CR09 = 0x61->0x45, 0x45->0x41(VC1/VC2 define, make the ANT_A, ANT_B inverted)
1055         //pbyAddr[0x09] = 0x41;
1056         // Init ANT B select,RX Config CR10 = 0x28->0x2A, 0x2A->0x28(VC1/VC2 define, make the ANT_A, ANT_B inverted)
1057         //pbyAddr[0x0a] = 0x28;
1058         // Select VC1/VC2, CR215 = 0x02->0x06
1059         pbyAddr[0xd7] = 0x06;
1060
1061         pDevice->abyBBVGA[0] = 0x1C;
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     }
1070     else if ( (pDevice->byRFType == RF_VT3226) || (pDevice->byRFType == RF_VT3226D0) ) {
1071         pDevice->byBBRxConf = abyVT3184_VT3226D0[10];   //RobertYu:20060515
1072         wLength = sizeof(abyVT3184_VT3226D0);           //RobertYu:20060515
1073         pbyAddr = abyVT3184_VT3226D0;                   //RobertYu:20060515
1074         pbyAgc = abyVT3184_AGC;
1075         wLengthAgc = sizeof(abyVT3184_AGC);
1076
1077         pDevice->abyBBVGA[0] = 0x20; //RobertYu:20060104, reguest by Jack
1078         pDevice->abyBBVGA[1] = 0x10;
1079         pDevice->abyBBVGA[2] = 0x0;
1080         pDevice->abyBBVGA[3] = 0x0;
1081         pDevice->ldBmThreshold[0] = -70;
1082         pDevice->ldBmThreshold[1] = -48;
1083         pDevice->ldBmThreshold[2] = 0;
1084         pDevice->ldBmThreshold[3] = 0;
1085         // Fix VT3226 DFC system timing issue
1086         MACvRegBitsOn(pDevice, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT);
1087     //}}
1088     //{{RobertYu:20060609
1089     } else if ( (pDevice->byRFType == RF_VT3342A0) ) {
1090         pDevice->byBBRxConf = abyVT3184_VT3226D0[10];
1091         wLength = sizeof(abyVT3184_VT3226D0);
1092         pbyAddr = abyVT3184_VT3226D0;
1093         pbyAgc = abyVT3184_AGC;
1094         wLengthAgc = sizeof(abyVT3184_AGC);
1095
1096         pDevice->abyBBVGA[0] = 0x20;
1097         pDevice->abyBBVGA[1] = 0x10;
1098         pDevice->abyBBVGA[2] = 0x0;
1099         pDevice->abyBBVGA[3] = 0x0;
1100         pDevice->ldBmThreshold[0] = -70;
1101         pDevice->ldBmThreshold[1] = -48;
1102         pDevice->ldBmThreshold[2] = 0;
1103         pDevice->ldBmThreshold[3] = 0;
1104         // Fix VT3226 DFC system timing issue
1105         MACvRegBitsOn(pDevice, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT);
1106     //}}
1107     } else {
1108         return TRUE;
1109     }
1110
1111    memcpy(abyArray, pbyAddr, wLength);
1112    CONTROLnsRequestOut(pDevice,
1113                     MESSAGE_TYPE_WRITE,
1114                     0,
1115                     MESSAGE_REQUEST_BBREG,
1116                     wLength,
1117                     abyArray
1118                     );
1119
1120    memcpy(abyArray, pbyAgc, wLengthAgc);
1121    CONTROLnsRequestOut(pDevice,
1122                     MESSAGE_TYPE_WRITE,
1123                     0,
1124                     MESSAGE_REQUEST_BBAGC,
1125                     wLengthAgc,
1126                     abyArray
1127                     );
1128
1129
1130     if ((pDevice->byRFType == RF_VT3226) || //RobertYu:20051116, 20060111 remove VT3226D0
1131          (pDevice->byRFType == RF_VT3342A0)  //RobertYu:20060609
1132          ) {
1133         ControlvWriteByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_ITRTMSET,0x23);
1134         MACvRegBitsOn(pDevice,MAC_REG_PAPEDELAY,0x01);
1135     }
1136     else if (pDevice->byRFType == RF_VT3226D0)
1137     {
1138         ControlvWriteByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_ITRTMSET,0x11);
1139         MACvRegBitsOn(pDevice,MAC_REG_PAPEDELAY,0x01);
1140     }
1141
1142
1143     ControlvWriteByte(pDevice,MESSAGE_REQUEST_BBREG,0x04,0x7F);
1144     ControlvWriteByte(pDevice,MESSAGE_REQUEST_BBREG,0x0D,0x01);
1145
1146     RFbRFTableDownload(pDevice);
1147     return TRUE;//ntStatus;
1148 }
1149
1150
1151 /*
1152  * Description: Turn on BaseBand Loopback mode
1153  *
1154  * Parameters:
1155  *  In:
1156  *      pDevice         - Device Structure
1157  *
1158  *  Out:
1159  *      none
1160  *
1161  * Return Value: none
1162  *
1163  */
1164 void BBvLoopbackOn (PSDevice pDevice)
1165 {
1166     BYTE      byData;
1167
1168     //CR C9 = 0x00
1169     ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0xC9, &pDevice->byBBCRc9);//CR201
1170     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0);
1171     ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x4D, &pDevice->byBBCR4d);//CR77
1172     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x4D, 0x90);
1173
1174     //CR 88 = 0x02(CCK), 0x03(OFDM)
1175     ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x88, &pDevice->byBBCR88);//CR136
1176
1177     if (pDevice->wCurrentRate <= RATE_11M) { //CCK
1178         // Enable internal digital loopback: CR33 |= 0000 0001
1179         ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x21, &byData);//CR33
1180         ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x21, (BYTE)(byData | 0x01));//CR33
1181         // CR154 = 0x00
1182         ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x9A, 0);   //CR154
1183
1184         ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x88, 0x02);//CR239
1185     }
1186     else { //OFDM
1187         // Enable internal digital loopback:CR154 |= 0000 0001
1188         ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x9A, &byData);//CR154
1189         ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x9A, (BYTE)(byData | 0x01));//CR154
1190         // CR33 = 0x00
1191         ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x21, 0);   //CR33
1192
1193         ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x88, 0x03);//CR239
1194     }
1195
1196     //CR14 = 0x00
1197     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0E, 0);//CR14
1198
1199     // Disable TX_IQUN
1200     ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x09, &pDevice->byBBCR09);
1201     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x09, (BYTE)(pDevice->byBBCR09 & 0xDE));
1202 }
1203
1204 /*
1205  * Description: Turn off BaseBand Loopback mode
1206  *
1207  * Parameters:
1208  *  In:
1209  *      pDevice         - Device Structure
1210  *
1211  *  Out:
1212  *      none
1213  *
1214  * Return Value: none
1215  *
1216  */
1217 void BBvLoopbackOff (PSDevice pDevice)
1218 {
1219     BYTE      byData;
1220
1221     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, pDevice->byBBCRc9);//CR201
1222     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x88, pDevice->byBBCR88);//CR136
1223     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x09, pDevice->byBBCR09);//CR136
1224     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x4D, pDevice->byBBCR4d);//CR77
1225
1226     if (pDevice->wCurrentRate <= RATE_11M) { // CCK
1227         // Set the CR33 Bit2 to disable internal Loopback.
1228         ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x21, &byData);//CR33
1229         ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x21, (BYTE)(byData & 0xFE));//CR33
1230         } else { /* OFDM */
1231         ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x9A, &byData);//CR154
1232         ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x9A, (BYTE)(byData & 0xFE));//CR154
1233     }
1234     ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x0E, &byData);//CR14
1235     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0E, (BYTE)(byData | 0x80));//CR14
1236
1237 }
1238
1239
1240 /*
1241  * Description: Set ShortSlotTime mode
1242  *
1243  * Parameters:
1244  *  In:
1245  *      pDevice     - Device Structure
1246  *  Out:
1247  *      none
1248  *
1249  * Return Value: none
1250  *
1251  */
1252 void
1253 BBvSetShortSlotTime (PSDevice pDevice)
1254 {
1255     BYTE byBBVGA=0;
1256
1257         if (pDevice->bShortSlotTime)
1258         pDevice->byBBRxConf &= 0xDF;//1101 1111
1259         else
1260         pDevice->byBBRxConf |= 0x20;//0010 0000
1261
1262     ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0xE7, &byBBVGA);
1263         if (byBBVGA == pDevice->abyBBVGA[0])
1264         pDevice->byBBRxConf |= 0x20;//0010 0000
1265
1266     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0A, pDevice->byBBRxConf);
1267 }
1268
1269
1270 void BBvSetVGAGainOffset(PSDevice pDevice, BYTE byData)
1271 {
1272
1273     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xE7, byData);
1274
1275     // patch for 3253B0 Baseband with Cardbus module
1276         if (pDevice->bShortSlotTime)
1277                 pDevice->byBBRxConf &= 0xDF; /* 1101 1111 */
1278         else
1279                 pDevice->byBBRxConf |= 0x20; /* 0010 0000 */
1280
1281     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0A, pDevice->byBBRxConf);//CR10
1282 }
1283
1284
1285 /*
1286  * Description: Baseband SoftwareReset
1287  *
1288  * Parameters:
1289  *  In:
1290  *      dwIoBase    - I/O base address
1291  *  Out:
1292  *      none
1293  *
1294  * Return Value: none
1295  *
1296  */
1297 void
1298 BBvSoftwareReset (PSDevice pDevice)
1299 {
1300     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x50, 0x40);
1301     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x50, 0);
1302     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x9C, 0x01);
1303     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x9C, 0);
1304 }
1305
1306 /*
1307  * Description: BBvSetDeepSleep
1308  *
1309  * Parameters:
1310  *  In:
1311  *      pDevice          - Device Structure
1312  *  Out:
1313  *      none
1314  *
1315  * Return Value: none
1316  *
1317  */
1318 void
1319 BBvSetDeepSleep (PSDevice pDevice)
1320 {
1321     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0c, 0x17);//CR12
1322     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0D, 0xB9);//CR13
1323 }
1324
1325 void
1326 BBvExitDeepSleep (PSDevice pDevice)
1327 {
1328     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0C, 0x00);//CR12
1329     ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0D, 0x01);//CR13
1330 }
1331
1332
1333 static unsigned long s_ulGetLowSQ3(PSDevice pDevice)
1334 {
1335         int ii;
1336         unsigned long ulSQ3 = 0;
1337         unsigned long ulMaxPacket;
1338
1339     ulMaxPacket = pDevice->aulPktNum[RATE_54M];
1340         if (pDevice->aulPktNum[RATE_54M] != 0)
1341         ulSQ3 = pDevice->aulSQ3Val[RATE_54M] / pDevice->aulPktNum[RATE_54M];
1342
1343         for (ii = RATE_48M; ii >= RATE_6M; ii--)
1344                 if (pDevice->aulPktNum[ii] > ulMaxPacket) {
1345             ulMaxPacket = pDevice->aulPktNum[ii];
1346             ulSQ3 = pDevice->aulSQ3Val[ii] / pDevice->aulPktNum[ii];
1347         }
1348
1349     return ulSQ3;
1350 }
1351
1352 static unsigned long s_ulGetRatio(PSDevice pDevice)
1353 {
1354         int ii, jj;
1355         unsigned long ulRatio = 0;
1356         unsigned long ulMaxPacket;
1357         unsigned long ulPacketNum;
1358
1359     //This is a thousand-ratio
1360     ulMaxPacket = pDevice->aulPktNum[RATE_54M];
1361     if ( pDevice->aulPktNum[RATE_54M] != 0 ) {
1362         ulPacketNum = pDevice->aulPktNum[RATE_54M];
1363         ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
1364         ulRatio += TOP_RATE_54M;
1365     }
1366         for (ii = RATE_48M; ii >= RATE_1M; ii--)
1367         if ( pDevice->aulPktNum[ii] > ulMaxPacket ) {
1368             ulPacketNum = 0;
1369             for ( jj=RATE_54M;jj>=ii;jj--)
1370                 ulPacketNum += pDevice->aulPktNum[jj];
1371             ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
1372             ulRatio += TOP_RATE_48M;
1373             ulMaxPacket = pDevice->aulPktNum[ii];
1374         }
1375
1376     return ulRatio;
1377 }
1378
1379
1380 static
1381 void
1382 s_vClearSQ3Value (PSDevice pDevice)
1383 {
1384     int ii;
1385     pDevice->uDiversityCnt = 0;
1386
1387     for ( ii=RATE_1M;ii<MAX_RATE;ii++) {
1388         pDevice->aulPktNum[ii] = 0;
1389         pDevice->aulSQ3Val[ii] = 0;
1390     }
1391 }
1392
1393
1394 /*
1395  * Description: Antenna Diversity
1396  *
1397  * Parameters:
1398  *  In:
1399  *      pDevice          - Device Structure
1400  *      byRSR            - RSR from received packet
1401  *      bySQ3            - SQ3 value from received packet
1402  *  Out:
1403  *      none
1404  *
1405  * Return Value: none
1406  *
1407  */
1408
1409 void
1410 BBvAntennaDiversity (PSDevice pDevice, BYTE byRxRate, BYTE bySQ3)
1411 {
1412
1413     pDevice->uDiversityCnt++;
1414     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pDevice->uDiversityCnt = %d\n", (int)pDevice->uDiversityCnt);
1415
1416     if (byRxRate == 2) {
1417         pDevice->aulPktNum[RATE_1M]++;
1418     }
1419     else if (byRxRate==4) {
1420         pDevice->aulPktNum[RATE_2M]++;
1421     }
1422     else if (byRxRate==11) {
1423         pDevice->aulPktNum[RATE_5M]++;
1424     }
1425     else if (byRxRate==22) {
1426         pDevice->aulPktNum[RATE_11M]++;
1427     }
1428     else if(byRxRate==12){
1429         pDevice->aulPktNum[RATE_6M]++;
1430         pDevice->aulSQ3Val[RATE_6M] += bySQ3;
1431     }
1432     else if(byRxRate==18){
1433         pDevice->aulPktNum[RATE_9M]++;
1434         pDevice->aulSQ3Val[RATE_9M] += bySQ3;
1435     }
1436     else if(byRxRate==24){
1437         pDevice->aulPktNum[RATE_12M]++;
1438         pDevice->aulSQ3Val[RATE_12M] += bySQ3;
1439     }
1440     else if(byRxRate==36){
1441         pDevice->aulPktNum[RATE_18M]++;
1442         pDevice->aulSQ3Val[RATE_18M] += bySQ3;
1443     }
1444     else if(byRxRate==48){
1445         pDevice->aulPktNum[RATE_24M]++;
1446         pDevice->aulSQ3Val[RATE_24M] += bySQ3;
1447     }
1448     else if(byRxRate==72){
1449         pDevice->aulPktNum[RATE_36M]++;
1450         pDevice->aulSQ3Val[RATE_36M] += bySQ3;
1451     }
1452     else if(byRxRate==96){
1453         pDevice->aulPktNum[RATE_48M]++;
1454         pDevice->aulSQ3Val[RATE_48M] += bySQ3;
1455     }
1456     else if(byRxRate==108){
1457         pDevice->aulPktNum[RATE_54M]++;
1458         pDevice->aulSQ3Val[RATE_54M] += bySQ3;
1459     }
1460
1461     if (pDevice->byAntennaState == 0) {
1462
1463         if (pDevice->uDiversityCnt > pDevice->ulDiversityNValue) {
1464             DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ulDiversityNValue=[%d],54M-[%d]\n",(int)pDevice->ulDiversityNValue, (int)pDevice->aulPktNum[RATE_54M]);
1465
1466             pDevice->ulSQ3_State0 = s_ulGetLowSQ3(pDevice);
1467             pDevice->ulRatio_State0 = s_ulGetRatio(pDevice);
1468             DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State0, SQ3= [%08x] rate = [%08x]\n",(int)pDevice->ulSQ3_State0,(int)pDevice->ulRatio_State0);
1469
1470             if ( ((pDevice->aulPktNum[RATE_54M] < pDevice->ulDiversityNValue/2) &&
1471                   (pDevice->ulSQ3_State0 > pDevice->ulSQ3TH) ) ||
1472                  (pDevice->ulSQ3_State0 == 0 ) )  {
1473
1474                 if ( pDevice->byTMax == 0 )
1475                     return;
1476
1477                 bScheduleCommand((void *) pDevice,
1478                                  WLAN_CMD_CHANGE_ANTENNA,
1479                                  NULL);
1480
1481                 pDevice->byAntennaState = 1;
1482
1483                 del_timer(&pDevice->TimerSQ3Tmax3);
1484                 del_timer(&pDevice->TimerSQ3Tmax2);
1485                 pDevice->TimerSQ3Tmax1.expires =  RUN_AT(pDevice->byTMax * HZ);
1486                 add_timer(&pDevice->TimerSQ3Tmax1);
1487
1488             } else {
1489                 pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
1490                 add_timer(&pDevice->TimerSQ3Tmax3);
1491             }
1492             s_vClearSQ3Value(pDevice);
1493
1494         }
1495     } else { //byAntennaState == 1
1496
1497         if (pDevice->uDiversityCnt > pDevice->ulDiversityMValue) {
1498
1499             del_timer(&pDevice->TimerSQ3Tmax1);
1500             pDevice->ulSQ3_State1 = s_ulGetLowSQ3(pDevice);
1501             pDevice->ulRatio_State1 = s_ulGetRatio(pDevice);
1502             DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State1, rate0 = %08x,rate1 = %08x\n",(int)pDevice->ulRatio_State0,(int)pDevice->ulRatio_State1);
1503
1504             if ( ((pDevice->ulSQ3_State1 == 0) && (pDevice->ulSQ3_State0 != 0)) ||
1505                  ((pDevice->ulSQ3_State1 == 0) && (pDevice->ulSQ3_State0 == 0) && (pDevice->ulRatio_State1 < pDevice->ulRatio_State0)) ||
1506                  ((pDevice->ulSQ3_State1 != 0) && (pDevice->ulSQ3_State0 != 0) && (pDevice->ulSQ3_State0 < pDevice->ulSQ3_State1))
1507                ) {
1508
1509                 bScheduleCommand((void *) pDevice,
1510                                  WLAN_CMD_CHANGE_ANTENNA,
1511                                  NULL);
1512
1513                 pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
1514                 pDevice->TimerSQ3Tmax2.expires =  RUN_AT(pDevice->byTMax2 * HZ);
1515                 add_timer(&pDevice->TimerSQ3Tmax3);
1516                 add_timer(&pDevice->TimerSQ3Tmax2);
1517
1518             }
1519             pDevice->byAntennaState = 0;
1520             s_vClearSQ3Value(pDevice);
1521         }
1522     } //byAntennaState
1523 }
1524
1525
1526 /*+
1527  *
1528  * Description:
1529  *  Timer for SQ3 antenna diversity
1530  *
1531  * Parameters:
1532  *  In:
1533  *      pvSysSpec1
1534  *      hDeviceContext - Pointer to the adapter
1535  *      pvSysSpec2
1536  *      pvSysSpec3
1537  *  Out:
1538  *      none
1539  *
1540  * Return Value: none
1541  *
1542 -*/
1543
1544 void TimerSQ3CallBack(void *hDeviceContext)
1545 {
1546     PSDevice        pDevice = (PSDevice)hDeviceContext;
1547
1548     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"TimerSQ3CallBack...");
1549     spin_lock_irq(&pDevice->lock);
1550
1551     bScheduleCommand((void *) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL);
1552     pDevice->byAntennaState = 0;
1553     s_vClearSQ3Value(pDevice);
1554     pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
1555     pDevice->TimerSQ3Tmax2.expires =  RUN_AT(pDevice->byTMax2 * HZ);
1556     add_timer(&pDevice->TimerSQ3Tmax3);
1557     add_timer(&pDevice->TimerSQ3Tmax2);
1558
1559
1560     spin_unlock_irq(&pDevice->lock);
1561 }
1562
1563
1564 /*+
1565  *
1566  * Description:
1567  *  Timer for SQ3 antenna diversity
1568  *
1569  * Parameters:
1570  *  In:
1571  *      pvSysSpec1
1572  *      hDeviceContext - Pointer to the adapter
1573  *      pvSysSpec2
1574  *      pvSysSpec3
1575  *  Out:
1576  *      none
1577  *
1578  * Return Value: none
1579  *
1580 -*/
1581
1582 void TimerSQ3Tmax3CallBack(void *hDeviceContext)
1583 {
1584     PSDevice        pDevice = (PSDevice)hDeviceContext;
1585
1586     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"TimerSQ3Tmax3CallBack...");
1587     spin_lock_irq(&pDevice->lock);
1588
1589     pDevice->ulRatio_State0 = s_ulGetRatio(pDevice);
1590     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State0 = [%08x]\n",(int)pDevice->ulRatio_State0);
1591
1592     s_vClearSQ3Value(pDevice);
1593     if ( pDevice->byTMax == 0 ) {
1594         pDevice->TimerSQ3Tmax3.expires =  RUN_AT(pDevice->byTMax3 * HZ);
1595         add_timer(&pDevice->TimerSQ3Tmax3);
1596         spin_unlock_irq(&pDevice->lock);
1597         return;
1598     }
1599
1600     bScheduleCommand((void *) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL);
1601     pDevice->byAntennaState = 1;
1602     del_timer(&pDevice->TimerSQ3Tmax3);
1603     del_timer(&pDevice->TimerSQ3Tmax2);
1604     pDevice->TimerSQ3Tmax1.expires =  RUN_AT(pDevice->byTMax * HZ);
1605     add_timer(&pDevice->TimerSQ3Tmax1);
1606
1607     spin_unlock_irq(&pDevice->lock);
1608 }
1609
1610 void
1611 BBvUpdatePreEDThreshold(
1612       PSDevice    pDevice,
1613       BOOL        bScanning)
1614 {
1615
1616
1617     switch(pDevice->byRFType)
1618     {
1619         case RF_AL2230:
1620         case RF_AL2230S:
1621         case RF_AIROHA7230:
1622             //RobertYu:20060627, update new table
1623
1624             if( bScanning )
1625             {   // need Max sensitivity //RSSI -69, -70,....
1626                 if(pDevice->byBBPreEDIndex == 0) break;
1627                 pDevice->byBBPreEDIndex = 0;
1628                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1629                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1630                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -69, -70, -71,...\n");
1631                 break;
1632             }
1633
1634             if(pDevice->byBBPreEDRSSI <= 45) { // RSSI 0, -1,-2,....-45
1635                 if(pDevice->byBBPreEDIndex == 20) break;
1636                 pDevice->byBBPreEDIndex = 20;
1637                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1638                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1639                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI 0, -1,-2,..-45\n");
1640             } else if(pDevice->byBBPreEDRSSI <= 46)  { //RSSI -46
1641                 if(pDevice->byBBPreEDIndex == 19) break;
1642                 pDevice->byBBPreEDIndex = 19;
1643                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x1A); //CR201(0xC9)
1644                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1645                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -46\n");
1646             } else if(pDevice->byBBPreEDRSSI <= 47)  { //RSSI -47
1647                 if(pDevice->byBBPreEDIndex == 18) break;
1648                 pDevice->byBBPreEDIndex = 18;
1649                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x15); //CR201(0xC9)
1650                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1651                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -47\n");
1652             } else if(pDevice->byBBPreEDRSSI <= 49)  { //RSSI -48, -49
1653                 if(pDevice->byBBPreEDIndex == 17) break;
1654                 pDevice->byBBPreEDIndex = 17;
1655                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0E); //CR201(0xC9)
1656                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1657                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -48,-49\n");
1658             } else if(pDevice->byBBPreEDRSSI <= 51)  { //RSSI -50, -51
1659                 if(pDevice->byBBPreEDIndex == 16) break;
1660                 pDevice->byBBPreEDIndex = 16;
1661                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x09); //CR201(0xC9)
1662                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1663                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -50,-51\n");
1664             } else if(pDevice->byBBPreEDRSSI <= 53)  { //RSSI -52, -53
1665                 if(pDevice->byBBPreEDIndex == 15) break;
1666                 pDevice->byBBPreEDIndex = 15;
1667                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x06); //CR201(0xC9)
1668                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1669                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -52,-53\n");
1670             } else if(pDevice->byBBPreEDRSSI <= 55)  { //RSSI -54, -55
1671                 if(pDevice->byBBPreEDIndex == 14) break;
1672                 pDevice->byBBPreEDIndex = 14;
1673                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x03); //CR201(0xC9)
1674                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1675                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -54,-55\n");
1676             } else if(pDevice->byBBPreEDRSSI <= 56)  { //RSSI -56
1677                 if(pDevice->byBBPreEDIndex == 13) break;
1678                 pDevice->byBBPreEDIndex = 13;
1679                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1680                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xA0); //CR206(0xCE)
1681                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -56\n");
1682             } else if(pDevice->byBBPreEDRSSI <= 57)  { //RSSI -57
1683                 if(pDevice->byBBPreEDIndex == 12) break;
1684                 pDevice->byBBPreEDIndex = 12;
1685                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1686                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x20); //CR206(0xCE)
1687                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -57\n");
1688             } else if(pDevice->byBBPreEDRSSI <= 58)  { //RSSI -58
1689                 if(pDevice->byBBPreEDIndex == 11) break;
1690                 pDevice->byBBPreEDIndex = 11;
1691                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1692                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xA0); //CR206(0xCE)
1693                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -58\n");
1694             } else if(pDevice->byBBPreEDRSSI <= 59)  { //RSSI -59
1695                 if(pDevice->byBBPreEDIndex == 10) break;
1696                 pDevice->byBBPreEDIndex = 10;
1697                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1698                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x54); //CR206(0xCE)
1699                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -59\n");
1700             } else if(pDevice->byBBPreEDRSSI <= 60)  { //RSSI -60
1701                 if(pDevice->byBBPreEDIndex == 9) break;
1702                 pDevice->byBBPreEDIndex = 9;
1703                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1704                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x18); //CR206(0xCE)
1705                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -60\n");
1706             } else if(pDevice->byBBPreEDRSSI <= 61)  { //RSSI -61
1707                 if(pDevice->byBBPreEDIndex == 8) break;
1708                 pDevice->byBBPreEDIndex = 8;
1709                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1710                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xE3); //CR206(0xCE)
1711                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -61\n");
1712             } else if(pDevice->byBBPreEDRSSI <= 62)  { //RSSI -62
1713                 if(pDevice->byBBPreEDIndex == 7) break;
1714                 pDevice->byBBPreEDIndex = 7;
1715                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1716                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xB9); //CR206(0xCE)
1717                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -62\n");
1718             } else if(pDevice->byBBPreEDRSSI <= 63)  { //RSSI -63
1719                 if(pDevice->byBBPreEDIndex == 6) break;
1720                 pDevice->byBBPreEDIndex = 6;
1721                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1722                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x93); //CR206(0xCE)
1723                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -63\n");
1724             } else if(pDevice->byBBPreEDRSSI <= 64)  { //RSSI -64
1725                 if(pDevice->byBBPreEDIndex == 5) break;
1726                 pDevice->byBBPreEDIndex = 5;
1727                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1728                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x79); //CR206(0xCE)
1729                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -64\n");
1730             } else if(pDevice->byBBPreEDRSSI <= 65)  { //RSSI -65
1731                 if(pDevice->byBBPreEDIndex == 4) break;
1732                 pDevice->byBBPreEDIndex = 4;
1733                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1734                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x62); //CR206(0xCE)
1735                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -65\n");
1736             } else if(pDevice->byBBPreEDRSSI <= 66)  { //RSSI -66
1737                 if(pDevice->byBBPreEDIndex == 3) break;
1738                 pDevice->byBBPreEDIndex = 3;
1739                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1740                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x51); //CR206(0xCE)
1741                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -66\n");
1742             } else if(pDevice->byBBPreEDRSSI <= 67)  { //RSSI -67
1743                 if(pDevice->byBBPreEDIndex == 2) break;
1744                 pDevice->byBBPreEDIndex = 2;
1745                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1746                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x43); //CR206(0xCE)
1747                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -67\n");
1748             } else if(pDevice->byBBPreEDRSSI <= 68)  { //RSSI -68
1749                 if(pDevice->byBBPreEDIndex == 1) break;
1750                 pDevice->byBBPreEDIndex = 1;
1751                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1752                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x36); //CR206(0xCE)
1753                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -68\n");
1754             } else { //RSSI -69, -70,....
1755                 if(pDevice->byBBPreEDIndex == 0) break;
1756                 pDevice->byBBPreEDIndex = 0;
1757                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1758                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1759                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -69, -70,...\n");
1760             }
1761             break;
1762
1763         case RF_VT3226:
1764         case RF_VT3226D0:
1765             //RobertYu:20060627, update new table
1766
1767             if( bScanning )
1768             {   // need Max sensitivity  //RSSI -69, -70, ...
1769                 if(pDevice->byBBPreEDIndex == 0) break;
1770                 pDevice->byBBPreEDIndex = 0;
1771                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1772                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x24); //CR206(0xCE)
1773                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -69, -70,..\n");
1774                 break;
1775             }
1776
1777             if(pDevice->byBBPreEDRSSI <= 41) { // RSSI 0, -1,-2,....-41
1778                 if(pDevice->byBBPreEDIndex == 22) break;
1779                 pDevice->byBBPreEDIndex = 22;
1780                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1781                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1782                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI 0, -1,-2,..-41\n");
1783             } else if(pDevice->byBBPreEDRSSI <= 42)  { //RSSI -42
1784                 if(pDevice->byBBPreEDIndex == 21) break;
1785                 pDevice->byBBPreEDIndex = 21;
1786                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x36); //CR201(0xC9)
1787                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1788                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -42\n");
1789             } else if(pDevice->byBBPreEDRSSI <= 43)  { //RSSI -43
1790                 if(pDevice->byBBPreEDIndex == 20) break;
1791                 pDevice->byBBPreEDIndex = 20;
1792                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x26); //CR201(0xC9)
1793                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1794                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -43\n");
1795             } else if(pDevice->byBBPreEDRSSI <= 45)  { //RSSI -44, -45
1796                 if(pDevice->byBBPreEDIndex == 19) break;
1797                 pDevice->byBBPreEDIndex = 19;
1798                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x18); //CR201(0xC9)
1799                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1800                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -44,-45\n");
1801             } else if(pDevice->byBBPreEDRSSI <= 47)  { //RSSI -46, -47
1802                 if(pDevice->byBBPreEDIndex == 18) break;
1803                 pDevice->byBBPreEDIndex = 18;
1804                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x11); //CR201(0xC9)
1805                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1806                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -46,-47\n");
1807             } else if(pDevice->byBBPreEDRSSI <= 49)  { //RSSI -48, -49
1808                 if(pDevice->byBBPreEDIndex == 17) break;
1809                 pDevice->byBBPreEDIndex = 17;
1810                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0a); //CR201(0xC9)
1811                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1812                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -48,-49\n");
1813             } else if(pDevice->byBBPreEDRSSI <= 51)  { //RSSI -50, -51
1814                 if(pDevice->byBBPreEDIndex == 16) break;
1815                 pDevice->byBBPreEDIndex = 16;
1816                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x07); //CR201(0xC9)
1817                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1818                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -50,-51\n");
1819             } else if(pDevice->byBBPreEDRSSI <= 53)  { //RSSI -52, -53
1820                 if(pDevice->byBBPreEDIndex == 15) break;
1821                 pDevice->byBBPreEDIndex = 15;
1822                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x04); //CR201(0xC9)
1823                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1824                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -52,-53\n");
1825             } else if(pDevice->byBBPreEDRSSI <= 55)  { //RSSI -54, -55
1826                 if(pDevice->byBBPreEDIndex == 14) break;
1827                 pDevice->byBBPreEDIndex = 14;
1828                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1829                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1830                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -54,-55\n");
1831             } else if(pDevice->byBBPreEDRSSI <= 56)  { //RSSI -56
1832                 if(pDevice->byBBPreEDIndex == 13) break;
1833                 pDevice->byBBPreEDIndex = 13;
1834                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1835                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1836                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -56\n");
1837             } else if(pDevice->byBBPreEDRSSI <= 57)  { //RSSI -57
1838                 if(pDevice->byBBPreEDIndex == 12) break;
1839                 pDevice->byBBPreEDIndex = 12;
1840                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1841                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xB0); //CR206(0xCE)
1842                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -57\n");
1843             } else if(pDevice->byBBPreEDRSSI <= 58)  { //RSSI -58
1844                 if(pDevice->byBBPreEDIndex == 11) break;
1845                 pDevice->byBBPreEDIndex = 11;
1846                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1847                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x70); //CR206(0xCE)
1848                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -58\n");
1849             } else if(pDevice->byBBPreEDRSSI <= 59)  { //RSSI -59
1850                 if(pDevice->byBBPreEDIndex == 10) break;
1851                 pDevice->byBBPreEDIndex = 10;
1852                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1853                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1854                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -59\n");
1855             } else if(pDevice->byBBPreEDRSSI <= 60)  { //RSSI -60
1856                 if(pDevice->byBBPreEDIndex == 9) break;
1857                 pDevice->byBBPreEDIndex = 9;
1858                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1859                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xEA); //CR206(0xCE)
1860                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -60\n");
1861             } else if(pDevice->byBBPreEDRSSI <= 61)  { //RSSI -61
1862                 if(pDevice->byBBPreEDIndex == 8) break;
1863                 pDevice->byBBPreEDIndex = 8;
1864                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1865                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1866                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -61\n");
1867             } else if(pDevice->byBBPreEDRSSI <= 62)  { //RSSI -62
1868                 if(pDevice->byBBPreEDIndex == 7) break;
1869                 pDevice->byBBPreEDIndex = 7;
1870                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1871                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x9C); //CR206(0xCE)
1872                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -62\n");
1873             } else if(pDevice->byBBPreEDRSSI <= 63)  { //RSSI -63
1874                 if(pDevice->byBBPreEDIndex == 6) break;
1875                 pDevice->byBBPreEDIndex = 6;
1876                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1877                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x80); //CR206(0xCE)
1878                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -63\n");
1879             } else if(pDevice->byBBPreEDRSSI <= 64)  { //RSSI -64
1880                 if(pDevice->byBBPreEDIndex == 5) break;
1881                 pDevice->byBBPreEDIndex = 5;
1882                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1883                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x68); //CR206(0xCE)
1884                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -64\n");
1885             } else if(pDevice->byBBPreEDRSSI <= 65)  { //RSSI -65
1886                 if(pDevice->byBBPreEDIndex == 4) break;
1887                 pDevice->byBBPreEDIndex = 4;
1888                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1889                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x52); //CR206(0xCE)
1890                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -65\n");
1891             } else if(pDevice->byBBPreEDRSSI <= 66)  { //RSSI -66
1892                 if(pDevice->byBBPreEDIndex == 3) break;
1893                 pDevice->byBBPreEDIndex = 3;
1894                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1895                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x43); //CR206(0xCE)
1896                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -66\n");
1897             } else if(pDevice->byBBPreEDRSSI <= 67)  { //RSSI -67
1898                 if(pDevice->byBBPreEDIndex == 2) break;
1899                 pDevice->byBBPreEDIndex = 2;
1900                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1901                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x36); //CR206(0xCE)
1902                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -67\n");
1903             } else if(pDevice->byBBPreEDRSSI <= 68)  { //RSSI -68
1904                 if(pDevice->byBBPreEDIndex == 1) break;
1905                 pDevice->byBBPreEDIndex = 1;
1906                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1907                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x2D); //CR206(0xCE)
1908                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -68\n");
1909             } else { //RSSI -69, -70, ...
1910                 if(pDevice->byBBPreEDIndex == 0) break;
1911                 pDevice->byBBPreEDIndex = 0;
1912                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1913                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x24); //CR206(0xCE)
1914                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -69, -70,..\n");
1915             }
1916             break;
1917
1918         case RF_VT3342A0: //RobertYu:20060627, testing table
1919             if( bScanning )
1920             {   // need Max sensitivity  //RSSI -67, -68, ...
1921                 if(pDevice->byBBPreEDIndex == 0) break;
1922                 pDevice->byBBPreEDIndex = 0;
1923                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1924                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x38); //CR206(0xCE)
1925                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -67, -68,..\n");
1926                 break;
1927             }
1928
1929             if(pDevice->byBBPreEDRSSI <= 41) { // RSSI 0, -1,-2,....-41
1930                 if(pDevice->byBBPreEDIndex == 20) break;
1931                 pDevice->byBBPreEDIndex = 20;
1932                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1933                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1934                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI 0, -1,-2,..-41\n");
1935             } else if(pDevice->byBBPreEDRSSI <= 42)  { //RSSI -42
1936                 if(pDevice->byBBPreEDIndex == 19) break;
1937                 pDevice->byBBPreEDIndex = 19;
1938                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x36); //CR201(0xC9)
1939                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1940                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -42\n");
1941             } else if(pDevice->byBBPreEDRSSI <= 43)  { //RSSI -43
1942                 if(pDevice->byBBPreEDIndex == 18) break;
1943                 pDevice->byBBPreEDIndex = 18;
1944                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x26); //CR201(0xC9)
1945                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1946                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -43\n");
1947             } else if(pDevice->byBBPreEDRSSI <= 45)  { //RSSI -44, -45
1948                 if(pDevice->byBBPreEDIndex == 17) break;
1949                 pDevice->byBBPreEDIndex = 17;
1950                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x18); //CR201(0xC9)
1951                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1952                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -44,-45\n");
1953             } else if(pDevice->byBBPreEDRSSI <= 47)  { //RSSI -46, -47
1954                 if(pDevice->byBBPreEDIndex == 16) break;
1955                 pDevice->byBBPreEDIndex = 16;
1956                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x11); //CR201(0xC9)
1957                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1958                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -46,-47\n");
1959             } else if(pDevice->byBBPreEDRSSI <= 49)  { //RSSI -48, -49
1960                 if(pDevice->byBBPreEDIndex == 15) break;
1961                 pDevice->byBBPreEDIndex = 15;
1962                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0a); //CR201(0xC9)
1963                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1964                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -48,-49\n");
1965             } else if(pDevice->byBBPreEDRSSI <= 51)  { //RSSI -50, -51
1966                 if(pDevice->byBBPreEDIndex == 14) break;
1967                 pDevice->byBBPreEDIndex = 14;
1968                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x07); //CR201(0xC9)
1969                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1970                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -50,-51\n");
1971             } else if(pDevice->byBBPreEDRSSI <= 53)  { //RSSI -52, -53
1972                 if(pDevice->byBBPreEDIndex == 13) break;
1973                 pDevice->byBBPreEDIndex = 13;
1974                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x04); //CR201(0xC9)
1975                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1976                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -52,-53\n");
1977             } else if(pDevice->byBBPreEDRSSI <= 55)  { //RSSI -54, -55
1978                 if(pDevice->byBBPreEDIndex == 12) break;
1979                 pDevice->byBBPreEDIndex = 12;
1980                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1981                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1982                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -54,-55\n");
1983             } else if(pDevice->byBBPreEDRSSI <= 56)  { //RSSI -56
1984                 if(pDevice->byBBPreEDIndex == 11) break;
1985                 pDevice->byBBPreEDIndex = 11;
1986                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1987                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1988                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -56\n");
1989             } else if(pDevice->byBBPreEDRSSI <= 57)  { //RSSI -57
1990                 if(pDevice->byBBPreEDIndex == 10) break;
1991                 pDevice->byBBPreEDIndex = 10;
1992                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1993                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xB0); //CR206(0xCE)
1994                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -57\n");
1995             } else if(pDevice->byBBPreEDRSSI <= 58)  { //RSSI -58
1996                 if(pDevice->byBBPreEDIndex == 9) break;
1997                 pDevice->byBBPreEDIndex = 9;
1998                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1999                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x70); //CR206(0xCE)
2000                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -58\n");
2001             } else if(pDevice->byBBPreEDRSSI <= 59)  { //RSSI -59
2002                 if(pDevice->byBBPreEDIndex == 8) break;
2003                 pDevice->byBBPreEDIndex = 8;
2004                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
2005                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
2006                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -59\n");
2007             } else if(pDevice->byBBPreEDRSSI <= 60)  { //RSSI -60
2008                 if(pDevice->byBBPreEDIndex == 7) break;
2009                 pDevice->byBBPreEDIndex = 7;
2010                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
2011                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xEA); //CR206(0xCE)
2012                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -60\n");
2013             } else if(pDevice->byBBPreEDRSSI <= 61)  { //RSSI -61
2014                 if(pDevice->byBBPreEDIndex == 6) break;
2015                 pDevice->byBBPreEDIndex = 6;
2016                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
2017                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
2018                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -61\n");
2019             } else if(pDevice->byBBPreEDRSSI <= 62)  { //RSSI -62
2020                 if(pDevice->byBBPreEDIndex == 5) break;
2021                 pDevice->byBBPreEDIndex = 5;
2022                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
2023                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x9C); //CR206(0xCE)
2024                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -62\n");
2025             } else if(pDevice->byBBPreEDRSSI <= 63)  { //RSSI -63
2026                 if(pDevice->byBBPreEDIndex == 4) break;
2027                 pDevice->byBBPreEDIndex = 4;
2028                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
2029                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x80); //CR206(0xCE)
2030                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -63\n");
2031             } else if(pDevice->byBBPreEDRSSI <= 64)  { //RSSI -64
2032                 if(pDevice->byBBPreEDIndex == 3) break;
2033                 pDevice->byBBPreEDIndex = 3;
2034                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
2035                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x68); //CR206(0xCE)
2036                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -64\n");
2037             } else if(pDevice->byBBPreEDRSSI <= 65)  { //RSSI -65
2038                 if(pDevice->byBBPreEDIndex == 2) break;
2039                 pDevice->byBBPreEDIndex = 2;
2040                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
2041                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x52); //CR206(0xCE)
2042                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -65\n");
2043             } else if(pDevice->byBBPreEDRSSI <= 66)  { //RSSI -66
2044                 if(pDevice->byBBPreEDIndex == 1) break;
2045                 pDevice->byBBPreEDIndex = 1;
2046                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
2047                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x43); //CR206(0xCE)
2048                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -66\n");
2049             } else { //RSSI -67, -68, ...
2050                 if(pDevice->byBBPreEDIndex == 0) break;
2051                 pDevice->byBBPreEDIndex = 0;
2052                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
2053                 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x38); //CR206(0xCE)
2054                 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"            pDevice->byBBPreEDRSSI -67, -68,..\n");
2055             }
2056             break;
2057
2058     }
2059
2060 }
2061