1232809Sjmallett/*- 2232809Sjmallett * SPDX-License-Identifier: BSD-2-Clause 3232809Sjmallett * 4232809Sjmallett * Copyright (c) 2005-2008 Sam Leffler, Errno Consulting 5232809Sjmallett * All rights reserved. 6232809Sjmallett * 7232809Sjmallett * Redistribution and use in source and binary forms, with or without 8232809Sjmallett * modification, are permitted provided that the following conditions 9232809Sjmallett * are met: 10232809Sjmallett * 1. Redistributions of source code must retain the above copyright 11232809Sjmallett * notice, this list of conditions and the following disclaimer. 12232809Sjmallett * 2. Redistributions in binary form must reproduce the above copyright 13232809Sjmallett * notice, this list of conditions and the following disclaimer in the 14232809Sjmallett * documentation and/or other materials provided with the distribution. 15232809Sjmallett * 16232809Sjmallett * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17232809Sjmallett * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18232809Sjmallett * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19232809Sjmallett * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 20232809Sjmallett * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 21232809Sjmallett * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22232809Sjmallett * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23232809Sjmallett * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24232809Sjmallett * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 25232809Sjmallett * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26232809Sjmallett */ 27232809Sjmallett#ifndef _NET80211_IEEE80211_REGDOMAIN_H_ 28232809Sjmallett#define _NET80211_IEEE80211_REGDOMAIN_H_ 29232809Sjmallett 30232809Sjmallett/* 31232809Sjmallett * 802.11 regulatory domain definitions. 32232809Sjmallett */ 33232809Sjmallett 34232809Sjmallett/* 35232809Sjmallett * ISO 3166 Country/Region Codes 36232809Sjmallett * http://ftp.ics.uci.edu/pub/ietf/http/related/iso3166.txt 37232809Sjmallett */ 38232809Sjmallettenum ISOCountryCode { 39232809Sjmallett CTRY_AFGHANISTAN = 4, 40232809Sjmallett CTRY_ALBANIA = 8, /* Albania */ 41232809Sjmallett CTRY_ALGERIA = 12, /* Algeria */ 42232809Sjmallett CTRY_AMERICAN_SAMOA = 16, 43232809Sjmallett CTRY_ANDORRA = 20, 44232809Sjmallett CTRY_ANGOLA = 24, 45232809Sjmallett CTRY_ANGUILLA = 660, 46232809Sjmallett CTRY_ANTARTICA = 10, 47232809Sjmallett CTRY_ANTIGUA = 28, /* Antigua and Barbuda */ 48232809Sjmallett CTRY_ARGENTINA = 32, /* Argentina */ 49232809Sjmallett CTRY_ARMENIA = 51, /* Armenia */ 50232809Sjmallett CTRY_ARUBA = 533, /* Aruba */ 51232809Sjmallett CTRY_AUSTRALIA = 36, /* Australia */ 52232809Sjmallett CTRY_AUSTRIA = 40, /* Austria */ 53232809Sjmallett CTRY_AZERBAIJAN = 31, /* Azerbaijan */ 54232809Sjmallett CTRY_BAHAMAS = 44, /* Bahamas */ 55232809Sjmallett CTRY_BAHRAIN = 48, /* Bahrain */ 56232809Sjmallett CTRY_BANGLADESH = 50, /* Bangladesh */ 57232809Sjmallett CTRY_BARBADOS = 52, 58232809Sjmallett CTRY_BELARUS = 112, /* Belarus */ 59232809Sjmallett CTRY_BELGIUM = 56, /* Belgium */ 60232809Sjmallett CTRY_BELIZE = 84, 61232809Sjmallett CTRY_BENIN = 204, 62232809Sjmallett CTRY_BERMUDA = 60, 63232809Sjmallett CTRY_BHUTAN = 64, 64232809Sjmallett CTRY_BOLIVIA = 68, /* Bolivia */ 65232809Sjmallett CTRY_BOSNIA_AND_HERZEGOWINA = 70, 66232809Sjmallett CTRY_BOTSWANA = 72, 67232809Sjmallett CTRY_BOUVET_ISLAND = 74, 68232809Sjmallett CTRY_BRAZIL = 76, /* Brazil */ 69232809Sjmallett CTRY_BRITISH_INDIAN_OCEAN_TERRITORY = 86, 70232809Sjmallett CTRY_BRUNEI_DARUSSALAM = 96, /* Brunei Darussalam */ 71232809Sjmallett CTRY_BULGARIA = 100, /* Bulgaria */ 72232809Sjmallett CTRY_BURKINA_FASO = 854, 73232809Sjmallett CTRY_BURUNDI = 108, 74232809Sjmallett CTRY_CAMBODIA = 116, 75232809Sjmallett CTRY_CAMEROON = 120, 76232809Sjmallett CTRY_CANADA = 124, /* Canada */ 77232809Sjmallett CTRY_CAPE_VERDE = 132, 78232809Sjmallett CTRY_CAYMAN_ISLANDS = 136, 79232809Sjmallett CTRY_CENTRAL_AFRICAN_REPUBLIC = 140, 80232809Sjmallett CTRY_CHAD = 148, 81232809Sjmallett CTRY_CHILE = 152, /* Chile */ 82232809Sjmallett CTRY_CHINA = 156, /* People's Republic of China */ 83232809Sjmallett CTRY_CHRISTMAS_ISLAND = 162, 84232809Sjmallett CTRY_COCOS_ISLANDS = 166, 85232809Sjmallett CTRY_COLOMBIA = 170, /* Colombia */ 86232809Sjmallett CTRY_COMOROS = 174, 87232809Sjmallett CTRY_CONGO = 178, 88232809Sjmallett CTRY_COOK_ISLANDS = 184, 89232809Sjmallett CTRY_COSTA_RICA = 188, /* Costa Rica */ 90232809Sjmallett CTRY_COTE_DIVOIRE = 384, 91232809Sjmallett CTRY_CROATIA = 191, /* Croatia (local name: Hrvatska) */ 92232809Sjmallett CTRY_CYPRUS = 196, /* Cyprus */ 93232809Sjmallett CTRY_CZECH = 203, /* Czech Republic */ 94232809Sjmallett CTRY_DENMARK = 208, /* Denmark */ 95232809Sjmallett CTRY_DJIBOUTI = 262, 96232809Sjmallett CTRY_DOMINICA = 212, 97232809Sjmallett CTRY_DOMINICAN_REPUBLIC = 214, /* Dominican Republic */ 98232809Sjmallett CTRY_EAST_TIMOR = 626, 99232809Sjmallett CTRY_ECUADOR = 218, /* Ecuador */ 100232809Sjmallett CTRY_EGYPT = 818, /* Egypt */ 101232809Sjmallett CTRY_EL_SALVADOR = 222, /* El Salvador */ 102232809Sjmallett CTRY_EQUATORIAL_GUINEA = 226, 103232809Sjmallett CTRY_ERITREA = 232, 104232809Sjmallett CTRY_ESTONIA = 233, /* Estonia */ 105232809Sjmallett CTRY_ETHIOPIA = 210, 106232809Sjmallett CTRY_FALKLAND_ISLANDS = 238, /* (Malvinas) */ 107232809Sjmallett CTRY_FAEROE_ISLANDS = 234, /* Faeroe Islands */ 108232809Sjmallett CTRY_FIJI = 242, 109232809Sjmallett CTRY_FINLAND = 246, /* Finland */ 110232809Sjmallett CTRY_FRANCE = 250, /* France */ 111232809Sjmallett CTRY_FRANCE2 = 255, /* France (Metropolitan) */ 112232809Sjmallett CTRY_FRENCH_GUIANA = 254, 113232809Sjmallett CTRY_FRENCH_POLYNESIA = 258, 114232809Sjmallett CTRY_FRENCH_SOUTHERN_TERRITORIES = 260, 115232809Sjmallett CTRY_GABON = 266, 116232809Sjmallett CTRY_GAMBIA = 270, 117232809Sjmallett CTRY_GEORGIA = 268, /* Georgia */ 118232809Sjmallett CTRY_GERMANY = 276, /* Germany */ 119232809Sjmallett CTRY_GHANA = 288, 120232809Sjmallett CTRY_GIBRALTAR = 292, 121232809Sjmallett CTRY_GREECE = 300, /* Greece */ 122232809Sjmallett CTRY_GREENLAND = 304, 123232809Sjmallett CTRY_GRENADA = 308, 124232809Sjmallett CTRY_GUADELOUPE = 312, 125232809Sjmallett CTRY_GUAM = 316, 126232809Sjmallett CTRY_GUATEMALA = 320, /* Guatemala */ 127232809Sjmallett CTRY_GUINEA = 324, 128232809Sjmallett CTRY_GUINEA_BISSAU = 624, 129232809Sjmallett CTRY_GUYANA = 328, 130232809Sjmallett /* XXX correct remainder */ 131232809Sjmallett CTRY_HAITI = 332, 132232809Sjmallett CTRY_HONDURAS = 340, /* Honduras */ 133232809Sjmallett CTRY_HONG_KONG = 344, /* Hong Kong S.A.R., P.R.C. */ 134232809Sjmallett CTRY_HUNGARY = 348, /* Hungary */ 135232809Sjmallett CTRY_ICELAND = 352, /* Iceland */ 136232809Sjmallett CTRY_INDIA = 356, /* India */ 137232809Sjmallett CTRY_INDONESIA = 360, /* Indonesia */ 138232809Sjmallett CTRY_IRAN = 364, /* Iran */ 139232809Sjmallett CTRY_IRAQ = 368, /* Iraq */ 140232809Sjmallett CTRY_IRELAND = 372, /* Ireland */ 141232809Sjmallett CTRY_ISRAEL = 376, /* Israel */ 142232809Sjmallett CTRY_ITALY = 380, /* Italy */ 143232809Sjmallett CTRY_JAMAICA = 388, /* Jamaica */ 144232809Sjmallett CTRY_JAPAN = 392, /* Japan */ 145232809Sjmallett CTRY_JORDAN = 400, /* Jordan */ 146232809Sjmallett CTRY_KAZAKHSTAN = 398, /* Kazakhstan */ 147232809Sjmallett CTRY_KENYA = 404, /* Kenya */ 148232809Sjmallett CTRY_KOREA_NORTH = 408, /* North Korea */ 149232809Sjmallett CTRY_KOREA_ROC = 410, /* South Korea */ 150232809Sjmallett CTRY_KOREA_ROC2 = 411, /* South Korea */ 151232809Sjmallett CTRY_KUWAIT = 414, /* Kuwait */ 152232809Sjmallett CTRY_LATVIA = 428, /* Latvia */ 153232809Sjmallett CTRY_LEBANON = 422, /* Lebanon */ 154232809Sjmallett CTRY_LIBYA = 434, /* Libya */ 155232809Sjmallett CTRY_LIECHTENSTEIN = 438, /* Liechtenstein */ 156232809Sjmallett CTRY_LITHUANIA = 440, /* Lithuania */ 157232809Sjmallett CTRY_LUXEMBOURG = 442, /* Luxembourg */ 158232809Sjmallett CTRY_MACAU = 446, /* Macau */ 159232809Sjmallett CTRY_MACEDONIA = 807, /* the Former Yugoslav Republic of Macedonia */ 160232809Sjmallett CTRY_MALAYSIA = 458, /* Malaysia */ 161232809Sjmallett CTRY_MALTA = 470, /* Malta */ 162232809Sjmallett CTRY_MEXICO = 484, /* Mexico */ 163232809Sjmallett CTRY_MONACO = 492, /* Principality of Monaco */ 164232809Sjmallett CTRY_MOROCCO = 504, /* Morocco */ 165232809Sjmallett CTRY_NEPAL = 524, /* Nepal */ 166232809Sjmallett CTRY_NETHERLANDS = 528, /* Netherlands */ 167232809Sjmallett CTRY_NEW_ZEALAND = 554, /* New Zealand */ 168232809Sjmallett CTRY_NICARAGUA = 558, /* Nicaragua */ 169232809Sjmallett CTRY_NORWAY = 578, /* Norway */ 170232809Sjmallett CTRY_OMAN = 512, /* Oman */ 171232809Sjmallett CTRY_PAKISTAN = 586, /* Islamic Republic of Pakistan */ 172232809Sjmallett CTRY_PANAMA = 591, /* Panama */ 173232809Sjmallett CTRY_PARAGUAY = 600, /* Paraguay */ 174232809Sjmallett CTRY_PERU = 604, /* Peru */ 175232809Sjmallett CTRY_PHILIPPINES = 608, /* Republic of the Philippines */ 176232809Sjmallett CTRY_POLAND = 616, /* Poland */ 177232809Sjmallett CTRY_PORTUGAL = 620, /* Portugal */ 178232809Sjmallett CTRY_PUERTO_RICO = 630, /* Puerto Rico */ 179232809Sjmallett CTRY_QATAR = 634, /* Qatar */ 180232809Sjmallett CTRY_ROMANIA = 642, /* Romania */ 181232809Sjmallett CTRY_RUSSIA = 643, /* Russia */ 182232809Sjmallett CTRY_SAUDI_ARABIA = 682, /* Saudi Arabia */ 183232809Sjmallett CTRY_SINGAPORE = 702, /* Singapore */ 184232809Sjmallett CTRY_SLOVAKIA = 703, /* Slovak Republic */ 185232809Sjmallett CTRY_SLOVENIA = 705, /* Slovenia */ 186232809Sjmallett CTRY_SOUTH_AFRICA = 710, /* South Africa */ 187232809Sjmallett CTRY_SPAIN = 724, /* Spain */ 188232809Sjmallett CTRY_SRILANKA = 144, /* Sri Lanka */ 189232809Sjmallett CTRY_SWEDEN = 752, /* Sweden */ 190232809Sjmallett CTRY_SWITZERLAND = 756, /* Switzerland */ 191232809Sjmallett CTRY_SYRIA = 760, /* Syria */ 192232809Sjmallett CTRY_TAIWAN = 158, /* Taiwan */ 193232809Sjmallett CTRY_THAILAND = 764, /* Thailand */ 194232809Sjmallett CTRY_TRINIDAD_Y_TOBAGO = 780, /* Trinidad y Tobago */ 195232809Sjmallett CTRY_TUNISIA = 788, /* Tunisia */ 196232809Sjmallett CTRY_TURKEY = 792, /* Turkey */ 197232809Sjmallett CTRY_UAE = 784, /* U.A.E. */ 198232809Sjmallett CTRY_UKRAINE = 804, /* Ukraine */ 199232809Sjmallett CTRY_UNITED_KINGDOM = 826, /* United Kingdom */ 200232809Sjmallett CTRY_UNITED_STATES = 840, /* United States */ 201232809Sjmallett CTRY_URUGUAY = 858, /* Uruguay */ 202232809Sjmallett CTRY_UZBEKISTAN = 860, /* Uzbekistan */ 203232809Sjmallett CTRY_VENEZUELA = 862, /* Venezuela */ 204232809Sjmallett CTRY_VIET_NAM = 704, /* Viet Nam */ 205232809Sjmallett CTRY_YEMEN = 887, /* Yemen */ 206232809Sjmallett CTRY_ZIMBABWE = 716, /* Zimbabwe */ 207232809Sjmallett 208232809Sjmallett /* NB: from here down not listed in 3166; they come from Atheros */ 209232809Sjmallett CTRY_DEBUG = 0x1ff, /* debug */ 210232809Sjmallett CTRY_DEFAULT = 0, /* default */ 211232809Sjmallett 212232809Sjmallett CTRY_UNITED_STATES_FCC49 = 842, /* United States (Public Safety)*/ 213232809Sjmallett CTRY_KOREA_ROC3 = 412, /* South Korea */ 214232809Sjmallett 215232809Sjmallett CTRY_JAPAN1 = 393, /* Japan (JP1) */ 216232809Sjmallett CTRY_JAPAN2 = 394, /* Japan (JP0) */ 217232809Sjmallett CTRY_JAPAN3 = 395, /* Japan (JP1-1) */ 218232809Sjmallett CTRY_JAPAN4 = 396, /* Japan (JE1) */ 219232809Sjmallett CTRY_JAPAN5 = 397, /* Japan (JE2) */ 220232809Sjmallett CTRY_JAPAN6 = 399, /* Japan (JP6) */ 221232809Sjmallett CTRY_JAPAN7 = 4007, /* Japan (J7) */ 222232809Sjmallett CTRY_JAPAN8 = 4008, /* Japan (J8) */ 223232809Sjmallett CTRY_JAPAN9 = 4009, /* Japan (J9) */ 224232809Sjmallett CTRY_JAPAN10 = 4010, /* Japan (J10) */ 225232809Sjmallett CTRY_JAPAN11 = 4011, /* Japan (J11) */ 226232809Sjmallett CTRY_JAPAN12 = 4012, /* Japan (J12) */ 227232809Sjmallett CTRY_JAPAN13 = 4013, /* Japan (J13) */ 228232809Sjmallett CTRY_JAPAN14 = 4014, /* Japan (J14) */ 229232809Sjmallett CTRY_JAPAN15 = 4015, /* Japan (J15) */ 230232809Sjmallett CTRY_JAPAN16 = 4016, /* Japan (J16) */ 231232809Sjmallett CTRY_JAPAN17 = 4017, /* Japan (J17) */ 232232809Sjmallett CTRY_JAPAN18 = 4018, /* Japan (J18) */ 233232809Sjmallett CTRY_JAPAN19 = 4019, /* Japan (J19) */ 234232809Sjmallett CTRY_JAPAN20 = 4020, /* Japan (J20) */ 235232809Sjmallett CTRY_JAPAN21 = 4021, /* Japan (J21) */ 236232809Sjmallett CTRY_JAPAN22 = 4022, /* Japan (J22) */ 237232809Sjmallett CTRY_JAPAN23 = 4023, /* Japan (J23) */ 238232809Sjmallett CTRY_JAPAN24 = 4024, /* Japan (J24) */ 239232809Sjmallett}; 240232809Sjmallett 241232809Sjmallettenum RegdomainCode { 242232809Sjmallett SKU_FCC = 0x10, /* FCC, aka United States */ 243232809Sjmallett SKU_CA = 0x20, /* North America, aka Canada */ 244232809Sjmallett SKU_ETSI = 0x30, /* Europe */ 245232809Sjmallett SKU_ETSI2 = 0x32, /* Europe w/o HT40 in 5GHz */ 246232809Sjmallett SKU_ETSI3 = 0x33, /* Europe - channel 36 */ 247232809Sjmallett SKU_FCC3 = 0x3a, /* FCC w/5470 band, 11h, DFS */ 248232809Sjmallett SKU_JAPAN = 0x40, 249232809Sjmallett SKU_KOREA = 0x45, 250232809Sjmallett SKU_APAC = 0x50, /* Asia Pacific */ 251232809Sjmallett SKU_APAC2 = 0x51, /* Asia Pacific w/ DFS on mid-band */ 252232809Sjmallett SKU_APAC3 = 0x5d, /* Asia Pacific w/o ISM band */ 253232809Sjmallett SKU_ROW = 0x81, /* China/Taiwan/Rest of World */ 254232809Sjmallett SKU_NONE = 0xf0, /* "Region Free" */ 255232809Sjmallett SKU_DEBUG = 0x1ff, 256232809Sjmallett 257232809Sjmallett /* NB: from here down private */ 258232809Sjmallett SKU_SR9 = 0x0298, /* Ubiquiti SR9 (900MHz/GSM) */ 259232809Sjmallett SKU_XR9 = 0x0299, /* Ubiquiti XR9 (900MHz/GSM) */ 260232809Sjmallett SKU_GZ901 = 0x029a, /* Zcomax GZ-901 (900MHz/GSM) */ 261232809Sjmallett SKU_XC900M = 0x029b, /* Xagyl XC900M (900MHz/GSM) */ 262232809Sjmallett /* 263232809Sjmallett * The XC900M by default uses the 264232809Sjmallett * same mapping as the XR9. It 265232809Sjmallett * can optionally use a slightly 266232809Sjmallett * offset channel spacing (905MHz- 267232809Sjmallett * 925MHz) versus the XR9 (907MHz- 268232809Sjmallett * 922MHz), giving an extra channel. 269232809Sjmallett * This requires a jumper on the 270232809Sjmallett * NIC to be changed. 271232809Sjmallett */ 272232809Sjmallett}; 273232809Sjmallett 274232809Sjmallett#if defined(__KERNEL__) || defined(_KERNEL) 275232809Sjmallettstruct ieee80211com; 276232809Sjmallettvoid ieee80211_regdomain_attach(struct ieee80211com *); 277232809Sjmallettvoid ieee80211_regdomain_detach(struct ieee80211com *); 278232809Sjmallettstruct ieee80211vap; 279232809Sjmallettvoid ieee80211_regdomain_vattach(struct ieee80211vap *); 280void ieee80211_regdomain_vdetach(struct ieee80211vap *); 281 282struct ieee80211_regdomain; 283int ieee80211_init_channels(struct ieee80211com *, 284 const struct ieee80211_regdomain *, const uint8_t bands[]); 285struct ieee80211_channel; 286void ieee80211_sort_channels(struct ieee80211_channel *chans, int nchans); 287struct ieee80211_appie; 288struct ieee80211_appie *ieee80211_alloc_countryie(struct ieee80211com *); 289struct ieee80211_regdomain_req; 290int ieee80211_setregdomain(struct ieee80211vap *, 291 struct ieee80211_regdomain_req *); 292#endif /* defined(__KERNEL__) || defined(_KERNEL) */ 293#endif /* _NET80211_IEEE80211_REGDOMAIN_H_ */ 294