1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright (c) 2008-2009 Atheros Communications Inc. 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Permission to use, copy, modify, and/or distribute this software for any 5*4882a593Smuzhiyun * purpose with or without fee is hereby granted, provided that the above 6*4882a593Smuzhiyun * copyright notice and this permission notice appear in all copies. 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9*4882a593Smuzhiyun * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10*4882a593Smuzhiyun * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11*4882a593Smuzhiyun * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12*4882a593Smuzhiyun * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13*4882a593Smuzhiyun * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14*4882a593Smuzhiyun * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15*4882a593Smuzhiyun */ 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun #ifndef REGD_H 18*4882a593Smuzhiyun #define REGD_H 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun #include <linux/nl80211.h> 21*4882a593Smuzhiyun #include <net/cfg80211.h> 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun #include "ath.h" 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun enum ctl_group { 26*4882a593Smuzhiyun CTL_FCC = 0x10, 27*4882a593Smuzhiyun CTL_MKK = 0x40, 28*4882a593Smuzhiyun CTL_ETSI = 0x30, 29*4882a593Smuzhiyun }; 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun #define SD_NO_CTL 0xE0 32*4882a593Smuzhiyun #define NO_CTL 0xff 33*4882a593Smuzhiyun #define CTL_11A 0 34*4882a593Smuzhiyun #define CTL_11B 1 35*4882a593Smuzhiyun #define CTL_11G 2 36*4882a593Smuzhiyun #define CTL_2GHT20 5 37*4882a593Smuzhiyun #define CTL_5GHT20 6 38*4882a593Smuzhiyun #define CTL_2GHT40 7 39*4882a593Smuzhiyun #define CTL_5GHT40 8 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun #define CTRY_DEBUG 0x1ff 42*4882a593Smuzhiyun #define CTRY_DEFAULT 0 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun #define COUNTRY_ERD_FLAG 0x8000 45*4882a593Smuzhiyun #define WORLDWIDE_ROAMING_FLAG 0x4000 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun #define MULTI_DOMAIN_MASK 0xFF00 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun #define WORLD_SKU_MASK 0x00F0 50*4882a593Smuzhiyun #define WORLD_SKU_PREFIX 0x0060 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun #define CHANNEL_HALF_BW 10 53*4882a593Smuzhiyun #define CHANNEL_QUARTER_BW 5 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun struct country_code_to_enum_rd { 56*4882a593Smuzhiyun u16 countryCode; 57*4882a593Smuzhiyun u16 regDmnEnum; 58*4882a593Smuzhiyun const char *isoName; 59*4882a593Smuzhiyun }; 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun enum CountryCode { 62*4882a593Smuzhiyun CTRY_ALBANIA = 8, 63*4882a593Smuzhiyun CTRY_ALGERIA = 12, 64*4882a593Smuzhiyun CTRY_ARGENTINA = 32, 65*4882a593Smuzhiyun CTRY_ARMENIA = 51, 66*4882a593Smuzhiyun CTRY_ARUBA = 533, 67*4882a593Smuzhiyun CTRY_AUSTRALIA = 36, 68*4882a593Smuzhiyun CTRY_AUSTRIA = 40, 69*4882a593Smuzhiyun CTRY_AZERBAIJAN = 31, 70*4882a593Smuzhiyun CTRY_BAHAMAS = 44, 71*4882a593Smuzhiyun CTRY_BAHRAIN = 48, 72*4882a593Smuzhiyun CTRY_BANGLADESH = 50, 73*4882a593Smuzhiyun CTRY_BARBADOS = 52, 74*4882a593Smuzhiyun CTRY_BELARUS = 112, 75*4882a593Smuzhiyun CTRY_BELGIUM = 56, 76*4882a593Smuzhiyun CTRY_BELIZE = 84, 77*4882a593Smuzhiyun CTRY_BERMUDA = 60, 78*4882a593Smuzhiyun CTRY_BOLIVIA = 68, 79*4882a593Smuzhiyun CTRY_BOSNIA_HERZ = 70, 80*4882a593Smuzhiyun CTRY_BRAZIL = 76, 81*4882a593Smuzhiyun CTRY_BRUNEI_DARUSSALAM = 96, 82*4882a593Smuzhiyun CTRY_BULGARIA = 100, 83*4882a593Smuzhiyun CTRY_CAMBODIA = 116, 84*4882a593Smuzhiyun CTRY_CANADA = 124, 85*4882a593Smuzhiyun CTRY_CHILE = 152, 86*4882a593Smuzhiyun CTRY_CHINA = 156, 87*4882a593Smuzhiyun CTRY_COLOMBIA = 170, 88*4882a593Smuzhiyun CTRY_COSTA_RICA = 188, 89*4882a593Smuzhiyun CTRY_CROATIA = 191, 90*4882a593Smuzhiyun CTRY_CYPRUS = 196, 91*4882a593Smuzhiyun CTRY_CZECH = 203, 92*4882a593Smuzhiyun CTRY_DENMARK = 208, 93*4882a593Smuzhiyun CTRY_DOMINICAN_REPUBLIC = 214, 94*4882a593Smuzhiyun CTRY_ECUADOR = 218, 95*4882a593Smuzhiyun CTRY_EGYPT = 818, 96*4882a593Smuzhiyun CTRY_EL_SALVADOR = 222, 97*4882a593Smuzhiyun CTRY_ESTONIA = 233, 98*4882a593Smuzhiyun CTRY_FAEROE_ISLANDS = 234, 99*4882a593Smuzhiyun CTRY_FINLAND = 246, 100*4882a593Smuzhiyun CTRY_FRANCE = 250, 101*4882a593Smuzhiyun CTRY_GEORGIA = 268, 102*4882a593Smuzhiyun CTRY_GERMANY = 276, 103*4882a593Smuzhiyun CTRY_GREECE = 300, 104*4882a593Smuzhiyun CTRY_GREENLAND = 304, 105*4882a593Smuzhiyun CTRY_GRENADA = 308, 106*4882a593Smuzhiyun CTRY_GUAM = 316, 107*4882a593Smuzhiyun CTRY_GUATEMALA = 320, 108*4882a593Smuzhiyun CTRY_HAITI = 332, 109*4882a593Smuzhiyun CTRY_HONDURAS = 340, 110*4882a593Smuzhiyun CTRY_HONG_KONG = 344, 111*4882a593Smuzhiyun CTRY_HUNGARY = 348, 112*4882a593Smuzhiyun CTRY_ICELAND = 352, 113*4882a593Smuzhiyun CTRY_INDIA = 356, 114*4882a593Smuzhiyun CTRY_INDONESIA = 360, 115*4882a593Smuzhiyun CTRY_IRAN = 364, 116*4882a593Smuzhiyun CTRY_IRAQ = 368, 117*4882a593Smuzhiyun CTRY_IRELAND = 372, 118*4882a593Smuzhiyun CTRY_ISRAEL = 376, 119*4882a593Smuzhiyun CTRY_ITALY = 380, 120*4882a593Smuzhiyun CTRY_JAMAICA = 388, 121*4882a593Smuzhiyun CTRY_JAPAN = 392, 122*4882a593Smuzhiyun CTRY_JORDAN = 400, 123*4882a593Smuzhiyun CTRY_KAZAKHSTAN = 398, 124*4882a593Smuzhiyun CTRY_KENYA = 404, 125*4882a593Smuzhiyun CTRY_KOREA_NORTH = 408, 126*4882a593Smuzhiyun CTRY_KOREA_ROC = 410, 127*4882a593Smuzhiyun CTRY_KOREA_ROC2 = 411, 128*4882a593Smuzhiyun CTRY_KOREA_ROC3 = 412, 129*4882a593Smuzhiyun CTRY_KUWAIT = 414, 130*4882a593Smuzhiyun CTRY_LATVIA = 428, 131*4882a593Smuzhiyun CTRY_LEBANON = 422, 132*4882a593Smuzhiyun CTRY_LIBYA = 434, 133*4882a593Smuzhiyun CTRY_LIECHTENSTEIN = 438, 134*4882a593Smuzhiyun CTRY_LITHUANIA = 440, 135*4882a593Smuzhiyun CTRY_LUXEMBOURG = 442, 136*4882a593Smuzhiyun CTRY_MACAU = 446, 137*4882a593Smuzhiyun CTRY_MACEDONIA = 807, 138*4882a593Smuzhiyun CTRY_MALAYSIA = 458, 139*4882a593Smuzhiyun CTRY_MALTA = 470, 140*4882a593Smuzhiyun CTRY_MAURITIUS = 480, 141*4882a593Smuzhiyun CTRY_MEXICO = 484, 142*4882a593Smuzhiyun CTRY_MONACO = 492, 143*4882a593Smuzhiyun CTRY_MONTENEGRO = 499, 144*4882a593Smuzhiyun CTRY_MOROCCO = 504, 145*4882a593Smuzhiyun CTRY_NEPAL = 524, 146*4882a593Smuzhiyun CTRY_NETHERLANDS = 528, 147*4882a593Smuzhiyun CTRY_NETHERLANDS_ANTILLES = 530, 148*4882a593Smuzhiyun CTRY_NEW_ZEALAND = 554, 149*4882a593Smuzhiyun CTRY_NICARAGUA = 558, 150*4882a593Smuzhiyun CTRY_NORWAY = 578, 151*4882a593Smuzhiyun CTRY_OMAN = 512, 152*4882a593Smuzhiyun CTRY_PAKISTAN = 586, 153*4882a593Smuzhiyun CTRY_PANAMA = 591, 154*4882a593Smuzhiyun CTRY_PAPUA_NEW_GUINEA = 598, 155*4882a593Smuzhiyun CTRY_PARAGUAY = 600, 156*4882a593Smuzhiyun CTRY_PERU = 604, 157*4882a593Smuzhiyun CTRY_PHILIPPINES = 608, 158*4882a593Smuzhiyun CTRY_POLAND = 616, 159*4882a593Smuzhiyun CTRY_PORTUGAL = 620, 160*4882a593Smuzhiyun CTRY_PUERTO_RICO = 630, 161*4882a593Smuzhiyun CTRY_QATAR = 634, 162*4882a593Smuzhiyun CTRY_ROMANIA = 642, 163*4882a593Smuzhiyun CTRY_RUSSIA = 643, 164*4882a593Smuzhiyun CTRY_SAUDI_ARABIA = 682, 165*4882a593Smuzhiyun CTRY_SERBIA = 688, 166*4882a593Smuzhiyun CTRY_SERBIA_MONTENEGRO = 891, 167*4882a593Smuzhiyun CTRY_SINGAPORE = 702, 168*4882a593Smuzhiyun CTRY_SLOVAKIA = 703, 169*4882a593Smuzhiyun CTRY_SLOVENIA = 705, 170*4882a593Smuzhiyun CTRY_SOUTH_AFRICA = 710, 171*4882a593Smuzhiyun CTRY_SPAIN = 724, 172*4882a593Smuzhiyun CTRY_SRI_LANKA = 144, 173*4882a593Smuzhiyun CTRY_SWEDEN = 752, 174*4882a593Smuzhiyun CTRY_SWITZERLAND = 756, 175*4882a593Smuzhiyun CTRY_SYRIA = 760, 176*4882a593Smuzhiyun CTRY_TAIWAN = 158, 177*4882a593Smuzhiyun CTRY_TANZANIA = 834, 178*4882a593Smuzhiyun CTRY_THAILAND = 764, 179*4882a593Smuzhiyun CTRY_TRINIDAD_Y_TOBAGO = 780, 180*4882a593Smuzhiyun CTRY_TUNISIA = 788, 181*4882a593Smuzhiyun CTRY_TURKEY = 792, 182*4882a593Smuzhiyun CTRY_UAE = 784, 183*4882a593Smuzhiyun CTRY_UGANDA = 800, 184*4882a593Smuzhiyun CTRY_UKRAINE = 804, 185*4882a593Smuzhiyun CTRY_UNITED_KINGDOM = 826, 186*4882a593Smuzhiyun CTRY_UNITED_STATES = 840, 187*4882a593Smuzhiyun CTRY_UNITED_STATES2 = 841, 188*4882a593Smuzhiyun CTRY_UNITED_STATES_FCC49 = 842, 189*4882a593Smuzhiyun CTRY_UNITED_STATES3 = 843, 190*4882a593Smuzhiyun CTRY_URUGUAY = 858, 191*4882a593Smuzhiyun CTRY_UZBEKISTAN = 860, 192*4882a593Smuzhiyun CTRY_VENEZUELA = 862, 193*4882a593Smuzhiyun CTRY_VIET_NAM = 704, 194*4882a593Smuzhiyun CTRY_YEMEN = 887, 195*4882a593Smuzhiyun CTRY_ZIMBABWE = 716, 196*4882a593Smuzhiyun CTRY_JAPAN1 = 393, 197*4882a593Smuzhiyun CTRY_JAPAN2 = 394, 198*4882a593Smuzhiyun CTRY_JAPAN3 = 395, 199*4882a593Smuzhiyun CTRY_JAPAN4 = 396, 200*4882a593Smuzhiyun CTRY_JAPAN5 = 397, 201*4882a593Smuzhiyun CTRY_JAPAN6 = 4006, 202*4882a593Smuzhiyun CTRY_JAPAN7 = 4007, 203*4882a593Smuzhiyun CTRY_JAPAN8 = 4008, 204*4882a593Smuzhiyun CTRY_JAPAN9 = 4009, 205*4882a593Smuzhiyun CTRY_JAPAN10 = 4010, 206*4882a593Smuzhiyun CTRY_JAPAN11 = 4011, 207*4882a593Smuzhiyun CTRY_JAPAN12 = 4012, 208*4882a593Smuzhiyun CTRY_JAPAN13 = 4013, 209*4882a593Smuzhiyun CTRY_JAPAN14 = 4014, 210*4882a593Smuzhiyun CTRY_JAPAN15 = 4015, 211*4882a593Smuzhiyun CTRY_JAPAN16 = 4016, 212*4882a593Smuzhiyun CTRY_JAPAN17 = 4017, 213*4882a593Smuzhiyun CTRY_JAPAN18 = 4018, 214*4882a593Smuzhiyun CTRY_JAPAN19 = 4019, 215*4882a593Smuzhiyun CTRY_JAPAN20 = 4020, 216*4882a593Smuzhiyun CTRY_JAPAN21 = 4021, 217*4882a593Smuzhiyun CTRY_JAPAN22 = 4022, 218*4882a593Smuzhiyun CTRY_JAPAN23 = 4023, 219*4882a593Smuzhiyun CTRY_JAPAN24 = 4024, 220*4882a593Smuzhiyun CTRY_JAPAN25 = 4025, 221*4882a593Smuzhiyun CTRY_JAPAN26 = 4026, 222*4882a593Smuzhiyun CTRY_JAPAN27 = 4027, 223*4882a593Smuzhiyun CTRY_JAPAN28 = 4028, 224*4882a593Smuzhiyun CTRY_JAPAN29 = 4029, 225*4882a593Smuzhiyun CTRY_JAPAN30 = 4030, 226*4882a593Smuzhiyun CTRY_JAPAN31 = 4031, 227*4882a593Smuzhiyun CTRY_JAPAN32 = 4032, 228*4882a593Smuzhiyun CTRY_JAPAN33 = 4033, 229*4882a593Smuzhiyun CTRY_JAPAN34 = 4034, 230*4882a593Smuzhiyun CTRY_JAPAN35 = 4035, 231*4882a593Smuzhiyun CTRY_JAPAN36 = 4036, 232*4882a593Smuzhiyun CTRY_JAPAN37 = 4037, 233*4882a593Smuzhiyun CTRY_JAPAN38 = 4038, 234*4882a593Smuzhiyun CTRY_JAPAN39 = 4039, 235*4882a593Smuzhiyun CTRY_JAPAN40 = 4040, 236*4882a593Smuzhiyun CTRY_JAPAN41 = 4041, 237*4882a593Smuzhiyun CTRY_JAPAN42 = 4042, 238*4882a593Smuzhiyun CTRY_JAPAN43 = 4043, 239*4882a593Smuzhiyun CTRY_JAPAN44 = 4044, 240*4882a593Smuzhiyun CTRY_JAPAN45 = 4045, 241*4882a593Smuzhiyun CTRY_JAPAN46 = 4046, 242*4882a593Smuzhiyun CTRY_JAPAN47 = 4047, 243*4882a593Smuzhiyun CTRY_JAPAN48 = 4048, 244*4882a593Smuzhiyun CTRY_JAPAN49 = 4049, 245*4882a593Smuzhiyun CTRY_JAPAN50 = 4050, 246*4882a593Smuzhiyun CTRY_JAPAN51 = 4051, 247*4882a593Smuzhiyun CTRY_JAPAN52 = 4052, 248*4882a593Smuzhiyun CTRY_JAPAN53 = 4053, 249*4882a593Smuzhiyun CTRY_JAPAN54 = 4054, 250*4882a593Smuzhiyun CTRY_JAPAN55 = 4055, 251*4882a593Smuzhiyun CTRY_JAPAN56 = 4056, 252*4882a593Smuzhiyun CTRY_JAPAN57 = 4057, 253*4882a593Smuzhiyun CTRY_JAPAN58 = 4058, 254*4882a593Smuzhiyun CTRY_JAPAN59 = 4059, 255*4882a593Smuzhiyun CTRY_AUSTRALIA2 = 5000, 256*4882a593Smuzhiyun CTRY_CANADA2 = 5001, 257*4882a593Smuzhiyun CTRY_BELGIUM2 = 5002 258*4882a593Smuzhiyun }; 259*4882a593Smuzhiyun 260*4882a593Smuzhiyun bool ath_is_world_regd(struct ath_regulatory *reg); 261*4882a593Smuzhiyun bool ath_is_49ghz_allowed(u16 redomain); 262*4882a593Smuzhiyun u16 ath_regd_find_country_by_name(char *alpha2); 263*4882a593Smuzhiyun int ath_regd_init(struct ath_regulatory *reg, struct wiphy *wiphy, 264*4882a593Smuzhiyun void (*reg_notifier)(struct wiphy *wiphy, 265*4882a593Smuzhiyun struct regulatory_request *request)); 266*4882a593Smuzhiyun u32 ath_regd_get_band_ctl(struct ath_regulatory *reg, 267*4882a593Smuzhiyun enum nl80211_band band); 268*4882a593Smuzhiyun void ath_reg_notifier_apply(struct wiphy *wiphy, 269*4882a593Smuzhiyun struct regulatory_request *request, 270*4882a593Smuzhiyun struct ath_regulatory *reg); 271*4882a593Smuzhiyun 272*4882a593Smuzhiyun #endif 273