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