summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/ath9k
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/ath9k')
-rw-r--r--drivers/net/wireless/ath9k/Kconfig1
-rw-r--r--drivers/net/wireless/ath9k/Makefile1
-rw-r--r--drivers/net/wireless/ath9k/eeprom.h2
-rw-r--r--drivers/net/wireless/ath9k/hw.c15
-rw-r--r--drivers/net/wireless/ath9k/hw.h5
-rw-r--r--drivers/net/wireless/ath9k/main.c31
-rw-r--r--drivers/net/wireless/ath9k/regd.c533
-rw-r--r--drivers/net/wireless/ath9k/regd.h252
-rw-r--r--drivers/net/wireless/ath9k/regd_common.h473
9 files changed, 42 insertions, 1271 deletions
diff --git a/drivers/net/wireless/ath9k/Kconfig b/drivers/net/wireless/ath9k/Kconfig
index 90a8dd87378..0ed1ac312aa 100644
--- a/drivers/net/wireless/ath9k/Kconfig
+++ b/drivers/net/wireless/ath9k/Kconfig
@@ -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
diff --git a/drivers/net/wireless/ath9k/Makefile b/drivers/net/wireless/ath9k/Makefile
index 1a4d4eab6fe..783bc39eb2f 100644
--- a/drivers/net/wireless/ath9k/Makefile
+++ b/drivers/net/wireless/ath9k/Makefile
@@ -4,7 +4,6 @@ ath9k-y += hw.o \
calib.o \
ani.o \
phy.o \
- regd.o \
beacon.o \
main.o \
recv.o \
diff --git a/drivers/net/wireless/ath9k/eeprom.h b/drivers/net/wireless/ath9k/eeprom.h
index 25b68c881ff..9a7715df5cf 100644
--- a/drivers/net/wireless/ath9k/eeprom.h
+++ b/drivers/net/wireless/ath9k/eeprom.h
@@ -17,6 +17,8 @@
#ifndef EEPROM_H
#define EEPROM_H
+#include <net/wireless.h>
+
#define AH_USE_EEPROM 0x1
#ifdef __BIG_ENDIAN
diff --git a/drivers/net/wireless/ath9k/hw.c b/drivers/net/wireless/ath9k/hw.c
index a8465bb418a..24299e65fdc 100644
--- a/drivers/net/wireless/ath9k/hw.c
+++ b/drivers/net/wireless/ath9k/hw.c
@@ -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)
diff --git a/drivers/net/wireless/ath9k/hw.h b/drivers/net/wireless/ath9k/hw.h
index 5a1128ddb46..984ac7da09d 100644
--- a/drivers/net/wireless/ath9k/hw.h
+++ b/drivers/net/wireless/ath9k/hw.h
@@ -25,10 +25,11 @@
#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;
diff --git a/drivers/net/wireless/ath9k/main.c b/drivers/net/wireless/ath9k/main.c
index 3647a47d939..d779f00c9b9 100644
--- a/drivers/net/wireless/ath9k/main.c
+++ b/drivers/net/wireless/ath9k/main.c
@@ -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
index 7eaa59e4a7d..00000000000
--- a/drivers/net/wireless/ath9k/regd.c
+++ /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
index 61fa42ebfbc..00000000000
--- a/drivers/net/wireless/ath9k/regd.h
+++ /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
index 4d0e298cd1c..00000000000
--- a/drivers/net/wireless/ath9k/regd_common.h
+++ /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