diff options
| author | Amar Singhal <asinghal@qca.qualcomm.com> | 2014-03-06 15:41:17 -0800 |
|---|---|---|
| committer | Akash Patel <c_akashp@qca.qualcomm.com> | 2014-03-14 10:34:12 -0700 |
| commit | 348b06fb536890dc355c230af4c8f3ca822483bc (patch) | |
| tree | 6fdcf8ad4d4b481d50780873454a298b64fb10c3 | |
| parent | 1ff86dade0426f3a379ba8ac0c2db32263bf1af6 (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.h | 6 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg.c | 10 | ||||
| -rw-r--r-- | CORE/VOSS/src/vos_nvitem.c | 35 |
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")); |
