2 *************************************************************************
4 * 5F., No.36, Taiyuan St., Jhubei City,
8 * (c) Copyright 2002-2007, Ralink Technology, Inc.
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
15 * This program is distributed in the hope that it will be useful, *
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
18 * GNU General Public License for more details. *
20 * You should have received a copy of the GNU General Public License *
21 * along with this program; if not, write to the *
22 * Free Software Foundation, Inc., *
23 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
25 *************************************************************************
27 #include "../rt_config.h"
30 CH_FREQ_MAP CH_HZ_ID_MAP[]=
91 {208, 5040}, /* Japan, means J08 */
92 {212, 5060}, /* Japan, means J12 */
93 {216, 5080}, /* Japan, means J16 */
96 INT CH_HZ_ID_MAP_NUM = (sizeof(CH_HZ_ID_MAP)/sizeof(CH_FREQ_MAP));
98 CH_REGION ChRegion[] =
100 { // Antigua and Berbuda
104 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
105 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
106 { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64
107 { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140
116 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
117 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
118 { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161
127 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
128 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
129 { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64
130 { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140
139 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
140 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
141 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
142 { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165
151 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
152 { 36, 4, 23, IDOR, TRUE}, // 5G, ch 36~48
153 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
154 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
163 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
164 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
165 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
166 { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165
175 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
176 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
177 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
178 { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140
187 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
188 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
189 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
190 { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140
199 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
200 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
201 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
202 { 100, 11, 24, BOTH, FALSE}, // 5G, ch 100~140
203 { 149, 5, 30, BOTH, FALSE}, // 5G, ch 100~140
212 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
213 { 36, 4, 18, IDOR, FALSE}, // 5G, ch 36~48
214 { 52, 4, 18, IDOR, FALSE}, // 5G, ch 52~64
223 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
224 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
225 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
226 { 100, 11, 30, ODOR, TRUE}, // 5G, ch 100~140
235 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
236 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
237 { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64
238 { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165
247 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
248 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
249 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
250 { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140
259 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
260 { 36, 4, 20, BOTH, FALSE}, // 5G, ch 36~48
261 { 52, 4, 20, BOTH, FALSE}, // 5G, ch 52~64
262 { 149, 5, 20, BOTH, FALSE}, // 5G, ch 149~165
271 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
272 { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161
281 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
282 { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48
283 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
284 { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140
285 { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165
294 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
295 { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48
296 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
297 { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161
306 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
307 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
308 { 52, 4, 24, IDOR, TRUE}, // 5G, ch 52~64
309 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
318 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
319 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
320 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
329 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
330 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
331 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
332 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
337 { // Dominican Republic
341 { 1, 0, 20, BOTH, FALSE}, // 2.4 G, ch 0
342 { 149, 4, 20, BOTH, FALSE}, // 5G, ch 149~161
351 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
352 { 100, 11, 27, BOTH, FALSE}, // 5G, ch 100~140
361 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
362 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
363 { 52, 4, 30, BOTH, TRUE}, // 5G, ch 52~64
364 { 149, 4, 36, BOTH, TRUE}, // 5G, ch 149~165
373 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
374 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
375 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
376 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
385 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
386 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
387 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
396 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
397 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
398 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
399 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
408 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
409 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
410 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
411 { 100, 11, 30, ODOR, TRUE}, // 5G, ch 100~140
420 { 1, 11, 20, BOTH, FALSE}, // 2.4 G, ch 1~11
421 { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48
422 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
423 { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140
424 { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165
433 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
434 { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48
435 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
436 { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161
445 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
446 { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48
447 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
448 { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161
457 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
458 { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161
467 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
468 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
469 { 52, 4, 23, IDOR, FALSE}, // 5G, ch 52~64
470 { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161
479 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
480 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
481 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
490 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
491 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
492 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
493 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
502 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
503 { 149, 4, 24, IDOR, FALSE}, // 5G, ch 149~161
512 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
513 { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161
522 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
523 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
524 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
525 { 100, 11, 30, ODOR, TRUE}, // 5G, ch 100~140
534 { 1, 3, 20, IDOR, FALSE}, // 2.4 G, ch 1~3
535 { 4, 6, 20, BOTH, FALSE}, // 2.4 G, ch 4~9
536 { 10, 4, 20, IDOR, FALSE}, // 2.4 G, ch 10~13
545 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
546 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
547 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
548 { 100, 11, 30, ODOR, TRUE}, // 5G, ch 100~140
557 { 1, 14, 20, BOTH, FALSE}, // 2.4 G, ch 1~14
558 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
567 { 1, 13, 20, IDOR, FALSE}, // 2.4 G, ch 1~13
568 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
569 { 149, 4, 23, IDOR, FALSE}, // 5G, ch 149~161
578 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
579 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
580 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
581 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
590 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
591 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
592 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
601 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
602 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
603 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
604 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
613 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
614 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
615 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
616 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
625 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
626 { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64
627 { 149, 5, 20, BOTH, FALSE}, // 5G, ch 149~165
636 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
637 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
638 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
639 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
648 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
649 { 36, 4, 24, IDOR, FALSE}, // 5G, ch 36~48
658 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
659 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
660 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
661 { 149, 5, 30, IDOR, FALSE}, // 5G, ch 149~165
670 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
671 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
672 { 52, 4, 24, IDOR, TRUE}, // 5G, ch 52~64
673 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
682 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
683 { 36, 4, 24, BOTH, FALSE}, // 5G, ch 36~48
684 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
685 { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161
694 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
695 { 36, 4, 24, IDOR, FALSE}, // 5G, ch 36~48
696 { 52, 4, 24, IDOR, TRUE}, // 5G, ch 52~64
697 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 149~161
706 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
707 { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161
716 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
717 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
718 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
719 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
728 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
729 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
730 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
731 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
740 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
741 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
742 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
743 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
752 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
753 { 149, 4, 20, IDOR, FALSE}, // 5G, ch 149~161
762 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
763 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
764 { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64
765 { 149, 4, 23, BOTH, FALSE}, // 5G, ch 149~161
770 { // Serbia_and_Montenegro
774 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
783 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
784 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
785 { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64
786 { 149, 4, 20, BOTH, FALSE}, // 5G, ch 149~161
795 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
796 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
797 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
798 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
807 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
808 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
809 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
818 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
819 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
820 { 52, 4, 23, IDOR, FALSE}, // 5G, ch 52~64
821 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
822 { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161
831 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
832 { 36, 4, 20, BOTH, FALSE}, // 5G, ch 36~48
833 { 52, 4, 20, BOTH, FALSE}, // 5G, ch 52~64
834 { 100, 8, 20, BOTH, FALSE}, // 5G, ch 100~128
835 { 149, 4, 20, BOTH, FALSE}, // 5G, ch 149~161
844 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
845 { 36, 4, 17, IDOR, FALSE}, // 5G, ch 36~48
846 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
847 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
856 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
857 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
858 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
859 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
868 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
869 { 36, 4, 23, IDOR, TRUE}, // 5G, ch 36~48
870 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
879 { 1, 11, 30, BOTH, FALSE}, // 2.4 G, ch 1~11
880 { 52, 4, 23, IDOR, FALSE}, // 5G, ch 52~64
889 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11
890 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
891 { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64
900 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11
901 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 52~64
902 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
903 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
912 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11
917 { // United_Arab_Emirates
921 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11
930 { 1, 11, 30, BOTH, FALSE}, // 2.4 G, ch 1~11
931 { 36, 4, 17, IDOR, FALSE}, // 5G, ch 52~64
932 { 52, 4, 24, BOTH, TRUE}, // 5G, ch 52~64
933 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
934 { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165
943 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11
944 { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161
953 { 1, 11, 20, BOTH, FALSE}, // 2.4 G, ch 1~11
954 { 36, 4, 20, BOTH, FALSE}, // 5G, ch 52~64
955 { 52, 4, 20, BOTH, FALSE}, // 5G, ch 52~64
956 { 100, 11, 20, BOTH, FALSE}, // 5G, ch 100~140
957 { 149, 5, 20, BOTH, FALSE}, // 5G, ch 149~165
964 static PCH_REGION GetChRegion(
968 PCH_REGION pChRegion = NULL;
970 while (strcmp((PSTRING) ChRegion[loop].CountReg, "") != 0)
972 if (strncmp((PSTRING) ChRegion[loop].CountReg, (PSTRING) CntryCode, 2) == 0)
974 pChRegion = &ChRegion[loop];
980 if (pChRegion == NULL)
981 pChRegion = &ChRegion[loop];
985 static VOID ChBandCheck(
995 case PHY_11ABG_MIXED:
996 case PHY_11AGN_MIXED:
997 case PHY_11ABGN_MIXED:
998 *pChType = BAND_BOTH;
1002 *pChType = BAND_24G;
1007 static UCHAR FillChList(
1008 IN PRTMP_ADAPTER pAd,
1009 IN PCH_DESP pChDesp,
1017 for (i = 0; i < pChDesp->NumOfCh; i++)
1019 channel = pChDesp->FirstChannel + i * increment;
1020 for (l=0; l<MAX_NUM_OF_CHANNELS; l++)
1022 if (channel == pAd->TxPower[l].Channel)
1024 pAd->ChannelList[j].Power = pAd->TxPower[l].Power;
1025 pAd->ChannelList[j].Power2 = pAd->TxPower[l].Power2;
1029 if (l == MAX_NUM_OF_CHANNELS)
1032 pAd->ChannelList[j].Channel = pChDesp->FirstChannel + i * increment;
1033 pAd->ChannelList[j].MaxTxPwr = pChDesp->MaxTxPwr;
1034 pAd->ChannelList[j].DfsReq = pChDesp->DfsReq;
1037 pAd->ChannelListNum = j;
1043 static inline VOID CreateChList(
1044 IN PRTMP_ADAPTER pAd,
1045 IN PCH_REGION pChRegion,
1054 if (pChRegion == NULL)
1057 ChBandCheck(pAd->CommonCfg.PhyMode, &ChType);
1059 for (i=0; i<10; i++)
1061 pChDesp = &pChRegion->ChDesp[i];
1062 if (pChDesp->FirstChannel == 0)
1065 if (ChType == BAND_5G)
1067 if (pChDesp->FirstChannel <= 14)
1070 else if (ChType == BAND_24G)
1072 if (pChDesp->FirstChannel > 14)
1076 if ((pChDesp->Geography == BOTH)
1077 || (pChDesp->Geography == Geography))
1079 if (pChDesp->FirstChannel > 14)
1083 offset = FillChList(pAd, pChDesp, offset, increment);
1089 VOID BuildChannelListEx(
1090 IN PRTMP_ADAPTER pAd)
1094 pChReg = GetChRegion(pAd->CommonCfg.CountryCode);
1095 CreateChList(pAd, pChReg, pAd->CommonCfg.Geography);
1099 VOID BuildBeaconChList(
1100 IN PRTMP_ADAPTER pAd,
1106 PCH_REGION pChRegion;
1110 pChRegion = GetChRegion(pAd->CommonCfg.CountryCode);
1112 if (pChRegion == NULL)
1115 ChBandCheck(pAd->CommonCfg.PhyMode, &ChType);
1118 for (i=0; i<10; i++)
1120 pChDesp = &pChRegion->ChDesp[i];
1121 if (pChDesp->FirstChannel == 0)
1124 if (ChType == BAND_5G)
1126 if (pChDesp->FirstChannel <= 14)
1129 else if (ChType == BAND_24G)
1131 if (pChDesp->FirstChannel > 14)
1135 if ((pChDesp->Geography == BOTH)
1136 || (pChDesp->Geography == pAd->CommonCfg.Geography))
1138 MakeOutgoingFrame(pBuf + *pBufLen, &TmpLen,
1139 1, &pChDesp->FirstChannel,
1140 1, &pChDesp->NumOfCh,
1141 1, &pChDesp->MaxTxPwr,
1149 static BOOLEAN IsValidChannel(
1150 IN PRTMP_ADAPTER pAd,
1156 for (i = 0; i < pAd->ChannelListNum; i++)
1158 if (pAd->ChannelList[i].Channel == channel)
1162 if (i == pAd->ChannelListNum)
1169 static UCHAR GetExtCh(
1175 if (Direction == EXTCHA_ABOVE)
1176 ExtCh = Channel + 4;
1178 ExtCh = (Channel - 4) > 0 ? (Channel - 4) : 0;
1184 VOID N_ChannelCheck(
1185 IN PRTMP_ADAPTER pAd)
1187 //UCHAR ChannelNum = pAd->ChannelListNum;
1188 UCHAR Channel = pAd->CommonCfg.Channel;
1190 if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) && (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40))
1194 if ((Channel == 36) || (Channel == 44) || (Channel == 52) || (Channel == 60) || (Channel == 100) || (Channel == 108) ||
1195 (Channel == 116) || (Channel == 124) || (Channel == 132) || (Channel == 149) || (Channel == 157))
1197 pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_ABOVE;
1199 else if ((Channel == 40) || (Channel == 48) || (Channel == 56) || (Channel == 64) || (Channel == 104) || (Channel == 112) ||
1200 (Channel == 120) || (Channel == 128) || (Channel == 136) || (Channel == 153) || (Channel == 161))
1202 pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_BELOW;
1206 pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20;
1214 UCHAR Dir = pAd->CommonCfg.RegTransmitSetting.field.EXTCHA;
1215 ExtCh = GetExtCh(Channel, Dir);
1216 if (IsValidChannel(pAd, ExtCh))
1219 Dir = (Dir == EXTCHA_ABOVE) ? EXTCHA_BELOW : EXTCHA_ABOVE;
1220 ExtCh = GetExtCh(Channel, Dir);
1221 if (IsValidChannel(pAd, ExtCh))
1223 pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = Dir;
1226 pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20;
1231 pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20;
1232 //pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_NONE; // We didn't set the ExtCh as NONE due to it'll set in RTMPSetHT()
1242 IN PRTMP_ADAPTER pAd)
1244 if (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40)
1246 if (pAd->CommonCfg.RegTransmitSetting.field.EXTCHA == EXTCHA_ABOVE)
1248 pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel + 2;
1252 if (pAd->CommonCfg.Channel == 14)
1253 pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel - 1;
1255 pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel - 2;
1260 pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel;
1265 UINT8 GetCuntryMaxTxPwr(
1266 IN PRTMP_ADAPTER pAd,
1270 for (i = 0; i < pAd->ChannelListNum; i++)
1272 if (pAd->ChannelList[i].Channel == channel)
1276 if (i == pAd->ChannelListNum)
1279 return pAd->ChannelList[i].MaxTxPwr;