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 *************************************************************************
34 -------- ---------- ----------------------------------------------
35 Fonchi Wu 2007-12-19 created
41 #include "rtmp_type.h"
53 typedef struct _CH_DESP {
57 UCHAR Geography; // 0:out door, 1:in door, 2:both
58 BOOLEAN DfsReq; // Dfs require, 0: No, 1: yes.
61 typedef struct _CH_REGION {
63 UCHAR DfsType; // 0: CE, 1: FCC, 2: JAP, 3:JAP_W53, JAP_W56
65 } CH_REGION, *PCH_REGION;
67 static CH_REGION ChRegion[] =
69 { // Antigua and Berbuda
73 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
74 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
75 { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64
76 { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140
85 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
86 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
87 { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161
96 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
97 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
98 { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64
99 { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140
108 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
109 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
110 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
111 { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165
120 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
121 { 36, 4, 23, IDOR, TRUE}, // 5G, ch 36~48
122 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
123 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
132 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
133 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
134 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
135 { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165
144 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
145 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
146 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
147 { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140
156 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
157 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
158 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
159 { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140
168 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
169 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
170 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
171 { 100, 11, 24, BOTH, FALSE}, // 5G, ch 100~140
172 { 149, 5, 30, BOTH, FALSE}, // 5G, ch 100~140
181 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
182 { 36, 4, 18, IDOR, FALSE}, // 5G, ch 36~48
183 { 52, 4, 18, IDOR, FALSE}, // 5G, ch 52~64
192 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
193 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
194 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
195 { 100, 11, 30, ODOR, TRUE}, // 5G, ch 100~140
204 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
205 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
206 { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64
207 { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165
216 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
217 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
218 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
219 { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140
228 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
229 { 36, 4, 20, BOTH, FALSE}, // 5G, ch 36~48
230 { 52, 4, 20, BOTH, FALSE}, // 5G, ch 52~64
231 { 149, 5, 20, BOTH, FALSE}, // 5G, ch 149~165
240 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
241 { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161
250 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
251 { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48
252 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
253 { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140
254 { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165
263 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
264 { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48
265 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
266 { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161
275 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
276 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
277 { 52, 4, 24, IDOR, TRUE}, // 5G, ch 52~64
278 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
287 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
288 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
289 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
298 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
299 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
300 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
301 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
306 { // Dominican Republic
310 { 1, 0, 20, BOTH, FALSE}, // 2.4 G, ch 0
311 { 149, 4, 20, BOTH, FALSE}, // 5G, ch 149~161
320 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
321 { 100, 11, 27, BOTH, FALSE}, // 5G, ch 100~140
330 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
331 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
332 { 52, 4, 30, BOTH, TRUE}, // 5G, ch 52~64
333 { 149, 4, 36, BOTH, TRUE}, // 5G, ch 149~165
342 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
343 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
344 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
345 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
354 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
355 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
356 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
365 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
366 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
367 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
368 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
377 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
378 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
379 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
380 { 100, 11, 30, ODOR, TRUE}, // 5G, ch 100~140
389 { 1, 11, 20, BOTH, FALSE}, // 2.4 G, ch 1~11
390 { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48
391 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
392 { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140
393 { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165
402 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
403 { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48
404 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
405 { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161
414 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
415 { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48
416 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
417 { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161
426 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
427 { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161
436 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
437 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
438 { 52, 4, 23, IDOR, FALSE}, // 5G, ch 52~64
439 { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161
448 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
449 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
450 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
459 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
460 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
461 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
462 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
471 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
472 { 149, 4, 24, IDOR, FALSE}, // 5G, ch 149~161
481 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
482 { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161
491 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
492 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
493 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
494 { 100, 11, 30, ODOR, TRUE}, // 5G, ch 100~140
503 { 1, 3, 20, IDOR, FALSE}, // 2.4 G, ch 1~3
504 { 4, 6, 20, BOTH, FALSE}, // 2.4 G, ch 4~9
505 { 10, 4, 20, IDOR, FALSE}, // 2.4 G, ch 10~13
514 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
515 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
516 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
517 { 100, 11, 30, ODOR, TRUE}, // 5G, ch 100~140
526 { 1, 14, 20, BOTH, FALSE}, // 2.4 G, ch 1~14
528 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
531 { 34, 4, 23, IDOR, FALSE}, // 5G, ch 34~46
541 { 1, 13, 20, IDOR, FALSE}, // 2.4 G, ch 1~13
542 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
543 { 149, 4, 23, IDOR, FALSE}, // 5G, ch 149~161
552 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
553 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
554 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
555 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
564 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
565 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
566 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
575 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
576 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
577 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
578 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
587 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
588 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
589 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
590 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
599 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
600 { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64
601 { 149, 5, 20, BOTH, FALSE}, // 5G, ch 149~165
610 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
611 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
612 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
613 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
622 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
623 { 36, 4, 24, IDOR, FALSE}, // 5G, ch 36~48
632 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
633 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
634 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
635 { 149, 5, 30, IDOR, FALSE}, // 5G, ch 149~165
644 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
645 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
646 { 52, 4, 24, IDOR, TRUE}, // 5G, ch 52~64
647 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
656 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
657 { 36, 4, 24, BOTH, FALSE}, // 5G, ch 36~48
658 { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64
659 { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161
668 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
669 { 36, 4, 24, IDOR, FALSE}, // 5G, ch 36~48
670 { 52, 4, 24, IDOR, TRUE}, // 5G, ch 52~64
671 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 149~161
680 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
681 { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161
690 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
691 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
692 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
693 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
702 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
703 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
704 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
705 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
714 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
715 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
716 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
717 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
726 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
727 { 149, 4, 20, IDOR, FALSE}, // 5G, ch 149~161
736 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
737 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
738 { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64
739 { 149, 4, 23, BOTH, FALSE}, // 5G, ch 149~161
744 { // Serbia_and_Montenegro
748 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
757 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
758 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
759 { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64
760 { 149, 4, 20, BOTH, FALSE}, // 5G, ch 149~161
769 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
770 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
771 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
772 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
781 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
782 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
783 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
792 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
793 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
794 { 52, 4, 23, IDOR, FALSE}, // 5G, ch 52~64
795 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
796 { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161
805 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
806 { 36, 4, 20, BOTH, FALSE}, // 5G, ch 36~48
807 { 52, 4, 20, BOTH, FALSE}, // 5G, ch 52~64
808 { 100, 8, 20, BOTH, FALSE}, // 5G, ch 100~128
809 { 149, 4, 20, BOTH, FALSE}, // 5G, ch 149~161
818 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
819 { 36, 4, 17, IDOR, FALSE}, // 5G, ch 36~48
820 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
821 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
830 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
831 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
832 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
833 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
842 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13
843 { 36, 4, 23, IDOR, TRUE}, // 5G, ch 36~48
844 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
853 { 1, 11, 30, BOTH, FALSE}, // 2.4 G, ch 1~11
854 { 52, 4, 23, IDOR, FALSE}, // 5G, ch 52~64
863 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11
864 { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48
865 { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64
874 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11
875 { 36, 4, 23, IDOR, FALSE}, // 5G, ch 52~64
876 { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64
877 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
886 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11
891 { // United_Arab_Emirates
895 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11
904 { 1, 11, 30, BOTH, FALSE}, // 2.4 G, ch 1~11
905 { 36, 4, 17, IDOR, FALSE}, // 5G, ch 52~64
906 { 52, 4, 24, BOTH, TRUE}, // 5G, ch 52~64
907 { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140
908 { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165
917 { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11
918 { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161
927 { 1, 11, 20, BOTH, FALSE}, // 2.4 G, ch 1~11
928 { 36, 4, 20, BOTH, FALSE}, // 5G, ch 52~64
929 { 52, 4, 20, BOTH, FALSE}, // 5G, ch 52~64
930 { 100, 11, 20, BOTH, FALSE}, // 5G, ch 100~140
931 { 149, 5, 20, BOTH, FALSE}, // 5G, ch 149~165
937 static inline PCH_REGION GetChRegion(
941 PCH_REGION pChRegion = NULL;
943 while (strcmp(ChRegion[loop].CountReg, "") != 0)
945 if (strncmp(ChRegion[loop].CountReg, CntryCode, 2) == 0)
947 pChRegion = &ChRegion[loop];
953 if (pChRegion == NULL)
954 pChRegion = &ChRegion[loop];
958 static inline VOID ChBandCheck(
968 case PHY_11ABG_MIXED:
969 case PHY_11AGN_MIXED:
970 case PHY_11ABGN_MIXED:
971 *pChType = BAND_BOTH;
980 static inline UCHAR FillChList(
981 IN PRTMP_ADAPTER pAd,
990 for (i = 0; i < pChDesp->NumOfCh; i++)
992 channel = pChDesp->FirstChannel + i * increment;
993 for (l=0; l<MAX_NUM_OF_CHANNELS; l++)
995 if (channel == pAd->TxPower[l].Channel)
997 pAd->ChannelList[j].Power = pAd->TxPower[l].Power;
998 pAd->ChannelList[j].Power2 = pAd->TxPower[l].Power2;
1002 if (l == MAX_NUM_OF_CHANNELS)
1005 pAd->ChannelList[j].Channel = pChDesp->FirstChannel + i * increment;
1006 pAd->ChannelList[j].MaxTxPwr = pChDesp->MaxTxPwr;
1007 pAd->ChannelList[j].DfsReq = pChDesp->DfsReq;
1010 pAd->ChannelListNum = j;
1015 static inline VOID CreateChList(
1016 IN PRTMP_ADAPTER pAd,
1017 IN PCH_REGION pChRegion,
1026 if (pChRegion == NULL)
1029 ChBandCheck(pAd->CommonCfg.PhyMode, &ChType);
1031 for (i=0; i<10; i++)
1033 pChDesp = &pChRegion->ChDesp[i];
1034 if (pChDesp->FirstChannel == 0)
1037 if (ChType == BAND_5G)
1039 if (pChDesp->FirstChannel <= 14)
1042 else if (ChType == BAND_24G)
1044 if (pChDesp->FirstChannel > 14)
1048 if ((pChDesp->Geography == BOTH)
1049 || (pChDesp->Geography == Geography))
1051 if (pChDesp->FirstChannel > 14)
1055 offset = FillChList(pAd, pChDesp, offset, increment);
1060 static inline VOID BuildChannelListEx(
1061 IN PRTMP_ADAPTER pAd)
1065 pChReg = GetChRegion(pAd->CommonCfg.CountryCode);
1066 CreateChList(pAd, pChReg, pAd->CommonCfg.Geography);
1069 static inline VOID BuildBeaconChList(
1070 IN PRTMP_ADAPTER pAd,
1076 PCH_REGION pChRegion;
1080 pChRegion = GetChRegion(pAd->CommonCfg.CountryCode);
1082 if (pChRegion == NULL)
1085 ChBandCheck(pAd->CommonCfg.PhyMode, &ChType);
1088 for (i=0; i<10; i++)
1090 pChDesp = &pChRegion->ChDesp[i];
1091 if (pChDesp->FirstChannel == 0)
1094 if (ChType == BAND_5G)
1096 if (pChDesp->FirstChannel <= 14)
1099 else if (ChType == BAND_24G)
1101 if (pChDesp->FirstChannel > 14)
1105 if ((pChDesp->Geography == BOTH)
1106 || (pChDesp->Geography == pAd->CommonCfg.Geography))
1108 MakeOutgoingFrame(pBuf + *pBufLen, &TmpLen,
1109 1, &pChDesp->FirstChannel,
1110 1, &pChDesp->NumOfCh,
1111 1, &pChDesp->MaxTxPwr,
1118 static inline BOOLEAN IsValidChannel(
1119 IN PRTMP_ADAPTER pAd,
1125 for (i = 0; i < pAd->ChannelListNum; i++)
1127 if (pAd->ChannelList[i].Channel == channel)
1131 if (i == pAd->ChannelListNum)
1138 static inline UCHAR GetExtCh(
1144 if (Direction == EXTCHA_ABOVE)
1145 ExtCh = Channel + 4;
1147 ExtCh = (Channel - 4) > 0 ? (Channel - 4) : 0;
1153 static inline VOID N_ChannelCheck(
1154 IN PRTMP_ADAPTER pAd)
1156 //UCHAR ChannelNum = pAd->ChannelListNum;
1157 UCHAR Channel = pAd->CommonCfg.Channel;
1159 if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) && (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40))
1163 if ((Channel == 36) || (Channel == 44) || (Channel == 52) || (Channel == 60) || (Channel == 100) || (Channel == 108) ||
1164 (Channel == 116) || (Channel == 124) || (Channel == 132) || (Channel == 149) || (Channel == 157))
1166 pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_ABOVE;
1168 else if ((Channel == 40) || (Channel == 48) || (Channel == 56) || (Channel == 64) || (Channel == 104) || (Channel == 112) ||
1169 (Channel == 120) || (Channel == 128) || (Channel == 136) || (Channel == 153) || (Channel == 161))
1171 pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_BELOW;
1175 pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20;
1183 UCHAR Dir = pAd->CommonCfg.RegTransmitSetting.field.EXTCHA;
1184 ExtCh = GetExtCh(Channel, Dir);
1185 if (IsValidChannel(pAd, ExtCh))
1188 Dir = (Dir == EXTCHA_ABOVE) ? EXTCHA_BELOW : EXTCHA_ABOVE;
1189 ExtCh = GetExtCh(Channel, Dir);
1190 if (IsValidChannel(pAd, ExtCh))
1192 pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = Dir;
1195 pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20;
1200 pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20;
1201 //pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_NONE; // We didn't set the ExtCh as NONE due to it'll set in RTMPSetHT()
1210 static inline VOID N_SetCenCh(
1211 IN PRTMP_ADAPTER pAd)
1213 if (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40)
1215 if (pAd->CommonCfg.RegTransmitSetting.field.EXTCHA == EXTCHA_ABOVE)
1217 pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel + 2;
1221 if (pAd->CommonCfg.Channel == 14)
1222 pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel - 1;
1224 pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel - 2;
1229 pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel;
1233 static inline UINT8 GetCuntryMaxTxPwr(
1234 IN PRTMP_ADAPTER pAd,
1238 for (i = 0; i < pAd->ChannelListNum; i++)
1240 if (pAd->ChannelList[i].Channel == channel)
1244 if (i == pAd->ChannelListNum)
1247 return pAd->ChannelList[i].MaxTxPwr;
1249 #endif // __CHLIST_H__