atheros: introduce ath module containing common ath5k/ath9k/ar9170 code
authorBob Copeland <me@bobcopeland.com>
Tue, 31 Mar 2009 02:30:29 +0000 (22:30 -0400)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 22 Apr 2009 20:54:37 +0000 (16:54 -0400)
This change creates a new module, ath.ko, which includes code that can
be shared between ath5k, ath9k and ar9170. For now, extract most of the ath9k
regulatory code so it can also be used in ath5k.

Signed-off-by: Bob Copeland <me@bobcopeland.com>
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
16 files changed:
drivers/net/wireless/Kconfig
drivers/net/wireless/Makefile
drivers/net/wireless/ath/Kconfig [new file with mode: 0644]
drivers/net/wireless/ath/Makefile [new file with mode: 0644]
drivers/net/wireless/ath/regd.c [new file with mode: 0644]
drivers/net/wireless/ath/regd.h [new file with mode: 0644]
drivers/net/wireless/ath/regd_common.h [new file with mode: 0644]
drivers/net/wireless/ath9k/Kconfig
drivers/net/wireless/ath9k/Makefile
drivers/net/wireless/ath9k/eeprom.h
drivers/net/wireless/ath9k/hw.c
drivers/net/wireless/ath9k/hw.h
drivers/net/wireless/ath9k/main.c
drivers/net/wireless/ath9k/regd.c [deleted file]
drivers/net/wireless/ath9k/regd.h [deleted file]
drivers/net/wireless/ath9k/regd_common.h [deleted file]

index 8a0823588c516f2b0eefadad0ca944571703a26c..9e2c7e26fcbf5243391a0addefdf7bea08f03858 100644 (file)
@@ -483,6 +483,7 @@ config MWL8K
          will be called mwl8k.  If unsure, say N.
 
 source "drivers/net/wireless/p54/Kconfig"
+source "drivers/net/wireless/ath/Kconfig"
 source "drivers/net/wireless/ath5k/Kconfig"
 source "drivers/net/wireless/ath9k/Kconfig"
 source "drivers/net/wireless/ar9170/Kconfig"
index 50e7fba7f0ea95b1922a6bcf3938420295d83ad7..104639e2783d6660aaef2508e8db2970422637fa 100644 (file)
@@ -55,6 +55,7 @@ obj-$(CONFIG_RT2X00)  += rt2x00/
 
 obj-$(CONFIG_P54_COMMON)       += p54/
 
+obj-$(CONFIG_ATH_COMMON)       += ath/
 obj-$(CONFIG_ATH5K)    += ath5k/
 obj-$(CONFIG_ATH9K)    += ath9k/
 obj-$(CONFIG_AR9170_USB)       += ar9170/
diff --git a/drivers/net/wireless/ath/Kconfig b/drivers/net/wireless/ath/Kconfig
new file mode 100644 (file)
index 0000000..c2873a2
--- /dev/null
@@ -0,0 +1,4 @@
+config ATH_COMMON
+       tristate "Atheros Wireless Cards Shared Support"
+       depends on ATH5K || ATH9K
+
diff --git a/drivers/net/wireless/ath/Makefile b/drivers/net/wireless/ath/Makefile
new file mode 100644 (file)
index 0000000..bc77646
--- /dev/null
@@ -0,0 +1,3 @@
+obj-$(CONFIG_ATH_COMMON)       += ath.o
+ath-objs               := regd.o
+
diff --git a/drivers/net/wireless/ath/regd.c b/drivers/net/wireless/ath/regd.c
new file mode 100644 (file)
index 0000000..4d3935b
--- /dev/null
@@ -0,0 +1,519 @@
+/*
+ * Copyright (c) 2008-2009 Atheros Communications Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <linux/kernel.h>
+#include <linux/slab.h>
+#include <net/cfg80211.h>
+#include <net/mac80211.h>
+#include <net/wireless.h>
+#include "regd.h"
+#include "regd_common.h"
+
+/*
+ * This is a set of common rules used by our world regulatory domains.
+ * We have 12 world regulatory domains. To save space we consolidate
+ * the regulatory domains in 5 structures by frequency and change
+ * the flags on our reg_notifier() on a case by case basis.
+ */
+
+/* Only these channels all allow active scan on all world regulatory domains */
+#define ATH9K_2GHZ_CH01_11     REG_RULE(2412-10, 2462+10, 40, 0, 20, 0)
+
+/* We enable active scan on these a case by case basis by regulatory domain */
+#define ATH9K_2GHZ_CH12_13     REG_RULE(2467-10, 2472+10, 40, 0, 20,\
+                                       NL80211_RRF_PASSIVE_SCAN)
+#define ATH9K_2GHZ_CH14                REG_RULE(2484-10, 2484+10, 40, 0, 20,\
+                               NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_OFDM)
+
+/* We allow IBSS on these on a case by case basis by regulatory domain */
+#define ATH9K_5GHZ_5150_5350   REG_RULE(5150-10, 5350+10, 40, 0, 30,\
+                               NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_IBSS)
+#define ATH9K_5GHZ_5470_5850   REG_RULE(5470-10, 5850+10, 40, 0, 30,\
+                               NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_IBSS)
+#define ATH9K_5GHZ_5725_5850   REG_RULE(5725-10, 5850+10, 40, 0, 30,\
+                               NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_IBSS)
+
+#define ATH9K_2GHZ_ALL         ATH9K_2GHZ_CH01_11, \
+                               ATH9K_2GHZ_CH12_13, \
+                               ATH9K_2GHZ_CH14
+
+#define ATH9K_5GHZ_ALL         ATH9K_5GHZ_5150_5350, \
+                               ATH9K_5GHZ_5470_5850
+/* This one skips what we call "mid band" */
+#define ATH9K_5GHZ_NO_MIDBAND  ATH9K_5GHZ_5150_5350, \
+                               ATH9K_5GHZ_5725_5850
+
+/* Can be used for:
+ * 0x60, 0x61, 0x62 */
+static const struct ieee80211_regdomain ath_world_regdom_60_61_62 = {
+       .n_reg_rules = 5,
+       .alpha2 =  "99",
+       .reg_rules = {
+               ATH9K_2GHZ_ALL,
+               ATH9K_5GHZ_ALL,
+       }
+};
+
+/* Can be used by 0x63 and 0x65 */
+static const struct ieee80211_regdomain ath_world_regdom_63_65 = {
+       .n_reg_rules = 4,
+       .alpha2 =  "99",
+       .reg_rules = {
+               ATH9K_2GHZ_CH01_11,
+               ATH9K_2GHZ_CH12_13,
+               ATH9K_5GHZ_NO_MIDBAND,
+       }
+};
+
+/* Can be used by 0x64 only */
+static const struct ieee80211_regdomain ath_world_regdom_64 = {
+       .n_reg_rules = 3,
+       .alpha2 =  "99",
+       .reg_rules = {
+               ATH9K_2GHZ_CH01_11,
+               ATH9K_5GHZ_NO_MIDBAND,
+       }
+};
+
+/* Can be used by 0x66 and 0x69 */
+static const struct ieee80211_regdomain ath_world_regdom_66_69 = {
+       .n_reg_rules = 3,
+       .alpha2 =  "99",
+       .reg_rules = {
+               ATH9K_2GHZ_CH01_11,
+               ATH9K_5GHZ_ALL,
+       }
+};
+
+/* Can be used by 0x67, 0x6A and 0x68 */
+static const struct ieee80211_regdomain ath_world_regdom_67_68_6A = {
+       .n_reg_rules = 4,
+       .alpha2 =  "99",
+       .reg_rules = {
+               ATH9K_2GHZ_CH01_11,
+               ATH9K_2GHZ_CH12_13,
+               ATH9K_5GHZ_ALL,
+       }
+};
+
+static inline bool is_wwr_sku(u16 regd)
+{
+       return ((regd & WORLD_SKU_MASK) == WORLD_SKU_PREFIX) ||
+               (regd == WORLD);
+}
+
+static u16 ath_regd_get_eepromRD(struct ath_regulatory *reg)
+{
+       return reg->current_rd & ~WORLDWIDE_ROAMING_FLAG;
+}
+
+bool ath_is_world_regd(struct ath_regulatory *reg)
+{
+       return is_wwr_sku(ath_regd_get_eepromRD(reg));
+}
+EXPORT_SYMBOL(ath_is_world_regd);
+
+const struct ieee80211_regdomain *ath_default_world_regdomain(void)
+{
+       /* this is the most restrictive */
+       return &ath_world_regdom_64;
+}
+EXPORT_SYMBOL(ath_default_world_regdomain);
+
+const struct
+ieee80211_regdomain *ath_world_regdomain(struct ath_regulatory *reg)
+{
+       switch (reg->regpair->regDmnEnum) {
+       case 0x60:
+       case 0x61:
+       case 0x62:
+               return &ath_world_regdom_60_61_62;
+       case 0x63:
+       case 0x65:
+               return &ath_world_regdom_63_65;
+       case 0x64:
+               return &ath_world_regdom_64;
+       case 0x66:
+       case 0x69:
+               return &ath_world_regdom_66_69;
+       case 0x67:
+       case 0x68:
+       case 0x6A:
+               return &ath_world_regdom_67_68_6A;
+       default:
+               WARN_ON(1);
+               return ath_default_world_regdomain();
+       }
+}
+EXPORT_SYMBOL(ath_world_regdomain);
+
+/* Frequency is one where radar detection is required */
+static bool ath_is_radar_freq(u16 center_freq)
+{
+       return (center_freq >= 5260 && center_freq <= 5700);
+}
+
+/*
+ * N.B: These exception rules do not apply radar freqs.
+ *
+ * - We enable adhoc (or beaconing) if allowed by 11d
+ * - We enable active scan if the channel is allowed by 11d
+ * - If no country IE has been processed and a we determine we have
+ *   received a beacon on a channel we can enable active scan and
+ *   adhoc (or beaconing).
+ */
+static void ath_reg_apply_beaconing_flags(
+       struct wiphy *wiphy,
+       enum nl80211_reg_initiator initiator)
+{
+       enum ieee80211_band band;
+       struct ieee80211_supported_band *sband;
+       const struct ieee80211_reg_rule *reg_rule;
+       struct ieee80211_channel *ch;
+       unsigned int i;
+       u32 bandwidth = 0;
+       int r;
+
+       for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
+
+               if (!wiphy->bands[band])
+                       continue;
+
+               sband = wiphy->bands[band];
+
+               for (i = 0; i < sband->n_channels; i++) {
+
+                       ch = &sband->channels[i];
+
+                       if (ath_is_radar_freq(ch->center_freq) ||
+                           (ch->flags & IEEE80211_CHAN_RADAR))
+                               continue;
+
+                       if (initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE) {
+                               r = freq_reg_info(wiphy, ch->center_freq,
+                                       &bandwidth, &reg_rule);
+                               if (r)
+                                       continue;
+                               /*
+                                * If 11d had a rule for this channel ensure
+                                * we enable adhoc/beaconing if it allows us to
+                                * use it. Note that we would have disabled it
+                                * by applying our static world regdomain by
+                                * default during init, prior to calling our
+                                * regulatory_hint().
+                                */
+                               if (!(reg_rule->flags &
+                                   NL80211_RRF_NO_IBSS))
+                                       ch->flags &=
+                                         ~IEEE80211_CHAN_NO_IBSS;
+                               if (!(reg_rule->flags &
+                                   NL80211_RRF_PASSIVE_SCAN))
+                                       ch->flags &=
+                                         ~IEEE80211_CHAN_PASSIVE_SCAN;
+                       } else {
+                               if (ch->beacon_found)
+                                       ch->flags &= ~(IEEE80211_CHAN_NO_IBSS |
+                                         IEEE80211_CHAN_PASSIVE_SCAN);
+                       }
+               }
+       }
+
+}
+
+/* Allows active scan scan on Ch 12 and 13 */
+static void ath_reg_apply_active_scan_flags(
+       struct wiphy *wiphy,
+       enum nl80211_reg_initiator initiator)
+{
+       struct ieee80211_supported_band *sband;
+       struct ieee80211_channel *ch;
+       const struct ieee80211_reg_rule *reg_rule;
+       u32 bandwidth = 0;
+       int r;
+
+       sband = wiphy->bands[IEEE80211_BAND_2GHZ];
+
+       /*
+        * If no country IE has been received always enable active scan
+        * on these channels. This is only done for specific regulatory SKUs
+        */
+       if (initiator != NL80211_REGDOM_SET_BY_COUNTRY_IE) {
+               ch = &sband->channels[11]; /* CH 12 */
+               if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN)
+                       ch->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN;
+               ch = &sband->channels[12]; /* CH 13 */
+               if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN)
+                       ch->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN;
+               return;
+       }
+
+       /*
+        * If a country IE has been recieved check its rule for this
+        * channel first before enabling active scan. The passive scan
+        * would have been enforced by the initial processing of our
+        * custom regulatory domain.
+        */
+
+       ch = &sband->channels[11]; /* CH 12 */
+       r = freq_reg_info(wiphy, ch->center_freq, &bandwidth, &reg_rule);
+       if (!r) {
+               if (!(reg_rule->flags & NL80211_RRF_PASSIVE_SCAN))
+                       if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN)
+                               ch->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN;
+       }
+
+       ch = &sband->channels[12]; /* CH 13 */
+       r = freq_reg_info(wiphy, ch->center_freq, &bandwidth, &reg_rule);
+       if (!r) {
+               if (!(reg_rule->flags & NL80211_RRF_PASSIVE_SCAN))
+                       if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN)
+                               ch->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN;
+       }
+}
+
+/* Always apply Radar/DFS rules on freq range 5260 MHz - 5700 MHz */
+void ath_reg_apply_radar_flags(struct wiphy *wiphy)
+{
+       struct ieee80211_supported_band *sband;
+       struct ieee80211_channel *ch;
+       unsigned int i;
+
+       if (!wiphy->bands[IEEE80211_BAND_5GHZ])
+               return;
+
+       sband = wiphy->bands[IEEE80211_BAND_5GHZ];
+
+       for (i = 0; i < sband->n_channels; i++) {
+               ch = &sband->channels[i];
+               if (!ath_is_radar_freq(ch->center_freq))
+                       continue;
+               /* We always enable radar detection/DFS on this
+                * frequency range. Additionally we also apply on
+                * this frequency range:
+                * - If STA mode does not yet have DFS supports disable
+                *   active scanning
+                * - If adhoc mode does not support DFS yet then
+                *   disable adhoc in the frequency.
+                * - If AP mode does not yet support radar detection/DFS
+                *   do not allow AP mode
+                */
+               if (!(ch->flags & IEEE80211_CHAN_DISABLED))
+                       ch->flags |= IEEE80211_CHAN_RADAR |
+                                    IEEE80211_CHAN_NO_IBSS |
+                                    IEEE80211_CHAN_PASSIVE_SCAN;
+       }
+}
+EXPORT_SYMBOL(ath_reg_apply_radar_flags);
+
+void ath_reg_apply_world_flags(struct wiphy *wiphy,
+                              enum nl80211_reg_initiator initiator,
+                              struct ath_regulatory *reg)
+{
+       switch (reg->regpair->regDmnEnum) {
+       case 0x60:
+       case 0x63:
+       case 0x66:
+       case 0x67:
+               ath_reg_apply_beaconing_flags(wiphy, initiator);
+               break;
+       case 0x68:
+               ath_reg_apply_beaconing_flags(wiphy, initiator);
+               ath_reg_apply_active_scan_flags(wiphy, initiator);
+               break;
+       }
+       return;
+}
+EXPORT_SYMBOL(ath_reg_apply_world_flags);
+
+int ath_reg_notifier_apply(struct wiphy *wiphy,
+       struct regulatory_request *request, struct ath_regulatory *reg)
+{
+       /* We always apply this */
+       ath_reg_apply_radar_flags(wiphy);
+
+       switch (request->initiator) {
+       case NL80211_REGDOM_SET_BY_DRIVER:
+       case NL80211_REGDOM_SET_BY_CORE:
+       case NL80211_REGDOM_SET_BY_USER:
+               break;
+       case NL80211_REGDOM_SET_BY_COUNTRY_IE:
+               if (ath_is_world_regd(reg))
+                       ath_reg_apply_world_flags(wiphy, request->initiator,
+                                                 reg);
+               break;
+       }
+
+       return 0;
+}
+EXPORT_SYMBOL(ath_reg_notifier_apply);
+
+bool ath_regd_is_eeprom_valid(struct ath_regulatory *reg)
+{
+        u16 rd = ath_regd_get_eepromRD(reg);
+       int i;
+
+       if (rd & COUNTRY_ERD_FLAG) {
+               /* EEPROM value is a country code */
+               u16 cc = rd & ~COUNTRY_ERD_FLAG;
+               for (i = 0; i < ARRAY_SIZE(allCountries); i++)
+                       if (allCountries[i].countryCode == cc)
+                               return true;
+       } else {
+               /* EEPROM value is a regpair value */
+               for (i = 0; i < ARRAY_SIZE(regDomainPairs); i++)
+                       if (regDomainPairs[i].regDmnEnum == rd)
+                               return true;
+       }
+       printk(KERN_DEBUG
+                "ath: invalid regulatory domain/country code 0x%x\n", rd);
+       return false;
+}
+EXPORT_SYMBOL(ath_regd_is_eeprom_valid);
+
+/* EEPROM country code to regpair mapping */
+static struct country_code_to_enum_rd*
+ath_regd_find_country(u16 countryCode)
+{
+       int i;
+
+       for (i = 0; i < ARRAY_SIZE(allCountries); i++) {
+               if (allCountries[i].countryCode == countryCode)
+                       return &allCountries[i];
+       }
+       return NULL;
+}
+
+/* EEPROM rd code to regpair mapping */
+static struct country_code_to_enum_rd*
+ath_regd_find_country_by_rd(int regdmn)
+{
+       int i;
+
+       for (i = 0; i < ARRAY_SIZE(allCountries); i++) {
+               if (allCountries[i].regDmnEnum == regdmn)
+                       return &allCountries[i];
+       }
+       return NULL;
+}
+
+/* Returns the map of the EEPROM set RD to a country code */
+static u16 ath_regd_get_default_country(u16 rd)
+{
+       if (rd & COUNTRY_ERD_FLAG) {
+               struct country_code_to_enum_rd *country = NULL;
+               u16 cc = rd & ~COUNTRY_ERD_FLAG;
+
+               country = ath_regd_find_country(cc);
+               if (country != NULL)
+                       return cc;
+       }
+
+       return CTRY_DEFAULT;
+}
+
+static struct reg_dmn_pair_mapping*
+ath_get_regpair(int regdmn)
+{
+       int i;
+
+       if (regdmn == NO_ENUMRD)
+               return NULL;
+       for (i = 0; i < ARRAY_SIZE(regDomainPairs); i++) {
+               if (regDomainPairs[i].regDmnEnum == regdmn)
+                       return &regDomainPairs[i];
+       }
+       return NULL;
+}
+
+int ath_regd_init(struct ath_regulatory *reg)
+{
+       struct country_code_to_enum_rd *country = NULL;
+       u16 regdmn;
+
+       if (!ath_regd_is_eeprom_valid(reg)) {
+               printk(KERN_DEBUG "ath: Invalid EEPROM contents\n");
+               return -EINVAL;
+       }
+
+       regdmn = ath_regd_get_eepromRD(reg);
+       reg->country_code = ath_regd_get_default_country(regdmn);
+
+       if (reg->country_code == CTRY_DEFAULT &&
+           regdmn == CTRY_DEFAULT)
+               reg->country_code = CTRY_UNITED_STATES;
+
+       if (reg->country_code == CTRY_DEFAULT) {
+               country = NULL;
+       } else {
+               country = ath_regd_find_country(reg->country_code);
+               if (country == NULL) {
+                       printk(KERN_DEBUG
+                               "ath: Country is NULL!!!!, cc= %d\n",
+                               reg->country_code);
+                       return -EINVAL;
+               } else
+                       regdmn = country->regDmnEnum;
+       }
+
+       reg->regpair = ath_get_regpair(regdmn);
+
+       if (!reg->regpair) {
+               printk(KERN_DEBUG "ath: "
+                       "No regulatory domain pair found, cannot continue\n");
+               return -EINVAL;
+       }
+
+       if (!country)
+               country = ath_regd_find_country_by_rd(regdmn);
+
+       if (country) {
+               reg->alpha2[0] = country->isoName[0];
+               reg->alpha2[1] = country->isoName[1];
+       } else {
+               reg->alpha2[0] = '0';
+               reg->alpha2[1] = '0';
+       }
+
+       printk(KERN_DEBUG "ath: Country alpha2 being used: %c%c\n",
+               reg->alpha2[0], reg->alpha2[1]);
+       printk(KERN_DEBUG "ath: Regpair detected: 0x%0x\n",
+               reg->regpair->regDmnEnum);
+
+       return 0;
+}
+EXPORT_SYMBOL(ath_regd_init);
+
+u32 ath_regd_get_band_ctl(struct ath_regulatory *reg,
+                         enum ieee80211_band band)
+{
+       if (!reg->regpair ||
+           (reg->country_code == CTRY_DEFAULT &&
+            is_wwr_sku(ath_regd_get_eepromRD(reg)))) {
+               return SD_NO_CTL;
+       }
+
+       switch (band) {
+       case IEEE80211_BAND_2GHZ:
+               return reg->regpair->reg_2ghz_ctl;
+       case IEEE80211_BAND_5GHZ:
+               return reg->regpair->reg_5ghz_ctl;
+       default:
+               return NO_CTL;
+       }
+
+       return NO_CTL;
+}
+EXPORT_SYMBOL(ath_regd_get_band_ctl);
diff --git a/drivers/net/wireless/ath/regd.h b/drivers/net/wireless/ath/regd.h
new file mode 100644 (file)
index 0000000..981f5cf
--- /dev/null
@@ -0,0 +1,272 @@
+/*
+ * Copyright (c) 2008-2009 Atheros Communications Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef REGD_H
+#define REGD_H
+
+#include <linux/nl80211.h>
+
+#include <net/cfg80211.h>
+#include <net/wireless.h>
+
+#define NO_CTL 0xff
+#define SD_NO_CTL               0xE0
+#define NO_CTL                  0xff
+#define CTL_MODE_M              7
+#define CTL_11A                 0
+#define CTL_11B                 1
+#define CTL_11G                 2
+#define CTL_2GHT20              5
+#define CTL_5GHT20              6
+#define CTL_2GHT40              7
+#define CTL_5GHT40              8
+
+#define CTRY_DEBUG 0x1ff
+#define CTRY_DEFAULT 0
+
+#define COUNTRY_ERD_FLAG        0x8000
+#define WORLDWIDE_ROAMING_FLAG  0x4000
+
+#define MULTI_DOMAIN_MASK 0xFF00
+
+#define WORLD_SKU_MASK          0x00F0
+#define WORLD_SKU_PREFIX        0x0060
+
+#define CHANNEL_HALF_BW         10
+#define CHANNEL_QUARTER_BW      5
+
+struct reg_dmn_pair_mapping {
+       u16 regDmnEnum;
+       u16 reg_5ghz_ctl;
+       u16 reg_2ghz_ctl;
+};
+
+struct country_code_to_enum_rd {
+       u16 countryCode;
+       u16 regDmnEnum;
+       const char *isoName;
+};
+
+struct ath_regulatory {
+       char alpha2[2];
+       u16 country_code;
+       u16 max_power_level;
+       u32 tp_scale;
+       u16 current_rd;
+       u16 current_rd_ext;
+       int16_t power_limit;
+       struct reg_dmn_pair_mapping *regpair;
+};
+
+enum CountryCode {
+       CTRY_ALBANIA = 8,
+       CTRY_ALGERIA = 12,
+       CTRY_ARGENTINA = 32,
+       CTRY_ARMENIA = 51,
+       CTRY_AUSTRALIA = 36,
+       CTRY_AUSTRIA = 40,
+       CTRY_AZERBAIJAN = 31,
+       CTRY_BAHRAIN = 48,
+       CTRY_BELARUS = 112,
+       CTRY_BELGIUM = 56,
+       CTRY_BELIZE = 84,
+       CTRY_BOLIVIA = 68,
+       CTRY_BOSNIA_HERZ = 70,
+       CTRY_BRAZIL = 76,
+       CTRY_BRUNEI_DARUSSALAM = 96,
+       CTRY_BULGARIA = 100,
+       CTRY_CANADA = 124,
+       CTRY_CHILE = 152,
+       CTRY_CHINA = 156,
+       CTRY_COLOMBIA = 170,
+       CTRY_COSTA_RICA = 188,
+       CTRY_CROATIA = 191,
+       CTRY_CYPRUS = 196,
+       CTRY_CZECH = 203,
+       CTRY_DENMARK = 208,
+       CTRY_DOMINICAN_REPUBLIC = 214,
+       CTRY_ECUADOR = 218,
+       CTRY_EGYPT = 818,
+       CTRY_EL_SALVADOR = 222,
+       CTRY_ESTONIA = 233,
+       CTRY_FAEROE_ISLANDS = 234,
+       CTRY_FINLAND = 246,
+       CTRY_FRANCE = 250,
+       CTRY_GEORGIA = 268,
+       CTRY_GERMANY = 276,
+       CTRY_GREECE = 300,
+       CTRY_GUATEMALA = 320,
+       CTRY_HONDURAS = 340,
+       CTRY_HONG_KONG = 344,
+       CTRY_HUNGARY = 348,
+       CTRY_ICELAND = 352,
+       CTRY_INDIA = 356,
+       CTRY_INDONESIA = 360,
+       CTRY_IRAN = 364,
+       CTRY_IRAQ = 368,
+       CTRY_IRELAND = 372,
+       CTRY_ISRAEL = 376,
+       CTRY_ITALY = 380,
+       CTRY_JAMAICA = 388,
+       CTRY_JAPAN = 392,
+       CTRY_JORDAN = 400,
+       CTRY_KAZAKHSTAN = 398,
+       CTRY_KENYA = 404,
+       CTRY_KOREA_NORTH = 408,
+       CTRY_KOREA_ROC = 410,
+       CTRY_KOREA_ROC2 = 411,
+       CTRY_KOREA_ROC3 = 412,
+       CTRY_KUWAIT = 414,
+       CTRY_LATVIA = 428,
+       CTRY_LEBANON = 422,
+       CTRY_LIBYA = 434,
+       CTRY_LIECHTENSTEIN = 438,
+       CTRY_LITHUANIA = 440,
+       CTRY_LUXEMBOURG = 442,
+       CTRY_MACAU = 446,
+       CTRY_MACEDONIA = 807,
+       CTRY_MALAYSIA = 458,
+       CTRY_MALTA = 470,
+       CTRY_MEXICO = 484,
+       CTRY_MONACO = 492,
+       CTRY_MOROCCO = 504,
+       CTRY_NEPAL = 524,
+       CTRY_NETHERLANDS = 528,
+       CTRY_NETHERLANDS_ANTILLES = 530,
+       CTRY_NEW_ZEALAND = 554,
+       CTRY_NICARAGUA = 558,
+       CTRY_NORWAY = 578,
+       CTRY_OMAN = 512,
+       CTRY_PAKISTAN = 586,
+       CTRY_PANAMA = 591,
+       CTRY_PAPUA_NEW_GUINEA = 598,
+       CTRY_PARAGUAY = 600,
+       CTRY_PERU = 604,
+       CTRY_PHILIPPINES = 608,
+       CTRY_POLAND = 616,
+       CTRY_PORTUGAL = 620,
+       CTRY_PUERTO_RICO = 630,
+       CTRY_QATAR = 634,
+       CTRY_ROMANIA = 642,
+       CTRY_RUSSIA = 643,
+       CTRY_SAUDI_ARABIA = 682,
+       CTRY_SERBIA_MONTENEGRO = 891,
+       CTRY_SINGAPORE = 702,
+       CTRY_SLOVAKIA = 703,
+       CTRY_SLOVENIA = 705,
+       CTRY_SOUTH_AFRICA = 710,
+       CTRY_SPAIN = 724,
+       CTRY_SRI_LANKA = 144,
+       CTRY_SWEDEN = 752,
+       CTRY_SWITZERLAND = 756,
+       CTRY_SYRIA = 760,
+       CTRY_TAIWAN = 158,
+       CTRY_THAILAND = 764,
+       CTRY_TRINIDAD_Y_TOBAGO = 780,
+       CTRY_TUNISIA = 788,
+       CTRY_TURKEY = 792,
+       CTRY_UAE = 784,
+       CTRY_UKRAINE = 804,
+       CTRY_UNITED_KINGDOM = 826,
+       CTRY_UNITED_STATES = 840,
+       CTRY_UNITED_STATES_FCC49 = 842,
+       CTRY_URUGUAY = 858,
+       CTRY_UZBEKISTAN = 860,
+       CTRY_VENEZUELA = 862,
+       CTRY_VIET_NAM = 704,
+       CTRY_YEMEN = 887,
+       CTRY_ZIMBABWE = 716,
+       CTRY_JAPAN1 = 393,
+       CTRY_JAPAN2 = 394,
+       CTRY_JAPAN3 = 395,
+       CTRY_JAPAN4 = 396,
+       CTRY_JAPAN5 = 397,
+       CTRY_JAPAN6 = 4006,
+       CTRY_JAPAN7 = 4007,
+       CTRY_JAPAN8 = 4008,
+       CTRY_JAPAN9 = 4009,
+       CTRY_JAPAN10 = 4010,
+       CTRY_JAPAN11 = 4011,
+       CTRY_JAPAN12 = 4012,
+       CTRY_JAPAN13 = 4013,
+       CTRY_JAPAN14 = 4014,
+       CTRY_JAPAN15 = 4015,
+       CTRY_JAPAN16 = 4016,
+       CTRY_JAPAN17 = 4017,
+       CTRY_JAPAN18 = 4018,
+       CTRY_JAPAN19 = 4019,
+       CTRY_JAPAN20 = 4020,
+       CTRY_JAPAN21 = 4021,
+       CTRY_JAPAN22 = 4022,
+       CTRY_JAPAN23 = 4023,
+       CTRY_JAPAN24 = 4024,
+       CTRY_JAPAN25 = 4025,
+       CTRY_JAPAN26 = 4026,
+       CTRY_JAPAN27 = 4027,
+       CTRY_JAPAN28 = 4028,
+       CTRY_JAPAN29 = 4029,
+       CTRY_JAPAN30 = 4030,
+       CTRY_JAPAN31 = 4031,
+       CTRY_JAPAN32 = 4032,
+       CTRY_JAPAN33 = 4033,
+       CTRY_JAPAN34 = 4034,
+       CTRY_JAPAN35 = 4035,
+       CTRY_JAPAN36 = 4036,
+       CTRY_JAPAN37 = 4037,
+       CTRY_JAPAN38 = 4038,
+       CTRY_JAPAN39 = 4039,
+       CTRY_JAPAN40 = 4040,
+       CTRY_JAPAN41 = 4041,
+       CTRY_JAPAN42 = 4042,
+       CTRY_JAPAN43 = 4043,
+       CTRY_JAPAN44 = 4044,
+       CTRY_JAPAN45 = 4045,
+       CTRY_JAPAN46 = 4046,
+       CTRY_JAPAN47 = 4047,
+       CTRY_JAPAN48 = 4048,
+       CTRY_JAPAN49 = 4049,
+       CTRY_JAPAN50 = 4050,
+       CTRY_JAPAN51 = 4051,
+       CTRY_JAPAN52 = 4052,
+       CTRY_JAPAN53 = 4053,
+       CTRY_JAPAN54 = 4054,
+       CTRY_JAPAN55 = 4055,
+       CTRY_JAPAN56 = 4056,
+       CTRY_JAPAN57 = 4057,
+       CTRY_JAPAN58 = 4058,
+       CTRY_JAPAN59 = 4059,
+       CTRY_AUSTRALIA2 = 5000,
+       CTRY_CANADA2 = 5001,
+       CTRY_BELGIUM2 = 5002
+};
+
+bool ath_is_world_regd(struct ath_regulatory *reg);
+const
+struct ieee80211_regdomain *ath_world_regdomain(struct ath_regulatory *reg);
+const struct ieee80211_regdomain *ath_default_world_regdomain(void);
+void ath_reg_apply_world_flags(struct wiphy *wiphy,
+                              enum nl80211_reg_initiator,
+                              struct ath_regulatory *reg);
+void ath_reg_apply_radar_flags(struct wiphy *wiphy);
+int ath_regd_init(struct ath_regulatory *reg);
+bool ath_regd_is_eeprom_valid(struct ath_regulatory *reg);
+u32 ath_regd_get_band_ctl(struct ath_regulatory *reg,
+                         enum ieee80211_band band);
+int ath_reg_notifier_apply(struct wiphy *wiphy,
+                          struct regulatory_request *request,
+                          struct ath_regulatory *reg);
+
+#endif
diff --git a/drivers/net/wireless/ath/regd_common.h b/drivers/net/wireless/ath/regd_common.h
new file mode 100644 (file)
index 0000000..4d0e298
--- /dev/null
@@ -0,0 +1,473 @@
+/*
+ * Copyright (c) 2008-2009 Atheros Communications Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef REGD_COMMON_H
+#define REGD_COMMON_H
+
+enum EnumRd {
+       NO_ENUMRD = 0x00,
+       NULL1_WORLD = 0x03,
+       NULL1_ETSIB = 0x07,
+       NULL1_ETSIC = 0x08,
+       FCC1_FCCA = 0x10,
+       FCC1_WORLD = 0x11,
+       FCC4_FCCA = 0x12,
+       FCC5_FCCA = 0x13,
+       FCC6_FCCA = 0x14,
+
+       FCC2_FCCA = 0x20,
+       FCC2_WORLD = 0x21,
+       FCC2_ETSIC = 0x22,
+       FCC6_WORLD = 0x23,
+       FRANCE_RES = 0x31,
+       FCC3_FCCA = 0x3A,
+       FCC3_WORLD = 0x3B,
+
+       ETSI1_WORLD = 0x37,
+       ETSI3_ETSIA = 0x32,
+       ETSI2_WORLD = 0x35,
+       ETSI3_WORLD = 0x36,
+       ETSI4_WORLD = 0x30,
+       ETSI4_ETSIC = 0x38,
+       ETSI5_WORLD = 0x39,
+       ETSI6_WORLD = 0x34,
+       ETSI_RESERVED = 0x33,
+
+       MKK1_MKKA = 0x40,
+       MKK1_MKKB = 0x41,
+       APL4_WORLD = 0x42,
+       MKK2_MKKA = 0x43,
+       APL_RESERVED = 0x44,
+       APL2_WORLD = 0x45,
+       APL2_APLC = 0x46,
+       APL3_WORLD = 0x47,
+       MKK1_FCCA = 0x48,
+       APL2_APLD = 0x49,
+       MKK1_MKKA1 = 0x4A,
+       MKK1_MKKA2 = 0x4B,
+       MKK1_MKKC = 0x4C,
+
+       APL3_FCCA = 0x50,
+       APL1_WORLD = 0x52,
+       APL1_FCCA = 0x53,
+       APL1_APLA = 0x54,
+       APL1_ETSIC = 0x55,
+       APL2_ETSIC = 0x56,
+       APL5_WORLD = 0x58,
+       APL6_WORLD = 0x5B,
+       APL7_FCCA = 0x5C,
+       APL8_WORLD = 0x5D,
+       APL9_WORLD = 0x5E,
+
+       WOR0_WORLD = 0x60,
+       WOR1_WORLD = 0x61,
+       WOR2_WORLD = 0x62,
+       WOR3_WORLD = 0x63,
+       WOR4_WORLD = 0x64,
+       WOR5_ETSIC = 0x65,
+
+       WOR01_WORLD = 0x66,
+       WOR02_WORLD = 0x67,
+       EU1_WORLD = 0x68,
+
+       WOR9_WORLD = 0x69,
+       WORA_WORLD = 0x6A,
+       WORB_WORLD = 0x6B,
+
+       MKK3_MKKB = 0x80,
+       MKK3_MKKA2 = 0x81,
+       MKK3_MKKC = 0x82,
+
+       MKK4_MKKB = 0x83,
+       MKK4_MKKA2 = 0x84,
+       MKK4_MKKC = 0x85,
+
+       MKK5_MKKB = 0x86,
+       MKK5_MKKA2 = 0x87,
+       MKK5_MKKC = 0x88,
+
+       MKK6_MKKB = 0x89,
+       MKK6_MKKA2 = 0x8A,
+       MKK6_MKKC = 0x8B,
+
+       MKK7_MKKB = 0x8C,
+       MKK7_MKKA2 = 0x8D,
+       MKK7_MKKC = 0x8E,
+
+       MKK8_MKKB = 0x8F,
+       MKK8_MKKA2 = 0x90,
+       MKK8_MKKC = 0x91,
+
+       MKK14_MKKA1 = 0x92,
+       MKK15_MKKA1 = 0x93,
+
+       MKK10_FCCA = 0xD0,
+       MKK10_MKKA1 = 0xD1,
+       MKK10_MKKC = 0xD2,
+       MKK10_MKKA2 = 0xD3,
+
+       MKK11_MKKA = 0xD4,
+       MKK11_FCCA = 0xD5,
+       MKK11_MKKA1 = 0xD6,
+       MKK11_MKKC = 0xD7,
+       MKK11_MKKA2 = 0xD8,
+
+       MKK12_MKKA = 0xD9,
+       MKK12_FCCA = 0xDA,
+       MKK12_MKKA1 = 0xDB,
+       MKK12_MKKC = 0xDC,
+       MKK12_MKKA2 = 0xDD,
+
+       MKK13_MKKB = 0xDE,
+
+       MKK3_MKKA = 0xF0,
+       MKK3_MKKA1 = 0xF1,
+       MKK3_FCCA = 0xF2,
+       MKK4_MKKA = 0xF3,
+       MKK4_MKKA1 = 0xF4,
+       MKK4_FCCA = 0xF5,
+       MKK9_MKKA = 0xF6,
+       MKK10_MKKA = 0xF7,
+       MKK6_MKKA1 = 0xF8,
+       MKK6_FCCA = 0xF9,
+       MKK7_MKKA1 = 0xFA,
+       MKK7_FCCA = 0xFB,
+       MKK9_FCCA = 0xFC,
+       MKK9_MKKA1 = 0xFD,
+       MKK9_MKKC = 0xFE,
+       MKK9_MKKA2 = 0xFF,
+
+       WORLD = 0x0199,
+       DEBUG_REG_DMN = 0x01ff,
+};
+
+enum ctl_group {
+       CTL_FCC = 0x10,
+       CTL_MKK = 0x40,
+       CTL_ETSI = 0x30,
+};
+
+/* Regpair to CTL band mapping */
+static struct reg_dmn_pair_mapping regDomainPairs[] = {
+       /* regpair, 5 GHz CTL, 2 GHz CTL */
+       {NO_ENUMRD, DEBUG_REG_DMN, DEBUG_REG_DMN},
+       {NULL1_WORLD, NO_CTL, CTL_ETSI},
+       {NULL1_ETSIB, NO_CTL, CTL_ETSI},
+       {NULL1_ETSIC, NO_CTL, CTL_ETSI},
+
+       {FCC2_FCCA, CTL_FCC, CTL_FCC},
+       {FCC2_WORLD, CTL_FCC, CTL_ETSI},
+       {FCC2_ETSIC, CTL_FCC, CTL_ETSI},
+       {FCC3_FCCA, CTL_FCC, CTL_FCC},
+       {FCC3_WORLD, CTL_FCC, CTL_ETSI},
+       {FCC4_FCCA, CTL_FCC, CTL_FCC},
+       {FCC5_FCCA, CTL_FCC, CTL_FCC},
+       {FCC6_FCCA, CTL_FCC, CTL_FCC},
+       {FCC6_WORLD, CTL_FCC, CTL_ETSI},
+
+       {ETSI1_WORLD, CTL_ETSI, CTL_ETSI},
+       {ETSI2_WORLD, CTL_ETSI, CTL_ETSI},
+       {ETSI3_WORLD, CTL_ETSI, CTL_ETSI},
+       {ETSI4_WORLD, CTL_ETSI, CTL_ETSI},
+       {ETSI5_WORLD, CTL_ETSI, CTL_ETSI},
+       {ETSI6_WORLD, CTL_ETSI, CTL_ETSI},
+
+       /* XXX: For ETSI3_ETSIA, Was NO_CTL meant for the 2 GHz band ? */
+       {ETSI3_ETSIA, CTL_ETSI, CTL_ETSI},
+       {FRANCE_RES, CTL_ETSI, CTL_ETSI},
+
+       {FCC1_WORLD, CTL_FCC, CTL_ETSI},
+       {FCC1_FCCA, CTL_FCC, CTL_FCC},
+       {APL1_WORLD, CTL_FCC, CTL_ETSI},
+       {APL2_WORLD, CTL_FCC, CTL_ETSI},
+       {APL3_WORLD, CTL_FCC, CTL_ETSI},
+       {APL4_WORLD, CTL_FCC, CTL_ETSI},
+       {APL5_WORLD, CTL_FCC, CTL_ETSI},
+       {APL6_WORLD, CTL_ETSI, CTL_ETSI},
+       {APL8_WORLD, CTL_ETSI, CTL_ETSI},
+       {APL9_WORLD, CTL_ETSI, CTL_ETSI},
+
+       {APL3_FCCA, CTL_FCC, CTL_FCC},
+       {APL1_ETSIC, CTL_FCC, CTL_ETSI},
+       {APL2_ETSIC, CTL_FCC, CTL_ETSI},
+       {APL2_APLD, CTL_FCC, NO_CTL},
+
+       {MKK1_MKKA, CTL_MKK, CTL_MKK},
+       {MKK1_MKKB, CTL_MKK, CTL_MKK},
+       {MKK1_FCCA, CTL_MKK, CTL_FCC},
+       {MKK1_MKKA1, CTL_MKK, CTL_MKK},
+       {MKK1_MKKA2, CTL_MKK, CTL_MKK},
+       {MKK1_MKKC, CTL_MKK, CTL_MKK},
+
+       {MKK2_MKKA, CTL_MKK, CTL_MKK},
+       {MKK3_MKKA, CTL_MKK, CTL_MKK},
+       {MKK3_MKKB, CTL_MKK, CTL_MKK},
+       {MKK3_MKKA1, CTL_MKK, CTL_MKK},
+       {MKK3_MKKA2, CTL_MKK, CTL_MKK},
+       {MKK3_MKKC, CTL_MKK, CTL_MKK},
+       {MKK3_FCCA, CTL_MKK, CTL_FCC},
+
+       {MKK4_MKKA, CTL_MKK, CTL_MKK},
+       {MKK4_MKKB, CTL_MKK, CTL_MKK},
+       {MKK4_MKKA1, CTL_MKK, CTL_MKK},
+       {MKK4_MKKA2, CTL_MKK, CTL_MKK},
+       {MKK4_MKKC, CTL_MKK, CTL_MKK},
+       {MKK4_FCCA, CTL_MKK, CTL_FCC},
+
+       {MKK5_MKKB, CTL_MKK, CTL_MKK},
+       {MKK5_MKKA2, CTL_MKK, CTL_MKK},
+       {MKK5_MKKC, CTL_MKK, CTL_MKK},
+
+       {MKK6_MKKB, CTL_MKK, CTL_MKK},
+       {MKK6_MKKA1, CTL_MKK, CTL_MKK},
+       {MKK6_MKKA2, CTL_MKK, CTL_MKK},
+       {MKK6_MKKC, CTL_MKK, CTL_MKK},
+       {MKK6_FCCA, CTL_MKK, CTL_FCC},
+
+       {MKK7_MKKB, CTL_MKK, CTL_MKK},
+       {MKK7_MKKA1, CTL_MKK, CTL_MKK},
+       {MKK7_MKKA2, CTL_MKK, CTL_MKK},
+       {MKK7_MKKC, CTL_MKK, CTL_MKK},
+       {MKK7_FCCA, CTL_MKK, CTL_FCC},
+
+       {MKK8_MKKB, CTL_MKK, CTL_MKK},
+       {MKK8_MKKA2, CTL_MKK, CTL_MKK},
+       {MKK8_MKKC, CTL_MKK, CTL_MKK},
+
+       {MKK9_MKKA, CTL_MKK, CTL_MKK},
+       {MKK9_FCCA, CTL_MKK, CTL_FCC},
+       {MKK9_MKKA1, CTL_MKK, CTL_MKK},
+       {MKK9_MKKA2, CTL_MKK, CTL_MKK},
+       {MKK9_MKKC, CTL_MKK, CTL_MKK},
+
+       {MKK10_MKKA, CTL_MKK, CTL_MKK},
+       {MKK10_FCCA, CTL_MKK, CTL_FCC},
+       {MKK10_MKKA1, CTL_MKK, CTL_MKK},
+       {MKK10_MKKA2, CTL_MKK, CTL_MKK},
+       {MKK10_MKKC, CTL_MKK, CTL_MKK},
+
+       {MKK11_MKKA, CTL_MKK, CTL_MKK},
+       {MKK11_FCCA, CTL_MKK, CTL_FCC},
+       {MKK11_MKKA1, CTL_MKK, CTL_MKK},
+       {MKK11_MKKA2, CTL_MKK, CTL_MKK},
+       {MKK11_MKKC, CTL_MKK, CTL_MKK},
+
+       {MKK12_MKKA, CTL_MKK, CTL_MKK},
+       {MKK12_FCCA, CTL_MKK, CTL_FCC},
+       {MKK12_MKKA1, CTL_MKK, CTL_MKK},
+       {MKK12_MKKA2, CTL_MKK, CTL_MKK},
+       {MKK12_MKKC, CTL_MKK, CTL_MKK},
+
+       {MKK13_MKKB, CTL_MKK, CTL_MKK},
+       {MKK14_MKKA1, CTL_MKK, CTL_MKK},
+       {MKK15_MKKA1, CTL_MKK, CTL_MKK},
+
+       {WOR0_WORLD, NO_CTL, NO_CTL},
+       {WOR1_WORLD, NO_CTL, NO_CTL},
+       {WOR2_WORLD, NO_CTL, NO_CTL},
+       {WOR3_WORLD, NO_CTL, NO_CTL},
+       {WOR4_WORLD, NO_CTL, NO_CTL},
+       {WOR5_ETSIC, NO_CTL, NO_CTL},
+       {WOR01_WORLD, NO_CTL, NO_CTL},
+       {WOR02_WORLD, NO_CTL, NO_CTL},
+       {EU1_WORLD, NO_CTL, NO_CTL},
+       {WOR9_WORLD, NO_CTL, NO_CTL},
+       {WORA_WORLD, NO_CTL, NO_CTL},
+       {WORB_WORLD, NO_CTL, NO_CTL},
+};
+
+static struct country_code_to_enum_rd allCountries[] = {
+       {CTRY_DEBUG, NO_ENUMRD, "DB"},
+       {CTRY_DEFAULT, FCC1_FCCA, "CO"},
+       {CTRY_ALBANIA, NULL1_WORLD, "AL"},
+       {CTRY_ALGERIA, NULL1_WORLD, "DZ"},
+       {CTRY_ARGENTINA, APL3_WORLD, "AR"},
+       {CTRY_ARMENIA, ETSI4_WORLD, "AM"},
+       {CTRY_AUSTRALIA, FCC2_WORLD, "AU"},
+       {CTRY_AUSTRALIA2, FCC6_WORLD, "AU"},
+       {CTRY_AUSTRIA, ETSI1_WORLD, "AT"},
+       {CTRY_AZERBAIJAN, ETSI4_WORLD, "AZ"},
+       {CTRY_BAHRAIN, APL6_WORLD, "BH"},
+       {CTRY_BELARUS, ETSI1_WORLD, "BY"},
+       {CTRY_BELGIUM, ETSI1_WORLD, "BE"},
+       {CTRY_BELGIUM2, ETSI4_WORLD, "BL"},
+       {CTRY_BELIZE, APL1_ETSIC, "BZ"},
+       {CTRY_BOLIVIA, APL1_ETSIC, "BO"},
+       {CTRY_BOSNIA_HERZ, ETSI1_WORLD, "BA"},
+       {CTRY_BRAZIL, FCC3_WORLD, "BR"},
+       {CTRY_BRUNEI_DARUSSALAM, APL1_WORLD, "BN"},
+       {CTRY_BULGARIA, ETSI6_WORLD, "BG"},
+       {CTRY_CANADA, FCC2_FCCA, "CA"},
+       {CTRY_CANADA2, FCC6_FCCA, "CA"},
+       {CTRY_CHILE, APL6_WORLD, "CL"},
+       {CTRY_CHINA, APL1_WORLD, "CN"},
+       {CTRY_COLOMBIA, FCC1_FCCA, "CO"},
+       {CTRY_COSTA_RICA, FCC1_WORLD, "CR"},
+       {CTRY_CROATIA, ETSI3_WORLD, "HR"},
+       {CTRY_CYPRUS, ETSI1_WORLD, "CY"},
+       {CTRY_CZECH, ETSI3_WORLD, "CZ"},
+       {CTRY_DENMARK, ETSI1_WORLD, "DK"},
+       {CTRY_DOMINICAN_REPUBLIC, FCC1_FCCA, "DO"},
+       {CTRY_ECUADOR, FCC1_WORLD, "EC"},
+       {CTRY_EGYPT, ETSI3_WORLD, "EG"},
+       {CTRY_EL_SALVADOR, FCC1_WORLD, "SV"},
+       {CTRY_ESTONIA, ETSI1_WORLD, "EE"},
+       {CTRY_FINLAND, ETSI1_WORLD, "FI"},
+       {CTRY_FRANCE, ETSI1_WORLD, "FR"},
+       {CTRY_GEORGIA, ETSI4_WORLD, "GE"},
+       {CTRY_GERMANY, ETSI1_WORLD, "DE"},
+       {CTRY_GREECE, ETSI1_WORLD, "GR"},
+       {CTRY_GUATEMALA, FCC1_FCCA, "GT"},
+       {CTRY_HONDURAS, NULL1_WORLD, "HN"},
+       {CTRY_HONG_KONG, FCC2_WORLD, "HK"},
+       {CTRY_HUNGARY, ETSI1_WORLD, "HU"},
+       {CTRY_ICELAND, ETSI1_WORLD, "IS"},
+       {CTRY_INDIA, APL6_WORLD, "IN"},
+       {CTRY_INDONESIA, APL1_WORLD, "ID"},
+       {CTRY_IRAN, APL1_WORLD, "IR"},
+       {CTRY_IRELAND, ETSI1_WORLD, "IE"},
+       {CTRY_ISRAEL, NULL1_WORLD, "IL"},
+       {CTRY_ITALY, ETSI1_WORLD, "IT"},
+       {CTRY_JAMAICA, ETSI1_WORLD, "JM"},
+
+       {CTRY_JAPAN, MKK1_MKKA, "JP"},
+       {CTRY_JAPAN1, MKK1_MKKB, "JP"},
+       {CTRY_JAPAN2, MKK1_FCCA, "JP"},
+       {CTRY_JAPAN3, MKK2_MKKA, "JP"},
+       {CTRY_JAPAN4, MKK1_MKKA1, "JP"},
+       {CTRY_JAPAN5, MKK1_MKKA2, "JP"},
+       {CTRY_JAPAN6, MKK1_MKKC, "JP"},
+       {CTRY_JAPAN7, MKK3_MKKB, "JP"},
+       {CTRY_JAPAN8, MKK3_MKKA2, "JP"},
+       {CTRY_JAPAN9, MKK3_MKKC, "JP"},
+       {CTRY_JAPAN10, MKK4_MKKB, "JP"},
+       {CTRY_JAPAN11, MKK4_MKKA2, "JP"},
+       {CTRY_JAPAN12, MKK4_MKKC, "JP"},
+       {CTRY_JAPAN13, MKK5_MKKB, "JP"},
+       {CTRY_JAPAN14, MKK5_MKKA2, "JP"},
+       {CTRY_JAPAN15, MKK5_MKKC, "JP"},
+       {CTRY_JAPAN16, MKK6_MKKB, "JP"},
+       {CTRY_JAPAN17, MKK6_MKKA2, "JP"},
+       {CTRY_JAPAN18, MKK6_MKKC, "JP"},
+       {CTRY_JAPAN19, MKK7_MKKB, "JP"},
+       {CTRY_JAPAN20, MKK7_MKKA2, "JP"},
+       {CTRY_JAPAN21, MKK7_MKKC, "JP"},
+       {CTRY_JAPAN22, MKK8_MKKB, "JP"},
+       {CTRY_JAPAN23, MKK8_MKKA2, "JP"},
+       {CTRY_JAPAN24, MKK8_MKKC, "JP"},
+       {CTRY_JAPAN25, MKK3_MKKA, "JP"},
+       {CTRY_JAPAN26, MKK3_MKKA1, "JP"},
+       {CTRY_JAPAN27, MKK3_FCCA, "JP"},
+       {CTRY_JAPAN28, MKK4_MKKA1, "JP"},
+       {CTRY_JAPAN29, MKK4_FCCA, "JP"},
+       {CTRY_JAPAN30, MKK6_MKKA1, "JP"},
+       {CTRY_JAPAN31, MKK6_FCCA, "JP"},
+       {CTRY_JAPAN32, MKK7_MKKA1, "JP"},
+       {CTRY_JAPAN33, MKK7_FCCA, "JP"},
+       {CTRY_JAPAN34, MKK9_MKKA, "JP"},
+       {CTRY_JAPAN35, MKK10_MKKA, "JP"},
+       {CTRY_JAPAN36, MKK4_MKKA, "JP"},
+       {CTRY_JAPAN37, MKK9_FCCA, "JP"},
+       {CTRY_JAPAN38, MKK9_MKKA1, "JP"},
+       {CTRY_JAPAN39, MKK9_MKKC, "JP"},
+       {CTRY_JAPAN40, MKK9_MKKA2, "JP"},
+       {CTRY_JAPAN41, MKK10_FCCA, "JP"},
+       {CTRY_JAPAN42, MKK10_MKKA1, "JP"},
+       {CTRY_JAPAN43, MKK10_MKKC, "JP"},
+       {CTRY_JAPAN44, MKK10_MKKA2, "JP"},
+       {CTRY_JAPAN45, MKK11_MKKA, "JP"},
+       {CTRY_JAPAN46, MKK11_FCCA, "JP"},
+       {CTRY_JAPAN47, MKK11_MKKA1, "JP"},
+       {CTRY_JAPAN48, MKK11_MKKC, "JP"},
+       {CTRY_JAPAN49, MKK11_MKKA2, "JP"},
+       {CTRY_JAPAN50, MKK12_MKKA, "JP"},
+       {CTRY_JAPAN51, MKK12_FCCA, "JP"},
+       {CTRY_JAPAN52, MKK12_MKKA1, "JP"},
+       {CTRY_JAPAN53, MKK12_MKKC, "JP"},
+       {CTRY_JAPAN54, MKK12_MKKA2, "JP"},
+       {CTRY_JAPAN57, MKK13_MKKB, "JP"},
+       {CTRY_JAPAN58, MKK14_MKKA1, "JP"},
+       {CTRY_JAPAN59, MKK15_MKKA1, "JP"},
+
+       {CTRY_JORDAN, ETSI2_WORLD, "JO"},
+       {CTRY_KAZAKHSTAN, NULL1_WORLD, "KZ"},
+       {CTRY_KOREA_NORTH, APL9_WORLD, "KP"},
+       {CTRY_KOREA_ROC, APL9_WORLD, "KR"},
+       {CTRY_KOREA_ROC2, APL2_WORLD, "K2"},
+       {CTRY_KOREA_ROC3, APL9_WORLD, "K3"},
+       {CTRY_KUWAIT, NULL1_WORLD, "KW"},
+       {CTRY_LATVIA, ETSI1_WORLD, "LV"},
+       {CTRY_LEBANON, NULL1_WORLD, "LB"},
+       {CTRY_LIECHTENSTEIN, ETSI1_WORLD, "LI"},
+       {CTRY_LITHUANIA, ETSI1_WORLD, "LT"},
+       {CTRY_LUXEMBOURG, ETSI1_WORLD, "LU"},
+       {CTRY_MACAU, FCC2_WORLD, "MO"},
+       {CTRY_MACEDONIA, NULL1_WORLD, "MK"},
+       {CTRY_MALAYSIA, APL8_WORLD, "MY"},
+       {CTRY_MALTA, ETSI1_WORLD, "MT"},
+       {CTRY_MEXICO, FCC1_FCCA, "MX"},
+       {CTRY_MONACO, ETSI4_WORLD, "MC"},
+       {CTRY_MOROCCO, NULL1_WORLD, "MA"},
+       {CTRY_NEPAL, APL1_WORLD, "NP"},
+       {CTRY_NETHERLANDS, ETSI1_WORLD, "NL"},
+       {CTRY_NETHERLANDS_ANTILLES, ETSI1_WORLD, "AN"},
+       {CTRY_NEW_ZEALAND, FCC2_ETSIC, "NZ"},
+       {CTRY_NORWAY, ETSI1_WORLD, "NO"},
+       {CTRY_OMAN, APL6_WORLD, "OM"},
+       {CTRY_PAKISTAN, NULL1_WORLD, "PK"},
+       {CTRY_PANAMA, FCC1_FCCA, "PA"},
+       {CTRY_PAPUA_NEW_GUINEA, FCC1_WORLD, "PG"},
+       {CTRY_PERU, APL1_WORLD, "PE"},
+       {CTRY_PHILIPPINES, APL1_WORLD, "PH"},
+       {CTRY_POLAND, ETSI1_WORLD, "PL"},
+       {CTRY_PORTUGAL, ETSI1_WORLD, "PT"},
+       {CTRY_PUERTO_RICO, FCC1_FCCA, "PR"},
+       {CTRY_QATAR, NULL1_WORLD, "QA"},
+       {CTRY_ROMANIA, NULL1_WORLD, "RO"},
+       {CTRY_RUSSIA, NULL1_WORLD, "RU"},
+       {CTRY_SAUDI_ARABIA, NULL1_WORLD, "SA"},
+       {CTRY_SERBIA_MONTENEGRO, ETSI1_WORLD, "CS"},
+       {CTRY_SINGAPORE, APL6_WORLD, "SG"},
+       {CTRY_SLOVAKIA, ETSI1_WORLD, "SK"},
+       {CTRY_SLOVENIA, ETSI1_WORLD, "SI"},
+       {CTRY_SOUTH_AFRICA, FCC3_WORLD, "ZA"},
+       {CTRY_SPAIN, ETSI1_WORLD, "ES"},
+       {CTRY_SRI_LANKA, FCC3_WORLD, "LK"},
+       {CTRY_SWEDEN, ETSI1_WORLD, "SE"},
+       {CTRY_SWITZERLAND, ETSI1_WORLD, "CH"},
+       {CTRY_SYRIA, NULL1_WORLD, "SY"},
+       {CTRY_TAIWAN, APL3_FCCA, "TW"},
+       {CTRY_THAILAND, NULL1_WORLD, "TH"},
+       {CTRY_TRINIDAD_Y_TOBAGO, ETSI4_WORLD, "TT"},
+       {CTRY_TUNISIA, ETSI3_WORLD, "TN"},
+       {CTRY_TURKEY, ETSI3_WORLD, "TR"},
+       {CTRY_UKRAINE, NULL1_WORLD, "UA"},
+       {CTRY_UAE, NULL1_WORLD, "AE"},
+       {CTRY_UNITED_KINGDOM, ETSI1_WORLD, "GB"},
+       {CTRY_UNITED_STATES, FCC3_FCCA, "US"},
+       /* This "PS" is for US public safety actually... to support this we
+        * would need to assign new special alpha2 to CRDA db as with the world
+        * regdomain and use another alpha2 */
+       {CTRY_UNITED_STATES_FCC49, FCC4_FCCA, "PS"},
+       {CTRY_URUGUAY, APL2_WORLD, "UY"},
+       {CTRY_UZBEKISTAN, FCC3_FCCA, "UZ"},
+       {CTRY_VENEZUELA, APL2_ETSIC, "VE"},
+       {CTRY_VIET_NAM, NULL1_WORLD, "VN"},
+       {CTRY_YEMEN, NULL1_WORLD, "YE"},
+       {CTRY_ZIMBABWE, NULL1_WORLD, "ZW"},
+};
+
+#endif
index 90a8dd8737862a99625f38f4da6dff60cc2d7f0c..0ed1ac312aa69d3b7f94c6d3e17e88c422c019f7 100644 (file)
@@ -2,6 +2,7 @@ config ATH9K
        tristate "Atheros 802.11n wireless cards support"
        depends on PCI && MAC80211 && WLAN_80211
        depends on RFKILL || RFKILL=n
+       select ATH_COMMON
        select MAC80211_LEDS
        select LEDS_CLASS
        select NEW_LEDS
index 1a4d4eab6fe8575c73e6835ed21005bd59e51c18..783bc39eb2ff8efb7d696b4e8956d0e7cd0abe8c 100644 (file)
@@ -4,7 +4,6 @@ ath9k-y +=      hw.o \
                calib.o \
                ani.o \
                phy.o \
-               regd.o \
                beacon.o \
                main.o \
                recv.o \
index 25b68c881ff12c14b75250401b2ff4ea768e4615..9a7715df5cff8cd635d29b9825299b834b41faf5 100644 (file)
@@ -17,6 +17,8 @@
 #ifndef EEPROM_H
 #define EEPROM_H
 
+#include <net/wireless.h>
+
 #define AH_USE_EEPROM   0x1
 
 #ifdef __BIG_ENDIAN
index a8465bb418a9e5021e37a1e3202938df7db60aa2..24299e65fdcf82d00e21a54227a57937e1229268 100644 (file)
@@ -1220,6 +1220,21 @@ static void ath9k_olc_init(struct ath_hw *ah)
        ah->PDADCdelta = 0;
 }
 
+static u32 ath9k_regd_get_ctl(struct ath_regulatory *reg,
+                             struct ath9k_channel *chan)
+{
+       u32 ctl = ath_regd_get_band_ctl(reg, chan->chan->band);
+
+       if (IS_CHAN_B(chan))
+               ctl |= CTL_11B;
+       else if (IS_CHAN_G(chan))
+               ctl |= CTL_11G;
+       else
+               ctl |= CTL_11A;
+
+       return ctl;
+}
+
 static int ath9k_hw_process_ini(struct ath_hw *ah,
                                struct ath9k_channel *chan,
                                enum ath9k_ht_macmode macmode)
index 5a1128ddb4647c866a1a4fbaf8e31891ee153e75..984ac7da09d69288f15001f76516d85c5895a3ee 100644 (file)
 #include "ani.h"
 #include "eeprom.h"
 #include "calib.h"
-#include "regd.h"
 #include "reg.h"
 #include "phy.h"
 
+#include "../ath/regd.h"
+
 #define ATHEROS_VENDOR_ID      0x168c
 #define AR5416_DEVID_PCI       0x0023
 #define AR5416_DEVID_PCIE      0x0024
@@ -404,7 +405,7 @@ struct ath_hw {
        struct ath9k_hw_version hw_version;
        struct ath9k_ops_config config;
        struct ath9k_hw_capabilities caps;
-       struct ath9k_regulatory regulatory;
+       struct ath_regulatory regulatory;
        struct ath9k_channel channels[38];
        struct ath9k_channel *curchan;
 
index 3647a47d939d22bb58b2d0af64ec7d020e14ba15..d779f00c9b9dd0aee1da74fa01768038561bcd7b 100644 (file)
@@ -1406,7 +1406,7 @@ static int ath_init(u16 devid, struct ath_softc *sc)
        for (i = 0; i < sc->keymax; i++)
                ath9k_hw_keyreset(ah, (u16) i);
 
-       if (ath9k_regd_init(&sc->sc_ah->regulatory))
+       if (ath_regd_init(&sc->sc_ah->regulatory))
                goto bad;
 
        /* default to MONITOR mode */
@@ -1570,6 +1570,17 @@ bad:
        return error;
 }
 
+static int ath9k_reg_notifier(struct wiphy *wiphy,
+                             struct regulatory_request *request)
+{
+       struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
+       struct ath_wiphy *aphy = hw->priv;
+       struct ath_softc *sc = aphy->sc;
+       struct ath_regulatory *reg = &sc->sc_ah->regulatory;
+
+       return ath_reg_notifier_apply(wiphy, request, reg);
+}
+
 void ath_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
 {
        hw->flags = IEEE80211_HW_RX_INCLUDES_FCS |
@@ -1614,7 +1625,7 @@ int ath_attach(u16 devid, struct ath_softc *sc)
        struct ieee80211_hw *hw = sc->hw;
        const struct ieee80211_regdomain *regd;
        int error = 0, i;
-       struct ath9k_regulatory *reg;
+       struct ath_regulatory *reg;
 
        DPRINTF(sc, ATH_DBG_CONFIG, "Attach ATH hw\n");
 
@@ -1656,23 +1667,23 @@ int ath_attach(u16 devid, struct ath_softc *sc)
                goto error_attach;
 #endif
 
-       if (ath9k_is_world_regd(reg)) {
+       if (ath_is_world_regd(reg)) {
                /* Anything applied here (prior to wiphy registration) gets
                 * saved on the wiphy orig_* parameters */
-               regd = ath9k_world_regdomain(reg);
+               regd = ath_world_regdomain(reg);
                hw->wiphy->custom_regulatory = true;
                hw->wiphy->strict_regulatory = false;
        } else {
                /* This gets applied in the case of the absense of CRDA,
                 * it's our own custom world regulatory domain, similar to
                 * cfg80211's but we enable passive scanning */
-               regd = ath9k_default_world_regdomain();
+               regd = ath_default_world_regdomain();
        }
        wiphy_apply_custom_regulatory(hw->wiphy, regd);
-       ath9k_reg_apply_radar_flags(hw->wiphy);
-       ath9k_reg_apply_world_flags(hw->wiphy,
-                                   NL80211_REGDOM_SET_BY_DRIVER,
-                                   reg);
+       ath_reg_apply_radar_flags(hw->wiphy);
+       ath_reg_apply_world_flags(hw->wiphy,
+                                 NL80211_REGDOM_SET_BY_DRIVER,
+                                 reg);
 
        INIT_WORK(&sc->chan_work, ath9k_wiphy_chan_work);
        INIT_DELAYED_WORK(&sc->wiphy_work, ath9k_wiphy_work);
@@ -1680,7 +1691,7 @@ int ath_attach(u16 devid, struct ath_softc *sc)
 
        error = ieee80211_register_hw(hw);
 
-       if (!ath9k_is_world_regd(reg)) {
+       if (!ath_is_world_regd(reg)) {
                error = regulatory_hint(hw->wiphy, reg->alpha2);
                if (error)
                        goto error_attach;
diff --git a/drivers/net/wireless/ath9k/regd.c b/drivers/net/wireless/ath9k/regd.c
deleted file mode 100644 (file)
index 7eaa59e..0000000
+++ /dev/null
@@ -1,533 +0,0 @@
-/*
- * Copyright (c) 2008-2009 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <linux/kernel.h>
-#include <linux/slab.h>
-#include <net/wireless.h>
-#include "ath9k.h"
-#include "regd_common.h"
-
-/*
- * This is a set of common rules used by our world regulatory domains.
- * We have 12 world regulatory domains. To save space we consolidate
- * the regulatory domains in 5 structures by frequency and change
- * the flags on our reg_notifier() on a case by case basis.
- */
-
-/* Only these channels all allow active scan on all world regulatory domains */
-#define ATH9K_2GHZ_CH01_11     REG_RULE(2412-10, 2462+10, 40, 0, 20, 0)
-
-/* We enable active scan on these a case by case basis by regulatory domain */
-#define ATH9K_2GHZ_CH12_13     REG_RULE(2467-10, 2472+10, 40, 0, 20,\
-                                       NL80211_RRF_PASSIVE_SCAN)
-#define ATH9K_2GHZ_CH14                REG_RULE(2484-10, 2484+10, 40, 0, 20,\
-                               NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_OFDM)
-
-/* We allow IBSS on these on a case by case basis by regulatory domain */
-#define ATH9K_5GHZ_5150_5350   REG_RULE(5150-10, 5350+10, 40, 0, 30,\
-                               NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_IBSS)
-#define ATH9K_5GHZ_5470_5850   REG_RULE(5470-10, 5850+10, 40, 0, 30,\
-                               NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_IBSS)
-#define ATH9K_5GHZ_5725_5850   REG_RULE(5725-10, 5850+10, 40, 0, 30,\
-                               NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_IBSS)
-
-#define ATH9K_2GHZ_ALL         ATH9K_2GHZ_CH01_11, \
-                               ATH9K_2GHZ_CH12_13, \
-                               ATH9K_2GHZ_CH14
-
-#define ATH9K_5GHZ_ALL         ATH9K_5GHZ_5150_5350, \
-                               ATH9K_5GHZ_5470_5850
-/* This one skips what we call "mid band" */
-#define ATH9K_5GHZ_NO_MIDBAND  ATH9K_5GHZ_5150_5350, \
-                               ATH9K_5GHZ_5725_5850
-
-/* Can be used for:
- * 0x60, 0x61, 0x62 */
-static const struct ieee80211_regdomain ath9k_world_regdom_60_61_62 = {
-       .n_reg_rules = 5,
-       .alpha2 =  "99",
-       .reg_rules = {
-               ATH9K_2GHZ_ALL,
-               ATH9K_5GHZ_ALL,
-       }
-};
-
-/* Can be used by 0x63 and 0x65 */
-static const struct ieee80211_regdomain ath9k_world_regdom_63_65 = {
-       .n_reg_rules = 4,
-       .alpha2 =  "99",
-       .reg_rules = {
-               ATH9K_2GHZ_CH01_11,
-               ATH9K_2GHZ_CH12_13,
-               ATH9K_5GHZ_NO_MIDBAND,
-       }
-};
-
-/* Can be used by 0x64 only */
-static const struct ieee80211_regdomain ath9k_world_regdom_64 = {
-       .n_reg_rules = 3,
-       .alpha2 =  "99",
-       .reg_rules = {
-               ATH9K_2GHZ_CH01_11,
-               ATH9K_5GHZ_NO_MIDBAND,
-       }
-};
-
-/* Can be used by 0x66 and 0x69 */
-static const struct ieee80211_regdomain ath9k_world_regdom_66_69 = {
-       .n_reg_rules = 3,
-       .alpha2 =  "99",
-       .reg_rules = {
-               ATH9K_2GHZ_CH01_11,
-               ATH9K_5GHZ_ALL,
-       }
-};
-
-/* Can be used by 0x67, 0x6A and 0x68 */
-static const struct ieee80211_regdomain ath9k_world_regdom_67_68_6A = {
-       .n_reg_rules = 4,
-       .alpha2 =  "99",
-       .reg_rules = {
-               ATH9K_2GHZ_CH01_11,
-               ATH9K_2GHZ_CH12_13,
-               ATH9K_5GHZ_ALL,
-       }
-};
-
-static inline bool is_wwr_sku(u16 regd)
-{
-       return ((regd & WORLD_SKU_MASK) == WORLD_SKU_PREFIX) ||
-               (regd == WORLD);
-}
-
-static u16 ath9k_regd_get_eepromRD(struct ath9k_regulatory *reg)
-{
-       return reg->current_rd & ~WORLDWIDE_ROAMING_FLAG;
-}
-
-bool ath9k_is_world_regd(struct ath9k_regulatory *reg)
-{
-       return is_wwr_sku(ath9k_regd_get_eepromRD(reg));
-}
-
-const struct ieee80211_regdomain *ath9k_default_world_regdomain(void)
-{
-       /* this is the most restrictive */
-       return &ath9k_world_regdom_64;
-}
-
-const struct
-ieee80211_regdomain *ath9k_world_regdomain(struct ath9k_regulatory *reg)
-{
-       switch (reg->regpair->regDmnEnum) {
-       case 0x60:
-       case 0x61:
-       case 0x62:
-               return &ath9k_world_regdom_60_61_62;
-       case 0x63:
-       case 0x65:
-               return &ath9k_world_regdom_63_65;
-       case 0x64:
-               return &ath9k_world_regdom_64;
-       case 0x66:
-       case 0x69:
-               return &ath9k_world_regdom_66_69;
-       case 0x67:
-       case 0x68:
-       case 0x6A:
-               return &ath9k_world_regdom_67_68_6A;
-       default:
-               WARN_ON(1);
-               return ath9k_default_world_regdomain();
-       }
-}
-
-/* Frequency is one where radar detection is required */
-static bool ath9k_is_radar_freq(u16 center_freq)
-{
-       return (center_freq >= 5260 && center_freq <= 5700);
-}
-
-/*
- * N.B: These exception rules do not apply radar freqs.
- *
- * - We enable adhoc (or beaconing) if allowed by 11d
- * - We enable active scan if the channel is allowed by 11d
- * - If no country IE has been processed and a we determine we have
- *   received a beacon on a channel we can enable active scan and
- *   adhoc (or beaconing).
- */
-static void ath9k_reg_apply_beaconing_flags(
-       struct wiphy *wiphy,
-       enum nl80211_reg_initiator initiator)
-{
-       enum ieee80211_band band;
-       struct ieee80211_supported_band *sband;
-       const struct ieee80211_reg_rule *reg_rule;
-       struct ieee80211_channel *ch;
-       unsigned int i;
-       u32 bandwidth = 0;
-       int r;
-
-       for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
-
-               if (!wiphy->bands[band])
-                       continue;
-
-               sband = wiphy->bands[band];
-
-               for (i = 0; i < sband->n_channels; i++) {
-
-                       ch = &sband->channels[i];
-
-                       if (ath9k_is_radar_freq(ch->center_freq) ||
-                           (ch->flags & IEEE80211_CHAN_RADAR))
-                               continue;
-
-                       if (initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE) {
-                               r = freq_reg_info(wiphy, ch->center_freq,
-                                       &bandwidth, &reg_rule);
-                               if (r)
-                                       continue;
-                               /*
-                                * If 11d had a rule for this channel ensure
-                                * we enable adhoc/beaconing if it allows us to
-                                * use it. Note that we would have disabled it
-                                * by applying our static world regdomain by
-                                * default during init, prior to calling our
-                                * regulatory_hint().
-                                */
-                               if (!(reg_rule->flags &
-                                   NL80211_RRF_NO_IBSS))
-                                       ch->flags &=
-                                         ~IEEE80211_CHAN_NO_IBSS;
-                               if (!(reg_rule->flags &
-                                   NL80211_RRF_PASSIVE_SCAN))
-                                       ch->flags &=
-                                         ~IEEE80211_CHAN_PASSIVE_SCAN;
-                       } else {
-                               if (ch->beacon_found)
-                                       ch->flags &= ~(IEEE80211_CHAN_NO_IBSS |
-                                         IEEE80211_CHAN_PASSIVE_SCAN);
-                       }
-               }
-       }
-
-}
-
-/* Allows active scan scan on Ch 12 and 13 */
-static void ath9k_reg_apply_active_scan_flags(
-       struct wiphy *wiphy,
-       enum nl80211_reg_initiator initiator)
-{
-       struct ieee80211_supported_band *sband;
-       struct ieee80211_channel *ch;
-       const struct ieee80211_reg_rule *reg_rule;
-       u32 bandwidth = 0;
-       int r;
-
-       sband = wiphy->bands[IEEE80211_BAND_2GHZ];
-
-       /*
-        * If no country IE has been received always enable active scan
-        * on these channels. This is only done for specific regulatory SKUs
-        */
-       if (initiator != NL80211_REGDOM_SET_BY_COUNTRY_IE) {
-               ch = &sband->channels[11]; /* CH 12 */
-               if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN)
-                       ch->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN;
-               ch = &sband->channels[12]; /* CH 13 */
-               if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN)
-                       ch->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN;
-               return;
-       }
-
-       /*
-        * If a country IE has been recieved check its rule for this
-        * channel first before enabling active scan. The passive scan
-        * would have been enforced by the initial processing of our
-        * custom regulatory domain.
-        */
-
-       ch = &sband->channels[11]; /* CH 12 */
-       r = freq_reg_info(wiphy, ch->center_freq, &bandwidth, &reg_rule);
-       if (!r) {
-               if (!(reg_rule->flags & NL80211_RRF_PASSIVE_SCAN))
-                       if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN)
-                               ch->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN;
-       }
-
-       ch = &sband->channels[12]; /* CH 13 */
-       r = freq_reg_info(wiphy, ch->center_freq, &bandwidth, &reg_rule);
-       if (!r) {
-               if (!(reg_rule->flags & NL80211_RRF_PASSIVE_SCAN))
-                       if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN)
-                               ch->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN;
-       }
-}
-
-/* Always apply Radar/DFS rules on freq range 5260 MHz - 5700 MHz */
-void ath9k_reg_apply_radar_flags(struct wiphy *wiphy)
-{
-       struct ieee80211_supported_band *sband;
-       struct ieee80211_channel *ch;
-       unsigned int i;
-
-       if (!wiphy->bands[IEEE80211_BAND_5GHZ])
-               return;
-
-       sband = wiphy->bands[IEEE80211_BAND_5GHZ];
-
-       for (i = 0; i < sband->n_channels; i++) {
-               ch = &sband->channels[i];
-               if (!ath9k_is_radar_freq(ch->center_freq))
-                       continue;
-               /* We always enable radar detection/DFS on this
-                * frequency range. Additionally we also apply on
-                * this frequency range:
-                * - If STA mode does not yet have DFS supports disable
-                *   active scanning
-                * - If adhoc mode does not support DFS yet then
-                *   disable adhoc in the frequency.
-                * - If AP mode does not yet support radar detection/DFS
-                *   do not allow AP mode
-                */
-               if (!(ch->flags & IEEE80211_CHAN_DISABLED))
-                       ch->flags |= IEEE80211_CHAN_RADAR |
-                                    IEEE80211_CHAN_NO_IBSS |
-                                    IEEE80211_CHAN_PASSIVE_SCAN;
-       }
-}
-
-void ath9k_reg_apply_world_flags(struct wiphy *wiphy,
-                                enum nl80211_reg_initiator initiator,
-                                struct ath9k_regulatory *reg)
-{
-       switch (reg->regpair->regDmnEnum) {
-       case 0x60:
-       case 0x63:
-       case 0x66:
-       case 0x67:
-               ath9k_reg_apply_beaconing_flags(wiphy, initiator);
-               break;
-       case 0x68:
-               ath9k_reg_apply_beaconing_flags(wiphy, initiator);
-               ath9k_reg_apply_active_scan_flags(wiphy, initiator);
-               break;
-       }
-       return;
-}
-
-static int ath9k_reg_notifier_apply(struct wiphy *wiphy,
-       struct regulatory_request *request, struct ath9k_regulatory *reg)
-{
-       /* We always apply this */
-       ath9k_reg_apply_radar_flags(wiphy);
-
-       switch (request->initiator) {
-       case NL80211_REGDOM_SET_BY_DRIVER:
-       case NL80211_REGDOM_SET_BY_CORE:
-       case NL80211_REGDOM_SET_BY_USER:
-               break;
-       case NL80211_REGDOM_SET_BY_COUNTRY_IE:
-               if (ath9k_is_world_regd(reg))
-                       ath9k_reg_apply_world_flags(wiphy, request->initiator,
-                                                   reg);
-               break;
-       }
-
-       return 0;
-}
-
-int ath9k_reg_notifier(struct wiphy *wiphy, struct regulatory_request *request)
-{
-       struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
-       struct ath_wiphy *aphy = hw->priv;
-       struct ath_softc *sc = aphy->sc;
-       struct ath9k_regulatory *reg = &sc->sc_ah->regulatory;
-
-       return ath9k_reg_notifier_apply(wiphy, request, reg);
-}
-
-bool ath9k_regd_is_eeprom_valid(struct ath9k_regulatory *reg)
-{
-        u16 rd = ath9k_regd_get_eepromRD(reg);
-       int i;
-
-       if (rd & COUNTRY_ERD_FLAG) {
-               /* EEPROM value is a country code */
-               u16 cc = rd & ~COUNTRY_ERD_FLAG;
-               for (i = 0; i < ARRAY_SIZE(allCountries); i++)
-                       if (allCountries[i].countryCode == cc)
-                               return true;
-       } else {
-               /* EEPROM value is a regpair value */
-               for (i = 0; i < ARRAY_SIZE(regDomainPairs); i++)
-                       if (regDomainPairs[i].regDmnEnum == rd)
-                               return true;
-       }
-       printk(KERN_DEBUG
-                "ath9k: invalid regulatory domain/country code 0x%x\n", rd);
-       return false;
-}
-
-/* EEPROM country code to regpair mapping */
-static struct country_code_to_enum_rd*
-ath9k_regd_find_country(u16 countryCode)
-{
-       int i;
-
-       for (i = 0; i < ARRAY_SIZE(allCountries); i++) {
-               if (allCountries[i].countryCode == countryCode)
-                       return &allCountries[i];
-       }
-       return NULL;
-}
-
-/* EEPROM rd code to regpair mapping */
-static struct country_code_to_enum_rd*
-ath9k_regd_find_country_by_rd(int regdmn)
-{
-       int i;
-
-       for (i = 0; i < ARRAY_SIZE(allCountries); i++) {
-               if (allCountries[i].regDmnEnum == regdmn)
-                       return &allCountries[i];
-       }
-       return NULL;
-}
-
-/* Returns the map of the EEPROM set RD to a country code */
-static u16 ath9k_regd_get_default_country(u16 rd)
-{
-       if (rd & COUNTRY_ERD_FLAG) {
-               struct country_code_to_enum_rd *country = NULL;
-               u16 cc = rd & ~COUNTRY_ERD_FLAG;
-
-               country = ath9k_regd_find_country(cc);
-               if (country != NULL)
-                       return cc;
-       }
-
-       return CTRY_DEFAULT;
-}
-
-static struct reg_dmn_pair_mapping*
-ath9k_get_regpair(int regdmn)
-{
-       int i;
-
-       if (regdmn == NO_ENUMRD)
-               return NULL;
-       for (i = 0; i < ARRAY_SIZE(regDomainPairs); i++) {
-               if (regDomainPairs[i].regDmnEnum == regdmn)
-                       return &regDomainPairs[i];
-       }
-       return NULL;
-}
-
-int ath9k_regd_init(struct ath9k_regulatory *reg)
-{
-       struct country_code_to_enum_rd *country = NULL;
-       u16 regdmn;
-
-       if (!ath9k_regd_is_eeprom_valid(reg)) {
-               printk(KERN_DEBUG "ath9k: Invalid EEPROM contents\n");
-               return -EINVAL;
-       }
-
-       regdmn = ath9k_regd_get_eepromRD(reg);
-       reg->country_code = ath9k_regd_get_default_country(regdmn);
-
-       if (reg->country_code == CTRY_DEFAULT &&
-           regdmn == CTRY_DEFAULT)
-               reg->country_code = CTRY_UNITED_STATES;
-
-       if (reg->country_code == CTRY_DEFAULT) {
-               country = NULL;
-       } else {
-               country = ath9k_regd_find_country(reg->country_code);
-               if (country == NULL) {
-                       printk(KERN_DEBUG
-                               "ath9k: Country is NULL!!!!, cc= %d\n",
-                               reg->country_code);
-                       return -EINVAL;
-               } else
-                       regdmn = country->regDmnEnum;
-       }
-
-       reg->regpair = ath9k_get_regpair(regdmn);
-
-       if (!reg->regpair) {
-               printk(KERN_DEBUG "ath9k: "
-                       "No regulatory domain pair found, cannot continue\n");
-               return -EINVAL;
-       }
-
-       if (!country)
-               country = ath9k_regd_find_country_by_rd(regdmn);
-
-       if (country) {
-               reg->alpha2[0] = country->isoName[0];
-               reg->alpha2[1] = country->isoName[1];
-       } else {
-               reg->alpha2[0] = '0';
-               reg->alpha2[1] = '0';
-       }
-
-       printk(KERN_DEBUG "ath9k: Country alpha2 being used: %c%c\n",
-               reg->alpha2[0], reg->alpha2[1]);
-       printk(KERN_DEBUG "ath9k: Regpair detected: 0x%0x\n",
-               reg->regpair->regDmnEnum);
-
-       return 0;
-}
-
-static
-u32 ath9k_regd_get_band_ctl(struct ath9k_regulatory *reg,
-       enum ieee80211_band band)
-{
-       if (!reg->regpair ||
-           (reg->country_code == CTRY_DEFAULT &&
-            is_wwr_sku(ath9k_regd_get_eepromRD(reg)))) {
-               return SD_NO_CTL;
-       }
-
-       switch (band) {
-       case IEEE80211_BAND_2GHZ:
-               return reg->regpair->reg_2ghz_ctl;
-       case IEEE80211_BAND_5GHZ:
-               return reg->regpair->reg_5ghz_ctl;
-       default:
-               return NO_CTL;
-       }
-
-       return NO_CTL;
-}
-
-u32 ath9k_regd_get_ctl(struct ath9k_regulatory *reg, struct ath9k_channel *chan)
-{
-       u32 ctl = ath9k_regd_get_band_ctl(reg, chan->chan->band);
-
-       if (IS_CHAN_B(chan))
-               ctl |= CTL_11B;
-       else if (IS_CHAN_G(chan))
-               ctl |= CTL_11G;
-       else
-               ctl |= CTL_11A;
-
-       return ctl;
-}
diff --git a/drivers/net/wireless/ath9k/regd.h b/drivers/net/wireless/ath9k/regd.h
deleted file mode 100644 (file)
index 61fa42e..0000000
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Copyright (c) 2008-2009 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef REGD_H
-#define REGD_H
-
-#include <linux/nl80211.h>
-
-#define COUNTRY_ERD_FLAG        0x8000
-#define WORLDWIDE_ROAMING_FLAG  0x4000
-
-#define MULTI_DOMAIN_MASK 0xFF00
-
-#define WORLD_SKU_MASK          0x00F0
-#define WORLD_SKU_PREFIX        0x0060
-
-#define CHANNEL_HALF_BW         10
-#define CHANNEL_QUARTER_BW      5
-
-struct reg_dmn_pair_mapping {
-       u16 regDmnEnum;
-       u16 reg_5ghz_ctl;
-       u16 reg_2ghz_ctl;
-};
-
-struct country_code_to_enum_rd {
-       u16 countryCode;
-       u16 regDmnEnum;
-       const char *isoName;
-};
-
-struct ath9k_regulatory {
-       char alpha2[2];
-       u16 country_code;
-       u16 max_power_level;
-       u32 tp_scale;
-       u16 current_rd;
-       u16 current_rd_ext;
-       int16_t power_limit;
-       struct reg_dmn_pair_mapping *regpair;
-};
-
-enum CountryCode {
-       CTRY_ALBANIA = 8,
-       CTRY_ALGERIA = 12,
-       CTRY_ARGENTINA = 32,
-       CTRY_ARMENIA = 51,
-       CTRY_AUSTRALIA = 36,
-       CTRY_AUSTRIA = 40,
-       CTRY_AZERBAIJAN = 31,
-       CTRY_BAHRAIN = 48,
-       CTRY_BELARUS = 112,
-       CTRY_BELGIUM = 56,
-       CTRY_BELIZE = 84,
-       CTRY_BOLIVIA = 68,
-       CTRY_BOSNIA_HERZ = 70,
-       CTRY_BRAZIL = 76,
-       CTRY_BRUNEI_DARUSSALAM = 96,
-       CTRY_BULGARIA = 100,
-       CTRY_CANADA = 124,
-       CTRY_CHILE = 152,
-       CTRY_CHINA = 156,
-       CTRY_COLOMBIA = 170,
-       CTRY_COSTA_RICA = 188,
-       CTRY_CROATIA = 191,
-       CTRY_CYPRUS = 196,
-       CTRY_CZECH = 203,
-       CTRY_DENMARK = 208,
-       CTRY_DOMINICAN_REPUBLIC = 214,
-       CTRY_ECUADOR = 218,
-       CTRY_EGYPT = 818,
-       CTRY_EL_SALVADOR = 222,
-       CTRY_ESTONIA = 233,
-       CTRY_FAEROE_ISLANDS = 234,
-       CTRY_FINLAND = 246,
-       CTRY_FRANCE = 250,
-       CTRY_GEORGIA = 268,
-       CTRY_GERMANY = 276,
-       CTRY_GREECE = 300,
-       CTRY_GUATEMALA = 320,
-       CTRY_HONDURAS = 340,
-       CTRY_HONG_KONG = 344,
-       CTRY_HUNGARY = 348,
-       CTRY_ICELAND = 352,
-       CTRY_INDIA = 356,
-       CTRY_INDONESIA = 360,
-       CTRY_IRAN = 364,
-       CTRY_IRAQ = 368,
-       CTRY_IRELAND = 372,
-       CTRY_ISRAEL = 376,
-       CTRY_ITALY = 380,
-       CTRY_JAMAICA = 388,
-       CTRY_JAPAN = 392,
-       CTRY_JORDAN = 400,
-       CTRY_KAZAKHSTAN = 398,
-       CTRY_KENYA = 404,
-       CTRY_KOREA_NORTH = 408,
-       CTRY_KOREA_ROC = 410,
-       CTRY_KOREA_ROC2 = 411,
-       CTRY_KOREA_ROC3 = 412,
-       CTRY_KUWAIT = 414,
-       CTRY_LATVIA = 428,
-       CTRY_LEBANON = 422,
-       CTRY_LIBYA = 434,
-       CTRY_LIECHTENSTEIN = 438,
-       CTRY_LITHUANIA = 440,
-       CTRY_LUXEMBOURG = 442,
-       CTRY_MACAU = 446,
-       CTRY_MACEDONIA = 807,
-       CTRY_MALAYSIA = 458,
-       CTRY_MALTA = 470,
-       CTRY_MEXICO = 484,
-       CTRY_MONACO = 492,
-       CTRY_MOROCCO = 504,
-       CTRY_NEPAL = 524,
-       CTRY_NETHERLANDS = 528,
-       CTRY_NETHERLANDS_ANTILLES = 530,
-       CTRY_NEW_ZEALAND = 554,
-       CTRY_NICARAGUA = 558,
-       CTRY_NORWAY = 578,
-       CTRY_OMAN = 512,
-       CTRY_PAKISTAN = 586,
-       CTRY_PANAMA = 591,
-       CTRY_PAPUA_NEW_GUINEA = 598,
-       CTRY_PARAGUAY = 600,
-       CTRY_PERU = 604,
-       CTRY_PHILIPPINES = 608,
-       CTRY_POLAND = 616,
-       CTRY_PORTUGAL = 620,
-       CTRY_PUERTO_RICO = 630,
-       CTRY_QATAR = 634,
-       CTRY_ROMANIA = 642,
-       CTRY_RUSSIA = 643,
-       CTRY_SAUDI_ARABIA = 682,
-       CTRY_SERBIA_MONTENEGRO = 891,
-       CTRY_SINGAPORE = 702,
-       CTRY_SLOVAKIA = 703,
-       CTRY_SLOVENIA = 705,
-       CTRY_SOUTH_AFRICA = 710,
-       CTRY_SPAIN = 724,
-       CTRY_SRI_LANKA = 144,
-       CTRY_SWEDEN = 752,
-       CTRY_SWITZERLAND = 756,
-       CTRY_SYRIA = 760,
-       CTRY_TAIWAN = 158,
-       CTRY_THAILAND = 764,
-       CTRY_TRINIDAD_Y_TOBAGO = 780,
-       CTRY_TUNISIA = 788,
-       CTRY_TURKEY = 792,
-       CTRY_UAE = 784,
-       CTRY_UKRAINE = 804,
-       CTRY_UNITED_KINGDOM = 826,
-       CTRY_UNITED_STATES = 840,
-       CTRY_UNITED_STATES_FCC49 = 842,
-       CTRY_URUGUAY = 858,
-       CTRY_UZBEKISTAN = 860,
-       CTRY_VENEZUELA = 862,
-       CTRY_VIET_NAM = 704,
-       CTRY_YEMEN = 887,
-       CTRY_ZIMBABWE = 716,
-       CTRY_JAPAN1 = 393,
-       CTRY_JAPAN2 = 394,
-       CTRY_JAPAN3 = 395,
-       CTRY_JAPAN4 = 396,
-       CTRY_JAPAN5 = 397,
-       CTRY_JAPAN6 = 4006,
-       CTRY_JAPAN7 = 4007,
-       CTRY_JAPAN8 = 4008,
-       CTRY_JAPAN9 = 4009,
-       CTRY_JAPAN10 = 4010,
-       CTRY_JAPAN11 = 4011,
-       CTRY_JAPAN12 = 4012,
-       CTRY_JAPAN13 = 4013,
-       CTRY_JAPAN14 = 4014,
-       CTRY_JAPAN15 = 4015,
-       CTRY_JAPAN16 = 4016,
-       CTRY_JAPAN17 = 4017,
-       CTRY_JAPAN18 = 4018,
-       CTRY_JAPAN19 = 4019,
-       CTRY_JAPAN20 = 4020,
-       CTRY_JAPAN21 = 4021,
-       CTRY_JAPAN22 = 4022,
-       CTRY_JAPAN23 = 4023,
-       CTRY_JAPAN24 = 4024,
-       CTRY_JAPAN25 = 4025,
-       CTRY_JAPAN26 = 4026,
-       CTRY_JAPAN27 = 4027,
-       CTRY_JAPAN28 = 4028,
-       CTRY_JAPAN29 = 4029,
-       CTRY_JAPAN30 = 4030,
-       CTRY_JAPAN31 = 4031,
-       CTRY_JAPAN32 = 4032,
-       CTRY_JAPAN33 = 4033,
-       CTRY_JAPAN34 = 4034,
-       CTRY_JAPAN35 = 4035,
-       CTRY_JAPAN36 = 4036,
-       CTRY_JAPAN37 = 4037,
-       CTRY_JAPAN38 = 4038,
-       CTRY_JAPAN39 = 4039,
-       CTRY_JAPAN40 = 4040,
-       CTRY_JAPAN41 = 4041,
-       CTRY_JAPAN42 = 4042,
-       CTRY_JAPAN43 = 4043,
-       CTRY_JAPAN44 = 4044,
-       CTRY_JAPAN45 = 4045,
-       CTRY_JAPAN46 = 4046,
-       CTRY_JAPAN47 = 4047,
-       CTRY_JAPAN48 = 4048,
-       CTRY_JAPAN49 = 4049,
-       CTRY_JAPAN50 = 4050,
-       CTRY_JAPAN51 = 4051,
-       CTRY_JAPAN52 = 4052,
-       CTRY_JAPAN53 = 4053,
-       CTRY_JAPAN54 = 4054,
-       CTRY_JAPAN55 = 4055,
-       CTRY_JAPAN56 = 4056,
-       CTRY_JAPAN57 = 4057,
-       CTRY_JAPAN58 = 4058,
-       CTRY_JAPAN59 = 4059,
-       CTRY_AUSTRALIA2 = 5000,
-       CTRY_CANADA2 = 5001,
-       CTRY_BELGIUM2 = 5002
-};
-
-bool ath9k_is_world_regd(struct ath9k_regulatory *reg);
-const struct ieee80211_regdomain *ath9k_world_regdomain(
-                                struct ath9k_regulatory *reg);
-const struct ieee80211_regdomain *ath9k_default_world_regdomain(void);
-void ath9k_reg_apply_world_flags(struct wiphy *wiphy,
-                                enum nl80211_reg_initiator,
-                                struct ath9k_regulatory *reg);
-void ath9k_reg_apply_radar_flags(struct wiphy *wiphy);
-int ath9k_regd_init(struct ath9k_regulatory *reg);
-bool ath9k_regd_is_eeprom_valid(struct ath9k_regulatory *reg);
-u32 ath9k_regd_get_ctl(struct ath9k_regulatory *reg,
-                      struct ath9k_channel *chan);
-int ath9k_reg_notifier(struct wiphy *wiphy, struct regulatory_request *request);
-
-#endif
diff --git a/drivers/net/wireless/ath9k/regd_common.h b/drivers/net/wireless/ath9k/regd_common.h
deleted file mode 100644 (file)
index 4d0e298..0000000
+++ /dev/null
@@ -1,473 +0,0 @@
-/*
- * Copyright (c) 2008-2009 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef REGD_COMMON_H
-#define REGD_COMMON_H
-
-enum EnumRd {
-       NO_ENUMRD = 0x00,
-       NULL1_WORLD = 0x03,
-       NULL1_ETSIB = 0x07,
-       NULL1_ETSIC = 0x08,
-       FCC1_FCCA = 0x10,
-       FCC1_WORLD = 0x11,
-       FCC4_FCCA = 0x12,
-       FCC5_FCCA = 0x13,
-       FCC6_FCCA = 0x14,
-
-       FCC2_FCCA = 0x20,
-       FCC2_WORLD = 0x21,
-       FCC2_ETSIC = 0x22,
-       FCC6_WORLD = 0x23,
-       FRANCE_RES = 0x31,
-       FCC3_FCCA = 0x3A,
-       FCC3_WORLD = 0x3B,
-
-       ETSI1_WORLD = 0x37,
-       ETSI3_ETSIA = 0x32,
-       ETSI2_WORLD = 0x35,
-       ETSI3_WORLD = 0x36,
-       ETSI4_WORLD = 0x30,
-       ETSI4_ETSIC = 0x38,
-       ETSI5_WORLD = 0x39,
-       ETSI6_WORLD = 0x34,
-       ETSI_RESERVED = 0x33,
-
-       MKK1_MKKA = 0x40,
-       MKK1_MKKB = 0x41,
-       APL4_WORLD = 0x42,
-       MKK2_MKKA = 0x43,
-       APL_RESERVED = 0x44,
-       APL2_WORLD = 0x45,
-       APL2_APLC = 0x46,
-       APL3_WORLD = 0x47,
-       MKK1_FCCA = 0x48,
-       APL2_APLD = 0x49,
-       MKK1_MKKA1 = 0x4A,
-       MKK1_MKKA2 = 0x4B,
-       MKK1_MKKC = 0x4C,
-
-       APL3_FCCA = 0x50,
-       APL1_WORLD = 0x52,
-       APL1_FCCA = 0x53,
-       APL1_APLA = 0x54,
-       APL1_ETSIC = 0x55,
-       APL2_ETSIC = 0x56,
-       APL5_WORLD = 0x58,
-       APL6_WORLD = 0x5B,
-       APL7_FCCA = 0x5C,
-       APL8_WORLD = 0x5D,
-       APL9_WORLD = 0x5E,
-
-       WOR0_WORLD = 0x60,
-       WOR1_WORLD = 0x61,
-       WOR2_WORLD = 0x62,
-       WOR3_WORLD = 0x63,
-       WOR4_WORLD = 0x64,
-       WOR5_ETSIC = 0x65,
-
-       WOR01_WORLD = 0x66,
-       WOR02_WORLD = 0x67,
-       EU1_WORLD = 0x68,
-
-       WOR9_WORLD = 0x69,
-       WORA_WORLD = 0x6A,
-       WORB_WORLD = 0x6B,
-
-       MKK3_MKKB = 0x80,
-       MKK3_MKKA2 = 0x81,
-       MKK3_MKKC = 0x82,
-
-       MKK4_MKKB = 0x83,
-       MKK4_MKKA2 = 0x84,
-       MKK4_MKKC = 0x85,
-
-       MKK5_MKKB = 0x86,
-       MKK5_MKKA2 = 0x87,
-       MKK5_MKKC = 0x88,
-
-       MKK6_MKKB = 0x89,
-       MKK6_MKKA2 = 0x8A,
-       MKK6_MKKC = 0x8B,
-
-       MKK7_MKKB = 0x8C,
-       MKK7_MKKA2 = 0x8D,
-       MKK7_MKKC = 0x8E,
-
-       MKK8_MKKB = 0x8F,
-       MKK8_MKKA2 = 0x90,
-       MKK8_MKKC = 0x91,
-
-       MKK14_MKKA1 = 0x92,
-       MKK15_MKKA1 = 0x93,
-
-       MKK10_FCCA = 0xD0,
-       MKK10_MKKA1 = 0xD1,
-       MKK10_MKKC = 0xD2,
-       MKK10_MKKA2 = 0xD3,
-
-       MKK11_MKKA = 0xD4,
-       MKK11_FCCA = 0xD5,
-       MKK11_MKKA1 = 0xD6,
-       MKK11_MKKC = 0xD7,
-       MKK11_MKKA2 = 0xD8,
-
-       MKK12_MKKA = 0xD9,
-       MKK12_FCCA = 0xDA,
-       MKK12_MKKA1 = 0xDB,
-       MKK12_MKKC = 0xDC,
-       MKK12_MKKA2 = 0xDD,
-
-       MKK13_MKKB = 0xDE,
-
-       MKK3_MKKA = 0xF0,
-       MKK3_MKKA1 = 0xF1,
-       MKK3_FCCA = 0xF2,
-       MKK4_MKKA = 0xF3,
-       MKK4_MKKA1 = 0xF4,
-       MKK4_FCCA = 0xF5,
-       MKK9_MKKA = 0xF6,
-       MKK10_MKKA = 0xF7,
-       MKK6_MKKA1 = 0xF8,
-       MKK6_FCCA = 0xF9,
-       MKK7_MKKA1 = 0xFA,
-       MKK7_FCCA = 0xFB,
-       MKK9_FCCA = 0xFC,
-       MKK9_MKKA1 = 0xFD,
-       MKK9_MKKC = 0xFE,
-       MKK9_MKKA2 = 0xFF,
-
-       WORLD = 0x0199,
-       DEBUG_REG_DMN = 0x01ff,
-};
-
-enum ctl_group {
-       CTL_FCC = 0x10,
-       CTL_MKK = 0x40,
-       CTL_ETSI = 0x30,
-};
-
-/* Regpair to CTL band mapping */
-static struct reg_dmn_pair_mapping regDomainPairs[] = {
-       /* regpair, 5 GHz CTL, 2 GHz CTL */
-       {NO_ENUMRD, DEBUG_REG_DMN, DEBUG_REG_DMN},
-       {NULL1_WORLD, NO_CTL, CTL_ETSI},
-       {NULL1_ETSIB, NO_CTL, CTL_ETSI},
-       {NULL1_ETSIC, NO_CTL, CTL_ETSI},
-
-       {FCC2_FCCA, CTL_FCC, CTL_FCC},
-       {FCC2_WORLD, CTL_FCC, CTL_ETSI},
-       {FCC2_ETSIC, CTL_FCC, CTL_ETSI},
-       {FCC3_FCCA, CTL_FCC, CTL_FCC},
-       {FCC3_WORLD, CTL_FCC, CTL_ETSI},
-       {FCC4_FCCA, CTL_FCC, CTL_FCC},
-       {FCC5_FCCA, CTL_FCC, CTL_FCC},
-       {FCC6_FCCA, CTL_FCC, CTL_FCC},
-       {FCC6_WORLD, CTL_FCC, CTL_ETSI},
-
-       {ETSI1_WORLD, CTL_ETSI, CTL_ETSI},
-       {ETSI2_WORLD, CTL_ETSI, CTL_ETSI},
-       {ETSI3_WORLD, CTL_ETSI, CTL_ETSI},
-       {ETSI4_WORLD, CTL_ETSI, CTL_ETSI},
-       {ETSI5_WORLD, CTL_ETSI, CTL_ETSI},
-       {ETSI6_WORLD, CTL_ETSI, CTL_ETSI},
-
-       /* XXX: For ETSI3_ETSIA, Was NO_CTL meant for the 2 GHz band ? */
-       {ETSI3_ETSIA, CTL_ETSI, CTL_ETSI},
-       {FRANCE_RES, CTL_ETSI, CTL_ETSI},
-
-       {FCC1_WORLD, CTL_FCC, CTL_ETSI},
-       {FCC1_FCCA, CTL_FCC, CTL_FCC},
-       {APL1_WORLD, CTL_FCC, CTL_ETSI},
-       {APL2_WORLD, CTL_FCC, CTL_ETSI},
-       {APL3_WORLD, CTL_FCC, CTL_ETSI},
-       {APL4_WORLD, CTL_FCC, CTL_ETSI},
-       {APL5_WORLD, CTL_FCC, CTL_ETSI},
-       {APL6_WORLD, CTL_ETSI, CTL_ETSI},
-       {APL8_WORLD, CTL_ETSI, CTL_ETSI},
-       {APL9_WORLD, CTL_ETSI, CTL_ETSI},
-
-       {APL3_FCCA, CTL_FCC, CTL_FCC},
-       {APL1_ETSIC, CTL_FCC, CTL_ETSI},
-       {APL2_ETSIC, CTL_FCC, CTL_ETSI},
-       {APL2_APLD, CTL_FCC, NO_CTL},
-
-       {MKK1_MKKA, CTL_MKK, CTL_MKK},
-       {MKK1_MKKB, CTL_MKK, CTL_MKK},
-       {MKK1_FCCA, CTL_MKK, CTL_FCC},
-       {MKK1_MKKA1, CTL_MKK, CTL_MKK},
-       {MKK1_MKKA2, CTL_MKK, CTL_MKK},
-       {MKK1_MKKC, CTL_MKK, CTL_MKK},
-
-       {MKK2_MKKA, CTL_MKK, CTL_MKK},
-       {MKK3_MKKA, CTL_MKK, CTL_MKK},
-       {MKK3_MKKB, CTL_MKK, CTL_MKK},
-       {MKK3_MKKA1, CTL_MKK, CTL_MKK},
-       {MKK3_MKKA2, CTL_MKK, CTL_MKK},
-       {MKK3_MKKC, CTL_MKK, CTL_MKK},
-       {MKK3_FCCA, CTL_MKK, CTL_FCC},
-
-       {MKK4_MKKA, CTL_MKK, CTL_MKK},
-       {MKK4_MKKB, CTL_MKK, CTL_MKK},
-       {MKK4_MKKA1, CTL_MKK, CTL_MKK},
-       {MKK4_MKKA2, CTL_MKK, CTL_MKK},
-       {MKK4_MKKC, CTL_MKK, CTL_MKK},
-       {MKK4_FCCA, CTL_MKK, CTL_FCC},
-
-       {MKK5_MKKB, CTL_MKK, CTL_MKK},
-       {MKK5_MKKA2, CTL_MKK, CTL_MKK},
-       {MKK5_MKKC, CTL_MKK, CTL_MKK},
-
-       {MKK6_MKKB, CTL_MKK, CTL_MKK},
-       {MKK6_MKKA1, CTL_MKK, CTL_MKK},
-       {MKK6_MKKA2, CTL_MKK, CTL_MKK},
-       {MKK6_MKKC, CTL_MKK, CTL_MKK},
-       {MKK6_FCCA, CTL_MKK, CTL_FCC},
-
-       {MKK7_MKKB, CTL_MKK, CTL_MKK},
-       {MKK7_MKKA1, CTL_MKK, CTL_MKK},
-       {MKK7_MKKA2, CTL_MKK, CTL_MKK},
-       {MKK7_MKKC, CTL_MKK, CTL_MKK},
-       {MKK7_FCCA, CTL_MKK, CTL_FCC},
-
-       {MKK8_MKKB, CTL_MKK, CTL_MKK},
-       {MKK8_MKKA2, CTL_MKK, CTL_MKK},
-       {MKK8_MKKC, CTL_MKK, CTL_MKK},
-
-       {MKK9_MKKA, CTL_MKK, CTL_MKK},
-       {MKK9_FCCA, CTL_MKK, CTL_FCC},
-       {MKK9_MKKA1, CTL_MKK, CTL_MKK},
-       {MKK9_MKKA2, CTL_MKK, CTL_MKK},
-       {MKK9_MKKC, CTL_MKK, CTL_MKK},
-
-       {MKK10_MKKA, CTL_MKK, CTL_MKK},
-       {MKK10_FCCA, CTL_MKK, CTL_FCC},
-       {MKK10_MKKA1, CTL_MKK, CTL_MKK},
-       {MKK10_MKKA2, CTL_MKK, CTL_MKK},
-       {MKK10_MKKC, CTL_MKK, CTL_MKK},
-
-       {MKK11_MKKA, CTL_MKK, CTL_MKK},
-       {MKK11_FCCA, CTL_MKK, CTL_FCC},
-       {MKK11_MKKA1, CTL_MKK, CTL_MKK},
-       {MKK11_MKKA2, CTL_MKK, CTL_MKK},
-       {MKK11_MKKC, CTL_MKK, CTL_MKK},
-
-       {MKK12_MKKA, CTL_MKK, CTL_MKK},
-       {MKK12_FCCA, CTL_MKK, CTL_FCC},
-       {MKK12_MKKA1, CTL_MKK, CTL_MKK},
-       {MKK12_MKKA2, CTL_MKK, CTL_MKK},
-       {MKK12_MKKC, CTL_MKK, CTL_MKK},
-
-       {MKK13_MKKB, CTL_MKK, CTL_MKK},
-       {MKK14_MKKA1, CTL_MKK, CTL_MKK},
-       {MKK15_MKKA1, CTL_MKK, CTL_MKK},
-
-       {WOR0_WORLD, NO_CTL, NO_CTL},
-       {WOR1_WORLD, NO_CTL, NO_CTL},
-       {WOR2_WORLD, NO_CTL, NO_CTL},
-       {WOR3_WORLD, NO_CTL, NO_CTL},
-       {WOR4_WORLD, NO_CTL, NO_CTL},
-       {WOR5_ETSIC, NO_CTL, NO_CTL},
-       {WOR01_WORLD, NO_CTL, NO_CTL},
-       {WOR02_WORLD, NO_CTL, NO_CTL},
-       {EU1_WORLD, NO_CTL, NO_CTL},
-       {WOR9_WORLD, NO_CTL, NO_CTL},
-       {WORA_WORLD, NO_CTL, NO_CTL},
-       {WORB_WORLD, NO_CTL, NO_CTL},
-};
-
-static struct country_code_to_enum_rd allCountries[] = {
-       {CTRY_DEBUG, NO_ENUMRD, "DB"},
-       {CTRY_DEFAULT, FCC1_FCCA, "CO"},
-       {CTRY_ALBANIA, NULL1_WORLD, "AL"},
-       {CTRY_ALGERIA, NULL1_WORLD, "DZ"},
-       {CTRY_ARGENTINA, APL3_WORLD, "AR"},
-       {CTRY_ARMENIA, ETSI4_WORLD, "AM"},
-       {CTRY_AUSTRALIA, FCC2_WORLD, "AU"},
-       {CTRY_AUSTRALIA2, FCC6_WORLD, "AU"},
-       {CTRY_AUSTRIA, ETSI1_WORLD, "AT"},
-       {CTRY_AZERBAIJAN, ETSI4_WORLD, "AZ"},
-       {CTRY_BAHRAIN, APL6_WORLD, "BH"},
-       {CTRY_BELARUS, ETSI1_WORLD, "BY"},
-       {CTRY_BELGIUM, ETSI1_WORLD, "BE"},
-       {CTRY_BELGIUM2, ETSI4_WORLD, "BL"},
-       {CTRY_BELIZE, APL1_ETSIC, "BZ"},
-       {CTRY_BOLIVIA, APL1_ETSIC, "BO"},
-       {CTRY_BOSNIA_HERZ, ETSI1_WORLD, "BA"},
-       {CTRY_BRAZIL, FCC3_WORLD, "BR"},
-       {CTRY_BRUNEI_DARUSSALAM, APL1_WORLD, "BN"},
-       {CTRY_BULGARIA, ETSI6_WORLD, "BG"},
-       {CTRY_CANADA, FCC2_FCCA, "CA"},
-       {CTRY_CANADA2, FCC6_FCCA, "CA"},
-       {CTRY_CHILE, APL6_WORLD, "CL"},
-       {CTRY_CHINA, APL1_WORLD, "CN"},
-       {CTRY_COLOMBIA, FCC1_FCCA, "CO"},
-       {CTRY_COSTA_RICA, FCC1_WORLD, "CR"},
-       {CTRY_CROATIA, ETSI3_WORLD, "HR"},
-       {CTRY_CYPRUS, ETSI1_WORLD, "CY"},
-       {CTRY_CZECH, ETSI3_WORLD, "CZ"},
-       {CTRY_DENMARK, ETSI1_WORLD, "DK"},
-       {CTRY_DOMINICAN_REPUBLIC, FCC1_FCCA, "DO"},
-       {CTRY_ECUADOR, FCC1_WORLD, "EC"},
-       {CTRY_EGYPT, ETSI3_WORLD, "EG"},
-       {CTRY_EL_SALVADOR, FCC1_WORLD, "SV"},
-       {CTRY_ESTONIA, ETSI1_WORLD, "EE"},
-       {CTRY_FINLAND, ETSI1_WORLD, "FI"},
-       {CTRY_FRANCE, ETSI1_WORLD, "FR"},
-       {CTRY_GEORGIA, ETSI4_WORLD, "GE"},
-       {CTRY_GERMANY, ETSI1_WORLD, "DE"},
-       {CTRY_GREECE, ETSI1_WORLD, "GR"},
-       {CTRY_GUATEMALA, FCC1_FCCA, "GT"},
-       {CTRY_HONDURAS, NULL1_WORLD, "HN"},
-       {CTRY_HONG_KONG, FCC2_WORLD, "HK"},
-       {CTRY_HUNGARY, ETSI1_WORLD, "HU"},
-       {CTRY_ICELAND, ETSI1_WORLD, "IS"},
-       {CTRY_INDIA, APL6_WORLD, "IN"},
-       {CTRY_INDONESIA, APL1_WORLD, "ID"},
-       {CTRY_IRAN, APL1_WORLD, "IR"},
-       {CTRY_IRELAND, ETSI1_WORLD, "IE"},
-       {CTRY_ISRAEL, NULL1_WORLD, "IL"},
-       {CTRY_ITALY, ETSI1_WORLD, "IT"},
-       {CTRY_JAMAICA, ETSI1_WORLD, "JM"},
-
-       {CTRY_JAPAN, MKK1_MKKA, "JP"},
-       {CTRY_JAPAN1, MKK1_MKKB, "JP"},
-       {CTRY_JAPAN2, MKK1_FCCA, "JP"},
-       {CTRY_JAPAN3, MKK2_MKKA, "JP"},
-       {CTRY_JAPAN4, MKK1_MKKA1, "JP"},
-       {CTRY_JAPAN5, MKK1_MKKA2, "JP"},
-       {CTRY_JAPAN6, MKK1_MKKC, "JP"},
-       {CTRY_JAPAN7, MKK3_MKKB, "JP"},
-       {CTRY_JAPAN8, MKK3_MKKA2, "JP"},
-       {CTRY_JAPAN9, MKK3_MKKC, "JP"},
-       {CTRY_JAPAN10, MKK4_MKKB, "JP"},
-       {CTRY_JAPAN11, MKK4_MKKA2, "JP"},
-       {CTRY_JAPAN12, MKK4_MKKC, "JP"},
-       {CTRY_JAPAN13, MKK5_MKKB, "JP"},
-       {CTRY_JAPAN14, MKK5_MKKA2, "JP"},
-       {CTRY_JAPAN15, MKK5_MKKC, "JP"},
-       {CTRY_JAPAN16, MKK6_MKKB, "JP"},
-       {CTRY_JAPAN17, MKK6_MKKA2, "JP"},
-       {CTRY_JAPAN18, MKK6_MKKC, "JP"},
-       {CTRY_JAPAN19, MKK7_MKKB, "JP"},
-       {CTRY_JAPAN20, MKK7_MKKA2, "JP"},
-       {CTRY_JAPAN21, MKK7_MKKC, "JP"},
-       {CTRY_JAPAN22, MKK8_MKKB, "JP"},
-       {CTRY_JAPAN23, MKK8_MKKA2, "JP"},
-       {CTRY_JAPAN24, MKK8_MKKC, "JP"},
-       {CTRY_JAPAN25, MKK3_MKKA, "JP"},
-       {CTRY_JAPAN26, MKK3_MKKA1, "JP"},
-       {CTRY_JAPAN27, MKK3_FCCA, "JP"},
-       {CTRY_JAPAN28, MKK4_MKKA1, "JP"},
-       {CTRY_JAPAN29, MKK4_FCCA, "JP"},
-       {CTRY_JAPAN30, MKK6_MKKA1, "JP"},
-       {CTRY_JAPAN31, MKK6_FCCA, "JP"},
-       {CTRY_JAPAN32, MKK7_MKKA1, "JP"},
-       {CTRY_JAPAN33, MKK7_FCCA, "JP"},
-       {CTRY_JAPAN34, MKK9_MKKA, "JP"},
-       {CTRY_JAPAN35, MKK10_MKKA, "JP"},
-       {CTRY_JAPAN36, MKK4_MKKA, "JP"},
-       {CTRY_JAPAN37, MKK9_FCCA, "JP"},
-       {CTRY_JAPAN38, MKK9_MKKA1, "JP"},
-       {CTRY_JAPAN39, MKK9_MKKC, "JP"},
-       {CTRY_JAPAN40, MKK9_MKKA2, "JP"},
-       {CTRY_JAPAN41, MKK10_FCCA, "JP"},
-       {CTRY_JAPAN42, MKK10_MKKA1, "JP"},
-       {CTRY_JAPAN43, MKK10_MKKC, "JP"},
-       {CTRY_JAPAN44, MKK10_MKKA2, "JP"},
-       {CTRY_JAPAN45, MKK11_MKKA, "JP"},
-       {CTRY_JAPAN46, MKK11_FCCA, "JP"},
-       {CTRY_JAPAN47, MKK11_MKKA1, "JP"},
-       {CTRY_JAPAN48, MKK11_MKKC, "JP"},
-       {CTRY_JAPAN49, MKK11_MKKA2, "JP"},
-       {CTRY_JAPAN50, MKK12_MKKA, "JP"},
-       {CTRY_JAPAN51, MKK12_FCCA, "JP"},
-       {CTRY_JAPAN52, MKK12_MKKA1, "JP"},
-       {CTRY_JAPAN53, MKK12_MKKC, "JP"},
-       {CTRY_JAPAN54, MKK12_MKKA2, "JP"},
-       {CTRY_JAPAN57, MKK13_MKKB, "JP"},
-       {CTRY_JAPAN58, MKK14_MKKA1, "JP"},
-       {CTRY_JAPAN59, MKK15_MKKA1, "JP"},
-
-       {CTRY_JORDAN, ETSI2_WORLD, "JO"},
-       {CTRY_KAZAKHSTAN, NULL1_WORLD, "KZ"},
-       {CTRY_KOREA_NORTH, APL9_WORLD, "KP"},
-       {CTRY_KOREA_ROC, APL9_WORLD, "KR"},
-       {CTRY_KOREA_ROC2, APL2_WORLD, "K2"},
-       {CTRY_KOREA_ROC3, APL9_WORLD, "K3"},
-       {CTRY_KUWAIT, NULL1_WORLD, "KW"},
-       {CTRY_LATVIA, ETSI1_WORLD, "LV"},
-       {CTRY_LEBANON, NULL1_WORLD, "LB"},
-       {CTRY_LIECHTENSTEIN, ETSI1_WORLD, "LI"},
-       {CTRY_LITHUANIA, ETSI1_WORLD, "LT"},
-       {CTRY_LUXEMBOURG, ETSI1_WORLD, "LU"},
-       {CTRY_MACAU, FCC2_WORLD, "MO"},
-       {CTRY_MACEDONIA, NULL1_WORLD, "MK"},
-       {CTRY_MALAYSIA, APL8_WORLD, "MY"},
-       {CTRY_MALTA, ETSI1_WORLD, "MT"},
-       {CTRY_MEXICO, FCC1_FCCA, "MX"},
-       {CTRY_MONACO, ETSI4_WORLD, "MC"},
-       {CTRY_MOROCCO, NULL1_WORLD, "MA"},
-       {CTRY_NEPAL, APL1_WORLD, "NP"},
-       {CTRY_NETHERLANDS, ETSI1_WORLD, "NL"},
-       {CTRY_NETHERLANDS_ANTILLES, ETSI1_WORLD, "AN"},
-       {CTRY_NEW_ZEALAND, FCC2_ETSIC, "NZ"},
-       {CTRY_NORWAY, ETSI1_WORLD, "NO"},
-       {CTRY_OMAN, APL6_WORLD, "OM"},
-       {CTRY_PAKISTAN, NULL1_WORLD, "PK"},
-       {CTRY_PANAMA, FCC1_FCCA, "PA"},
-       {CTRY_PAPUA_NEW_GUINEA, FCC1_WORLD, "PG"},
-       {CTRY_PERU, APL1_WORLD, "PE"},
-       {CTRY_PHILIPPINES, APL1_WORLD, "PH"},
-       {CTRY_POLAND, ETSI1_WORLD, "PL"},
-       {CTRY_PORTUGAL, ETSI1_WORLD, "PT"},
-       {CTRY_PUERTO_RICO, FCC1_FCCA, "PR"},
-       {CTRY_QATAR, NULL1_WORLD, "QA"},
-       {CTRY_ROMANIA, NULL1_WORLD, "RO"},
-       {CTRY_RUSSIA, NULL1_WORLD, "RU"},
-       {CTRY_SAUDI_ARABIA, NULL1_WORLD, "SA"},
-       {CTRY_SERBIA_MONTENEGRO, ETSI1_WORLD, "CS"},
-       {CTRY_SINGAPORE, APL6_WORLD, "SG"},
-       {CTRY_SLOVAKIA, ETSI1_WORLD, "SK"},
-       {CTRY_SLOVENIA, ETSI1_WORLD, "SI"},
-       {CTRY_SOUTH_AFRICA, FCC3_WORLD, "ZA"},
-       {CTRY_SPAIN, ETSI1_WORLD, "ES"},
-       {CTRY_SRI_LANKA, FCC3_WORLD, "LK"},
-       {CTRY_SWEDEN, ETSI1_WORLD, "SE"},
-       {CTRY_SWITZERLAND, ETSI1_WORLD, "CH"},
-       {CTRY_SYRIA, NULL1_WORLD, "SY"},
-       {CTRY_TAIWAN, APL3_FCCA, "TW"},
-       {CTRY_THAILAND, NULL1_WORLD, "TH"},
-       {CTRY_TRINIDAD_Y_TOBAGO, ETSI4_WORLD, "TT"},
-       {CTRY_TUNISIA, ETSI3_WORLD, "TN"},
-       {CTRY_TURKEY, ETSI3_WORLD, "TR"},
-       {CTRY_UKRAINE, NULL1_WORLD, "UA"},
-       {CTRY_UAE, NULL1_WORLD, "AE"},
-       {CTRY_UNITED_KINGDOM, ETSI1_WORLD, "GB"},
-       {CTRY_UNITED_STATES, FCC3_FCCA, "US"},
-       /* This "PS" is for US public safety actually... to support this we
-        * would need to assign new special alpha2 to CRDA db as with the world
-        * regdomain and use another alpha2 */
-       {CTRY_UNITED_STATES_FCC49, FCC4_FCCA, "PS"},
-       {CTRY_URUGUAY, APL2_WORLD, "UY"},
-       {CTRY_UZBEKISTAN, FCC3_FCCA, "UZ"},
-       {CTRY_VENEZUELA, APL2_ETSIC, "VE"},
-       {CTRY_VIET_NAM, NULL1_WORLD, "VN"},
-       {CTRY_YEMEN, NULL1_WORLD, "YE"},
-       {CTRY_ZIMBABWE, NULL1_WORLD, "ZW"},
-};
-
-#endif