audit: complex interfield comparison helper
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / drivers / staging / vt6656 / baseband.c
blob06f27f624db4c5fb47d204c00af00f1f8614ff72
1 /*
2 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
3 * All rights reserved.
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.
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.
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.
20 * File: baseband.c
22 * Purpose: Implement functions to access baseband
24 * Author: Jerry Chen
26 * Date: Jun. 5, 2002
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
35 * Revision History:
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"
50 /*--------------------- Static Definitions -------------------------*/
51 static int msglevel =MSG_LEVEL_INFO;
52 //static int msglevel =MSG_LEVEL_DEBUG;
54 /*--------------------- Static Classes ----------------------------*/
56 /*--------------------- Static Variables --------------------------*/
58 /*--------------------- Static Functions --------------------------*/
60 /*--------------------- Export Variables --------------------------*/
62 /*--------------------- Static Definitions -------------------------*/
64 /*--------------------- Static Classes ----------------------------*/
66 /*--------------------- Static Variables --------------------------*/
69 BYTE abyVT3184_AGC[] = {
70 0x00, //0
71 0x00, //1
72 0x02, //2
73 0x02, //3 //RobertYu:20060505, 0x04, //3
74 0x04, //4
75 0x04, //5 //RobertYu:20060505, 0x06, //5
76 0x06, //6
77 0x06, //7
78 0x08, //8
79 0x08, //9
80 0x0A, //A
81 0x0A, //B
82 0x0C, //C
83 0x0C, //D
84 0x0E, //E
85 0x0E, //F
86 0x10, //10
87 0x10, //11
88 0x12, //12
89 0x12, //13
90 0x14, //14
91 0x14, //15
92 0x16, //16
93 0x16, //17
94 0x18, //18
95 0x18, //19
96 0x1A, //1A
97 0x1A, //1B
98 0x1C, //1C
99 0x1C, //1D
100 0x1E, //1E
101 0x1E, //1F
102 0x20, //20
103 0x20, //21
104 0x22, //22
105 0x22, //23
106 0x24, //24
107 0x24, //25
108 0x26, //26
109 0x26, //27
110 0x28, //28
111 0x28, //29
112 0x2A, //2A
113 0x2A, //2B
114 0x2C, //2C
115 0x2C, //2D
116 0x2E, //2E
117 0x2E, //2F
118 0x30, //30
119 0x30, //31
120 0x32, //32
121 0x32, //33
122 0x34, //34
123 0x34, //35
124 0x36, //36
125 0x36, //37
126 0x38, //38
127 0x38, //39
128 0x3A, //3A
129 0x3A, //3B
130 0x3C, //3C
131 0x3C, //3D
132 0x3E, //3E
133 0x3E //3F
137 BYTE abyVT3184_AL2230[] = {
138 0x31,//00
139 0x00,
140 0x00,
141 0x00,
142 0x00,
143 0x80,
144 0x00,
145 0x00,
146 0x70,
147 0x45,//tx //0x64 for FPGA
148 0x2A,
149 0x76,
150 0x00,
151 0x00,
152 0x80,
153 0x00,
154 0x00,//10
155 0x00,
156 0x00,
157 0x00,
158 0x00,
159 0x00,
160 0x00,
161 0x00,
162 0x00,
163 0x00,
164 0x00,
165 0x8e, //RobertYu:20060522, //0x8d,
166 0x0a, //RobertYu:20060515, //0x09,
167 0x00,
168 0x00,
169 0x00,
170 0x00,//20
171 0x00,
172 0x00,
173 0x00,
174 0x00,
175 0x4a,
176 0x00,
177 0x00,
178 0x00,
179 0x00,
180 0x00,
181 0x00,
182 0x00,
183 0x4a,
184 0x00,
185 0x0c, //RobertYu:20060522, //0x10,
186 0x26,//30
187 0x5b,
188 0x00,
189 0x00,
190 0x00,
191 0x00,
192 0xaa,
193 0xaa,
194 0xff,
195 0xff,
196 0x79,
197 0x00,
198 0x00,
199 0x0b,
200 0x48,
201 0x04,
202 0x00,//40
203 0x08,
204 0x00,
205 0x08,
206 0x08,
207 0x14,
208 0x05,
209 0x09,
210 0x00,
211 0x00,
212 0x00,
213 0x00,
214 0x09,
215 0x73,
216 0x00,
217 0xc5,
218 0x00,//50 //RobertYu:20060505, //0x15,//50
219 0x19,
220 0x00,
221 0x00,
222 0x00,
223 0x00,
224 0x00,
225 0x00,
226 0x00,
227 0xd0, //RobertYu:20060505, //0xb0,
228 0x00,
229 0x00,
230 0x00,
231 0x00,
232 0x00,
233 0x00,
234 0xe4,//60
235 0x80,
236 0x00,
237 0x00,
238 0x00,
239 0x00,
240 0x98,
241 0x0a,
242 0x00,
243 0x00,
244 0x00,
245 0x00,
246 0x00, //0x80 for FPGA
247 0x03,
248 0x01,
249 0x00,
250 0x00,//70
251 0x00,
252 0x00,
253 0x00,
254 0x00,
255 0x00,
256 0x00,
257 0x00,
258 0x00,
259 0x00,
260 0x00,
261 0x00,
262 0x00,
263 0x00,
264 0x00,
265 0x00,
266 0x8c,//80
267 0x01,
268 0x09,
269 0x00,
270 0x00,
271 0x00,
272 0x00,
273 0x00,
274 0x08,
275 0x00,
276 0x1f, //RobertYu:20060516, //0x0f,
277 0xb7,
278 0x88,
279 0x47,
280 0xaa,
281 0x00, //RobertYu:20060505, //0x02,
282 0x20,//90 //RobertYu:20060505, //0x22,//90
283 0x00,
284 0x00,
285 0x00,
286 0x00,
287 0x00,
288 0x00,
289 0xeb,
290 0x00,
291 0x00,
292 0x00,
293 0x00,
294 0x00,
295 0x00,
296 0x00,
297 0x01,
298 0x00,//a0
299 0x00,
300 0x00,
301 0x00,
302 0x00,
303 0x00,
304 0x10,
305 0x00,
306 0x18,
307 0x00,
308 0x00,
309 0x00,
310 0x00,
311 0x15, //RobertYu:20060516, //0x00,
312 0x00,
313 0x18,
314 0x38,//b0
315 0x30,
316 0x00,
317 0x00,
318 0xff,
319 0x0f,
320 0xe4,
321 0xe2,
322 0x00,
323 0x00,
324 0x00,
325 0x03,
326 0x01,
327 0x00,
328 0x00,
329 0x00,
330 0x18,//c0
331 0x20,
332 0x07,
333 0x18,
334 0xff,
335 0xff, //RobertYu:20060509, //0x2c,
336 0x0e, //RobertYu:20060530, //0x0c,
337 0x0a,
338 0x0e,
339 0x00, //RobertYu:20060505, //0x01,
340 0x82, //RobertYu:20060516, //0x8f,
341 0xa7,
342 0x3c,
343 0x10,
344 0x30, //RobertYu:20060627, //0x0b,
345 0x05, //RobertYu:20060516, //0x25,
346 0x40,//d0
347 0x12,
348 0x00,
349 0x00,
350 0x10,
351 0x28,
352 0x80,
353 0x2A,
354 0x00,
355 0x00,
356 0x00,
357 0x00,
358 0x00,
359 0x00,
360 0x00,
361 0x00,
362 0x00,//e0
363 0xf3, //RobertYu:20060516, //0xd3,
364 0x00,
365 0x00,
366 0x00,
367 0x10,
368 0x00,
369 0x12, //RobertYu:20060627, //0x10,
370 0x00,
371 0xf4,
372 0x00,
373 0xff,
374 0x79,
375 0x20,
376 0x30,
377 0x05, //RobertYu:20060516, //0x0c,
378 0x00,//f0
379 0x3e,
380 0x00,
381 0x00,
382 0x00,
383 0x00,
384 0x00,
385 0x00,
386 0x00,
387 0x00,
388 0x00,
389 0x00,
390 0x00,
391 0x00,
392 0x00,
393 0x00
398 //{{RobertYu:20060515, new BB setting for VT3226D0
399 BYTE abyVT3184_VT3226D0[] = {
400 0x31,//00
401 0x00,
402 0x00,
403 0x00,
404 0x00,
405 0x80,
406 0x00,
407 0x00,
408 0x70,
409 0x45,//tx //0x64 for FPGA
410 0x2A,
411 0x76,
412 0x00,
413 0x00,
414 0x80,
415 0x00,
416 0x00,//10
417 0x00,
418 0x00,
419 0x00,
420 0x00,
421 0x00,
422 0x00,
423 0x00,
424 0x00,
425 0x00,
426 0x00,
427 0x8e, //RobertYu:20060525, //0x8d,
428 0x0a, //RobertYu:20060515, //0x09,
429 0x00,
430 0x00,
431 0x00,
432 0x00,//20
433 0x00,
434 0x00,
435 0x00,
436 0x00,
437 0x4a,
438 0x00,
439 0x00,
440 0x00,
441 0x00,
442 0x00,
443 0x00,
444 0x00,
445 0x4a,
446 0x00,
447 0x0c, //RobertYu:20060525, //0x10,
448 0x26,//30
449 0x5b,
450 0x00,
451 0x00,
452 0x00,
453 0x00,
454 0xaa,
455 0xaa,
456 0xff,
457 0xff,
458 0x79,
459 0x00,
460 0x00,
461 0x0b,
462 0x48,
463 0x04,
464 0x00,//40
465 0x08,
466 0x00,
467 0x08,
468 0x08,
469 0x14,
470 0x05,
471 0x09,
472 0x00,
473 0x00,
474 0x00,
475 0x00,
476 0x09,
477 0x73,
478 0x00,
479 0xc5,
480 0x00,//50 //RobertYu:20060505, //0x15,//50
481 0x19,
482 0x00,
483 0x00,
484 0x00,
485 0x00,
486 0x00,
487 0x00,
488 0x00,
489 0xd0, //RobertYu:20060505, //0xb0,
490 0x00,
491 0x00,
492 0x00,
493 0x00,
494 0x00,
495 0x00,
496 0xe4,//60
497 0x80,
498 0x00,
499 0x00,
500 0x00,
501 0x00,
502 0x98,
503 0x0a,
504 0x00,
505 0x00,
506 0x00,
507 0x00,
508 0x00, //0x80 for FPGA
509 0x03,
510 0x01,
511 0x00,
512 0x00,//70
513 0x00,
514 0x00,
515 0x00,
516 0x00,
517 0x00,
518 0x00,
519 0x00,
520 0x00,
521 0x00,
522 0x00,
523 0x00,
524 0x00,
525 0x00,
526 0x00,
527 0x00,
528 0x8c,//80
529 0x01,
530 0x09,
531 0x00,
532 0x00,
533 0x00,
534 0x00,
535 0x00,
536 0x08,
537 0x00,
538 0x1f, //RobertYu:20060515, //0x0f,
539 0xb7,
540 0x88,
541 0x47,
542 0xaa,
543 0x00, //RobertYu:20060505, //0x02,
544 0x20,//90 //RobertYu:20060505, //0x22,//90
545 0x00,
546 0x00,
547 0x00,
548 0x00,
549 0x00,
550 0x00,
551 0xeb,
552 0x00,
553 0x00,
554 0x00,
555 0x00,
556 0x00,
557 0x00,
558 0x00,
559 0x01,
560 0x00,//a0
561 0x00,
562 0x00,
563 0x00,
564 0x00,
565 0x00,
566 0x10,
567 0x00,
568 0x18,
569 0x00,
570 0x00,
571 0x00,
572 0x00,
573 0x00,
574 0x00,
575 0x18,
576 0x38,//b0
577 0x30,
578 0x00,
579 0x00,
580 0xff,
581 0x0f,
582 0xe4,
583 0xe2,
584 0x00,
585 0x00,
586 0x00,
587 0x03,
588 0x01,
589 0x00,
590 0x00,
591 0x00,
592 0x18,//c0
593 0x20,
594 0x07,
595 0x18,
596 0xff,
597 0xff, //RobertYu:20060509, //0x2c,
598 0x10, //RobertYu:20060525, //0x0c,
599 0x0a,
600 0x0e,
601 0x00, //RobertYu:20060505, //0x01,
602 0x84, //RobertYu:20060525, //0x8f,
603 0xa7,
604 0x3c,
605 0x10,
606 0x24, //RobertYu:20060627, //0x18,
607 0x05, //RobertYu:20060515, //0x25,
608 0x40,//d0
609 0x12,
610 0x00,
611 0x00,
612 0x10,
613 0x28,
614 0x80,
615 0x2A,
616 0x00,
617 0x00,
618 0x00,
619 0x00,
620 0x00,
621 0x00,
622 0x00,
623 0x00,
624 0x00,//e0
625 0xf3, //RobertYu:20060515, //0xd3,
626 0x00,
627 0x00,
628 0x00,
629 0x10,
630 0x00,
631 0x10, //RobertYu:20060627, //0x0e,
632 0x00,
633 0xf4,
634 0x00,
635 0xff,
636 0x79,
637 0x20,
638 0x30,
639 0x08, //RobertYu:20060515, //0x0c,
640 0x00,//f0
641 0x3e,
642 0x00,
643 0x00,
644 0x00,
645 0x00,
646 0x00,
647 0x00,
648 0x00,
649 0x00,
650 0x00,
651 0x00,
652 0x00,
653 0x00,
654 0x00,
655 0x00,
658 const WORD awcFrameTime[MAX_RATE] =
659 {10, 20, 55, 110, 24, 36, 48, 72, 96, 144, 192, 216};
661 /*--------------------- Static Functions --------------------------*/
664 static
665 unsigned long
666 s_ulGetLowSQ3(PSDevice pDevice);
668 static
669 unsigned long
670 s_ulGetRatio(PSDevice pDevice);
672 static
673 void
674 s_vClearSQ3Value(PSDevice pDevice);
677 /*--------------------- Export Variables --------------------------*/
679 * Description: Calculate data frame transmitting time
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:
689 * Return Value: FrameTime
692 unsigned int
693 BBuGetFrameTime (
694 BYTE byPreambleType,
695 BYTE byPktType,
696 unsigned int cbFrameLength,
697 WORD wRate
700 unsigned int uFrameTime;
701 unsigned int uPreamble;
702 unsigned int uTmp;
703 unsigned int uRateIdx = (unsigned int)wRate;
704 unsigned int uRate = 0;
707 if (uRateIdx > RATE_54M) {
708 ASSERT(0);
709 return 0;
712 uRate = (unsigned int)awcFrameTime[uRateIdx];
714 if (uRateIdx <= 3) { //CCK mode
716 if (byPreambleType == 1) {//Short
717 uPreamble = 96;
718 } else {
719 uPreamble = 192;
721 uFrameTime = (cbFrameLength * 80) / uRate; //?????
722 uTmp = (uFrameTime * uRate) / 80;
723 if (cbFrameLength != uTmp) {
724 uFrameTime ++;
727 return (uPreamble + uFrameTime);
729 else {
730 uFrameTime = (cbFrameLength * 8 + 22) / uRate; //????????
731 uTmp = ((uFrameTime * uRate) - 22) / 8;
732 if(cbFrameLength != uTmp) {
733 uFrameTime ++;
735 uFrameTime = uFrameTime * 4; //???????
736 if(byPktType != PK_TYPE_11A) {
737 uFrameTime += 6;
739 return (20 + uFrameTime); //??????
744 * Description: Caculate Length, Service, and Signal fields of Phy for Tx
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
756 * Return Value: none
759 void
760 BBvCaculateParameter (
761 PSDevice pDevice,
762 unsigned int cbFrameLength,
763 WORD wRate,
764 BYTE byPacketType,
765 PWORD pwPhyLen,
766 PBYTE pbyPhySrv,
767 PBYTE pbyPhySgn
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;
777 cbBitCount = cbFrameLength * 8;
778 bExtBit = FALSE;
780 switch (wRate) {
781 case RATE_1M :
782 cbUsCount = cbBitCount;
783 *pbyPhySgn = 0x00;
784 break;
786 case RATE_2M :
787 cbUsCount = cbBitCount / 2;
788 if (byPreambleType == 1)
789 *pbyPhySgn = 0x09;
790 else // long preamble
791 *pbyPhySgn = 0x01;
792 break;
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;
807 case RATE_11M :
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;
818 if (byPreambleType == 1)
819 *pbyPhySgn = 0x0b;
820 else // long preamble
821 *pbyPhySgn = 0x03;
822 break;
824 case RATE_6M :
825 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
826 *pbyPhySgn = 0x9B; //1001 1011
828 else {//11g, 2.4GHZ
829 *pbyPhySgn = 0x8B; //1000 1011
831 break;
833 case RATE_9M :
834 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
835 *pbyPhySgn = 0x9F; //1001 1111
837 else {//11g, 2.4GHZ
838 *pbyPhySgn = 0x8F; //1000 1111
840 break;
842 case RATE_12M :
843 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
844 *pbyPhySgn = 0x9A; //1001 1010
846 else {//11g, 2.4GHZ
847 *pbyPhySgn = 0x8A; //1000 1010
849 break;
851 case RATE_18M :
852 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
853 *pbyPhySgn = 0x9E; //1001 1110
855 else {//11g, 2.4GHZ
856 *pbyPhySgn = 0x8E; //1000 1110
858 break;
860 case RATE_24M :
861 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
862 *pbyPhySgn = 0x99; //1001 1001
864 else {//11g, 2.4GHZ
865 *pbyPhySgn = 0x89; //1000 1001
867 break;
869 case RATE_36M :
870 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
871 *pbyPhySgn = 0x9D; //1001 1101
873 else {//11g, 2.4GHZ
874 *pbyPhySgn = 0x8D; //1000 1101
876 break;
878 case RATE_48M :
879 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
880 *pbyPhySgn = 0x98; //1001 1000
882 else {//11g, 2.4GHZ
883 *pbyPhySgn = 0x88; //1000 1000
885 break;
887 case RATE_54M :
888 if (byPacketType == PK_TYPE_11A) {//11a, 5GHZ
889 *pbyPhySgn = 0x9C; //1001 1100
891 else {//11g, 2.4GHZ
892 *pbyPhySgn = 0x8C; //1000 1100
894 break;
896 default :
897 if (byPacketType == PK_TYPE_11A) {//11a, 5GHZ
898 *pbyPhySgn = 0x9C; //1001 1100
900 else {//11g, 2.4GHZ
901 *pbyPhySgn = 0x8C; //1000 1100
903 break;
906 if (byPacketType == PK_TYPE_11B) {
907 *pbyPhySrv = 0x00;
908 if (bExtBit)
909 *pbyPhySrv = *pbyPhySrv | 0x80;
910 *pwPhyLen = (WORD) cbUsCount;
912 else {
913 *pbyPhySrv = 0x00;
914 *pwPhyLen = (WORD)cbFrameLength;
920 * Description: Set Antenna mode
922 * Parameters:
923 * In:
924 * pDevice - Device Structure
925 * byAntennaMode - Antenna Mode
926 * Out:
927 * none
929 * Return Value: none
932 void
933 BBvSetAntennaMode (PSDevice pDevice, BYTE byAntennaMode)
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;
949 CONTROLnsRequestOut(pDevice,
950 MESSAGE_TYPE_SET_ANTMD,
951 (WORD) byAntennaMode,
954 NULL);
958 * Description: Set Antenna mode
960 * Parameters:
961 * In:
962 * pDevice - Device Structure
963 * byAntennaMode - Antenna Mode
964 * Out:
965 * none
967 * Return Value: none
971 BOOL BBbVT3184Init(PSDevice pDevice)
973 int ntStatus;
974 WORD wLength;
975 PBYTE pbyAddr;
976 PBYTE pbyAgc;
977 WORD wLengthAgc;
978 BYTE abyArray[256];
980 ntStatus = CONTROLnsRequestIn(pDevice,
981 MESSAGE_TYPE_READ,
983 MESSAGE_REQUEST_EEPROM,
984 EEP_MAX_CONTEXT_SIZE,
985 pDevice->abyEEPROM);
986 if (ntStatus != STATUS_SUCCESS) {
987 return FALSE;
991 // if ((pDevice->abyEEPROM[EEP_OFS_RADIOCTL]&0x06)==0x04)
992 // return FALSE;
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");
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");
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");
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);
1023 if ( !pDevice->bZoneRegExist ) {
1024 pDevice->byZoneType = pDevice->abyEEPROM[EEP_OFS_ZONETYPE];
1026 pDevice->byRFType = pDevice->abyEEPROM[EEP_OFS_RFTYPE];
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);
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);
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;
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);
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;
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;
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);
1077 pDevice->abyBBVGA[0] = 0x20; //RobertYu:20060104, reguest by Jack
1078 pDevice->abyBBVGA[1] = 0x10;
1079 pDevice->abyBBVGA[2] = 0x0;
1080 pDevice->abyBBVGA[3] = 0x0;
1081 pDevice->ldBmThreshold[0] = -70;
1082 pDevice->ldBmThreshold[1] = -48;
1083 pDevice->ldBmThreshold[2] = 0;
1084 pDevice->ldBmThreshold[3] = 0;
1085 // Fix VT3226 DFC system timing issue
1086 MACvRegBitsOn(pDevice, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT);
1087 //}}
1088 //{{RobertYu:20060609
1089 } else if ( (pDevice->byRFType == RF_VT3342A0) ) {
1090 pDevice->byBBRxConf = abyVT3184_VT3226D0[10];
1091 wLength = sizeof(abyVT3184_VT3226D0);
1092 pbyAddr = abyVT3184_VT3226D0;
1093 pbyAgc = abyVT3184_AGC;
1094 wLengthAgc = sizeof(abyVT3184_AGC);
1096 pDevice->abyBBVGA[0] = 0x20;
1097 pDevice->abyBBVGA[1] = 0x10;
1098 pDevice->abyBBVGA[2] = 0x0;
1099 pDevice->abyBBVGA[3] = 0x0;
1100 pDevice->ldBmThreshold[0] = -70;
1101 pDevice->ldBmThreshold[1] = -48;
1102 pDevice->ldBmThreshold[2] = 0;
1103 pDevice->ldBmThreshold[3] = 0;
1104 // Fix VT3226 DFC system timing issue
1105 MACvRegBitsOn(pDevice, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT);
1106 //}}
1107 } else {
1108 return TRUE;
1111 memcpy(abyArray, pbyAddr, wLength);
1112 CONTROLnsRequestOut(pDevice,
1113 MESSAGE_TYPE_WRITE,
1115 MESSAGE_REQUEST_BBREG,
1116 wLength,
1117 abyArray
1120 memcpy(abyArray, pbyAgc, wLengthAgc);
1121 CONTROLnsRequestOut(pDevice,
1122 MESSAGE_TYPE_WRITE,
1124 MESSAGE_REQUEST_BBAGC,
1125 wLengthAgc,
1126 abyArray
1130 if ((pDevice->byRFType == RF_VT3226) || //RobertYu:20051116, 20060111 remove VT3226D0
1131 (pDevice->byRFType == RF_VT3342A0) //RobertYu:20060609
1133 ControlvWriteByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_ITRTMSET,0x23);
1134 MACvRegBitsOn(pDevice,MAC_REG_PAPEDELAY,0x01);
1136 else if (pDevice->byRFType == RF_VT3226D0)
1138 ControlvWriteByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_ITRTMSET,0x11);
1139 MACvRegBitsOn(pDevice,MAC_REG_PAPEDELAY,0x01);
1143 ControlvWriteByte(pDevice,MESSAGE_REQUEST_BBREG,0x04,0x7F);
1144 ControlvWriteByte(pDevice,MESSAGE_REQUEST_BBREG,0x0D,0x01);
1146 RFbRFTableDownload(pDevice);
1147 return TRUE;//ntStatus;
1152 * Description: Turn on BaseBand Loopback mode
1154 * Parameters:
1155 * In:
1156 * pDevice - Device Structure
1158 * Out:
1159 * none
1161 * Return Value: none
1164 void BBvLoopbackOn (PSDevice pDevice)
1166 BYTE byData;
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);
1174 //CR 88 = 0x02(CCK), 0x03(OFDM)
1175 ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x88, &pDevice->byBBCR88);//CR136
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
1184 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x88, 0x02);//CR239
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
1193 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x88, 0x03);//CR239
1196 //CR14 = 0x00
1197 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0E, 0);//CR14
1199 // Disable TX_IQUN
1200 ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x09, &pDevice->byBBCR09);
1201 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x09, (BYTE)(pDevice->byBBCR09 & 0xDE));
1205 * Description: Turn off BaseBand Loopback mode
1207 * Parameters:
1208 * In:
1209 * pDevice - Device Structure
1211 * Out:
1212 * none
1214 * Return Value: none
1217 void BBvLoopbackOff (PSDevice pDevice)
1219 BYTE byData;
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
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
1234 ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x0E, &byData);//CR14
1235 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0E, (BYTE)(byData | 0x80));//CR14
1241 * Description: Set ShortSlotTime mode
1243 * Parameters:
1244 * In:
1245 * pDevice - Device Structure
1246 * Out:
1247 * none
1249 * Return Value: none
1252 void
1253 BBvSetShortSlotTime (PSDevice pDevice)
1255 BYTE byBBVGA=0;
1257 if (pDevice->bShortSlotTime)
1258 pDevice->byBBRxConf &= 0xDF;//1101 1111
1259 else
1260 pDevice->byBBRxConf |= 0x20;//0010 0000
1262 ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0xE7, &byBBVGA);
1263 if (byBBVGA == pDevice->abyBBVGA[0])
1264 pDevice->byBBRxConf |= 0x20;//0010 0000
1266 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0A, pDevice->byBBRxConf);
1270 void BBvSetVGAGainOffset(PSDevice pDevice, BYTE byData)
1273 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xE7, byData);
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 */
1281 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0A, pDevice->byBBRxConf);//CR10
1286 * Description: Baseband SoftwareReset
1288 * Parameters:
1289 * In:
1290 * dwIoBase - I/O base address
1291 * Out:
1292 * none
1294 * Return Value: none
1297 void
1298 BBvSoftwareReset (PSDevice pDevice)
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);
1307 * Description: BBvSetDeepSleep
1309 * Parameters:
1310 * In:
1311 * pDevice - Device Structure
1312 * Out:
1313 * none
1315 * Return Value: none
1318 void
1319 BBvSetDeepSleep (PSDevice pDevice)
1321 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0c, 0x17);//CR12
1322 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0D, 0xB9);//CR13
1325 void
1326 BBvExitDeepSleep (PSDevice pDevice)
1328 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0C, 0x00);//CR12
1329 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0D, 0x01);//CR13
1333 static unsigned long s_ulGetLowSQ3(PSDevice pDevice)
1335 int ii;
1336 unsigned long ulSQ3 = 0;
1337 unsigned long ulMaxPacket;
1339 ulMaxPacket = pDevice->aulPktNum[RATE_54M];
1340 if (pDevice->aulPktNum[RATE_54M] != 0)
1341 ulSQ3 = pDevice->aulSQ3Val[RATE_54M] / pDevice->aulPktNum[RATE_54M];
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];
1349 return ulSQ3;
1352 static unsigned long s_ulGetRatio(PSDevice pDevice)
1354 int ii, jj;
1355 unsigned long ulRatio = 0;
1356 unsigned long ulMaxPacket;
1357 unsigned long ulPacketNum;
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;
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];
1376 return ulRatio;
1380 static
1381 void
1382 s_vClearSQ3Value (PSDevice pDevice)
1384 int ii;
1385 pDevice->uDiversityCnt = 0;
1387 for ( ii=RATE_1M;ii<MAX_RATE;ii++) {
1388 pDevice->aulPktNum[ii] = 0;
1389 pDevice->aulSQ3Val[ii] = 0;
1395 * Description: Antenna Diversity
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
1405 * Return Value: none
1409 void
1410 BBvAntennaDiversity (PSDevice pDevice, BYTE byRxRate, BYTE bySQ3)
1413 pDevice->uDiversityCnt++;
1414 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pDevice->uDiversityCnt = %d\n", (int)pDevice->uDiversityCnt);
1416 if (byRxRate == 2) {
1417 pDevice->aulPktNum[RATE_1M]++;
1419 else if (byRxRate==4) {
1420 pDevice->aulPktNum[RATE_2M]++;
1422 else if (byRxRate==11) {
1423 pDevice->aulPktNum[RATE_5M]++;
1425 else if (byRxRate==22) {
1426 pDevice->aulPktNum[RATE_11M]++;
1428 else if(byRxRate==12){
1429 pDevice->aulPktNum[RATE_6M]++;
1430 pDevice->aulSQ3Val[RATE_6M] += bySQ3;
1432 else if(byRxRate==18){
1433 pDevice->aulPktNum[RATE_9M]++;
1434 pDevice->aulSQ3Val[RATE_9M] += bySQ3;
1436 else if(byRxRate==24){
1437 pDevice->aulPktNum[RATE_12M]++;
1438 pDevice->aulSQ3Val[RATE_12M] += bySQ3;
1440 else if(byRxRate==36){
1441 pDevice->aulPktNum[RATE_18M]++;
1442 pDevice->aulSQ3Val[RATE_18M] += bySQ3;
1444 else if(byRxRate==48){
1445 pDevice->aulPktNum[RATE_24M]++;
1446 pDevice->aulSQ3Val[RATE_24M] += bySQ3;
1448 else if(byRxRate==72){
1449 pDevice->aulPktNum[RATE_36M]++;
1450 pDevice->aulSQ3Val[RATE_36M] += bySQ3;
1452 else if(byRxRate==96){
1453 pDevice->aulPktNum[RATE_48M]++;
1454 pDevice->aulSQ3Val[RATE_48M] += bySQ3;
1456 else if(byRxRate==108){
1457 pDevice->aulPktNum[RATE_54M]++;
1458 pDevice->aulSQ3Val[RATE_54M] += bySQ3;
1461 if (pDevice->byAntennaState == 0) {
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]);
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);
1470 if ( ((pDevice->aulPktNum[RATE_54M] < pDevice->ulDiversityNValue/2) &&
1471 (pDevice->ulSQ3_State0 > pDevice->ulSQ3TH) ) ||
1472 (pDevice->ulSQ3_State0 == 0 ) ) {
1474 if ( pDevice->byTMax == 0 )
1475 return;
1477 bScheduleCommand((void *) pDevice,
1478 WLAN_CMD_CHANGE_ANTENNA,
1479 NULL);
1481 pDevice->byAntennaState = 1;
1483 del_timer(&pDevice->TimerSQ3Tmax3);
1484 del_timer(&pDevice->TimerSQ3Tmax2);
1485 pDevice->TimerSQ3Tmax1.expires = RUN_AT(pDevice->byTMax * HZ);
1486 add_timer(&pDevice->TimerSQ3Tmax1);
1488 } else {
1489 pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ);
1490 add_timer(&pDevice->TimerSQ3Tmax3);
1492 s_vClearSQ3Value(pDevice);
1495 } else { //byAntennaState == 1
1497 if (pDevice->uDiversityCnt > pDevice->ulDiversityMValue) {
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);
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))
1509 bScheduleCommand((void *) pDevice,
1510 WLAN_CMD_CHANGE_ANTENNA,
1511 NULL);
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);
1519 pDevice->byAntennaState = 0;
1520 s_vClearSQ3Value(pDevice);
1522 } //byAntennaState
1528 * Description:
1529 * Timer for SQ3 antenna diversity
1531 * Parameters:
1532 * In:
1533 * pvSysSpec1
1534 * hDeviceContext - Pointer to the adapter
1535 * pvSysSpec2
1536 * pvSysSpec3
1537 * Out:
1538 * none
1540 * Return Value: none
1544 void TimerSQ3CallBack(void *hDeviceContext)
1546 PSDevice pDevice = (PSDevice)hDeviceContext;
1548 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"TimerSQ3CallBack...");
1549 spin_lock_irq(&pDevice->lock);
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);
1560 spin_unlock_irq(&pDevice->lock);
1566 * Description:
1567 * Timer for SQ3 antenna diversity
1569 * Parameters:
1570 * In:
1571 * pvSysSpec1
1572 * hDeviceContext - Pointer to the adapter
1573 * pvSysSpec2
1574 * pvSysSpec3
1575 * Out:
1576 * none
1578 * Return Value: none
1582 void TimerSQ3Tmax3CallBack(void *hDeviceContext)
1584 PSDevice pDevice = (PSDevice)hDeviceContext;
1586 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"TimerSQ3Tmax3CallBack...");
1587 spin_lock_irq(&pDevice->lock);
1589 pDevice->ulRatio_State0 = s_ulGetRatio(pDevice);
1590 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State0 = [%08x]\n",(int)pDevice->ulRatio_State0);
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;
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);
1607 spin_unlock_irq(&pDevice->lock);
1610 void
1611 BBvUpdatePreEDThreshold(
1612 PSDevice pDevice,
1613 BOOL bScanning)
1617 switch(pDevice->byRFType)
1619 case RF_AL2230:
1620 case RF_AL2230S:
1621 case RF_AIROHA7230:
1622 //RobertYu:20060627, update new table
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;
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");
1761 break;
1763 case RF_VT3226:
1764 case RF_VT3226D0:
1765 //RobertYu:20060627, update new table
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;
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");
1916 break;
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;
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");
2056 break;