diff options
| author | CNSS_WLAN Service <cnssbldsw@qualcomm.com> | 2017-09-26 21:48:49 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-09-26 21:48:50 -0700 |
| commit | 938e1b2479aac3c614d270a9e58e04e5ddfaec5c (patch) | |
| tree | 59210e79cc49ec1ae40f6264ad920a4540d04147 | |
| parent | 5651211534d66d1b702c1f45cb0b29a6b68fc0bf (diff) | |
| parent | be203451db22ebe0aacc6a9c1855d99e6205eac7 (diff) | |
Merge "qcacld-3.0: save the cc source to platform driver" into wlan-cld3.driver.lnx.1.1
| -rw-r--r-- | core/cds/src/cds_reg_service.c | 17 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_regulatory.c | 9 | ||||
| -rw-r--r-- | core/pld/inc/pld_common.h | 14 | ||||
| -rw-r--r-- | core/pld/src/pld_common.c | 72 |
4 files changed, 110 insertions, 2 deletions
diff --git a/core/cds/src/cds_reg_service.c b/core/cds/src/cds_reg_service.c index 655174e773af..41357770a3a6 100644 --- a/core/cds/src/cds_reg_service.c +++ b/core/cds/src/cds_reg_service.c @@ -32,6 +32,7 @@ ============================================================================*/ #include <net/cfg80211.h> +#include "pld_common.h" #include "qdf_types.h" #include "qdf_trace.h" #include "cds_api.h" @@ -628,6 +629,12 @@ QDF_STATUS cds_get_reg_domain_from_country_code(v_REGDOMAIN_t *reg_domain_ptr, const uint8_t *country_alpha2, enum country_src source) { + hdd_context_t *hdd_ctx; + + hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD); + if (wlan_hdd_validate_context(hdd_ctx)) + return false; + if (NULL == reg_domain_ptr) { QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, "Invalid reg domain pointer"); @@ -651,9 +658,17 @@ QDF_STATUS cds_get_reg_domain_from_country_code(v_REGDOMAIN_t *reg_domain_ptr, return QDF_STATUS_SUCCESS; } - if (SOURCE_11D == source || SOURCE_USERSPACE == source) + if (SOURCE_11D == source || SOURCE_USERSPACE == source) { + if (SOURCE_USERSPACE == source) + pld_set_cc_source(hdd_ctx->parent_dev, + PLD_SOURCE_USER); + else + pld_set_cc_source(hdd_ctx->parent_dev, + PLD_SOURCE_11D); + regulatory_hint_user(country_alpha2, NL80211_USER_REG_HINT_USER); + } return QDF_STATUS_SUCCESS; } diff --git a/core/hdd/src/wlan_hdd_regulatory.c b/core/hdd/src/wlan_hdd_regulatory.c index bfd8be5d6cc2..f61f52b38ba2 100644 --- a/core/hdd/src/wlan_hdd_regulatory.c +++ b/core/hdd/src/wlan_hdd_regulatory.c @@ -690,6 +690,8 @@ void hdd_reg_notifier(struct wiphy *wiphy, if (NL80211_REGDOM_SET_BY_CORE == request->initiator) { hdd_ctx->reg.cc_src = SOURCE_CORE; + pld_set_cc_source(hdd_ctx->parent_dev, + PLD_SOURCE_CORE); sme_set_cc_src(hdd_ctx->hHal, SOURCE_CORE); if (is_wiphy_custom_regulatory(wiphy)) reset = true; @@ -698,7 +700,12 @@ void hdd_reg_notifier(struct wiphy *wiphy, sme_set_cc_src(hdd_ctx->hHal, SOURCE_DRIVER); } else { sme_set_cc_src(hdd_ctx->hHal, SOURCE_USERSPACE); - hdd_ctx->reg.cc_src = SOURCE_USERSPACE; + + if (pld_get_cc_source(hdd_ctx->parent_dev) + == PLD_SOURCE_11D) + hdd_ctx->reg.cc_src = SOURCE_11D; + else + hdd_ctx->reg.cc_src = SOURCE_USERSPACE; hdd_restore_custom_reg_settings(wiphy, request->alpha2, &reset); diff --git a/core/pld/inc/pld_common.h b/core/pld/inc/pld_common.h index c013d81c9965..e682835ba0d0 100644 --- a/core/pld/inc/pld_common.h +++ b/core/pld/inc/pld_common.h @@ -117,6 +117,18 @@ enum pld_platform_cap_flag { }; /** + * enum pld_cc_src - platform country code source + * @PLD_SOURCE_CORE: coutry code from core + * @PLD_SOURCE_11D: counry code from 11d + * @PLD_SOURCE_USER: country code from user + */ +enum pld_cc_src { + PLD_SOURCE_CORE, + PLD_SOURCE_11D, + PLD_SOURCE_USER +}; + +/** * struct pld_platform_cap - platform capabilities * @cap_flag: capabilities flag * @@ -533,6 +545,8 @@ unsigned int pld_socinfo_get_serial_number(struct device *dev); int pld_is_qmi_disable(struct device *dev); int pld_force_assert_target(struct device *dev); bool pld_is_fw_dump_skipped(struct device *dev); +void pld_set_cc_source(struct device *dev, enum pld_cc_src cc_source); +enum pld_cc_src pld_get_cc_source(struct device *dev); #if defined(CONFIG_WCNSS_MEM_PRE_ALLOC) && defined(FEATURE_SKB_PRE_ALLOC) diff --git a/core/pld/src/pld_common.c b/core/pld/src/pld_common.c index 768555c58b74..ff6ece3eff6a 100644 --- a/core/pld/src/pld_common.c +++ b/core/pld/src/pld_common.c @@ -1467,3 +1467,75 @@ bool pld_is_fw_dump_skipped(struct device *dev) } return ret; } + +#ifdef CONFIG_CNSS_UTILS +/** + * pld_set_cc_source() - Set the country code source + * @dev: device + * @cc_source: country code + * + * return: void + */ +void pld_set_cc_source(struct device *dev, + enum pld_cc_src cc_source) +{ + enum cnss_utils_cc_src cc; + + switch (cc_source) { + case PLD_SOURCE_CORE: + cc = CNSS_UTILS_SOURCE_CORE; + break; + case PLD_SOURCE_11D: + cc = CNSS_UTILS_SOURCE_11D; + break; + case PLD_SOURCE_USER: + cc = CNSS_UTILS_SOURCE_USER; + break; + default: + cc = CNSS_UTILS_SOURCE_CORE; + break; + } + + cnss_utils_set_cc_source(dev, cc); +} +/** + * pld_get_cc_source() - Get the country code source + * @dev: device + * + * return: cc_source + */ +enum pld_cc_src pld_get_cc_source(struct device *dev) +{ + enum cnss_utils_cc_src cc; + enum pld_cc_src cc_source; + + cc = cnss_utils_get_cc_source(dev); + switch (cc) { + case CNSS_UTILS_SOURCE_CORE: + cc_source = PLD_SOURCE_CORE; + break; + case CNSS_UTILS_SOURCE_11D: + cc_source = PLD_SOURCE_11D; + break; + case CNSS_UTILS_SOURCE_USER: + cc_source = PLD_SOURCE_USER; + break; + default: + cc_source = PLD_SOURCE_CORE; + break; + } + + return cc_source; +} +#else +void pld_set_cc_source(struct device *dev, + enum pld_cc_src cc_source) +{ + return; +} + +enum pld_cc_src pld_get_cc_source(struct device *dev) +{ + return PLD_SOURCE_CORE; +} +#endif |
