Merge branch 'for-2.6.31' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6
[pandora-kernel.git] / drivers / staging / rt2860 / chlist.h
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         Module Name:
28         chlist.c
29
30         Abstract:
31
32         Revision History:
33         Who         When          What
34         --------    ----------    ----------------------------------------------
35         Fonchi Wu   2007-12-19    created
36 */
37
38 #ifndef __CHLIST_H__
39 #define __CHLIST_H__
40
41 #include "rtmp_type.h"
42 #include "rtmp_def.h"
43
44
45 #define ODOR                    0
46 #define IDOR                    1
47 #define BOTH                    2
48
49 #define BAND_5G         0
50 #define BAND_24G        1
51 #define BAND_BOTH       2
52
53 typedef struct _CH_DESP {
54         UCHAR FirstChannel;
55         UCHAR NumOfCh;
56         CHAR MaxTxPwr;                  // dBm
57         UCHAR Geography;                        // 0:out door, 1:in door, 2:both
58         BOOLEAN DfsReq;                 // Dfs require, 0: No, 1: yes.
59 } CH_DESP, *PCH_DESP;
60
61 typedef struct _CH_REGION {
62         UCHAR CountReg[3];
63         UCHAR DfsType;                  // 0: CE, 1: FCC, 2: JAP, 3:JAP_W53, JAP_W56
64         CH_DESP ChDesp[10];
65 } CH_REGION, *PCH_REGION;
66
67 static CH_REGION ChRegion[] =
68 {
69                 {       // Antigua and Berbuda
70                         "AG",
71                         CE,
72                         {
73                                 { 1,   13, 20, BOTH, FALSE},    // 2.4 G, ch 1~13
74                                 { 36,  4,  23, BOTH, FALSE},    // 5G, ch 36~48
75                                 { 52,  4,  23, BOTH, FALSE},    // 5G, ch 52~64
76                                 { 100, 11, 30, BOTH, FALSE},    // 5G, ch 100~140
77                                 { 0},                                                   // end
78                         }
79                 },
80
81                 {       // Argentina
82                         "AR",
83                         CE,
84                         {
85                                 { 1,   13, 20, BOTH, FALSE},    // 2.4 G, ch 1~13
86                                 { 52,  4,  24, BOTH, FALSE},    // 5G, ch 52~64
87                                 { 149, 4,  30, BOTH, FALSE},    // 5G, ch 149~161
88                                 { 0},                                                   // end
89                         }
90                 },
91
92                 {       // Aruba
93                         "AW",
94                         CE,
95                         {
96                                 { 1,   13, 20, BOTH, FALSE},    // 2.4 G, ch 1~13
97                                 { 36,  4,  23, BOTH, FALSE},    // 5G, ch 36~48
98                                 { 52,  4,  23, BOTH, FALSE},    // 5G, ch 52~64
99                                 { 100, 11, 30, BOTH, FALSE},    // 5G, ch 100~140
100                                 { 0},                                                   // end
101                         }
102                 },
103
104                 {       // Australia
105                         "AU",
106                         CE,
107                         {
108                                 { 1,   13, 20, BOTH, FALSE},    // 2.4 G, ch 1~13
109                                 { 36,  4,  23, BOTH, FALSE},    // 5G, ch 36~48
110                                 { 52,  4,  24, BOTH, FALSE},    // 5G, ch 52~64
111                                 { 149, 5,  30, BOTH, FALSE},    // 5G, ch 149~165
112                                 { 0},                                                   // end
113                         }
114                 },
115
116                 {       // Austria
117                         "AT",
118                         CE,
119                         {
120                                 { 1,   13, 20, BOTH, FALSE},    // 2.4 G, ch 1~13
121                                 { 36,  4,  23, IDOR, TRUE},             // 5G, ch 36~48
122                                 { 52,  4,  23, IDOR, TRUE},             // 5G, ch 52~64
123                                 { 100, 11, 30, BOTH, TRUE},             // 5G, ch 100~140
124                                 { 0},                                                   // end
125                         }
126                 },
127
128                 {       // Bahamas
129                         "BS",
130                         CE,
131                         {
132                                 { 1,   13, 20, BOTH, FALSE},    // 2.4 G, ch 1~13
133                                 { 36,  4,  23, BOTH, FALSE},    // 5G, ch 36~48
134                                 { 52,  4,  24, BOTH, FALSE},    // 5G, ch 52~64
135                                 { 149, 5,  30, BOTH, FALSE},    // 5G, ch 149~165
136                                 { 0},                                                   // end
137                         }
138                 },
139
140                 {       // Barbados
141                         "BB",
142                         CE,
143                         {
144                                 { 1,   13, 20, BOTH, FALSE},    // 2.4 G, ch 1~13
145                                 { 36,  4,  23, BOTH, FALSE},    // 5G, ch 36~48
146                                 { 52,  4,  24, BOTH, FALSE},    // 5G, ch 52~64
147                                 { 100, 11, 30, BOTH, FALSE},    // 5G, ch 100~140
148                                 { 0},                                                   // end
149                         }
150                 },
151
152                 {       // Bermuda
153                         "BM",
154                         CE,
155                         {
156                                 { 1,   13, 20, BOTH, FALSE},    // 2.4 G, ch 1~13
157                                 { 36,  4,  23, BOTH, FALSE},    // 5G, ch 36~48
158                                 { 52,  4,  24, BOTH, FALSE},    // 5G, ch 52~64
159                                 { 100, 11, 30, BOTH, FALSE},    // 5G, ch 100~140
160                                 { 0},                                                   // end
161                         }
162                 },
163
164                 {       // Brazil
165                         "BR",
166                         CE,
167                         {
168                                 { 1,   13, 20, BOTH, FALSE},    // 2.4 G, ch 1~13
169                                 { 36,  4,  23, BOTH, FALSE},    // 5G, ch 36~48
170                                 { 52,  4,  24, BOTH, FALSE},    // 5G, ch 52~64
171                                 { 100, 11, 24, BOTH, FALSE},    // 5G, ch 100~140
172                                 { 149, 5,  30, BOTH, FALSE},    // 5G, ch 100~140
173                                 { 0},                                                   // end
174                         }
175                 },
176
177                 {       // Belgium
178                         "BE",
179                         CE,
180                         {
181                                 { 1,   13, 20, BOTH, FALSE},    // 2.4 G, ch 1~13
182                                 { 36,  4,  18, IDOR, FALSE},    // 5G, ch 36~48
183                                 { 52,  4,  18, IDOR, FALSE},    // 5G, ch 52~64
184                                 { 0},                                                   // end
185                         }
186                 },
187
188                 {       // Bulgaria
189                         "BG",
190                         CE,
191                         {
192                                 { 1,   13, 20, BOTH, FALSE},    // 2.4 G, ch 1~13
193                                 { 36,  4,  23, IDOR, FALSE},    // 5G, ch 36~48
194                                 { 52,  4,  23, IDOR, TRUE},     // 5G, ch 52~64
195                                 { 100, 11, 30, ODOR, TRUE},     // 5G, ch 100~140
196                                 { 0},                                                   // end
197                         }
198                 },
199
200                 {       // Canada
201                         "CA",
202                         CE,
203                         {
204                                 { 1,   13, 20, BOTH, FALSE},    // 2.4 G, ch 1~13
205                                 { 36,  4,  23, BOTH, FALSE},    // 5G, ch 36~48
206                                 { 52,  4,  23, BOTH, FALSE},    // 5G, ch 52~64
207                                 { 149, 5,  30, BOTH, FALSE},    // 5G, ch 149~165
208                                 { 0},                                                   // end
209                         }
210                 },
211
212                 {       // Cayman IsLands
213                         "KY",
214                         CE,
215                         {
216                                 { 1,   13, 20, BOTH, FALSE},    // 2.4 G, ch 1~13
217                                 { 36,  4,  23, BOTH, FALSE},    // 5G, ch 36~48
218                                 { 52,  4,  24, BOTH, FALSE},    // 5G, ch 52~64
219                                 { 100, 11, 30, BOTH, FALSE},    // 5G, ch 100~140
220                                 { 0},                                                   // end
221                         }
222                 },
223
224                 {       // Chile
225                         "CL",
226                         CE,
227                         {
228                                 { 1,   13, 20, BOTH, FALSE},    // 2.4 G, ch 1~13
229                                 { 36,  4,  20, BOTH, FALSE},    // 5G, ch 36~48
230                                 { 52,  4,  20, BOTH, FALSE},    // 5G, ch 52~64
231                                 { 149, 5,  20, BOTH, FALSE},    // 5G, ch 149~165
232                                 { 0},                                                   // end
233                         }
234                 },
235
236                 {       // China
237                         "CN",
238                         CE,
239                         {
240                                 { 1,   13, 20, BOTH, FALSE},    // 2.4 G, ch 1~13
241                                 { 149, 4,  27, BOTH, FALSE},    // 5G, ch 149~161
242                                 { 0},                                                   // end
243                         }
244                 },
245
246                 {       // Colombia
247                         "CO",
248                         CE,
249                         {
250                                 { 1,   13, 20, BOTH, FALSE},    // 2.4 G, ch 1~13
251                                 { 36,  4,  17, BOTH, FALSE},    // 5G, ch 36~48
252                                 { 52,  4,  24, BOTH, FALSE},    // 5G, ch 52~64
253                                 { 100, 11, 30, BOTH, FALSE},    // 5G, ch 100~140
254                                 { 149, 5,  30, BOTH, FALSE},    // 5G, ch 149~165
255                                 { 0},                                                   // end
256                         }
257                 },
258
259                 {       // Costa Rica
260                         "CR",
261                         CE,
262                         {
263                                 { 1,   13, 20, BOTH, FALSE},    // 2.4 G, ch 1~13
264                                 { 36,  4,  17, BOTH, FALSE},    // 5G, ch 36~48
265                                 { 52,  4,  24, BOTH, FALSE},    // 5G, ch 52~64
266                                 { 149, 4,  30, BOTH, FALSE},    // 5G, ch 149~161
267                                 { 0},                                                   // end
268                         }
269                 },
270
271                 {       // Cyprus
272                         "CY",
273                         CE,
274                         {
275                                 { 1,   13, 20, BOTH, FALSE},    // 2.4 G, ch 1~13
276                                 { 36,  4,  23, IDOR, FALSE},    // 5G, ch 36~48
277                                 { 52,  4,  24, IDOR, TRUE},             // 5G, ch 52~64
278                                 { 100, 11, 30, BOTH, TRUE},             // 5G, ch 100~140
279                                 { 0},                                                   // end
280                         }
281                 },
282
283                 {       // Czech_Republic
284                         "CZ",
285                         CE,
286                         {
287                                 { 1,   13, 20, BOTH, FALSE},    // 2.4 G, ch 1~13
288                                 { 36,  4,  23, IDOR, FALSE},    // 5G, ch 36~48
289                                 { 52,  4,  23, IDOR, TRUE},             // 5G, ch 52~64
290                                 { 0},                                                   // end
291                         }
292                 },
293
294                 {       // Denmark
295                         "DK",
296                         CE,
297                         {
298                                 { 1,   13, 20, BOTH, FALSE},    // 2.4 G, ch 1~13
299                                 { 36,  4,  23, IDOR, FALSE},    // 5G, ch 36~48
300                                 { 52,  4,  23, IDOR, TRUE},             // 5G, ch 52~64
301                                 { 100, 11, 30, BOTH, TRUE},             // 5G, ch 100~140
302                                 { 0},                                                   // end
303                         }
304                 },
305
306                 {       // Dominican Republic
307                         "DO",
308                         CE,
309                         {
310                                 { 1,   0,  20, BOTH, FALSE},    // 2.4 G, ch 0
311                                 { 149, 4,  20, BOTH, FALSE},    // 5G, ch 149~161
312                                 { 0},                                                   // end
313                         }
314                 },
315
316                 {       // Equador
317                         "EC",
318                         CE,
319                         {
320                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
321                                 { 100, 11,  27, BOTH, FALSE},   // 5G, ch 100~140
322                                 { 0},                                                   // end
323                         }
324                 },
325
326                 {       // El Salvador
327                         "SV",
328                         CE,
329                         {
330                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
331                                 { 36,  4,   23, IDOR, FALSE},   // 5G, ch 36~48
332                                 { 52,  4,   30, BOTH, TRUE},    // 5G, ch 52~64
333                                 { 149, 4,   36, BOTH, TRUE},    // 5G, ch 149~165
334                                 { 0},                                                   // end
335                         }
336                 },
337
338                 {       // Finland
339                         "FI",
340                         CE,
341                         {
342                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
343                                 { 36,  4,   23, IDOR, FALSE},   // 5G, ch 36~48
344                                 { 52,  4,   23, IDOR, TRUE},    // 5G, ch 52~64
345                                 { 100, 11,  30, BOTH, TRUE},    // 5G, ch 100~140
346                                 { 0},                                                   // end
347                         }
348                 },
349
350                 {       // France
351                         "FR",
352                         CE,
353                         {
354                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
355                                 { 36,  4,   23, IDOR, FALSE},   // 5G, ch 36~48
356                                 { 52,  4,   23, IDOR, TRUE},    // 5G, ch 52~64
357                                 { 0},                                                   // end
358                         }
359                 },
360
361                 {       // Germany
362                         "DE",
363                         CE,
364                         {
365                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
366                                 { 36,  4,   23, IDOR, FALSE},   // 5G, ch 36~48
367                                 { 52,  4,   23, IDOR, TRUE},    // 5G, ch 52~64
368                                 { 100, 11,  30, BOTH, TRUE},    // 5G, ch 100~140
369                                 { 0},                                                   // end
370                         }
371                 },
372
373                 {       // Greece
374                         "GR",
375                         CE,
376                         {
377                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
378                                 { 36,  4,   23, IDOR, FALSE},   // 5G, ch 36~48
379                                 { 52,  4,   23, IDOR, TRUE},    // 5G, ch 52~64
380                                 { 100, 11,  30, ODOR, TRUE},    // 5G, ch 100~140
381                                 { 0},                                                   // end
382                         }
383                 },
384
385                 {       // Guam
386                         "GU",
387                         CE,
388                         {
389                                 { 1,   11,  20, BOTH, FALSE},   // 2.4 G, ch 1~11
390                                 { 36,  4,   17, BOTH, FALSE},   // 5G, ch 36~48
391                                 { 52,  4,   24, BOTH, FALSE},   // 5G, ch 52~64
392                                 { 100, 11,  30, BOTH, FALSE},   // 5G, ch 100~140
393                                 { 149,  5,  30, BOTH, FALSE},   // 5G, ch 149~165
394                                 { 0},                                                   // end
395                         }
396                 },
397
398                 {       // Guatemala
399                         "GT",
400                         CE,
401                         {
402                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
403                                 { 36,  4,   17, BOTH, FALSE},   // 5G, ch 36~48
404                                 { 52,  4,   24, BOTH, FALSE},   // 5G, ch 52~64
405                                 { 149,  4,  30, BOTH, FALSE},   // 5G, ch 149~161
406                                 { 0},                                                   // end
407                         }
408                 },
409
410                 {       // Haiti
411                         "HT",
412                         CE,
413                         {
414                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
415                                 { 36,  4,   17, BOTH, FALSE},   // 5G, ch 36~48
416                                 { 52,  4,   24, BOTH, FALSE},   // 5G, ch 52~64
417                                 { 149,  4,  30, BOTH, FALSE},   // 5G, ch 149~161
418                                 { 0},                                                   // end
419                         }
420                 },
421
422                 {       // Honduras
423                         "HN",
424                         CE,
425                         {
426                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
427                                 { 149,  4,  27, BOTH, FALSE},   // 5G, ch 149~161
428                                 { 0},                                                   // end
429                         }
430                 },
431
432                 {       // Hong Kong
433                         "HK",
434                         CE,
435                         {
436                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
437                                 { 36,   4,  23, IDOR, FALSE},   // 5G, ch 36~48
438                                 { 52,   4,  23, IDOR, FALSE},   // 5G, ch 52~64
439                                 { 149,  4,  30, BOTH, FALSE},   // 5G, ch 149~161
440                                 { 0},                                                   // end
441                         }
442                 },
443
444                 {       // Hungary
445                         "HU",
446                         CE,
447                         {
448                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
449                                 { 36,   4,  23, IDOR, FALSE},   // 5G, ch 36~48
450                                 { 52,   4,  23, IDOR, TRUE},    // 5G, ch 52~64
451                                 { 0},                                                   // end
452                         }
453                 },
454
455                 {       // Iceland
456                         "IS",
457                         CE,
458                         {
459                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
460                                 { 36,   4,  23, IDOR, FALSE},   // 5G, ch 36~48
461                                 { 52,   4,  23, IDOR, TRUE},    // 5G, ch 52~64
462                                 { 100, 11,  30, BOTH, TRUE},    // 5G, ch 100~140
463                                 { 0},                                                   // end
464                         }
465                 },
466
467                 {       // India
468                         "IN",
469                         CE,
470                         {
471                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
472                                 { 149,  4,  24, IDOR, FALSE},   // 5G, ch 149~161
473                                 { 0},                                                   // end
474                         }
475                 },
476
477                 {       // Indonesia
478                         "ID",
479                         CE,
480                         {
481                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
482                                 { 149,  4,  27, BOTH, FALSE},   // 5G, ch 149~161
483                                 { 0},                                                   // end
484                         }
485                 },
486
487                 {       // Ireland
488                         "IE",
489                         CE,
490                         {
491                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
492                                 { 36,   4,  23, IDOR, FALSE},   // 5G, ch 36~48
493                                 { 52,   4,  23, IDOR, TRUE},    // 5G, ch 52~64
494                                 { 100, 11,  30, ODOR, TRUE},    // 5G, ch 100~140
495                                 { 0},                                                   // end
496                         }
497                 },
498
499                 {       // Israel
500                         "IL",
501                         CE,
502                         {
503                                 { 1,    3,  20, IDOR, FALSE},   // 2.4 G, ch 1~3
504                                 { 4,    6,  20, BOTH, FALSE},   // 2.4 G, ch 4~9
505                                 { 10,   4,  20, IDOR, FALSE},   // 2.4 G, ch 10~13
506                                 { 0},                                                   // end
507                         }
508                 },
509
510                 {       // Italy
511                         "IT",
512                         CE,
513                         {
514                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
515                                 { 36,   4,  23, IDOR, FALSE},   // 5G, ch 36~48
516                                 { 52,   4,  23, IDOR, TRUE},    // 5G, ch 52~64
517                                 { 100, 11,  30, ODOR, TRUE},    // 5G, ch 100~140
518                                 { 0},                                                   // end
519                         }
520                 },
521
522                 {       // Japan
523                         "JP",
524                         JAP,
525                         {
526                                 { 1,   14,  20, BOTH, FALSE},   // 2.4 G, ch 1~14
527 #ifndef RT30xx
528                                 { 36,   4,  23, IDOR, FALSE},   // 5G, ch 36~48
529 #endif
530 #ifdef RT30xx
531                                 { 34,   4,  23, IDOR, FALSE},   // 5G, ch 34~46
532 #endif
533                                 { 0},                                                   // end
534                         }
535                 },
536
537                 {       // Jordan
538                         "JO",
539                         CE,
540                         {
541                                 { 1,   13,  20, IDOR, FALSE},   // 2.4 G, ch 1~13
542                                 { 36,   4,  23, IDOR, FALSE},   // 5G, ch 36~48
543                                 { 149,  4,  23, IDOR, FALSE},   // 5G, ch 149~161
544                                 { 0},                                                   // end
545                         }
546                 },
547
548                 {       // Latvia
549                         "LV",
550                         CE,
551                         {
552                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
553                                 { 36,   4,  23, IDOR, FALSE},   // 5G, ch 36~48
554                                 { 52,   4,  23, IDOR, TRUE},    // 5G, ch 52~64
555                                 { 100, 11,  30, BOTH, TRUE},    // 5G, ch 100~140
556                                 { 0},                                                   // end
557                         }
558                 },
559
560                 {       // Liechtenstein
561                         "LI",
562                         CE,
563                         {
564                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
565                                 { 52,   4,  23, IDOR, TRUE},    // 5G, ch 52~64
566                                 { 100, 11,  30, BOTH, TRUE},    // 5G, ch 100~140
567                                 { 0},                                                   // end
568                         }
569                 },
570
571                 {       // Lithuania
572                         "LT",
573                         CE,
574                         {
575                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
576                                 { 36,   4,  23, IDOR, FALSE},   // 5G, ch 36~48
577                                 { 52,   4,  23, IDOR, TRUE},    // 5G, ch 52~64
578                                 { 100, 11,  30, BOTH, TRUE},    // 5G, ch 100~140
579                                 { 0},                                                   // end
580                         }
581                 },
582
583                 {       // Luxemburg
584                         "LU",
585                         CE,
586                         {
587                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
588                                 { 36,   4,  23, IDOR, FALSE},   // 5G, ch 36~48
589                                 { 52,   4,  23, IDOR, TRUE},    // 5G, ch 52~64
590                                 { 100, 11,  30, BOTH, TRUE},    // 5G, ch 100~140
591                                 { 0},                                                   // end
592                         }
593                 },
594
595                 {       // Malaysia
596                         "MY",
597                         CE,
598                         {
599                                 { 36,   4,  23, BOTH, FALSE},   // 5G, ch 36~48
600                                 { 52,   4,  23, BOTH, FALSE},   // 5G, ch 52~64
601                                 { 149,  5,  20, BOTH, FALSE},   // 5G, ch 149~165
602                                 { 0},                                                   // end
603                         }
604                 },
605
606                 {       // Malta
607                         "MT",
608                         CE,
609                         {
610                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
611                                 { 36,   4,  23, IDOR, FALSE},   // 5G, ch 36~48
612                                 { 52,   4,  23, IDOR, TRUE},    // 5G, ch 52~64
613                                 { 100, 11,  30, BOTH, TRUE},    // 5G, ch 100~140
614                                 { 0},                                                   // end
615                         }
616                 },
617
618                 {       // Marocco
619                         "MA",
620                         CE,
621                         {
622                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
623                                 { 36,   4,  24, IDOR, FALSE},   // 5G, ch 36~48
624                                 { 0},                                                   // end
625                         }
626                 },
627
628                 {       // Mexico
629                         "MX",
630                         CE,
631                         {
632                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
633                                 { 36,   4,  23, BOTH, FALSE},   // 5G, ch 36~48
634                                 { 52,   4,  24, BOTH, FALSE},   // 5G, ch 52~64
635                                 { 149,  5,  30, IDOR, FALSE},   // 5G, ch 149~165
636                                 { 0},                                                   // end
637                         }
638                 },
639
640                 {       // Netherlands
641                         "NL",
642                         CE,
643                         {
644                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
645                                 { 36,   4,  23, IDOR, FALSE},   // 5G, ch 36~48
646                                 { 52,   4,  24, IDOR, TRUE},    // 5G, ch 52~64
647                                 { 100, 11,  30, BOTH, TRUE},    // 5G, ch 100~140
648                                 { 0},                                                   // end
649                         }
650                 },
651
652                 {       // New Zealand
653                         "NZ",
654                         CE,
655                         {
656                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
657                                 { 36,   4,  24, BOTH, FALSE},   // 5G, ch 36~48
658                                 { 52,   4,  24, BOTH, FALSE},   // 5G, ch 52~64
659                                 { 149,  4,  30, BOTH, FALSE},   // 5G, ch 149~161
660                                 { 0},                                                   // end
661                         }
662                 },
663
664                 {       // Norway
665                         "NO",
666                         CE,
667                         {
668                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
669                                 { 36,   4,  24, IDOR, FALSE},   // 5G, ch 36~48
670                                 { 52,   4,  24, IDOR, TRUE},    // 5G, ch 52~64
671                                 { 100, 11,  30, BOTH, TRUE},    // 5G, ch 149~161
672                                 { 0},                                                   // end
673                         }
674                 },
675
676                 {       // Peru
677                         "PE",
678                         CE,
679                         {
680                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
681                                 { 149,  4,  27, BOTH, FALSE},   // 5G, ch 149~161
682                                 { 0},                                                   // end
683                         }
684                 },
685
686                 {       // Portugal
687                         "PT",
688                         CE,
689                         {
690                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
691                                 { 36,   4,  23, IDOR, FALSE},   // 5G, ch 36~48
692                                 { 52,   4,  23, IDOR, TRUE},    // 5G, ch 52~64
693                                 { 100, 11,  30, BOTH, TRUE},    // 5G, ch 100~140
694                                 { 0},                                                   // end
695                         }
696                 },
697
698                 {       // Poland
699                         "PL",
700                         CE,
701                         {
702                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
703                                 { 36,   4,  23, IDOR, FALSE},   // 5G, ch 36~48
704                                 { 52,   4,  23, IDOR, TRUE},    // 5G, ch 52~64
705                                 { 100, 11,  30, BOTH, TRUE},    // 5G, ch 100~140
706                                 { 0},                                                   // end
707                         }
708                 },
709
710                 {       // Romania
711                         "RO",
712                         CE,
713                         {
714                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
715                                 { 36,   4,  23, IDOR, FALSE},   // 5G, ch 36~48
716                                 { 52,   4,  23, IDOR, TRUE},    // 5G, ch 52~64
717                                 { 100, 11,  30, BOTH, TRUE},    // 5G, ch 100~140
718                                 { 0},                                                   // end
719                         }
720                 },
721
722                 {       // Russia
723                         "RU",
724                         CE,
725                         {
726                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
727                                 { 149,  4,  20, IDOR, FALSE},   // 5G, ch 149~161
728                                 { 0},                                                   // end
729                         }
730                 },
731
732                 {       // Saudi Arabia
733                         "SA",
734                         CE,
735                         {
736                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
737                                 { 36,   4,  23, BOTH, FALSE},   // 5G, ch 36~48
738                                 { 52,   4,  23, BOTH, FALSE},   // 5G, ch 52~64
739                                 { 149,  4,  23, BOTH, FALSE},   // 5G, ch 149~161
740                                 { 0},                                                   // end
741                         }
742                 },
743
744                 {       // Serbia_and_Montenegro
745                         "CS",
746                         CE,
747                         {
748                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
749                                 { 0},                                                   // end
750                         }
751                 },
752
753                 {       // Singapore
754                         "SG",
755                         CE,
756                         {
757                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
758                                 { 36,   4,  23, BOTH, FALSE},   // 5G, ch 36~48
759                                 { 52,   4,  23, BOTH, FALSE},   // 5G, ch 52~64
760                                 { 149,  4,  20, BOTH, FALSE},   // 5G, ch 149~161
761                                 { 0},                                                   // end
762                         }
763                 },
764
765                 {       // Slovakia
766                         "SK",
767                         CE,
768                         {
769                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
770                                 { 36,   4,  23, IDOR, FALSE},   // 5G, ch 36~48
771                                 { 52,   4,  23, IDOR, TRUE},    // 5G, ch 52~64
772                                 { 100, 11,  30, BOTH, TRUE},    // 5G, ch 100~140
773                                 { 0},                                                   // end
774                         }
775                 },
776
777                 {       // Slovenia
778                         "SI",
779                         CE,
780                         {
781                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
782                                 { 36,   4,  23, IDOR, FALSE},   // 5G, ch 36~48
783                                 { 52,   4,  23, IDOR, TRUE},    // 5G, ch 52~64
784                                 { 0},                                                   // end
785                         }
786                 },
787
788                 {       // South Africa
789                         "ZA",
790                         CE,
791                         {
792                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
793                                 { 36,   4,  23, BOTH, FALSE},   // 5G, ch 36~48
794                                 { 52,   4,  23, IDOR, FALSE},   // 5G, ch 52~64
795                                 { 100, 11,  30, BOTH, TRUE},    // 5G, ch 100~140
796                                 { 149,  4,  30, BOTH, FALSE},   // 5G, ch 149~161
797                                 { 0},                                                   // end
798                         }
799                 },
800
801                 {       // South Korea
802                         "KR",
803                         CE,
804                         {
805                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
806                                 { 36,   4,  20, BOTH, FALSE},   // 5G, ch 36~48
807                                 { 52,   4,  20, BOTH, FALSE},   // 5G, ch 52~64
808                                 { 100,  8,  20, BOTH, FALSE},   // 5G, ch 100~128
809                                 { 149,  4,  20, BOTH, FALSE},   // 5G, ch 149~161
810                                 { 0},                                                   // end
811                         }
812                 },
813
814                 {       // Spain
815                         "ES",
816                         CE,
817                         {
818                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
819                                 { 36,   4,  17, IDOR, FALSE},   // 5G, ch 36~48
820                                 { 52,   4,  23, IDOR, TRUE},    // 5G, ch 52~64
821                                 { 100, 11,  30, BOTH, TRUE},    // 5G, ch 100~140
822                                 { 0},                                                   // end
823                         }
824                 },
825
826                 {       // Sweden
827                         "SE",
828                         CE,
829                         {
830                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
831                                 { 36,   4,  23, IDOR, FALSE},   // 5G, ch 36~48
832                                 { 52,   4,  23, IDOR, TRUE},    // 5G, ch 52~64
833                                 { 100, 11,  30, BOTH, TRUE},    // 5G, ch 100~140
834                                 { 0},                                                   // end
835                         }
836                 },
837
838                 {       // Switzerland
839                         "CH",
840                         CE,
841                         {
842                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~13
843                                 { 36,   4,  23, IDOR, TRUE},    // 5G, ch 36~48
844                                 { 52,   4,  23, IDOR, TRUE},    // 5G, ch 52~64
845                                 { 0},                                                   // end
846                         }
847                 },
848
849                 {       // Taiwan
850                         "TW",
851                         CE,
852                         {
853                                 { 1,   11,  30, BOTH, FALSE},   // 2.4 G, ch 1~11
854                                 { 52,   4,  23, IDOR, FALSE},   // 5G, ch 52~64
855                                 { 0},                                                   // end
856                         }
857                 },
858
859                 {       // Turkey
860                         "TR",
861                         CE,
862                         {
863                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~11
864                                 { 36,   4,  23, BOTH, FALSE},   // 5G, ch 36~48
865                                 { 52,   4,  23, BOTH, FALSE},   // 5G, ch 52~64
866                                 { 0},                                                   // end
867                         }
868                 },
869
870                 {       // UK
871                         "GB",
872                         CE,
873                         {
874                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~11
875                                 { 36,   4,  23, IDOR, FALSE},   // 5G, ch 52~64
876                                 { 52,   4,  23, IDOR, TRUE},    // 5G, ch 52~64
877                                 { 100, 11,  30, BOTH, TRUE},    // 5G, ch 100~140
878                                 { 0},                                                   // end
879                         }
880                 },
881
882                 {       // Ukraine
883                         "UA",
884                         CE,
885                         {
886                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~11
887                                 { 0},                                                   // end
888                         }
889                 },
890
891                 {       // United_Arab_Emirates
892                         "AE",
893                         CE,
894                         {
895                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~11
896                                 { 0},                                                   // end
897                         }
898                 },
899
900                 {       // United_States
901                         "US",
902                         CE,
903                         {
904                                 { 1,   11,  30, BOTH, FALSE},   // 2.4 G, ch 1~11
905                                 { 36,   4,  17, IDOR, FALSE},   // 5G, ch 52~64
906                                 { 52,   4,  24, BOTH, TRUE},    // 5G, ch 52~64
907                                 { 100, 11,  30, BOTH, TRUE},    // 5G, ch 100~140
908                                 { 149,  5,  30, BOTH, FALSE},   // 5G, ch 149~165
909                                 { 0},                                                   // end
910                         }
911                 },
912
913                 {       // Venezuela
914                         "VE",
915                         CE,
916                         {
917                                 { 1,   13,  20, BOTH, FALSE},   // 2.4 G, ch 1~11
918                                 { 149,  4,  27, BOTH, FALSE},   // 5G, ch 149~161
919                                 { 0},                                                   // end
920                         }
921                 },
922
923                 {       // Default
924                         "",
925                         CE,
926                         {
927                                 { 1,   11,  20, BOTH, FALSE},   // 2.4 G, ch 1~11
928                                 { 36,   4,  20, BOTH, FALSE},   // 5G, ch 52~64
929                                 { 52,   4,  20, BOTH, FALSE},   // 5G, ch 52~64
930                                 { 100, 11,  20, BOTH, FALSE},   // 5G, ch 100~140
931                                 { 149,  5,  20, BOTH, FALSE},   // 5G, ch 149~165
932                                 { 0},                                                   // end
933                         }
934                 },
935 };
936
937 static inline PCH_REGION GetChRegion(
938         IN PUCHAR CntryCode)
939 {
940         INT loop = 0;
941         PCH_REGION pChRegion = NULL;
942
943         while (strcmp(ChRegion[loop].CountReg, "") != 0)
944         {
945                 if (strncmp(ChRegion[loop].CountReg, CntryCode, 2) == 0)
946                 {
947                         pChRegion = &ChRegion[loop];
948                         break;
949                 }
950                 loop++;
951         }
952
953         if (pChRegion == NULL)
954                 pChRegion = &ChRegion[loop];
955         return pChRegion;
956 }
957
958 static inline VOID ChBandCheck(
959         IN UCHAR PhyMode,
960         OUT PUCHAR pChType)
961 {
962         switch(PhyMode)
963         {
964                 case PHY_11A:
965                 case PHY_11AN_MIXED:
966                         *pChType = BAND_5G;
967                         break;
968                 case PHY_11ABG_MIXED:
969                 case PHY_11AGN_MIXED:
970                 case PHY_11ABGN_MIXED:
971                         *pChType = BAND_BOTH;
972                         break;
973
974                 default:
975                         *pChType = BAND_24G;
976                         break;
977         }
978 }
979
980 static inline UCHAR FillChList(
981         IN PRTMP_ADAPTER pAd,
982         IN PCH_DESP pChDesp,
983         IN UCHAR Offset,
984         IN UCHAR increment)
985 {
986         INT i, j, l;
987         UCHAR channel;
988
989         j = Offset;
990         for (i = 0; i < pChDesp->NumOfCh; i++)
991         {
992                 channel = pChDesp->FirstChannel + i * increment;
993                 for (l=0; l<MAX_NUM_OF_CHANNELS; l++)
994                 {
995                         if (channel == pAd->TxPower[l].Channel)
996                         {
997                                 pAd->ChannelList[j].Power = pAd->TxPower[l].Power;
998                                 pAd->ChannelList[j].Power2 = pAd->TxPower[l].Power2;
999                                 break;
1000                         }
1001                 }
1002                 if (l == MAX_NUM_OF_CHANNELS)
1003                         continue;
1004
1005                 pAd->ChannelList[j].Channel = pChDesp->FirstChannel + i * increment;
1006                 pAd->ChannelList[j].MaxTxPwr = pChDesp->MaxTxPwr;
1007                 pAd->ChannelList[j].DfsReq = pChDesp->DfsReq;
1008                 j++;
1009         }
1010         pAd->ChannelListNum = j;
1011
1012         return j;
1013 }
1014
1015 static inline VOID CreateChList(
1016         IN PRTMP_ADAPTER pAd,
1017         IN PCH_REGION pChRegion,
1018         IN UCHAR Geography)
1019 {
1020         INT i;
1021         UCHAR offset = 0;
1022         PCH_DESP pChDesp;
1023         UCHAR ChType;
1024         UCHAR increment;
1025
1026         if (pChRegion == NULL)
1027                 return;
1028
1029         ChBandCheck(pAd->CommonCfg.PhyMode, &ChType);
1030
1031         for (i=0; i<10; i++)
1032         {
1033                 pChDesp = &pChRegion->ChDesp[i];
1034                 if (pChDesp->FirstChannel == 0)
1035                         break;
1036
1037                 if (ChType == BAND_5G)
1038                 {
1039                         if (pChDesp->FirstChannel <= 14)
1040                                 continue;
1041                 }
1042                 else if (ChType == BAND_24G)
1043                 {
1044                         if (pChDesp->FirstChannel > 14)
1045                                 continue;
1046                 }
1047
1048                 if ((pChDesp->Geography == BOTH)
1049                         || (pChDesp->Geography == Geography))
1050         {
1051                         if (pChDesp->FirstChannel > 14)
1052                 increment = 4;
1053             else
1054                 increment = 1;
1055                         offset = FillChList(pAd, pChDesp, offset, increment);
1056         }
1057         }
1058 }
1059
1060 static inline VOID BuildChannelListEx(
1061         IN PRTMP_ADAPTER pAd)
1062 {
1063         PCH_REGION pChReg;
1064
1065         pChReg = GetChRegion(pAd->CommonCfg.CountryCode);
1066         CreateChList(pAd, pChReg, pAd->CommonCfg.Geography);
1067 }
1068
1069 static inline VOID BuildBeaconChList(
1070         IN PRTMP_ADAPTER pAd,
1071         OUT PUCHAR pBuf,
1072         OUT     PULONG pBufLen)
1073 {
1074         INT i;
1075         ULONG TmpLen;
1076         PCH_REGION pChRegion;
1077         PCH_DESP pChDesp;
1078         UCHAR ChType;
1079
1080         pChRegion = GetChRegion(pAd->CommonCfg.CountryCode);
1081
1082         if (pChRegion == NULL)
1083                 return;
1084
1085         ChBandCheck(pAd->CommonCfg.PhyMode, &ChType);
1086         *pBufLen = 0;
1087
1088         for (i=0; i<10; i++)
1089         {
1090                 pChDesp = &pChRegion->ChDesp[i];
1091                 if (pChDesp->FirstChannel == 0)
1092                         break;
1093
1094                 if (ChType == BAND_5G)
1095                 {
1096                         if (pChDesp->FirstChannel <= 14)
1097                                 continue;
1098                 }
1099                 else if (ChType == BAND_24G)
1100                 {
1101                         if (pChDesp->FirstChannel > 14)
1102                                 continue;
1103                 }
1104
1105                 if ((pChDesp->Geography == BOTH)
1106                         || (pChDesp->Geography == pAd->CommonCfg.Geography))
1107                 {
1108                         MakeOutgoingFrame(pBuf + *pBufLen,              &TmpLen,
1109                                                                 1,                      &pChDesp->FirstChannel,
1110                                                                 1,                      &pChDesp->NumOfCh,
1111                                                                 1,                      &pChDesp->MaxTxPwr,
1112                                                                 END_OF_ARGS);
1113                         *pBufLen += TmpLen;
1114                 }
1115         }
1116 }
1117
1118 static inline BOOLEAN IsValidChannel(
1119         IN PRTMP_ADAPTER pAd,
1120         IN UCHAR channel)
1121
1122 {
1123         INT i;
1124
1125         for (i = 0; i < pAd->ChannelListNum; i++)
1126         {
1127                 if (pAd->ChannelList[i].Channel == channel)
1128                         break;
1129         }
1130
1131         if (i == pAd->ChannelListNum)
1132                 return FALSE;
1133         else
1134                 return TRUE;
1135 }
1136
1137
1138 static inline UCHAR GetExtCh(
1139         IN UCHAR Channel,
1140         IN UCHAR Direction)
1141 {
1142         CHAR ExtCh;
1143
1144         if (Direction == EXTCHA_ABOVE)
1145                 ExtCh = Channel + 4;
1146         else
1147                 ExtCh = (Channel - 4) > 0 ? (Channel - 4) : 0;
1148
1149         return ExtCh;
1150 }
1151
1152
1153 static inline VOID N_ChannelCheck(
1154         IN PRTMP_ADAPTER pAd)
1155 {
1156         //UCHAR ChannelNum = pAd->ChannelListNum;
1157         UCHAR Channel = pAd->CommonCfg.Channel;
1158
1159         if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) && (pAd->CommonCfg.RegTransmitSetting.field.BW  == BW_40))
1160         {
1161                 if (Channel > 14)
1162                 {
1163                         if ((Channel == 36) || (Channel == 44) || (Channel == 52) || (Channel == 60) || (Channel == 100) || (Channel == 108) ||
1164                             (Channel == 116) || (Channel == 124) || (Channel == 132) || (Channel == 149) || (Channel == 157))
1165                         {
1166                                 pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_ABOVE;
1167                         }
1168                         else if ((Channel == 40) || (Channel == 48) || (Channel == 56) || (Channel == 64) || (Channel == 104) || (Channel == 112) ||
1169                                         (Channel == 120) || (Channel == 128) || (Channel == 136) || (Channel == 153) || (Channel == 161))
1170                         {
1171                                 pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_BELOW;
1172                         }
1173                         else
1174                         {
1175                                 pAd->CommonCfg.RegTransmitSetting.field.BW  = BW_20;
1176                         }
1177                 }
1178                 else
1179                 {
1180                         do
1181                         {
1182                                 UCHAR ExtCh;
1183                                 UCHAR Dir = pAd->CommonCfg.RegTransmitSetting.field.EXTCHA;
1184                                 ExtCh = GetExtCh(Channel, Dir);
1185                                 if (IsValidChannel(pAd, ExtCh))
1186                                         break;
1187
1188                                 Dir = (Dir == EXTCHA_ABOVE) ? EXTCHA_BELOW : EXTCHA_ABOVE;
1189                                 ExtCh = GetExtCh(Channel, Dir);
1190                                 if (IsValidChannel(pAd, ExtCh))
1191                                 {
1192                                         pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = Dir;
1193                                         break;
1194                                 }
1195                                 pAd->CommonCfg.RegTransmitSetting.field.BW  = BW_20;
1196                         } while(FALSE);
1197
1198                         if (Channel == 14)
1199                         {
1200                                 pAd->CommonCfg.RegTransmitSetting.field.BW  = BW_20;
1201                                 //pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_NONE; // We didn't set the ExtCh as NONE due to it'll set in RTMPSetHT()
1202                         }
1203                 }
1204         }
1205
1206
1207 }
1208
1209
1210 static inline VOID N_SetCenCh(
1211         IN PRTMP_ADAPTER pAd)
1212 {
1213         if (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40)
1214         {
1215                 if (pAd->CommonCfg.RegTransmitSetting.field.EXTCHA == EXTCHA_ABOVE)
1216                 {
1217                         pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel + 2;
1218                 }
1219                 else
1220                 {
1221                         if (pAd->CommonCfg.Channel == 14)
1222                                 pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel - 1;
1223                         else
1224                                 pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel - 2;
1225                 }
1226         }
1227         else
1228         {
1229                 pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel;
1230         }
1231 }
1232
1233 static inline UINT8 GetCuntryMaxTxPwr(
1234         IN PRTMP_ADAPTER pAd,
1235         IN UINT8 channel)
1236 {
1237         int i;
1238         for (i = 0; i < pAd->ChannelListNum; i++)
1239         {
1240                 if (pAd->ChannelList[i].Channel == channel)
1241                         break;
1242         }
1243
1244         if (i == pAd->ChannelListNum)
1245                 return 0xff;
1246         else
1247                 return pAd->ChannelList[i].MaxTxPwr;
1248 }
1249 #endif // __CHLIST_H__
1250