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