2 * Copyright (c) 2000-2005 ZyDAS Technology Corporation
3 * Copyright (c) 2007-2008 Atheros Communications Inc.
5 * Permission to use, copy, modify, and/or distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 /* Module Name : hpreg.c */
21 /* This module contains Regulatory Table and related function. */
26 /************************************************************************/
27 #include "../80211core/cprecomp.h"
32 #define HAL_MODE_11A_TURBO HAL_MODE_108A
33 #define HAL_MODE_11G_TURBO HAL_MODE_108G
37 * The following are flags for different requirements per reg domain.
38 * These requirements are either inhereted from the reg domain pair or
39 * from the unitary reg domain if the reg domain pair flags value is
45 DISALLOW_ADHOC_11A
= 0x00000001,
46 DISALLOW_ADHOC_11A_TURB
= 0x00000002,
47 NEED_NFC
= 0x00000004,
49 ADHOC_PER_11D
= 0x00000008, /* Start Ad-Hoc mode */
50 ADHOC_NO_11A
= 0x00000010,
52 PUBLIC_SAFETY_DOMAIN
= 0x00000020, /* public safety domain */
53 LIMIT_FRAME_4MS
= 0x00000040, /* 4msec limit on the frame length */
56 #define MKK5GHZ_FLAG1 (DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS)
57 #define MKK5GHZ_FLAG2 (DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS)
60 DFS_UNINIT_DOMAIN
= 0, /* Uninitialized dfs domain */
61 DFS_FCC_DOMAIN
= 1, /* FCC3 dfs domain */
62 DFS_ETSI_DOMAIN
= 2, /* ETSI dfs domain */
66 * Used to set the RegDomain bitmask which chooses which frequency
67 * band specs are used.
70 #define BMLEN 2 /* Use 2 64 bit uint for channel bitmask
71 NB: Must agree with macro below (BM) */
72 #define BMZERO {(u64_t) 0, (u64_t) 0} /* BMLEN zeros */
75 #define BM(_fa, _fb, _fc, _fd, _fe, _ff, _fg, _fh, _fi, _fj, _fk, _fl) \
76 {((((_fa >= 0) && (_fa < 64)) ? (((u64_t) 1) << (_fa&0x3f)) : (u64_t) 0) | \
77 (((_fb >= 0) && (_fb < 64)) ? (((u64_t) 1) << (_fb&0x3f)) : (u64_t) 0) | \
78 (((_fc >= 0) && (_fc < 64)) ? (((u64_t) 1) << (_fc&0x3f)) : (u64_t) 0) | \
79 (((_fd >= 0) && (_fd < 64)) ? (((u64_t) 1) << (_fd&0x3f)) : (u64_t) 0) | \
80 (((_fe >= 0) && (_fe < 64)) ? (((u64_t) 1) << (_fe&0x3f)) : (u64_t) 0) | \
81 (((_ff >= 0) && (_ff < 64)) ? (((u64_t) 1) << (_ff&0x3f)) : (u64_t) 0) | \
82 (((_fg >= 0) && (_fg < 64)) ? (((u64_t) 1) << (_fg&0x3f)) : (u64_t) 0) | \
83 (((_fh >= 0) && (_fh < 64)) ? (((u64_t) 1) << (_fh&0x3f)) : (u64_t) 0) | \
84 (((_fi >= 0) && (_fi < 64)) ? (((u64_t) 1) << (_fi&0x3f)) : (u64_t) 0) | \
85 (((_fj >= 0) && (_fj < 64)) ? (((u64_t) 1) << (_fj&0x3f)) : (u64_t) 0) | \
86 (((_fk >= 0) && (_fk < 64)) ? (((u64_t) 1) << (_fk&0x3f)) : (u64_t) 0) | \
87 (((_fl >= 0) && (_fl < 64)) ? (((u64_t) 1) << (_fl&0x3f)) : (u64_t) 0) | \
88 ((((_fa > 63) && (_fa < 128)) ? (((u64_t) 1) << ((_fa - 64)&0x3f)) : (u64_t) 0) | \
89 (((_fb > 63) && (_fb < 128)) ? (((u64_t) 1) << ((_fb - 64)&0x3f)) : (u64_t) 0) | \
90 (((_fc > 63) && (_fc < 128)) ? (((u64_t) 1) << ((_fc - 64)&0x3f)) : (u64_t) 0) | \
91 (((_fd > 63) && (_fd < 128)) ? (((u64_t) 1) << ((_fd - 64)&0x3f)) : (u64_t) 0) | \
92 (((_fe > 63) && (_fe < 128)) ? (((u64_t) 1) << ((_fe - 64)&0x3f)) : (u64_t) 0) | \
93 (((_ff > 63) && (_ff < 128)) ? (((u64_t) 1) << ((_ff - 64)&0x3f)) : (u64_t) 0) | \
94 (((_fg > 63) && (_fg < 128)) ? (((u64_t) 1) << ((_fg - 64)&0x3f)) : (u64_t) 0) | \
95 (((_fh > 63) && (_fh < 128)) ? (((u64_t) 1) << ((_fh - 64)&0x3f)) : (u64_t) 0) | \
96 (((_fi > 63) && (_fi < 128)) ? (((u64_t) 1) << ((_fi - 64)&0x3f)) : (u64_t) 0) | \
97 (((_fj > 63) && (_fj < 128)) ? (((u64_t) 1) << ((_fj - 64)&0x3f)) : (u64_t) 0) | \
98 (((_fk > 63) && (_fk < 128)) ? (((u64_t) 1) << ((_fk - 64)&0x3f)) : (u64_t) 0) | \
99 (((_fl > 63) && (_fl < 128)) ? (((u64_t) 1) << ((_fl - 64)&0x3f)) : (u64_t) 0)))}
101 /* Mask to check whether a domain is a multidomain or a single
104 #define MULTI_DOMAIN_MASK 0xFF00
108 * The following describe the bit masks for different passive scan
109 * capability/requirements per regdomain.
111 #define NO_PSCAN 0x0ULL
112 #define PSCAN_FCC 0x0000000000000001ULL
113 #define PSCAN_FCC_T 0x0000000000000002ULL
114 #define PSCAN_ETSI 0x0000000000000004ULL
115 #define PSCAN_MKK1 0x0000000000000008ULL
116 #define PSCAN_MKK2 0x0000000000000010ULL
117 #define PSCAN_MKKA 0x0000000000000020ULL
118 #define PSCAN_MKKA_G 0x0000000000000040ULL
119 #define PSCAN_ETSIA 0x0000000000000080ULL
120 #define PSCAN_ETSIB 0x0000000000000100ULL
121 #define PSCAN_ETSIC 0x0000000000000200ULL
122 #define PSCAN_WWR 0x0000000000000400ULL
123 #define PSCAN_MKKA1 0x0000000000000800ULL
124 #define PSCAN_MKKA1_G 0x0000000000001000ULL
125 #define PSCAN_MKKA2 0x0000000000002000ULL
126 #define PSCAN_MKKA2_G 0x0000000000004000ULL
127 #define PSCAN_MKK3 0x0000000000008000ULL
128 #define PSCAN_DEFER 0x7FFFFFFFFFFFFFFFULL
129 #define IS_ECM_CHAN 0x8000000000000000ULL
132 * THE following table is the mapping of regdomain pairs specified by
133 * an 8 bit regdomain value to the individual unitary reg domains
136 typedef struct reg_dmn_pair_mapping
{
137 u16_t regDmnEnum
; /* 16 bit reg domain pair */
138 u16_t regDmn5GHz
; /* 5GHz reg domain */
139 u16_t regDmn2GHz
; /* 2GHz reg domain */
140 u32_t flags5GHz
; /* Requirements flags (AdHoc
141 disallow, noise floor cal needed,
143 u32_t flags2GHz
; /* Requirements flags (AdHoc
144 disallow, noise floor cal needed,
146 u64_t pscanMask
; /* Passive Scan flags which
147 can override unitary domain
148 passive scan flags. This
149 value is used as a mask on
151 u16_t singleCC
; /* Country code of single country if
152 a one-on-one mapping exists */
153 } REG_DMN_PAIR_MAPPING
;
155 static REG_DMN_PAIR_MAPPING regDomainPairs
[] = {
156 {NO_ENUMRD
, FCC2
, DEBUG_REG_DMN
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
157 {NULL1_WORLD
, NULL1
, WORLD
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
158 {NULL1_ETSIB
, NULL1
, ETSIB
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
159 {NULL1_ETSIC
, NULL1
, ETSIC
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
161 {FCC2_FCCA
, FCC2
, FCCA
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
162 {FCC2_WORLD
, FCC2
, WORLD
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
163 {FCC2_ETSIC
, FCC2
, ETSIC
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
164 {FCC3_FCCA
, FCC3
, FCCA
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
165 {FCC3_WORLD
, FCC3
, WORLD
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
166 {FCC4_FCCA
, FCC4
, FCCA
, DISALLOW_ADHOC_11A
| DISALLOW_ADHOC_11A_TURB
, NO_REQ
, PSCAN_DEFER
, 0 },
167 {FCC5_FCCA
, FCC5
, FCCA
, DISALLOW_ADHOC_11A
| DISALLOW_ADHOC_11A_TURB
, NO_REQ
, PSCAN_DEFER
, 0 },
168 {FCC6_FCCA
, FCC6
, FCCA
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
169 {FCC6_WORLD
, FCC6
, WORLD
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
171 {ETSI1_WORLD
, ETSI1
, WORLD
, DISALLOW_ADHOC_11A
| DISALLOW_ADHOC_11A_TURB
, NO_REQ
, PSCAN_DEFER
, 0 },
172 {ETSI2_WORLD
, ETSI2
, WORLD
, DISALLOW_ADHOC_11A
| DISALLOW_ADHOC_11A_TURB
, NO_REQ
, PSCAN_DEFER
, 0 },
173 {ETSI3_WORLD
, ETSI3
, WORLD
, DISALLOW_ADHOC_11A
| DISALLOW_ADHOC_11A_TURB
, NO_REQ
, PSCAN_DEFER
, 0 },
174 {ETSI4_WORLD
, ETSI4
, WORLD
, DISALLOW_ADHOC_11A
| DISALLOW_ADHOC_11A_TURB
, NO_REQ
, PSCAN_DEFER
, 0 },
175 {ETSI5_WORLD
, ETSI5
, WORLD
, DISALLOW_ADHOC_11A
| DISALLOW_ADHOC_11A_TURB
, NO_REQ
, PSCAN_DEFER
, 0 },
176 {ETSI6_WORLD
, ETSI6
, WORLD
, DISALLOW_ADHOC_11A
| DISALLOW_ADHOC_11A_TURB
, NO_REQ
, PSCAN_DEFER
, 0 },
178 {ETSI3_ETSIA
, ETSI3
, WORLD
, DISALLOW_ADHOC_11A
| DISALLOW_ADHOC_11A_TURB
, NO_REQ
, PSCAN_DEFER
, 0 },
179 {FRANCE_RES
, ETSI3
, WORLD
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
181 {FCC1_WORLD
, FCC1
, WORLD
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
182 {FCC1_FCCA
, FCC1
, FCCA
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
183 {APL1_WORLD
, APL1
, WORLD
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
184 {APL2_WORLD
, APL2
, WORLD
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
185 {APL3_WORLD
, APL3
, WORLD
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
186 {APL4_WORLD
, APL4
, WORLD
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
187 {APL5_WORLD
, APL5
, WORLD
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
188 {APL6_WORLD
, APL6
, WORLD
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
189 {APL8_WORLD
, APL8
, WORLD
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
190 {APL9_WORLD
, APL9
, WORLD
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
192 {APL3_FCCA
, APL3
, FCCA
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
193 {APL1_ETSIC
, APL1
, ETSIC
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
194 {APL2_ETSIC
, APL2
, ETSIC
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
195 {APL2_FCCA
, APL2
, FCCA
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
196 {APL2_APLD
, APL2
, APLD
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0},
197 {APL7_FCCA
, APL7
, FCCA
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
199 {MKK1_MKKA
, MKK1
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKK1
| PSCAN_MKKA
, CTRY_JAPAN
},
200 {MKK1_MKKB
, MKK1
, MKKA
, MKK5GHZ_FLAG2
, NEED_NFC
, PSCAN_MKK1
| PSCAN_MKKA
| PSCAN_MKKA_G
, CTRY_JAPAN1
},
201 {MKK1_FCCA
, MKK1
, FCCA
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKK1
, CTRY_JAPAN2
},
202 {MKK1_MKKA1
, MKK1
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKK1
| PSCAN_MKKA1
| PSCAN_MKKA1_G
, CTRY_JAPAN4
},
203 {MKK1_MKKA2
, MKK1
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKK1
| PSCAN_MKKA2
| PSCAN_MKKA2_G
, CTRY_JAPAN5
},
204 {MKK1_MKKC
, MKK1
, MKKC
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKK1
, CTRY_JAPAN6
},
207 {MKK2_MKKA
, MKK2
, MKKA
, MKK5GHZ_FLAG2
, NEED_NFC
, PSCAN_MKK2
| PSCAN_MKKA
| PSCAN_MKKA_G
, CTRY_JAPAN3
},
210 {MKK3_MKKA
, MKK3
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, NO_PSCAN
, CTRY_JAPAN25
},
211 {MKK3_MKKB
, MKK3
, MKKA
, MKK5GHZ_FLAG2
, NEED_NFC
, PSCAN_MKKA
| PSCAN_MKKA_G
, CTRY_JAPAN7
},
212 {MKK3_MKKA1
, MKK3
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKKA1
| PSCAN_MKKA1_G
, CTRY_JAPAN26
},
213 {MKK3_MKKA2
, MKK3
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKKA2
| PSCAN_MKKA2_G
, CTRY_JAPAN8
},
214 {MKK3_MKKC
, MKK3
, MKKC
, MKK5GHZ_FLAG1
, NEED_NFC
, NO_PSCAN
, CTRY_JAPAN9
},
215 {MKK3_FCCA
, MKK3
, FCCA
, MKK5GHZ_FLAG1
, NEED_NFC
, NO_PSCAN
, CTRY_JAPAN27
},
218 {MKK4_MKKB
, MKK4
, MKKA
, MKK5GHZ_FLAG2
, NEED_NFC
, PSCAN_MKK3
| PSCAN_MKKA
| PSCAN_MKKA_G
, CTRY_JAPAN10
},
219 {MKK4_MKKA1
, MKK4
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKK3
| PSCAN_MKKA1
| PSCAN_MKKA1_G
, CTRY_JAPAN28
},
220 {MKK4_MKKA2
, MKK4
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKK3
| PSCAN_MKKA2
| PSCAN_MKKA2_G
, CTRY_JAPAN11
},
221 {MKK4_MKKC
, MKK4
, MKKC
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKK3
, CTRY_JAPAN12
},
222 {MKK4_FCCA
, MKK4
, FCCA
, MKK5GHZ_FLAG1
, NEED_NFC
, NO_PSCAN
, CTRY_JAPAN29
},
223 {MKK4_MKKA
, MKK4
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKK3
| PSCAN_MKKA
, CTRY_JAPAN36
},
226 {MKK5_MKKB
, MKK5
, MKKA
, MKK5GHZ_FLAG2
, NEED_NFC
, PSCAN_MKK3
| PSCAN_MKKA
| PSCAN_MKKA_G
, CTRY_JAPAN13
},
227 {MKK5_MKKA2
, MKK5
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKK3
| PSCAN_MKKA2
| PSCAN_MKKA2_G
, CTRY_JAPAN14
},
228 {MKK5_MKKC
, MKK5
, MKKC
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKK3
, CTRY_JAPAN15
},
231 {MKK6_MKKB
, MKK6
, MKKA
, MKK5GHZ_FLAG2
, NEED_NFC
, PSCAN_MKK1
| PSCAN_MKKA
| PSCAN_MKKA_G
, CTRY_JAPAN16
},
232 {MKK6_MKKA2
, MKK6
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKK1
| PSCAN_MKKA2
| PSCAN_MKKA2_G
, CTRY_JAPAN17
},
233 {MKK6_MKKC
, MKK6
, MKKC
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKK1
, CTRY_JAPAN18
},
234 {MKK6_MKKA1
, MKK6
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKKA1
| PSCAN_MKKA1_G
, CTRY_JAPAN30
},
235 {MKK6_FCCA
, MKK6
, FCCA
, MKK5GHZ_FLAG1
, NEED_NFC
, NO_PSCAN
, CTRY_JAPAN31
},
238 {MKK7_MKKB
, MKK7
, MKKA
, MKK5GHZ_FLAG2
, NEED_NFC
, PSCAN_MKK1
| PSCAN_MKK3
| PSCAN_MKKA
| PSCAN_MKKA_G
, CTRY_JAPAN19
},
239 {MKK7_MKKA
, MKK7
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKK1
| PSCAN_MKK3
| PSCAN_MKKA2
| PSCAN_MKKA2_G
, CTRY_JAPAN20
},
240 {MKK7_MKKC
, MKK7
, MKKC
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKK1
| PSCAN_MKK3
, CTRY_JAPAN21
},
241 {MKK7_MKKA1
, MKK7
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKKA1
| PSCAN_MKKA1_G
, CTRY_JAPAN32
},
242 {MKK7_FCCA
, MKK7
, FCCA
, MKK5GHZ_FLAG1
, NEED_NFC
, NO_PSCAN
, CTRY_JAPAN33
},
245 {MKK8_MKKB
, MKK8
, MKKA
, MKK5GHZ_FLAG2
, NEED_NFC
, PSCAN_MKK1
| PSCAN_MKK3
| PSCAN_MKKA
| PSCAN_MKKA_G
, CTRY_JAPAN22
},
246 {MKK8_MKKA2
, MKK8
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKK1
| PSCAN_MKK3
| PSCAN_MKKA2
| PSCAN_MKKA2_G
, CTRY_JAPAN23
},
247 {MKK8_MKKC
, MKK8
, MKKC
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKK1
| PSCAN_MKK3
, CTRY_JAPAN24
},
250 {MKK9_MKKA
, MKK9
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, NO_PSCAN
, CTRY_JAPAN34
},
251 {MKK9_FCCA
, MKK9
, FCCA
, MKK5GHZ_FLAG1
, NEED_NFC
, NO_PSCAN
, CTRY_JAPAN37
},
252 {MKK9_MKKA1
, MKK9
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKKA1
| PSCAN_MKKA1_G
, CTRY_JAPAN38
},
253 {MKK9_MKKC
, MKK9
, MKKC
, MKK5GHZ_FLAG1
, NEED_NFC
, NO_PSCAN
, CTRY_JAPAN39
},
254 {MKK9_MKKA2
, MKK9
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKK1
| PSCAN_MKK3
| PSCAN_MKKA2
| PSCAN_MKKA2_G
, CTRY_JAPAN40
},
257 {MKK10_MKKA
, MKK10
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, NO_PSCAN
, CTRY_JAPAN35
},
258 {MKK10_FCCA
, MKK10
, FCCA
, MKK5GHZ_FLAG1
, NEED_NFC
, NO_PSCAN
, CTRY_JAPAN41
},
259 {MKK10_MKKA1
, MKK10
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKKA1
| PSCAN_MKKA1_G
, CTRY_JAPAN42
},
260 {MKK10_MKKC
, MKK10
, MKKC
, MKK5GHZ_FLAG1
, NEED_NFC
, NO_PSCAN
, CTRY_JAPAN43
},
261 {MKK10_MKKA2
, MKK10
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKK1
| PSCAN_MKK3
| PSCAN_MKKA2
| PSCAN_MKKA2_G
, CTRY_JAPAN44
},
264 {MKK11_MKKA
, MKK11
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, NO_PSCAN
, CTRY_JAPAN45
},
265 {MKK11_FCCA
, MKK11
, FCCA
, MKK5GHZ_FLAG1
, NEED_NFC
, NO_PSCAN
, CTRY_JAPAN46
},
266 {MKK11_MKKA1
, MKK11
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKKA1
| PSCAN_MKKA1_G
, CTRY_JAPAN47
},
267 {MKK11_MKKC
, MKK11
, MKKC
, MKK5GHZ_FLAG1
, NEED_NFC
, NO_PSCAN
, CTRY_JAPAN48
},
268 {MKK11_MKKA2
, MKK11
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKK1
| PSCAN_MKK3
| PSCAN_MKKA2
| PSCAN_MKKA2_G
, CTRY_JAPAN49
},
271 {MKK12_MKKA
, MKK12
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, NO_PSCAN
, CTRY_JAPAN50
},
272 {MKK12_FCCA
, MKK12
, FCCA
, MKK5GHZ_FLAG1
, NEED_NFC
, NO_PSCAN
, CTRY_JAPAN51
},
273 {MKK12_MKKA1
, MKK12
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKKA1
| PSCAN_MKKA1_G
, CTRY_JAPAN52
},
274 {MKK12_MKKC
, MKK12
, MKKC
, MKK5GHZ_FLAG1
, NEED_NFC
, NO_PSCAN
, CTRY_JAPAN53
},
275 {MKK12_MKKA2
, MKK12
, MKKA
, MKK5GHZ_FLAG1
, NEED_NFC
, PSCAN_MKK1
| PSCAN_MKK3
| PSCAN_MKKA2
| PSCAN_MKKA2_G
, CTRY_JAPAN54
},
278 /* These are super domains */
279 {WOR0_WORLD
, WOR0_WORLD
, WOR0_WORLD
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
280 {WOR1_WORLD
, WOR1_WORLD
, WOR1_WORLD
, DISALLOW_ADHOC_11A
| DISALLOW_ADHOC_11A_TURB
, NO_REQ
, PSCAN_DEFER
, 0 },
281 {WOR2_WORLD
, WOR2_WORLD
, WOR2_WORLD
, DISALLOW_ADHOC_11A_TURB
, NO_REQ
, PSCAN_DEFER
, 0 },
282 {WOR3_WORLD
, WOR3_WORLD
, WOR3_WORLD
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
283 {WOR4_WORLD
, WOR4_WORLD
, WOR4_WORLD
, DISALLOW_ADHOC_11A
| DISALLOW_ADHOC_11A_TURB
, NO_REQ
, PSCAN_DEFER
, 0 },
284 {WOR5_ETSIC
, WOR5_ETSIC
, WOR5_ETSIC
, DISALLOW_ADHOC_11A
| DISALLOW_ADHOC_11A_TURB
, NO_REQ
, PSCAN_DEFER
, 0 },
285 {WOR01_WORLD
, WOR01_WORLD
, WOR01_WORLD
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
286 {WOR02_WORLD
, WOR02_WORLD
, WOR02_WORLD
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
287 {EU1_WORLD
, EU1_WORLD
, EU1_WORLD
, NO_REQ
, NO_REQ
, PSCAN_DEFER
, 0 },
288 {WOR9_WORLD
, WOR9_WORLD
, WOR9_WORLD
, DISALLOW_ADHOC_11A
| DISALLOW_ADHOC_11A_TURB
, NO_REQ
, PSCAN_DEFER
, 0 },
289 {WORA_WORLD
, WORA_WORLD
, WORA_WORLD
, DISALLOW_ADHOC_11A
| DISALLOW_ADHOC_11A_TURB
, NO_REQ
, PSCAN_DEFER
, 0 },
293 * The following table is the master list for all different freqeuncy
294 * bands with the complete matrix of all possible flags and settings
295 * for each band if it is used in ANY reg domain.
298 #define DEF_REGDMN FCC1_FCCA
299 #define DEF_DMN_5 FCC1
300 #define DEF_DMN_2 FCCA
301 #define COUNTRY_ERD_FLAG 0x8000
302 #define WORLDWIDE_ROAMING_FLAG 0x4000
303 #define SUPER_DOMAIN_MASK 0x0fff
304 #define COUNTRY_CODE_MASK 0x03ff
305 #define CF_INTERFERENCE (CHANNEL_CW_INT | CHANNEL_RADAR_INT)
306 #define CHANNEL_14 (2484) /* 802.11g operation is not permitted on channel 14 */
307 #define IS_11G_CH14(_ch, _cf) \
308 (((_ch) == CHANNEL_14) && ((_cf) == CHANNEL_G))
314 CTRY_DEBUG
= 0x1ff, /* debug country code */
315 CTRY_DEFAULT
= 0 /* default country code */
319 HAL_CTRY_CODE countryCode
;
320 HAL_REG_DOMAIN regDmnEnum
;
324 HAL_BOOL allow11aTurbo
;
325 HAL_BOOL allow11gTurbo
;
326 HAL_BOOL allow11na
; /* HT-40 allowed in 5GHz? */
327 HAL_BOOL allow11ng
; /* HT-40 allowed in 2GHz? */
328 u16_t outdoorChanStart
;
329 } COUNTRY_CODE_TO_ENUM_RD
;
331 static COUNTRY_CODE_TO_ENUM_RD allCountries
[] = {
332 {CTRY_DEBUG
, NO_ENUMRD
, "DB", "DEBUG", YES
, YES
, YES
, YES
, YES
, 7000 },
333 {CTRY_DEFAULT
, DEF_REGDMN
, "NA", "NO_COUNTRY_SET", YES
, YES
, YES
, YES
, YES
, 7000 },
334 {CTRY_ALBANIA
, NULL1_WORLD
, "AL", "ALBANIA", YES
, NO
, YES
, NO
, YES
, 7000 },
335 {CTRY_ALGERIA
, NULL1_WORLD
, "DZ", "ALGERIA", YES
, NO
, YES
, NO
, YES
, 7000 },
336 {CTRY_ARGENTINA
, APL3_WORLD
, "AR", "ARGENTINA", YES
, NO
, NO
, NO
, NO
, 7000 },
337 {CTRY_ARMENIA
, ETSI4_WORLD
, "AM", "ARMENIA", YES
, NO
, YES
, NO
, YES
, 7000 },
338 {CTRY_AUSTRALIA
, FCC6_WORLD
, "AU", "AUSTRALIA", YES
, YES
, YES
, YES
, YES
, 7000 },
339 {CTRY_AUSTRIA
, ETSI2_WORLD
, "AT", "AUSTRIA", YES
, NO
, YES
, YES
, YES
, 7000 },
340 {CTRY_AZERBAIJAN
, ETSI4_WORLD
, "AZ", "AZERBAIJAN", YES
, YES
, YES
, YES
, YES
, 7000 },
341 {CTRY_BAHRAIN
, APL6_WORLD
, "BH", "BAHRAIN", YES
, NO
, YES
, NO
, YES
, 7000 },
342 {CTRY_BELARUS
, ETSI1_WORLD
, "BY", "BELARUS", YES
, NO
, YES
, YES
, YES
, 7000 },
343 {CTRY_BELGIUM
, ETSI1_WORLD
, "BE", "BELGIUM", YES
, NO
, YES
, YES
, YES
, 7000 },
344 {CTRY_BELIZE
, APL1_ETSIC
, "BZ", "BELIZE", YES
, YES
, YES
, YES
, YES
, 7000 },
345 {CTRY_BOLIVIA
, APL1_ETSIC
, "BO", "BOLVIA", YES
, YES
, YES
, YES
, YES
, 7000 },
346 {CTRY_BRAZIL
, FCC3_WORLD
, "BR", "BRAZIL", NO
, NO
, NO
, NO
, NO
, 7000 },
347 {CTRY_BRUNEI_DARUSSALAM
, APL1_WORLD
, "BN", "BRUNEI DARUSSALAM", YES
, YES
, YES
, YES
, YES
, 7000 },
348 {CTRY_BULGARIA
, ETSI6_WORLD
, "BG", "BULGARIA", YES
, NO
, YES
, YES
, YES
, 7000 },
349 {CTRY_CANADA
, FCC6_FCCA
, "CA", "CANADA", YES
, YES
, YES
, YES
, YES
, 7000 },
350 {CTRY_CHILE
, APL6_WORLD
, "CL", "CHILE", YES
, YES
, YES
, YES
, YES
, 7000 },
351 {CTRY_CHINA
, APL1_WORLD
, "CN", "CHINA", YES
, YES
, YES
, YES
, YES
, 7000 },
352 {CTRY_COLOMBIA
, FCC1_FCCA
, "CO", "COLOMBIA", YES
, NO
, YES
, NO
, YES
, 7000 },
353 {CTRY_COSTA_RICA
, FCC1_WORLD
, "CR", "COSTA RICA", YES
, NO
, YES
, NO
, YES
, 7000 },
354 {CTRY_CROATIA
, ETSI3_WORLD
, "HR", "CROATIA", YES
, NO
, YES
, NO
, YES
, 7000 },
355 {CTRY_CYPRUS
, ETSI3_WORLD
, "CY", "CYPRUS", YES
, YES
, YES
, YES
, YES
, 7000 },
356 {CTRY_CZECH
, ETSI3_WORLD
, "CZ", "CZECH REPUBLIC", YES
, NO
, YES
, YES
, YES
, 7000 },
357 {CTRY_DENMARK
, ETSI1_WORLD
, "DK", "DENMARK", YES
, NO
, YES
, YES
, YES
, 7000 },
358 {CTRY_DOMINICAN_REPUBLIC
, FCC1_FCCA
, "DO", "DOMINICAN REPUBLIC", YES
, YES
, YES
, YES
, YES
, 7000 },
359 {CTRY_ECUADOR
, FCC1_WORLD
, "EC", "ECUADOR", YES
, NO
, NO
, NO
, YES
, 7000 },
360 {CTRY_EGYPT
, ETSI3_WORLD
, "EG", "EGYPT", YES
, NO
, YES
, NO
, YES
, 7000 },
361 {CTRY_EL_SALVADOR
, FCC1_WORLD
, "SV", "EL SALVADOR", YES
, NO
, YES
, NO
, YES
, 7000 },
362 {CTRY_ESTONIA
, ETSI1_WORLD
, "EE", "ESTONIA", YES
, NO
, YES
, YES
, YES
, 7000 },
363 {CTRY_FINLAND
, ETSI1_WORLD
, "FI", "FINLAND", YES
, NO
, YES
, YES
, YES
, 7000 },
364 {CTRY_FRANCE
, ETSI1_WORLD
, "FR", "FRANCE", YES
, NO
, YES
, YES
, YES
, 7000 },
365 {CTRY_FRANCE2
, ETSI3_WORLD
, "F2", "FRANCE_RES", YES
, NO
, YES
, YES
, YES
, 7000 },
366 {CTRY_GEORGIA
, ETSI4_WORLD
, "GE", "GEORGIA", YES
, YES
, YES
, YES
, YES
, 7000 },
367 {CTRY_GERMANY
, ETSI1_WORLD
, "DE", "GERMANY", YES
, NO
, YES
, YES
, YES
, 7000 },
368 {CTRY_GREECE
, ETSI1_WORLD
, "GR", "GREECE", YES
, NO
, YES
, YES
, YES
, 7000 },
369 {CTRY_GUATEMALA
, FCC1_FCCA
, "GT", "GUATEMALA", YES
, YES
, YES
, YES
, YES
, 7000 },
370 {CTRY_HONDURAS
, NULL1_WORLD
, "HN", "HONDURAS", YES
, NO
, YES
, NO
, YES
, 7000 },
371 {CTRY_HONG_KONG
, FCC2_WORLD
, "HK", "HONG KONG", YES
, YES
, YES
, YES
, YES
, 7000 },
372 {CTRY_HUNGARY
, ETSI4_WORLD
, "HU", "HUNGARY", YES
, NO
, YES
, YES
, YES
, 7000 },
373 {CTRY_ICELAND
, ETSI1_WORLD
, "IS", "ICELAND", YES
, NO
, YES
, YES
, YES
, 7000 },
374 {CTRY_INDIA
, APL6_WORLD
, "IN", "INDIA", YES
, NO
, YES
, NO
, YES
, 7000 },
375 {CTRY_INDONESIA
, APL1_WORLD
, "ID", "INDONESIA", YES
, NO
, YES
, NO
, YES
, 7000 },
376 {CTRY_IRAN
, APL1_WORLD
, "IR", "IRAN", YES
, YES
, YES
, YES
, YES
, 7000 },
377 {CTRY_IRELAND
, ETSI1_WORLD
, "IE", "IRELAND", YES
, NO
, YES
, YES
, YES
, 7000 },
378 {CTRY_ISRAEL
, ETSI3_WORLD
, "IL", "ISRAEL", YES
, NO
, YES
, NO
, YES
, 7000 },
379 {CTRY_ISRAEL2
, NULL1_ETSIB
, "ISR", "ISRAEL_RES", YES
, NO
, YES
, NO
, YES
, 7000 },
380 {CTRY_ITALY
, ETSI1_WORLD
, "IT", "ITALY", YES
, NO
, YES
, YES
, YES
, 7000 },
381 {CTRY_JAMAICA
, ETSI1_WORLD
, "JM", "JAMAICA", YES
, NO
, YES
, YES
, YES
, 7000 },
382 {CTRY_JAPAN
, MKK1_MKKA
, "JP", "JAPAN", YES
, NO
, NO
, NO
, NO
, 7000 },
383 {CTRY_JAPAN1
, MKK1_MKKB
, "J1", "JAPAN1", YES
, NO
, NO
, NO
, NO
, 7000 },
384 {CTRY_JAPAN2
, MKK1_FCCA
, "J2", "JAPAN2", YES
, NO
, NO
, NO
, NO
, 7000 },
385 {CTRY_JAPAN3
, MKK2_MKKA
, "J3", "JAPAN3", YES
, NO
, NO
, NO
, NO
, 7000 },
386 {CTRY_JAPAN4
, MKK1_MKKA1
, "J4", "JAPAN4", YES
, NO
, NO
, NO
, NO
, 7000 },
387 {CTRY_JAPAN5
, MKK1_MKKA2
, "J5", "JAPAN5", YES
, NO
, NO
, NO
, NO
, 7000 },
388 {CTRY_JAPAN6
, MKK1_MKKC
, "J6", "JAPAN6", YES
, NO
, NO
, NO
, NO
, 7000 },
389 {CTRY_JAPAN7
, MKK3_MKKB
, "J7", "JAPAN7", YES
, NO
, NO
, NO
, NO
, 7000 },
390 {CTRY_JAPAN8
, MKK3_MKKA2
, "J8", "JAPAN8", YES
, NO
, NO
, NO
, NO
, 7000 },
391 {CTRY_JAPAN9
, MKK3_MKKC
, "J9", "JAPAN9", YES
, NO
, NO
, NO
, NO
, 7000 },
392 {CTRY_JAPAN10
, MKK4_MKKB
, "J10", "JAPAN10", YES
, NO
, NO
, NO
, NO
, 7000 },
393 {CTRY_JAPAN11
, MKK4_MKKA2
, "J11", "JAPAN11", YES
, NO
, NO
, NO
, NO
, 7000 },
394 {CTRY_JAPAN12
, MKK4_MKKC
, "J12", "JAPAN12", YES
, NO
, NO
, NO
, NO
, 7000 },
395 {CTRY_JAPAN13
, MKK5_MKKB
, "J13", "JAPAN13", YES
, NO
, NO
, NO
, NO
, 7000 },
396 {CTRY_JAPAN14
, MKK5_MKKA2
, "J14", "JAPAN14", YES
, NO
, NO
, NO
, NO
, 7000 },
397 {CTRY_JAPAN15
, MKK5_MKKC
, "J15", "JAPAN15", YES
, NO
, NO
, NO
, NO
, 7000 },
398 {CTRY_JAPAN16
, MKK6_MKKB
, "J16", "JAPAN16", YES
, NO
, NO
, NO
, NO
, 7000 },
399 {CTRY_JAPAN17
, MKK6_MKKA2
, "J17", "JAPAN17", YES
, NO
, NO
, NO
, NO
, 7000 },
400 {CTRY_JAPAN18
, MKK6_MKKC
, "J18", "JAPAN18", YES
, NO
, NO
, NO
, NO
, 7000 },
401 {CTRY_JAPAN19
, MKK7_MKKB
, "J19", "JAPAN19", YES
, NO
, NO
, NO
, NO
, 7000 },
402 {CTRY_JAPAN20
, MKK7_MKKA
, "J20", "JAPAN20", YES
, NO
, NO
, NO
, NO
, 7000 },
403 {CTRY_JAPAN21
, MKK7_MKKC
, "J21", "JAPAN21", YES
, NO
, NO
, NO
, NO
, 7000 },
404 {CTRY_JAPAN22
, MKK8_MKKB
, "J22", "JAPAN22", YES
, NO
, NO
, NO
, NO
, 7000 },
405 {CTRY_JAPAN23
, MKK8_MKKA2
, "J23", "JAPAN23", YES
, NO
, NO
, NO
, NO
, 7000 },
406 {CTRY_JAPAN24
, MKK8_MKKC
, "J24", "JAPAN24", YES
, NO
, NO
, NO
, NO
, 7000 },
407 {CTRY_JAPAN25
, MKK3_MKKA
, "J25", "JAPAN25", YES
, NO
, NO
, NO
, NO
, 7000 },
408 {CTRY_JAPAN26
, MKK3_MKKA1
, "J26", "JAPAN26", YES
, NO
, NO
, NO
, NO
, 7000 },
409 {CTRY_JAPAN27
, MKK3_FCCA
, "J27", "JAPAN27", YES
, NO
, NO
, NO
, NO
, 7000 },
410 {CTRY_JAPAN28
, MKK4_MKKA1
, "J28", "JAPAN28", YES
, NO
, NO
, NO
, NO
, 7000 },
411 {CTRY_JAPAN29
, MKK4_FCCA
, "J29", "JAPAN29", YES
, NO
, NO
, NO
, NO
, 7000 },
412 {CTRY_JAPAN30
, MKK6_MKKA1
, "J30", "JAPAN30", YES
, NO
, NO
, NO
, NO
, 7000 },
413 {CTRY_JAPAN31
, MKK6_FCCA
, "J31", "JAPAN31", YES
, NO
, NO
, NO
, NO
, 7000 },
414 {CTRY_JAPAN32
, MKK7_MKKA1
, "J32", "JAPAN32", YES
, NO
, NO
, NO
, NO
, 7000 },
415 {CTRY_JAPAN33
, MKK7_FCCA
, "J33", "JAPAN33", YES
, NO
, NO
, NO
, NO
, 7000 },
416 {CTRY_JAPAN34
, MKK9_MKKA
, "J34", "JAPAN34", YES
, NO
, NO
, NO
, NO
, 7000 },
417 {CTRY_JAPAN35
, MKK10_MKKA
, "J35", "JAPAN35", YES
, NO
, NO
, NO
, NO
, 7000 },
418 {CTRY_JAPAN36
, MKK4_MKKA
, "J36", "JAPAN36", YES
, NO
, NO
, NO
, NO
, 7000 },
419 {CTRY_JAPAN37
, MKK9_FCCA
, "J37", "JAPAN37", YES
, NO
, NO
, NO
, NO
, 7000 },
420 {CTRY_JAPAN38
, MKK9_MKKA1
, "J38", "JAPAN38", YES
, NO
, NO
, NO
, NO
, 7000 },
421 {CTRY_JAPAN39
, MKK9_MKKC
, "J39", "JAPAN39", YES
, NO
, NO
, NO
, NO
, 7000 },
422 {CTRY_JAPAN40
, MKK10_MKKA2
, "J40", "JAPAN40", YES
, NO
, NO
, NO
, NO
, 7000 },
423 {CTRY_JAPAN41
, MKK10_FCCA
, "J41", "JAPAN41", YES
, NO
, NO
, NO
, NO
, 7000 },
424 {CTRY_JAPAN42
, MKK10_MKKA1
, "J42", "JAPAN42", YES
, NO
, NO
, NO
, NO
, 7000 },
425 {CTRY_JAPAN43
, MKK10_MKKC
, "J43", "JAPAN43", YES
, NO
, NO
, NO
, NO
, 7000 },
426 {CTRY_JAPAN44
, MKK10_MKKA2
, "J44", "JAPAN44", YES
, NO
, NO
, NO
, NO
, 7000 },
427 {CTRY_JAPAN45
, MKK11_MKKA
, "J45", "JAPAN45", YES
, NO
, NO
, NO
, NO
, 7000 },
428 {CTRY_JAPAN46
, MKK11_FCCA
, "J46", "JAPAN46", YES
, NO
, NO
, NO
, NO
, 7000 },
429 {CTRY_JAPAN47
, MKK11_MKKA1
, "J47", "JAPAN47", YES
, NO
, NO
, NO
, NO
, 7000 },
430 {CTRY_JAPAN48
, MKK11_MKKC
, "J48", "JAPAN48", YES
, NO
, NO
, NO
, NO
, 7000 },
431 {CTRY_JAPAN49
, MKK11_MKKA2
, "J49", "JAPAN49", YES
, NO
, NO
, NO
, NO
, 7000 },
432 {CTRY_JAPAN50
, MKK12_MKKA
, "J50", "JAPAN50", YES
, NO
, NO
, NO
, NO
, 7000 },
433 {CTRY_JAPAN51
, MKK12_FCCA
, "J51", "JAPAN51", YES
, NO
, NO
, NO
, NO
, 7000 },
434 {CTRY_JAPAN52
, MKK12_MKKA1
, "J52", "JAPAN52", YES
, NO
, NO
, NO
, NO
, 7000 },
435 {CTRY_JAPAN53
, MKK12_MKKC
, "J53", "JAPAN53", YES
, NO
, NO
, NO
, NO
, 7000 },
436 {CTRY_JAPAN54
, MKK12_MKKA2
, "J54", "JAPAN54", YES
, NO
, NO
, NO
, NO
, 7000 },
437 {CTRY_JORDAN
, ETSI2_WORLD
, "JO", "JORDAN", YES
, NO
, YES
, NO
, YES
, 7000 },
438 {CTRY_KAZAKHSTAN
, NULL1_WORLD
, "KZ", "KAZAKHSTAN", YES
, NO
, YES
, NO
, YES
, 7000 },
439 {CTRY_KOREA_NORTH
, APL9_WORLD
, "KP", "NORTH KOREA", YES
, NO
, NO
, YES
, YES
, 7000 },
440 {CTRY_KOREA_ROC
, APL9_WORLD
, "KR", "KOREA REPUBLIC", YES
, NO
, NO
, NO
, NO
, 7000 },
441 {CTRY_KOREA_ROC2
, APL2_APLD
, "K2", "KOREA REPUBLIC2", YES
, NO
, NO
, NO
, NO
, 7000 },
442 {CTRY_KOREA_ROC3
, APL9_WORLD
, "K3", "KOREA REPUBLIC3", YES
, NO
, NO
, NO
, NO
, 7000 },
443 {CTRY_KUWAIT
, NULL1_WORLD
, "KW", "KUWAIT", YES
, NO
, YES
, NO
, YES
, 7000 },
444 {CTRY_LATVIA
, ETSI1_WORLD
, "LV", "LATVIA", YES
, NO
, YES
, YES
, YES
, 7000 },
445 {CTRY_LEBANON
, NULL1_WORLD
, "LB", "LEBANON", YES
, NO
, YES
, NO
, YES
, 7000 },
446 {CTRY_LIECHTENSTEIN
, ETSI1_WORLD
, "LI", "LIECHTENSTEIN", YES
, NO
, YES
, YES
, YES
, 7000 },
447 {CTRY_LITHUANIA
, ETSI1_WORLD
, "LT", "LITHUANIA", YES
, NO
, YES
, YES
, YES
, 7000 },
448 {CTRY_LUXEMBOURG
, ETSI1_WORLD
, "LU", "LUXEMBOURG", YES
, NO
, YES
, YES
, YES
, 7000 },
449 {CTRY_MACAU
, FCC2_WORLD
, "MO", "MACAU", YES
, YES
, YES
, YES
, YES
, 7000 },
450 {CTRY_MACEDONIA
, NULL1_WORLD
, "MK", "MACEDONIA", YES
, NO
, YES
, NO
, YES
, 7000 },
451 {CTRY_MALAYSIA
, APL8_WORLD
, "MY", "MALAYSIA", NO
, NO
, NO
, NO
, NO
, 7000 },
452 {CTRY_MALTA
, ETSI1_WORLD
, "MT", "MALTA", YES
, NO
, YES
, YES
, YES
, 7000 },
453 {CTRY_MEXICO
, FCC1_FCCA
, "MX", "MEXICO", YES
, YES
, YES
, YES
, YES
, 7000 },
454 {CTRY_MONACO
, ETSI4_WORLD
, "MC", "MONACO", YES
, YES
, YES
, YES
, YES
, 7000 },
455 {CTRY_MOROCCO
, NULL1_WORLD
, "MA", "MOROCCO", YES
, NO
, YES
, NO
, YES
, 7000 },
456 {CTRY_NETHERLANDS
, ETSI1_WORLD
, "NL", "NETHERLANDS", YES
, NO
, YES
, YES
, YES
, 7000 },
457 {CTRY_NETHERLANDS_ANT
, ETSI1_WORLD
, "AN", "NETHERLANDS-ANTILLES", YES
, NO
, YES
, YES
, YES
, 7000 },
458 {CTRY_NEW_ZEALAND
, FCC2_ETSIC
, "NZ", "NEW ZEALAND", YES
, NO
, YES
, NO
, YES
, 7000 },
459 {CTRY_NORWAY
, ETSI1_WORLD
, "NO", "NORWAY", YES
, NO
, YES
, YES
, YES
, 7000 },
460 {CTRY_OMAN
, APL6_WORLD
, "OM", "OMAN", YES
, NO
, YES
, NO
, YES
, 7000 },
461 {CTRY_PAKISTAN
, NULL1_WORLD
, "PK", "PAKISTAN", YES
, NO
, YES
, NO
, YES
, 7000 },
462 {CTRY_PANAMA
, FCC1_FCCA
, "PA", "PANAMA", YES
, YES
, YES
, YES
, YES
, 7000 },
463 {CTRY_PERU
, APL1_WORLD
, "PE", "PERU", YES
, NO
, YES
, NO
, YES
, 7000 },
464 {CTRY_PHILIPPINES
, APL1_WORLD
, "PH", "PHILIPPINES", YES
, YES
, YES
, YES
, YES
, 7000 },
465 {CTRY_POLAND
, ETSI1_WORLD
, "PL", "POLAND", YES
, NO
, YES
, YES
, YES
, 7000 },
466 {CTRY_PORTUGAL
, ETSI1_WORLD
, "PT", "PORTUGAL", YES
, NO
, YES
, YES
, YES
, 7000 },
467 {CTRY_PUERTO_RICO
, FCC1_FCCA
, "PR", "PUERTO RICO", YES
, YES
, YES
, YES
, YES
, 7000 },
468 {CTRY_QATAR
, NULL1_WORLD
, "QA", "QATAR", YES
, NO
, YES
, NO
, YES
, 7000 },
469 {CTRY_ROMANIA
, NULL1_WORLD
, "RO", "ROMANIA", YES
, NO
, YES
, NO
, YES
, 7000 },
470 {CTRY_RUSSIA
, NULL1_WORLD
, "RU", "RUSSIA", YES
, NO
, YES
, NO
, YES
, 7000 },
471 {CTRY_SAUDI_ARABIA
, NULL1_WORLD
, "SA", "SAUDI ARABIA", YES
, NO
, YES
, NO
, YES
, 7000 },
472 {CTRY_SERBIA_MONT
, ETSI1_WORLD
, "CS", "SERBIA & MONTENEGRO", YES
, NO
, YES
, YES
, YES
, 7000 },
473 {CTRY_SINGAPORE
, APL6_WORLD
, "SG", "SINGAPORE", YES
, YES
, YES
, YES
, YES
, 7000 },
474 {CTRY_SLOVAKIA
, ETSI1_WORLD
, "SK", "SLOVAK REPUBLIC", YES
, NO
, YES
, YES
, YES
, 7000 },
475 {CTRY_SLOVENIA
, ETSI1_WORLD
, "SI", "SLOVENIA", YES
, NO
, YES
, YES
, YES
, 7000 },
476 {CTRY_SOUTH_AFRICA
, FCC3_WORLD
, "ZA", "SOUTH AFRICA", YES
, NO
, YES
, NO
, YES
, 7000 },
477 {CTRY_SPAIN
, ETSI1_WORLD
, "ES", "SPAIN", YES
, NO
, YES
, YES
, YES
, 7000 },
478 {CTRY_SRILANKA
, FCC3_WORLD
, "LK", "SRI LANKA", YES
, NO
, YES
, NO
, YES
, 7000 },
479 {CTRY_SWEDEN
, ETSI1_WORLD
, "SE", "SWEDEN", YES
, NO
, YES
, YES
, YES
, 7000 },
480 {CTRY_SWITZERLAND
, ETSI1_WORLD
, "CH", "SWITZERLAND", YES
, NO
, YES
, YES
, YES
, 7000 },
481 {CTRY_SYRIA
, NULL1_WORLD
, "SY", "SYRIA", YES
, NO
, YES
, NO
, YES
, 7000 },
482 {CTRY_TAIWAN
, APL3_FCCA
, "TW", "TAIWAN", YES
, YES
, YES
, YES
, YES
, 7000 },
483 {CTRY_THAILAND
, NULL1_WORLD
, "TH", "THAILAND", YES
, NO
, YES
, NO
, YES
, 7000 },
484 {CTRY_TRINIDAD_Y_TOBAGO
, ETSI4_WORLD
, "TT", "TRINIDAD & TOBAGO", YES
, NO
, YES
, NO
, YES
, 7000 },
485 {CTRY_TUNISIA
, ETSI3_WORLD
, "TN", "TUNISIA", YES
, NO
, YES
, NO
, YES
, 7000 },
486 {CTRY_TURKEY
, ETSI3_WORLD
, "TR", "TURKEY", YES
, NO
, YES
, NO
, YES
, 7000 },
487 {CTRY_UKRAINE
, NULL1_WORLD
, "UA", "UKRAINE", YES
, NO
, YES
, NO
, YES
, 7000 },
488 {CTRY_UAE
, NULL1_WORLD
, "AE", "UNITED ARAB EMIRATES", YES
, NO
, YES
, NO
, YES
, 7000 },
489 {CTRY_UNITED_KINGDOM
, ETSI1_WORLD
, "GB", "UNITED KINGDOM", YES
, NO
, YES
, NO
, YES
, 7000 },
490 {CTRY_UNITED_STATES
, FCC3_FCCA
, "US", "UNITED STATES", YES
, YES
, YES
, YES
, YES
, 5825 },
491 {CTRY_UNITED_STATES_FCC49
, FCC4_FCCA
, "PS", "UNITED STATES (PUBLIC SAFETY)", YES
, YES
, YES
, YES
, YES
, 7000 },
492 {CTRY_URUGUAY
, FCC1_WORLD
, "UY", "URUGUAY", YES
, NO
, YES
, NO
, YES
, 7000 },
493 {CTRY_UZBEKISTAN
, FCC3_FCCA
, "UZ", "UZBEKISTAN", YES
, YES
, YES
, YES
, YES
, 7000 },
494 {CTRY_VENEZUELA
, APL2_ETSIC
, "VE", "VENEZUELA", YES
, NO
, YES
, NO
, YES
, 7000 },
495 {CTRY_VIET_NAM
, NULL1_WORLD
, "VN", "VIET NAM", YES
, NO
, YES
, NO
, YES
, 7000 },
496 {CTRY_YEMEN
, NULL1_WORLD
, "YE", "YEMEN", YES
, NO
, YES
, NO
, YES
, 7000 },
497 {CTRY_ZIMBABWE
, NULL1_WORLD
, "ZW", "ZIMBABWE", YES
, NO
, YES
, NO
, YES
, 7000 }
500 typedef struct RegDmnFreqBand
{
501 u16_t lowChannel
; /* Low channel center in MHz */
502 u16_t highChannel
; /* High Channel center in MHz */
503 u8_t powerDfs
; /* Max power (dBm) for channel
504 range when using DFS */
505 u8_t antennaMax
; /* Max allowed antenna gain */
506 u8_t channelBW
; /* Bandwidth of the channel */
507 u8_t channelSep
; /* Channel separation within
509 u64_t useDfs
; /* Use DFS in the RegDomain
510 if corresponding bit is set */
511 u64_t usePassScan
; /* Use Passive Scan in the RegDomain
512 if corresponding bit is set */
513 u8_t regClassId
; /* Regulatory class id */
514 u8_t useExtChanDfs
; /* Regulatory class id */
517 /* Bit masks for DFS per regdomain */
520 NO_DFS
= 0x0000000000000000ULL
,
521 DFS_FCC3
= 0x0000000000000001ULL
,
522 DFS_ETSI
= 0x0000000000000002ULL
,
523 DFS_MKK4
= 0x0000000000000004ULL
,
526 /* The table of frequency bands is indexed by a bitmask. The ordering
527 * must be consistent with the enum below. When adding a new
528 * frequency band, be sure to match the location in the enum with the
533 * 5GHz 11A channel tags
612 static REG_DMN_FREQ_BAND regDmn5GhzFreq
[] = {
613 { 4915, 4925, 23, 0, 10, 5, NO_DFS
, PSCAN_MKK2
, 16, 0 }, /* F1_4915_4925 */
614 { 4935, 4945, 23, 0, 10, 5, NO_DFS
, PSCAN_MKK2
, 16, 0 }, /* F1_4935_4945 */
615 { 4920, 4980, 23, 0, 20, 20, NO_DFS
, PSCAN_MKK2
, 7, 0 }, /* F1_4920_4980 */
616 { 4942, 4987, 27, 6, 5, 5, DFS_FCC3
, PSCAN_FCC
, 0, 0 }, /* F1_4942_4987 */
617 { 4945, 4985, 30, 6, 10, 5, DFS_FCC3
, PSCAN_FCC
, 0, 0 }, /* F1_4945_4985 */
618 { 4950, 4980, 33, 6, 20, 5, DFS_FCC3
, PSCAN_FCC
, 0, 0 }, /* F1_4950_4980 */
619 { 5035, 5040, 23, 0, 10, 5, NO_DFS
, PSCAN_MKK2
, 12, 0 }, /* F1_5035_5040 */
620 { 5040, 5080, 23, 0, 20, 20, NO_DFS
, PSCAN_MKK2
, 2, 0 }, /* F1_5040_5080 */
621 { 5055, 5055, 23, 0, 10, 5, NO_DFS
, PSCAN_MKK2
, 12, 0 }, /* F1_5055_5055 */
623 { 5120, 5240, 5, 6, 20, 20, NO_DFS
, NO_PSCAN
, 0, 0 }, /* F1_5120_5240 */
625 { 5170, 5230, 23, 0, 20, 20, NO_DFS
, PSCAN_MKK1
| PSCAN_MKK2
, 1, 0 }, /* F1_5170_5230 */
626 { 5170, 5230, 20, 0, 20, 20, NO_DFS
, PSCAN_MKK1
| PSCAN_MKK2
, 1, 0 }, /* F2_5170_5230 */
628 { 5180, 5240, 15, 0, 20, 20, NO_DFS
, PSCAN_FCC
| PSCAN_ETSI
, 0, 0 }, /* F1_5180_5240 */
629 { 5180, 5240, 17, 6, 20, 20, NO_DFS
, PSCAN_FCC
, 1, 0 }, /* F2_5180_5240 */
630 { 5180, 5240, 18, 0, 20, 20, NO_DFS
, PSCAN_FCC
| PSCAN_ETSI
, 0, 0 }, /* F3_5180_5240 */
631 { 5180, 5240, 20, 0, 20, 20, NO_DFS
, PSCAN_FCC
| PSCAN_ETSI
, 0, 0 }, /* F4_5180_5240 */
632 { 5180, 5240, 23, 0, 20, 20, NO_DFS
, PSCAN_FCC
| PSCAN_ETSI
, 0, 0 }, /* F5_5180_5240 */
633 { 5180, 5240, 23, 6, 20, 20, NO_DFS
, PSCAN_FCC
, 0, 0 }, /* F6_5180_5240 */
634 { 5180, 5240, 23, 6, 20, 20, NO_DFS
, NO_PSCAN
, 0 }, /* F7_5180_5240 */
636 { 5180, 5320, 20, 6, 20, 20, DFS_ETSI
, PSCAN_ETSI
, 0, 0 }, /* F1_5180_5320 */
638 { 5240, 5280, 23, 0, 20, 20, DFS_FCC3
, PSCAN_FCC
| PSCAN_ETSI
, 0, 0 }, /* F1_5240_5280 */
640 { 5260, 5280, 23, 0, 20, 20, DFS_FCC3
| DFS_ETSI
, PSCAN_FCC
| PSCAN_ETSI
, 0, 0 }, /* F1_5260_5280 */
642 { 5260, 5320, 18, 0, 20, 20, DFS_FCC3
| DFS_ETSI
, PSCAN_FCC
| PSCAN_ETSI
, 0, 0 }, /* F1_5260_5320 */
644 { 5260, 5320, 20, 0, 20, 20, DFS_FCC3
| DFS_ETSI
| DFS_MKK4
, PSCAN_FCC
| PSCAN_ETSI
| PSCAN_MKK3
, 0, 0 },
647 { 5260, 5320, 20, 6, 20, 20, DFS_FCC3
| DFS_ETSI
, PSCAN_FCC
, 2, 0 }, /* F3_5260_5320 */
648 { 5260, 5320, 23, 6, 20, 20, DFS_FCC3
| DFS_ETSI
, PSCAN_FCC
, 2, 0 }, /* F4_5260_5320 */
649 { 5260, 5320, 23, 6, 20, 20, DFS_FCC3
| DFS_ETSI
, PSCAN_FCC
, 0, 0 }, /* F5_5260_5320 */
650 { 5260, 5320, 30, 0, 20, 20, NO_DFS
, NO_PSCAN
, 0, 0 }, /* F6_5260_5320 */
651 { 5260, 5320, 17, 6, 20, 20, DFS_ETSI
, PSCAN_ETSI
, 0, 0 }, /* F7_5260_5320 */
653 { 5260, 5700, 5, 6, 20, 20, DFS_FCC3
| DFS_ETSI
, NO_PSCAN
, 0, 0 }, /* F1_5260_5700 */
655 { 5280, 5320, 17, 6, 20, 20, DFS_FCC3
| DFS_ETSI
, PSCAN_FCC
, 0, 0 }, /* F1_5280_5320 */
657 { 5500, 5580, 23, 6, 20, 20, DFS_FCC3
, PSCAN_FCC
, 0}, /* F1_5500_5580 */
659 { 5500, 5620, 30, 6, 20, 20, DFS_ETSI
, PSCAN_ETSI
, 0, 0 }, /* F1_5500_5620 */
661 { 5500, 5700, 20, 6, 20, 20, DFS_FCC3
| DFS_ETSI
, PSCAN_FCC
, 4, 0 }, /* F1_5500_5700 */
662 { 5500, 5700, 27, 0, 20, 20, DFS_FCC3
| DFS_ETSI
, PSCAN_FCC
| PSCAN_ETSI
, 0, 0 }, /* F2_5500_5700 */
663 { 5500, 5700, 30, 0, 20, 20, DFS_FCC3
| DFS_ETSI
, PSCAN_FCC
| PSCAN_ETSI
, 0, 0 }, /* F3_5500_5700 */
664 { 5500, 5700, 20, 0, 20, 20, DFS_FCC3
| DFS_ETSI
| DFS_MKK4
, PSCAN_MKK3
| PSCAN_FCC
, 0, 0 },
667 { 5660, 5700, 23, 6, 20, 20, DFS_FCC3
, PSCAN_FCC
, 0}, /* F1_5660_5700 */
669 { 5745, 5805, 23, 0, 20, 20, NO_DFS
, NO_PSCAN
, 0, 0 }, /* F1_5745_5805 */
670 { 5745, 5805, 30, 6, 20, 20, NO_DFS
, NO_PSCAN
, 0, 0 }, /* F2_5745_5805 */
671 { 5745, 5805, 30, 6, 20, 20, DFS_ETSI
, PSCAN_ETSI
, 0, 0 }, /* F3_5745_5805 */
672 { 5745, 5825, 5, 6, 20, 20, NO_DFS
, NO_PSCAN
, 0, 0 }, /* F1_5745_5825 */
673 { 5745, 5825, 17, 0, 20, 20, NO_DFS
, NO_PSCAN
, 0, 0 }, /* F2_5745_5825 */
674 { 5745, 5825, 20, 0, 20, 20, DFS_ETSI
, NO_PSCAN
, 0, 0 }, /* F3_5745_5825 */
675 { 5745, 5825, 30, 0, 20, 20, NO_DFS
, NO_PSCAN
, 0, 0 }, /* F4_5745_5825 */
676 { 5745, 5825, 30, 6, 20, 20, NO_DFS
, NO_PSCAN
, 3, 0 }, /* F5_5745_5825 */
677 { 5745, 5825, 30, 6, 20, 20, NO_DFS
, NO_PSCAN
, 0, 0 }, /* F6_5745_5825 */
680 * Below are the world roaming channels
681 * All WWR domains have no power limit, instead use the card's CTL
682 * or max power settings.
684 { 4920, 4980, 30, 0, 20, 20, NO_DFS
, PSCAN_WWR
, 0, 0 }, /* W1_4920_4980 */
685 { 5040, 5080, 30, 0, 20, 20, NO_DFS
, PSCAN_WWR
, 0 }, /* W1_5040_5080 */
686 { 5170, 5230, 30, 0, 20, 20, DFS_FCC3
| DFS_ETSI
, PSCAN_WWR
, 0, 0 }, /* W1_5170_5230 */
687 { 5180, 5240, 30, 0, 20, 20, DFS_FCC3
| DFS_ETSI
, PSCAN_WWR
, 0, 0 }, /* W1_5180_5240 */
688 { 5260, 5320, 30, 0, 20, 20, DFS_FCC3
| DFS_ETSI
, PSCAN_WWR
, 0, 0 }, /* W1_5260_5320 */
689 { 5745, 5825, 30, 0, 20, 20, NO_DFS
, PSCAN_WWR
, 0, 0 }, /* W1_5745_5825 */
690 { 5500, 5700, 30, 0, 20, 20, DFS_FCC3
| DFS_ETSI
, PSCAN_WWR
, 0, 0 }, /* W1_5500_5700 */
691 { 5260, 5320, 30, 0, 20, 20, NO_DFS
, NO_PSCAN
, 0, 0 }, /* W2_5260_5320 */
692 { 5180, 5240, 30, 0, 20, 20, NO_DFS
, NO_PSCAN
, 0, 0 }, /* W2_5180_5240 */
693 { 5825, 5825, 30, 0, 20, 20, NO_DFS
, PSCAN_WWR
, 0, 0 }, /* W2_5825_5825 */
696 * 5GHz Turbo (dynamic & static) tags
735 * 2GHz 11b channel tags
775 * 2GHz 11g channel tags
809 static REG_DMN_FREQ_BAND regDmn2Ghz11gFreq
[] = {
810 { 2312, 2372, 5, 6, 20, 5, NO_DFS
, NO_PSCAN
, 0, 0}, /* G1_2312_2372 */
811 { 2312, 2372, 20, 0, 20, 5, NO_DFS
, NO_PSCAN
, 0, 0}, /* G2_2312_2372 */
813 { 2412, 2472, 5, 6, 20, 5, NO_DFS
, NO_PSCAN
, 0, 0}, /* G1_2412_2472 */
814 { 2412, 2472, 20, 0, 20, 5, NO_DFS
, PSCAN_MKKA_G
, 0, 0}, /* G2_2412_2472 */
815 { 2412, 2472, 30, 0, 20, 5, NO_DFS
, NO_PSCAN
, 0, 0}, /* G3_2412_2472 */
817 { 2412, 2462, 27, 6, 20, 5, NO_DFS
, NO_PSCAN
, 0, 0}, /* G1_2412_2462 */
818 { 2412, 2462, 20, 0, 20, 5, NO_DFS
, PSCAN_MKKA_G
, 0, 0}, /* G2_2412_2462 */
819 { 2432, 2442, 20, 0, 20, 5, NO_DFS
, NO_PSCAN
, 0, 0}, /* G1_2432_2442 */
821 { 2457, 2472, 20, 0, 20, 5, NO_DFS
, NO_PSCAN
, 0, 0}, /* G1_2457_2472 */
823 { 2512, 2732, 5, 6, 20, 5, NO_DFS
, NO_PSCAN
, 0, 0}, /* G1_2512_2732 */
825 { 2467, 2472, 20, 0, 20, 5, NO_DFS
, PSCAN_MKKA2
| PSCAN_MKKA
, 0, 0 }, /* G1_2467_2472 */
828 * WWR open up the power to 20dBm
831 { 2312, 2372, 20, 0, 20, 5, NO_DFS
, NO_PSCAN
, 0, 0}, /* WG1_2312_2372 */
832 { 2412, 2412, 20, 0, 20, 5, NO_DFS
, NO_PSCAN
, 0, 0}, /* WG1_2412_2412 */
833 { 2417, 2432, 20, 0, 20, 5, NO_DFS
, NO_PSCAN
, 0, 0}, /* WG1_2417_2432 */
834 { 2437, 2442, 20, 0, 20, 5, NO_DFS
, NO_PSCAN
, 0, 0}, /* WG1_2437_2442 */
835 { 2447, 2457, 20, 0, 20, 5, NO_DFS
, NO_PSCAN
, 0, 0}, /* WG1_2447_2457 */
836 { 2462, 2462, 20, 0, 20, 5, NO_DFS
, NO_PSCAN
, 0, 0}, /* WG1_2462_2462 */
837 { 2467, 2467, 20, 0, 20, 5, NO_DFS
, PSCAN_WWR
| IS_ECM_CHAN
, 0, 0}, /* WG1_2467_2467 */
838 { 2467, 2467, 20, 0, 20, 5, NO_DFS
, NO_PSCAN
| IS_ECM_CHAN
, 0, 0}, /* WG2_2467_2467 */
839 { 2472, 2472, 20, 0, 20, 5, NO_DFS
, PSCAN_WWR
| IS_ECM_CHAN
, 0, 0}, /* WG1_2472_2472 */
840 { 2472, 2472, 20, 0, 20, 5, NO_DFS
, NO_PSCAN
| IS_ECM_CHAN
, 0, 0}, /* WG2_2472_2472 */
843 * 2GHz Dynamic turbo tags
855 * 2GHz 11n frequency tags
862 NG_DEMO_ALL_CHANNELS
,
866 * 5GHz 11n frequency tags
898 NA_DEMO_ALL_CHANNELS
,
901 typedef struct regDomain
{
902 u16_t regDmnEnum
; /* value from EnumRd table */
903 u8_t conformanceTestLimit
;
904 u64_t dfsMask
; /* DFS bitmask for 5Ghz tables */
905 u64_t pscan
; /* Bitmask for passive scan */
906 u32_t flags
; /* Requirement flags (AdHoc disallow, noise
907 floor cal needed, etc) */
908 u64_t chan11a
[BMLEN
];/* 128 bit bitmask for channel/band
910 u64_t chan11a_turbo
[BMLEN
];/* 128 bit bitmask for channel/band
912 u64_t chan11a_dyn_turbo
[BMLEN
]; /* 128 bit bitmask for channel/band
914 u64_t chan11b
[BMLEN
];/* 128 bit bitmask for channel/band
916 u64_t chan11g
[BMLEN
];/* 128 bit bitmask for channel/band
918 u64_t chan11g_turbo
[BMLEN
];/* 128 bit bitmask for channel/band
920 u64_t chan11ng
[BMLEN
];/* 128 bit bitmask for 11n in 2GHz */
921 u64_t chan11na
[BMLEN
];/* 128 bit bitmask for 11n in 5GHz */
924 static REG_DOMAIN regDomains
[] = {
926 {DEBUG_REG_DMN
, FCC
, NO_DFS
, NO_PSCAN
, NO_REQ
,
927 BM(F1_5120_5240
, F1_5260_5700
, F1_5745_5825
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
928 BM(T1_5130_5210
, T1_5250_5330
, T1_5370_5490
, T1_5530_5650
, T1_5150_5190
, T1_5230_5310
, T1_5350_5470
, T1_5510_5670
, -1, -1, -1, -1),
929 BM(T1_5200_5240
, T1_5280_5280
, T1_5540_5660
, T1_5765_5805
, -1, -1, -1, -1, -1, -1, -1, -1),
930 BM(F1_2312_2372
, F1_2412_2472
, F1_2484_2484
, F1_2512_2732
, -1, -1, -1, -1, -1, -1, -1, -1),
931 BM(G1_2312_2372
, G1_2412_2472
, G1_2512_2732
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
932 BM(T1_2312_2372
, T1_2437_2437
, T1_2512_2732
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
933 BM(NG_DEMO_ALL_CHANNELS
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
934 BM(NA_DEMO_ALL_CHANNELS
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1)},
936 {APL1
, ETSI
, NO_DFS
, NO_PSCAN
, NO_REQ
,
937 BM(F4_5745_5825
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
944 BM(NA4_5755_5795
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1)},
946 {APL2
, ETSI
, NO_DFS
, NO_PSCAN
, NO_REQ
,
947 BM(F1_5745_5805
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
954 BM(NA3_5755_5795
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1)},
956 {APL3
, FCC
, NO_DFS
, NO_PSCAN
, NO_REQ
,
957 BM(F1_5280_5320
, F2_5745_5805
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
964 BM(NA1_5310_5310
, NA4_5755_5795
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1)},
966 {APL4
, ETSI
, NO_DFS
, NO_PSCAN
, NO_REQ
,
967 BM(F4_5180_5240
, F3_5745_5825
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
974 BM(NA4_5190_5230
, NA2_5755_5795
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1)},
976 {APL5
, ETSI
, NO_DFS
, NO_PSCAN
, NO_REQ
,
977 BM(F2_5745_5825
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
984 BM(NA1_5755_5795
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1)},
986 {APL6
, ETSI
, DFS_ETSI
, PSCAN_FCC_T
| PSCAN_FCC
, NO_REQ
,
987 BM(F4_5180_5240
, F2_5260_5320
, F3_5745_5825
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
988 BM(T2_5210_5210
, T1_5250_5290
, T1_5760_5800
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
994 BM(NA4_5190_5230
, NA2_5270_5310
, NA2_5755_5795
, -1, -1, -1, -1, -1, -1, -1, -1, -1)},
996 {APL7
, FCC
, NO_DFS
, PSCAN_FCC_T
| PSCAN_FCC
, NO_REQ
,
997 BM(F7_5260_5320
, F4_5500_5700
, F3_5745_5805
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1004 BM(NA1_5310_5310
, NA2_5755_5795
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1)},
1005 {APL8
, ETSI
, NO_DFS
, NO_PSCAN
, DISALLOW_ADHOC_11A
|DISALLOW_ADHOC_11A_TURB
,
1006 BM(F6_5260_5320
, F4_5745_5825
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1013 BM(NA4_5270_5310
, NA4_5755_5795
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1)},
1015 {APL9
, ETSI
, DFS_ETSI
, PSCAN_ETSI
, DISALLOW_ADHOC_11A
|DISALLOW_ADHOC_11A_TURB
,
1016 BM(F1_5180_5320
, F1_5500_5620
, F3_5745_5805
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1023 BM(NA4_5190_5230
, NA2_5270_5310
, NA1_5510_5630
, NA4_5755_5795
, -1, -1, -1, -1, -1, -1, -1, -1)},
1025 {ETSI1
, ETSI
, DFS_ETSI
, PSCAN_ETSI
, DISALLOW_ADHOC_11A
| DISALLOW_ADHOC_11A_TURB
,
1026 BM(W2_5180_5240
, F2_5260_5320
, F2_5500_5700
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1033 BM(NA4_5190_5230
, NA2_5270_5310
, NA2_5510_5670
, -1, -1, -1, -1, -1, -1, -1, -1, -1)},
1035 {ETSI2
, ETSI
, DFS_ETSI
, PSCAN_ETSI
, DISALLOW_ADHOC_11A
| DISALLOW_ADHOC_11A_TURB
,
1036 BM(F3_5180_5240
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1043 BM(NA3_5190_5230
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1)},
1045 {ETSI3
, ETSI
, DFS_ETSI
, PSCAN_ETSI
, DISALLOW_ADHOC_11A
| DISALLOW_ADHOC_11A_TURB
,
1046 BM(W2_5180_5240
, F2_5260_5320
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1053 BM(NA4_5190_5230
, NA2_5270_5310
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1)},
1055 {ETSI4
, ETSI
, DFS_ETSI
, PSCAN_ETSI
, DISALLOW_ADHOC_11A
| DISALLOW_ADHOC_11A_TURB
,
1056 BM(F3_5180_5240
, F1_5260_5320
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1063 BM(NA3_5190_5230
, NA1_5270_5310
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1)},
1065 {ETSI5
, ETSI
, DFS_ETSI
, PSCAN_ETSI
, DISALLOW_ADHOC_11A
| DISALLOW_ADHOC_11A_TURB
,
1066 BM(F1_5180_5240
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1073 BM(NA1_5190_5230
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1)},
1075 {ETSI6
, ETSI
, DFS_ETSI
, PSCAN_ETSI
, DISALLOW_ADHOC_11A
| DISALLOW_ADHOC_11A_TURB
,
1076 BM(F5_5180_5240
, F1_5260_5280
, F3_5500_5700
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1083 BM(NA5_5190_5230
, NA1_5270_5270
, NA3_5510_5670
, -1, -1, -1, -1, -1, -1, -1, -1, -1)},
1085 {FCC1
, FCC
, NO_DFS
, NO_PSCAN
, NO_REQ
,
1086 BM(F2_5180_5240
, F4_5260_5320
, F5_5745_5825
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1087 BM(T1_5210_5210
, T2_5250_5290
, T2_5760_5800
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1088 BM(T1_5200_5240
, T1_5280_5280
, T1_5765_5805
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1093 BM(NA2_5190_5230
, NA3_5270_5310
, NA4_5755_5795
, -1, -1, -1, -1, -1, -1, -1, -1, -1)},
1095 {FCC2
, FCC
, NO_DFS
, NO_PSCAN
, NO_REQ
,
1096 BM(F6_5180_5240
, F5_5260_5320
, F6_5745_5825
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1097 BM(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1098 BM(T2_5200_5240
, T1_5280_5280
, T1_5765_5805
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1103 BM(NA5_5190_5230
, NA3_5270_5310
, NA4_5755_5795
, -1, -1, -1, -1, -1, -1, -1, -1, -1)},
1105 {FCC3
, FCC
, DFS_FCC3
, PSCAN_FCC
| PSCAN_FCC_T
, NO_REQ
,
1106 BM(F2_5180_5240
, F3_5260_5320
, F1_5500_5700
, F5_5745_5825
, -1, -1, -1, -1, -1, -1, -1, -1),
1107 BM(T1_5210_5210
, T1_5250_5250
, T1_5290_5290
, T2_5760_5800
, -1, -1, -1, -1, -1, -1, -1, -1),
1108 BM(T1_5200_5240
, T2_5280_5280
, T1_5540_5660
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1113 BM(NA2_5190_5230
, NA2_5270_5310
, NA3_5510_5670
, NA4_5755_5795
, -1, -1, -1, -1, -1, -1, -1, -1)},
1115 {FCC4
, FCC
, DFS_FCC3
, PSCAN_FCC
| PSCAN_FCC_T
, NO_REQ
,
1116 BM(F1_4942_4987
, F1_4945_4985
, F1_4950_4980
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1125 {FCC5
, FCC
, NO_DFS
, NO_PSCAN
, NO_REQ
,
1126 BM(F2_5180_5240
, F5_5745_5825
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1133 BM(NA2_5190_5230
, NA4_5755_5795
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1)},
1135 {FCC6
, FCC
, DFS_FCC3
, PSCAN_FCC
, NO_REQ
,
1136 BM(F7_5180_5240
, F5_5260_5320
, F1_5500_5580
, F1_5660_5700
, F6_5745_5825
, -1, -1, -1, -1, -1, -1, -1),
1137 BM(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1138 BM(T2_5200_5240
, T1_5280_5280
, T1_5765_5805
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1143 BM(NA5_5190_5230
, NA5_5755_5795
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1)},
1145 {MKK1
, MKK
, NO_DFS
, PSCAN_MKK1
, DISALLOW_ADHOC_11A_TURB
,
1146 BM(F1_5170_5230
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1155 {MKK2
, MKK
, NO_DFS
, PSCAN_MKK2
, DISALLOW_ADHOC_11A_TURB
,
1156 BM(F1_4915_4925
, F1_4935_4945
, F1_4920_4980
, F1_5035_5040
, F1_5055_5055
, F1_5040_5080
, F1_5170_5230
, -1, -1, -1, -1, -1),
1166 {MKK3
, MKK
, NO_DFS
, PSCAN_MKK3
, DISALLOW_ADHOC_11A_TURB
,
1167 BM(F4_5180_5240
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1174 BM(NA4_5190_5230
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1)},
1176 /* UNI-1 even + UNI-2 */
1177 {MKK4
, MKK
, DFS_MKK4
, PSCAN_MKK3
, DISALLOW_ADHOC_11A_TURB
,
1178 BM(F4_5180_5240
, F2_5260_5320
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1185 BM(NA4_5190_5230
, NA2_5270_5310
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1)},
1187 /* UNI-1 even + UNI-2 + mid-band */
1188 {MKK5
, MKK
, DFS_MKK4
, PSCAN_MKK3
, DISALLOW_ADHOC_11A_TURB
,
1189 BM(F4_5180_5240
, F2_5260_5320
, F4_5500_5700
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1196 BM(NA4_5190_5230
, NA2_5270_5310
, NA1_5510_5670
, -1, -1, -1, -1, -1, -1, -1, -1, -1)},
1198 /* UNI-1 odd + even */
1199 {MKK6
, MKK
, DFS_MKK4
, PSCAN_MKK1
, DISALLOW_ADHOC_11A_TURB
,
1200 BM(F2_5170_5230
, F4_5180_5240
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1207 BM(NA4_5190_5230
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1)},
1209 /* UNI-1 odd + UNI-1 even + UNI-2 */
1210 {MKK7
, MKK
, DFS_MKK4
, PSCAN_MKK1
| PSCAN_MKK3
, DISALLOW_ADHOC_11A_TURB
,
1211 BM(F2_5170_5230
, F4_5180_5240
, F2_5260_5320
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1218 BM(NA4_5190_5230
, NA2_5270_5310
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1)},
1220 /* UNI-1 odd + UNI-1 even + UNI-2 + mid-band */
1221 {MKK8
, MKK
, DFS_MKK4
, PSCAN_MKK1
| PSCAN_MKK3
, DISALLOW_ADHOC_11A_TURB
,
1222 BM(F2_5170_5230
, F4_5180_5240
, F2_5260_5320
, F4_5500_5700
, -1, -1, -1, -1, -1, -1, -1, -1),
1229 BM(NA4_5190_5230
, NA2_5270_5310
, NA1_5510_5670
, -1, -1, -1, -1, -1, -1, -1, -1, -1)},
1231 /* UNI-1 even + 4.9 GHZ */
1232 {MKK9
, MKK
, NO_DFS
, NO_PSCAN
, DISALLOW_ADHOC_11A_TURB
,
1233 BM(F1_4915_4925
, F1_4935_4945
, F1_4920_4980
, F1_5035_5040
, F1_5055_5055
, F1_5040_5080
, F4_5180_5240
, -1, -1, -1, -1, -1),
1242 /* UNI-1 even + UNI-2 + 4.9 GHZ */
1243 {MKK10
, MKK
, DFS_MKK4
, PSCAN_MKK3
, DISALLOW_ADHOC_11A_TURB
,
1244 BM(F1_4915_4925
, F1_4935_4945
, F1_4920_4980
, F1_5035_5040
, F1_5055_5055
, F1_5040_5080
, F4_5180_5240
, F2_5260_5320
, -1, -1, -1, -1),
1253 /* UNI-1 even + UNI-2 + 4.9 GHZ + mid-band */
1254 {MKK11
, MKK
, DFS_MKK4
, PSCAN_MKK3
, DISALLOW_ADHOC_11A_TURB
,
1255 BM(F1_4915_4925
, F1_4935_4945
, F1_4920_4980
, F1_5035_5040
, F1_5055_5055
, F1_5040_5080
, F4_5180_5240
, F2_5260_5320
, F4_5500_5700
, -1, -1, -1),
1264 /* UNI-1 even + UNI-1 odd + UNI-2 + 4.9 GHZ + mid-band */
1265 {MKK12
, MKK
, DFS_MKK4
, PSCAN_MKK3
, DISALLOW_ADHOC_11A_TURB
,
1266 BM(F1_4915_4925
, F1_4935_4945
, F1_4920_4980
, F1_5035_5040
, F1_5055_5055
, F1_5040_5080
, F1_5170_5230
, F4_5180_5240
, F2_5260_5320
, F4_5500_5700
, -1, -1),
1275 /* Defined here to use when 2G channels are authorised for country K2 */
1276 {APLD
, NO_CTL
, NO_DFS
, NO_PSCAN
, NO_REQ
,
1280 BM(F2_2312_2372
, F2_2412_2472
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1281 BM(G2_2312_2372
, G2_2412_2472
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1286 {ETSIA
, NO_CTL
, NO_DFS
, PSCAN_ETSIA
, DISALLOW_ADHOC_11A
| DISALLOW_ADHOC_11A_TURB
,
1290 BM(F1_2457_2472
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1291 BM(G1_2457_2472
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1292 BM(T2_2437_2437
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1296 {ETSIB
, ETSI
, NO_DFS
, PSCAN_ETSIB
, DISALLOW_ADHOC_11A
| DISALLOW_ADHOC_11A_TURB
,
1300 BM(F1_2432_2442
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1301 BM(G1_2432_2442
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1302 BM(T2_2437_2437
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1306 {ETSIC
, ETSI
, NO_DFS
, PSCAN_ETSIC
, DISALLOW_ADHOC_11A
| DISALLOW_ADHOC_11A_TURB
,
1310 BM(F3_2412_2472
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1311 BM(G3_2412_2472
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1312 BM(T2_2437_2437
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1316 {FCCA
, FCC
, NO_DFS
, NO_PSCAN
, NO_REQ
,
1320 BM(F1_2412_2462
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1321 BM(G1_2412_2462
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1322 BM(T2_2437_2437
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1323 BM(NG2_2422_2452
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1326 {MKKA
, MKK
, NO_DFS
, PSCAN_MKKA
| PSCAN_MKKA_G
| PSCAN_MKKA1
| PSCAN_MKKA1_G
| PSCAN_MKKA2
| PSCAN_MKKA2_G
, DISALLOW_ADHOC_11A_TURB
,
1330 BM(F2_2412_2462
, F1_2467_2472
, F2_2484_2484
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1331 BM(G2_2412_2462
, G1_2467_2472
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1332 BM(T2_2437_2437
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1333 BM(NG1_2422_2452
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1336 {MKKC
, MKK
, NO_DFS
, NO_PSCAN
, NO_REQ
,
1340 BM(F2_2412_2472
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1341 BM(G2_2412_2472
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1342 BM(T2_2437_2437
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1343 BM(NG1_2422_2452
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1346 {WORLD
, ETSI
, NO_DFS
, NO_PSCAN
, NO_REQ
,
1350 BM(F2_2412_2472
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1351 BM(G2_2412_2472
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1352 BM(T2_2437_2437
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1353 BM(NG1_2422_2452
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1356 {WOR0_WORLD
, NO_CTL
, DFS_FCC3
| DFS_ETSI
, PSCAN_WWR
, ADHOC_PER_11D
,
1357 BM(W1_5260_5320
, W1_5180_5240
, W1_5170_5230
, W1_5745_5825
, W1_5500_5700
, -1, -1, -1, -1, -1, -1, -1),
1358 BM(WT1_5210_5250
, WT1_5290_5290
, WT1_5760_5800
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1360 BM(W1_2412_2412
, W1_2437_2442
, W1_2462_2462
, W1_2472_2472
, W1_2417_2432
, W1_2447_2457
, W1_2467_2467
, W1_2484_2484
, -1, -1, -1, -1),
1361 BM(WG1_2412_2412
, WG1_2437_2442
, WG1_2462_2462
, WG1_2472_2472
, WG1_2417_2432
, WG1_2447_2457
, WG1_2467_2467
, -1, -1, -1, -1, -1),
1362 BM(T3_2437_2437
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1366 {WOR01_WORLD
, NO_CTL
, DFS_FCC3
| DFS_ETSI
, PSCAN_WWR
, ADHOC_PER_11D
,
1367 BM(W1_5260_5320
, W1_5180_5240
, W1_5170_5230
, W1_5745_5825
, W1_5500_5700
, -1, -1, -1, -1, -1, -1, -1),
1368 BM(WT1_5210_5250
, WT1_5290_5290
, WT1_5760_5800
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1370 BM(W1_2412_2412
, W1_2437_2442
, W1_2462_2462
, W1_2417_2432
, W1_2447_2457
, -1, -1, -1, -1, -1, -1, -1),
1371 BM(WG1_2412_2412
, WG1_2437_2442
, WG1_2462_2462
, WG1_2417_2432
, WG1_2447_2457
, -1, -1, -1, -1, -1, -1, -1),
1372 BM(T3_2437_2437
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1376 {WOR02_WORLD
, NO_CTL
, DFS_FCC3
| DFS_ETSI
, PSCAN_WWR
, ADHOC_PER_11D
,
1377 BM(W1_5260_5320
, W1_5180_5240
, W1_5170_5230
, W1_5745_5825
, W1_5500_5700
, -1, -1, -1, -1, -1, -1, -1),
1378 BM(WT1_5210_5250
, WT1_5290_5290
, WT1_5760_5800
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1380 BM(W1_2412_2412
, W1_2437_2442
, W1_2462_2462
, W1_2472_2472
, W1_2417_2432
, W1_2447_2457
, W1_2467_2467
, -1, -1, -1, -1, -1),
1381 BM(WG1_2412_2412
, WG1_2437_2442
, WG1_2462_2462
, WG1_2472_2472
, WG1_2417_2432
, WG1_2447_2457
, WG1_2467_2467
, -1, -1, -1, -1, -1),
1382 BM(T3_2437_2437
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1386 {EU1_WORLD
, NO_CTL
, DFS_FCC3
| DFS_ETSI
, PSCAN_WWR
, ADHOC_PER_11D
,
1387 BM(W1_5260_5320
, W1_5180_5240
, W1_5170_5230
, W1_5745_5825
, W1_5500_5700
, -1, -1, -1, -1, -1, -1, -1),
1388 BM(WT1_5210_5250
, WT1_5290_5290
, WT1_5760_5800
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1390 BM(W1_2412_2412
, W1_2437_2442
, W1_2462_2462
, W2_2472_2472
, W1_2417_2432
, W1_2447_2457
, W2_2467_2467
, -1, -1, -1, -1, -1),
1391 BM(WG1_2412_2412
, WG1_2437_2442
, WG1_2462_2462
, WG2_2472_2472
, WG1_2417_2432
, WG1_2447_2457
, WG2_2467_2467
, -1, -1, -1, -1, -1),
1392 BM(T3_2437_2437
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1396 {WOR1_WORLD
, NO_CTL
, DFS_FCC3
| DFS_ETSI
, PSCAN_WWR
, ADHOC_NO_11A
,
1397 BM(W1_5260_5320
, W1_5180_5240
, W1_5170_5230
, W1_5745_5825
, W1_5500_5700
, -1, -1, -1, -1, -1, -1, -1),
1400 BM(W1_2412_2412
, W1_2437_2442
, W1_2462_2462
, W1_2472_2472
, W1_2417_2432
, W1_2447_2457
, W1_2467_2467
, W1_2484_2484
, -1, -1, -1, -1),
1401 BM(WG1_2412_2412
, WG1_2437_2442
, WG1_2462_2462
, WG1_2472_2472
, WG1_2417_2432
, WG1_2447_2457
, WG1_2467_2467
, -1, -1, -1, -1, -1),
1402 BM(T3_2437_2437
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1406 {WOR2_WORLD
, NO_CTL
, DFS_FCC3
| DFS_ETSI
, PSCAN_WWR
, ADHOC_NO_11A
,
1407 BM(W1_5260_5320
, W1_5180_5240
, W1_5170_5230
, W1_5745_5825
, W1_5500_5700
, -1, -1, -1, -1, -1, -1, -1),
1408 BM(WT1_5210_5250
, WT1_5290_5290
, WT1_5760_5800
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1410 BM(W1_2412_2412
, W1_2437_2442
, W1_2462_2462
, W1_2472_2472
, W1_2417_2432
, W1_2447_2457
, W1_2467_2467
, W1_2484_2484
, -1, -1, -1, -1),
1411 BM(WG1_2412_2412
, WG1_2437_2442
, WG1_2462_2462
, WG1_2472_2472
, WG1_2417_2432
, WG1_2447_2457
, WG1_2467_2467
, -1, -1, -1, -1, -1),
1412 BM(T3_2437_2437
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1416 {WOR3_WORLD
, NO_CTL
, DFS_FCC3
| DFS_ETSI
, PSCAN_WWR
, ADHOC_PER_11D
,
1417 BM(W1_5260_5320
, W1_5180_5240
, W1_5170_5230
, W1_5745_5825
, -1, -1, -1, -1, -1, -1, -1, -1),
1418 BM(WT1_5210_5250
, WT1_5290_5290
, WT1_5760_5800
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1420 BM(W1_2412_2412
, W1_2437_2442
, W1_2462_2462
, W1_2472_2472
, W1_2417_2432
, W1_2447_2457
, W1_2467_2467
, -1, -1, -1, -1, -1),
1421 BM(WG1_2412_2412
, WG1_2437_2442
, WG1_2462_2462
, WG1_2472_2472
, WG1_2417_2432
, WG1_2447_2457
, WG1_2467_2467
, -1, -1, -1, -1, -1),
1422 BM(T3_2437_2437
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1426 {WOR4_WORLD
, NO_CTL
, DFS_FCC3
, PSCAN_WWR
, ADHOC_NO_11A
,
1427 BM(W2_5260_5320
, W2_5180_5240
, F2_5745_5805
, W2_5825_5825
, -1, -1, -1, -1, -1, -1, -1, -1),
1428 BM(WT1_5210_5250
, WT1_5290_5290
, WT1_5760_5800
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1430 BM(W1_2412_2412
, W1_2437_2442
, W1_2462_2462
, W1_2417_2432
, W1_2447_2457
, -1, -1, -1, -1, -1, -1, -1),
1431 BM(WG1_2412_2412
, WG1_2437_2442
, WG1_2462_2462
, WG1_2417_2432
, WG1_2447_2457
, -1, -1, -1, -1, -1, -1, -1),
1432 BM(T3_2437_2437
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1436 {WOR5_ETSIC
, NO_CTL
, DFS_FCC3
| DFS_ETSI
, PSCAN_WWR
, ADHOC_NO_11A
,
1437 BM(W1_5260_5320
, W2_5180_5240
, F6_5745_5825
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1440 BM(W1_2412_2412
, W1_2437_2442
, W1_2462_2462
, W2_2472_2472
, W1_2417_2432
, W1_2447_2457
, W2_2467_2467
, -1, -1, -1, -1, -1),
1441 BM(WG1_2412_2412
, WG1_2437_2442
, WG1_2462_2462
, WG1_2472_2472
, WG1_2417_2432
, WG1_2447_2457
, WG1_2467_2467
, -1, -1, -1, -1, -1),
1442 BM(T3_2437_2437
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1446 {WOR9_WORLD
, NO_CTL
, DFS_FCC3
| DFS_ETSI
, PSCAN_WWR
, ADHOC_NO_11A
,
1447 BM(W1_5260_5320
, W1_5180_5240
, W1_5745_5825
, W1_5500_5700
, -1, -1, -1, -1, -1, -1, -1, -1),
1448 BM(WT1_5210_5250
, WT1_5290_5290
, WT1_5760_5800
, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1450 BM(W1_2412_2412
, W1_2437_2442
, W1_2462_2462
, W1_2417_2432
, W1_2447_2457
, -1, -1, -1, -1, -1, -1, -1),
1451 BM(WG1_2412_2412
, WG1_2437_2442
, WG1_2462_2462
, WG1_2417_2432
, WG1_2447_2457
, -1, -1, -1, -1, -1, -1, -1),
1452 BM(T3_2437_2437
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1456 {WORA_WORLD
, NO_CTL
, DFS_FCC3
| DFS_ETSI
, PSCAN_WWR
, ADHOC_NO_11A
,
1457 BM(W1_5260_5320
, W1_5180_5240
, W1_5745_5825
, W1_5500_5700
, -1, -1, -1, -1, -1, -1, -1, -1),
1460 BM(W1_2412_2412
, W1_2437_2442
, W1_2462_2462
, W1_2472_2472
, W1_2417_2432
, W1_2447_2457
, W1_2467_2467
, -1, -1, -1, -1, -1),
1461 BM(WG1_2412_2412
, WG1_2437_2442
, WG1_2462_2462
, WG1_2472_2472
, WG1_2417_2432
, WG1_2447_2457
, WG1_2467_2467
, -1, -1, -1, -1, -1),
1462 BM(T3_2437_2437
, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1),
1466 {NULL1
, NO_CTL
, NO_DFS
, NO_PSCAN
, NO_REQ
,
1482 static const struct cmode modes
[] = {
1483 { HAL_MODE_TURBO
, CHANNEL_ST
}, /* TURBO means 11a Static Turbo */
1484 { HAL_MODE_11A
, CHANNEL_A
},
1485 { HAL_MODE_11B
, CHANNEL_B
},
1486 { HAL_MODE_11G
, CHANNEL_G
},
1487 { HAL_MODE_11G_TURBO
, CHANNEL_108G
},
1488 { HAL_MODE_11A_TURBO
, CHANNEL_108A
},
1489 { HAL_MODE_11NA
, CHANNEL_A_HT40
},
1490 { HAL_MODE_11NA
, CHANNEL_A_HT20
},
1491 { HAL_MODE_11NG
, CHANNEL_G_HT40
},
1492 { HAL_MODE_11NG
, CHANNEL_G_HT20
},
1496 * Return the Wireless Mode Regulatory Domain based
1497 * on the country code and the wireless mode.
1499 u8_t
GetWmRD(u16_t regionCode
, u16_t channelFlag
, REG_DOMAIN
*rd
)
1501 s16_t i
, found
, regDmn
;
1502 u64_t flags
= NO_REQ
;
1503 REG_DMN_PAIR_MAPPING
*regPair
= NULL
;
1505 for (i
= 0, found
= 0; (i
< ARRAY_SIZE(regDomainPairs
)) && (!found
); i
++) {
1506 if (regDomainPairs
[i
].regDmnEnum
== regionCode
) {
1507 regPair
= ®DomainPairs
[i
];
1512 zm_debug_msg1("Failed to find reg domain pair ", regionCode
);
1516 if (channelFlag
& ZM_REG_FLAG_CHANNEL_2GHZ
) {
1517 regDmn
= regPair
->regDmn2GHz
;
1518 flags
= regPair
->flags2GHz
;
1520 regDmn
= regPair
->regDmn5GHz
;
1521 flags
= regPair
->flags5GHz
;
1525 * We either started with a unitary reg domain or we've found the
1526 * unitary reg domain of the pair
1529 for (i
= 0 ; i
< ARRAY_SIZE(regDomains
) ; i
++) {
1530 if (regDomains
[i
].regDmnEnum
== regDmn
) {
1532 zfMemoryCopy((u8_t
*)rd
, (u8_t
*)®Domains
[i
],
1533 sizeof(REG_DOMAIN
));
1537 rd
->pscan
&= regPair
->pscanMask
;
1538 rd
->flags
= (u32_t
)flags
;
1543 * Test to see if the bitmask array is all zeros
1545 u8_t
isChanBitMaskZero(u64_t
*bitmask
)
1549 for (i
= 0; i
< BMLEN
; i
++) {
1550 if (bitmask
[i
] != 0)
1556 u8_t
IS_BIT_SET(u32_t bit
, u64_t
*bitmask
)
1558 u32_t byteOffset
, bitnum
;
1561 byteOffset
= bit
/64;
1562 bitnum
= bit
- byteOffset
*64;
1563 val
= ((u64_t
) 1) << bitnum
;
1564 if (bitmask
[byteOffset
] & val
)
1571 void zfHpGetRegulationTable(zdev_t
*dev
, u16_t regionCode
, u16_t c_lo
, u16_t c_hi
)
1573 REG_DOMAIN rd5GHz
, rd2GHz
;
1574 const struct cmode
*cm
;
1576 struct zsHpPriv
*hpPriv
;
1578 zmw_get_wlan_dev(dev
);
1579 hpPriv
= wd
->hpPrivate
;
1581 zmw_declare_for_critical_section();
1583 if (!GetWmRD(regionCode
, ~ZM_REG_FLAG_CHANNEL_2GHZ
, &rd5GHz
)) {
1584 zm_debug_msg1("couldn't find unitary 5GHz reg domain for Region Code ", regionCode
);
1587 if (!GetWmRD(regionCode
, ZM_REG_FLAG_CHANNEL_2GHZ
, &rd2GHz
)) {
1588 zm_debug_msg1("couldn't find unitary 2GHz reg domain for Region Code ", regionCode
);
1591 if (wd
->regulationTable
.regionCode
== regionCode
) {
1592 zm_debug_msg1("current region code is the same with Region Code ", regionCode
);
1595 wd
->regulationTable
.regionCode
= regionCode
;
1599 zmw_enter_critical_section(dev
);
1601 for (cm
= modes
; cm
< &modes
[ARRAY_SIZE(modes
)]; cm
++) {
1603 u64_t
*channelBM
= NULL
;
1604 REG_DOMAIN
*rd
= NULL
;
1605 REG_DMN_FREQ_BAND
*fband
= NULL
, *freqs
= NULL
;
1608 case HAL_MODE_TURBO
:
1609 /* we don't have turbo mode so we disable it
1610 //zm_debug_msg0("CWY - HAL_MODE_TURBO"); */
1613 channelBM = rd->chan11a_turbo;
1614 freqs = ®Dmn5GhzTurboFreq[0];
1615 ctl = rd->conformanceTestLimit | CTL_TURBO; */
1618 if ((hpPriv
->OpFlags
& 0x1) != 0) {
1620 channelBM
= rd
->chan11a
;
1621 freqs
= ®Dmn5GhzFreq
[0];
1622 c_lo
= 4920; /* from channel 184 */
1623 c_hi
= 5825; /* to channel 165 */
1624 /* ctl = rd->conformanceTestLimit;
1625 zm_debug_msg2("CWY - HAL_MODE_11A, channelBM = 0x", *channelBM); */
1632 /* Disable 11B mode because it only has difference with 11G in PowerDFS Data,
1633 and we don't use this now.
1634 zm_debug_msg0("CWY - HAL_MODE_11B"); */
1637 channelBM = rd->chan11b;
1638 freqs = ®Dmn2GhzFreq[0];
1639 ctl = rd->conformanceTestLimit | CTL_11B;
1640 zm_debug_msg2("CWY - HAL_MODE_11B, channelBM = 0x", *channelBM); */
1643 if ((hpPriv
->OpFlags
& 0x2) != 0) {
1645 channelBM
= rd
->chan11g
;
1646 freqs
= ®Dmn2Ghz11gFreq
[0];
1647 c_lo
= 2412; /* from channel 1 */
1648 /* c_hi = 2462; to channel 11 */
1649 c_hi
= 2472; /* to channel 13 */
1650 /* ctl = rd->conformanceTestLimit | CTL_11G; */
1651 /* zm_debug_msg2("CWY - HAL_MODE_11G, channelBM = 0x", *channelBM); */
1657 case HAL_MODE_11G_TURBO
:
1658 /* we don't have turbo mode so we disable it
1659 zm_debug_msg0("CWY - HAL_MODE_11G_TURBO"); */
1662 channelBM = rd->chan11g_turbo;
1663 freqs = ®Dmn2Ghz11gTurboFreq[0];
1664 ctl = rd->conformanceTestLimit | CTL_108G; */
1666 case HAL_MODE_11A_TURBO
:
1667 /* we don't have turbo mode so we disable it
1668 zm_debug_msg0("CWY - HAL_MODE_11A_TURBO"); */
1671 channelBM = rd->chan11a_dyn_turbo;
1672 freqs = ®Dmn5GhzTurboFreq[0];
1673 ctl = rd->conformanceTestLimit | CTL_108G; */
1676 zm_debug_msg1("Unkonwn HAL mode ", cm
->mode
);
1680 if (channelBM
== NULL
) {
1681 /* zm_debug_msg0("CWY - channelBM is NULL"); */
1685 if (isChanBitMaskZero(channelBM
)) {
1686 /* zm_debug_msg0("CWY - BitMask is Zero"); */
1690 /* RAY:Is it ok?? */
1694 for (b
= 0 ; b
< 64*BMLEN
; b
++) {
1695 if (IS_BIT_SET(b
, channelBM
)) {
1698 /* zm_debug_msg1("CWY - lowChannel = ", fband->lowChannel);
1699 zm_debug_msg1("CWY - highChannel = ", fband->highChannel);
1700 zm_debug_msg1("CWY - channelSep = ", fband->channelSep); */
1701 for (c
= fband
->lowChannel
; c
<= fband
->highChannel
;
1702 c
+= fband
->channelSep
) {
1705 /* Disable all DFS channel */
1706 if ((hpPriv
->disableDfsCh
== 0) || (!(fband
->useDfs
& rd
->dfsMask
))) {
1707 if (fband
->channelBW
< 20) {
1708 /**************************************************************/
1710 /* Temporary discard channel that BW < 20MHz (5 or 10MHz) */
1711 /* Our architecture does not implemnt it !!! */
1713 /**************************************************************/
1716 if ((c
>= c_lo
) && (c
<= c_hi
)) {
1718 icv
.channelFlags
= cm
->flags
;
1719 icv
.maxRegTxPower
= fband
->powerDfs
;
1720 if (fband
->usePassScan
& rd
->pscan
)
1721 icv
.channelFlags
|= ZM_REG_FLAG_CHANNEL_PASSIVE
;
1723 icv
.channelFlags
&= ~ZM_REG_FLAG_CHANNEL_PASSIVE
;
1724 if (fband
->useDfs
& rd
->dfsMask
)
1725 icv
.privFlags
= ZM_REG_FLAG_CHANNEL_DFS
;
1729 /* For now disable radar for FCC3 */
1730 if (fband
->useDfs
& rd
->dfsMask
& DFS_FCC3
) {
1731 icv
.privFlags
&= ~ZM_REG_FLAG_CHANNEL_DFS
;
1732 icv
.privFlags
|= ZM_REG_FLAG_CHANNEL_DFS_CLEAR
;
1735 if (rd
->flags
& LIMIT_FRAME_4MS
)
1736 icv
.privFlags
|= ZM_REG_FLAG_CHANNEL_DFS_CLEAR
;
1741 zm_assert(next
< 60);
1743 wd
->regulationTable
.allowChannel
[next
++] = icv
;
1750 wd
->regulationTable
.allowChannelCnt
= next
;
1753 zmw_leave_critical_section(dev
);
1756 void zfHpGetRegulationTablefromRegionCode(zdev_t
*dev
, u16_t regionCode
)
1758 u16_t c_lo
= 2000, c_hi
= 6000; /* default channel is all enable */
1759 u8_t isoName
[3] = {'N', 'A', 0};
1761 zfCoreSetIsoName(dev
, isoName
);
1763 zfHpGetRegulationTable(dev
, regionCode
, c_lo
, c_hi
);
1766 void zfHpGetRegulationTablefromCountry(zdev_t
*dev
, u16_t CountryCode
)
1769 u16_t c_lo
= 2000, c_hi
= 6000; /* default channel is all enable */
1772 zmw_get_wlan_dev(dev
);
1774 zmw_declare_for_critical_section();
1776 for (i
= 0; i
< ARRAY_SIZE(allCountries
); i
++) {
1777 if (CountryCode
== allCountries
[i
].countryCode
) {
1778 RegDomain
= allCountries
[i
].regDmnEnum
;
1780 /* read the ACU country code from EEPROM */
1781 zfCoreSetIsoName(dev
, (u8_t
*)allCountries
[i
].isoName
);
1783 /* zm_debug_msg_s("CWY - Country Name = ", allCountries[i].name); */
1785 if (wd
->regulationTable
.regionCode
!= RegDomain
) {
1786 /* zm_debug_msg0("CWY - Change regulatory table"); */
1787 zfHpGetRegulationTable(dev
, RegDomain
, c_lo
, c_hi
);
1792 zm_debug_msg1("Invalid CountryCode = ", CountryCode
);
1795 u8_t
zfHpGetRegulationTablefromISO(zdev_t
*dev
, u8_t
*countryInfo
, u8_t length
)
1799 u16_t c_lo
= 2000, c_hi
= 6000; /* default channel is all enable */
1800 /* u8_t strLen = 2; */
1802 zmw_get_wlan_dev(dev
);
1804 zmw_declare_for_critical_section();
1806 if (countryInfo
[4] != 0x20) {
1807 /* with (I)ndoor/(O)utdoor info
1810 /* zm_debug_msg_s("Desired iso name = ", isoName); */
1811 for (i
= 0; i
< ARRAY_SIZE(allCountries
); i
++) {
1812 /* zm_debug_msg_s("Current iso name = ", allCountries[i].isoName); */
1813 if (zfMemoryIsEqual((u8_t
*)allCountries
[i
].isoName
, (u8_t
*)&countryInfo
[2], length
-1)) {
1814 /* DbgPrint("Set current iso name = %s\n", allCountries[i].isoName); */
1815 /* zm_debug_msg0("iso name hit!!"); */
1817 RegDomain
= allCountries
[i
].regDmnEnum
;
1819 if (wd
->regulationTable
.regionCode
!= RegDomain
)
1820 zfHpGetRegulationTable(dev
, RegDomain
, c_lo
, c_hi
);
1822 while (index < (countryInfo[1]+2)) {
1823 if (countryInfo[index] <= 14) {
1824 // calculate 2.4GHz low boundary channel frequency
1825 ch = countryInfo[index];
1829 c_lo = ZM_CH_G_1 + (ch - 1) * 5;
1830 // calculate 2.4GHz high boundary channel frequency
1831 ch = countryInfo[index] + countryInfo[index + 1] - 1;
1835 c_hi = ZM_CH_G_1 + (ch - 1) * 5;
1837 // calculate 5GHz low boundary channel frequency
1838 ch = countryInfo[index];
1839 if ( (ch >= 184)&&(ch <= 196) )
1843 // calculate 5GHz high boundary channel frequency
1844 ch = countryInfo[index] + countryInfo[index + 1] - 1;
1845 if ( (ch >= 184)&&(ch <= 196) )
1851 zfHpGetRegulationTable(dev, RegDomain, c_lo, c_hi);
1859 /* zm_debug_msg_s("Invalid iso name = ", &countryInfo[2]); */
1863 const char *zfHpGetisoNamefromregionCode(zdev_t
*dev
, u16_t regionCode
)
1867 for (i
= 0; i
< ARRAY_SIZE(allCountries
); i
++) {
1868 if (allCountries
[i
].regDmnEnum
== regionCode
)
1869 return allCountries
[i
].isoName
;
1871 /* no matching item, return default */
1872 return allCountries
[0].isoName
;
1875 u16_t
zfHpGetRegionCodeFromIsoName(zdev_t
*dev
, u8_t
*countryIsoName
)
1880 /* if no matching item, return default */
1881 regionCode
= DEF_REGDMN
;
1883 for (i
= 0; i
< ARRAY_SIZE(allCountries
); i
++) {
1884 if (zfMemoryIsEqual((u8_t
*)allCountries
[i
].isoName
, countryIsoName
, 2)) {
1885 regionCode
= allCountries
[i
].regDmnEnum
;
1893 /************************************************************************/
1895 /* FUNCTION DESCRIPTION zfHpDeleteAllowChannel */
1896 /* Delete Allow Channel. */
1899 /* dev : device pointer */
1900 /* freq : frequency */
1907 /* Chao-Wen Yang ZyDAS Technology Corporation 2007.3 */
1909 /************************************************************************/
1910 u16_t
zfHpDeleteAllowChannel(zdev_t
*dev
, u16_t freq
)
1912 u16_t i
, bandIndex
= 0;
1913 u16_t dfs5GBand
[][2] = { {5150, 5240}, {5260, 5350}, {5450, 5700}, {5725, 5825} };
1915 zmw_get_wlan_dev(dev
);
1916 /* Find which band does this frequency belong */
1917 for (i
= 0; i
< 4; i
++) {
1918 if ((freq
>= dfs5GBand
[i
][0]) && (freq
<= dfs5GBand
[i
][1]))
1922 if (bandIndex
== 0) {
1923 /* 2.4G, don't care */
1927 /* Set all channels in this band to passive scan */
1928 for (i
= 0; i
< wd
->regulationTable
.allowChannelCnt
; i
++) {
1929 if ((wd
->regulationTable
.allowChannel
[i
].channel
>= dfs5GBand
[bandIndex
][0]) &&
1930 (wd
->regulationTable
.allowChannel
[i
].channel
<= dfs5GBand
[bandIndex
][1])) {
1931 /* if channel is not passive, set it to be passive and mark it */
1932 if ((wd
->regulationTable
.allowChannel
[i
].channelFlags
&
1933 ZM_REG_FLAG_CHANNEL_PASSIVE
) == 0) {
1934 wd
->regulationTable
.allowChannel
[i
].channelFlags
|=
1935 (ZM_REG_FLAG_CHANNEL_PASSIVE
| ZM_REG_FLAG_CHANNEL_CSA
);
1943 u16_t
zfHpAddAllowChannel(zdev_t
*dev
, u16_t freq
)
1945 u16_t i
, j
, arrayIndex
;
1947 zmw_get_wlan_dev(dev
);
1949 for (i
= 0; i
< wd
->regulationTable
.allowChannelCnt
; i
++) {
1950 if (wd
->regulationTable
.allowChannel
[i
].channel
== freq
)
1954 if (i
== wd
->regulationTable
.allowChannelCnt
) {
1955 for (j
= 0; j
< wd
->regulationTable
.allowChannelCnt
; j
++) {
1956 if (wd
->regulationTable
.allowChannel
[j
].channel
> freq
)
1960 /* zm_debug_msg1("CWY - add frequency = ", freq);
1961 zm_debug_msg1("CWY - channel array index = ", j); */
1965 if (arrayIndex
< wd
->regulationTable
.allowChannelCnt
) {
1966 for (j
= wd
->regulationTable
.allowChannelCnt
; j
> arrayIndex
; j
--)
1967 wd
->regulationTable
.allowChannel
[j
] = wd
->regulationTable
.allowChannel
[j
- 1];
1969 wd
->regulationTable
.allowChannel
[arrayIndex
].channel
= freq
;
1971 wd
->regulationTable
.allowChannelCnt
++;
1977 u16_t
zfHpIsDfsChannelNCS(zdev_t
*dev
, u16_t freq
)
1979 u8_t flag
= ZM_REG_FLAG_CHANNEL_DFS
;
1981 zmw_get_wlan_dev(dev
);
1983 for (i
= 0; i
< wd
->regulationTable
.allowChannelCnt
; i
++) {
1984 /* DbgPrint("DFS:freq=%d, chan=%d", freq, wd->regulationTable.allowChannel[i].channel); */
1985 if (wd
->regulationTable
.allowChannel
[i
].channel
== freq
) {
1986 flag
= wd
->regulationTable
.allowChannel
[i
].privFlags
;
1990 return flag
& (ZM_REG_FLAG_CHANNEL_DFS
|ZM_REG_FLAG_CHANNEL_DFS_CLEAR
);
1993 u16_t
zfHpIsDfsChannel(zdev_t
*dev
, u16_t freq
)
1995 u8_t flag
= ZM_REG_FLAG_CHANNEL_DFS
;
1997 zmw_get_wlan_dev(dev
);
1999 zmw_declare_for_critical_section();
2001 zmw_enter_critical_section(dev
);
2003 for (i
= 0; i
< wd
->regulationTable
.allowChannelCnt
; i
++) {
2004 /* DbgPrint("DFS:freq=%d, chan=%d", freq, wd->regulationTable.allowChannel[i].channel); */
2005 if (wd
->regulationTable
.allowChannel
[i
].channel
== freq
) {
2006 flag
= wd
->regulationTable
.allowChannel
[i
].privFlags
;
2011 zmw_leave_critical_section(dev
);
2013 return flag
& (ZM_REG_FLAG_CHANNEL_DFS
|ZM_REG_FLAG_CHANNEL_DFS_CLEAR
);
2016 u16_t
zfHpIsAllowedChannel(zdev_t
*dev
, u16_t freq
)
2019 zmw_get_wlan_dev(dev
);
2021 for (i
= 0; i
< wd
->regulationTable
.allowChannelCnt
; i
++) {
2022 if (wd
->regulationTable
.allowChannel
[i
].channel
== freq
)
2029 u16_t
zfHpFindFirstNonDfsChannel(zdev_t
*dev
, u16_t aBand
)
2033 zmw_get_wlan_dev(dev
);
2035 zmw_declare_for_critical_section();
2037 zmw_enter_critical_section(dev
);
2039 for (i
= 0; i
< wd
->regulationTable
.allowChannelCnt
; i
++) {
2040 if ((wd
->regulationTable
.allowChannel
[i
].privFlags
& ZM_REG_FLAG_CHANNEL_DFS
) != 0) {
2042 if (wd
->regulationTable
.allowChannel
[i
].channel
> 3000) {
2043 chan
= wd
->regulationTable
.allowChannel
[i
].channel
;
2047 if (wd
->regulationTable
.allowChannel
[i
].channel
< 3000) {
2048 chan
= wd
->regulationTable
.allowChannel
[i
].channel
;
2055 zmw_leave_critical_section(dev
);
2061 /* porting from ACU */
2062 /* save RegulatoryDomain in hpriv */
2063 u8_t
zfHpGetRegulatoryDomain(zdev_t
*dev
)
2065 zmw_get_wlan_dev(dev
);
2067 switch (wd
->regulationTable
.regionCode
) {
2085 return 0x10;/* WG_AMERICAS DOT11_REG_DOMAIN_FCC United States */
2089 return 0x20;/* DOT11_REG_DOMAIN_DOC Canada */
2110 return 0x30;/* WG_EMEA DOT11_REG_DOMAIN_ETSI Most of Europe */
2182 return 0x40;/* WG_JAPAN DOT11_REG_DOMAIN_MKK Japan */
2189 return 0xFF; /* Didn't input RegDmn by mean to distinguish by customer */
2192 void zfHpDisableDfsChannel(zdev_t
*dev
, u8_t disableFlag
)
2194 struct zsHpPriv
*hpPriv
;
2196 zmw_get_wlan_dev(dev
);
2197 hpPriv
= wd
->hpPrivate
;
2198 hpPriv
->disableDfsCh
= disableFlag
;