summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCNSS_WLAN Service <cnssbldsw@qualcomm.com>2017-09-26 21:48:49 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2017-09-26 21:48:50 -0700
commit938e1b2479aac3c614d270a9e58e04e5ddfaec5c (patch)
tree59210e79cc49ec1ae40f6264ad920a4540d04147
parent5651211534d66d1b702c1f45cb0b29a6b68fc0bf (diff)
parentbe203451db22ebe0aacc6a9c1855d99e6205eac7 (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.c17
-rw-r--r--core/hdd/src/wlan_hdd_regulatory.c9
-rw-r--r--core/pld/inc/pld_common.h14
-rw-r--r--core/pld/src/pld_common.c72
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