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