summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYingying Tang <yintang@qti.qualcomm.com>2016-05-24 17:02:38 +0800
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2016-06-08 17:08:03 +0530
commit813d67c273204ff6b439d2308dff28c7564a27f6 (patch)
treeff132e3dbc0375fccc2e521d422efbe495921b13
parent6c62c5b19fe6c3edea1410e7d2703f606c25196c (diff)
qcacld-2.0: Add support for dynamically disable BT/WLAN time coex
For 3 antennas solution, BT/WLAN can work on it's dedicated antenna. Add one ini item to dynamically disable BT/WLAN co-existing. Add another ini item to set antenna isolation, FW will use the isolation to dynamically decide whether to disable BT/WLAN time division co-existing. CRs-fixed: 1020123 Change-Id: I175f984a1bdb0c0f245c60f32bcc5af8ea1802a7
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg.h22
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg.c20
-rw-r--r--CORE/SME/inc/sme_Api.h2
-rw-r--r--CORE/SME/src/sme_common/sme_Api.c39
4 files changed, 83 insertions, 0 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 5c13303563e7..55ead60a0f10 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -3397,6 +3397,26 @@ enum dot11p_mode {
#define CFG_BTC_WLAN_INTERVAL_PAGE_SAP_MAX (200)
#define CFG_BTC_WLAN_INTERVAL_PAGE_SAP_DEFAULT (30)
+/**
+ * Config to set BT WLAN co-existing
+ * 0: enable BT WLAN co-existing
+ * 1: dynamically disable BT WLAN co-existing
+ */
+#define CFG_BTC_DYNAMIC_WLAN_BT_COEX "gDynamicBTCOEX"
+#define CFG_BTC_DYNAMIC_WLAN_BT_COEX_MIN (0)
+#define CFG_BTC_DYNAMIC_WLAN_BT_COEX_MAX (1)
+#define CFG_BTC_DYNAMIC_WLAN_BT_COEX_DEFAULT (0)
+
+/**
+ * Config to set antenna isolation
+ * range: 0 - 100 db
+ * default: 0 db
+ */
+#define CFG_BTC_ANTENNA_ISOLATION "gAntennaIsolation"
+#define CFG_BTC_ANTENNA_ISOLATION_MIN (0)
+#define CFG_BTC_ANTENNA_ISOLATION_MAX (100)
+#define CFG_BTC_ANTENNA_ISOLATION_DEFAULT (0)
+
/* Parameters for roaming scans performed at high RSSI */
@@ -4576,6 +4596,8 @@ struct hdd_config {
uint32_t coex_page_sap_bt_interval;
uint32_t coex_page_sap_wlan_interval;
+ uint32_t dynamic_wlan_bt_coex;
+ uint32_t antenna_isolation;
uint8_t inform_bss_rssi_raw;
#ifdef WLAN_FEATURE_TSF
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index cbb0bf8b4310..af88009372fb 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -4197,6 +4197,20 @@ REG_TABLE_ENTRY g_registry_table[] =
CFG_BTC_WLAN_INTERVAL_PAGE_SAP_MIN,
CFG_BTC_WLAN_INTERVAL_PAGE_SAP_MAX),
+ REG_VARIABLE(CFG_BTC_DYNAMIC_WLAN_BT_COEX, WLAN_PARAM_Integer,
+ hdd_config_t, dynamic_wlan_bt_coex,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_BTC_DYNAMIC_WLAN_BT_COEX_DEFAULT,
+ CFG_BTC_DYNAMIC_WLAN_BT_COEX_MIN,
+ CFG_BTC_DYNAMIC_WLAN_BT_COEX_MAX),
+
+ REG_VARIABLE(CFG_BTC_ANTENNA_ISOLATION, WLAN_PARAM_Integer,
+ hdd_config_t, antenna_isolation,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_BTC_ANTENNA_ISOLATION_DEFAULT,
+ CFG_BTC_ANTENNA_ISOLATION_MIN,
+ CFG_BTC_ANTENNA_ISOLATION_MAX),
+
REG_VARIABLE(CFG_INFORM_BSS_RSSI_RAW_NAME, WLAN_PARAM_Integer,
hdd_config_t, inform_bss_rssi_raw,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
@@ -7902,4 +7916,10 @@ void hdd_set_btc_bt_wlan_interval(hdd_context_t *hdd_ctx)
if (VOS_STATUS_SUCCESS != status)
hddLog(LOGE, "Fail to set coex page sap bt interval parameters");
}
+
+ status = sme_set_btc_dynamic_bt_wlan_coex(
+ config->dynamic_wlan_bt_coex, config->antenna_isolation);
+
+ if (VOS_STATUS_SUCCESS != status)
+ hddLog(LOGE, "Fail to set enable bt wlan coex parameters");
}
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index 02a42b743ccf..6d2e201679e5 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -4460,6 +4460,8 @@ VOS_STATUS sme_set_btc_bt_wlan_interval_page_sta(uint32_t bt_interval,
uint32_t sta_interval);
VOS_STATUS sme_set_btc_bt_wlan_interval_page_sap(uint32_t bt_interval,
uint32_t sap_interval);
+VOS_STATUS sme_set_btc_dynamic_bt_wlan_coex(uint32_t dynamic_wlan_bt_coex,
+ uint32_t antenna_isolation);
uint8_t sme_is_any_session_in_connected_state(tHalHandle h_hal);
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 7e74be03beb5..30438b7470d7 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -18903,6 +18903,45 @@ VOS_STATUS sme_set_btc_bt_wlan_interval_page_sap(uint32_t bt_interval,
}
/**
+ * sme_set_btc_bt_wlan_coex() - Set the btc bt wlan coex
+ * @dynamic_wlan_bt_coex: enable bt wlan co-exist
+ *
+ * Return: Return VOS_STATUS.
+ */
+VOS_STATUS sme_set_btc_dynamic_bt_wlan_coex(uint32_t dynamic_wlan_bt_coex,
+ uint32_t antenna_isolation)
+{
+ vos_msg_t msg = {0};
+ VOS_STATUS vos_status;
+ WMI_COEX_CONFIG_CMD_fixed_param *sme_interval;
+
+ sme_interval = vos_mem_malloc(sizeof(*sme_interval));
+ if (!sme_interval) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ FL("Malloc failed"));
+ return VOS_STATUS_E_NOMEM;
+ }
+
+ sme_interval->config_type = WMI_COEX_CONFIG_BTC_ENABLE;
+ sme_interval->config_arg1 = dynamic_wlan_bt_coex;
+ sme_interval->config_arg2 = antenna_isolation;
+
+ msg.type = WDA_BTC_BT_WLAN_INTERVAL_CMD;
+ msg.reserved = 0;
+ msg.bodyptr = sme_interval;
+
+ vos_status = vos_mq_post_message(VOS_MODULE_ID_WDA,&msg);
+ if (!VOS_IS_STATUS_SUCCESS(vos_status)) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ FL("Not able to post message to WDA"));
+ vos_mem_free(sme_interval);
+ return VOS_STATUS_E_FAILURE;
+ }
+
+ return vos_status;
+}
+
+/**
* sme_send_disassoc_req_frame - send disassoc req
* @hal: handler to hal
* @session_id: session id