Merge branches 'topic/sc18is602' and 'topic/rspi' of git://git.kernel.org/pub/scm...
[linux-block.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:
aed387c7
MP
726 * struct vnt_phy_field *phy
727 * - pointer to Phy Length field
728 * - pointer to Phy Service field
729 * - pointer to Phy Signal field
92b96797
FB
730 *
731 * Return Value: none
732 *
733 */
98583c09 734void BBvCalculateParameter(struct vnt_private *pDevice, u32 cbFrameLength,
aed387c7 735 u16 wRate, u8 byPacketType, struct vnt_phy_field *phy)
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;
aed387c7 750 phy->signal = 0x00;
92b96797
FB
751 break;
752
753 case RATE_2M :
754 cbUsCount = cbBitCount / 2;
755 if (byPreambleType == 1)
aed387c7 756 phy->signal = 0x09;
92b96797 757 else // long preamble
aed387c7 758 phy->signal = 0x01;
92b96797
FB
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)
aed387c7 769 phy->signal = 0x0a;
92b96797 770 else // long preamble
aed387c7 771 phy->signal = 0x02;
92b96797
FB
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)
aed387c7 786 phy->signal = 0x0b;
92b96797 787 else // long preamble
aed387c7 788 phy->signal = 0x03;
92b96797
FB
789 break;
790
791 case RATE_6M :
792 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
aed387c7 793 phy->signal = 0x9b;
92b96797
FB
794 }
795 else {//11g, 2.4GHZ
aed387c7 796 phy->signal = 0x8b;
92b96797
FB
797 }
798 break;
799
800 case RATE_9M :
801 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
aed387c7 802 phy->signal = 0x9f;
92b96797
FB
803 }
804 else {//11g, 2.4GHZ
aed387c7 805 phy->signal = 0x8f;
92b96797
FB
806 }
807 break;
808
809 case RATE_12M :
810 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
aed387c7 811 phy->signal = 0x9a;
92b96797
FB
812 }
813 else {//11g, 2.4GHZ
aed387c7 814 phy->signal = 0x8a;
92b96797
FB
815 }
816 break;
817
818 case RATE_18M :
819 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
aed387c7 820 phy->signal = 0x9e;
92b96797
FB
821 }
822 else {//11g, 2.4GHZ
aed387c7 823 phy->signal = 0x8e;
92b96797
FB
824 }
825 break;
826
827 case RATE_24M :
828 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
aed387c7 829 phy->signal = 0x99;
92b96797
FB
830 }
831 else {//11g, 2.4GHZ
aed387c7 832 phy->signal = 0x89;
92b96797
FB
833 }
834 break;
835
836 case RATE_36M :
837 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
aed387c7 838 phy->signal = 0x9d;
92b96797
FB
839 }
840 else {//11g, 2.4GHZ
aed387c7 841 phy->signal = 0x8d;
92b96797
FB
842 }
843 break;
844
845 case RATE_48M :
846 if(byPacketType == PK_TYPE_11A) {//11a, 5GHZ
aed387c7 847 phy->signal = 0x98;
92b96797
FB
848 }
849 else {//11g, 2.4GHZ
aed387c7 850 phy->signal = 0x88;
92b96797
FB
851 }
852 break;
853
854 case RATE_54M :
855 if (byPacketType == PK_TYPE_11A) {//11a, 5GHZ
aed387c7 856 phy->signal = 0x9c;
92b96797
FB
857 }
858 else {//11g, 2.4GHZ
aed387c7 859 phy->signal = 0x8c;
92b96797
FB
860 }
861 break;
862
863 default :
864 if (byPacketType == PK_TYPE_11A) {//11a, 5GHZ
aed387c7 865 phy->signal = 0x9c;
92b96797
FB
866 }
867 else {//11g, 2.4GHZ
aed387c7 868 phy->signal = 0x8c;
92b96797
FB
869 }
870 break;
871 }
872
4ac306e0 873 if (byPacketType == PK_TYPE_11B) {
aed387c7 874 phy->service = 0x00;
4ac306e0 875 if (bExtBit)
aed387c7
MP
876 phy->service |= 0x80;
877 phy->len = cpu_to_le16((u16)cbUsCount);
4ac306e0 878 } else {
aed387c7
MP
879 phy->service = 0x00;
880 phy->len = cpu_to_le16((u16)cbFrameLength);
4ac306e0 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];
9df68292 942 u8 data;
92b96797
FB
943
944 ntStatus = CONTROLnsRequestIn(pDevice,
945 MESSAGE_TYPE_READ,
946 0,
947 MESSAGE_REQUEST_EEPROM,
948 EEP_MAX_CONTEXT_SIZE,
949 pDevice->abyEEPROM);
950 if (ntStatus != STATUS_SUCCESS) {
e269fc2d 951 return false;
92b96797
FB
952 }
953
92b96797 954// if ((pDevice->abyEEPROM[EEP_OFS_RADIOCTL]&0x06)==0x04)
e269fc2d 955// return false;
92b96797 956
92b96797
FB
957//zonetype initial
958 pDevice->byOriginalZonetype = pDevice->abyEEPROM[EEP_OFS_ZONETYPE];
959 if(pDevice->config_file.ZoneType >= 0) { //read zonetype file ok!
960 if ((pDevice->config_file.ZoneType == 0)&&
961 (pDevice->abyEEPROM[EEP_OFS_ZONETYPE] !=0x00)){ //for USA
962 pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0;
963 pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0B;
964 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Init Zone Type :USA\n");
965 }
966 else if((pDevice->config_file.ZoneType == 1)&&
967 (pDevice->abyEEPROM[EEP_OFS_ZONETYPE]!=0x01)){ //for Japan
968 pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0x01;
969 pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0D;
970 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Init Zone Type :Japan\n");
971 }
972 else if((pDevice->config_file.ZoneType == 2)&&
973 (pDevice->abyEEPROM[EEP_OFS_ZONETYPE]!=0x02)){ //for Europe
974 pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0x02;
975 pDevice->abyEEPROM[EEP_OFS_MAXCHANNEL] = 0x0D;
976 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Init Zone Type :Europe\n");
977 }
978else {
979 if(pDevice->config_file.ZoneType !=pDevice->abyEEPROM[EEP_OFS_ZONETYPE])
980 printk("zonetype in file[%02x] mismatch with in EEPROM[%02x]\n",pDevice->config_file.ZoneType,pDevice->abyEEPROM[EEP_OFS_ZONETYPE]);
981 else
bbc9a991 982 printk("Read Zonetype file success,use default zonetype setting[%02x]\n",pDevice->config_file.ZoneType);
92b96797
FB
983 }
984}
985
986 if ( !pDevice->bZoneRegExist ) {
987 pDevice->byZoneType = pDevice->abyEEPROM[EEP_OFS_ZONETYPE];
988 }
989 pDevice->byRFType = pDevice->abyEEPROM[EEP_OFS_RFTYPE];
990
991 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Zone Type %x\n", pDevice->byZoneType);
992 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"RF Type %d\n", pDevice->byRFType);
993
994 if ((pDevice->byRFType == RF_AL2230) || (pDevice->byRFType == RF_AL2230S)) {
995 pDevice->byBBRxConf = abyVT3184_AL2230[10];
996 wLength = sizeof(abyVT3184_AL2230);
997 pbyAddr = abyVT3184_AL2230;
998 pbyAgc = abyVT3184_AGC;
999 wLengthAgc = sizeof(abyVT3184_AGC);
1000
1001 pDevice->abyBBVGA[0] = 0x1C;
1002 pDevice->abyBBVGA[1] = 0x10;
1003 pDevice->abyBBVGA[2] = 0x0;
1004 pDevice->abyBBVGA[3] = 0x0;
1005 pDevice->ldBmThreshold[0] = -70;
1006 pDevice->ldBmThreshold[1] = -48;
1007 pDevice->ldBmThreshold[2] = 0;
1008 pDevice->ldBmThreshold[3] = 0;
1009 }
1010 else if (pDevice->byRFType == RF_AIROHA7230) {
1011 pDevice->byBBRxConf = abyVT3184_AL2230[10];
1012 wLength = sizeof(abyVT3184_AL2230);
1013 pbyAddr = abyVT3184_AL2230;
1014 pbyAgc = abyVT3184_AGC;
1015 wLengthAgc = sizeof(abyVT3184_AGC);
1016
1017 // Init ANT B select,TX Config CR09 = 0x61->0x45, 0x45->0x41(VC1/VC2 define, make the ANT_A, ANT_B inverted)
1018 //pbyAddr[0x09] = 0x41;
1019 // Init ANT B select,RX Config CR10 = 0x28->0x2A, 0x2A->0x28(VC1/VC2 define, make the ANT_A, ANT_B inverted)
1020 //pbyAddr[0x0a] = 0x28;
1021 // Select VC1/VC2, CR215 = 0x02->0x06
1022 pbyAddr[0xd7] = 0x06;
1023
1024 pDevice->abyBBVGA[0] = 0x1C;
1025 pDevice->abyBBVGA[1] = 0x10;
1026 pDevice->abyBBVGA[2] = 0x0;
1027 pDevice->abyBBVGA[3] = 0x0;
1028 pDevice->ldBmThreshold[0] = -70;
1029 pDevice->ldBmThreshold[1] = -48;
1030 pDevice->ldBmThreshold[2] = 0;
1031 pDevice->ldBmThreshold[3] = 0;
1032 }
1033 else if ( (pDevice->byRFType == RF_VT3226) || (pDevice->byRFType == RF_VT3226D0) ) {
1034 pDevice->byBBRxConf = abyVT3184_VT3226D0[10]; //RobertYu:20060515
1035 wLength = sizeof(abyVT3184_VT3226D0); //RobertYu:20060515
1036 pbyAddr = abyVT3184_VT3226D0; //RobertYu:20060515
1037 pbyAgc = abyVT3184_AGC;
1038 wLengthAgc = sizeof(abyVT3184_AGC);
1039
1040 pDevice->abyBBVGA[0] = 0x20; //RobertYu:20060104, reguest by Jack
1041 pDevice->abyBBVGA[1] = 0x10;
1042 pDevice->abyBBVGA[2] = 0x0;
1043 pDevice->abyBBVGA[3] = 0x0;
1044 pDevice->ldBmThreshold[0] = -70;
1045 pDevice->ldBmThreshold[1] = -48;
1046 pDevice->ldBmThreshold[2] = 0;
1047 pDevice->ldBmThreshold[3] = 0;
1048 // Fix VT3226 DFC system timing issue
1049 MACvRegBitsOn(pDevice, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT);
1050 //}}
1051 //{{RobertYu:20060609
1052 } else if ( (pDevice->byRFType == RF_VT3342A0) ) {
1053 pDevice->byBBRxConf = abyVT3184_VT3226D0[10];
1054 wLength = sizeof(abyVT3184_VT3226D0);
1055 pbyAddr = abyVT3184_VT3226D0;
1056 pbyAgc = abyVT3184_AGC;
1057 wLengthAgc = sizeof(abyVT3184_AGC);
1058
1059 pDevice->abyBBVGA[0] = 0x20;
1060 pDevice->abyBBVGA[1] = 0x10;
1061 pDevice->abyBBVGA[2] = 0x0;
1062 pDevice->abyBBVGA[3] = 0x0;
1063 pDevice->ldBmThreshold[0] = -70;
1064 pDevice->ldBmThreshold[1] = -48;
1065 pDevice->ldBmThreshold[2] = 0;
1066 pDevice->ldBmThreshold[3] = 0;
1067 // Fix VT3226 DFC system timing issue
1068 MACvRegBitsOn(pDevice, MAC_REG_SOFTPWRCTL2, SOFTPWRCTL_RFLEOPT);
1069 //}}
1070 } else {
4e9b5e2b 1071 return true;
92b96797
FB
1072 }
1073
1074 memcpy(abyArray, pbyAddr, wLength);
1075 CONTROLnsRequestOut(pDevice,
1076 MESSAGE_TYPE_WRITE,
1077 0,
1078 MESSAGE_REQUEST_BBREG,
1079 wLength,
1080 abyArray
1081 );
1082
1083 memcpy(abyArray, pbyAgc, wLengthAgc);
1084 CONTROLnsRequestOut(pDevice,
1085 MESSAGE_TYPE_WRITE,
1086 0,
1087 MESSAGE_REQUEST_BBAGC,
1088 wLengthAgc,
1089 abyArray
1090 );
1091
92b96797
FB
1092 if ((pDevice->byRFType == RF_VT3226) || //RobertYu:20051116, 20060111 remove VT3226D0
1093 (pDevice->byRFType == RF_VT3342A0) //RobertYu:20060609
1094 ) {
1095 ControlvWriteByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_ITRTMSET,0x23);
1096 MACvRegBitsOn(pDevice,MAC_REG_PAPEDELAY,0x01);
1097 }
1098 else if (pDevice->byRFType == RF_VT3226D0)
1099 {
1100 ControlvWriteByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_ITRTMSET,0x11);
1101 MACvRegBitsOn(pDevice,MAC_REG_PAPEDELAY,0x01);
1102 }
1103
92b96797
FB
1104 ControlvWriteByte(pDevice,MESSAGE_REQUEST_BBREG,0x04,0x7F);
1105 ControlvWriteByte(pDevice,MESSAGE_REQUEST_BBREG,0x0D,0x01);
1106
1107 RFbRFTableDownload(pDevice);
9df68292
MP
1108
1109 /* Fix for TX USB resets from vendors driver */
1110 CONTROLnsRequestIn(pDevice, MESSAGE_TYPE_READ, USB_REG4,
1111 MESSAGE_REQUEST_MEM, sizeof(data), &data);
1112
1113 data |= 0x2;
1114
1115 CONTROLnsRequestOut(pDevice, MESSAGE_TYPE_WRITE, USB_REG4,
1116 MESSAGE_REQUEST_MEM, sizeof(data), &data);
1117
4e9b5e2b 1118 return true;//ntStatus;
92b96797
FB
1119}
1120
92b96797
FB
1121/*
1122 * Description: Set ShortSlotTime mode
1123 *
1124 * Parameters:
1125 * In:
1126 * pDevice - Device Structure
1127 * Out:
1128 * none
1129 *
1130 * Return Value: none
1131 *
1132 */
98583c09 1133void BBvSetShortSlotTime(struct vnt_private *pDevice)
92b96797 1134{
b902fbfe 1135 u8 byBBVGA=0;
92b96797 1136
f001d7e2 1137 if (pDevice->bShortSlotTime)
92b96797 1138 pDevice->byBBRxConf &= 0xDF;//1101 1111
f001d7e2 1139 else
92b96797 1140 pDevice->byBBRxConf |= 0x20;//0010 0000
92b96797
FB
1141
1142 ControlvReadByte (pDevice, MESSAGE_REQUEST_BBREG, 0xE7, &byBBVGA);
f001d7e2 1143 if (byBBVGA == pDevice->abyBBVGA[0])
92b96797 1144 pDevice->byBBRxConf |= 0x20;//0010 0000
92b96797
FB
1145
1146 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0A, pDevice->byBBRxConf);
92b96797
FB
1147}
1148
b902fbfe 1149void BBvSetVGAGainOffset(struct vnt_private *pDevice, u8 byData)
92b96797
FB
1150{
1151
1152 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xE7, byData);
1153
1154 // patch for 3253B0 Baseband with Cardbus module
f001d7e2
MPS
1155 if (pDevice->bShortSlotTime)
1156 pDevice->byBBRxConf &= 0xDF; /* 1101 1111 */
1157 else
1158 pDevice->byBBRxConf |= 0x20; /* 0010 0000 */
1159
92b96797
FB
1160 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0A, pDevice->byBBRxConf);//CR10
1161}
1162
92b96797
FB
1163/*
1164 * Description: BBvSetDeepSleep
1165 *
1166 * Parameters:
1167 * In:
1168 * pDevice - Device Structure
1169 * Out:
1170 * none
1171 *
1172 * Return Value: none
1173 *
1174 */
98583c09 1175void BBvSetDeepSleep(struct vnt_private *pDevice)
92b96797
FB
1176{
1177 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0c, 0x17);//CR12
1178 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0D, 0xB9);//CR13
1179}
1180
98583c09 1181void BBvExitDeepSleep(struct vnt_private *pDevice)
92b96797
FB
1182{
1183 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0C, 0x00);//CR12
1184 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0D, 0x01);//CR13
1185}
1186
98583c09 1187static unsigned long s_ulGetLowSQ3(struct vnt_private *pDevice)
92b96797 1188{
cc856e61
AM
1189 int ii;
1190 unsigned long ulSQ3 = 0;
1191 unsigned long ulMaxPacket;
92b96797
FB
1192
1193 ulMaxPacket = pDevice->aulPktNum[RATE_54M];
f001d7e2 1194 if (pDevice->aulPktNum[RATE_54M] != 0)
92b96797 1195 ulSQ3 = pDevice->aulSQ3Val[RATE_54M] / pDevice->aulPktNum[RATE_54M];
f001d7e2
MPS
1196
1197 for (ii = RATE_48M; ii >= RATE_6M; ii--)
1198 if (pDevice->aulPktNum[ii] > ulMaxPacket) {
92b96797
FB
1199 ulMaxPacket = pDevice->aulPktNum[ii];
1200 ulSQ3 = pDevice->aulSQ3Val[ii] / pDevice->aulPktNum[ii];
1201 }
92b96797
FB
1202
1203 return ulSQ3;
1204}
1205
98583c09 1206static unsigned long s_ulGetRatio(struct vnt_private *pDevice)
92b96797 1207{
cc856e61
AM
1208 int ii, jj;
1209 unsigned long ulRatio = 0;
1210 unsigned long ulMaxPacket;
1211 unsigned long ulPacketNum;
92b96797
FB
1212
1213 //This is a thousand-ratio
1214 ulMaxPacket = pDevice->aulPktNum[RATE_54M];
1215 if ( pDevice->aulPktNum[RATE_54M] != 0 ) {
1216 ulPacketNum = pDevice->aulPktNum[RATE_54M];
1217 ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
1218 ulRatio += TOP_RATE_54M;
1219 }
f001d7e2 1220 for (ii = RATE_48M; ii >= RATE_1M; ii--)
92b96797
FB
1221 if ( pDevice->aulPktNum[ii] > ulMaxPacket ) {
1222 ulPacketNum = 0;
1223 for ( jj=RATE_54M;jj>=ii;jj--)
1224 ulPacketNum += pDevice->aulPktNum[jj];
1225 ulRatio = (ulPacketNum * 1000 / pDevice->uDiversityCnt);
1226 ulRatio += TOP_RATE_48M;
1227 ulMaxPacket = pDevice->aulPktNum[ii];
1228 }
1229
92b96797
FB
1230 return ulRatio;
1231}
1232
98583c09 1233static void s_vClearSQ3Value(struct vnt_private *pDevice)
92b96797
FB
1234{
1235 int ii;
1236 pDevice->uDiversityCnt = 0;
1237
1238 for ( ii=RATE_1M;ii<MAX_RATE;ii++) {
1239 pDevice->aulPktNum[ii] = 0;
1240 pDevice->aulSQ3Val[ii] = 0;
1241 }
1242}
1243
92b96797
FB
1244/*
1245 * Description: Antenna Diversity
1246 *
1247 * Parameters:
1248 * In:
1249 * pDevice - Device Structure
1250 * byRSR - RSR from received packet
1251 * bySQ3 - SQ3 value from received packet
1252 * Out:
1253 * none
1254 *
1255 * Return Value: none
1256 *
1257 */
1258
98583c09
MP
1259void BBvAntennaDiversity(struct vnt_private *pDevice,
1260 u8 byRxRate, u8 bySQ3)
92b96797
FB
1261{
1262
1263 pDevice->uDiversityCnt++;
1264 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pDevice->uDiversityCnt = %d\n", (int)pDevice->uDiversityCnt);
1265
1266 if (byRxRate == 2) {
1267 pDevice->aulPktNum[RATE_1M]++;
1268 }
1269 else if (byRxRate==4) {
1270 pDevice->aulPktNum[RATE_2M]++;
1271 }
1272 else if (byRxRate==11) {
1273 pDevice->aulPktNum[RATE_5M]++;
1274 }
1275 else if (byRxRate==22) {
1276 pDevice->aulPktNum[RATE_11M]++;
1277 }
1278 else if(byRxRate==12){
1279 pDevice->aulPktNum[RATE_6M]++;
1280 pDevice->aulSQ3Val[RATE_6M] += bySQ3;
1281 }
1282 else if(byRxRate==18){
1283 pDevice->aulPktNum[RATE_9M]++;
1284 pDevice->aulSQ3Val[RATE_9M] += bySQ3;
1285 }
1286 else if(byRxRate==24){
1287 pDevice->aulPktNum[RATE_12M]++;
1288 pDevice->aulSQ3Val[RATE_12M] += bySQ3;
1289 }
1290 else if(byRxRate==36){
1291 pDevice->aulPktNum[RATE_18M]++;
1292 pDevice->aulSQ3Val[RATE_18M] += bySQ3;
1293 }
1294 else if(byRxRate==48){
1295 pDevice->aulPktNum[RATE_24M]++;
1296 pDevice->aulSQ3Val[RATE_24M] += bySQ3;
1297 }
1298 else if(byRxRate==72){
1299 pDevice->aulPktNum[RATE_36M]++;
1300 pDevice->aulSQ3Val[RATE_36M] += bySQ3;
1301 }
1302 else if(byRxRate==96){
1303 pDevice->aulPktNum[RATE_48M]++;
1304 pDevice->aulSQ3Val[RATE_48M] += bySQ3;
1305 }
1306 else if(byRxRate==108){
1307 pDevice->aulPktNum[RATE_54M]++;
1308 pDevice->aulSQ3Val[RATE_54M] += bySQ3;
1309 }
1310
1311 if (pDevice->byAntennaState == 0) {
1312
1313 if (pDevice->uDiversityCnt > pDevice->ulDiversityNValue) {
1314 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ulDiversityNValue=[%d],54M-[%d]\n",(int)pDevice->ulDiversityNValue, (int)pDevice->aulPktNum[RATE_54M]);
1315
1316 pDevice->ulSQ3_State0 = s_ulGetLowSQ3(pDevice);
1317 pDevice->ulRatio_State0 = s_ulGetRatio(pDevice);
1318 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State0, SQ3= [%08x] rate = [%08x]\n",(int)pDevice->ulSQ3_State0,(int)pDevice->ulRatio_State0);
1319
1320 if ( ((pDevice->aulPktNum[RATE_54M] < pDevice->ulDiversityNValue/2) &&
1321 (pDevice->ulSQ3_State0 > pDevice->ulSQ3TH) ) ||
1322 (pDevice->ulSQ3_State0 == 0 ) ) {
1323
1324 if ( pDevice->byTMax == 0 )
1325 return;
1326
0cbd8d98
AM
1327 bScheduleCommand((void *) pDevice,
1328 WLAN_CMD_CHANGE_ANTENNA,
1329 NULL);
92b96797
FB
1330
1331 pDevice->byAntennaState = 1;
1332
1333 del_timer(&pDevice->TimerSQ3Tmax3);
1334 del_timer(&pDevice->TimerSQ3Tmax2);
1335 pDevice->TimerSQ3Tmax1.expires = RUN_AT(pDevice->byTMax * HZ);
1336 add_timer(&pDevice->TimerSQ3Tmax1);
1337
1338 } else {
1339 pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ);
1340 add_timer(&pDevice->TimerSQ3Tmax3);
1341 }
1342 s_vClearSQ3Value(pDevice);
1343
1344 }
1345 } else { //byAntennaState == 1
1346
1347 if (pDevice->uDiversityCnt > pDevice->ulDiversityMValue) {
1348
1349 del_timer(&pDevice->TimerSQ3Tmax1);
1350 pDevice->ulSQ3_State1 = s_ulGetLowSQ3(pDevice);
1351 pDevice->ulRatio_State1 = s_ulGetRatio(pDevice);
1352 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State1, rate0 = %08x,rate1 = %08x\n",(int)pDevice->ulRatio_State0,(int)pDevice->ulRatio_State1);
1353
1354 if ( ((pDevice->ulSQ3_State1 == 0) && (pDevice->ulSQ3_State0 != 0)) ||
1355 ((pDevice->ulSQ3_State1 == 0) && (pDevice->ulSQ3_State0 == 0) && (pDevice->ulRatio_State1 < pDevice->ulRatio_State0)) ||
1356 ((pDevice->ulSQ3_State1 != 0) && (pDevice->ulSQ3_State0 != 0) && (pDevice->ulSQ3_State0 < pDevice->ulSQ3_State1))
1357 ) {
1358
0cbd8d98
AM
1359 bScheduleCommand((void *) pDevice,
1360 WLAN_CMD_CHANGE_ANTENNA,
1361 NULL);
92b96797
FB
1362
1363 pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ);
1364 pDevice->TimerSQ3Tmax2.expires = RUN_AT(pDevice->byTMax2 * HZ);
1365 add_timer(&pDevice->TimerSQ3Tmax3);
1366 add_timer(&pDevice->TimerSQ3Tmax2);
1367
1368 }
1369 pDevice->byAntennaState = 0;
1370 s_vClearSQ3Value(pDevice);
1371 }
1372 } //byAntennaState
1373}
1374
92b96797
FB
1375/*+
1376 *
1377 * Description:
1378 * Timer for SQ3 antenna diversity
1379 *
1380 * Parameters:
1381 * In:
1382 * pvSysSpec1
1383 * hDeviceContext - Pointer to the adapter
1384 * pvSysSpec2
1385 * pvSysSpec3
1386 * Out:
1387 * none
1388 *
1389 * Return Value: none
1390 *
1391-*/
1392
98583c09 1393void TimerSQ3CallBack(struct vnt_private *pDevice)
92b96797 1394{
92b96797
FB
1395
1396 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"TimerSQ3CallBack...");
1397 spin_lock_irq(&pDevice->lock);
1398
0cbd8d98 1399 bScheduleCommand((void *) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL);
92b96797
FB
1400 pDevice->byAntennaState = 0;
1401 s_vClearSQ3Value(pDevice);
1402 pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ);
1403 pDevice->TimerSQ3Tmax2.expires = RUN_AT(pDevice->byTMax2 * HZ);
1404 add_timer(&pDevice->TimerSQ3Tmax3);
1405 add_timer(&pDevice->TimerSQ3Tmax2);
1406
92b96797 1407 spin_unlock_irq(&pDevice->lock);
92b96797
FB
1408}
1409
92b96797
FB
1410/*+
1411 *
1412 * Description:
1413 * Timer for SQ3 antenna diversity
1414 *
1415 * Parameters:
1416 * In:
1417 * pvSysSpec1
1418 * hDeviceContext - Pointer to the adapter
1419 * pvSysSpec2
1420 * pvSysSpec3
1421 * Out:
1422 * none
1423 *
1424 * Return Value: none
1425 *
1426-*/
1427
98583c09 1428void TimerSQ3Tmax3CallBack(struct vnt_private *pDevice)
92b96797 1429{
92b96797
FB
1430
1431 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"TimerSQ3Tmax3CallBack...");
1432 spin_lock_irq(&pDevice->lock);
1433
1434 pDevice->ulRatio_State0 = s_ulGetRatio(pDevice);
1435 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"SQ3_State0 = [%08x]\n",(int)pDevice->ulRatio_State0);
1436
1437 s_vClearSQ3Value(pDevice);
1438 if ( pDevice->byTMax == 0 ) {
1439 pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ);
1440 add_timer(&pDevice->TimerSQ3Tmax3);
1441 spin_unlock_irq(&pDevice->lock);
1442 return;
1443 }
1444
0cbd8d98 1445 bScheduleCommand((void *) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL);
92b96797
FB
1446 pDevice->byAntennaState = 1;
1447 del_timer(&pDevice->TimerSQ3Tmax3);
1448 del_timer(&pDevice->TimerSQ3Tmax2);
1449 pDevice->TimerSQ3Tmax1.expires = RUN_AT(pDevice->byTMax * HZ);
1450 add_timer(&pDevice->TimerSQ3Tmax1);
1451
1452 spin_unlock_irq(&pDevice->lock);
92b96797
FB
1453}
1454
98583c09 1455void BBvUpdatePreEDThreshold(struct vnt_private *pDevice, int bScanning)
92b96797
FB
1456{
1457
92b96797
FB
1458 switch(pDevice->byRFType)
1459 {
1460 case RF_AL2230:
1461 case RF_AL2230S:
1462 case RF_AIROHA7230:
1463 //RobertYu:20060627, update new table
1464
1465 if( bScanning )
1466 { // need Max sensitivity //RSSI -69, -70,....
1467 if(pDevice->byBBPreEDIndex == 0) break;
1468 pDevice->byBBPreEDIndex = 0;
1469 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1470 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1471 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -69, -70, -71,...\n");
1472 break;
1473 }
1474
1475 if(pDevice->byBBPreEDRSSI <= 45) { // RSSI 0, -1,-2,....-45
1476 if(pDevice->byBBPreEDIndex == 20) break;
1477 pDevice->byBBPreEDIndex = 20;
1478 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1479 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1480 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI 0, -1,-2,..-45\n");
1481 } else if(pDevice->byBBPreEDRSSI <= 46) { //RSSI -46
1482 if(pDevice->byBBPreEDIndex == 19) break;
1483 pDevice->byBBPreEDIndex = 19;
1484 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x1A); //CR201(0xC9)
1485 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1486 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -46\n");
1487 } else if(pDevice->byBBPreEDRSSI <= 47) { //RSSI -47
1488 if(pDevice->byBBPreEDIndex == 18) break;
1489 pDevice->byBBPreEDIndex = 18;
1490 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x15); //CR201(0xC9)
1491 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1492 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -47\n");
1493 } else if(pDevice->byBBPreEDRSSI <= 49) { //RSSI -48, -49
1494 if(pDevice->byBBPreEDIndex == 17) break;
1495 pDevice->byBBPreEDIndex = 17;
1496 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0E); //CR201(0xC9)
1497 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1498 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -48,-49\n");
1499 } else if(pDevice->byBBPreEDRSSI <= 51) { //RSSI -50, -51
1500 if(pDevice->byBBPreEDIndex == 16) break;
1501 pDevice->byBBPreEDIndex = 16;
1502 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x09); //CR201(0xC9)
1503 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1504 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -50,-51\n");
1505 } else if(pDevice->byBBPreEDRSSI <= 53) { //RSSI -52, -53
1506 if(pDevice->byBBPreEDIndex == 15) break;
1507 pDevice->byBBPreEDIndex = 15;
1508 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x06); //CR201(0xC9)
1509 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1510 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -52,-53\n");
1511 } else if(pDevice->byBBPreEDRSSI <= 55) { //RSSI -54, -55
1512 if(pDevice->byBBPreEDIndex == 14) break;
1513 pDevice->byBBPreEDIndex = 14;
1514 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x03); //CR201(0xC9)
1515 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1516 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -54,-55\n");
1517 } else if(pDevice->byBBPreEDRSSI <= 56) { //RSSI -56
1518 if(pDevice->byBBPreEDIndex == 13) break;
1519 pDevice->byBBPreEDIndex = 13;
1520 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1521 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xA0); //CR206(0xCE)
1522 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -56\n");
1523 } else if(pDevice->byBBPreEDRSSI <= 57) { //RSSI -57
1524 if(pDevice->byBBPreEDIndex == 12) break;
1525 pDevice->byBBPreEDIndex = 12;
1526 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1527 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x20); //CR206(0xCE)
1528 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -57\n");
1529 } else if(pDevice->byBBPreEDRSSI <= 58) { //RSSI -58
1530 if(pDevice->byBBPreEDIndex == 11) break;
1531 pDevice->byBBPreEDIndex = 11;
1532 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1533 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xA0); //CR206(0xCE)
1534 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -58\n");
1535 } else if(pDevice->byBBPreEDRSSI <= 59) { //RSSI -59
1536 if(pDevice->byBBPreEDIndex == 10) break;
1537 pDevice->byBBPreEDIndex = 10;
1538 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1539 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x54); //CR206(0xCE)
1540 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -59\n");
1541 } else if(pDevice->byBBPreEDRSSI <= 60) { //RSSI -60
1542 if(pDevice->byBBPreEDIndex == 9) break;
1543 pDevice->byBBPreEDIndex = 9;
1544 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1545 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x18); //CR206(0xCE)
1546 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -60\n");
1547 } else if(pDevice->byBBPreEDRSSI <= 61) { //RSSI -61
1548 if(pDevice->byBBPreEDIndex == 8) break;
1549 pDevice->byBBPreEDIndex = 8;
1550 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1551 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xE3); //CR206(0xCE)
1552 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -61\n");
1553 } else if(pDevice->byBBPreEDRSSI <= 62) { //RSSI -62
1554 if(pDevice->byBBPreEDIndex == 7) break;
1555 pDevice->byBBPreEDIndex = 7;
1556 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1557 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xB9); //CR206(0xCE)
1558 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -62\n");
1559 } else if(pDevice->byBBPreEDRSSI <= 63) { //RSSI -63
1560 if(pDevice->byBBPreEDIndex == 6) break;
1561 pDevice->byBBPreEDIndex = 6;
1562 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1563 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x93); //CR206(0xCE)
1564 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -63\n");
1565 } else if(pDevice->byBBPreEDRSSI <= 64) { //RSSI -64
1566 if(pDevice->byBBPreEDIndex == 5) break;
1567 pDevice->byBBPreEDIndex = 5;
1568 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1569 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x79); //CR206(0xCE)
1570 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -64\n");
1571 } else if(pDevice->byBBPreEDRSSI <= 65) { //RSSI -65
1572 if(pDevice->byBBPreEDIndex == 4) break;
1573 pDevice->byBBPreEDIndex = 4;
1574 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1575 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x62); //CR206(0xCE)
1576 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -65\n");
1577 } else if(pDevice->byBBPreEDRSSI <= 66) { //RSSI -66
1578 if(pDevice->byBBPreEDIndex == 3) break;
1579 pDevice->byBBPreEDIndex = 3;
1580 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1581 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x51); //CR206(0xCE)
1582 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -66\n");
1583 } else if(pDevice->byBBPreEDRSSI <= 67) { //RSSI -67
1584 if(pDevice->byBBPreEDIndex == 2) break;
1585 pDevice->byBBPreEDIndex = 2;
1586 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1587 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x43); //CR206(0xCE)
1588 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -67\n");
1589 } else if(pDevice->byBBPreEDRSSI <= 68) { //RSSI -68
1590 if(pDevice->byBBPreEDIndex == 1) break;
1591 pDevice->byBBPreEDIndex = 1;
1592 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1593 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x36); //CR206(0xCE)
1594 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -68\n");
1595 } else { //RSSI -69, -70,....
1596 if(pDevice->byBBPreEDIndex == 0) break;
1597 pDevice->byBBPreEDIndex = 0;
1598 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1599 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1600 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -69, -70,...\n");
1601 }
1602 break;
1603
1604 case RF_VT3226:
1605 case RF_VT3226D0:
1606 //RobertYu:20060627, update new table
1607
1608 if( bScanning )
1609 { // need Max sensitivity //RSSI -69, -70, ...
1610 if(pDevice->byBBPreEDIndex == 0) break;
1611 pDevice->byBBPreEDIndex = 0;
1612 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1613 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x24); //CR206(0xCE)
1614 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -69, -70,..\n");
1615 break;
1616 }
1617
1618 if(pDevice->byBBPreEDRSSI <= 41) { // RSSI 0, -1,-2,....-41
1619 if(pDevice->byBBPreEDIndex == 22) break;
1620 pDevice->byBBPreEDIndex = 22;
1621 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1622 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1623 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI 0, -1,-2,..-41\n");
1624 } else if(pDevice->byBBPreEDRSSI <= 42) { //RSSI -42
1625 if(pDevice->byBBPreEDIndex == 21) break;
1626 pDevice->byBBPreEDIndex = 21;
1627 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x36); //CR201(0xC9)
1628 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1629 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -42\n");
1630 } else if(pDevice->byBBPreEDRSSI <= 43) { //RSSI -43
1631 if(pDevice->byBBPreEDIndex == 20) break;
1632 pDevice->byBBPreEDIndex = 20;
1633 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x26); //CR201(0xC9)
1634 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1635 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -43\n");
1636 } else if(pDevice->byBBPreEDRSSI <= 45) { //RSSI -44, -45
1637 if(pDevice->byBBPreEDIndex == 19) break;
1638 pDevice->byBBPreEDIndex = 19;
1639 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x18); //CR201(0xC9)
1640 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1641 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -44,-45\n");
1642 } else if(pDevice->byBBPreEDRSSI <= 47) { //RSSI -46, -47
1643 if(pDevice->byBBPreEDIndex == 18) break;
1644 pDevice->byBBPreEDIndex = 18;
1645 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x11); //CR201(0xC9)
1646 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1647 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -46,-47\n");
1648 } else if(pDevice->byBBPreEDRSSI <= 49) { //RSSI -48, -49
1649 if(pDevice->byBBPreEDIndex == 17) break;
1650 pDevice->byBBPreEDIndex = 17;
1651 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0a); //CR201(0xC9)
1652 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1653 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -48,-49\n");
1654 } else if(pDevice->byBBPreEDRSSI <= 51) { //RSSI -50, -51
1655 if(pDevice->byBBPreEDIndex == 16) break;
1656 pDevice->byBBPreEDIndex = 16;
1657 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x07); //CR201(0xC9)
1658 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1659 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -50,-51\n");
1660 } else if(pDevice->byBBPreEDRSSI <= 53) { //RSSI -52, -53
1661 if(pDevice->byBBPreEDIndex == 15) break;
1662 pDevice->byBBPreEDIndex = 15;
1663 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x04); //CR201(0xC9)
1664 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1665 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -52,-53\n");
1666 } else if(pDevice->byBBPreEDRSSI <= 55) { //RSSI -54, -55
1667 if(pDevice->byBBPreEDIndex == 14) break;
1668 pDevice->byBBPreEDIndex = 14;
1669 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1670 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1671 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -54,-55\n");
1672 } else if(pDevice->byBBPreEDRSSI <= 56) { //RSSI -56
1673 if(pDevice->byBBPreEDIndex == 13) break;
1674 pDevice->byBBPreEDIndex = 13;
1675 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1676 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1677 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -56\n");
1678 } else if(pDevice->byBBPreEDRSSI <= 57) { //RSSI -57
1679 if(pDevice->byBBPreEDIndex == 12) break;
1680 pDevice->byBBPreEDIndex = 12;
1681 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1682 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xB0); //CR206(0xCE)
1683 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -57\n");
1684 } else if(pDevice->byBBPreEDRSSI <= 58) { //RSSI -58
1685 if(pDevice->byBBPreEDIndex == 11) break;
1686 pDevice->byBBPreEDIndex = 11;
1687 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1688 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x70); //CR206(0xCE)
1689 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -58\n");
1690 } else if(pDevice->byBBPreEDRSSI <= 59) { //RSSI -59
1691 if(pDevice->byBBPreEDIndex == 10) break;
1692 pDevice->byBBPreEDIndex = 10;
1693 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1694 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1695 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -59\n");
1696 } else if(pDevice->byBBPreEDRSSI <= 60) { //RSSI -60
1697 if(pDevice->byBBPreEDIndex == 9) break;
1698 pDevice->byBBPreEDIndex = 9;
1699 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1700 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xEA); //CR206(0xCE)
1701 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -60\n");
1702 } else if(pDevice->byBBPreEDRSSI <= 61) { //RSSI -61
1703 if(pDevice->byBBPreEDIndex == 8) break;
1704 pDevice->byBBPreEDIndex = 8;
1705 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1706 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1707 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -61\n");
1708 } else if(pDevice->byBBPreEDRSSI <= 62) { //RSSI -62
1709 if(pDevice->byBBPreEDIndex == 7) break;
1710 pDevice->byBBPreEDIndex = 7;
1711 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1712 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x9C); //CR206(0xCE)
1713 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -62\n");
1714 } else if(pDevice->byBBPreEDRSSI <= 63) { //RSSI -63
1715 if(pDevice->byBBPreEDIndex == 6) break;
1716 pDevice->byBBPreEDIndex = 6;
1717 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1718 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x80); //CR206(0xCE)
1719 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -63\n");
1720 } else if(pDevice->byBBPreEDRSSI <= 64) { //RSSI -64
1721 if(pDevice->byBBPreEDIndex == 5) break;
1722 pDevice->byBBPreEDIndex = 5;
1723 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1724 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x68); //CR206(0xCE)
1725 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -64\n");
1726 } else if(pDevice->byBBPreEDRSSI <= 65) { //RSSI -65
1727 if(pDevice->byBBPreEDIndex == 4) break;
1728 pDevice->byBBPreEDIndex = 4;
1729 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1730 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x52); //CR206(0xCE)
1731 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -65\n");
1732 } else if(pDevice->byBBPreEDRSSI <= 66) { //RSSI -66
1733 if(pDevice->byBBPreEDIndex == 3) break;
1734 pDevice->byBBPreEDIndex = 3;
1735 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1736 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x43); //CR206(0xCE)
1737 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -66\n");
1738 } else if(pDevice->byBBPreEDRSSI <= 67) { //RSSI -67
1739 if(pDevice->byBBPreEDIndex == 2) break;
1740 pDevice->byBBPreEDIndex = 2;
1741 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1742 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x36); //CR206(0xCE)
1743 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -67\n");
1744 } else if(pDevice->byBBPreEDRSSI <= 68) { //RSSI -68
1745 if(pDevice->byBBPreEDIndex == 1) break;
1746 pDevice->byBBPreEDIndex = 1;
1747 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1748 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x2D); //CR206(0xCE)
1749 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -68\n");
1750 } else { //RSSI -69, -70, ...
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, 0x24); //CR206(0xCE)
1755 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -69, -70,..\n");
1756 }
1757 break;
1758
1759 case RF_VT3342A0: //RobertYu:20060627, testing table
1760 if( bScanning )
1761 { // need Max sensitivity //RSSI -67, -68, ...
1762 if(pDevice->byBBPreEDIndex == 0) break;
1763 pDevice->byBBPreEDIndex = 0;
1764 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x00); //CR201(0xC9)
1765 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x38); //CR206(0xCE)
1766 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -67, -68,..\n");
1767 break;
1768 }
1769
1770 if(pDevice->byBBPreEDRSSI <= 41) { // RSSI 0, -1,-2,....-41
1771 if(pDevice->byBBPreEDIndex == 20) break;
1772 pDevice->byBBPreEDIndex = 20;
1773 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0xFF); //CR201(0xC9)
1774 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1775 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI 0, -1,-2,..-41\n");
1776 } else if(pDevice->byBBPreEDRSSI <= 42) { //RSSI -42
1777 if(pDevice->byBBPreEDIndex == 19) break;
1778 pDevice->byBBPreEDIndex = 19;
1779 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x36); //CR201(0xC9)
1780 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1781 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -42\n");
1782 } else if(pDevice->byBBPreEDRSSI <= 43) { //RSSI -43
1783 if(pDevice->byBBPreEDIndex == 18) break;
1784 pDevice->byBBPreEDIndex = 18;
1785 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x26); //CR201(0xC9)
1786 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1787 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -43\n");
1788 } else if(pDevice->byBBPreEDRSSI <= 45) { //RSSI -44, -45
1789 if(pDevice->byBBPreEDIndex == 17) break;
1790 pDevice->byBBPreEDIndex = 17;
1791 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x18); //CR201(0xC9)
1792 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1793 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -44,-45\n");
1794 } else if(pDevice->byBBPreEDRSSI <= 47) { //RSSI -46, -47
1795 if(pDevice->byBBPreEDIndex == 16) break;
1796 pDevice->byBBPreEDIndex = 16;
1797 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x11); //CR201(0xC9)
1798 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1799 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -46,-47\n");
1800 } else if(pDevice->byBBPreEDRSSI <= 49) { //RSSI -48, -49
1801 if(pDevice->byBBPreEDIndex == 15) break;
1802 pDevice->byBBPreEDIndex = 15;
1803 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x0a); //CR201(0xC9)
1804 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1805 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -48,-49\n");
1806 } else if(pDevice->byBBPreEDRSSI <= 51) { //RSSI -50, -51
1807 if(pDevice->byBBPreEDIndex == 14) break;
1808 pDevice->byBBPreEDIndex = 14;
1809 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x07); //CR201(0xC9)
1810 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1811 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -50,-51\n");
1812 } else if(pDevice->byBBPreEDRSSI <= 53) { //RSSI -52, -53
1813 if(pDevice->byBBPreEDIndex == 13) break;
1814 pDevice->byBBPreEDIndex = 13;
1815 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x04); //CR201(0xC9)
1816 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x00); //CR206(0xCE)
1817 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -52,-53\n");
1818 } else if(pDevice->byBBPreEDRSSI <= 55) { //RSSI -54, -55
1819 if(pDevice->byBBPreEDIndex == 12) break;
1820 pDevice->byBBPreEDIndex = 12;
1821 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1822 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0xC0); //CR206(0xCE)
1823 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -54,-55\n");
1824 } else if(pDevice->byBBPreEDRSSI <= 56) { //RSSI -56
1825 if(pDevice->byBBPreEDIndex == 11) break;
1826 pDevice->byBBPreEDIndex = 11;
1827 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x02); //CR201(0xC9)
1828 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1829 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -56\n");
1830 } else if(pDevice->byBBPreEDRSSI <= 57) { //RSSI -57
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, 0xB0); //CR206(0xCE)
1835 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -57\n");
1836 } else if(pDevice->byBBPreEDRSSI <= 58) { //RSSI -58
1837 if(pDevice->byBBPreEDIndex == 9) break;
1838 pDevice->byBBPreEDIndex = 9;
1839 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1840 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x70); //CR206(0xCE)
1841 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -58\n");
1842 } else if(pDevice->byBBPreEDRSSI <= 59) { //RSSI -59
1843 if(pDevice->byBBPreEDIndex == 8) break;
1844 pDevice->byBBPreEDIndex = 8;
1845 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xC9, 0x01); //CR201(0xC9)
1846 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xCE, 0x30); //CR206(0xCE)
1847 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -59\n");
1848 } else if(pDevice->byBBPreEDRSSI <= 60) { //RSSI -60
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, 0xEA); //CR206(0xCE)
1853 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -60\n");
1854 } else if(pDevice->byBBPreEDRSSI <= 61) { //RSSI -61
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, 0xC0); //CR206(0xCE)
1859 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -61\n");
1860 } else if(pDevice->byBBPreEDRSSI <= 62) { //RSSI -62
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, 0x9C); //CR206(0xCE)
1865 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -62\n");
1866 } else if(pDevice->byBBPreEDRSSI <= 63) { //RSSI -63
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, 0x80); //CR206(0xCE)
1871 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -63\n");
1872 } else if(pDevice->byBBPreEDRSSI <= 64) { //RSSI -64
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, 0x68); //CR206(0xCE)
1877 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -64\n");
1878 } else if(pDevice->byBBPreEDRSSI <= 65) { //RSSI -65
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, 0x52); //CR206(0xCE)
1883 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -65\n");
1884 } else if(pDevice->byBBPreEDRSSI <= 66) { //RSSI -66
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, 0x43); //CR206(0xCE)
1889 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -66\n");
1890 } else { //RSSI -67, -68, ...
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, 0x38); //CR206(0xCE)
1895 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->byBBPreEDRSSI -67, -68,..\n");
1896 }
1897 break;
1898
1899 }
1900
1901}
1902