1 /*-
2  * SPDX-License-Identifier: ISC
3  *
4  * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting
5  * Copyright (c) 2005-2006 Atheros Communications, Inc.
6  * All rights reserved.
7  *
8  * Permission to use, copy, modify, and/or distribute this software for any
9  * purpose with or without fee is hereby granted, provided that the above
10  * copyright notice and this permission notice appear in all copies.
11  *
12  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19  *
20  * $FreeBSD$
21  */
22 
23 #ifndef	__AH_REGDOMAIN_FREQBANDS_H__
24 #define	__AH_REGDOMAIN_FREQBANDS_H__
25 
26 #define	AFTER(x)	((x)+1)
27 
28 /*
29  * Frequency band collections are defined using bitmasks.  Each bit
30  * in a mask is the index of an entry in one of the following tables.
31  * Bitmasks are BMLEN*64 bits so if a table grows beyond that the bit
32  * vectors must be enlarged or the tables split somehow (e.g. split
33  * 1/2 and 1/4 rate channels into a separate table).
34  *
35  * Beware of ordering; the indices are defined relative to the preceding
36  * entry so if things get off there will be confusion.  A good way to
37  * check the indices is to collect them in a switch statement in a stub
38  * function so the compiler checks for duplicates.
39  */
40 
41 /*
42  * 5GHz 11A channel tags
43  */
44 static REG_DMN_FREQ_BAND regDmn5GhzFreq[] = {
45 	{ 4915, 4925, 23, 0, 10,  5, NO_DFS, PSCAN_MKK2 },
46 #define	F1_4915_4925	0
47 	{ 4935, 4945, 23, 0, 10,  5, NO_DFS, PSCAN_MKK2 },
48 #define	F1_4935_4945	AFTER(F1_4915_4925)
49 	{ 4920, 4980, 23, 0, 20, 20, NO_DFS, PSCAN_MKK2 },
50 #define	F1_4920_4980	AFTER(F1_4935_4945)
51 	{ 4942, 4987, 27, 6,  5,  5, NO_DFS, PSCAN_FCC },
52 #define	F1_4942_4987	AFTER(F1_4920_4980)
53 	{ 4945, 4985, 30, 6, 10,  5, NO_DFS, PSCAN_FCC },
54 #define	F1_4945_4985	AFTER(F1_4942_4987)
55 	{ 4950, 4980, 33, 6, 20,  5, NO_DFS, PSCAN_FCC },
56 #define	F1_4950_4980	AFTER(F1_4945_4985)
57 	{ 5035, 5040, 23, 0, 10,  5, NO_DFS, PSCAN_MKK2 },
58 #define	F1_5035_5040	AFTER(F1_4950_4980)
59 	{ 5040, 5080, 23, 0, 20, 20, NO_DFS, PSCAN_MKK2 },
60 #define	F1_5040_5080	AFTER(F1_5035_5040)
61 	{ 5055, 5055, 23, 0, 10,  5, NO_DFS, PSCAN_MKK2 },
62 #define	F1_5055_5055	AFTER(F1_5040_5080)
63 
64 	{ 5120, 5240, 5,  6, 20, 20, NO_DFS, NO_PSCAN },
65 #define	F1_5120_5240	AFTER(F1_5055_5055)
66 	{ 5120, 5240, 5,  6, 10, 10, NO_DFS, NO_PSCAN },
67 #define	F2_5120_5240	AFTER(F1_5120_5240)
68 	{ 5120, 5240, 5,  6,  5,  5, NO_DFS, NO_PSCAN },
69 #define	F3_5120_5240	AFTER(F2_5120_5240)
70 
71 	{ 5170, 5230, 23, 0, 20, 20, NO_DFS, PSCAN_MKK1 | PSCAN_MKK2 },
72 #define	F1_5170_5230	AFTER(F3_5120_5240)
73 	{ 5170, 5230, 20, 0, 20, 20, NO_DFS, PSCAN_MKK1 | PSCAN_MKK2 },
74 #define	F2_5170_5230	AFTER(F1_5170_5230)
75 
76 	{ 5180, 5240, 15, 0, 20, 20, NO_DFS, PSCAN_FCC | PSCAN_ETSI },
77 #define	F1_5180_5240	AFTER(F2_5170_5230)
78 	{ 5180, 5240, 17, 6, 20, 20, NO_DFS, PSCAN_FCC },
79 #define	F2_5180_5240	AFTER(F1_5180_5240)
80 	{ 5180, 5240, 18, 0, 20, 20, NO_DFS, PSCAN_FCC | PSCAN_ETSI },
81 #define	F3_5180_5240	AFTER(F2_5180_5240)
82 	{ 5180, 5240, 20, 0, 20, 20, NO_DFS, PSCAN_FCC | PSCAN_ETSI },
83 #define	F4_5180_5240	AFTER(F3_5180_5240)
84 	{ 5180, 5240, 23, 0, 20, 20, NO_DFS, PSCAN_FCC | PSCAN_ETSI },
85 #define	F5_5180_5240	AFTER(F4_5180_5240)
86 	{ 5180, 5240, 23, 6, 20, 20, NO_DFS, PSCAN_FCC },
87 #define	F6_5180_5240	AFTER(F5_5180_5240)
88 	{ 5180, 5240, 17, 6, 20, 10, NO_DFS, PSCAN_FCC },
89 #define	F7_5180_5240	AFTER(F6_5180_5240)
90 	{ 5180, 5240, 17, 6, 20,  5, NO_DFS, PSCAN_FCC },
91 #define	F8_5180_5240	AFTER(F7_5180_5240)
92 	{ 5180, 5320, 20, 6, 20, 20, DFS_ETSI, PSCAN_ETSI },
93 
94 #define	F1_5180_5320	AFTER(F8_5180_5240)
95 	{ 5240, 5280, 23, 0, 20, 20, DFS_FCC3, PSCAN_FCC | PSCAN_ETSI },
96 
97 #define	F1_5240_5280	AFTER(F1_5180_5320)
98 	{ 5260, 5280, 23, 0, 20, 20, DFS_FCC3 | DFS_ETSI, PSCAN_FCC | PSCAN_ETSI },
99 
100 #define	F1_5260_5280	AFTER(F1_5240_5280)
101 	{ 5260, 5320, 18, 0, 20, 20, DFS_FCC3 | DFS_ETSI, PSCAN_FCC | PSCAN_ETSI },
102 
103 #define	F1_5260_5320	AFTER(F1_5260_5280)
104 	{ 5260, 5320, 20, 0, 20, 20, DFS_FCC3 | DFS_ETSI | DFS_MKK4, PSCAN_FCC | PSCAN_ETSI | PSCAN_MKK3  },
105 #define	F2_5260_5320	AFTER(F1_5260_5320)
106 
107 	{ 5260, 5320, 20, 6, 20, 20, DFS_FCC3 | DFS_ETSI, PSCAN_FCC },
108 #define	F3_5260_5320	AFTER(F2_5260_5320)
109 	{ 5260, 5320, 23, 6, 20, 20, DFS_FCC3 | DFS_ETSI, PSCAN_FCC },
110 #define	F4_5260_5320	AFTER(F3_5260_5320)
111 	{ 5260, 5320, 23, 6, 20, 20, DFS_FCC3 | DFS_ETSI, PSCAN_FCC },
112 #define	F5_5260_5320	AFTER(F4_5260_5320)
113 	{ 5260, 5320, 30, 0, 20, 20, NO_DFS, NO_PSCAN },
114 #define	F6_5260_5320	AFTER(F5_5260_5320)
115 	{ 5260, 5320, 23, 6, 20, 10, DFS_FCC3 | DFS_ETSI, PSCAN_FCC },
116 #define	F7_5260_5320	AFTER(F6_5260_5320)
117 	{ 5260, 5320, 23, 6, 20,  5, DFS_FCC3 | DFS_ETSI, PSCAN_FCC },
118 #define	F8_5260_5320	AFTER(F7_5260_5320)
119 
120 	{ 5260, 5700, 5,  6, 20, 20, DFS_FCC3 | DFS_ETSI, NO_PSCAN },
121 #define	F1_5260_5700	AFTER(F8_5260_5320)
122 	{ 5260, 5700, 5,  6, 10, 10, DFS_FCC3 | DFS_ETSI, NO_PSCAN },
123 #define	F2_5260_5700	AFTER(F1_5260_5700)
124 	{ 5260, 5700, 5,  6,  5,  5, DFS_FCC3 | DFS_ETSI, NO_PSCAN },
125 #define	F3_5260_5700	AFTER(F2_5260_5700)
126 
127 	{ 5280, 5320, 17, 6, 20, 20, DFS_FCC3 | DFS_ETSI, PSCAN_FCC },
128 #define	F1_5280_5320	AFTER(F3_5260_5700)
129 
130 	{ 5500, 5580, 23, 6, 20, 20, DFS_FCC3, PSCAN_FCC },
131 #define	F1_5500_5580	AFTER(F1_5280_5320)
132 
133 	{ 5500, 5620, 30, 6, 20, 20, DFS_ETSI, PSCAN_ETSI },
134 #define	F1_5500_5620	AFTER(F1_5500_5580)
135 
136 	{ 5500, 5700, 20, 6, 20, 20, DFS_FCC3 | DFS_ETSI, PSCAN_FCC },
137 #define	F1_5500_5700	AFTER(F1_5500_5620)
138 	{ 5500, 5700, 27, 0, 20, 20, DFS_FCC3 | DFS_ETSI, PSCAN_FCC | PSCAN_ETSI },
139 #define	F2_5500_5700	AFTER(F1_5500_5700)
140 	{ 5500, 5700, 30, 0, 20, 20, DFS_FCC3 | DFS_ETSI, PSCAN_FCC | PSCAN_ETSI },
141 #define	F3_5500_5700	AFTER(F2_5500_5700)
142 	{ 5500, 5700, 23, 0, 20, 20, DFS_FCC3 | DFS_ETSI | DFS_MKK4, PSCAN_MKK3 | PSCAN_FCC },
143 #define	F4_5500_5700	AFTER(F3_5500_5700)
144 	{ 5660, 5720, 23, 6, 20, 20, DFS_FCC3 | DFS_ETSI, PSCAN_FCC | PSCAN_ETSI },
145 #define	F2_5660_5720	AFTER(F4_5500_5700)
146 
147 	{ 5745, 5805, 23, 0, 20, 20, NO_DFS, NO_PSCAN },
148 #define	F1_5745_5805	AFTER(F2_5660_5720)
149 	{ 5745, 5805, 30, 6, 20, 20, NO_DFS, NO_PSCAN },
150 #define	F2_5745_5805	AFTER(F1_5745_5805)
151 	{ 5745, 5805, 30, 6, 20, 20, DFS_ETSI, PSCAN_ETSI },
152 #define	F3_5745_5805	AFTER(F2_5745_5805)
153 	{ 5745, 5825, 5,  6, 20, 20, NO_DFS, NO_PSCAN },
154 #define	F1_5745_5825	AFTER(F3_5745_5805)
155 	{ 5745, 5825, 17, 0, 20, 20, NO_DFS, NO_PSCAN },
156 #define	F2_5745_5825	AFTER(F1_5745_5825)
157 	{ 5745, 5825, 20, 0, 20, 20, NO_DFS, NO_PSCAN },
158 #define	F3_5745_5825	AFTER(F2_5745_5825)
159 	{ 5745, 5825, 30, 0, 20, 20, NO_DFS, NO_PSCAN },
160 #define	F4_5745_5825	AFTER(F3_5745_5825)
161 	{ 5745, 5825, 30, 6, 20, 20, NO_DFS, NO_PSCAN },
162 #define	F5_5745_5825	AFTER(F4_5745_5825)
163 	{ 5745, 5825, 30, 6, 20, 20, NO_DFS, NO_PSCAN },
164 #define	F6_5745_5825	AFTER(F5_5745_5825)
165 	{ 5745, 5825, 5,  6, 10, 10, NO_DFS, NO_PSCAN },
166 #define	F7_5745_5825	AFTER(F6_5745_5825)
167 	{ 5745, 5825, 5,  6,  5,  5, NO_DFS, NO_PSCAN },
168 #define	F8_5745_5825	AFTER(F7_5745_5825)
169 	{ 5745, 5825, 30, 6, 20, 10, NO_DFS, NO_PSCAN },
170 #define	F9_5745_5825	AFTER(F8_5745_5825)
171 	{ 5745, 5825, 30, 6, 20,  5, NO_DFS, NO_PSCAN },
172 #define	F10_5745_5825	AFTER(F9_5745_5825)
173 
174 	/*
175 	 * Below are the world roaming channels
176 	 * All WWR domains have no power limit, instead use the card's CTL
177 	 * or max power settings.
178 	 */
179 	{ 4920, 4980, 30, 0, 20, 20, NO_DFS, PSCAN_WWR },
180 #define	W1_4920_4980	AFTER(F10_5745_5825)
181 	{ 5040, 5080, 30, 0, 20, 20, NO_DFS, PSCAN_WWR },
182 #define	W1_5040_5080	AFTER(W1_4920_4980)
183 	{ 5170, 5230, 30, 0, 20, 20, DFS_FCC3 | DFS_ETSI, PSCAN_WWR },
184 #define	W1_5170_5230	AFTER(W1_5040_5080)
185 	{ 5180, 5240, 30, 0, 20, 20, DFS_FCC3 | DFS_ETSI, PSCAN_WWR },
186 #define	W1_5180_5240	AFTER(W1_5170_5230)
187 	{ 5260, 5320, 30, 0, 20, 20, DFS_FCC3 | DFS_ETSI, PSCAN_WWR },
188 #define	W1_5260_5320	AFTER(W1_5180_5240)
189 	{ 5745, 5825, 30, 0, 20, 20, NO_DFS, PSCAN_WWR },
190 #define	W1_5745_5825	AFTER(W1_5260_5320)
191 	{ 5500, 5700, 30, 0, 20, 20, DFS_FCC3 | DFS_ETSI, PSCAN_WWR },
192 #define	W1_5500_5700	AFTER(W1_5745_5825)
193 	{ 5260, 5320, 30, 0, 20, 20, NO_DFS, NO_PSCAN },
194 #define	W2_5260_5320	AFTER(W1_5500_5700)
195 	{ 5180, 5240, 30, 0, 20, 20, NO_DFS, NO_PSCAN },
196 #define	W2_5180_5240	AFTER(W2_5260_5320)
197 	{ 5825, 5825, 30, 0, 20, 20, NO_DFS, PSCAN_WWR },
198 #define	W2_5825_5825	AFTER(W2_5180_5240)
199 };
200 
201 
202 /*
203  * 5GHz Turbo (dynamic & static) tags
204  */
205 static REG_DMN_FREQ_BAND regDmn5GhzTurboFreq[] = {
206 	{ 5130, 5210, 5,  6, 40, 40, NO_DFS, NO_PSCAN },
207 #define	T1_5130_5210	0
208 	{ 5250, 5330, 5,  6, 40, 40, DFS_FCC3, NO_PSCAN },
209 #define	T1_5250_5330	AFTER(T1_5130_5210)
210 	{ 5370, 5490, 5,  6, 40, 40, NO_DFS, NO_PSCAN },
211 #define	T1_5370_5490	AFTER(T1_5250_5330)
212 	{ 5530, 5650, 5,  6, 40, 40, DFS_FCC3, NO_PSCAN },
213 #define	T1_5530_5650	AFTER(T1_5370_5490)
214 	{ 5200, 5200, 23, 6, 40, 40, NO_DFS, NO_PSCAN },
215 #define	T7_5200_5200	AFTER(T1_5530_5650)
216 	{ 5150, 5190, 5,  6, 40, 40, NO_DFS, NO_PSCAN },
217 #define	T1_5230_5310	AFTER(T7_5200_5200)
218 	{ 5350, 5470, 5,  6, 40, 40, NO_DFS, NO_PSCAN },
219 #define	T1_5150_5190	AFTER(T1_5230_5310)
220 	{ 5230, 5310, 5,  6, 40, 40, DFS_FCC3, NO_PSCAN },
221 #define	T1_5350_5470	AFTER(T1_5150_5190)
222 	{ 5510, 5670, 5,  6, 40, 40, DFS_FCC3, NO_PSCAN },
223 #define	T1_5510_5670	AFTER(T1_5350_5470)
224 
225 	{ 5200, 5240, 17, 6, 40, 40, NO_DFS, NO_PSCAN },
226 #define	T1_5200_5240	AFTER(T1_5510_5670)
227 	{ 5200, 5240, 23, 6, 40, 40, NO_DFS, NO_PSCAN },
228 #define	T2_5200_5240	AFTER(T1_5200_5240)
229 	{ 5210, 5210, 17, 6, 40, 40, NO_DFS, NO_PSCAN },
230 #define	T1_5210_5210	AFTER(T2_5200_5240)
231 	{ 5210, 5210, 23, 0, 40, 40, NO_DFS, NO_PSCAN },
232 #define	T2_5210_5210	AFTER(T1_5210_5210)
233 	{ 5210, 5210, 23, 6, 40, 40, NO_DFS, NO_PSCAN },
234 #define	T7_5210_5210	AFTER(T2_5210_5210)
235 
236 	{ 5240, 5240, 23, 6, 40, 40, NO_DFS, PSCAN_FCC_T },
237 #define	T1_5240_5240	AFTER(T7_5210_5210)
238 	{ 5280, 5280, 23, 6, 40, 40, DFS_FCC3, PSCAN_FCC_T },
239 #define	T1_5280_5280	AFTER(T1_5240_5240)
240 	{ 5280, 5280, 20, 6, 40, 40, DFS_FCC3, PSCAN_FCC_T },
241 #define	T2_5280_5280	AFTER(T1_5280_5280)
242 	{ 5250, 5250, 17, 0, 40, 40, DFS_FCC3, PSCAN_FCC_T },
243 #define	T1_5250_5250	AFTER(T2_5280_5280)
244 	{ 5290, 5290, 20, 0, 40, 40, DFS_FCC3, PSCAN_FCC_T },
245 #define	T1_5290_5290	AFTER(T1_5250_5250)
246 	{ 5250, 5290, 20, 0, 40, 40, DFS_FCC3, PSCAN_FCC_T },
247 #define	T1_5250_5290	AFTER(T1_5290_5290)
248 	{ 5250, 5290, 23, 6, 40, 40, DFS_FCC3, PSCAN_FCC_T },
249 #define	T2_5250_5290	AFTER(T1_5250_5290)
250 	{ 5250, 5290, 23, 6, 40, 40, NO_DFS, PSCAN_FCC_T },
251 #define	T3_5250_5290	AFTER(T2_5250_5290)
252 
253 	{ 5540, 5660, 20, 6, 40, 40, DFS_FCC3, PSCAN_FCC_T },
254 #define	T1_5540_5660	AFTER(T3_5250_5290)
255 	{ 5760, 5800, 20, 0, 40, 40, NO_DFS, NO_PSCAN },
256 #define	T1_5760_5800	AFTER(T1_5540_5660)
257 	{ 5760, 5800, 30, 6, 40, 40, NO_DFS, NO_PSCAN },
258 #define	T2_5760_5800	AFTER(T1_5760_5800)
259 
260 	{ 5765, 5805, 30, 6, 40, 40, NO_DFS, NO_PSCAN },
261 #define	T1_5765_5805	AFTER(T2_5760_5800)
262 
263 	/*
264 	 * Below are the WWR frequencies
265 	 */
266 	{ 5210, 5250, 15, 0, 40, 40, DFS_FCC3 | DFS_ETSI, PSCAN_WWR },
267 #define	WT1_5210_5250	AFTER(T1_5765_5805)
268 	{ 5290, 5290, 18, 0, 40, 40, DFS_FCC3 | DFS_ETSI, PSCAN_WWR },
269 #define	WT1_5290_5290	AFTER(WT1_5210_5250)
270 	{ 5540, 5660, 20, 0, 40, 40, DFS_FCC3 | DFS_ETSI, PSCAN_WWR },
271 #define	WT1_5540_5660	AFTER(WT1_5290_5290)
272 	{ 5760, 5800, 20, 0, 40, 40, NO_DFS, PSCAN_WWR },
273 #define	WT1_5760_5800	AFTER(WT1_5540_5660)
274 };
275 
276 /*
277  * 2GHz 11b channel tags
278  */
279 static REG_DMN_FREQ_BAND regDmn2GhzFreq[] = {
280 	{ 2312, 2372, 5,  6, 20, 5, NO_DFS, NO_PSCAN },
281 #define	F1_2312_2372	0
282 	{ 2312, 2372, 20, 0, 20, 5, NO_DFS, NO_PSCAN },
283 #define	F2_2312_2372	AFTER(F1_2312_2372)
284 
285 	{ 2412, 2472, 5,  6, 20, 5, NO_DFS, NO_PSCAN },
286 #define	F1_2412_2472	AFTER(F2_2312_2372)
287 	{ 2412, 2472, 20, 0, 20, 5, NO_DFS, PSCAN_MKKA },
288 #define	F2_2412_2472	AFTER(F1_2412_2472)
289 	{ 2412, 2472, 30, 0, 20, 5, NO_DFS, NO_PSCAN },
290 #define	F3_2412_2472	AFTER(F2_2412_2472)
291 
292 	{ 2412, 2462, 27, 6, 20, 5, NO_DFS, NO_PSCAN },
293 #define	F1_2412_2462	AFTER(F3_2412_2472)
294 	{ 2412, 2462, 20, 0, 20, 5, NO_DFS, PSCAN_MKKA },
295 #define	F2_2412_2462	AFTER(F1_2412_2462)
296 
297 	{ 2432, 2442, 20, 0, 20, 5, NO_DFS, NO_PSCAN },
298 #define	F1_2432_2442	AFTER(F2_2412_2462)
299 
300 	{ 2457, 2472, 20, 0, 20, 5, NO_DFS, NO_PSCAN },
301 #define	F1_2457_2472	AFTER(F1_2432_2442)
302 
303 	{ 2467, 2472, 20, 0, 20, 5, NO_DFS, PSCAN_MKKA2 | PSCAN_MKKA },
304 #define	F1_2467_2472	AFTER(F1_2457_2472)
305 
306 	{ 2484, 2484, 5,  6, 20, 5, NO_DFS, NO_PSCAN },
307 #define	F1_2484_2484	AFTER(F1_2467_2472)
308 	{ 2484, 2484, 20, 0, 20, 5, NO_DFS, PSCAN_MKKA | PSCAN_MKKA1 | PSCAN_MKKA2 },
309 #define	F2_2484_2484	AFTER(F1_2484_2484)
310 
311 	{ 2512, 2732, 5,  6, 20, 5, NO_DFS, NO_PSCAN },
312 #define	F1_2512_2732	AFTER(F2_2484_2484)
313 
314 	/*
315 	 * WWR have powers opened up to 20dBm.
316 	 * Limits should often come from CTL/Max powers
317 	 */
318 	{ 2312, 2372, 20, 0, 20, 5, NO_DFS, NO_PSCAN },
319 #define	W1_2312_2372	AFTER(F1_2512_2732)
320 	{ 2412, 2412, 20, 0, 20, 5, NO_DFS, NO_PSCAN },
321 #define	W1_2412_2412	AFTER(W1_2312_2372)
322 	{ 2417, 2432, 20, 0, 20, 5, NO_DFS, NO_PSCAN },
323 #define	W1_2417_2432	AFTER(W1_2412_2412)
324 	{ 2437, 2442, 20, 0, 20, 5, NO_DFS, NO_PSCAN },
325 #define	W1_2437_2442	AFTER(W1_2417_2432)
326 	{ 2447, 2457, 20, 0, 20, 5, NO_DFS, NO_PSCAN },
327 #define	W1_2447_2457	AFTER(W1_2437_2442)
328 	{ 2462, 2462, 20, 0, 20, 5, NO_DFS, NO_PSCAN },
329 #define	W1_2462_2462	AFTER(W1_2447_2457)
330 	{ 2467, 2467, 20, 0, 20, 5, NO_DFS, PSCAN_WWR | IS_ECM_CHAN },
331 #define	W1_2467_2467	AFTER(W1_2462_2462)
332 	{ 2467, 2467, 20, 0, 20, 5, NO_DFS, NO_PSCAN | IS_ECM_CHAN },
333 #define	W2_2467_2467	AFTER(W1_2467_2467)
334 	{ 2472, 2472, 20, 0, 20, 5, NO_DFS, PSCAN_WWR | IS_ECM_CHAN },
335 #define	W1_2472_2472	AFTER(W2_2467_2467)
336 	{ 2472, 2472, 20, 0, 20, 5, NO_DFS, NO_PSCAN | IS_ECM_CHAN },
337 #define	W2_2472_2472	AFTER(W1_2472_2472)
338 	{ 2484, 2484, 20, 0, 20, 5, NO_DFS, PSCAN_WWR | IS_ECM_CHAN },
339 #define	W1_2484_2484	AFTER(W2_2472_2472)
340 	{ 2484, 2484, 20, 0, 20, 5, NO_DFS, NO_PSCAN | IS_ECM_CHAN },
341 #define	W2_2484_2484	AFTER(W1_2484_2484)
342 };
343 
344 /*
345  * 2GHz 11g channel tags
346  */
347 static REG_DMN_FREQ_BAND regDmn2Ghz11gFreq[] = {
348 	{ 2312, 2372, 5,  6, 20, 5, NO_DFS, NO_PSCAN },
349 #define	G1_2312_2372	0
350 	{ 2312, 2372, 20, 0, 20, 5, NO_DFS, NO_PSCAN },
351 #define	G2_2312_2372	AFTER(G1_2312_2372)
352 	{ 2312, 2372, 5,  6, 10, 5, NO_DFS, NO_PSCAN },
353 #define	G3_2312_2372	AFTER(G2_2312_2372)
354 	{ 2312, 2372, 5,  6,  5, 5, NO_DFS, NO_PSCAN },
355 #define	G4_2312_2372	AFTER(G3_2312_2372)
356 
357 	{ 2412, 2472, 5,  6, 20, 5, NO_DFS, NO_PSCAN },
358 #define	G1_2412_2472	AFTER(G4_2312_2372)
359 	{ 2412, 2472, 20, 0, 20, 5,  NO_DFS, PSCAN_MKKA_G },
360 #define	G2_2412_2472	AFTER(G1_2412_2472)
361 	{ 2412, 2472, 30, 0, 20, 5, NO_DFS, NO_PSCAN },
362 #define	G3_2412_2472	AFTER(G2_2412_2472)
363 	{ 2412, 2472, 5,  6, 10, 5, NO_DFS, NO_PSCAN },
364 #define	G4_2412_2472	AFTER(G3_2412_2472)
365 	{ 2412, 2472, 5,  6,  5, 5, NO_DFS, NO_PSCAN },
366 #define	G5_2412_2472	AFTER(G4_2412_2472)
367 
368 	{ 2412, 2462, 27, 6, 20, 5, NO_DFS, NO_PSCAN },
369 #define	G1_2412_2462	AFTER(G5_2412_2472)
370 	{ 2412, 2462, 20, 0, 20, 5, NO_DFS, PSCAN_MKKA_G },
371 #define	G2_2412_2462	AFTER(G1_2412_2462)
372 	{ 2412, 2462, 27, 6, 10, 5, NO_DFS, NO_PSCAN },
373 #define	G3_2412_2462	AFTER(G2_2412_2462)
374 	{ 2412, 2462, 27, 6,  5, 5, NO_DFS, NO_PSCAN },
375 #define	G4_2412_2462	AFTER(G3_2412_2462)
376 
377 	{ 2432, 2442, 20, 0, 20, 5, NO_DFS, NO_PSCAN },
378 #define	G1_2432_2442	AFTER(G4_2412_2462)
379 
380 	{ 2457, 2472, 20, 0, 20, 5, NO_DFS, NO_PSCAN },
381 #define	G1_2457_2472	AFTER(G1_2432_2442)
382 
383 	{ 2512, 2732, 5,  6, 20, 5, NO_DFS, NO_PSCAN },
384 #define	G1_2512_2732	AFTER(G1_2457_2472)
385 	{ 2512, 2732, 5,  6, 10, 5, NO_DFS, NO_PSCAN },
386 #define	G2_2512_2732	AFTER(G1_2512_2732)
387 	{ 2512, 2732, 5,  6,  5, 5, NO_DFS, NO_PSCAN },
388 #define	G3_2512_2732	AFTER(G2_2512_2732)
389 
390 	{ 2467, 2472, 20, 0, 20, 5, NO_DFS, PSCAN_MKKA2 | PSCAN_MKKA },
391 #define	G1_2467_2472	AFTER(G3_2512_2732)
392 
393 	/*
394 	 * WWR open up the power to 20dBm
395 	 */
396 	{ 2312, 2372, 20, 0, 20, 5, NO_DFS, NO_PSCAN },
397 #define	WG1_2312_2372	AFTER(G1_2467_2472)
398 	{ 2412, 2412, 20, 0, 20, 5, NO_DFS, NO_PSCAN },
399 #define	WG1_2412_2412	AFTER(WG1_2312_2372)
400 	{ 2417, 2432, 20, 0, 20, 5, NO_DFS, NO_PSCAN },
401 #define	WG1_2417_2432	AFTER(WG1_2412_2412)
402 	{ 2437, 2442, 20, 0, 20, 5, NO_DFS, NO_PSCAN },
403 #define	WG1_2437_2442	AFTER(WG1_2417_2432)
404 	{ 2447, 2457, 20, 0, 20, 5, NO_DFS, NO_PSCAN },
405 #define	WG1_2447_2457	AFTER(WG1_2437_2442)
406 	{ 2462, 2462, 20, 0, 20, 5, NO_DFS, NO_PSCAN },
407 #define	WG1_2462_2462	AFTER(WG1_2447_2457)
408 	{ 2467, 2467, 20, 0, 20, 5, NO_DFS, PSCAN_WWR | IS_ECM_CHAN },
409 #define	WG1_2467_2467	AFTER(WG1_2462_2462)
410 	{ 2467, 2467, 20, 0, 20, 5, NO_DFS, NO_PSCAN | IS_ECM_CHAN },
411 #define	WG2_2467_2467	AFTER(WG1_2467_2467)
412 	{ 2472, 2472, 20, 0, 20, 5, NO_DFS, PSCAN_WWR | IS_ECM_CHAN },
413 #define	WG1_2472_2472	AFTER(WG2_2467_2467)
414 	{ 2472, 2472, 20, 0, 20, 5, NO_DFS, NO_PSCAN | IS_ECM_CHAN },
415 #define	WG2_2472_2472	AFTER(WG1_2472_2472)
416 };
417 
418 /*
419  * 2GHz Dynamic turbo tags
420  */
421 static REG_DMN_FREQ_BAND regDmn2Ghz11gTurboFreq[] = {
422 	{ 2312, 2372, 5,  6, 40, 40, NO_DFS, NO_PSCAN },
423 #define	T1_2312_2372	0
424 	{ 2437, 2437, 5,  6, 40, 40, NO_DFS, NO_PSCAN },
425 #define	T1_2437_2437	AFTER(T1_2312_2372)
426 	{ 2437, 2437, 20, 6, 40, 40, NO_DFS, NO_PSCAN },
427 #define	T2_2437_2437	AFTER(T1_2437_2437)
428 	{ 2437, 2437, 18, 6, 40, 40, NO_DFS, PSCAN_WWR },
429 #define	T3_2437_2437	AFTER(T2_2437_2437)
430 	{ 2512, 2732, 5,  6, 40, 40, NO_DFS, NO_PSCAN },
431 #define	T1_2512_2732	AFTER(T3_2437_2437)
432 };
433 
434 #endif
435