summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmar Singhal <asinghal@qca.qualcomm.com>2014-03-06 15:41:17 -0800
committerAkash Patel <c_akashp@qca.qualcomm.com>2014-03-14 10:34:12 -0700
commit348b06fb536890dc355c230af4c8f3ca822483bc (patch)
tree6fdcf8ad4d4b481d50780873454a298b64fb10c3
parent1ff86dade0426f3a379ba8ac0c2db32263bf1af6 (diff)
qcacld: Define new INI item gRegulatoryChangeCountry
Define new item gRegulatoryChangeCountry. This item is used to indicate to vos modue whether the user wants to use custom regulatory even if the default country is not WORLD. Change-Id: Iecfc567544ed93e380a1f08fa121b0c1090e0bcb CRs-Fixed: 623406
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg.h6
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg.c10
-rw-r--r--CORE/VOSS/src/vos_nvitem.c35
3 files changed, 40 insertions, 11 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 445a4a06236f..07ea944f6541 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -269,6 +269,11 @@
#define CFG_ENABLE_ADAPT_RX_DRAIN_DEFAULT WNI_CFG_ENABLE_ADAPT_RX_DRAIN_STADEF
+#define CFG_REG_CHANGE_DEF_COUNTRY_NAME "gRegulatoryChangeCountry"
+#define CFG_REG_CHANGE_DEF_COUNTRY_DEFAULT ( 0 )
+#define CFG_REG_CHANGE_DEF_COUNTRY_MIN ( 0 )
+#define CFG_REG_CHANGE_DEF_COUNTRY_MAX ( 1 )
+
typedef enum
{
eHDD_DOT11_MODE_AUTO = 0, //covers all things we support
@@ -2727,6 +2732,7 @@ typedef struct
v_BOOL_t fDfsPhyerrFilterOffload;
v_BOOL_t gEnableOverLapCh;
char acsAllowedChnls[CFG_MAX_STR_LEN];
+ v_BOOL_t fRegChangeDefCountry;
} hdd_config_t;
/*---------------------------------------------------------------------------
Function declarations and documenation
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index 64c77d3c9c0c..fe9255d8b412 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -3167,16 +3167,26 @@ REG_VARIABLE( CFG_ENABLE_DFS_PHYERR_FILTEROFFLOAD_NAME, WLAN_PARAM_Integer,
CFG_ENABLE_DFS_PHYERR_FILTEROFFLOAD_DEFAULT,
CFG_ENABLE_DFS_PHYERR_FILTEROFFLOAD_MIN,
CFG_ENABLE_DFS_PHYERR_FILTEROFFLOAD_MAX ),
+
REG_VARIABLE( CFG_ENABLE_OVERLAP_CH, WLAN_PARAM_Integer,
hdd_config_t, gEnableOverLapCh,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK,
CFG_ENABLE_OVERLAP_CH_DEFAULT,
CFG_ENABLE_OVERLAP_CH_MIN,
CFG_ENABLE_OVERLAP_CH_MAX ),
+
REG_VARIABLE_STRING( CFG_ONLY_ALLOWED_CHANNELS, WLAN_PARAM_String,
hdd_config_t, acsAllowedChnls,
VAR_FLAGS_OPTIONAL,
(void *)CFG_ONLY_ALLOWED_CHANNELS_DEFAULT),
+
+REG_VARIABLE( CFG_REG_CHANGE_DEF_COUNTRY_NAME, WLAN_PARAM_Integer,
+ hdd_config_t, fRegChangeDefCountry,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_REG_CHANGE_DEF_COUNTRY_DEFAULT,
+ CFG_REG_CHANGE_DEF_COUNTRY_MIN,
+ CFG_REG_CHANGE_DEF_COUNTRY_MAX),
+
};
/*
diff --git a/CORE/VOSS/src/vos_nvitem.c b/CORE/VOSS/src/vos_nvitem.c
index 04c6f189b4a0..2c1a02e0bae8 100644
--- a/CORE/VOSS/src/vos_nvitem.c
+++ b/CORE/VOSS/src/vos_nvitem.c
@@ -821,7 +821,13 @@ bool is_world_regd(u_int32_t regd)
static const struct ieee80211_regdomain *vos_default_world_regdomain(void)
{
/* this is the most restrictive */
- return &vos_world_regdom_64;
+ return &vos_world_regdom_64;
+}
+
+static const struct ieee80211_regdomain *vos_custom_world_regdomain(void)
+{
+ /* this is the most restrictive */
+ return &vos_world_regdom_60_61_62;
}
static const
@@ -1028,17 +1034,24 @@ static void vos_reg_apply_world_flags(struct wiphy *wiphy,
}
}
-static int regd_init_wiphy(struct regulatory *reg,
+static int regd_init_wiphy(hdd_context_t *pHddCtx, struct regulatory *reg,
struct wiphy *wiphy)
{
const struct ieee80211_regdomain *regd;
- if (is_world_regd(reg->reg_domain)) {
- regd = vos_world_regdomain(reg);
- wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY;
- } else {
- regd = vos_default_world_regdomain();
- wiphy->flags |= WIPHY_FLAG_STRICT_REGULATORY;
+ if (pHddCtx->cfg_ini->fRegChangeDefCountry) {
+ regd = vos_custom_world_regdomain();
+ wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY;
+ }
+ else if (is_world_regd(reg->reg_domain))
+ {
+ regd = vos_world_regdomain(reg);
+ wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY;
+ }
+ else
+ {
+ regd = vos_default_world_regdomain();
+ wiphy->flags |= WIPHY_FLAG_STRICT_REGULATORY;
}
wiphy_apply_custom_regulatory(wiphy, regd);
vos_reg_apply_radar_flags(wiphy);
@@ -1046,7 +1059,7 @@ static int regd_init_wiphy(struct regulatory *reg,
return 0;
}
-static int reg_init_from_eeprom(struct regulatory *reg,
+static int reg_init_from_eeprom(hdd_context_t *pHddCtx, struct regulatory *reg,
struct wiphy *wiphy)
{
int ret_val = 0;
@@ -1062,7 +1075,7 @@ static int reg_init_from_eeprom(struct regulatory *reg,
pnvEFSTable->halnv.tables.defaultCountryTable.countryCode[1] =
reg->alpha2[1];
- regd_init_wiphy(reg, wiphy);
+ regd_init_wiphy(pHddCtx, reg, wiphy);
return ret_val;
}
@@ -3482,7 +3495,7 @@ VOS_STATUS vos_init_wiphy_from_eeprom(void)
wiphy = pHddCtx->wiphy;
- if (reg_init_from_eeprom(&pHddCtx->reg, wiphy))
+ if (reg_init_from_eeprom(pHddCtx, &pHddCtx->reg, wiphy))
{
VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
("Error during regulatory init from EEPROM"));