baseband.c revision 50fcfe57ee629c24f85618883c0eb09e3630339a
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 -------------------------*/
51static 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
69BYTE 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
137BYTE 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
399BYTE 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
658const WORD awcFrameTime[MAX_RATE] =
659{10, 20, 55, 110, 24, 36, 48, 72, 96, 144, 192, 216};
660
661/*---------------------  Static Functions  --------------------------*/
662
663/*
664static
665ULONG
666s_ulGetLowSQ3(PSDevice pDevice);
667
668static
669ULONG
670s_ulGetRatio(PSDevice pDevice);
671
672static
673void
674s_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 */
692UINT
693BBuGetFrameTime (
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 */
759VOID
760BBvCaculateParameter (
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 */
932VOID
933BBvSetAntennaMode (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 */
992BOOL
993BBbVT3184Init (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  }
1039else {
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 */
1188void 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 */
1241void 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 */
1277VOID
1278BBvSetShortSlotTime (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
1298VOID 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 */
1327VOID
1328BBvSoftwareReset (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 */
1348VOID
1349BBvSetDeepSleep (PSDevice pDevice)
1350{
1351    ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0c, 0x17);//CR12
1352    ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0D, 0xB9);//CR13
1353}
1354
1355VOID
1356BBvExitDeepSleep (PSDevice pDevice)
1357{
1358    ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0C, 0x00);//CR12
1359    ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0D, 0x01);//CR13
1360}
1361
1362
1363static
1364ULONG
1365s_ulGetLowSQ3(PSDevice pDevice)
1366{
1367int   ii;
1368ULONG ulSQ3 = 0;
1369ULONG 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
1387static
1388ULONG
1389s_ulGetRatio (PSDevice pDevice)
1390{
1391int     ii,jj;
1392ULONG   ulRatio = 0;
1393ULONG   ulMaxPacket;
1394ULONG   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
1419static
1420void
1421s_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
1448VOID
1449BBvAntennaDiversity (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
1579VOID
1580TimerSQ3CallBack (
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
1621VOID
1622TimerSQ3Tmax3CallBack (
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
1653VOID
1654BBvUpdatePreEDThreshold(
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
2105