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