2 * Copyright (c) 2008-2009 Atheros Communications Inc.
4 * Modified for iPXE by Scott K Logan <logans@cottsay.net> July 2011
5 * Original from Linux kernel 3.0.1
7 * Permission to use, copy, modify, and/or distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
158 DEBUG_REG_DMN = 0x01ff,
161 ///* Regpair to CTL band mapping */
162 //static struct reg_dmn_pair_mapping regDomainPairs[] = {
163 // /* regpair, 5 GHz CTL, 2 GHz CTL */
164 // {NO_ENUMRD, DEBUG_REG_DMN, DEBUG_REG_DMN},
165 // {NULL1_WORLD, NO_CTL, CTL_ETSI},
166 // {NULL1_ETSIB, NO_CTL, CTL_ETSI},
167 // {NULL1_ETSIC, NO_CTL, CTL_ETSI},
169 // {FCC2_FCCA, CTL_FCC, CTL_FCC},
170 // {FCC2_WORLD, CTL_FCC, CTL_ETSI},
171 // {FCC2_ETSIC, CTL_FCC, CTL_ETSI},
172 // {FCC3_FCCA, CTL_FCC, CTL_FCC},
173 // {FCC3_WORLD, CTL_FCC, CTL_ETSI},
174 // {FCC4_FCCA, CTL_FCC, CTL_FCC},
175 // {FCC5_FCCA, CTL_FCC, CTL_FCC},
176 // {FCC6_FCCA, CTL_FCC, CTL_FCC},
177 // {FCC6_WORLD, CTL_FCC, CTL_ETSI},
179 // {ETSI1_WORLD, CTL_ETSI, CTL_ETSI},
180 // {ETSI2_WORLD, CTL_ETSI, CTL_ETSI},
181 // {ETSI3_WORLD, CTL_ETSI, CTL_ETSI},
182 // {ETSI4_WORLD, CTL_ETSI, CTL_ETSI},
183 // {ETSI5_WORLD, CTL_ETSI, CTL_ETSI},
184 // {ETSI6_WORLD, CTL_ETSI, CTL_ETSI},
186 // /* XXX: For ETSI3_ETSIA, Was NO_CTL meant for the 2 GHz band ? */
187 // {ETSI3_ETSIA, CTL_ETSI, CTL_ETSI},
188 // {FRANCE_RES, CTL_ETSI, CTL_ETSI},
190 // {FCC1_WORLD, CTL_FCC, CTL_ETSI},
191 // {FCC1_FCCA, CTL_FCC, CTL_FCC},
192 // {APL1_WORLD, CTL_FCC, CTL_ETSI},
193 // {APL2_WORLD, CTL_FCC, CTL_ETSI},
194 // {APL3_WORLD, CTL_FCC, CTL_ETSI},
195 // {APL4_WORLD, CTL_FCC, CTL_ETSI},
196 // {APL5_WORLD, CTL_FCC, CTL_ETSI},
197 // {APL6_WORLD, CTL_ETSI, CTL_ETSI},
198 // {APL8_WORLD, CTL_ETSI, CTL_ETSI},
199 // {APL9_WORLD, CTL_ETSI, CTL_ETSI},
201 // {APL3_FCCA, CTL_FCC, CTL_FCC},
202 // {APL7_FCCA, CTL_FCC, CTL_FCC},
203 // {APL1_ETSIC, CTL_FCC, CTL_ETSI},
204 // {APL2_ETSIC, CTL_FCC, CTL_ETSI},
205 // {APL2_APLD, CTL_FCC, NO_CTL},
207 // {MKK1_MKKA, CTL_MKK, CTL_MKK},
208 // {MKK1_MKKB, CTL_MKK, CTL_MKK},
209 // {MKK1_FCCA, CTL_MKK, CTL_FCC},
210 // {MKK1_MKKA1, CTL_MKK, CTL_MKK},
211 // {MKK1_MKKA2, CTL_MKK, CTL_MKK},
212 // {MKK1_MKKC, CTL_MKK, CTL_MKK},
214 // {MKK2_MKKA, CTL_MKK, CTL_MKK},
215 // {MKK3_MKKA, CTL_MKK, CTL_MKK},
216 // {MKK3_MKKB, CTL_MKK, CTL_MKK},
217 // {MKK3_MKKA1, CTL_MKK, CTL_MKK},
218 // {MKK3_MKKA2, CTL_MKK, CTL_MKK},
219 // {MKK3_MKKC, CTL_MKK, CTL_MKK},
220 // {MKK3_FCCA, CTL_MKK, CTL_FCC},
222 // {MKK4_MKKA, CTL_MKK, CTL_MKK},
223 // {MKK4_MKKB, CTL_MKK, CTL_MKK},
224 // {MKK4_MKKA1, CTL_MKK, CTL_MKK},
225 // {MKK4_MKKA2, CTL_MKK, CTL_MKK},
226 // {MKK4_MKKC, CTL_MKK, CTL_MKK},
227 // {MKK4_FCCA, CTL_MKK, CTL_FCC},
229 // {MKK5_MKKB, CTL_MKK, CTL_MKK},
230 // {MKK5_MKKA2, CTL_MKK, CTL_MKK},
231 // {MKK5_MKKC, CTL_MKK, CTL_MKK},
233 // {MKK6_MKKB, CTL_MKK, CTL_MKK},
234 // {MKK6_MKKA1, CTL_MKK, CTL_MKK},
235 // {MKK6_MKKA2, CTL_MKK, CTL_MKK},
236 // {MKK6_MKKC, CTL_MKK, CTL_MKK},
237 // {MKK6_FCCA, CTL_MKK, CTL_FCC},
239 // {MKK7_MKKB, CTL_MKK, CTL_MKK},
240 // {MKK7_MKKA1, CTL_MKK, CTL_MKK},
241 // {MKK7_MKKA2, CTL_MKK, CTL_MKK},
242 // {MKK7_MKKC, CTL_MKK, CTL_MKK},
243 // {MKK7_FCCA, CTL_MKK, CTL_FCC},
245 // {MKK8_MKKB, CTL_MKK, CTL_MKK},
246 // {MKK8_MKKA2, CTL_MKK, CTL_MKK},
247 // {MKK8_MKKC, CTL_MKK, CTL_MKK},
249 // {MKK9_MKKA, CTL_MKK, CTL_MKK},
250 // {MKK9_FCCA, CTL_MKK, CTL_FCC},
251 // {MKK9_MKKA1, CTL_MKK, CTL_MKK},
252 // {MKK9_MKKA2, CTL_MKK, CTL_MKK},
253 // {MKK9_MKKC, CTL_MKK, CTL_MKK},
255 // {MKK10_MKKA, CTL_MKK, CTL_MKK},
256 // {MKK10_FCCA, CTL_MKK, CTL_FCC},
257 // {MKK10_MKKA1, CTL_MKK, CTL_MKK},
258 // {MKK10_MKKA2, CTL_MKK, CTL_MKK},
259 // {MKK10_MKKC, CTL_MKK, CTL_MKK},
261 // {MKK11_MKKA, CTL_MKK, CTL_MKK},
262 // {MKK11_FCCA, CTL_MKK, CTL_FCC},
263 // {MKK11_MKKA1, CTL_MKK, CTL_MKK},
264 // {MKK11_MKKA2, CTL_MKK, CTL_MKK},
265 // {MKK11_MKKC, CTL_MKK, CTL_MKK},
267 // {MKK12_MKKA, CTL_MKK, CTL_MKK},
268 // {MKK12_FCCA, CTL_MKK, CTL_FCC},
269 // {MKK12_MKKA1, CTL_MKK, CTL_MKK},
270 // {MKK12_MKKA2, CTL_MKK, CTL_MKK},
271 // {MKK12_MKKC, CTL_MKK, CTL_MKK},
273 // {MKK13_MKKB, CTL_MKK, CTL_MKK},
274 // {MKK14_MKKA1, CTL_MKK, CTL_MKK},
275 // {MKK15_MKKA1, CTL_MKK, CTL_MKK},
277 // {WOR0_WORLD, NO_CTL, NO_CTL},
278 // {WOR1_WORLD, NO_CTL, NO_CTL},
279 // {WOR2_WORLD, NO_CTL, NO_CTL},
280 // {WOR3_WORLD, NO_CTL, NO_CTL},
281 // {WOR4_WORLD, NO_CTL, NO_CTL},
282 // {WOR5_ETSIC, NO_CTL, NO_CTL},
283 // {WOR01_WORLD, NO_CTL, NO_CTL},
284 // {WOR02_WORLD, NO_CTL, NO_CTL},
285 // {EU1_WORLD, NO_CTL, NO_CTL},
286 // {WOR9_WORLD, NO_CTL, NO_CTL},
287 // {WORA_WORLD, NO_CTL, NO_CTL},
288 // {WORB_WORLD, NO_CTL, NO_CTL},
289 // {WORC_WORLD, NO_CTL, NO_CTL},
292 //static struct country_code_to_enum_rd allCountries[] = {
293 // {CTRY_DEBUG, NO_ENUMRD, "DB"},
294 // {CTRY_DEFAULT, FCC1_FCCA, "CO"},
295 // {CTRY_ALBANIA, NULL1_WORLD, "AL"},
296 // {CTRY_ALGERIA, NULL1_WORLD, "DZ"},
297 // {CTRY_ARGENTINA, FCC3_WORLD, "AR"},
298 // {CTRY_ARMENIA, ETSI4_WORLD, "AM"},
299 // {CTRY_ARUBA, ETSI1_WORLD, "AW"},
300 // {CTRY_AUSTRALIA, FCC2_WORLD, "AU"},
301 // {CTRY_AUSTRALIA2, FCC6_WORLD, "AU"},
302 // {CTRY_AUSTRIA, ETSI1_WORLD, "AT"},
303 // {CTRY_AZERBAIJAN, ETSI4_WORLD, "AZ"},
304 // {CTRY_BAHRAIN, APL6_WORLD, "BH"},
305 // {CTRY_BANGLADESH, NULL1_WORLD, "BD"},
306 // {CTRY_BARBADOS, FCC2_WORLD, "BB"},
307 // {CTRY_BELARUS, ETSI1_WORLD, "BY"},
308 // {CTRY_BELGIUM, ETSI1_WORLD, "BE"},
309 // {CTRY_BELGIUM2, ETSI4_WORLD, "BL"},
310 // {CTRY_BELIZE, APL1_ETSIC, "BZ"},
311 // {CTRY_BOLIVIA, APL1_ETSIC, "BO"},
312 // {CTRY_BOSNIA_HERZ, ETSI1_WORLD, "BA"},
313 // {CTRY_BRAZIL, FCC3_WORLD, "BR"},
314 // {CTRY_BRUNEI_DARUSSALAM, APL1_WORLD, "BN"},
315 // {CTRY_BULGARIA, ETSI6_WORLD, "BG"},
316 // {CTRY_CAMBODIA, ETSI1_WORLD, "KH"},
317 // {CTRY_CANADA, FCC3_FCCA, "CA"},
318 // {CTRY_CANADA2, FCC6_FCCA, "CA"},
319 // {CTRY_CHILE, APL6_WORLD, "CL"},
320 // {CTRY_CHINA, APL1_WORLD, "CN"},
321 // {CTRY_COLOMBIA, FCC1_FCCA, "CO"},
322 // {CTRY_COSTA_RICA, FCC1_WORLD, "CR"},
323 // {CTRY_CROATIA, ETSI1_WORLD, "HR"},
324 // {CTRY_CYPRUS, ETSI1_WORLD, "CY"},
325 // {CTRY_CZECH, ETSI3_WORLD, "CZ"},
326 // {CTRY_DENMARK, ETSI1_WORLD, "DK"},
327 // {CTRY_DOMINICAN_REPUBLIC, FCC1_FCCA, "DO"},
328 // {CTRY_ECUADOR, FCC1_WORLD, "EC"},
329 // {CTRY_EGYPT, ETSI3_WORLD, "EG"},
330 // {CTRY_EL_SALVADOR, FCC1_WORLD, "SV"},
331 // {CTRY_ESTONIA, ETSI1_WORLD, "EE"},
332 // {CTRY_FINLAND, ETSI1_WORLD, "FI"},
333 // {CTRY_FRANCE, ETSI1_WORLD, "FR"},
334 // {CTRY_GEORGIA, ETSI4_WORLD, "GE"},
335 // {CTRY_GERMANY, ETSI1_WORLD, "DE"},
336 // {CTRY_GREECE, ETSI1_WORLD, "GR"},
337 // {CTRY_GREENLAND, ETSI1_WORLD, "GL"},
338 // {CTRY_GRENEDA, FCC3_FCCA, "GD"},
339 // {CTRY_GUAM, FCC1_FCCA, "GU"},
340 // {CTRY_GUATEMALA, FCC1_FCCA, "GT"},
341 // {CTRY_HAITI, ETSI1_WORLD, "HT"},
342 // {CTRY_HONDURAS, NULL1_WORLD, "HN"},
343 // {CTRY_HONG_KONG, FCC3_WORLD, "HK"},
344 // {CTRY_HUNGARY, ETSI1_WORLD, "HU"},
345 // {CTRY_ICELAND, ETSI1_WORLD, "IS"},
346 // {CTRY_INDIA, APL6_WORLD, "IN"},
347 // {CTRY_INDONESIA, NULL1_WORLD, "ID"},
348 // {CTRY_IRAN, APL1_WORLD, "IR"},
349 // {CTRY_IRELAND, ETSI1_WORLD, "IE"},
350 // {CTRY_ISRAEL, NULL1_WORLD, "IL"},
351 // {CTRY_ITALY, ETSI1_WORLD, "IT"},
352 // {CTRY_JAMAICA, FCC3_WORLD, "JM"},
354 // {CTRY_JAPAN, MKK1_MKKA, "JP"},
355 // {CTRY_JAPAN1, MKK1_MKKB, "JP"},
356 // {CTRY_JAPAN2, MKK1_FCCA, "JP"},
357 // {CTRY_JAPAN3, MKK2_MKKA, "JP"},
358 // {CTRY_JAPAN4, MKK1_MKKA1, "JP"},
359 // {CTRY_JAPAN5, MKK1_MKKA2, "JP"},
360 // {CTRY_JAPAN6, MKK1_MKKC, "JP"},
361 // {CTRY_JAPAN7, MKK3_MKKB, "JP"},
362 // {CTRY_JAPAN8, MKK3_MKKA2, "JP"},
363 // {CTRY_JAPAN9, MKK3_MKKC, "JP"},
364 // {CTRY_JAPAN10, MKK4_MKKB, "JP"},
365 // {CTRY_JAPAN11, MKK4_MKKA2, "JP"},
366 // {CTRY_JAPAN12, MKK4_MKKC, "JP"},
367 // {CTRY_JAPAN13, MKK5_MKKB, "JP"},
368 // {CTRY_JAPAN14, MKK5_MKKA2, "JP"},
369 // {CTRY_JAPAN15, MKK5_MKKC, "JP"},
370 // {CTRY_JAPAN16, MKK6_MKKB, "JP"},
371 // {CTRY_JAPAN17, MKK6_MKKA2, "JP"},
372 // {CTRY_JAPAN18, MKK6_MKKC, "JP"},
373 // {CTRY_JAPAN19, MKK7_MKKB, "JP"},
374 // {CTRY_JAPAN20, MKK7_MKKA2, "JP"},
375 // {CTRY_JAPAN21, MKK7_MKKC, "JP"},
376 // {CTRY_JAPAN22, MKK8_MKKB, "JP"},
377 // {CTRY_JAPAN23, MKK8_MKKA2, "JP"},
378 // {CTRY_JAPAN24, MKK8_MKKC, "JP"},
379 // {CTRY_JAPAN25, MKK3_MKKA, "JP"},
380 // {CTRY_JAPAN26, MKK3_MKKA1, "JP"},
381 // {CTRY_JAPAN27, MKK3_FCCA, "JP"},
382 // {CTRY_JAPAN28, MKK4_MKKA1, "JP"},
383 // {CTRY_JAPAN29, MKK4_FCCA, "JP"},
384 // {CTRY_JAPAN30, MKK6_MKKA1, "JP"},
385 // {CTRY_JAPAN31, MKK6_FCCA, "JP"},
386 // {CTRY_JAPAN32, MKK7_MKKA1, "JP"},
387 // {CTRY_JAPAN33, MKK7_FCCA, "JP"},
388 // {CTRY_JAPAN34, MKK9_MKKA, "JP"},
389 // {CTRY_JAPAN35, MKK10_MKKA, "JP"},
390 // {CTRY_JAPAN36, MKK4_MKKA, "JP"},
391 // {CTRY_JAPAN37, MKK9_FCCA, "JP"},
392 // {CTRY_JAPAN38, MKK9_MKKA1, "JP"},
393 // {CTRY_JAPAN39, MKK9_MKKC, "JP"},
394 // {CTRY_JAPAN40, MKK9_MKKA2, "JP"},
395 // {CTRY_JAPAN41, MKK10_FCCA, "JP"},
396 // {CTRY_JAPAN42, MKK10_MKKA1, "JP"},
397 // {CTRY_JAPAN43, MKK10_MKKC, "JP"},
398 // {CTRY_JAPAN44, MKK10_MKKA2, "JP"},
399 // {CTRY_JAPAN45, MKK11_MKKA, "JP"},
400 // {CTRY_JAPAN46, MKK11_FCCA, "JP"},
401 // {CTRY_JAPAN47, MKK11_MKKA1, "JP"},
402 // {CTRY_JAPAN48, MKK11_MKKC, "JP"},
403 // {CTRY_JAPAN49, MKK11_MKKA2, "JP"},
404 // {CTRY_JAPAN50, MKK12_MKKA, "JP"},
405 // {CTRY_JAPAN51, MKK12_FCCA, "JP"},
406 // {CTRY_JAPAN52, MKK12_MKKA1, "JP"},
407 // {CTRY_JAPAN53, MKK12_MKKC, "JP"},
408 // {CTRY_JAPAN54, MKK12_MKKA2, "JP"},
409 // {CTRY_JAPAN57, MKK13_MKKB, "JP"},
410 // {CTRY_JAPAN58, MKK14_MKKA1, "JP"},
411 // {CTRY_JAPAN59, MKK15_MKKA1, "JP"},
413 // {CTRY_JORDAN, ETSI2_WORLD, "JO"},
414 // {CTRY_KAZAKHSTAN, NULL1_WORLD, "KZ"},
415 // {CTRY_KOREA_NORTH, APL9_WORLD, "KP"},
416 // {CTRY_KOREA_ROC, APL9_WORLD, "KR"},
417 // {CTRY_KOREA_ROC2, APL2_WORLD, "K2"},
418 // {CTRY_KOREA_ROC3, APL9_WORLD, "K3"},
419 // {CTRY_KUWAIT, ETSI3_WORLD, "KW"},
420 // {CTRY_LATVIA, ETSI1_WORLD, "LV"},
421 // {CTRY_LEBANON, NULL1_WORLD, "LB"},
422 // {CTRY_LIECHTENSTEIN, ETSI1_WORLD, "LI"},
423 // {CTRY_LITHUANIA, ETSI1_WORLD, "LT"},
424 // {CTRY_LUXEMBOURG, ETSI1_WORLD, "LU"},
425 // {CTRY_MACAU, FCC2_WORLD, "MO"},
426 // {CTRY_MACEDONIA, NULL1_WORLD, "MK"},
427 // {CTRY_MALAYSIA, APL8_WORLD, "MY"},
428 // {CTRY_MALTA, ETSI1_WORLD, "MT"},
429 // {CTRY_MEXICO, FCC1_FCCA, "MX"},
430 // {CTRY_MONACO, ETSI4_WORLD, "MC"},
431 // {CTRY_MOROCCO, APL4_WORLD, "MA"},
432 // {CTRY_NEPAL, APL1_WORLD, "NP"},
433 // {CTRY_NETHERLANDS, ETSI1_WORLD, "NL"},
434 // {CTRY_NETHERLANDS_ANTILLES, ETSI1_WORLD, "AN"},
435 // {CTRY_NEW_ZEALAND, FCC2_ETSIC, "NZ"},
436 // {CTRY_NORWAY, ETSI1_WORLD, "NO"},
437 // {CTRY_OMAN, FCC3_WORLD, "OM"},
438 // {CTRY_PAKISTAN, NULL1_WORLD, "PK"},
439 // {CTRY_PANAMA, FCC1_FCCA, "PA"},
440 // {CTRY_PAPUA_NEW_GUINEA, FCC1_WORLD, "PG"},
441 // {CTRY_PERU, APL1_WORLD, "PE"},
442 // {CTRY_PHILIPPINES, APL1_WORLD, "PH"},
443 // {CTRY_POLAND, ETSI1_WORLD, "PL"},
444 // {CTRY_PORTUGAL, ETSI1_WORLD, "PT"},
445 // {CTRY_PUERTO_RICO, FCC1_FCCA, "PR"},
446 // {CTRY_QATAR, APL1_WORLD, "QA"},
447 // {CTRY_ROMANIA, NULL1_WORLD, "RO"},
448 // {CTRY_RUSSIA, NULL1_WORLD, "RU"},
449 // {CTRY_SAUDI_ARABIA, NULL1_WORLD, "SA"},
450 // {CTRY_SERBIA_MONTENEGRO, ETSI1_WORLD, "CS"},
451 // {CTRY_SINGAPORE, APL6_WORLD, "SG"},
452 // {CTRY_SLOVAKIA, ETSI1_WORLD, "SK"},
453 // {CTRY_SLOVENIA, ETSI1_WORLD, "SI"},
454 // {CTRY_SOUTH_AFRICA, FCC3_WORLD, "ZA"},
455 // {CTRY_SPAIN, ETSI1_WORLD, "ES"},
456 // {CTRY_SRI_LANKA, FCC3_WORLD, "LK"},
457 // {CTRY_SWEDEN, ETSI1_WORLD, "SE"},
458 // {CTRY_SWITZERLAND, ETSI1_WORLD, "CH"},
459 // {CTRY_SYRIA, NULL1_WORLD, "SY"},
460 // {CTRY_TAIWAN, APL3_FCCA, "TW"},
461 // {CTRY_THAILAND, FCC3_WORLD, "TH"},
462 // {CTRY_TRINIDAD_Y_TOBAGO, FCC3_WORLD, "TT"},
463 // {CTRY_TUNISIA, ETSI3_WORLD, "TN"},
464 // {CTRY_TURKEY, ETSI3_WORLD, "TR"},
465 // {CTRY_UKRAINE, NULL1_WORLD, "UA"},
466 // {CTRY_UAE, NULL1_WORLD, "AE"},
467 // {CTRY_UNITED_KINGDOM, ETSI1_WORLD, "GB"},
468 // {CTRY_UNITED_STATES, FCC3_FCCA, "US"},
469 // /* This "PS" is for US public safety actually... to support this we
470 // * would need to assign new special alpha2 to CRDA db as with the world
471 // * regdomain and use another alpha2 */
472 // {CTRY_UNITED_STATES_FCC49, FCC4_FCCA, "PS"},
473 // {CTRY_URUGUAY, FCC3_WORLD, "UY"},
474 // {CTRY_UZBEKISTAN, FCC3_FCCA, "UZ"},
475 // {CTRY_VENEZUELA, APL2_ETSIC, "VE"},
476 // {CTRY_VIET_NAM, NULL1_WORLD, "VN"},
477 // {CTRY_YEMEN, NULL1_WORLD, "YE"},
478 // {CTRY_ZIMBABWE, NULL1_WORLD, "ZW"},