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