Staging: vt6656: code cleanup, removed OUT definition
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / staging / vt6656 / baseband.c
1 /*
2 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
3 * All rights reserved.
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 *
20 * File: baseband.c
21 *
22 * Purpose: Implement functions to access baseband
23 *
24 * Author: Jerry Chen
25 *
26 * Date: Jun. 5, 2002
27 *
28 * Functions:
29 * BBuGetFrameTime - Calculate data frame transmitting time
30 * BBvCaculateParameter - Caculate PhyLength, PhyService and Phy Signal parameter for baseband Tx
31 * BBbVT3184Init - VIA VT3184 baseband chip init code
32 * BBvLoopbackOn - Turn on BaseBand Loopback mode
33 * BBvLoopbackOff - Turn off BaseBand Loopback mode
34 *
35 * Revision History:
36 *
37 *
38 */
39
40 #include "tmacro.h"
41 #include "tether.h"
42 #include "mac.h"
43 #include "baseband.h"
44 #include "rf.h"
45 #include "srom.h"
46 #include "control.h"
47 #include "datarate.h"
48 #include "rndis.h"
49
50 /*--------------------- Static Definitions -------------------------*/
51 static int msglevel =MSG_LEVEL_INFO;
52 //static int msglevel =MSG_LEVEL_DEBUG;
53
54 /*--------------------- Static Classes ----------------------------*/
55
56 /*--------------------- Static Variables --------------------------*/
57
58 /*--------------------- Static Functions --------------------------*/
59
60 /*--------------------- Export Variables --------------------------*/
61
62 /*--------------------- Static Definitions -------------------------*/
63
64 /*--------------------- Static Classes ----------------------------*/
65
66 /*--------------------- Static Variables --------------------------*/
67
68
69 BYTE abyVT3184_AGC[] = {
70 0x00, //0
71 0x00, //1
72 0x02, //2
73 0x02, //3 //RobertYu:20060505, 0x04, //3
74 0x04, //4
75 0x04, //5 //RobertYu:20060505, 0x06, //5
76 0x06, //6
77 0x06, //7
78 0x08, //8
79 0x08, //9
80 0x0A, //A
81 0x0A, //B
82 0x0C, //C
83 0x0C, //D
84 0x0E, //E
85 0x0E, //F
86 0x10, //10
87 0x10, //11
88 0x12, //12
89 0x12, //13
90 0x14, //14
91 0x14, //15
92 0x16, //16
93 0x16, //17
94 0x18, //18
95 0x18, //19
96 0x1A, //1A
97 0x1A, //1B
98 0x1C, //1C
99 0x1C, //1D
100 0x1E, //1E
101 0x1E, //1F
102 0x20, //20
103 0x20, //21
104 0x22, //22
105 0x22, //23
106 0x24, //24
107 0x24, //25
108 0x26, //26
109 0x26, //27
110 0x28, //28
111 0x28, //29
112 0x2A, //2A
113 0x2A, //2B
114 0x2C, //2C
115 0x2C, //2D
116 0x2E, //2E
117 0x2E, //2F
118 0x30, //30
119 0x30, //31
120 0x32, //32
121 0x32, //33
122 0x34, //34
123 0x34, //35
124 0x36, //36
125 0x36, //37
126 0x38, //38
127 0x38, //39
128 0x3A, //3A
129 0x3A, //3B
130 0x3C, //3C
131 0x3C, //3D
132 0x3E, //3E
133 0x3E //3F
134 };
135
136
137 BYTE abyVT3184_AL2230[] = {
138 0x31,//00
139 0x00,
140 0x00,
141 0x00,
142 0x00,
143 0x80,
144 0x00,
145 0x00,
146 0x70,
147 0x45,//tx //0x64 for FPGA
148 0x2A,
149 0x76,
150 0x00,
151 0x00,
152 0x80,
153 0x00,
154 0x00,//10
155 0x00,
156 0x00,
157 0x00,
158 0x00,
159 0x00,
160 0x00,
161 0x00,
162 0x00,
163 0x00,
164 0x00,
165 0x8e, //RobertYu:20060522, //0x8d,
166 0x0a, //RobertYu:20060515, //0x09,
167 0x00,
168 0x00,
169 0x00,
170 0x00,//20
171 0x00,
172 0x00,
173 0x00,
174 0x00,
175 0x4a,
176 0x00,
177 0x00,
178 0x00,
179 0x00,
180 0x00,
181 0x00,
182 0x00,
183 0x4a,
184 0x00,
185 0x0c, //RobertYu:20060522, //0x10,
186 0x26,//30
187 0x5b,
188 0x00,
189 0x00,
190 0x00,
191 0x00,
192 0xaa,
193 0xaa,
194 0xff,
195 0xff,
196 0x79,
197 0x00,
198 0x00,
199 0x0b,
200 0x48,
201 0x04,
202 0x00,//40
203 0x08,
204 0x00,
205 0x08,
206 0x08,
207 0x14,
208 0x05,
209 0x09,
210 0x00,
211 0x00,
212 0x00,
213 0x00,
214 0x09,
215 0x73,
216 0x00,
217 0xc5,
218 0x00,//50 //RobertYu:20060505, //0x15,//50
219 0x19,
220 0x00,
221 0x00,
222 0x00,
223 0x00,
224 0x00,
225 0x00,
226 0x00,
227 0xd0, //RobertYu:20060505, //0xb0,
228 0x00,
229 0x00,
230 0x00,
231 0x00,
232 0x00,
233 0x00,
234 0xe4,//60
235 0x80,
236 0x00,
237 0x00,
238 0x00,
239 0x00,
240 0x98,
241 0x0a,
242 0x00,
243 0x00,
244 0x00,
245 0x00,
246 0x00, //0x80 for FPGA
247 0x03,
248 0x01,
249 0x00,
250 0x00,//70
251 0x00,
252 0x00,
253 0x00,
254 0x00,
255 0x00,
256 0x00,
257 0x00,
258 0x00,
259 0x00,
260 0x00,
261 0x00,
262 0x00,
263 0x00,
264 0x00,
265 0x00,
266 0x8c,//80
267 0x01,
268 0x09,
269 0x00,
270 0x00,
271 0x00,
272 0x00,
273 0x00,
274 0x08,
275 0x00,
276 0x1f, //RobertYu:20060516, //0x0f,
277 0xb7,
278 0x88,
279 0x47,
280 0xaa,
281 0x00, //RobertYu:20060505, //0x02,
282 0x20,//90 //RobertYu:20060505, //0x22,//90
283 0x00,
284 0x00,
285 0x00,
286 0x00,
287 0x00,
288 0x00,
289 0xeb,
290 0x00,
291 0x00,
292 0x00,
293 0x00,
294 0x00,
295 0x00,
296 0x00,
297 0x01,
298 0x00,//a0
299 0x00,
300 0x00,
301 0x00,
302 0x00,
303 0x00,
304 0x10,
305 0x00,
306 0x18,
307 0x00,
308 0x00,
309 0x00,
310 0x00,
311 0x15, //RobertYu:20060516, //0x00,
312 0x00,
313 0x18,
314 0x38,//b0
315 0x30,
316 0x00,
317 0x00,
318 0xff,
319 0x0f,
320 0xe4,
321 0xe2,
322 0x00,
323 0x00,
324 0x00,
325 0x03,
326 0x01,
327 0x00,
328 0x00,
329 0x00,
330 0x18,//c0
331 0x20,
332 0x07,
333 0x18,
334 0xff,
335 0xff, //RobertYu:20060509, //0x2c,
336 0x0e, //RobertYu:20060530, //0x0c,
337 0x0a,
338 0x0e,
339 0x00, //RobertYu:20060505, //0x01,
340 0x82, //RobertYu:20060516, //0x8f,
341 0xa7,
342 0x3c,
343 0x10,
344 0x30, //RobertYu:20060627, //0x0b,
345 0x05, //RobertYu:20060516, //0x25,
346 0x40,//d0
347 0x12,
348 0x00,
349 0x00,
350 0x10,
351 0x28,
352 0x80,
353 0x2A,
354 0x00,
355 0x00,
356 0x00,
357 0x00,
358 0x00,
359 0x00,
360 0x00,
361 0x00,
362 0x00,//e0
363 0xf3, //RobertYu:20060516, //0xd3,
364 0x00,
365 0x00,
366 0x00,
367 0x10,
368 0x00,
369 0x12, //RobertYu:20060627, //0x10,
370 0x00,
371 0xf4,
372 0x00,
373 0xff,
374 0x79,
375 0x20,
376 0x30,
377 0x05, //RobertYu:20060516, //0x0c,
378 0x00,//f0
379 0x3e,
380 0x00,
381 0x00,
382 0x00,
383 0x00,
384 0x00,
385 0x00,
386 0x00,
387 0x00,
388 0x00,
389 0x00,
390 0x00,
391 0x00,
392 0x00,
393 0x00
394 };
395
396
397
398 //{{RobertYu:20060515, new BB setting for VT3226D0
399 BYTE abyVT3184_VT3226D0[] = {
400 0x31,//00
401 0x00,
402 0x00,
403 0x00,
404 0x00,
405 0x80,
406 0x00,
407 0x00,
408 0x70,
409 0x45,//tx //0x64 for FPGA
410 0x2A,
411 0x76,
412 0x00,
413 0x00,
414 0x80,
415 0x00,
416 0x00,//10
417 0x00,
418 0x00,
419 0x00,
420 0x00,
421 0x00,
422 0x00,
423 0x00,
424 0x00,
425 0x00,
426 0x00,
427 0x8e, //RobertYu:20060525, //0x8d,
428 0x0a, //RobertYu:20060515, //0x09,
429 0x00,
430 0x00,
431 0x00,
432 0x00,//20
433 0x00,
434 0x00,
435 0x00,
436 0x00,
437 0x4a,
438 0x00,
439 0x00,
440 0x00,
441 0x00,
442 0x00,
443 0x00,
444 0x00,
445 0x4a,
446 0x00,
447 0x0c, //RobertYu:20060525, //0x10,
448 0x26,//30
449 0x5b,
450 0x00,
451 0x00,
452 0x00,
453 0x00,
454 0xaa,
455 0xaa,
456 0xff,
457 0xff,
458 0x79,
459 0x00,
460 0x00,
461 0x0b,
462 0x48,
463 0x04,
464 0x00,//40
465 0x08,
466 0x00,
467 0x08,
468 0x08,
469 0x14,
470 0x05,
471 0x09,
472 0x00,
473 0x00,
474 0x00,
475 0x00,
476 0x09,
477 0x73,
478 0x00,
479 0xc5,
480 0x00,//50 //RobertYu:20060505, //0x15,//50
481 0x19,
482 0x00,
483 0x00,
484 0x00,
485 0x00,
486 0x00,
487 0x00,
488 0x00,
489 0xd0, //RobertYu:20060505, //0xb0,
490 0x00,
491 0x00,
492 0x00,
493 0x00,
494 0x00,
495 0x00,
496 0xe4,//60
497 0x80,
498 0x00,
499 0x00,
500 0x00,
501 0x00,
502 0x98,
503 0x0a,
504 0x00,
505 0x00,
506 0x00,
507 0x00,
508 0x00, //0x80 for FPGA
509 0x03,
510 0x01,
511 0x00,
512 0x00,//70
513 0x00,
514 0x00,
515 0x00,
516 0x00,
517 0x00,
518 0x00,
519 0x00,
520 0x00,
521 0x00,
522 0x00,
523 0x00,
524 0x00,
525 0x00,
526 0x00,
527 0x00,
528 0x8c,//80
529 0x01,
530 0x09,
531 0x00,
532 0x00,
533 0x00,
534 0x00,
535 0x00,
536 0x08,
537 0x00,
538 0x1f, //RobertYu:20060515, //0x0f,
539 0xb7,
540 0x88,
541 0x47,
542 0xaa,
543 0x00, //RobertYu:20060505, //0x02,
544 0x20,//90 //RobertYu:20060505, //0x22,//90
545 0x00,
546 0x00,
547 0x00,
548 0x00,
549 0x00,
550 0x00,
551 0xeb,
552 0x00,
553 0x00,
554 0x00,
555 0x00,
556 0x00,
557 0x00,
558 0x00,
559 0x01,
560 0x00,//a0
561 0x00,
562 0x00,
563 0x00,
564 0x00,
565 0x00,
566 0x10,
567 0x00,
568 0x18,
569 0x00,
570 0x00,
571 0x00,
572 0x00,
573 0x00,
574 0x00,
575 0x18,
576 0x38,//b0
577 0x30,
578 0x00,
579 0x00,
580 0xff,
581 0x0f,
582 0xe4,
583 0xe2,
584 0x00,
585 0x00,
586 0x00,
587 0x03,
588 0x01,
589 0x00,
590 0x00,
591 0x00,
592 0x18,//c0
593 0x20,
594 0x07,
595 0x18,
596 0xff,
597 0xff, //RobertYu:20060509, //0x2c,
598 0x10, //RobertYu:20060525, //0x0c,
599 0x0a,
600 0x0e,
601 0x00, //RobertYu:20060505, //0x01,
602 0x84, //RobertYu:20060525, //0x8f,
603 0xa7,
604 0x3c,
605 0x10,
606 0x24, //RobertYu:20060627, //0x18,
607 0x05, //RobertYu:20060515, //0x25,
608 0x40,//d0
609 0x12,
610 0x00,
611 0x00,
612 0x10,
613 0x28,
614 0x80,
615 0x2A,
616 0x00,
617 0x00,
618 0x00,
619 0x00,
620 0x00,
621 0x00,
622 0x00,
623 0x00,
624 0x00,//e0
625 0xf3, //RobertYu:20060515, //0xd3,
626 0x00,
627 0x00,
628 0x00,
629 0x10,
630 0x00,
631 0x10, //RobertYu:20060627, //0x0e,
632 0x00,
633 0xf4,
634 0x00,
635 0xff,
636 0x79,
637 0x20,
638 0x30,
639 0x08, //RobertYu:20060515, //0x0c,
640 0x00,//f0
641 0x3e,
642 0x00,
643 0x00,
644 0x00,
645 0x00,
646 0x00,
647 0x00,
648 0x00,
649 0x00,
650 0x00,
651 0x00,
652 0x00,
653 0x00,
654 0x00,
655 0x00,
656 };
657
658 const WORD awcFrameTime[MAX_RATE] =
659 {10, 20, 55, 110, 24, 36, 48, 72, 96, 144, 192, 216};
660
661 /*--------------------- Static Functions --------------------------*/
662
663 /*
664 static
665 ULONG
666 s_ulGetLowSQ3(PSDevice pDevice);
667
668 static
669 ULONG
670 s_ulGetRatio(PSDevice pDevice);
671
672 static
673 void
674 s_vClearSQ3Value(PSDevice pDevice);
675 */
676
677 /*--------------------- Export Variables --------------------------*/
678 /*
679 * Description: Calculate data frame transmitting time
680 *
681 * Parameters:
682 * In:
683 * byPreambleType - Preamble Type
684 * byPktType - PK_TYPE_11A, PK_TYPE_11B, PK_TYPE_11GB, PK_TYPE_11GA
685 * cbFrameLength - Baseband Type
686 * wRate - Tx Rate
687 * Out:
688 *
689 * Return Value: FrameTime
690 *
691 */
692 UINT
693 BBuGetFrameTime (
694 BYTE byPreambleType,
695 BYTE byPktType,
696 UINT cbFrameLength,
697 WORD wRate
698 )
699 {
700 UINT uFrameTime;
701 UINT uPreamble;
702 UINT uTmp;
703 UINT uRateIdx = (UINT)wRate;
704 UINT uRate = 0;
705
706
707 if (uRateIdx > RATE_54M) {
708 ASSERT(0);
709 return 0;
710 }
711
712 uRate = (UINT)awcFrameTime[uRateIdx];
713
714 if (uRateIdx <= 3) { //CCK mode
715
716 if (byPreambleType == 1) {//Short
717 uPreamble = 96;
718 } else {
719 uPreamble = 192;
720 }
721 uFrameTime = (cbFrameLength * 80) / uRate; //?????
722 uTmp = (uFrameTime * uRate) / 80;
723 if (cbFrameLength != uTmp) {
724 uFrameTime ++;
725 }
726
727 return (uPreamble + uFrameTime);
728 }
729 else {
730 uFrameTime = (cbFrameLength * 8 + 22) / uRate; //????????
731 uTmp = ((uFrameTime * uRate) - 22) / 8;
732 if(cbFrameLength != uTmp) {
733 uFrameTime ++;
734 }
735 uFrameTime = uFrameTime * 4; //???????
736 if(byPktType != PK_TYPE_11A) {
737 uFrameTime += 6;
738 }
739 return (20 + uFrameTime); //??????
740 }
741 }
742
743 /*
744 * Description: Caculate Length, Service, and Signal fields of Phy for Tx
745 *
746 * Parameters:
747 * In:
748 * pDevice - Device Structure
749 * cbFrameLength - Tx Frame Length
750 * wRate - Tx Rate
751 * Out:
752 * pwPhyLen - pointer to Phy Length field
753 * pbyPhySrv - pointer to Phy Service field
754 * pbyPhySgn - pointer to Phy Signal field
755 *
756 * Return Value: none
757 *
758 */
759 void
760 BBvCaculateParameter (
761 PSDevice pDevice,
762 UINT cbFrameLength,
763 WORD wRate,
764 BYTE byPacketType,
765 PWORD pwPhyLen,
766 PBYTE pbyPhySrv,
767 PBYTE pbyPhySgn
768 )
769 {
770 UINT cbBitCount;
771 UINT cbUsCount = 0;
772 UINT cbTmp;
773 BOOL bExtBit;
774 BYTE byPreambleType = pDevice->byPreambleType;
775 BOOL bCCK = pDevice->bCCK;
776
777 cbBitCount = cbFrameLength * 8;
778 bExtBit = FALSE;
779
780 switch (wRate) {
781 case RATE_1M :
782 cbUsCount = cbBitCount;
783 *pbyPhySgn = 0x00;
784 break;
785
786 case RATE_2M :
787 cbUsCount = cbBitCount / 2;
788 if (byPreambleType == 1)
789 *pbyPhySgn = 0x09;
790 else // long preamble
791 *pbyPhySgn = 0x01;
792 break;
793
794 case RATE_5M :
795 if (bCCK == FALSE)
796 cbBitCount ++;
797 cbUsCount = (cbBitCount * 10) / 55;
798 cbTmp = (cbUsCount * 55) / 10;
799 if (cbTmp != cbBitCount)
800 cbUsCount ++;
801 if (byPreambleType == 1)
802 *pbyPhySgn = 0x0a;
803 else // long preamble
804 *pbyPhySgn = 0x02;
805 break;
806
807 case RATE_11M :
808
809 if (bCCK == FALSE)
810 cbBitCount ++;
811 cbUsCount = cbBitCount / 11;
812 cbTmp = cbUsCount * 11;
813 if (cbTmp != cbBitCount) {
814 cbUsCount ++;
815 if ((cbBitCount - cbTmp) <= 3)
816 bExtBit = TRUE;
817 }
818 if (byPreambleType == 1)
819 *pbyPhySgn = 0x0b;
820 else // long preamble
821 *pbyPhySgn = 0x03;
822 break;
823
824 case RATE_6M :
825 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
826 *pbyPhySgn = 0x9B; //1001 1011
827 }
828 else {//11g, 2.4GHZ
829 *pbyPhySgn = 0x8B; //1000 1011
830 }
831 break;
832
833 case RATE_9M :
834 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
835 *pbyPhySgn = 0x9F; //1001 1111
836 }
837 else {//11g, 2.4GHZ
838 *pbyPhySgn = 0x8F; //1000 1111
839 }
840 break;
841
842 case RATE_12M :
843 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
844 *pbyPhySgn = 0x9A; //1001 1010
845 }
846 else {//11g, 2.4GHZ
847 *pbyPhySgn = 0x8A; //1000 1010
848 }
849 break;
850
851 case RATE_18M :
852 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
853 *pbyPhySgn = 0x9E; //1001 1110
854 }
855 else {//11g, 2.4GHZ
856 *pbyPhySgn = 0x8E; //1000 1110
857 }
858 break;
859
860 case RATE_24M :
861 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
862 *pbyPhySgn = 0x99; //1001 1001
863 }
864 else {//11g, 2.4GHZ
865 *pbyPhySgn = 0x89; //1000 1001
866 }
867 break;
868
869 case RATE_36M :
870 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
871 *pbyPhySgn = 0x9D; //1001 1101
872 }
873 else {//11g, 2.4GHZ
874 *pbyPhySgn = 0x8D; //1000 1101
875 }
876 break;
877
878 case RATE_48M :
879 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
880 *pbyPhySgn = 0x98; //1001 1000
881 }
882 else {//11g, 2.4GHZ
883 *pbyPhySgn = 0x88; //1000 1000
884 }
885 break;
886
887 case RATE_54M :
888 if (byPacketType == PK_TYPE_11A) {//11a, 5GHZ
889 *pbyPhySgn = 0x9C; //1001 1100
890 }
891 else {//11g, 2.4GHZ
892 *pbyPhySgn = 0x8C; //1000 1100
893 }
894 break;
895
896 default :
897 if (byPacketType == PK_TYPE_11A) {//11a, 5GHZ
898 *pbyPhySgn = 0x9C; //1001 1100
899 }
900 else {//11g, 2.4GHZ
901 *pbyPhySgn = 0x8C; //1000 1100
902 }
903 break;
904 }
905
906 if (byPacketType == PK_TYPE_11B) {
907 *pbyPhySrv = 0x00;
908 if (bExtBit)
909 *pbyPhySrv = *pbyPhySrv | 0x80;
910 *pwPhyLen = (WORD) cbUsCount;
911 }
912 else {
913 *pbyPhySrv = 0x00;
914 *pwPhyLen = (WORD)cbFrameLength;
915 }
916 }
917
918
919 /*
920 * Description: Set Antenna mode
921 *
922 * Parameters:
923 * In:
924 * pDevice - Device Structure
925 * byAntennaMode - Antenna Mode
926 * Out:
927 * none
928 *
929 * Return Value: none
930 *
931 */
932 void
933 BBvSetAntennaMode (PSDevice pDevice, BYTE byAntennaMode)
934 {
935 //{{ RobertYu: 20041124, ABG Mode, VC1/VC2 define, make the ANT_A, ANT_B inverted
936 /*if ( (pDevice->byRFType == RF_MAXIM2829) ||
937 (pDevice->byRFType == RF_UW2452) ||
938 (pDevice->byRFType == RF_AIROHA7230) ) { // RobertYu: 20041210, 20050104
939
940 switch (byAntennaMode) {
941 case ANT_TXA:
942 byAntennaMode = ANT_TXB;
943 break;
944 case ANT_TXB:
945 byAntennaMode = ANT_TXA;
946 break;
947 case ANT_RXA:
948 byAntennaMode = ANT_RXB;
949 break;
950 case ANT_RXB:
951 byAntennaMode = ANT_RXA;
952 break;
953 }
954 }*/
955
956 switch (byAntennaMode) {
957 case ANT_TXA:
958 break;
959 case ANT_TXB:
960 break;
961 case ANT_RXA:
962 pDevice->byBBRxConf &= 0xFC;
963 break;
964 case ANT_RXB:
965 pDevice->byBBRxConf &= 0xFE;
966 pDevice->byBBRxConf |= 0x02;;
967 break;
968 }
969
970
971 CONTROLnsRequestOut(pDevice,
972 MESSAGE_TYPE_SET_ANTMD,
973 (WORD) byAntennaMode,
974 0,
975 0,
976 NULL);
977 }
978
979 /*
980 * Description: Set Antenna mode
981 *
982 * Parameters:
983 * In:
984 * pDevice - Device Structure
985 * byAntennaMode - Antenna Mode
986 * Out:
987 * none
988 *
989 * Return Value: none
990 *
991 */
992 BOOL
993 BBbVT3184Init (PSDevice pDevice)
994 {
995 NTSTATUS ntStatus;
996 WORD wLength;
997 PBYTE pbyAddr;
998 PBYTE pbyAgc;
999 WORD wLengthAgc;
1000 BYTE abyArray[256];
1001
1002 ntStatus = CONTROLnsRequestIn(pDevice,
1003 MESSAGE_TYPE_READ,
1004 0,
1005 MESSAGE_REQUEST_EEPROM,
1006 EEP_MAX_CONTEXT_SIZE,
1007 pDevice->abyEEPROM);
1008 if (ntStatus != STATUS_SUCCESS) {
1009 return FALSE;
1010 }
1011
1012
1013 //20080215-01,<Add> by Mike Liu
1014 // if ((pDevice->abyEEPROM[EEP_OFS_RADIOCTL]&0x06)==0x04)
1015 // return FALSE;
1016
1017 //20080804-01,<Add> by Mike Liu
1018 //zonetype initial
1019 pDevice->byOriginalZonetype = pDevice->abyEEPROM[EEP_OFS_ZONETYPE];
1020 if(pDevice->config_file.ZoneType >= 0) { //read zonetype file ok!
1021 if ((pDevice->config_file.ZoneType == 0)&&
1022 (pDevice->abyEEPROM[EEP_OFS_ZONETYPE] !=0x00)){ //for USA
1023 pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0;
1024 pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0B;
1025 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Init Zone Type :USA\n");
1026 }
1027 else if((pDevice->config_file.ZoneType == 1)&&
1028 (pDevice->abyEEPROM[EEP_OFS_ZONETYPE]!=0x01)){ //for Japan
1029 pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0x01;
1030 pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0D;
1031 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Init Zone Type :Japan\n");
1032 }
1033 else if((pDevice->config_file.ZoneType == 2)&&
1034 (pDevice->abyEEPROM[EEP_OFS_ZONETYPE]!=0x02)){ //for Europe
1035 pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0x02;
1036 pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0D;
1037 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Init Zone Type :Europe\n");
1038 }
1039 else {
1040 if(pDevice->config_file.ZoneType !=pDevice->abyEEPROM[EEP_OFS_ZONETYPE])
1041 printk("zonetype in file[%02x] mismatch with in EEPROM[%02x]\n",pDevice->config_file.ZoneType,pDevice->abyEEPROM[EEP_OFS_ZONETYPE]);
1042 else
1043 printk("Read Zonetype file success,use default zonetype setting[%02x]\n",pDevice->config_file.ZoneType);
1044 }
1045 }
1046
1047 if ( !pDevice->bZoneRegExist ) {
1048 pDevice->byZoneType = pDevice->abyEEPROM[EEP_OFS_ZONETYPE];
1049 }
1050 pDevice->byRFType = pDevice->abyEEPROM[EEP_OFS_RFTYPE];
1051
1052 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Zone Type %x\n", pDevice->byZoneType);
1053 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"RF Type %d\n", pDevice->byRFType);
1054
1055 if ((pDevice->byRFType == RF_AL2230) || (pDevice->byRFType == RF_AL2230S)) {
1056 pDevice->byBBRxConf = abyVT3184_AL2230[10];
1057 wLength = sizeof(abyVT3184_AL2230);
1058 pbyAddr = abyVT3184_AL2230;
1059 pbyAgc = abyVT3184_AGC;
1060 wLengthAgc = sizeof(abyVT3184_AGC);
1061
1062 pDevice->abyBBVGA[0] = 0x1C;
1063 pDevice->abyBBVGA[1] = 0x10;
1064 pDevice->abyBBVGA[2] = 0x0;
1065 pDevice->abyBBVGA[3] = 0x0;
1066 pDevice->ldBmThreshold[0] = -70;
1067 pDevice->ldBmThreshold[1] = -48;
1068 pDevice->ldBmThreshold[2] = 0;
1069 pDevice->ldBmThreshold[3] = 0;
1070 }
1071 else if (pDevice->byRFType == RF_AIROHA7230) {
1072 pDevice->byBBRxConf = abyVT3184_AL2230[10];
1073 wLength = sizeof(abyVT3184_AL2230);
1074 pbyAddr = abyVT3184_AL2230;
1075 pbyAgc = abyVT3184_AGC;
1076 wLengthAgc = sizeof(abyVT3184_AGC);
1077
1078 // Init ANT B select,TX Config CR09 = 0x61->0x45, 0x45->0x41(VC1/VC2 define, make the ANT_A, ANT_B inverted)
1079 //pbyAddr[0x09] = 0x41;
1080 // Init ANT B select,RX Config CR10 = 0x28->0x2A, 0x2A->0x28(VC1/VC2 define, make the ANT_A, ANT_B inverted)
1081 //pbyAddr[0x0a] = 0x28;
1082 // Select VC1/VC2, CR215 = 0x02->0x06
1083 pbyAddr[0xd7] = 0x06;
1084
1085 pDevice->abyBBVGA[0] = 0x1C;
1086 pDevice->abyBBVGA[1] = 0x10;
1087 pDevice->abyBBVGA[2] = 0x0;
1088 pDevice->abyBBVGA[3] = 0x0;
1089 pDevice->ldBmThreshold[0] = -70;
1090 pDevice->ldBmThreshold[1] = -48;
1091 pDevice->ldBmThreshold[2] = 0;
1092 pDevice->ldBmThreshold[3] = 0;
1093 }
1094 else if ( (pDevice->byRFType == RF_VT3226) || (pDevice->byRFType == RF_VT3226D0) ) {
1095 pDevice->byBBRxConf = abyVT3184_VT3226D0[10]; //RobertYu:20060515
1096 wLength = sizeof(abyVT3184_VT3226D0); //RobertYu:20060515
1097 pbyAddr = abyVT3184_VT3226D0; //RobertYu:20060515
1098 pbyAgc = abyVT3184_AGC;
1099 wLengthAgc = sizeof(abyVT3184_AGC);
1100
1101 pDevice->abyBBVGA[0] = 0x20; //RobertYu:20060104, reguest by Jack
1102 pDevice->abyBBVGA[1] = 0x10;
1103 pDevice->abyBBVGA[2] = 0x0;
1104 pDevice->abyBBVGA[3] = 0x0;
1105 pDevice->ldBmThreshold[0] = -70;
1106 pDevice->ldBmThreshold[1] = -48;
1107 pDevice->ldBmThreshold[2] = 0;
1108 pDevice->ldBmThreshold[3] = 0;
1109 // Fix VT3226 DFC system timing issue
1110 MACvRegBitsOn(pDevice, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT);
1111 //}}
1112 //{{RobertYu:20060609
1113 } else if ( (pDevice->byRFType == RF_VT3342A0) ) {
1114 pDevice->byBBRxConf = abyVT3184_VT3226D0[10];
1115 wLength = sizeof(abyVT3184_VT3226D0);
1116 pbyAddr = abyVT3184_VT3226D0;
1117 pbyAgc = abyVT3184_AGC;
1118 wLengthAgc = sizeof(abyVT3184_AGC);
1119
1120 pDevice->abyBBVGA[0] = 0x20;
1121 pDevice->abyBBVGA[1] = 0x10;
1122 pDevice->abyBBVGA[2] = 0x0;
1123 pDevice->abyBBVGA[3] = 0x0;
1124 pDevice->ldBmThreshold[0] = -70;
1125 pDevice->ldBmThreshold[1] = -48;
1126 pDevice->ldBmThreshold[2] = 0;
1127 pDevice->ldBmThreshold[3] = 0;
1128 // Fix VT3226 DFC system timing issue
1129 MACvRegBitsOn(pDevice, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT);
1130 //}}
1131 } else {
1132 return TRUE;
1133 }
1134
1135 memcpy(abyArray, pbyAddr, wLength);
1136 CONTROLnsRequestOut(pDevice,
1137 MESSAGE_TYPE_WRITE,
1138 0,
1139 MESSAGE_REQUEST_BBREG,
1140 wLength,
1141 abyArray
1142 );
1143
1144 memcpy(abyArray, pbyAgc, wLengthAgc);
1145 CONTROLnsRequestOut(pDevice,
1146 MESSAGE_TYPE_WRITE,
1147 0,
1148 MESSAGE_REQUEST_BBAGC,
1149 wLengthAgc,
1150 abyArray
1151 );
1152
1153
1154 if ((pDevice->byRFType == RF_VT3226) || //RobertYu:20051116, 20060111 remove VT3226D0
1155 (pDevice->byRFType == RF_VT3342A0) //RobertYu:20060609
1156 ) {
1157 ControlvWriteByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_ITRTMSET,0x23);
1158 MACvRegBitsOn(pDevice,MAC_REG_PAPEDELAY,0x01);
1159 }
1160 else if (pDevice->byRFType == RF_VT3226D0)
1161 {
1162 ControlvWriteByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_ITRTMSET,0x11);
1163 MACvRegBitsOn(pDevice,MAC_REG_PAPEDELAY,0x01);
1164 }
1165
1166
1167 ControlvWriteByte(pDevice,MESSAGE_REQUEST_BBREG,0x04,0x7F);
1168 ControlvWriteByte(pDevice,MESSAGE_REQUEST_BBREG,0x0D,0x01);
1169
1170 RFbRFTableDownload(pDevice);
1171 return TRUE;//ntStatus;
1172 }
1173
1174
1175 /*
1176 * Description: Turn on BaseBand Loopback mode
1177 *
1178 * Parameters:
1179 * In:
1180 * pDevice - Device Structure
1181 *
1182 * Out:
1183 * none
1184 *
1185 * Return Value: none
1186 *
1187 */
1188 void BBvLoopbackOn (PSDevice pDevice)
1189 {
1190 BYTE byData;
1191
1192 //CR C9 = 0x00
1193 ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0xC9, &pDevice->byBBCRc9);//CR201
1194 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0);
1195 ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x4D, &pDevice->byBBCR4d);//CR77
1196 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x4D, 0x90);
1197
1198 //CR 88 = 0x02(CCK), 0x03(OFDM)
1199 ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x88, &pDevice->byBBCR88);//CR136
1200
1201 if (pDevice->wCurrentRate <= RATE_11M) { //CCK
1202 // Enable internal digital loopback: CR33 |= 0000 0001
1203 ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x21, &byData);//CR33
1204 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x21, (BYTE)(byData | 0x01));//CR33
1205 // CR154 = 0x00
1206 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x9A, 0); //CR154
1207
1208 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x88, 0x02);//CR239
1209 }
1210 else { //OFDM
1211 // Enable internal digital loopback:CR154 |= 0000 0001
1212 ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x9A, &byData);//CR154
1213 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x9A, (BYTE)(byData | 0x01));//CR154
1214 // CR33 = 0x00
1215 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x21, 0); //CR33
1216
1217 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x88, 0x03);//CR239
1218 }
1219
1220 //CR14 = 0x00
1221 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0E, 0);//CR14
1222
1223 // Disable TX_IQUN
1224 ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x09, &pDevice->byBBCR09);
1225 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x09, (BYTE)(pDevice->byBBCR09 & 0xDE));
1226 }
1227
1228 /*
1229 * Description: Turn off BaseBand Loopback mode
1230 *
1231 * Parameters:
1232 * In:
1233 * pDevice - Device Structure
1234 *
1235 * Out:
1236 * none
1237 *
1238 * Return Value: none
1239 *
1240 */
1241 void BBvLoopbackOff (PSDevice pDevice)
1242 {
1243 BYTE byData;
1244
1245 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, pDevice->byBBCRc9);//CR201
1246 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x88, pDevice->byBBCR88);//CR136
1247 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x09, pDevice->byBBCR09);//CR136
1248 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x4D, pDevice->byBBCR4d);//CR77
1249
1250 if (pDevice->wCurrentRate <= RATE_11M) { // CCK
1251 // Set the CR33 Bit2 to disable internal Loopback.
1252 ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x21, &byData);//CR33
1253 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x21, (BYTE)(byData & 0xFE));//CR33
1254 }
1255 else { // OFDM
1256 ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x9A, &byData);//CR154
1257 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x9A, (BYTE)(byData & 0xFE));//CR154
1258 }
1259 ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0x0E, &byData);//CR14
1260 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0E, (BYTE)(byData | 0x80));//CR14
1261
1262 }
1263
1264
1265 /*
1266 * Description: Set ShortSlotTime mode
1267 *
1268 * Parameters:
1269 * In:
1270 * pDevice - Device Structure
1271 * Out:
1272 * none
1273 *
1274 * Return Value: none
1275 *
1276 */
1277 void
1278 BBvSetShortSlotTime (PSDevice pDevice)
1279 {
1280 BYTE byBBVGA=0;
1281
1282 if (pDevice->bShortSlotTime) {
1283 pDevice->byBBRxConf &= 0xDF;//1101 1111
1284 } else {
1285 pDevice->byBBRxConf |= 0x20;//0010 0000
1286 }
1287
1288 ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0xE7, &byBBVGA);
1289 if (byBBVGA == pDevice->abyBBVGA[0]) {
1290 pDevice->byBBRxConf |= 0x20;//0010 0000
1291 }
1292
1293 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0A, pDevice->byBBRxConf);
1294
1295 }
1296
1297
1298 void BBvSetVGAGainOffset(PSDevice pDevice, BYTE byData)
1299 {
1300
1301 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xE7, byData);
1302
1303 // patch for 3253B0 Baseband with Cardbus module
1304 if (byData == pDevice->abyBBVGA[0]) {
1305 pDevice->byBBRxConf |= 0x20;//0010 0000
1306 } else if (pDevice->bShortSlotTime) {
1307 pDevice->byBBRxConf &= 0xDF;//1101 1111
1308 } else {
1309 pDevice->byBBRxConf |= 0x20;//0010 0000
1310 }
1311 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0A, pDevice->byBBRxConf);//CR10
1312 }
1313
1314
1315 /*
1316 * Description: Baseband SoftwareReset
1317 *
1318 * Parameters:
1319 * In:
1320 * dwIoBase - I/O base address
1321 * Out:
1322 * none
1323 *
1324 * Return Value: none
1325 *
1326 */
1327 void
1328 BBvSoftwareReset (PSDevice pDevice)
1329 {
1330 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x50, 0x40);
1331 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x50, 0);
1332 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x9C, 0x01);
1333 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x9C, 0);
1334 }
1335
1336 /*
1337 * Description: BBvSetDeepSleep
1338 *
1339 * Parameters:
1340 * In:
1341 * pDevice - Device Structure
1342 * Out:
1343 * none
1344 *
1345 * Return Value: none
1346 *
1347 */
1348 void
1349 BBvSetDeepSleep (PSDevice pDevice)
1350 {
1351 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0c, 0x17);//CR12
1352 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0D, 0xB9);//CR13
1353 }
1354
1355 void
1356 BBvExitDeepSleep (PSDevice pDevice)
1357 {
1358 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0C, 0x00);//CR12
1359 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0D, 0x01);//CR13
1360 }
1361
1362
1363 static
1364 ULONG
1365 s_ulGetLowSQ3(PSDevice pDevice)
1366 {
1367 int ii;
1368 ULONG ulSQ3 = 0;
1369 ULONG ulMaxPacket;
1370
1371 ulMaxPacket = pDevice->aulPktNum[RATE_54M];
1372 if ( pDevice->aulPktNum[RATE_54M] != 0 ) {
1373 ulSQ3 = pDevice->aulSQ3Val[RATE_54M] / pDevice->aulPktNum[RATE_54M];
1374 }
1375 for ( ii=RATE_48M;ii>=RATE_6M;ii-- ) {
1376 if ( pDevice->aulPktNum[ii] > ulMaxPacket ) {
1377 ulMaxPacket = pDevice->aulPktNum[ii];
1378 ulSQ3 = pDevice->aulSQ3Val[ii] / pDevice->aulPktNum[ii];
1379 }
1380 }
1381
1382 return ulSQ3;
1383 }
1384
1385
1386
1387 static
1388 ULONG
1389 s_ulGetRatio (PSDevice pDevice)
1390 {
1391 int ii,jj;
1392 ULONG ulRatio = 0;
1393 ULONG ulMaxPacket;
1394 ULONG ulPacketNum;
1395
1396 //This is a thousand-ratio
1397 ulMaxPacket = pDevice->aulPktNum[RATE_54M];
1398 if ( pDevice->aulPktNum[RATE_54M] != 0 ) {
1399 ulPacketNum = pDevice->aulPktNum[RATE_54M];
1400 ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
1401 ulRatio += TOP_RATE_54M;
1402 }
1403 for ( ii=RATE_48M;ii>=RATE_1M;ii-- ) {
1404 if ( pDevice->aulPktNum[ii] > ulMaxPacket ) {
1405 ulPacketNum = 0;
1406 for ( jj=RATE_54M;jj>=ii;jj--)
1407 ulPacketNum += pDevice->aulPktNum[jj];
1408 ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
1409 ulRatio += TOP_RATE_48M;
1410 ulMaxPacket = pDevice->aulPktNum[ii];
1411 }
1412
1413 }
1414
1415 return ulRatio;
1416 }
1417
1418
1419 static
1420 void
1421 s_vClearSQ3Value (PSDevice pDevice)
1422 {
1423 int ii;
1424 pDevice->uDiversityCnt = 0;
1425
1426 for ( ii=RATE_1M;ii<MAX_RATE;ii++) {
1427 pDevice->aulPktNum[ii] = 0;
1428 pDevice->aulSQ3Val[ii] = 0;
1429 }
1430 }
1431
1432
1433 /*
1434 * Description: Antenna Diversity
1435 *
1436 * Parameters:
1437 * In:
1438 * pDevice - Device Structure
1439 * byRSR - RSR from received packet
1440 * bySQ3 - SQ3 value from received packet
1441 * Out:
1442 * none
1443 *
1444 * Return Value: none
1445 *
1446 */
1447
1448 void
1449 BBvAntennaDiversity (PSDevice pDevice, BYTE byRxRate, BYTE bySQ3)
1450 {
1451
1452 pDevice->uDiversityCnt++;
1453 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pDevice->uDiversityCnt = %d\n", (int)pDevice->uDiversityCnt);
1454
1455 if (byRxRate == 2) {
1456 pDevice->aulPktNum[RATE_1M]++;
1457 }
1458 else if (byRxRate==4) {
1459 pDevice->aulPktNum[RATE_2M]++;
1460 }
1461 else if (byRxRate==11) {
1462 pDevice->aulPktNum[RATE_5M]++;
1463 }
1464 else if (byRxRate==22) {
1465 pDevice->aulPktNum[RATE_11M]++;
1466 }
1467 else if(byRxRate==12){
1468 pDevice->aulPktNum[RATE_6M]++;
1469 pDevice->aulSQ3Val[RATE_6M] += bySQ3;
1470 }
1471 else if(byRxRate==18){
1472 pDevice->aulPktNum[RATE_9M]++;
1473 pDevice->aulSQ3Val[RATE_9M] += bySQ3;
1474 }
1475 else if(byRxRate==24){
1476 pDevice->aulPktNum[RATE_12M]++;
1477 pDevice->aulSQ3Val[RATE_12M] += bySQ3;
1478 }
1479 else if(byRxRate==36){
1480 pDevice->aulPktNum[RATE_18M]++;
1481 pDevice->aulSQ3Val[RATE_18M] += bySQ3;
1482 }
1483 else if(byRxRate==48){
1484 pDevice->aulPktNum[RATE_24M]++;
1485 pDevice->aulSQ3Val[RATE_24M] += bySQ3;
1486 }
1487 else if(byRxRate==72){
1488 pDevice->aulPktNum[RATE_36M]++;
1489 pDevice->aulSQ3Val[RATE_36M] += bySQ3;
1490 }
1491 else if(byRxRate==96){
1492 pDevice->aulPktNum[RATE_48M]++;
1493 pDevice->aulSQ3Val[RATE_48M] += bySQ3;
1494 }
1495 else if(byRxRate==108){
1496 pDevice->aulPktNum[RATE_54M]++;
1497 pDevice->aulSQ3Val[RATE_54M] += bySQ3;
1498 }
1499
1500 if (pDevice->byAntennaState == 0) {
1501
1502 if (pDevice->uDiversityCnt > pDevice->ulDiversityNValue) {
1503 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ulDiversityNValue=[%d],54M-[%d]\n",(int)pDevice->ulDiversityNValue, (int)pDevice->aulPktNum[RATE_54M]);
1504
1505 pDevice->ulSQ3_State0 = s_ulGetLowSQ3(pDevice);
1506 pDevice->ulRatio_State0 = s_ulGetRatio(pDevice);
1507 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State0, SQ3= [%08x] rate = [%08x]\n",(int)pDevice->ulSQ3_State0,(int)pDevice->ulRatio_State0);
1508
1509 if ( ((pDevice->aulPktNum[RATE_54M] < pDevice->ulDiversityNValue/2) &&
1510 (pDevice->ulSQ3_State0 > pDevice->ulSQ3TH) ) ||
1511 (pDevice->ulSQ3_State0 == 0 ) ) {
1512
1513 if ( pDevice->byTMax == 0 )
1514 return;
1515
1516 bScheduleCommand((HANDLE) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL);
1517
1518 pDevice->byAntennaState = 1;
1519
1520 del_timer(&pDevice->TimerSQ3Tmax3);
1521 del_timer(&pDevice->TimerSQ3Tmax2);
1522 pDevice->TimerSQ3Tmax1.expires = RUN_AT(pDevice->byTMax * HZ);
1523 add_timer(&pDevice->TimerSQ3Tmax1);
1524
1525 } else {
1526 pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ);
1527 add_timer(&pDevice->TimerSQ3Tmax3);
1528 }
1529 s_vClearSQ3Value(pDevice);
1530
1531 }
1532 } else { //byAntennaState == 1
1533
1534 if (pDevice->uDiversityCnt > pDevice->ulDiversityMValue) {
1535
1536 del_timer(&pDevice->TimerSQ3Tmax1);
1537 pDevice->ulSQ3_State1 = s_ulGetLowSQ3(pDevice);
1538 pDevice->ulRatio_State1 = s_ulGetRatio(pDevice);
1539 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State1, rate0 = %08x,rate1 = %08x\n",(int)pDevice->ulRatio_State0,(int)pDevice->ulRatio_State1);
1540
1541 if ( ((pDevice->ulSQ3_State1 == 0) && (pDevice->ulSQ3_State0 != 0)) ||
1542 ((pDevice->ulSQ3_State1 == 0) && (pDevice->ulSQ3_State0 == 0) && (pDevice->ulRatio_State1 < pDevice->ulRatio_State0)) ||
1543 ((pDevice->ulSQ3_State1 != 0) && (pDevice->ulSQ3_State0 != 0) && (pDevice->ulSQ3_State0 < pDevice->ulSQ3_State1))
1544 ) {
1545
1546 bScheduleCommand((HANDLE) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL);
1547
1548 pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ);
1549 pDevice->TimerSQ3Tmax2.expires = RUN_AT(pDevice->byTMax2 * HZ);
1550 add_timer(&pDevice->TimerSQ3Tmax3);
1551 add_timer(&pDevice->TimerSQ3Tmax2);
1552
1553 }
1554 pDevice->byAntennaState = 0;
1555 s_vClearSQ3Value(pDevice);
1556 }
1557 } //byAntennaState
1558 }
1559
1560
1561 /*+
1562 *
1563 * Description:
1564 * Timer for SQ3 antenna diversity
1565 *
1566 * Parameters:
1567 * In:
1568 * pvSysSpec1
1569 * hDeviceContext - Pointer to the adapter
1570 * pvSysSpec2
1571 * pvSysSpec3
1572 * Out:
1573 * none
1574 *
1575 * Return Value: none
1576 *
1577 -*/
1578
1579 void
1580 TimerSQ3CallBack (
1581 HANDLE hDeviceContext
1582 )
1583 {
1584 PSDevice pDevice = (PSDevice)hDeviceContext;
1585
1586 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"TimerSQ3CallBack...");
1587 spin_lock_irq(&pDevice->lock);
1588
1589 bScheduleCommand((HANDLE) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL);
1590 pDevice->byAntennaState = 0;
1591 s_vClearSQ3Value(pDevice);
1592 pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ);
1593 pDevice->TimerSQ3Tmax2.expires = RUN_AT(pDevice->byTMax2 * HZ);
1594 add_timer(&pDevice->TimerSQ3Tmax3);
1595 add_timer(&pDevice->TimerSQ3Tmax2);
1596
1597
1598 spin_unlock_irq(&pDevice->lock);
1599 return;
1600 }
1601
1602
1603 /*+
1604 *
1605 * Description:
1606 * Timer for SQ3 antenna diversity
1607 *
1608 * Parameters:
1609 * In:
1610 * pvSysSpec1
1611 * hDeviceContext - Pointer to the adapter
1612 * pvSysSpec2
1613 * pvSysSpec3
1614 * Out:
1615 * none
1616 *
1617 * Return Value: none
1618 *
1619 -*/
1620
1621 void
1622 TimerSQ3Tmax3CallBack (
1623 HANDLE hDeviceContext
1624 )
1625 {
1626 PSDevice pDevice = (PSDevice)hDeviceContext;
1627
1628 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"TimerSQ3Tmax3CallBack...");
1629 spin_lock_irq(&pDevice->lock);
1630
1631 pDevice->ulRatio_State0 = s_ulGetRatio(pDevice);
1632 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State0 = [%08x]\n",(int)pDevice->ulRatio_State0);
1633
1634 s_vClearSQ3Value(pDevice);
1635 if ( pDevice->byTMax == 0 ) {
1636 pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ);
1637 add_timer(&pDevice->TimerSQ3Tmax3);
1638 spin_unlock_irq(&pDevice->lock);
1639 return;
1640 }
1641
1642 bScheduleCommand((HANDLE) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL);
1643 pDevice->byAntennaState = 1;
1644 del_timer(&pDevice->TimerSQ3Tmax3);
1645 del_timer(&pDevice->TimerSQ3Tmax2);
1646 pDevice->TimerSQ3Tmax1.expires = RUN_AT(pDevice->byTMax * HZ);
1647 add_timer(&pDevice->TimerSQ3Tmax1);
1648
1649 spin_unlock_irq(&pDevice->lock);
1650 return;
1651 }
1652
1653 void
1654 BBvUpdatePreEDThreshold(
1655 PSDevice pDevice,
1656 BOOL bScanning)
1657 {
1658
1659
1660 switch(pDevice->byRFType)
1661 {
1662 case RF_AL2230:
1663 case RF_AL2230S:
1664 case RF_AIROHA7230:
1665 //RobertYu:20060627, update new table
1666
1667 if( bScanning )
1668 { // need Max sensitivity //RSSI -69, -70,....
1669 if(pDevice->byBBPreEDIndex == 0) break;
1670 pDevice->byBBPreEDIndex = 0;
1671 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1672 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1673 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -69, -70, -71,...\n");
1674 break;
1675 }
1676
1677 if(pDevice->byBBPreEDRSSI <= 45) { // RSSI 0, -1,-2,....-45
1678 if(pDevice->byBBPreEDIndex == 20) break;
1679 pDevice->byBBPreEDIndex = 20;
1680 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1681 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1682 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI 0, -1,-2,..-45\n");
1683 } else if(pDevice->byBBPreEDRSSI <= 46) { //RSSI -46
1684 if(pDevice->byBBPreEDIndex == 19) break;
1685 pDevice->byBBPreEDIndex = 19;
1686 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x1A); //CR201(0xC9)
1687 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1688 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -46\n");
1689 } else if(pDevice->byBBPreEDRSSI <= 47) { //RSSI -47
1690 if(pDevice->byBBPreEDIndex == 18) break;
1691 pDevice->byBBPreEDIndex = 18;
1692 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x15); //CR201(0xC9)
1693 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1694 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -47\n");
1695 } else if(pDevice->byBBPreEDRSSI <= 49) { //RSSI -48, -49
1696 if(pDevice->byBBPreEDIndex == 17) break;
1697 pDevice->byBBPreEDIndex = 17;
1698 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0E); //CR201(0xC9)
1699 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1700 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -48,-49\n");
1701 } else if(pDevice->byBBPreEDRSSI <= 51) { //RSSI -50, -51
1702 if(pDevice->byBBPreEDIndex == 16) break;
1703 pDevice->byBBPreEDIndex = 16;
1704 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x09); //CR201(0xC9)
1705 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1706 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -50,-51\n");
1707 } else if(pDevice->byBBPreEDRSSI <= 53) { //RSSI -52, -53
1708 if(pDevice->byBBPreEDIndex == 15) break;
1709 pDevice->byBBPreEDIndex = 15;
1710 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x06); //CR201(0xC9)
1711 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1712 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -52,-53\n");
1713 } else if(pDevice->byBBPreEDRSSI <= 55) { //RSSI -54, -55
1714 if(pDevice->byBBPreEDIndex == 14) break;
1715 pDevice->byBBPreEDIndex = 14;
1716 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x03); //CR201(0xC9)
1717 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1718 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -54,-55\n");
1719 } else if(pDevice->byBBPreEDRSSI <= 56) { //RSSI -56
1720 if(pDevice->byBBPreEDIndex == 13) break;
1721 pDevice->byBBPreEDIndex = 13;
1722 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1723 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xA0); //CR206(0xCE)
1724 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -56\n");
1725 } else if(pDevice->byBBPreEDRSSI <= 57) { //RSSI -57
1726 if(pDevice->byBBPreEDIndex == 12) break;
1727 pDevice->byBBPreEDIndex = 12;
1728 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1729 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x20); //CR206(0xCE)
1730 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -57\n");
1731 } else if(pDevice->byBBPreEDRSSI <= 58) { //RSSI -58
1732 if(pDevice->byBBPreEDIndex == 11) break;
1733 pDevice->byBBPreEDIndex = 11;
1734 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1735 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xA0); //CR206(0xCE)
1736 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -58\n");
1737 } else if(pDevice->byBBPreEDRSSI <= 59) { //RSSI -59
1738 if(pDevice->byBBPreEDIndex == 10) break;
1739 pDevice->byBBPreEDIndex = 10;
1740 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1741 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x54); //CR206(0xCE)
1742 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -59\n");
1743 } else if(pDevice->byBBPreEDRSSI <= 60) { //RSSI -60
1744 if(pDevice->byBBPreEDIndex == 9) break;
1745 pDevice->byBBPreEDIndex = 9;
1746 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1747 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x18); //CR206(0xCE)
1748 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -60\n");
1749 } else if(pDevice->byBBPreEDRSSI <= 61) { //RSSI -61
1750 if(pDevice->byBBPreEDIndex == 8) break;
1751 pDevice->byBBPreEDIndex = 8;
1752 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1753 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xE3); //CR206(0xCE)
1754 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -61\n");
1755 } else if(pDevice->byBBPreEDRSSI <= 62) { //RSSI -62
1756 if(pDevice->byBBPreEDIndex == 7) break;
1757 pDevice->byBBPreEDIndex = 7;
1758 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1759 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xB9); //CR206(0xCE)
1760 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -62\n");
1761 } else if(pDevice->byBBPreEDRSSI <= 63) { //RSSI -63
1762 if(pDevice->byBBPreEDIndex == 6) break;
1763 pDevice->byBBPreEDIndex = 6;
1764 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1765 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x93); //CR206(0xCE)
1766 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -63\n");
1767 } else if(pDevice->byBBPreEDRSSI <= 64) { //RSSI -64
1768 if(pDevice->byBBPreEDIndex == 5) break;
1769 pDevice->byBBPreEDIndex = 5;
1770 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1771 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x79); //CR206(0xCE)
1772 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -64\n");
1773 } else if(pDevice->byBBPreEDRSSI <= 65) { //RSSI -65
1774 if(pDevice->byBBPreEDIndex == 4) break;
1775 pDevice->byBBPreEDIndex = 4;
1776 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1777 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x62); //CR206(0xCE)
1778 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -65\n");
1779 } else if(pDevice->byBBPreEDRSSI <= 66) { //RSSI -66
1780 if(pDevice->byBBPreEDIndex == 3) break;
1781 pDevice->byBBPreEDIndex = 3;
1782 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1783 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x51); //CR206(0xCE)
1784 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -66\n");
1785 } else if(pDevice->byBBPreEDRSSI <= 67) { //RSSI -67
1786 if(pDevice->byBBPreEDIndex == 2) break;
1787 pDevice->byBBPreEDIndex = 2;
1788 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1789 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x43); //CR206(0xCE)
1790 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -67\n");
1791 } else if(pDevice->byBBPreEDRSSI <= 68) { //RSSI -68
1792 if(pDevice->byBBPreEDIndex == 1) break;
1793 pDevice->byBBPreEDIndex = 1;
1794 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1795 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x36); //CR206(0xCE)
1796 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -68\n");
1797 } else { //RSSI -69, -70,....
1798 if(pDevice->byBBPreEDIndex == 0) break;
1799 pDevice->byBBPreEDIndex = 0;
1800 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1801 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1802 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -69, -70,...\n");
1803 }
1804 break;
1805
1806 case RF_VT3226:
1807 case RF_VT3226D0:
1808 //RobertYu:20060627, update new table
1809
1810 if( bScanning )
1811 { // need Max sensitivity //RSSI -69, -70, ...
1812 if(pDevice->byBBPreEDIndex == 0) break;
1813 pDevice->byBBPreEDIndex = 0;
1814 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1815 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x24); //CR206(0xCE)
1816 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -69, -70,..\n");
1817 break;
1818 }
1819
1820 if(pDevice->byBBPreEDRSSI <= 41) { // RSSI 0, -1,-2,....-41
1821 if(pDevice->byBBPreEDIndex == 22) break;
1822 pDevice->byBBPreEDIndex = 22;
1823 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1824 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1825 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI 0, -1,-2,..-41\n");
1826 } else if(pDevice->byBBPreEDRSSI <= 42) { //RSSI -42
1827 if(pDevice->byBBPreEDIndex == 21) break;
1828 pDevice->byBBPreEDIndex = 21;
1829 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x36); //CR201(0xC9)
1830 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1831 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -42\n");
1832 } else if(pDevice->byBBPreEDRSSI <= 43) { //RSSI -43
1833 if(pDevice->byBBPreEDIndex == 20) break;
1834 pDevice->byBBPreEDIndex = 20;
1835 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x26); //CR201(0xC9)
1836 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1837 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -43\n");
1838 } else if(pDevice->byBBPreEDRSSI <= 45) { //RSSI -44, -45
1839 if(pDevice->byBBPreEDIndex == 19) break;
1840 pDevice->byBBPreEDIndex = 19;
1841 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x18); //CR201(0xC9)
1842 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1843 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -44,-45\n");
1844 } else if(pDevice->byBBPreEDRSSI <= 47) { //RSSI -46, -47
1845 if(pDevice->byBBPreEDIndex == 18) break;
1846 pDevice->byBBPreEDIndex = 18;
1847 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x11); //CR201(0xC9)
1848 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1849 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -46,-47\n");
1850 } else if(pDevice->byBBPreEDRSSI <= 49) { //RSSI -48, -49
1851 if(pDevice->byBBPreEDIndex == 17) break;
1852 pDevice->byBBPreEDIndex = 17;
1853 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0a); //CR201(0xC9)
1854 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1855 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -48,-49\n");
1856 } else if(pDevice->byBBPreEDRSSI <= 51) { //RSSI -50, -51
1857 if(pDevice->byBBPreEDIndex == 16) break;
1858 pDevice->byBBPreEDIndex = 16;
1859 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x07); //CR201(0xC9)
1860 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1861 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -50,-51\n");
1862 } else if(pDevice->byBBPreEDRSSI <= 53) { //RSSI -52, -53
1863 if(pDevice->byBBPreEDIndex == 15) break;
1864 pDevice->byBBPreEDIndex = 15;
1865 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x04); //CR201(0xC9)
1866 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1867 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -52,-53\n");
1868 } else if(pDevice->byBBPreEDRSSI <= 55) { //RSSI -54, -55
1869 if(pDevice->byBBPreEDIndex == 14) break;
1870 pDevice->byBBPreEDIndex = 14;
1871 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1872 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1873 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -54,-55\n");
1874 } else if(pDevice->byBBPreEDRSSI <= 56) { //RSSI -56
1875 if(pDevice->byBBPreEDIndex == 13) break;
1876 pDevice->byBBPreEDIndex = 13;
1877 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1878 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1879 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -56\n");
1880 } else if(pDevice->byBBPreEDRSSI <= 57) { //RSSI -57
1881 if(pDevice->byBBPreEDIndex == 12) break;
1882 pDevice->byBBPreEDIndex = 12;
1883 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1884 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xB0); //CR206(0xCE)
1885 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -57\n");
1886 } else if(pDevice->byBBPreEDRSSI <= 58) { //RSSI -58
1887 if(pDevice->byBBPreEDIndex == 11) break;
1888 pDevice->byBBPreEDIndex = 11;
1889 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1890 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x70); //CR206(0xCE)
1891 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -58\n");
1892 } else if(pDevice->byBBPreEDRSSI <= 59) { //RSSI -59
1893 if(pDevice->byBBPreEDIndex == 10) break;
1894 pDevice->byBBPreEDIndex = 10;
1895 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1896 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1897 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -59\n");
1898 } else if(pDevice->byBBPreEDRSSI <= 60) { //RSSI -60
1899 if(pDevice->byBBPreEDIndex == 9) break;
1900 pDevice->byBBPreEDIndex = 9;
1901 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1902 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xEA); //CR206(0xCE)
1903 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -60\n");
1904 } else if(pDevice->byBBPreEDRSSI <= 61) { //RSSI -61
1905 if(pDevice->byBBPreEDIndex == 8) break;
1906 pDevice->byBBPreEDIndex = 8;
1907 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1908 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1909 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -61\n");
1910 } else if(pDevice->byBBPreEDRSSI <= 62) { //RSSI -62
1911 if(pDevice->byBBPreEDIndex == 7) break;
1912 pDevice->byBBPreEDIndex = 7;
1913 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1914 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x9C); //CR206(0xCE)
1915 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -62\n");
1916 } else if(pDevice->byBBPreEDRSSI <= 63) { //RSSI -63
1917 if(pDevice->byBBPreEDIndex == 6) break;
1918 pDevice->byBBPreEDIndex = 6;
1919 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1920 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x80); //CR206(0xCE)
1921 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -63\n");
1922 } else if(pDevice->byBBPreEDRSSI <= 64) { //RSSI -64
1923 if(pDevice->byBBPreEDIndex == 5) break;
1924 pDevice->byBBPreEDIndex = 5;
1925 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1926 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x68); //CR206(0xCE)
1927 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -64\n");
1928 } else if(pDevice->byBBPreEDRSSI <= 65) { //RSSI -65
1929 if(pDevice->byBBPreEDIndex == 4) break;
1930 pDevice->byBBPreEDIndex = 4;
1931 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1932 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x52); //CR206(0xCE)
1933 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -65\n");
1934 } else if(pDevice->byBBPreEDRSSI <= 66) { //RSSI -66
1935 if(pDevice->byBBPreEDIndex == 3) break;
1936 pDevice->byBBPreEDIndex = 3;
1937 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1938 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x43); //CR206(0xCE)
1939 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -66\n");
1940 } else if(pDevice->byBBPreEDRSSI <= 67) { //RSSI -67
1941 if(pDevice->byBBPreEDIndex == 2) break;
1942 pDevice->byBBPreEDIndex = 2;
1943 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1944 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x36); //CR206(0xCE)
1945 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -67\n");
1946 } else if(pDevice->byBBPreEDRSSI <= 68) { //RSSI -68
1947 if(pDevice->byBBPreEDIndex == 1) break;
1948 pDevice->byBBPreEDIndex = 1;
1949 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1950 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x2D); //CR206(0xCE)
1951 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -68\n");
1952 } else { //RSSI -69, -70, ...
1953 if(pDevice->byBBPreEDIndex == 0) break;
1954 pDevice->byBBPreEDIndex = 0;
1955 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1956 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x24); //CR206(0xCE)
1957 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -69, -70,..\n");
1958 }
1959 break;
1960
1961 case RF_VT3342A0: //RobertYu:20060627, testing table
1962 if( bScanning )
1963 { // need Max sensitivity //RSSI -67, -68, ...
1964 if(pDevice->byBBPreEDIndex == 0) break;
1965 pDevice->byBBPreEDIndex = 0;
1966 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1967 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x38); //CR206(0xCE)
1968 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -67, -68,..\n");
1969 break;
1970 }
1971
1972 if(pDevice->byBBPreEDRSSI <= 41) { // RSSI 0, -1,-2,....-41
1973 if(pDevice->byBBPreEDIndex == 20) break;
1974 pDevice->byBBPreEDIndex = 20;
1975 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1976 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1977 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI 0, -1,-2,..-41\n");
1978 } else if(pDevice->byBBPreEDRSSI <= 42) { //RSSI -42
1979 if(pDevice->byBBPreEDIndex == 19) break;
1980 pDevice->byBBPreEDIndex = 19;
1981 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x36); //CR201(0xC9)
1982 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1983 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -42\n");
1984 } else if(pDevice->byBBPreEDRSSI <= 43) { //RSSI -43
1985 if(pDevice->byBBPreEDIndex == 18) break;
1986 pDevice->byBBPreEDIndex = 18;
1987 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x26); //CR201(0xC9)
1988 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1989 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -43\n");
1990 } else if(pDevice->byBBPreEDRSSI <= 45) { //RSSI -44, -45
1991 if(pDevice->byBBPreEDIndex == 17) break;
1992 pDevice->byBBPreEDIndex = 17;
1993 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x18); //CR201(0xC9)
1994 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1995 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -44,-45\n");
1996 } else if(pDevice->byBBPreEDRSSI <= 47) { //RSSI -46, -47
1997 if(pDevice->byBBPreEDIndex == 16) break;
1998 pDevice->byBBPreEDIndex = 16;
1999 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x11); //CR201(0xC9)
2000 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
2001 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -46,-47\n");
2002 } else if(pDevice->byBBPreEDRSSI <= 49) { //RSSI -48, -49
2003 if(pDevice->byBBPreEDIndex == 15) break;
2004 pDevice->byBBPreEDIndex = 15;
2005 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0a); //CR201(0xC9)
2006 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
2007 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -48,-49\n");
2008 } else if(pDevice->byBBPreEDRSSI <= 51) { //RSSI -50, -51
2009 if(pDevice->byBBPreEDIndex == 14) break;
2010 pDevice->byBBPreEDIndex = 14;
2011 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x07); //CR201(0xC9)
2012 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
2013 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -50,-51\n");
2014 } else if(pDevice->byBBPreEDRSSI <= 53) { //RSSI -52, -53
2015 if(pDevice->byBBPreEDIndex == 13) break;
2016 pDevice->byBBPreEDIndex = 13;
2017 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x04); //CR201(0xC9)
2018 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
2019 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -52,-53\n");
2020 } else if(pDevice->byBBPreEDRSSI <= 55) { //RSSI -54, -55
2021 if(pDevice->byBBPreEDIndex == 12) break;
2022 pDevice->byBBPreEDIndex = 12;
2023 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
2024 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
2025 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -54,-55\n");
2026 } else if(pDevice->byBBPreEDRSSI <= 56) { //RSSI -56
2027 if(pDevice->byBBPreEDIndex == 11) break;
2028 pDevice->byBBPreEDIndex = 11;
2029 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
2030 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
2031 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -56\n");
2032 } else if(pDevice->byBBPreEDRSSI <= 57) { //RSSI -57
2033 if(pDevice->byBBPreEDIndex == 10) break;
2034 pDevice->byBBPreEDIndex = 10;
2035 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
2036 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xB0); //CR206(0xCE)
2037 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -57\n");
2038 } else if(pDevice->byBBPreEDRSSI <= 58) { //RSSI -58
2039 if(pDevice->byBBPreEDIndex == 9) break;
2040 pDevice->byBBPreEDIndex = 9;
2041 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
2042 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x70); //CR206(0xCE)
2043 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -58\n");
2044 } else if(pDevice->byBBPreEDRSSI <= 59) { //RSSI -59
2045 if(pDevice->byBBPreEDIndex == 8) break;
2046 pDevice->byBBPreEDIndex = 8;
2047 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
2048 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
2049 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -59\n");
2050 } else if(pDevice->byBBPreEDRSSI <= 60) { //RSSI -60
2051 if(pDevice->byBBPreEDIndex == 7) break;
2052 pDevice->byBBPreEDIndex = 7;
2053 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
2054 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xEA); //CR206(0xCE)
2055 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -60\n");
2056 } else if(pDevice->byBBPreEDRSSI <= 61) { //RSSI -61
2057 if(pDevice->byBBPreEDIndex == 6) break;
2058 pDevice->byBBPreEDIndex = 6;
2059 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
2060 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
2061 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -61\n");
2062 } else if(pDevice->byBBPreEDRSSI <= 62) { //RSSI -62
2063 if(pDevice->byBBPreEDIndex == 5) break;
2064 pDevice->byBBPreEDIndex = 5;
2065 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
2066 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x9C); //CR206(0xCE)
2067 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -62\n");
2068 } else if(pDevice->byBBPreEDRSSI <= 63) { //RSSI -63
2069 if(pDevice->byBBPreEDIndex == 4) break;
2070 pDevice->byBBPreEDIndex = 4;
2071 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
2072 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x80); //CR206(0xCE)
2073 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -63\n");
2074 } else if(pDevice->byBBPreEDRSSI <= 64) { //RSSI -64
2075 if(pDevice->byBBPreEDIndex == 3) break;
2076 pDevice->byBBPreEDIndex = 3;
2077 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
2078 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x68); //CR206(0xCE)
2079 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -64\n");
2080 } else if(pDevice->byBBPreEDRSSI <= 65) { //RSSI -65
2081 if(pDevice->byBBPreEDIndex == 2) break;
2082 pDevice->byBBPreEDIndex = 2;
2083 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
2084 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x52); //CR206(0xCE)
2085 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -65\n");
2086 } else if(pDevice->byBBPreEDRSSI <= 66) { //RSSI -66
2087 if(pDevice->byBBPreEDIndex == 1) break;
2088 pDevice->byBBPreEDIndex = 1;
2089 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
2090 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x43); //CR206(0xCE)
2091 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -66\n");
2092 } else { //RSSI -67, -68, ...
2093 if(pDevice->byBBPreEDIndex == 0) break;
2094 pDevice->byBBPreEDIndex = 0;
2095 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
2096 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x38); //CR206(0xCE)
2097 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -67, -68,..\n");
2098 }
2099 break;
2100
2101 }
2102
2103 }
2104