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
527 { 36, 4, 23, IDOR
, FALSE
}, // 5G, ch 36~48
536 { 1, 13, 20, IDOR
, FALSE
}, // 2.4 G, ch 1~13
537 { 36, 4, 23, IDOR
, FALSE
}, // 5G, ch 36~48
538 { 149, 4, 23, IDOR
, FALSE
}, // 5G, ch 149~161
547 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~13
548 { 36, 4, 23, IDOR
, FALSE
}, // 5G, ch 36~48
549 { 52, 4, 23, IDOR
, TRUE
}, // 5G, ch 52~64
550 { 100, 11, 30, BOTH
, TRUE
}, // 5G, ch 100~140
559 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~13
560 { 52, 4, 23, IDOR
, TRUE
}, // 5G, ch 52~64
561 { 100, 11, 30, BOTH
, TRUE
}, // 5G, ch 100~140
570 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~13
571 { 36, 4, 23, IDOR
, FALSE
}, // 5G, ch 36~48
572 { 52, 4, 23, IDOR
, TRUE
}, // 5G, ch 52~64
573 { 100, 11, 30, BOTH
, TRUE
}, // 5G, ch 100~140
582 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~13
583 { 36, 4, 23, IDOR
, FALSE
}, // 5G, ch 36~48
584 { 52, 4, 23, IDOR
, TRUE
}, // 5G, ch 52~64
585 { 100, 11, 30, BOTH
, TRUE
}, // 5G, ch 100~140
594 { 36, 4, 23, BOTH
, FALSE
}, // 5G, ch 36~48
595 { 52, 4, 23, BOTH
, FALSE
}, // 5G, ch 52~64
596 { 149, 5, 20, BOTH
, FALSE
}, // 5G, ch 149~165
605 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~13
606 { 36, 4, 23, IDOR
, FALSE
}, // 5G, ch 36~48
607 { 52, 4, 23, IDOR
, TRUE
}, // 5G, ch 52~64
608 { 100, 11, 30, BOTH
, TRUE
}, // 5G, ch 100~140
617 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~13
618 { 36, 4, 24, IDOR
, FALSE
}, // 5G, ch 36~48
627 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~13
628 { 36, 4, 23, BOTH
, FALSE
}, // 5G, ch 36~48
629 { 52, 4, 24, BOTH
, FALSE
}, // 5G, ch 52~64
630 { 149, 5, 30, IDOR
, FALSE
}, // 5G, ch 149~165
639 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~13
640 { 36, 4, 23, IDOR
, FALSE
}, // 5G, ch 36~48
641 { 52, 4, 24, IDOR
, TRUE
}, // 5G, ch 52~64
642 { 100, 11, 30, BOTH
, TRUE
}, // 5G, ch 100~140
651 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~13
652 { 36, 4, 24, BOTH
, FALSE
}, // 5G, ch 36~48
653 { 52, 4, 24, BOTH
, FALSE
}, // 5G, ch 52~64
654 { 149, 4, 30, BOTH
, FALSE
}, // 5G, ch 149~161
663 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~13
664 { 36, 4, 24, IDOR
, FALSE
}, // 5G, ch 36~48
665 { 52, 4, 24, IDOR
, TRUE
}, // 5G, ch 52~64
666 { 100, 11, 30, BOTH
, TRUE
}, // 5G, ch 149~161
675 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~13
676 { 149, 4, 27, BOTH
, FALSE
}, // 5G, ch 149~161
685 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~13
686 { 36, 4, 23, IDOR
, FALSE
}, // 5G, ch 36~48
687 { 52, 4, 23, IDOR
, TRUE
}, // 5G, ch 52~64
688 { 100, 11, 30, BOTH
, TRUE
}, // 5G, ch 100~140
697 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~13
698 { 36, 4, 23, IDOR
, FALSE
}, // 5G, ch 36~48
699 { 52, 4, 23, IDOR
, TRUE
}, // 5G, ch 52~64
700 { 100, 11, 30, BOTH
, TRUE
}, // 5G, ch 100~140
709 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~13
710 { 36, 4, 23, IDOR
, FALSE
}, // 5G, ch 36~48
711 { 52, 4, 23, IDOR
, TRUE
}, // 5G, ch 52~64
712 { 100, 11, 30, BOTH
, TRUE
}, // 5G, ch 100~140
721 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~13
722 { 149, 4, 20, IDOR
, FALSE
}, // 5G, ch 149~161
731 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~13
732 { 36, 4, 23, BOTH
, FALSE
}, // 5G, ch 36~48
733 { 52, 4, 23, BOTH
, FALSE
}, // 5G, ch 52~64
734 { 149, 4, 23, BOTH
, FALSE
}, // 5G, ch 149~161
739 { // Serbia_and_Montenegro
743 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~13
752 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~13
753 { 36, 4, 23, BOTH
, FALSE
}, // 5G, ch 36~48
754 { 52, 4, 23, BOTH
, FALSE
}, // 5G, ch 52~64
755 { 149, 4, 20, BOTH
, FALSE
}, // 5G, ch 149~161
764 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~13
765 { 36, 4, 23, IDOR
, FALSE
}, // 5G, ch 36~48
766 { 52, 4, 23, IDOR
, TRUE
}, // 5G, ch 52~64
767 { 100, 11, 30, BOTH
, TRUE
}, // 5G, ch 100~140
776 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~13
777 { 36, 4, 23, IDOR
, FALSE
}, // 5G, ch 36~48
778 { 52, 4, 23, IDOR
, TRUE
}, // 5G, ch 52~64
787 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~13
788 { 36, 4, 23, BOTH
, FALSE
}, // 5G, ch 36~48
789 { 52, 4, 23, IDOR
, FALSE
}, // 5G, ch 52~64
790 { 100, 11, 30, BOTH
, TRUE
}, // 5G, ch 100~140
791 { 149, 4, 30, BOTH
, FALSE
}, // 5G, ch 149~161
800 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~13
801 { 36, 4, 20, BOTH
, FALSE
}, // 5G, ch 36~48
802 { 52, 4, 20, BOTH
, FALSE
}, // 5G, ch 52~64
803 { 100, 8, 20, BOTH
, FALSE
}, // 5G, ch 100~128
804 { 149, 4, 20, BOTH
, FALSE
}, // 5G, ch 149~161
813 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~13
814 { 36, 4, 17, IDOR
, FALSE
}, // 5G, ch 36~48
815 { 52, 4, 23, IDOR
, TRUE
}, // 5G, ch 52~64
816 { 100, 11, 30, BOTH
, TRUE
}, // 5G, ch 100~140
825 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~13
826 { 36, 4, 23, IDOR
, FALSE
}, // 5G, ch 36~48
827 { 52, 4, 23, IDOR
, TRUE
}, // 5G, ch 52~64
828 { 100, 11, 30, BOTH
, TRUE
}, // 5G, ch 100~140
837 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~13
838 { 36, 4, 23, IDOR
, TRUE
}, // 5G, ch 36~48
839 { 52, 4, 23, IDOR
, TRUE
}, // 5G, ch 52~64
848 { 1, 11, 30, BOTH
, FALSE
}, // 2.4 G, ch 1~11
849 { 52, 4, 23, IDOR
, FALSE
}, // 5G, ch 52~64
858 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~11
859 { 36, 4, 23, BOTH
, FALSE
}, // 5G, ch 36~48
860 { 52, 4, 23, BOTH
, FALSE
}, // 5G, ch 52~64
869 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~11
870 { 36, 4, 23, IDOR
, FALSE
}, // 5G, ch 52~64
871 { 52, 4, 23, IDOR
, TRUE
}, // 5G, ch 52~64
872 { 100, 11, 30, BOTH
, TRUE
}, // 5G, ch 100~140
881 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~11
886 { // United_Arab_Emirates
890 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~11
899 { 1, 11, 30, BOTH
, FALSE
}, // 2.4 G, ch 1~11
900 { 36, 4, 17, IDOR
, FALSE
}, // 5G, ch 52~64
901 { 52, 4, 24, BOTH
, TRUE
}, // 5G, ch 52~64
902 { 100, 11, 30, BOTH
, TRUE
}, // 5G, ch 100~140
903 { 149, 5, 30, BOTH
, FALSE
}, // 5G, ch 149~165
912 { 1, 13, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~11
913 { 149, 4, 27, BOTH
, FALSE
}, // 5G, ch 149~161
922 { 1, 11, 20, BOTH
, FALSE
}, // 2.4 G, ch 1~11
923 { 36, 4, 20, BOTH
, FALSE
}, // 5G, ch 52~64
924 { 52, 4, 20, BOTH
, FALSE
}, // 5G, ch 52~64
925 { 100, 11, 20, BOTH
, FALSE
}, // 5G, ch 100~140
926 { 149, 5, 20, BOTH
, FALSE
}, // 5G, ch 149~165
932 static inline PCH_REGION
GetChRegion(
936 PCH_REGION pChRegion
= NULL
;
938 while (strcmp(ChRegion
[loop
].CountReg
, "") != 0)
940 if (strncmp(ChRegion
[loop
].CountReg
, CntryCode
, 2) == 0)
942 pChRegion
= &ChRegion
[loop
];
948 if (pChRegion
== NULL
)
949 pChRegion
= &ChRegion
[loop
];
953 static inline VOID
ChBandCheck(
960 #ifdef DOT11_N_SUPPORT
962 #endif // DOT11_N_SUPPORT //
965 case PHY_11ABG_MIXED
:
966 #ifdef DOT11_N_SUPPORT
967 case PHY_11AGN_MIXED
:
968 case PHY_11ABGN_MIXED
:
969 #endif // DOT11_N_SUPPORT //
970 *pChType
= BAND_BOTH
;
979 static inline UCHAR
FillChList(
980 IN PRTMP_ADAPTER pAd
,
989 for (i
= 0; i
< pChDesp
->NumOfCh
; i
++)
991 channel
= pChDesp
->FirstChannel
+ i
* increment
;
992 for (l
=0; l
<MAX_NUM_OF_CHANNELS
; l
++)
994 if (channel
== pAd
->TxPower
[l
].Channel
)
996 pAd
->ChannelList
[j
].Power
= pAd
->TxPower
[l
].Power
;
997 pAd
->ChannelList
[j
].Power2
= pAd
->TxPower
[l
].Power2
;
1001 if (l
== MAX_NUM_OF_CHANNELS
)
1004 pAd
->ChannelList
[j
].Channel
= pChDesp
->FirstChannel
+ i
* increment
;
1005 pAd
->ChannelList
[j
].MaxTxPwr
= pChDesp
->MaxTxPwr
;
1006 pAd
->ChannelList
[j
].DfsReq
= pChDesp
->DfsReq
;
1009 pAd
->ChannelListNum
= j
;
1014 static inline VOID
CreateChList(
1015 IN PRTMP_ADAPTER pAd
,
1016 IN PCH_REGION pChRegion
,
1025 if (pChRegion
== NULL
)
1028 ChBandCheck(pAd
->CommonCfg
.PhyMode
, &ChType
);
1030 for (i
=0; i
<10; i
++)
1032 pChDesp
= &pChRegion
->ChDesp
[i
];
1033 if (pChDesp
->FirstChannel
== 0)
1036 if (ChType
== BAND_5G
)
1038 if (pChDesp
->FirstChannel
<= 14)
1041 else if (ChType
== BAND_24G
)
1043 if (pChDesp
->FirstChannel
> 14)
1047 if ((pChDesp
->Geography
== BOTH
)
1048 || (pChDesp
->Geography
== Geography
))
1050 if (pChDesp
->FirstChannel
> 14)
1054 offset
= FillChList(pAd
, pChDesp
, offset
, increment
);
1059 static inline VOID
BuildChannelListEx(
1060 IN PRTMP_ADAPTER pAd
)
1064 pChReg
= GetChRegion(pAd
->CommonCfg
.CountryCode
);
1065 CreateChList(pAd
, pChReg
, pAd
->CommonCfg
.Geography
);
1068 static inline VOID
BuildBeaconChList(
1069 IN PRTMP_ADAPTER pAd
,
1075 PCH_REGION pChRegion
;
1079 pChRegion
= GetChRegion(pAd
->CommonCfg
.CountryCode
);
1081 if (pChRegion
== NULL
)
1084 ChBandCheck(pAd
->CommonCfg
.PhyMode
, &ChType
);
1087 for (i
=0; i
<10; i
++)
1089 pChDesp
= &pChRegion
->ChDesp
[i
];
1090 if (pChDesp
->FirstChannel
== 0)
1093 if (ChType
== BAND_5G
)
1095 if (pChDesp
->FirstChannel
<= 14)
1098 else if (ChType
== BAND_24G
)
1100 if (pChDesp
->FirstChannel
> 14)
1104 if ((pChDesp
->Geography
== BOTH
)
1105 || (pChDesp
->Geography
== pAd
->CommonCfg
.Geography
))
1107 MakeOutgoingFrame(pBuf
+ *pBufLen
, &TmpLen
,
1108 1, &pChDesp
->FirstChannel
,
1109 1, &pChDesp
->NumOfCh
,
1110 1, &pChDesp
->MaxTxPwr
,
1118 #ifdef DOT11_N_SUPPORT
1119 static inline BOOLEAN
IsValidChannel(
1120 IN PRTMP_ADAPTER pAd
,
1126 for (i
= 0; i
< pAd
->ChannelListNum
; i
++)
1128 if (pAd
->ChannelList
[i
].Channel
== channel
)
1132 if (i
== pAd
->ChannelListNum
)
1139 static inline UCHAR
GetExtCh(
1145 if (Direction
== EXTCHA_ABOVE
)
1146 ExtCh
= Channel
+ 4;
1148 ExtCh
= (Channel
- 4) > 0 ? (Channel
- 4) : 0;
1154 static inline VOID
N_ChannelCheck(
1155 IN PRTMP_ADAPTER pAd
)
1157 //UCHAR ChannelNum = pAd->ChannelListNum;
1158 UCHAR Channel
= pAd
->CommonCfg
.Channel
;
1160 if ((pAd
->CommonCfg
.PhyMode
>= PHY_11ABGN_MIXED
) && (pAd
->CommonCfg
.RegTransmitSetting
.field
.BW
== BW_40
))
1164 if ((Channel
== 36) || (Channel
== 44) || (Channel
== 52) || (Channel
== 60) || (Channel
== 100) || (Channel
== 108) ||
1165 (Channel
== 116) || (Channel
== 124) || (Channel
== 132) || (Channel
== 149) || (Channel
== 157))
1167 pAd
->CommonCfg
.RegTransmitSetting
.field
.EXTCHA
= EXTCHA_ABOVE
;
1169 else if ((Channel
== 40) || (Channel
== 48) || (Channel
== 56) || (Channel
== 64) || (Channel
== 104) || (Channel
== 112) ||
1170 (Channel
== 120) || (Channel
== 128) || (Channel
== 136) || (Channel
== 153) || (Channel
== 161))
1172 pAd
->CommonCfg
.RegTransmitSetting
.field
.EXTCHA
= EXTCHA_BELOW
;
1176 pAd
->CommonCfg
.RegTransmitSetting
.field
.BW
= BW_20
;
1184 UCHAR Dir
= pAd
->CommonCfg
.RegTransmitSetting
.field
.EXTCHA
;
1185 ExtCh
= GetExtCh(Channel
, Dir
);
1186 if (IsValidChannel(pAd
, ExtCh
))
1189 Dir
= (Dir
== EXTCHA_ABOVE
) ? EXTCHA_BELOW
: EXTCHA_ABOVE
;
1190 ExtCh
= GetExtCh(Channel
, Dir
);
1191 if (IsValidChannel(pAd
, ExtCh
))
1193 pAd
->CommonCfg
.RegTransmitSetting
.field
.EXTCHA
= Dir
;
1196 pAd
->CommonCfg
.RegTransmitSetting
.field
.BW
= BW_20
;
1201 pAd
->CommonCfg
.RegTransmitSetting
.field
.BW
= BW_20
;
1202 //pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_NONE; // We didn't set the ExtCh as NONE due to it'll set in RTMPSetHT()
1205 switch (pAd
->CommonCfg
.CountryRegion
& 0x7f)
1207 case REGION_0_BG_BAND
: // 1 -11
1208 case REGION_1_BG_BAND
: // 1 - 13
1209 case REGION_5_BG_BAND
: // 1 - 14
1212 pAd
->CommonCfg
.RegTransmitSetting
.field
.EXTCHA
= EXTCHA_ABOVE
;
1214 else if (Channel
>= 8)
1216 if ((ChannelNum
- Channel
) < 4)
1217 pAd
->CommonCfg
.RegTransmitSetting
.field
.EXTCHA
= EXTCHA_BELOW
;
1221 case REGION_2_BG_BAND
: // 10 - 11
1222 case REGION_3_BG_BAND
: // 10 - 13
1223 case REGION_4_BG_BAND
: // 14
1224 pAd
->CommonCfg
.RegTransmitSetting
.field
.BW
= BW_20
;
1227 case REGION_6_BG_BAND
: // 3 - 9
1229 pAd
->CommonCfg
.RegTransmitSetting
.field
.EXTCHA
= EXTCHA_ABOVE
;
1230 else if (Channel
== 6)
1231 pAd
->CommonCfg
.RegTransmitSetting
.field
.BW
= BW_20
;
1232 else if (Channel
>= 7)
1233 pAd
->CommonCfg
.RegTransmitSetting
.field
.EXTCHA
= EXTCHA_BELOW
;
1236 case REGION_7_BG_BAND
: // 5 - 13
1238 pAd
->CommonCfg
.RegTransmitSetting
.field
.EXTCHA
= EXTCHA_ABOVE
;
1239 else if (Channel
>= 10)
1240 pAd
->CommonCfg
.RegTransmitSetting
.field
.EXTCHA
= EXTCHA_BELOW
;
1243 default: // Error. should never happen
1254 static inline VOID
N_SetCenCh(
1255 IN PRTMP_ADAPTER pAd
)
1257 if (pAd
->CommonCfg
.RegTransmitSetting
.field
.BW
== BW_40
)
1259 if (pAd
->CommonCfg
.RegTransmitSetting
.field
.EXTCHA
== EXTCHA_ABOVE
)
1261 pAd
->CommonCfg
.CentralChannel
= pAd
->CommonCfg
.Channel
+ 2;
1265 if (pAd
->CommonCfg
.Channel
== 14)
1266 pAd
->CommonCfg
.CentralChannel
= pAd
->CommonCfg
.Channel
- 1;
1268 pAd
->CommonCfg
.CentralChannel
= pAd
->CommonCfg
.Channel
- 2;
1273 pAd
->CommonCfg
.CentralChannel
= pAd
->CommonCfg
.Channel
;
1276 #endif // DOT11_N_SUPPORT //
1279 static inline UINT8
GetCuntryMaxTxPwr(
1280 IN PRTMP_ADAPTER pAd
,
1284 for (i
= 0; i
< pAd
->ChannelListNum
; i
++)
1286 if (pAd
->ChannelList
[i
].Channel
== channel
)
1290 if (i
== pAd
->ChannelListNum
)
1293 return pAd
->ChannelList
[i
].MaxTxPwr
;
1295 #endif // __CHLIST_H__