xenbus_client.c: correct exit path for xenbus_map_ring_valloc_hvm
[linux/fpc-iii.git] / drivers / staging / vt6656 / baseband.c
blob33fa76759bf172a7b46047bc0ab7acea3bf83909
1 /*
2 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
3 * All rights reserved.
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 * File: baseband.c
22 * Purpose: Implement functions to access baseband
24 * Author: Jerry Chen
26 * Date: Jun. 5, 2002
28 * Functions:
29 * BBuGetFrameTime - Calculate data frame transmitting time
30 * BBvCalculateParameter - Calculate PhyLength, PhyService and Phy Signal parameter for baseband Tx
31 * BBbVT3184Init - VIA VT3184 baseband chip init code
33 * Revision History:
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"
48 static int msglevel =MSG_LEVEL_INFO;
49 //static int msglevel =MSG_LEVEL_DEBUG;
51 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
118 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
377 //{{RobertYu:20060515, new BB setting for VT3226D0
378 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,
637 const u16 awcFrameTime[MAX_RATE] =
638 {10, 20, 55, 110, 24, 36, 48, 72, 96, 144, 192, 216};
641 static
642 unsigned long
643 s_ulGetLowSQ3(PSDevice pDevice);
645 static
646 unsigned long
647 s_ulGetRatio(PSDevice pDevice);
649 static
650 void
651 s_vClearSQ3Value(PSDevice pDevice);
655 * Description: Calculate data frame transmitting time
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:
665 * Return Value: FrameTime
668 unsigned int
669 BBuGetFrameTime(
670 u8 byPreambleType,
671 u8 byPktType,
672 unsigned int cbFrameLength,
673 u16 wRate
676 unsigned int uFrameTime;
677 unsigned int uPreamble;
678 unsigned int uTmp;
679 unsigned int uRateIdx = (unsigned int)wRate;
680 unsigned int uRate = 0;
682 if (uRateIdx > RATE_54M) {
683 ASSERT(0);
684 return 0;
687 uRate = (unsigned int)awcFrameTime[uRateIdx];
689 if (uRateIdx <= 3) { //CCK mode
691 if (byPreambleType == 1) {//Short
692 uPreamble = 96;
693 } else {
694 uPreamble = 192;
696 uFrameTime = (cbFrameLength * 80) / uRate; //?????
697 uTmp = (uFrameTime * uRate) / 80;
698 if (cbFrameLength != uTmp) {
699 uFrameTime ++;
702 return (uPreamble + uFrameTime);
704 else {
705 uFrameTime = (cbFrameLength * 8 + 22) / uRate; //????????
706 uTmp = ((uFrameTime * uRate) - 22) / 8;
707 if(cbFrameLength != uTmp) {
708 uFrameTime ++;
710 uFrameTime = uFrameTime * 4; //???????
711 if(byPktType != PK_TYPE_11A) {
712 uFrameTime += 6;
714 return (20 + uFrameTime); //??????
719 * Description: Calculate Length, Service, and Signal fields of Phy for Tx
721 * Parameters:
722 * In:
723 * pDevice - Device Structure
724 * cbFrameLength - Tx Frame Length
725 * wRate - Tx Rate
726 * Out:
727 * pwPhyLen - pointer to Phy Length field
728 * pbyPhySrv - pointer to Phy Service field
729 * pbyPhySgn - pointer to Phy Signal field
731 * Return Value: none
734 void BBvCalculateParameter(struct vnt_private *pDevice, u32 cbFrameLength,
735 u16 wRate, u8 byPacketType, u16 *pwPhyLen, u8 *pbyPhySrv,
736 u8 *pbyPhySgn)
738 u32 cbBitCount;
739 u32 cbUsCount = 0;
740 u32 cbTmp;
741 int bExtBit;
742 u8 byPreambleType = pDevice->byPreambleType;
743 int bCCK = pDevice->bCCK;
745 cbBitCount = cbFrameLength * 8;
746 bExtBit = false;
748 switch (wRate) {
749 case RATE_1M :
750 cbUsCount = cbBitCount;
751 *pbyPhySgn = 0x00;
752 break;
754 case RATE_2M :
755 cbUsCount = cbBitCount / 2;
756 if (byPreambleType == 1)
757 *pbyPhySgn = 0x09;
758 else // long preamble
759 *pbyPhySgn = 0x01;
760 break;
762 case RATE_5M :
763 if (bCCK == false)
764 cbBitCount ++;
765 cbUsCount = (cbBitCount * 10) / 55;
766 cbTmp = (cbUsCount * 55) / 10;
767 if (cbTmp != cbBitCount)
768 cbUsCount ++;
769 if (byPreambleType == 1)
770 *pbyPhySgn = 0x0a;
771 else // long preamble
772 *pbyPhySgn = 0x02;
773 break;
775 case RATE_11M :
777 if (bCCK == false)
778 cbBitCount ++;
779 cbUsCount = cbBitCount / 11;
780 cbTmp = cbUsCount * 11;
781 if (cbTmp != cbBitCount) {
782 cbUsCount ++;
783 if ((cbBitCount - cbTmp) <= 3)
784 bExtBit = true;
786 if (byPreambleType == 1)
787 *pbyPhySgn = 0x0b;
788 else // long preamble
789 *pbyPhySgn = 0x03;
790 break;
792 case RATE_6M :
793 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
794 *pbyPhySgn = 0x9B; //1001 1011
796 else {//11g, 2.4GHZ
797 *pbyPhySgn = 0x8B; //1000 1011
799 break;
801 case RATE_9M :
802 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
803 *pbyPhySgn = 0x9F; //1001 1111
805 else {//11g, 2.4GHZ
806 *pbyPhySgn = 0x8F; //1000 1111
808 break;
810 case RATE_12M :
811 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
812 *pbyPhySgn = 0x9A; //1001 1010
814 else {//11g, 2.4GHZ
815 *pbyPhySgn = 0x8A; //1000 1010
817 break;
819 case RATE_18M :
820 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
821 *pbyPhySgn = 0x9E; //1001 1110
823 else {//11g, 2.4GHZ
824 *pbyPhySgn = 0x8E; //1000 1110
826 break;
828 case RATE_24M :
829 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
830 *pbyPhySgn = 0x99; //1001 1001
832 else {//11g, 2.4GHZ
833 *pbyPhySgn = 0x89; //1000 1001
835 break;
837 case RATE_36M :
838 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
839 *pbyPhySgn = 0x9D; //1001 1101
841 else {//11g, 2.4GHZ
842 *pbyPhySgn = 0x8D; //1000 1101
844 break;
846 case RATE_48M :
847 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
848 *pbyPhySgn = 0x98; //1001 1000
850 else {//11g, 2.4GHZ
851 *pbyPhySgn = 0x88; //1000 1000
853 break;
855 case RATE_54M :
856 if (byPacketType == PK_TYPE_11A) {//11a, 5GHZ
857 *pbyPhySgn = 0x9C; //1001 1100
859 else {//11g, 2.4GHZ
860 *pbyPhySgn = 0x8C; //1000 1100
862 break;
864 default :
865 if (byPacketType == PK_TYPE_11A) {//11a, 5GHZ
866 *pbyPhySgn = 0x9C; //1001 1100
868 else {//11g, 2.4GHZ
869 *pbyPhySgn = 0x8C; //1000 1100
871 break;
874 if (byPacketType == PK_TYPE_11B) {
875 *pbyPhySrv = 0x00;
876 if (bExtBit)
877 *pbyPhySrv = *pbyPhySrv | 0x80;
878 *pwPhyLen = (u16) cbUsCount;
880 else {
881 *pbyPhySrv = 0x00;
882 *pwPhyLen = (u16)cbFrameLength;
887 * Description: Set Antenna mode
889 * Parameters:
890 * In:
891 * pDevice - Device Structure
892 * byAntennaMode - Antenna Mode
893 * Out:
894 * none
896 * Return Value: none
899 void BBvSetAntennaMode(struct vnt_private *pDevice, u8 byAntennaMode)
901 switch (byAntennaMode) {
902 case ANT_TXA:
903 case ANT_TXB:
904 break;
905 case ANT_RXA:
906 pDevice->byBBRxConf &= 0xFC;
907 break;
908 case ANT_RXB:
909 pDevice->byBBRxConf &= 0xFE;
910 pDevice->byBBRxConf |= 0x02;
911 break;
914 CONTROLnsRequestOut(pDevice,
915 MESSAGE_TYPE_SET_ANTMD,
916 (u16) byAntennaMode,
919 NULL);
923 * Description: Set Antenna mode
925 * Parameters:
926 * In:
927 * pDevice - Device Structure
928 * byAntennaMode - Antenna Mode
929 * Out:
930 * none
932 * Return Value: none
936 int BBbVT3184Init(struct vnt_private *pDevice)
938 int ntStatus;
939 u16 wLength;
940 u8 * pbyAddr;
941 u8 * pbyAgc;
942 u16 wLengthAgc;
943 u8 abyArray[256];
945 ntStatus = CONTROLnsRequestIn(pDevice,
946 MESSAGE_TYPE_READ,
948 MESSAGE_REQUEST_EEPROM,
949 EEP_MAX_CONTEXT_SIZE,
950 pDevice->abyEEPROM);
951 if (ntStatus != STATUS_SUCCESS) {
952 return false;
955 // if ((pDevice->abyEEPROM[EEP_OFS_RADIOCTL]&0x06)==0x04)
956 // return false;
958 //zonetype initial
959 pDevice->byOriginalZonetype = pDevice->abyEEPROM[EEP_OFS_ZONETYPE];
960 if(pDevice->config_file.ZoneType >= 0) { //read zonetype file ok!
961 if ((pDevice->config_file.ZoneType == 0)&&
962 (pDevice->abyEEPROM[EEP_OFS_ZONETYPE] !=0x00)){ //for USA
963 pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0;
964 pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0B;
965 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Init Zone Type :USA\n");
967 else if((pDevice->config_file.ZoneType == 1)&&
968 (pDevice->abyEEPROM[EEP_OFS_ZONETYPE]!=0x01)){ //for Japan
969 pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0x01;
970 pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0D;
971 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Init Zone Type :Japan\n");
973 else if((pDevice->config_file.ZoneType == 2)&&
974 (pDevice->abyEEPROM[EEP_OFS_ZONETYPE]!=0x02)){ //for Europe
975 pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0x02;
976 pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0D;
977 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Init Zone Type :Europe\n");
979 else {
980 if(pDevice->config_file.ZoneType !=pDevice->abyEEPROM[EEP_OFS_ZONETYPE])
981 printk("zonetype in file[%02x] mismatch with in EEPROM[%02x]\n",pDevice->config_file.ZoneType,pDevice->abyEEPROM[EEP_OFS_ZONETYPE]);
982 else
983 printk("Read Zonetype file success,use default zonetype setting[%02x]\n",pDevice->config_file.ZoneType);
987 if ( !pDevice->bZoneRegExist ) {
988 pDevice->byZoneType = pDevice->abyEEPROM[EEP_OFS_ZONETYPE];
990 pDevice->byRFType = pDevice->abyEEPROM[EEP_OFS_RFTYPE];
992 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Zone Type %x\n", pDevice->byZoneType);
993 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"RF Type %d\n", pDevice->byRFType);
995 if ((pDevice->byRFType == RF_AL2230) || (pDevice->byRFType == RF_AL2230S)) {
996 pDevice->byBBRxConf = abyVT3184_AL2230[10];
997 wLength = sizeof(abyVT3184_AL2230);
998 pbyAddr = abyVT3184_AL2230;
999 pbyAgc = abyVT3184_AGC;
1000 wLengthAgc = sizeof(abyVT3184_AGC);
1002 pDevice->abyBBVGA[0] = 0x1C;
1003 pDevice->abyBBVGA[1] = 0x10;
1004 pDevice->abyBBVGA[2] = 0x0;
1005 pDevice->abyBBVGA[3] = 0x0;
1006 pDevice->ldBmThreshold[0] = -70;
1007 pDevice->ldBmThreshold[1] = -48;
1008 pDevice->ldBmThreshold[2] = 0;
1009 pDevice->ldBmThreshold[3] = 0;
1011 else if (pDevice->byRFType == RF_AIROHA7230) {
1012 pDevice->byBBRxConf = abyVT3184_AL2230[10];
1013 wLength = sizeof(abyVT3184_AL2230);
1014 pbyAddr = abyVT3184_AL2230;
1015 pbyAgc = abyVT3184_AGC;
1016 wLengthAgc = sizeof(abyVT3184_AGC);
1018 // Init ANT B select,TX Config CR09 = 0x61->0x45, 0x45->0x41(VC1/VC2 define, make the ANT_A, ANT_B inverted)
1019 //pbyAddr[0x09] = 0x41;
1020 // Init ANT B select,RX Config CR10 = 0x28->0x2A, 0x2A->0x28(VC1/VC2 define, make the ANT_A, ANT_B inverted)
1021 //pbyAddr[0x0a] = 0x28;
1022 // Select VC1/VC2, CR215 = 0x02->0x06
1023 pbyAddr[0xd7] = 0x06;
1025 pDevice->abyBBVGA[0] = 0x1C;
1026 pDevice->abyBBVGA[1] = 0x10;
1027 pDevice->abyBBVGA[2] = 0x0;
1028 pDevice->abyBBVGA[3] = 0x0;
1029 pDevice->ldBmThreshold[0] = -70;
1030 pDevice->ldBmThreshold[1] = -48;
1031 pDevice->ldBmThreshold[2] = 0;
1032 pDevice->ldBmThreshold[3] = 0;
1034 else if ( (pDevice->byRFType == RF_VT3226) || (pDevice->byRFType == RF_VT3226D0) ) {
1035 pDevice->byBBRxConf = abyVT3184_VT3226D0[10]; //RobertYu:20060515
1036 wLength = sizeof(abyVT3184_VT3226D0); //RobertYu:20060515
1037 pbyAddr = abyVT3184_VT3226D0; //RobertYu:20060515
1038 pbyAgc = abyVT3184_AGC;
1039 wLengthAgc = sizeof(abyVT3184_AGC);
1041 pDevice->abyBBVGA[0] = 0x20; //RobertYu:20060104, reguest by Jack
1042 pDevice->abyBBVGA[1] = 0x10;
1043 pDevice->abyBBVGA[2] = 0x0;
1044 pDevice->abyBBVGA[3] = 0x0;
1045 pDevice->ldBmThreshold[0] = -70;
1046 pDevice->ldBmThreshold[1] = -48;
1047 pDevice->ldBmThreshold[2] = 0;
1048 pDevice->ldBmThreshold[3] = 0;
1049 // Fix VT3226 DFC system timing issue
1050 MACvRegBitsOn(pDevice, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT);
1051 //}}
1052 //{{RobertYu:20060609
1053 } else if ( (pDevice->byRFType == RF_VT3342A0) ) {
1054 pDevice->byBBRxConf = abyVT3184_VT3226D0[10];
1055 wLength = sizeof(abyVT3184_VT3226D0);
1056 pbyAddr = abyVT3184_VT3226D0;
1057 pbyAgc = abyVT3184_AGC;
1058 wLengthAgc = sizeof(abyVT3184_AGC);
1060 pDevice->abyBBVGA[0] = 0x20;
1061 pDevice->abyBBVGA[1] = 0x10;
1062 pDevice->abyBBVGA[2] = 0x0;
1063 pDevice->abyBBVGA[3] = 0x0;
1064 pDevice->ldBmThreshold[0] = -70;
1065 pDevice->ldBmThreshold[1] = -48;
1066 pDevice->ldBmThreshold[2] = 0;
1067 pDevice->ldBmThreshold[3] = 0;
1068 // Fix VT3226 DFC system timing issue
1069 MACvRegBitsOn(pDevice, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT);
1070 //}}
1071 } else {
1072 return true;
1075 memcpy(abyArray, pbyAddr, wLength);
1076 CONTROLnsRequestOut(pDevice,
1077 MESSAGE_TYPE_WRITE,
1079 MESSAGE_REQUEST_BBREG,
1080 wLength,
1081 abyArray
1084 memcpy(abyArray, pbyAgc, wLengthAgc);
1085 CONTROLnsRequestOut(pDevice,
1086 MESSAGE_TYPE_WRITE,
1088 MESSAGE_REQUEST_BBAGC,
1089 wLengthAgc,
1090 abyArray
1093 if ((pDevice->byRFType == RF_VT3226) || //RobertYu:20051116, 20060111 remove VT3226D0
1094 (pDevice->byRFType == RF_VT3342A0) //RobertYu:20060609
1096 ControlvWriteByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_ITRTMSET,0x23);
1097 MACvRegBitsOn(pDevice,MAC_REG_PAPEDELAY,0x01);
1099 else if (pDevice->byRFType == RF_VT3226D0)
1101 ControlvWriteByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_ITRTMSET,0x11);
1102 MACvRegBitsOn(pDevice,MAC_REG_PAPEDELAY,0x01);
1105 ControlvWriteByte(pDevice,MESSAGE_REQUEST_BBREG,0x04,0x7F);
1106 ControlvWriteByte(pDevice,MESSAGE_REQUEST_BBREG,0x0D,0x01);
1108 RFbRFTableDownload(pDevice);
1109 return true;//ntStatus;
1113 * Description: Set ShortSlotTime mode
1115 * Parameters:
1116 * In:
1117 * pDevice - Device Structure
1118 * Out:
1119 * none
1121 * Return Value: none
1124 void BBvSetShortSlotTime(struct vnt_private *pDevice)
1126 u8 byBBVGA=0;
1128 if (pDevice->bShortSlotTime)
1129 pDevice->byBBRxConf &= 0xDF;//1101 1111
1130 else
1131 pDevice->byBBRxConf |= 0x20;//0010 0000
1133 ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0xE7, &byBBVGA);
1134 if (byBBVGA == pDevice->abyBBVGA[0])
1135 pDevice->byBBRxConf |= 0x20;//0010 0000
1137 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0A, pDevice->byBBRxConf);
1140 void BBvSetVGAGainOffset(struct vnt_private *pDevice, u8 byData)
1143 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xE7, byData);
1145 // patch for 3253B0 Baseband with Cardbus module
1146 if (pDevice->bShortSlotTime)
1147 pDevice->byBBRxConf &= 0xDF; /* 1101 1111 */
1148 else
1149 pDevice->byBBRxConf |= 0x20; /* 0010 0000 */
1151 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0A, pDevice->byBBRxConf);//CR10
1155 * Description: BBvSetDeepSleep
1157 * Parameters:
1158 * In:
1159 * pDevice - Device Structure
1160 * Out:
1161 * none
1163 * Return Value: none
1166 void BBvSetDeepSleep(struct vnt_private *pDevice)
1168 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0c, 0x17);//CR12
1169 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0D, 0xB9);//CR13
1172 void BBvExitDeepSleep(struct vnt_private *pDevice)
1174 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0C, 0x00);//CR12
1175 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0D, 0x01);//CR13
1178 static unsigned long s_ulGetLowSQ3(struct vnt_private *pDevice)
1180 int ii;
1181 unsigned long ulSQ3 = 0;
1182 unsigned long ulMaxPacket;
1184 ulMaxPacket = pDevice->aulPktNum[RATE_54M];
1185 if (pDevice->aulPktNum[RATE_54M] != 0)
1186 ulSQ3 = pDevice->aulSQ3Val[RATE_54M] / pDevice->aulPktNum[RATE_54M];
1188 for (ii = RATE_48M; ii >= RATE_6M; ii--)
1189 if (pDevice->aulPktNum[ii] > ulMaxPacket) {
1190 ulMaxPacket = pDevice->aulPktNum[ii];
1191 ulSQ3 = pDevice->aulSQ3Val[ii] / pDevice->aulPktNum[ii];
1194 return ulSQ3;
1197 static unsigned long s_ulGetRatio(struct vnt_private *pDevice)
1199 int ii, jj;
1200 unsigned long ulRatio = 0;
1201 unsigned long ulMaxPacket;
1202 unsigned long ulPacketNum;
1204 //This is a thousand-ratio
1205 ulMaxPacket = pDevice->aulPktNum[RATE_54M];
1206 if ( pDevice->aulPktNum[RATE_54M] != 0 ) {
1207 ulPacketNum = pDevice->aulPktNum[RATE_54M];
1208 ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
1209 ulRatio += TOP_RATE_54M;
1211 for (ii = RATE_48M; ii >= RATE_1M; ii--)
1212 if ( pDevice->aulPktNum[ii] > ulMaxPacket ) {
1213 ulPacketNum = 0;
1214 for ( jj=RATE_54M;jj>=ii;jj--)
1215 ulPacketNum += pDevice->aulPktNum[jj];
1216 ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
1217 ulRatio += TOP_RATE_48M;
1218 ulMaxPacket = pDevice->aulPktNum[ii];
1221 return ulRatio;
1224 static void s_vClearSQ3Value(struct vnt_private *pDevice)
1226 int ii;
1227 pDevice->uDiversityCnt = 0;
1229 for ( ii=RATE_1M;ii<MAX_RATE;ii++) {
1230 pDevice->aulPktNum[ii] = 0;
1231 pDevice->aulSQ3Val[ii] = 0;
1236 * Description: Antenna Diversity
1238 * Parameters:
1239 * In:
1240 * pDevice - Device Structure
1241 * byRSR - RSR from received packet
1242 * bySQ3 - SQ3 value from received packet
1243 * Out:
1244 * none
1246 * Return Value: none
1250 void BBvAntennaDiversity(struct vnt_private *pDevice,
1251 u8 byRxRate, u8 bySQ3)
1254 pDevice->uDiversityCnt++;
1255 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pDevice->uDiversityCnt = %d\n", (int)pDevice->uDiversityCnt);
1257 if (byRxRate == 2) {
1258 pDevice->aulPktNum[RATE_1M]++;
1260 else if (byRxRate==4) {
1261 pDevice->aulPktNum[RATE_2M]++;
1263 else if (byRxRate==11) {
1264 pDevice->aulPktNum[RATE_5M]++;
1266 else if (byRxRate==22) {
1267 pDevice->aulPktNum[RATE_11M]++;
1269 else if(byRxRate==12){
1270 pDevice->aulPktNum[RATE_6M]++;
1271 pDevice->aulSQ3Val[RATE_6M] += bySQ3;
1273 else if(byRxRate==18){
1274 pDevice->aulPktNum[RATE_9M]++;
1275 pDevice->aulSQ3Val[RATE_9M] += bySQ3;
1277 else if(byRxRate==24){
1278 pDevice->aulPktNum[RATE_12M]++;
1279 pDevice->aulSQ3Val[RATE_12M] += bySQ3;
1281 else if(byRxRate==36){
1282 pDevice->aulPktNum[RATE_18M]++;
1283 pDevice->aulSQ3Val[RATE_18M] += bySQ3;
1285 else if(byRxRate==48){
1286 pDevice->aulPktNum[RATE_24M]++;
1287 pDevice->aulSQ3Val[RATE_24M] += bySQ3;
1289 else if(byRxRate==72){
1290 pDevice->aulPktNum[RATE_36M]++;
1291 pDevice->aulSQ3Val[RATE_36M] += bySQ3;
1293 else if(byRxRate==96){
1294 pDevice->aulPktNum[RATE_48M]++;
1295 pDevice->aulSQ3Val[RATE_48M] += bySQ3;
1297 else if(byRxRate==108){
1298 pDevice->aulPktNum[RATE_54M]++;
1299 pDevice->aulSQ3Val[RATE_54M] += bySQ3;
1302 if (pDevice->byAntennaState == 0) {
1304 if (pDevice->uDiversityCnt > pDevice->ulDiversityNValue) {
1305 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ulDiversityNValue=[%d],54M-[%d]\n",(int)pDevice->ulDiversityNValue, (int)pDevice->aulPktNum[RATE_54M]);
1307 pDevice->ulSQ3_State0 = s_ulGetLowSQ3(pDevice);
1308 pDevice->ulRatio_State0 = s_ulGetRatio(pDevice);
1309 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State0, SQ3= [%08x] rate = [%08x]\n",(int)pDevice->ulSQ3_State0,(int)pDevice->ulRatio_State0);
1311 if ( ((pDevice->aulPktNum[RATE_54M] < pDevice->ulDiversityNValue/2) &&
1312 (pDevice->ulSQ3_State0 > pDevice->ulSQ3TH) ) ||
1313 (pDevice->ulSQ3_State0 == 0 ) ) {
1315 if ( pDevice->byTMax == 0 )
1316 return;
1318 bScheduleCommand((void *) pDevice,
1319 WLAN_CMD_CHANGE_ANTENNA,
1320 NULL);
1322 pDevice->byAntennaState = 1;
1324 del_timer(&pDevice->TimerSQ3Tmax3);
1325 del_timer(&pDevice->TimerSQ3Tmax2);
1326 pDevice->TimerSQ3Tmax1.expires = RUN_AT(pDevice->byTMax * HZ);
1327 add_timer(&pDevice->TimerSQ3Tmax1);
1329 } else {
1330 pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ);
1331 add_timer(&pDevice->TimerSQ3Tmax3);
1333 s_vClearSQ3Value(pDevice);
1336 } else { //byAntennaState == 1
1338 if (pDevice->uDiversityCnt > pDevice->ulDiversityMValue) {
1340 del_timer(&pDevice->TimerSQ3Tmax1);
1341 pDevice->ulSQ3_State1 = s_ulGetLowSQ3(pDevice);
1342 pDevice->ulRatio_State1 = s_ulGetRatio(pDevice);
1343 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State1, rate0 = %08x,rate1 = %08x\n",(int)pDevice->ulRatio_State0,(int)pDevice->ulRatio_State1);
1345 if ( ((pDevice->ulSQ3_State1 == 0) && (pDevice->ulSQ3_State0 != 0)) ||
1346 ((pDevice->ulSQ3_State1 == 0) && (pDevice->ulSQ3_State0 == 0) && (pDevice->ulRatio_State1 < pDevice->ulRatio_State0)) ||
1347 ((pDevice->ulSQ3_State1 != 0) && (pDevice->ulSQ3_State0 != 0) && (pDevice->ulSQ3_State0 < pDevice->ulSQ3_State1))
1350 bScheduleCommand((void *) pDevice,
1351 WLAN_CMD_CHANGE_ANTENNA,
1352 NULL);
1354 pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ);
1355 pDevice->TimerSQ3Tmax2.expires = RUN_AT(pDevice->byTMax2 * HZ);
1356 add_timer(&pDevice->TimerSQ3Tmax3);
1357 add_timer(&pDevice->TimerSQ3Tmax2);
1360 pDevice->byAntennaState = 0;
1361 s_vClearSQ3Value(pDevice);
1363 } //byAntennaState
1368 * Description:
1369 * Timer for SQ3 antenna diversity
1371 * Parameters:
1372 * In:
1373 * pvSysSpec1
1374 * hDeviceContext - Pointer to the adapter
1375 * pvSysSpec2
1376 * pvSysSpec3
1377 * Out:
1378 * none
1380 * Return Value: none
1384 void TimerSQ3CallBack(struct vnt_private *pDevice)
1387 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"TimerSQ3CallBack...");
1388 spin_lock_irq(&pDevice->lock);
1390 bScheduleCommand((void *) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL);
1391 pDevice->byAntennaState = 0;
1392 s_vClearSQ3Value(pDevice);
1393 pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ);
1394 pDevice->TimerSQ3Tmax2.expires = RUN_AT(pDevice->byTMax2 * HZ);
1395 add_timer(&pDevice->TimerSQ3Tmax3);
1396 add_timer(&pDevice->TimerSQ3Tmax2);
1398 spin_unlock_irq(&pDevice->lock);
1403 * Description:
1404 * Timer for SQ3 antenna diversity
1406 * Parameters:
1407 * In:
1408 * pvSysSpec1
1409 * hDeviceContext - Pointer to the adapter
1410 * pvSysSpec2
1411 * pvSysSpec3
1412 * Out:
1413 * none
1415 * Return Value: none
1419 void TimerSQ3Tmax3CallBack(struct vnt_private *pDevice)
1422 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"TimerSQ3Tmax3CallBack...");
1423 spin_lock_irq(&pDevice->lock);
1425 pDevice->ulRatio_State0 = s_ulGetRatio(pDevice);
1426 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State0 = [%08x]\n",(int)pDevice->ulRatio_State0);
1428 s_vClearSQ3Value(pDevice);
1429 if ( pDevice->byTMax == 0 ) {
1430 pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ);
1431 add_timer(&pDevice->TimerSQ3Tmax3);
1432 spin_unlock_irq(&pDevice->lock);
1433 return;
1436 bScheduleCommand((void *) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL);
1437 pDevice->byAntennaState = 1;
1438 del_timer(&pDevice->TimerSQ3Tmax3);
1439 del_timer(&pDevice->TimerSQ3Tmax2);
1440 pDevice->TimerSQ3Tmax1.expires = RUN_AT(pDevice->byTMax * HZ);
1441 add_timer(&pDevice->TimerSQ3Tmax1);
1443 spin_unlock_irq(&pDevice->lock);
1446 void BBvUpdatePreEDThreshold(struct vnt_private *pDevice, int bScanning)
1449 switch(pDevice->byRFType)
1451 case RF_AL2230:
1452 case RF_AL2230S:
1453 case RF_AIROHA7230:
1454 //RobertYu:20060627, update new table
1456 if( bScanning )
1457 { // need Max sensitivity //RSSI -69, -70,....
1458 if(pDevice->byBBPreEDIndex == 0) break;
1459 pDevice->byBBPreEDIndex = 0;
1460 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1461 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1462 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -69, -70, -71,...\n");
1463 break;
1466 if(pDevice->byBBPreEDRSSI <= 45) { // RSSI 0, -1,-2,....-45
1467 if(pDevice->byBBPreEDIndex == 20) break;
1468 pDevice->byBBPreEDIndex = 20;
1469 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1470 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1471 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI 0, -1,-2,..-45\n");
1472 } else if(pDevice->byBBPreEDRSSI <= 46) { //RSSI -46
1473 if(pDevice->byBBPreEDIndex == 19) break;
1474 pDevice->byBBPreEDIndex = 19;
1475 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x1A); //CR201(0xC9)
1476 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1477 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -46\n");
1478 } else if(pDevice->byBBPreEDRSSI <= 47) { //RSSI -47
1479 if(pDevice->byBBPreEDIndex == 18) break;
1480 pDevice->byBBPreEDIndex = 18;
1481 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x15); //CR201(0xC9)
1482 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1483 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -47\n");
1484 } else if(pDevice->byBBPreEDRSSI <= 49) { //RSSI -48, -49
1485 if(pDevice->byBBPreEDIndex == 17) break;
1486 pDevice->byBBPreEDIndex = 17;
1487 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0E); //CR201(0xC9)
1488 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1489 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -48,-49\n");
1490 } else if(pDevice->byBBPreEDRSSI <= 51) { //RSSI -50, -51
1491 if(pDevice->byBBPreEDIndex == 16) break;
1492 pDevice->byBBPreEDIndex = 16;
1493 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x09); //CR201(0xC9)
1494 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1495 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -50,-51\n");
1496 } else if(pDevice->byBBPreEDRSSI <= 53) { //RSSI -52, -53
1497 if(pDevice->byBBPreEDIndex == 15) break;
1498 pDevice->byBBPreEDIndex = 15;
1499 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x06); //CR201(0xC9)
1500 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1501 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -52,-53\n");
1502 } else if(pDevice->byBBPreEDRSSI <= 55) { //RSSI -54, -55
1503 if(pDevice->byBBPreEDIndex == 14) break;
1504 pDevice->byBBPreEDIndex = 14;
1505 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x03); //CR201(0xC9)
1506 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1507 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -54,-55\n");
1508 } else if(pDevice->byBBPreEDRSSI <= 56) { //RSSI -56
1509 if(pDevice->byBBPreEDIndex == 13) break;
1510 pDevice->byBBPreEDIndex = 13;
1511 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1512 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xA0); //CR206(0xCE)
1513 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -56\n");
1514 } else if(pDevice->byBBPreEDRSSI <= 57) { //RSSI -57
1515 if(pDevice->byBBPreEDIndex == 12) break;
1516 pDevice->byBBPreEDIndex = 12;
1517 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1518 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x20); //CR206(0xCE)
1519 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -57\n");
1520 } else if(pDevice->byBBPreEDRSSI <= 58) { //RSSI -58
1521 if(pDevice->byBBPreEDIndex == 11) break;
1522 pDevice->byBBPreEDIndex = 11;
1523 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1524 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xA0); //CR206(0xCE)
1525 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -58\n");
1526 } else if(pDevice->byBBPreEDRSSI <= 59) { //RSSI -59
1527 if(pDevice->byBBPreEDIndex == 10) break;
1528 pDevice->byBBPreEDIndex = 10;
1529 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1530 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x54); //CR206(0xCE)
1531 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -59\n");
1532 } else if(pDevice->byBBPreEDRSSI <= 60) { //RSSI -60
1533 if(pDevice->byBBPreEDIndex == 9) break;
1534 pDevice->byBBPreEDIndex = 9;
1535 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1536 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x18); //CR206(0xCE)
1537 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -60\n");
1538 } else if(pDevice->byBBPreEDRSSI <= 61) { //RSSI -61
1539 if(pDevice->byBBPreEDIndex == 8) break;
1540 pDevice->byBBPreEDIndex = 8;
1541 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1542 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xE3); //CR206(0xCE)
1543 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -61\n");
1544 } else if(pDevice->byBBPreEDRSSI <= 62) { //RSSI -62
1545 if(pDevice->byBBPreEDIndex == 7) break;
1546 pDevice->byBBPreEDIndex = 7;
1547 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1548 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xB9); //CR206(0xCE)
1549 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -62\n");
1550 } else if(pDevice->byBBPreEDRSSI <= 63) { //RSSI -63
1551 if(pDevice->byBBPreEDIndex == 6) break;
1552 pDevice->byBBPreEDIndex = 6;
1553 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1554 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x93); //CR206(0xCE)
1555 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -63\n");
1556 } else if(pDevice->byBBPreEDRSSI <= 64) { //RSSI -64
1557 if(pDevice->byBBPreEDIndex == 5) break;
1558 pDevice->byBBPreEDIndex = 5;
1559 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1560 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x79); //CR206(0xCE)
1561 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -64\n");
1562 } else if(pDevice->byBBPreEDRSSI <= 65) { //RSSI -65
1563 if(pDevice->byBBPreEDIndex == 4) break;
1564 pDevice->byBBPreEDIndex = 4;
1565 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1566 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x62); //CR206(0xCE)
1567 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -65\n");
1568 } else if(pDevice->byBBPreEDRSSI <= 66) { //RSSI -66
1569 if(pDevice->byBBPreEDIndex == 3) break;
1570 pDevice->byBBPreEDIndex = 3;
1571 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1572 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x51); //CR206(0xCE)
1573 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -66\n");
1574 } else if(pDevice->byBBPreEDRSSI <= 67) { //RSSI -67
1575 if(pDevice->byBBPreEDIndex == 2) break;
1576 pDevice->byBBPreEDIndex = 2;
1577 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1578 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x43); //CR206(0xCE)
1579 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -67\n");
1580 } else if(pDevice->byBBPreEDRSSI <= 68) { //RSSI -68
1581 if(pDevice->byBBPreEDIndex == 1) break;
1582 pDevice->byBBPreEDIndex = 1;
1583 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1584 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x36); //CR206(0xCE)
1585 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -68\n");
1586 } else { //RSSI -69, -70,....
1587 if(pDevice->byBBPreEDIndex == 0) break;
1588 pDevice->byBBPreEDIndex = 0;
1589 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1590 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1591 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -69, -70,...\n");
1593 break;
1595 case RF_VT3226:
1596 case RF_VT3226D0:
1597 //RobertYu:20060627, update new table
1599 if( bScanning )
1600 { // need Max sensitivity //RSSI -69, -70, ...
1601 if(pDevice->byBBPreEDIndex == 0) break;
1602 pDevice->byBBPreEDIndex = 0;
1603 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1604 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x24); //CR206(0xCE)
1605 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -69, -70,..\n");
1606 break;
1609 if(pDevice->byBBPreEDRSSI <= 41) { // RSSI 0, -1,-2,....-41
1610 if(pDevice->byBBPreEDIndex == 22) break;
1611 pDevice->byBBPreEDIndex = 22;
1612 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1613 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1614 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI 0, -1,-2,..-41\n");
1615 } else if(pDevice->byBBPreEDRSSI <= 42) { //RSSI -42
1616 if(pDevice->byBBPreEDIndex == 21) break;
1617 pDevice->byBBPreEDIndex = 21;
1618 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x36); //CR201(0xC9)
1619 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1620 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -42\n");
1621 } else if(pDevice->byBBPreEDRSSI <= 43) { //RSSI -43
1622 if(pDevice->byBBPreEDIndex == 20) break;
1623 pDevice->byBBPreEDIndex = 20;
1624 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x26); //CR201(0xC9)
1625 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1626 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -43\n");
1627 } else if(pDevice->byBBPreEDRSSI <= 45) { //RSSI -44, -45
1628 if(pDevice->byBBPreEDIndex == 19) break;
1629 pDevice->byBBPreEDIndex = 19;
1630 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x18); //CR201(0xC9)
1631 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1632 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -44,-45\n");
1633 } else if(pDevice->byBBPreEDRSSI <= 47) { //RSSI -46, -47
1634 if(pDevice->byBBPreEDIndex == 18) break;
1635 pDevice->byBBPreEDIndex = 18;
1636 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x11); //CR201(0xC9)
1637 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1638 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -46,-47\n");
1639 } else if(pDevice->byBBPreEDRSSI <= 49) { //RSSI -48, -49
1640 if(pDevice->byBBPreEDIndex == 17) break;
1641 pDevice->byBBPreEDIndex = 17;
1642 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0a); //CR201(0xC9)
1643 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1644 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -48,-49\n");
1645 } else if(pDevice->byBBPreEDRSSI <= 51) { //RSSI -50, -51
1646 if(pDevice->byBBPreEDIndex == 16) break;
1647 pDevice->byBBPreEDIndex = 16;
1648 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x07); //CR201(0xC9)
1649 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1650 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -50,-51\n");
1651 } else if(pDevice->byBBPreEDRSSI <= 53) { //RSSI -52, -53
1652 if(pDevice->byBBPreEDIndex == 15) break;
1653 pDevice->byBBPreEDIndex = 15;
1654 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x04); //CR201(0xC9)
1655 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1656 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -52,-53\n");
1657 } else if(pDevice->byBBPreEDRSSI <= 55) { //RSSI -54, -55
1658 if(pDevice->byBBPreEDIndex == 14) break;
1659 pDevice->byBBPreEDIndex = 14;
1660 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1661 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1662 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -54,-55\n");
1663 } else if(pDevice->byBBPreEDRSSI <= 56) { //RSSI -56
1664 if(pDevice->byBBPreEDIndex == 13) break;
1665 pDevice->byBBPreEDIndex = 13;
1666 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1667 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1668 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -56\n");
1669 } else if(pDevice->byBBPreEDRSSI <= 57) { //RSSI -57
1670 if(pDevice->byBBPreEDIndex == 12) break;
1671 pDevice->byBBPreEDIndex = 12;
1672 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1673 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xB0); //CR206(0xCE)
1674 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -57\n");
1675 } else if(pDevice->byBBPreEDRSSI <= 58) { //RSSI -58
1676 if(pDevice->byBBPreEDIndex == 11) break;
1677 pDevice->byBBPreEDIndex = 11;
1678 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1679 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x70); //CR206(0xCE)
1680 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -58\n");
1681 } else if(pDevice->byBBPreEDRSSI <= 59) { //RSSI -59
1682 if(pDevice->byBBPreEDIndex == 10) break;
1683 pDevice->byBBPreEDIndex = 10;
1684 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1685 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1686 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -59\n");
1687 } else if(pDevice->byBBPreEDRSSI <= 60) { //RSSI -60
1688 if(pDevice->byBBPreEDIndex == 9) break;
1689 pDevice->byBBPreEDIndex = 9;
1690 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1691 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xEA); //CR206(0xCE)
1692 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -60\n");
1693 } else if(pDevice->byBBPreEDRSSI <= 61) { //RSSI -61
1694 if(pDevice->byBBPreEDIndex == 8) break;
1695 pDevice->byBBPreEDIndex = 8;
1696 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1697 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1698 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -61\n");
1699 } else if(pDevice->byBBPreEDRSSI <= 62) { //RSSI -62
1700 if(pDevice->byBBPreEDIndex == 7) break;
1701 pDevice->byBBPreEDIndex = 7;
1702 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1703 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x9C); //CR206(0xCE)
1704 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -62\n");
1705 } else if(pDevice->byBBPreEDRSSI <= 63) { //RSSI -63
1706 if(pDevice->byBBPreEDIndex == 6) break;
1707 pDevice->byBBPreEDIndex = 6;
1708 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1709 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x80); //CR206(0xCE)
1710 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -63\n");
1711 } else if(pDevice->byBBPreEDRSSI <= 64) { //RSSI -64
1712 if(pDevice->byBBPreEDIndex == 5) break;
1713 pDevice->byBBPreEDIndex = 5;
1714 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1715 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x68); //CR206(0xCE)
1716 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -64\n");
1717 } else if(pDevice->byBBPreEDRSSI <= 65) { //RSSI -65
1718 if(pDevice->byBBPreEDIndex == 4) break;
1719 pDevice->byBBPreEDIndex = 4;
1720 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1721 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x52); //CR206(0xCE)
1722 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -65\n");
1723 } else if(pDevice->byBBPreEDRSSI <= 66) { //RSSI -66
1724 if(pDevice->byBBPreEDIndex == 3) break;
1725 pDevice->byBBPreEDIndex = 3;
1726 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1727 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x43); //CR206(0xCE)
1728 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -66\n");
1729 } else if(pDevice->byBBPreEDRSSI <= 67) { //RSSI -67
1730 if(pDevice->byBBPreEDIndex == 2) break;
1731 pDevice->byBBPreEDIndex = 2;
1732 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1733 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x36); //CR206(0xCE)
1734 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -67\n");
1735 } else if(pDevice->byBBPreEDRSSI <= 68) { //RSSI -68
1736 if(pDevice->byBBPreEDIndex == 1) break;
1737 pDevice->byBBPreEDIndex = 1;
1738 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1739 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x2D); //CR206(0xCE)
1740 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -68\n");
1741 } else { //RSSI -69, -70, ...
1742 if(pDevice->byBBPreEDIndex == 0) break;
1743 pDevice->byBBPreEDIndex = 0;
1744 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1745 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x24); //CR206(0xCE)
1746 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -69, -70,..\n");
1748 break;
1750 case RF_VT3342A0: //RobertYu:20060627, testing table
1751 if( bScanning )
1752 { // need Max sensitivity //RSSI -67, -68, ...
1753 if(pDevice->byBBPreEDIndex == 0) break;
1754 pDevice->byBBPreEDIndex = 0;
1755 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1756 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x38); //CR206(0xCE)
1757 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -67, -68,..\n");
1758 break;
1761 if(pDevice->byBBPreEDRSSI <= 41) { // RSSI 0, -1,-2,....-41
1762 if(pDevice->byBBPreEDIndex == 20) break;
1763 pDevice->byBBPreEDIndex = 20;
1764 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1765 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1766 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI 0, -1,-2,..-41\n");
1767 } else if(pDevice->byBBPreEDRSSI <= 42) { //RSSI -42
1768 if(pDevice->byBBPreEDIndex == 19) break;
1769 pDevice->byBBPreEDIndex = 19;
1770 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x36); //CR201(0xC9)
1771 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1772 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -42\n");
1773 } else if(pDevice->byBBPreEDRSSI <= 43) { //RSSI -43
1774 if(pDevice->byBBPreEDIndex == 18) break;
1775 pDevice->byBBPreEDIndex = 18;
1776 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x26); //CR201(0xC9)
1777 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1778 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -43\n");
1779 } else if(pDevice->byBBPreEDRSSI <= 45) { //RSSI -44, -45
1780 if(pDevice->byBBPreEDIndex == 17) break;
1781 pDevice->byBBPreEDIndex = 17;
1782 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x18); //CR201(0xC9)
1783 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1784 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -44,-45\n");
1785 } else if(pDevice->byBBPreEDRSSI <= 47) { //RSSI -46, -47
1786 if(pDevice->byBBPreEDIndex == 16) break;
1787 pDevice->byBBPreEDIndex = 16;
1788 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x11); //CR201(0xC9)
1789 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1790 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -46,-47\n");
1791 } else if(pDevice->byBBPreEDRSSI <= 49) { //RSSI -48, -49
1792 if(pDevice->byBBPreEDIndex == 15) break;
1793 pDevice->byBBPreEDIndex = 15;
1794 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0a); //CR201(0xC9)
1795 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1796 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -48,-49\n");
1797 } else if(pDevice->byBBPreEDRSSI <= 51) { //RSSI -50, -51
1798 if(pDevice->byBBPreEDIndex == 14) break;
1799 pDevice->byBBPreEDIndex = 14;
1800 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x07); //CR201(0xC9)
1801 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1802 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -50,-51\n");
1803 } else if(pDevice->byBBPreEDRSSI <= 53) { //RSSI -52, -53
1804 if(pDevice->byBBPreEDIndex == 13) break;
1805 pDevice->byBBPreEDIndex = 13;
1806 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x04); //CR201(0xC9)
1807 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1808 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -52,-53\n");
1809 } else if(pDevice->byBBPreEDRSSI <= 55) { //RSSI -54, -55
1810 if(pDevice->byBBPreEDIndex == 12) break;
1811 pDevice->byBBPreEDIndex = 12;
1812 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1813 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1814 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -54,-55\n");
1815 } else if(pDevice->byBBPreEDRSSI <= 56) { //RSSI -56
1816 if(pDevice->byBBPreEDIndex == 11) break;
1817 pDevice->byBBPreEDIndex = 11;
1818 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1819 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1820 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -56\n");
1821 } else if(pDevice->byBBPreEDRSSI <= 57) { //RSSI -57
1822 if(pDevice->byBBPreEDIndex == 10) break;
1823 pDevice->byBBPreEDIndex = 10;
1824 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1825 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xB0); //CR206(0xCE)
1826 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -57\n");
1827 } else if(pDevice->byBBPreEDRSSI <= 58) { //RSSI -58
1828 if(pDevice->byBBPreEDIndex == 9) break;
1829 pDevice->byBBPreEDIndex = 9;
1830 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1831 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x70); //CR206(0xCE)
1832 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -58\n");
1833 } else if(pDevice->byBBPreEDRSSI <= 59) { //RSSI -59
1834 if(pDevice->byBBPreEDIndex == 8) break;
1835 pDevice->byBBPreEDIndex = 8;
1836 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1837 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1838 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -59\n");
1839 } else if(pDevice->byBBPreEDRSSI <= 60) { //RSSI -60
1840 if(pDevice->byBBPreEDIndex == 7) break;
1841 pDevice->byBBPreEDIndex = 7;
1842 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1843 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xEA); //CR206(0xCE)
1844 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -60\n");
1845 } else if(pDevice->byBBPreEDRSSI <= 61) { //RSSI -61
1846 if(pDevice->byBBPreEDIndex == 6) break;
1847 pDevice->byBBPreEDIndex = 6;
1848 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1849 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1850 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -61\n");
1851 } else if(pDevice->byBBPreEDRSSI <= 62) { //RSSI -62
1852 if(pDevice->byBBPreEDIndex == 5) break;
1853 pDevice->byBBPreEDIndex = 5;
1854 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1855 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x9C); //CR206(0xCE)
1856 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -62\n");
1857 } else if(pDevice->byBBPreEDRSSI <= 63) { //RSSI -63
1858 if(pDevice->byBBPreEDIndex == 4) break;
1859 pDevice->byBBPreEDIndex = 4;
1860 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1861 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x80); //CR206(0xCE)
1862 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -63\n");
1863 } else if(pDevice->byBBPreEDRSSI <= 64) { //RSSI -64
1864 if(pDevice->byBBPreEDIndex == 3) break;
1865 pDevice->byBBPreEDIndex = 3;
1866 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1867 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x68); //CR206(0xCE)
1868 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -64\n");
1869 } else if(pDevice->byBBPreEDRSSI <= 65) { //RSSI -65
1870 if(pDevice->byBBPreEDIndex == 2) break;
1871 pDevice->byBBPreEDIndex = 2;
1872 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1873 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x52); //CR206(0xCE)
1874 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -65\n");
1875 } else if(pDevice->byBBPreEDRSSI <= 66) { //RSSI -66
1876 if(pDevice->byBBPreEDIndex == 1) break;
1877 pDevice->byBBPreEDIndex = 1;
1878 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1879 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x43); //CR206(0xCE)
1880 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -66\n");
1881 } else { //RSSI -67, -68, ...
1882 if(pDevice->byBBPreEDIndex == 0) break;
1883 pDevice->byBBPreEDIndex = 0;
1884 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1885 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x38); //CR206(0xCE)
1886 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -67, -68,..\n");
1888 break;