diff options
| author | Yingying Tang <yintang@qti.qualcomm.com> | 2016-05-24 17:02:38 +0800 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2016-06-08 17:08:03 +0530 |
| commit | 813d67c273204ff6b439d2308dff28c7564a27f6 (patch) | |
| tree | ff132e3dbc0375fccc2e521d422efbe495921b13 | |
| parent | 6c62c5b19fe6c3edea1410e7d2703f606c25196c (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.h | 22 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg.c | 20 | ||||
| -rw-r--r-- | CORE/SME/inc/sme_Api.h | 2 | ||||
| -rw-r--r-- | CORE/SME/src/sme_common/sme_Api.c | 39 |
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 |
