Merge branch 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / drivers / staging / rt2860 / common / rt_channel.c
1 /*
2  *************************************************************************
3  * Ralink Tech Inc.
4  * 5F., No.36, Taiyuan St., Jhubei City,
5  * Hsinchu County 302,
6  * Taiwan, R.O.C.
7  *
8  * (c) Copyright 2002-2007, Ralink Technology, Inc.
9  *
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.                                   *
14  *                                                                       *
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.                          *
19  *                                                                       *
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.             *
24  *                                                                       *
25  *************************************************************************
26 */
27 #include "../rt_config.h"
28
29 struct rt_ch_freq_map CH_HZ_ID_MAP[] = {
30         {1, 2412}
31         ,
32         {2, 2417}
33         ,
34         {3, 2422}
35         ,
36         {4, 2427}
37         ,
38         {5, 2432}
39         ,
40         {6, 2437}
41         ,
42         {7, 2442}
43         ,
44         {8, 2447}
45         ,
46         {9, 2452}
47         ,
48         {10, 2457}
49         ,
50         {11, 2462}
51         ,
52         {12, 2467}
53         ,
54         {13, 2472}
55         ,
56         {14, 2484}
57         ,
58
59         /*  UNII */
60         {36, 5180}
61         ,
62         {40, 5200}
63         ,
64         {44, 5220}
65         ,
66         {48, 5240}
67         ,
68         {52, 5260}
69         ,
70         {56, 5280}
71         ,
72         {60, 5300}
73         ,
74         {64, 5320}
75         ,
76         {149, 5745}
77         ,
78         {153, 5765}
79         ,
80         {157, 5785}
81         ,
82         {161, 5805}
83         ,
84         {165, 5825}
85         ,
86         {167, 5835}
87         ,
88         {169, 5845}
89         ,
90         {171, 5855}
91         ,
92         {173, 5865}
93         ,
94
95         /* HiperLAN2 */
96         {100, 5500}
97         ,
98         {104, 5520}
99         ,
100         {108, 5540}
101         ,
102         {112, 5560}
103         ,
104         {116, 5580}
105         ,
106         {120, 5600}
107         ,
108         {124, 5620}
109         ,
110         {128, 5640}
111         ,
112         {132, 5660}
113         ,
114         {136, 5680}
115         ,
116         {140, 5700}
117         ,
118
119         /* Japan MMAC */
120         {34, 5170}
121         ,
122         {38, 5190}
123         ,
124         {42, 5210}
125         ,
126         {46, 5230}
127         ,
128
129         /*  Japan */
130         {184, 4920}
131         ,
132         {188, 4940}
133         ,
134         {192, 4960}
135         ,
136         {196, 4980}
137         ,
138
139         {208, 5040}
140         ,                       /* Japan, means J08 */
141         {212, 5060}
142         ,                       /* Japan, means J12 */
143         {216, 5080}
144         ,                       /* Japan, means J16 */
145 };
146
147 int CH_HZ_ID_MAP_NUM = (sizeof(CH_HZ_ID_MAP) / sizeof(struct rt_ch_freq_map));
148
149 struct rt_ch_region ChRegion[] = {
150         {                       /* Antigua and Berbuda */
151          "AG",
152          CE,
153          {
154           {1, 13, 20, BOTH, FALSE}
155           ,                     /* 2.4 G, ch 1~13 */
156           {36, 4, 23, BOTH, FALSE}
157           ,                     /* 5G, ch 36~48 */
158           {52, 4, 23, BOTH, FALSE}
159           ,                     /* 5G, ch 52~64 */
160           {100, 11, 30, BOTH, FALSE}
161           ,                     /* 5G, ch 100~140 */
162           {0}
163           ,                     /* end */
164           }
165          }
166         ,
167
168         {                       /* Argentina */
169          "AR",
170          CE,
171          {
172           {1, 13, 20, BOTH, FALSE}
173           ,                     /* 2.4 G, ch 1~13 */
174           {52, 4, 24, BOTH, FALSE}
175           ,                     /* 5G, ch 52~64 */
176           {149, 4, 30, BOTH, FALSE}
177           ,                     /* 5G, ch 149~161 */
178           {0}
179           ,                     /* end */
180           }
181          }
182         ,
183
184         {                       /* Aruba */
185          "AW",
186          CE,
187          {
188           {1, 13, 20, BOTH, FALSE}
189           ,                     /* 2.4 G, ch 1~13 */
190           {36, 4, 23, BOTH, FALSE}
191           ,                     /* 5G, ch 36~48 */
192           {52, 4, 23, BOTH, FALSE}
193           ,                     /* 5G, ch 52~64 */
194           {100, 11, 30, BOTH, FALSE}
195           ,                     /* 5G, ch 100~140 */
196           {0}
197           ,                     /* end */
198           }
199          }
200         ,
201
202         {                       /* Australia */
203          "AU",
204          CE,
205          {
206           {1, 13, 20, BOTH, FALSE}
207           ,                     /* 2.4 G, ch 1~13 */
208           {36, 4, 23, BOTH, FALSE}
209           ,                     /* 5G, ch 36~48 */
210           {52, 4, 24, BOTH, FALSE}
211           ,                     /* 5G, ch 52~64 */
212           {149, 5, 30, BOTH, FALSE}
213           ,                     /* 5G, ch 149~165 */
214           {0}
215           ,                     /* end */
216           }
217          }
218         ,
219
220         {                       /* Austria */
221          "AT",
222          CE,
223          {
224           {1, 13, 20, BOTH, FALSE}
225           ,                     /* 2.4 G, ch 1~13 */
226           {36, 4, 23, IDOR, TRUE}
227           ,                     /* 5G, ch 36~48 */
228           {52, 4, 23, IDOR, TRUE}
229           ,                     /* 5G, ch 52~64 */
230           {100, 11, 30, BOTH, TRUE}
231           ,                     /* 5G, ch 100~140 */
232           {0}
233           ,                     /* end */
234           }
235          }
236         ,
237
238         {                       /* Bahamas */
239          "BS",
240          CE,
241          {
242           {1, 13, 20, BOTH, FALSE}
243           ,                     /* 2.4 G, ch 1~13 */
244           {36, 4, 23, BOTH, FALSE}
245           ,                     /* 5G, ch 36~48 */
246           {52, 4, 24, BOTH, FALSE}
247           ,                     /* 5G, ch 52~64 */
248           {149, 5, 30, BOTH, FALSE}
249           ,                     /* 5G, ch 149~165 */
250           {0}
251           ,                     /* end */
252           }
253          }
254         ,
255
256         {                       /* Barbados */
257          "BB",
258          CE,
259          {
260           {1, 13, 20, BOTH, FALSE}
261           ,                     /* 2.4 G, ch 1~13 */
262           {36, 4, 23, BOTH, FALSE}
263           ,                     /* 5G, ch 36~48 */
264           {52, 4, 24, BOTH, FALSE}
265           ,                     /* 5G, ch 52~64 */
266           {100, 11, 30, BOTH, FALSE}
267           ,                     /* 5G, ch 100~140 */
268           {0}
269           ,                     /* end */
270           }
271          }
272         ,
273
274         {                       /* Bermuda */
275          "BM",
276          CE,
277          {
278           {1, 13, 20, BOTH, FALSE}
279           ,                     /* 2.4 G, ch 1~13 */
280           {36, 4, 23, BOTH, FALSE}
281           ,                     /* 5G, ch 36~48 */
282           {52, 4, 24, BOTH, FALSE}
283           ,                     /* 5G, ch 52~64 */
284           {100, 11, 30, BOTH, FALSE}
285           ,                     /* 5G, ch 100~140 */
286           {0}
287           ,                     /* end */
288           }
289          }
290         ,
291
292         {                       /* Brazil */
293          "BR",
294          CE,
295          {
296           {1, 13, 20, BOTH, FALSE}
297           ,                     /* 2.4 G, ch 1~13 */
298           {36, 4, 23, BOTH, FALSE}
299           ,                     /* 5G, ch 36~48 */
300           {52, 4, 24, BOTH, FALSE}
301           ,                     /* 5G, ch 52~64 */
302           {100, 11, 24, BOTH, FALSE}
303           ,                     /* 5G, ch 100~140 */
304           {149, 5, 30, BOTH, FALSE}
305           ,                     /* 5G, ch 100~140 */
306           {0}
307           ,                     /* end */
308           }
309          }
310         ,
311
312         {                       /* Belgium */
313          "BE",
314          CE,
315          {
316           {1, 13, 20, BOTH, FALSE}
317           ,                     /* 2.4 G, ch 1~13 */
318           {36, 4, 18, IDOR, FALSE}
319           ,                     /* 5G, ch 36~48 */
320           {52, 4, 18, IDOR, FALSE}
321           ,                     /* 5G, ch 52~64 */
322           {0}
323           ,                     /* end */
324           }
325          }
326         ,
327
328         {                       /* Bulgaria */
329          "BG",
330          CE,
331          {
332           {1, 13, 20, BOTH, FALSE}
333           ,                     /* 2.4 G, ch 1~13 */
334           {36, 4, 23, IDOR, FALSE}
335           ,                     /* 5G, ch 36~48 */
336           {52, 4, 23, IDOR, TRUE}
337           ,                     /* 5G, ch 52~64 */
338           {100, 11, 30, ODOR, TRUE}
339           ,                     /* 5G, ch 100~140 */
340           {0}
341           ,                     /* end */
342           }
343          }
344         ,
345
346         {                       /* Canada */
347          "CA",
348          CE,
349          {
350           {1, 13, 20, BOTH, FALSE}
351           ,                     /* 2.4 G, ch 1~13 */
352           {36, 4, 23, BOTH, FALSE}
353           ,                     /* 5G, ch 36~48 */
354           {52, 4, 23, BOTH, FALSE}
355           ,                     /* 5G, ch 52~64 */
356           {149, 5, 30, BOTH, FALSE}
357           ,                     /* 5G, ch 149~165 */
358           {0}
359           ,                     /* end */
360           }
361          }
362         ,
363
364         {                       /* Cayman IsLands */
365          "KY",
366          CE,
367          {
368           {1, 13, 20, BOTH, FALSE}
369           ,                     /* 2.4 G, ch 1~13 */
370           {36, 4, 23, BOTH, FALSE}
371           ,                     /* 5G, ch 36~48 */
372           {52, 4, 24, BOTH, FALSE}
373           ,                     /* 5G, ch 52~64 */
374           {100, 11, 30, BOTH, FALSE}
375           ,                     /* 5G, ch 100~140 */
376           {0}
377           ,                     /* end */
378           }
379          }
380         ,
381
382         {                       /* Chile */
383          "CL",
384          CE,
385          {
386           {1, 13, 20, BOTH, FALSE}
387           ,                     /* 2.4 G, ch 1~13 */
388           {36, 4, 20, BOTH, FALSE}
389           ,                     /* 5G, ch 36~48 */
390           {52, 4, 20, BOTH, FALSE}
391           ,                     /* 5G, ch 52~64 */
392           {149, 5, 20, BOTH, FALSE}
393           ,                     /* 5G, ch 149~165 */
394           {0}
395           ,                     /* end */
396           }
397          }
398         ,
399
400         {                       /* China */
401          "CN",
402          CE,
403          {
404           {1, 13, 20, BOTH, FALSE}
405           ,                     /* 2.4 G, ch 1~13 */
406           {149, 4, 27, BOTH, FALSE}
407           ,                     /* 5G, ch 149~161 */
408           {0}
409           ,                     /* end */
410           }
411          }
412         ,
413
414         {                       /* Colombia */
415          "CO",
416          CE,
417          {
418           {1, 13, 20, BOTH, FALSE}
419           ,                     /* 2.4 G, ch 1~13 */
420           {36, 4, 17, BOTH, FALSE}
421           ,                     /* 5G, ch 36~48 */
422           {52, 4, 24, BOTH, FALSE}
423           ,                     /* 5G, ch 52~64 */
424           {100, 11, 30, BOTH, FALSE}
425           ,                     /* 5G, ch 100~140 */
426           {149, 5, 30, BOTH, FALSE}
427           ,                     /* 5G, ch 149~165 */
428           {0}
429           ,                     /* end */
430           }
431          }
432         ,
433
434         {                       /* Costa Rica */
435          "CR",
436          CE,
437          {
438           {1, 13, 20, BOTH, FALSE}
439           ,                     /* 2.4 G, ch 1~13 */
440           {36, 4, 17, BOTH, FALSE}
441           ,                     /* 5G, ch 36~48 */
442           {52, 4, 24, BOTH, FALSE}
443           ,                     /* 5G, ch 52~64 */
444           {149, 4, 30, BOTH, FALSE}
445           ,                     /* 5G, ch 149~161 */
446           {0}
447           ,                     /* end */
448           }
449          }
450         ,
451
452         {                       /* Cyprus */
453          "CY",
454          CE,
455          {
456           {1, 13, 20, BOTH, FALSE}
457           ,                     /* 2.4 G, ch 1~13 */
458           {36, 4, 23, IDOR, FALSE}
459           ,                     /* 5G, ch 36~48 */
460           {52, 4, 24, IDOR, TRUE}
461           ,                     /* 5G, ch 52~64 */
462           {100, 11, 30, BOTH, TRUE}
463           ,                     /* 5G, ch 100~140 */
464           {0}
465           ,                     /* end */
466           }
467          }
468         ,
469
470         {                       /* Czech_Republic */
471          "CZ",
472          CE,
473          {
474           {1, 13, 20, BOTH, FALSE}
475           ,                     /* 2.4 G, ch 1~13 */
476           {36, 4, 23, IDOR, FALSE}
477           ,                     /* 5G, ch 36~48 */
478           {52, 4, 23, IDOR, TRUE}
479           ,                     /* 5G, ch 52~64 */
480           {0}
481           ,                     /* end */
482           }
483          }
484         ,
485
486         {                       /* Denmark */
487          "DK",
488          CE,
489          {
490           {1, 13, 20, BOTH, FALSE}
491           ,                     /* 2.4 G, ch 1~13 */
492           {36, 4, 23, IDOR, FALSE}
493           ,                     /* 5G, ch 36~48 */
494           {52, 4, 23, IDOR, TRUE}
495           ,                     /* 5G, ch 52~64 */
496           {100, 11, 30, BOTH, TRUE}
497           ,                     /* 5G, ch 100~140 */
498           {0}
499           ,                     /* end */
500           }
501          }
502         ,
503
504         {                       /* Dominican Republic */
505          "DO",
506          CE,
507          {
508           {1, 0, 20, BOTH, FALSE}
509           ,                     /* 2.4 G, ch 0 */
510           {149, 4, 20, BOTH, FALSE}
511           ,                     /* 5G, ch 149~161 */
512           {0}
513           ,                     /* end */
514           }
515          }
516         ,
517
518         {                       /* Equador */
519          "EC",
520          CE,
521          {
522           {1, 13, 20, BOTH, FALSE}
523           ,                     /* 2.4 G, ch 1~13 */
524           {100, 11, 27, BOTH, FALSE}
525           ,                     /* 5G, ch 100~140 */
526           {0}
527           ,                     /* end */
528           }
529          }
530         ,
531
532         {                       /* El Salvador */
533          "SV",
534          CE,
535          {
536           {1, 13, 20, BOTH, FALSE}
537           ,                     /* 2.4 G, ch 1~13 */
538           {36, 4, 23, IDOR, FALSE}
539           ,                     /* 5G, ch 36~48 */
540           {52, 4, 30, BOTH, TRUE}
541           ,                     /* 5G, ch 52~64 */
542           {149, 4, 36, BOTH, TRUE}
543           ,                     /* 5G, ch 149~165 */
544           {0}
545           ,                     /* end */
546           }
547          }
548         ,
549
550         {                       /* Finland */
551          "FI",
552          CE,
553          {
554           {1, 13, 20, BOTH, FALSE}
555           ,                     /* 2.4 G, ch 1~13 */
556           {36, 4, 23, IDOR, FALSE}
557           ,                     /* 5G, ch 36~48 */
558           {52, 4, 23, IDOR, TRUE}
559           ,                     /* 5G, ch 52~64 */
560           {100, 11, 30, BOTH, TRUE}
561           ,                     /* 5G, ch 100~140 */
562           {0}
563           ,                     /* end */
564           }
565          }
566         ,
567
568         {                       /* France */
569          "FR",
570          CE,
571          {
572           {1, 13, 20, BOTH, FALSE}
573           ,                     /* 2.4 G, ch 1~13 */
574           {36, 4, 23, IDOR, FALSE}
575           ,                     /* 5G, ch 36~48 */
576           {52, 4, 23, IDOR, TRUE}
577           ,                     /* 5G, ch 52~64 */
578           {0}
579           ,                     /* end */
580           }
581          }
582         ,
583
584         {                       /* Germany */
585          "DE",
586          CE,
587          {
588           {1, 13, 20, BOTH, FALSE}
589           ,                     /* 2.4 G, ch 1~13 */
590           {36, 4, 23, IDOR, FALSE}
591           ,                     /* 5G, ch 36~48 */
592           {52, 4, 23, IDOR, TRUE}
593           ,                     /* 5G, ch 52~64 */
594           {100, 11, 30, BOTH, TRUE}
595           ,                     /* 5G, ch 100~140 */
596           {0}
597           ,                     /* end */
598           }
599          }
600         ,
601
602         {                       /* Greece */
603          "GR",
604          CE,
605          {
606           {1, 13, 20, BOTH, FALSE}
607           ,                     /* 2.4 G, ch 1~13 */
608           {36, 4, 23, IDOR, FALSE}
609           ,                     /* 5G, ch 36~48 */
610           {52, 4, 23, IDOR, TRUE}
611           ,                     /* 5G, ch 52~64 */
612           {100, 11, 30, ODOR, TRUE}
613           ,                     /* 5G, ch 100~140 */
614           {0}
615           ,                     /* end */
616           }
617          }
618         ,
619
620         {                       /* Guam */
621          "GU",
622          CE,
623          {
624           {1, 11, 20, BOTH, FALSE}
625           ,                     /* 2.4 G, ch 1~11 */
626           {36, 4, 17, BOTH, FALSE}
627           ,                     /* 5G, ch 36~48 */
628           {52, 4, 24, BOTH, FALSE}
629           ,                     /* 5G, ch 52~64 */
630           {100, 11, 30, BOTH, FALSE}
631           ,                     /* 5G, ch 100~140 */
632           {149, 5, 30, BOTH, FALSE}
633           ,                     /* 5G, ch 149~165 */
634           {0}
635           ,                     /* end */
636           }
637          }
638         ,
639
640         {                       /* Guatemala */
641          "GT",
642          CE,
643          {
644           {1, 13, 20, BOTH, FALSE}
645           ,                     /* 2.4 G, ch 1~13 */
646           {36, 4, 17, BOTH, FALSE}
647           ,                     /* 5G, ch 36~48 */
648           {52, 4, 24, BOTH, FALSE}
649           ,                     /* 5G, ch 52~64 */
650           {149, 4, 30, BOTH, FALSE}
651           ,                     /* 5G, ch 149~161 */
652           {0}
653           ,                     /* end */
654           }
655          }
656         ,
657
658         {                       /* Haiti */
659          "HT",
660          CE,
661          {
662           {1, 13, 20, BOTH, FALSE}
663           ,                     /* 2.4 G, ch 1~13 */
664           {36, 4, 17, BOTH, FALSE}
665           ,                     /* 5G, ch 36~48 */
666           {52, 4, 24, BOTH, FALSE}
667           ,                     /* 5G, ch 52~64 */
668           {149, 4, 30, BOTH, FALSE}
669           ,                     /* 5G, ch 149~161 */
670           {0}
671           ,                     /* end */
672           }
673          }
674         ,
675
676         {                       /* Honduras */
677          "HN",
678          CE,
679          {
680           {1, 13, 20, BOTH, FALSE}
681           ,                     /* 2.4 G, ch 1~13 */
682           {149, 4, 27, BOTH, FALSE}
683           ,                     /* 5G, ch 149~161 */
684           {0}
685           ,                     /* end */
686           }
687          }
688         ,
689
690         {                       /* Hong Kong */
691          "HK",
692          CE,
693          {
694           {1, 13, 20, BOTH, FALSE}
695           ,                     /* 2.4 G, ch 1~13 */
696           {36, 4, 23, IDOR, FALSE}
697           ,                     /* 5G, ch 36~48 */
698           {52, 4, 23, IDOR, FALSE}
699           ,                     /* 5G, ch 52~64 */
700           {149, 4, 30, BOTH, FALSE}
701           ,                     /* 5G, ch 149~161 */
702           {0}
703           ,                     /* end */
704           }
705          }
706         ,
707
708         {                       /* Hungary */
709          "HU",
710          CE,
711          {
712           {1, 13, 20, BOTH, FALSE}
713           ,                     /* 2.4 G, ch 1~13 */
714           {36, 4, 23, IDOR, FALSE}
715           ,                     /* 5G, ch 36~48 */
716           {52, 4, 23, IDOR, TRUE}
717           ,                     /* 5G, ch 52~64 */
718           {0}
719           ,                     /* end */
720           }
721          }
722         ,
723
724         {                       /* Iceland */
725          "IS",
726          CE,
727          {
728           {1, 13, 20, BOTH, FALSE}
729           ,                     /* 2.4 G, ch 1~13 */
730           {36, 4, 23, IDOR, FALSE}
731           ,                     /* 5G, ch 36~48 */
732           {52, 4, 23, IDOR, TRUE}
733           ,                     /* 5G, ch 52~64 */
734           {100, 11, 30, BOTH, TRUE}
735           ,                     /* 5G, ch 100~140 */
736           {0}
737           ,                     /* end */
738           }
739          }
740         ,
741
742         {                       /* India */
743          "IN",
744          CE,
745          {
746           {1, 13, 20, BOTH, FALSE}
747           ,                     /* 2.4 G, ch 1~13 */
748           {149, 4, 24, IDOR, FALSE}
749           ,                     /* 5G, ch 149~161 */
750           {0}
751           ,                     /* end */
752           }
753          }
754         ,
755
756         {                       /* Indonesia */
757          "ID",
758          CE,
759          {
760           {1, 13, 20, BOTH, FALSE}
761           ,                     /* 2.4 G, ch 1~13 */
762           {149, 4, 27, BOTH, FALSE}
763           ,                     /* 5G, ch 149~161 */
764           {0}
765           ,                     /* end */
766           }
767          }
768         ,
769
770         {                       /* Ireland */
771          "IE",
772          CE,
773          {
774           {1, 13, 20, BOTH, FALSE}
775           ,                     /* 2.4 G, ch 1~13 */
776           {36, 4, 23, IDOR, FALSE}
777           ,                     /* 5G, ch 36~48 */
778           {52, 4, 23, IDOR, TRUE}
779           ,                     /* 5G, ch 52~64 */
780           {100, 11, 30, ODOR, TRUE}
781           ,                     /* 5G, ch 100~140 */
782           {0}
783           ,                     /* end */
784           }
785          }
786         ,
787
788         {                       /* Israel */
789          "IL",
790          CE,
791          {
792           {1, 3, 20, IDOR, FALSE}
793           ,                     /* 2.4 G, ch 1~3 */
794           {4, 6, 20, BOTH, FALSE}
795           ,                     /* 2.4 G, ch 4~9 */
796           {10, 4, 20, IDOR, FALSE}
797           ,                     /* 2.4 G, ch 10~13 */
798           {0}
799           ,                     /* end */
800           }
801          }
802         ,
803
804         {                       /* Italy */
805          "IT",
806          CE,
807          {
808           {1, 13, 20, BOTH, FALSE}
809           ,                     /* 2.4 G, ch 1~13 */
810           {36, 4, 23, IDOR, FALSE}
811           ,                     /* 5G, ch 36~48 */
812           {52, 4, 23, IDOR, TRUE}
813           ,                     /* 5G, ch 52~64 */
814           {100, 11, 30, ODOR, TRUE}
815           ,                     /* 5G, ch 100~140 */
816           {0}
817           ,                     /* end */
818           }
819          }
820         ,
821
822         {                       /* Japan */
823          "JP",
824          JAP,
825          {
826           {1, 14, 20, BOTH, FALSE}
827           ,                     /* 2.4 G, ch 1~14 */
828           {36, 4, 23, IDOR, FALSE}
829           ,                     /* 5G, ch 36~48 */
830           {0}
831           ,                     /* end */
832           }
833          }
834         ,
835
836         {                       /* Jordan */
837          "JO",
838          CE,
839          {
840           {1, 13, 20, IDOR, FALSE}
841           ,                     /* 2.4 G, ch 1~13 */
842           {36, 4, 23, IDOR, FALSE}
843           ,                     /* 5G, ch 36~48 */
844           {149, 4, 23, IDOR, FALSE}
845           ,                     /* 5G, ch 149~161 */
846           {0}
847           ,                     /* end */
848           }
849          }
850         ,
851
852         {                       /* Latvia */
853          "LV",
854          CE,
855          {
856           {1, 13, 20, BOTH, FALSE}
857           ,                     /* 2.4 G, ch 1~13 */
858           {36, 4, 23, IDOR, FALSE}
859           ,                     /* 5G, ch 36~48 */
860           {52, 4, 23, IDOR, TRUE}
861           ,                     /* 5G, ch 52~64 */
862           {100, 11, 30, BOTH, TRUE}
863           ,                     /* 5G, ch 100~140 */
864           {0}
865           ,                     /* end */
866           }
867          }
868         ,
869
870         {                       /* Liechtenstein */
871          "LI",
872          CE,
873          {
874           {1, 13, 20, BOTH, FALSE}
875           ,                     /* 2.4 G, ch 1~13 */
876           {52, 4, 23, IDOR, TRUE}
877           ,                     /* 5G, ch 52~64 */
878           {100, 11, 30, BOTH, TRUE}
879           ,                     /* 5G, ch 100~140 */
880           {0}
881           ,                     /* end */
882           }
883          }
884         ,
885
886         {                       /* Lithuania */
887          "LT",
888          CE,
889          {
890           {1, 13, 20, BOTH, FALSE}
891           ,                     /* 2.4 G, ch 1~13 */
892           {36, 4, 23, IDOR, FALSE}
893           ,                     /* 5G, ch 36~48 */
894           {52, 4, 23, IDOR, TRUE}
895           ,                     /* 5G, ch 52~64 */
896           {100, 11, 30, BOTH, TRUE}
897           ,                     /* 5G, ch 100~140 */
898           {0}
899           ,                     /* end */
900           }
901          }
902         ,
903
904         {                       /* Luxemburg */
905          "LU",
906          CE,
907          {
908           {1, 13, 20, BOTH, FALSE}
909           ,                     /* 2.4 G, ch 1~13 */
910           {36, 4, 23, IDOR, FALSE}
911           ,                     /* 5G, ch 36~48 */
912           {52, 4, 23, IDOR, TRUE}
913           ,                     /* 5G, ch 52~64 */
914           {100, 11, 30, BOTH, TRUE}
915           ,                     /* 5G, ch 100~140 */
916           {0}
917           ,                     /* end */
918           }
919          }
920         ,
921
922         {                       /* Malaysia */
923          "MY",
924          CE,
925          {
926           {36, 4, 23, BOTH, FALSE}
927           ,                     /* 5G, ch 36~48 */
928           {52, 4, 23, BOTH, FALSE}
929           ,                     /* 5G, ch 52~64 */
930           {149, 5, 20, BOTH, FALSE}
931           ,                     /* 5G, ch 149~165 */
932           {0}
933           ,                     /* end */
934           }
935          }
936         ,
937
938         {                       /* Malta */
939          "MT",
940          CE,
941          {
942           {1, 13, 20, BOTH, FALSE}
943           ,                     /* 2.4 G, ch 1~13 */
944           {36, 4, 23, IDOR, FALSE}
945           ,                     /* 5G, ch 36~48 */
946           {52, 4, 23, IDOR, TRUE}
947           ,                     /* 5G, ch 52~64 */
948           {100, 11, 30, BOTH, TRUE}
949           ,                     /* 5G, ch 100~140 */
950           {0}
951           ,                     /* end */
952           }
953          }
954         ,
955
956         {                       /* Marocco */
957          "MA",
958          CE,
959          {
960           {1, 13, 20, BOTH, FALSE}
961           ,                     /* 2.4 G, ch 1~13 */
962           {36, 4, 24, IDOR, FALSE}
963           ,                     /* 5G, ch 36~48 */
964           {0}
965           ,                     /* end */
966           }
967          }
968         ,
969
970         {                       /* Mexico */
971          "MX",
972          CE,
973          {
974           {1, 13, 20, BOTH, FALSE}
975           ,                     /* 2.4 G, ch 1~13 */
976           {36, 4, 23, BOTH, FALSE}
977           ,                     /* 5G, ch 36~48 */
978           {52, 4, 24, BOTH, FALSE}
979           ,                     /* 5G, ch 52~64 */
980           {149, 5, 30, IDOR, FALSE}
981           ,                     /* 5G, ch 149~165 */
982           {0}
983           ,                     /* end */
984           }
985          }
986         ,
987
988         {                       /* Netherlands */
989          "NL",
990          CE,
991          {
992           {1, 13, 20, BOTH, FALSE}
993           ,                     /* 2.4 G, ch 1~13 */
994           {36, 4, 23, IDOR, FALSE}
995           ,                     /* 5G, ch 36~48 */
996           {52, 4, 24, IDOR, TRUE}
997           ,                     /* 5G, ch 52~64 */
998           {100, 11, 30, BOTH, TRUE}
999           ,                     /* 5G, ch 100~140 */
1000           {0}
1001           ,                     /* end */
1002           }
1003          }
1004         ,
1005
1006         {                       /* New Zealand */
1007          "NZ",
1008          CE,
1009          {
1010           {1, 13, 20, BOTH, FALSE}
1011           ,                     /* 2.4 G, ch 1~13 */
1012           {36, 4, 24, BOTH, FALSE}
1013           ,                     /* 5G, ch 36~48 */
1014           {52, 4, 24, BOTH, FALSE}
1015           ,                     /* 5G, ch 52~64 */
1016           {149, 4, 30, BOTH, FALSE}
1017           ,                     /* 5G, ch 149~161 */
1018           {0}
1019           ,                     /* end */
1020           }
1021          }
1022         ,
1023
1024         {                       /* Norway */
1025          "NO",
1026          CE,
1027          {
1028           {1, 13, 20, BOTH, FALSE}
1029           ,                     /* 2.4 G, ch 1~13 */
1030           {36, 4, 24, IDOR, FALSE}
1031           ,                     /* 5G, ch 36~48 */
1032           {52, 4, 24, IDOR, TRUE}
1033           ,                     /* 5G, ch 52~64 */
1034           {100, 11, 30, BOTH, TRUE}
1035           ,                     /* 5G, ch 149~161 */
1036           {0}
1037           ,                     /* end */
1038           }
1039          }
1040         ,
1041
1042         {                       /* Peru */
1043          "PE",
1044          CE,
1045          {
1046           {1, 13, 20, BOTH, FALSE}
1047           ,                     /* 2.4 G, ch 1~13 */
1048           {149, 4, 27, BOTH, FALSE}
1049           ,                     /* 5G, ch 149~161 */
1050           {0}
1051           ,                     /* end */
1052           }
1053          }
1054         ,
1055
1056         {                       /* Portugal */
1057          "PT",
1058          CE,
1059          {
1060           {1, 13, 20, BOTH, FALSE}
1061           ,                     /* 2.4 G, ch 1~13 */
1062           {36, 4, 23, IDOR, FALSE}
1063           ,                     /* 5G, ch 36~48 */
1064           {52, 4, 23, IDOR, TRUE}
1065           ,                     /* 5G, ch 52~64 */
1066           {100, 11, 30, BOTH, TRUE}
1067           ,                     /* 5G, ch 100~140 */
1068           {0}
1069           ,                     /* end */
1070           }
1071          }
1072         ,
1073
1074         {                       /* Poland */
1075          "PL",
1076          CE,
1077          {
1078           {1, 13, 20, BOTH, FALSE}
1079           ,                     /* 2.4 G, ch 1~13 */
1080           {36, 4, 23, IDOR, FALSE}
1081           ,                     /* 5G, ch 36~48 */
1082           {52, 4, 23, IDOR, TRUE}
1083           ,                     /* 5G, ch 52~64 */
1084           {100, 11, 30, BOTH, TRUE}
1085           ,                     /* 5G, ch 100~140 */
1086           {0}
1087           ,                     /* end */
1088           }
1089          }
1090         ,
1091
1092         {                       /* Romania */
1093          "RO",
1094          CE,
1095          {
1096           {1, 13, 20, BOTH, FALSE}
1097           ,                     /* 2.4 G, ch 1~13 */
1098           {36, 4, 23, IDOR, FALSE}
1099           ,                     /* 5G, ch 36~48 */
1100           {52, 4, 23, IDOR, TRUE}
1101           ,                     /* 5G, ch 52~64 */
1102           {100, 11, 30, BOTH, TRUE}
1103           ,                     /* 5G, ch 100~140 */
1104           {0}
1105           ,                     /* end */
1106           }
1107          }
1108         ,
1109
1110         {                       /* Russia */
1111          "RU",
1112          CE,
1113          {
1114           {1, 13, 20, BOTH, FALSE}
1115           ,                     /* 2.4 G, ch 1~13 */
1116           {149, 4, 20, IDOR, FALSE}
1117           ,                     /* 5G, ch 149~161 */
1118           {0}
1119           ,                     /* end */
1120           }
1121          }
1122         ,
1123
1124         {                       /* Saudi Arabia */
1125          "SA",
1126          CE,
1127          {
1128           {1, 13, 20, BOTH, FALSE}
1129           ,                     /* 2.4 G, ch 1~13 */
1130           {36, 4, 23, BOTH, FALSE}
1131           ,                     /* 5G, ch 36~48 */
1132           {52, 4, 23, BOTH, FALSE}
1133           ,                     /* 5G, ch 52~64 */
1134           {149, 4, 23, BOTH, FALSE}
1135           ,                     /* 5G, ch 149~161 */
1136           {0}
1137           ,                     /* end */
1138           }
1139          }
1140         ,
1141
1142         {                       /* Serbia_and_Montenegro */
1143          "CS",
1144          CE,
1145          {
1146           {1, 13, 20, BOTH, FALSE}
1147           ,                     /* 2.4 G, ch 1~13 */
1148           {0}
1149           ,                     /* end */
1150           }
1151          }
1152         ,
1153
1154         {                       /* Singapore */
1155          "SG",
1156          CE,
1157          {
1158           {1, 13, 20, BOTH, FALSE}
1159           ,                     /* 2.4 G, ch 1~13 */
1160           {36, 4, 23, BOTH, FALSE}
1161           ,                     /* 5G, ch 36~48 */
1162           {52, 4, 23, BOTH, FALSE}
1163           ,                     /* 5G, ch 52~64 */
1164           {149, 4, 20, BOTH, FALSE}
1165           ,                     /* 5G, ch 149~161 */
1166           {0}
1167           ,                     /* end */
1168           }
1169          }
1170         ,
1171
1172         {                       /* Slovakia */
1173          "SK",
1174          CE,
1175          {
1176           {1, 13, 20, BOTH, FALSE}
1177           ,                     /* 2.4 G, ch 1~13 */
1178           {36, 4, 23, IDOR, FALSE}
1179           ,                     /* 5G, ch 36~48 */
1180           {52, 4, 23, IDOR, TRUE}
1181           ,                     /* 5G, ch 52~64 */
1182           {100, 11, 30, BOTH, TRUE}
1183           ,                     /* 5G, ch 100~140 */
1184           {0}
1185           ,                     /* end */
1186           }
1187          }
1188         ,
1189
1190         {                       /* Slovenia */
1191          "SI",
1192          CE,
1193          {
1194           {1, 13, 20, BOTH, FALSE}
1195           ,                     /* 2.4 G, ch 1~13 */
1196           {36, 4, 23, IDOR, FALSE}
1197           ,                     /* 5G, ch 36~48 */
1198           {52, 4, 23, IDOR, TRUE}
1199           ,                     /* 5G, ch 52~64 */
1200           {0}
1201           ,                     /* end */
1202           }
1203          }
1204         ,
1205
1206         {                       /* South Africa */
1207          "ZA",
1208          CE,
1209          {
1210           {1, 13, 20, BOTH, FALSE}
1211           ,                     /* 2.4 G, ch 1~13 */
1212           {36, 4, 23, BOTH, FALSE}
1213           ,                     /* 5G, ch 36~48 */
1214           {52, 4, 23, IDOR, FALSE}
1215           ,                     /* 5G, ch 52~64 */
1216           {100, 11, 30, BOTH, TRUE}
1217           ,                     /* 5G, ch 100~140 */
1218           {149, 4, 30, BOTH, FALSE}
1219           ,                     /* 5G, ch 149~161 */
1220           {0}
1221           ,                     /* end */
1222           }
1223          }
1224         ,
1225
1226         {                       /* South Korea */
1227          "KR",
1228          CE,
1229          {
1230           {1, 13, 20, BOTH, FALSE}
1231           ,                     /* 2.4 G, ch 1~13 */
1232           {36, 4, 20, BOTH, FALSE}
1233           ,                     /* 5G, ch 36~48 */
1234           {52, 4, 20, BOTH, FALSE}
1235           ,                     /* 5G, ch 52~64 */
1236           {100, 8, 20, BOTH, FALSE}
1237           ,                     /* 5G, ch 100~128 */
1238           {149, 4, 20, BOTH, FALSE}
1239           ,                     /* 5G, ch 149~161 */
1240           {0}
1241           ,                     /* end */
1242           }
1243          }
1244         ,
1245
1246         {                       /* Spain */
1247          "ES",
1248          CE,
1249          {
1250           {1, 13, 20, BOTH, FALSE}
1251           ,                     /* 2.4 G, ch 1~13 */
1252           {36, 4, 17, IDOR, FALSE}
1253           ,                     /* 5G, ch 36~48 */
1254           {52, 4, 23, IDOR, TRUE}
1255           ,                     /* 5G, ch 52~64 */
1256           {100, 11, 30, BOTH, TRUE}
1257           ,                     /* 5G, ch 100~140 */
1258           {0}
1259           ,                     /* end */
1260           }
1261          }
1262         ,
1263
1264         {                       /* Sweden */
1265          "SE",
1266          CE,
1267          {
1268           {1, 13, 20, BOTH, FALSE}
1269           ,                     /* 2.4 G, ch 1~13 */
1270           {36, 4, 23, IDOR, FALSE}
1271           ,                     /* 5G, ch 36~48 */
1272           {52, 4, 23, IDOR, TRUE}
1273           ,                     /* 5G, ch 52~64 */
1274           {100, 11, 30, BOTH, TRUE}
1275           ,                     /* 5G, ch 100~140 */
1276           {0}
1277           ,                     /* end */
1278           }
1279          }
1280         ,
1281
1282         {                       /* Switzerland */
1283          "CH",
1284          CE,
1285          {
1286           {1, 13, 20, BOTH, FALSE}
1287           ,                     /* 2.4 G, ch 1~13 */
1288           {36, 4, 23, IDOR, TRUE}
1289           ,                     /* 5G, ch 36~48 */
1290           {52, 4, 23, IDOR, TRUE}
1291           ,                     /* 5G, ch 52~64 */
1292           {0}
1293           ,                     /* end */
1294           }
1295          }
1296         ,
1297
1298         {                       /* Taiwan */
1299          "TW",
1300          CE,
1301          {
1302           {1, 11, 30, BOTH, FALSE}
1303           ,                     /* 2.4 G, ch 1~11 */
1304           {52, 4, 23, IDOR, FALSE}
1305           ,                     /* 5G, ch 52~64 */
1306           {0}
1307           ,                     /* end */
1308           }
1309          }
1310         ,
1311
1312         {                       /* Turkey */
1313          "TR",
1314          CE,
1315          {
1316           {1, 13, 20, BOTH, FALSE}
1317           ,                     /* 2.4 G, ch 1~11 */
1318           {36, 4, 23, BOTH, FALSE}
1319           ,                     /* 5G, ch 36~48 */
1320           {52, 4, 23, BOTH, FALSE}
1321           ,                     /* 5G, ch 52~64 */
1322           {0}
1323           ,                     /* end */
1324           }
1325          }
1326         ,
1327
1328         {                       /* UK */
1329          "GB",
1330          CE,
1331          {
1332           {1, 13, 20, BOTH, FALSE}
1333           ,                     /* 2.4 G, ch 1~11 */
1334           {36, 4, 23, IDOR, FALSE}
1335           ,                     /* 5G, ch 52~64 */
1336           {52, 4, 23, IDOR, TRUE}
1337           ,                     /* 5G, ch 52~64 */
1338           {100, 11, 30, BOTH, TRUE}
1339           ,                     /* 5G, ch 100~140 */
1340           {0}
1341           ,                     /* end */
1342           }
1343          }
1344         ,
1345
1346         {                       /* Ukraine */
1347          "UA",
1348          CE,
1349          {
1350           {1, 13, 20, BOTH, FALSE}
1351           ,                     /* 2.4 G, ch 1~11 */
1352           {0}
1353           ,                     /* end */
1354           }
1355          }
1356         ,
1357
1358         {                       /* United_Arab_Emirates */
1359          "AE",
1360          CE,
1361          {
1362           {1, 13, 20, BOTH, FALSE}
1363           ,                     /* 2.4 G, ch 1~11 */
1364           {0}
1365           ,                     /* end */
1366           }
1367          }
1368         ,
1369
1370         {                       /* United_States */
1371          "US",
1372          CE,
1373          {
1374           {1, 11, 30, BOTH, FALSE}
1375           ,                     /* 2.4 G, ch 1~11 */
1376           {36, 4, 17, IDOR, FALSE}
1377           ,                     /* 5G, ch 52~64 */
1378           {52, 4, 24, BOTH, TRUE}
1379           ,                     /* 5G, ch 52~64 */
1380           {100, 11, 30, BOTH, TRUE}
1381           ,                     /* 5G, ch 100~140 */
1382           {149, 5, 30, BOTH, FALSE}
1383           ,                     /* 5G, ch 149~165 */
1384           {0}
1385           ,                     /* end */
1386           }
1387          }
1388         ,
1389
1390         {                       /* Venezuela */
1391          "VE",
1392          CE,
1393          {
1394           {1, 13, 20, BOTH, FALSE}
1395           ,                     /* 2.4 G, ch 1~11 */
1396           {149, 4, 27, BOTH, FALSE}
1397           ,                     /* 5G, ch 149~161 */
1398           {0}
1399           ,                     /* end */
1400           }
1401          }
1402         ,
1403
1404         {                       /* Default */
1405          "",
1406          CE,
1407          {
1408           {1, 11, 20, BOTH, FALSE}
1409           ,                     /* 2.4 G, ch 1~11 */
1410           {36, 4, 20, BOTH, FALSE}
1411           ,                     /* 5G, ch 52~64 */
1412           {52, 4, 20, BOTH, FALSE}
1413           ,                     /* 5G, ch 52~64 */
1414           {100, 11, 20, BOTH, FALSE}
1415           ,                     /* 5G, ch 100~140 */
1416           {149, 5, 20, BOTH, FALSE}
1417           ,                     /* 5G, ch 149~165 */
1418           {0}
1419           ,                     /* end */
1420           }
1421          }
1422         ,
1423 };
1424
1425 static struct rt_ch_region *GetChRegion(u8 *CntryCode)
1426 {
1427         int loop = 0;
1428         struct rt_ch_region *pChRegion = NULL;
1429
1430         while (strcmp((char *)ChRegion[loop].CountReg, "") != 0) {
1431                 if (strncmp
1432                     ((char *)ChRegion[loop].CountReg, (char *)CntryCode,
1433                      2) == 0) {
1434                         pChRegion = &ChRegion[loop];
1435                         break;
1436                 }
1437                 loop++;
1438         }
1439
1440         if (pChRegion == NULL)
1441                 pChRegion = &ChRegion[loop];
1442         return pChRegion;
1443 }
1444
1445 static void ChBandCheck(u8 PhyMode, u8 *pChType)
1446 {
1447         switch (PhyMode) {
1448         case PHY_11A:
1449         case PHY_11AN_MIXED:
1450                 *pChType = BAND_5G;
1451                 break;
1452         case PHY_11ABG_MIXED:
1453         case PHY_11AGN_MIXED:
1454         case PHY_11ABGN_MIXED:
1455                 *pChType = BAND_BOTH;
1456                 break;
1457
1458         default:
1459                 *pChType = BAND_24G;
1460                 break;
1461         }
1462 }
1463
1464 static u8 FillChList(struct rt_rtmp_adapter *pAd,
1465                         struct rt_ch_desp *pChDesp,
1466                         u8 Offset, u8 increment)
1467 {
1468         int i, j, l;
1469         u8 channel;
1470
1471         j = Offset;
1472         for (i = 0; i < pChDesp->NumOfCh; i++) {
1473                 channel = pChDesp->FirstChannel + i * increment;
1474                 for (l = 0; l < MAX_NUM_OF_CHANNELS; l++) {
1475                         if (channel == pAd->TxPower[l].Channel) {
1476                                 pAd->ChannelList[j].Power =
1477                                     pAd->TxPower[l].Power;
1478                                 pAd->ChannelList[j].Power2 =
1479                                     pAd->TxPower[l].Power2;
1480                                 break;
1481                         }
1482                 }
1483                 if (l == MAX_NUM_OF_CHANNELS)
1484                         continue;
1485
1486                 pAd->ChannelList[j].Channel =
1487                     pChDesp->FirstChannel + i * increment;
1488                 pAd->ChannelList[j].MaxTxPwr = pChDesp->MaxTxPwr;
1489                 pAd->ChannelList[j].DfsReq = pChDesp->DfsReq;
1490                 j++;
1491         }
1492         pAd->ChannelListNum = j;
1493
1494         return j;
1495 }
1496
1497 static inline void CreateChList(struct rt_rtmp_adapter *pAd,
1498                                 struct rt_ch_region *pChRegion, u8 Geography)
1499 {
1500         int i;
1501         u8 offset = 0;
1502         struct rt_ch_desp *pChDesp;
1503         u8 ChType;
1504         u8 increment;
1505
1506         if (pChRegion == NULL)
1507                 return;
1508
1509         ChBandCheck(pAd->CommonCfg.PhyMode, &ChType);
1510
1511         for (i = 0; i < 10; i++) {
1512                 pChDesp = &pChRegion->ChDesp[i];
1513                 if (pChDesp->FirstChannel == 0)
1514                         break;
1515
1516                 if (ChType == BAND_5G) {
1517                         if (pChDesp->FirstChannel <= 14)
1518                                 continue;
1519                 } else if (ChType == BAND_24G) {
1520                         if (pChDesp->FirstChannel > 14)
1521                                 continue;
1522                 }
1523
1524                 if ((pChDesp->Geography == BOTH)
1525                     || (pChDesp->Geography == Geography)) {
1526                         if (pChDesp->FirstChannel > 14)
1527                                 increment = 4;
1528                         else
1529                                 increment = 1;
1530                         offset = FillChList(pAd, pChDesp, offset, increment);
1531                 }
1532         }
1533 }
1534
1535 void BuildChannelListEx(struct rt_rtmp_adapter *pAd)
1536 {
1537         struct rt_ch_region *pChReg;
1538
1539         pChReg = GetChRegion(pAd->CommonCfg.CountryCode);
1540         CreateChList(pAd, pChReg, pAd->CommonCfg.Geography);
1541 }
1542
1543 void BuildBeaconChList(struct rt_rtmp_adapter *pAd,
1544                        u8 *pBuf, unsigned long *pBufLen)
1545 {
1546         int i;
1547         unsigned long TmpLen;
1548         struct rt_ch_region *pChRegion;
1549         struct rt_ch_desp *pChDesp;
1550         u8 ChType;
1551
1552         pChRegion = GetChRegion(pAd->CommonCfg.CountryCode);
1553
1554         if (pChRegion == NULL)
1555                 return;
1556
1557         ChBandCheck(pAd->CommonCfg.PhyMode, &ChType);
1558         *pBufLen = 0;
1559
1560         for (i = 0; i < 10; i++) {
1561                 pChDesp = &pChRegion->ChDesp[i];
1562                 if (pChDesp->FirstChannel == 0)
1563                         break;
1564
1565                 if (ChType == BAND_5G) {
1566                         if (pChDesp->FirstChannel <= 14)
1567                                 continue;
1568                 } else if (ChType == BAND_24G) {
1569                         if (pChDesp->FirstChannel > 14)
1570                                 continue;
1571                 }
1572
1573                 if ((pChDesp->Geography == BOTH)
1574                     || (pChDesp->Geography == pAd->CommonCfg.Geography)) {
1575                         MakeOutgoingFrame(pBuf + *pBufLen, &TmpLen,
1576                                           1, &pChDesp->FirstChannel,
1577                                           1, &pChDesp->NumOfCh,
1578                                           1, &pChDesp->MaxTxPwr, END_OF_ARGS);
1579                         *pBufLen += TmpLen;
1580                 }
1581         }
1582 }
1583
1584 static BOOLEAN IsValidChannel(struct rt_rtmp_adapter *pAd, u8 channel)
1585 {
1586         int i;
1587
1588         for (i = 0; i < pAd->ChannelListNum; i++) {
1589                 if (pAd->ChannelList[i].Channel == channel)
1590                         break;
1591         }
1592
1593         if (i == pAd->ChannelListNum)
1594                 return FALSE;
1595         else
1596                 return TRUE;
1597 }
1598
1599 static u8 GetExtCh(u8 Channel, u8 Direction)
1600 {
1601         char ExtCh;
1602
1603         if (Direction == EXTCHA_ABOVE)
1604                 ExtCh = Channel + 4;
1605         else
1606                 ExtCh = (Channel - 4) > 0 ? (Channel - 4) : 0;
1607
1608         return ExtCh;
1609 }
1610
1611 void N_ChannelCheck(struct rt_rtmp_adapter *pAd)
1612 {
1613         /*u8 ChannelNum = pAd->ChannelListNum; */
1614         u8 Channel = pAd->CommonCfg.Channel;
1615
1616         if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)
1617             && (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40)) {
1618                 if (Channel > 14) {
1619                         if ((Channel == 36) || (Channel == 44)
1620                             || (Channel == 52) || (Channel == 60)
1621                             || (Channel == 100) || (Channel == 108)
1622                             || (Channel == 116) || (Channel == 124)
1623                             || (Channel == 132) || (Channel == 149)
1624                             || (Channel == 157)) {
1625                                 pAd->CommonCfg.RegTransmitSetting.field.EXTCHA =
1626                                     EXTCHA_ABOVE;
1627                         } else if ((Channel == 40) || (Channel == 48)
1628                                    || (Channel == 56) || (Channel == 64)
1629                                    || (Channel == 104) || (Channel == 112)
1630                                    || (Channel == 120) || (Channel == 128)
1631                                    || (Channel == 136) || (Channel == 153)
1632                                    || (Channel == 161)) {
1633                                 pAd->CommonCfg.RegTransmitSetting.field.EXTCHA =
1634                                     EXTCHA_BELOW;
1635                         } else {
1636                                 pAd->CommonCfg.RegTransmitSetting.field.BW =
1637                                     BW_20;
1638                         }
1639                 } else {
1640                         do {
1641                                 u8 ExtCh;
1642                                 u8 Dir =
1643                                     pAd->CommonCfg.RegTransmitSetting.field.
1644                                     EXTCHA;
1645                                 ExtCh = GetExtCh(Channel, Dir);
1646                                 if (IsValidChannel(pAd, ExtCh))
1647                                         break;
1648
1649                                 Dir =
1650                                     (Dir ==
1651                                      EXTCHA_ABOVE) ? EXTCHA_BELOW :
1652                                     EXTCHA_ABOVE;
1653                                 ExtCh = GetExtCh(Channel, Dir);
1654                                 if (IsValidChannel(pAd, ExtCh)) {
1655                                         pAd->CommonCfg.RegTransmitSetting.field.
1656                                             EXTCHA = Dir;
1657                                         break;
1658                                 }
1659                                 pAd->CommonCfg.RegTransmitSetting.field.BW =
1660                                     BW_20;
1661                         } while (FALSE);
1662
1663                         if (Channel == 14) {
1664                                 pAd->CommonCfg.RegTransmitSetting.field.BW =
1665                                     BW_20;
1666                                 /*pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_NONE; // We didn't set the ExtCh as NONE due to it'll set in RTMPSetHT() */
1667                         }
1668                 }
1669         }
1670
1671 }
1672
1673 void N_SetCenCh(struct rt_rtmp_adapter *pAd)
1674 {
1675         if (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40) {
1676                 if (pAd->CommonCfg.RegTransmitSetting.field.EXTCHA ==
1677                     EXTCHA_ABOVE) {
1678                         pAd->CommonCfg.CentralChannel =
1679                             pAd->CommonCfg.Channel + 2;
1680                 } else {
1681                         if (pAd->CommonCfg.Channel == 14)
1682                                 pAd->CommonCfg.CentralChannel =
1683                                     pAd->CommonCfg.Channel - 1;
1684                         else
1685                                 pAd->CommonCfg.CentralChannel =
1686                                     pAd->CommonCfg.Channel - 2;
1687                 }
1688         } else {
1689                 pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel;
1690         }
1691 }
1692
1693 u8 GetCuntryMaxTxPwr(struct rt_rtmp_adapter *pAd, u8 channel)
1694 {
1695         int i;
1696         for (i = 0; i < pAd->ChannelListNum; i++) {
1697                 if (pAd->ChannelList[i].Channel == channel)
1698                         break;
1699         }
1700
1701         if (i == pAd->ChannelListNum)
1702                 return 0xff;
1703         else
1704                 return pAd->ChannelList[i].MaxTxPwr;
1705 }