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