From fa7f094c35417e661455c644202c0e93286a6d23 Mon Sep 17 00:00:00 2001 From: tinlin Date: Mon, 22 Apr 2019 14:54:57 +0800 Subject: qcacld-2.0: Add WMI_COEX_CONFIG_BTC_DUTYCYCLE Add WMI_COEX_CONFIG_BTC_DUTYCYCLE command type with two arguement gCoexWLANPauseDuration & gCoexWLANUnpauseDuration for WDA_BTC_BT_WLAN_INTERVAL_CMD. Change-Id: I2e69991eadb7b82422f89c5cf6a14386122e07e5 CRs-Fixed: 2439315 --- CORE/HDD/inc/wlan_hdd_cfg.h | 18 ++++++++++++++++++ CORE/HDD/src/wlan_hdd_cfg.c | 26 ++++++++++++++++++++++++++ CORE/SME/inc/sme_Api.h | 4 ++++ CORE/SME/src/sme_common/sme_Api.c | 36 ++++++++++++++++++++++++++++++++++++ Kbuild | 3 ++- 5 files changed, 86 insertions(+), 1 deletion(-) diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h index f6ce7080dafe..fd3796afbebf 100644 --- a/CORE/HDD/inc/wlan_hdd_cfg.h +++ b/CORE/HDD/inc/wlan_hdd_cfg.h @@ -4173,6 +4173,19 @@ FG_BTC_BT_INTERVAL_PAGE_P2P_STA_DEFAULT #define CFG_BTC_WLAN_COEX_TX_POWER_MAX (63) #define CFG_BTC_WLAN_COEX_TX_POWER_DEFAULT (63) +/* Config to set WLAN on the uplink periodically pauses and unpauses its data queues */ +#ifdef WMI_COEX_BTC_DUTYCYCLE +#define CFG_COEX_PAUSE_NAME "gCoexWLANPauseDuration" +#define CFG_COEX_PAUSE_MIN (0) +#define CFG_COEX_PAUSE_MAX (100) +#define CFG_COEX_PAUSE_DEFAULT (30) + +#define CFG_COEX_UNPAUSE_NAME "gCoexWLANUnpauseDuration" +#define CFG_COEX_UNPAUSE_MIN (0) +#define CFG_COEX_UNPAUSE_MAX (100) +#define CFG_COEX_UNPAUSE_DEFAULT (30) +#endif + /* Parameters for roaming scans performed at high RSSI */ /* Maximum number of scans after RSSI change */ @@ -6419,6 +6432,11 @@ struct hdd_config { uint32_t coex_pta_config_param; #endif +#ifdef WMI_COEX_BTC_DUTYCYCLE + uint32_t coex_btc_PauseDuration; + uint32_t coex_btc_UnPauseDuration; +#endif + uint8_t inform_bss_rssi_raw; #ifdef WLAN_FEATURE_TSF uint32_t tsf_gpio_pin; diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c index 4306a7f9ef50..6cacd10bfe40 100644 --- a/CORE/HDD/src/wlan_hdd_cfg.c +++ b/CORE/HDD/src/wlan_hdd_cfg.c @@ -4580,6 +4580,24 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_BTC_WLAN_COEX_TX_POWER_MIN, CFG_BTC_WLAN_COEX_TX_POWER_MAX), +#ifdef WMI_COEX_BTC_DUTYCYCLE + REG_VARIABLE(CFG_COEX_PAUSE_NAME, + WLAN_PARAM_Integer, + hdd_config_t, coex_btc_PauseDuration, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_COEX_PAUSE_DEFAULT, + CFG_COEX_PAUSE_MIN, + CFG_COEX_PAUSE_MAX), + + REG_VARIABLE(CFG_COEX_UNPAUSE_NAME, + WLAN_PARAM_Integer, + hdd_config_t, coex_btc_UnPauseDuration, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_COEX_UNPAUSE_DEFAULT, + CFG_COEX_UNPAUSE_MIN, + CFG_COEX_UNPAUSE_MAX), +#endif + 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, @@ -9149,6 +9167,14 @@ void hdd_set_btc_bt_wlan_interval(hdd_context_t *hdd_ctx) hddLog(LOGE, "Fail to set pta coex"); #endif + +#ifdef WMI_COEX_BTC_DUTYCYCLE + status = sme_set_btc_coex_dutycycle(config->coex_btc_PauseDuration,config->coex_btc_UnPauseDuration); + + if (VOS_STATUS_SUCCESS != status) + hddLog(LOGE, "Fail to set coex PauseDuration"); +#endif + } /** diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h index f5f7b855d5b5..ef1e1665a5f5 100644 --- a/CORE/SME/inc/sme_Api.h +++ b/CORE/SME/inc/sme_Api.h @@ -4631,6 +4631,10 @@ VOS_STATUS sme_set_btc_wlan_coex_tx_power(uint32_t coex_tx_power); VOS_STATUS sme_configure_pta_coex(uint8_t coex_pta_config_enable, uint32_t coex_pta_config_param); #endif +#ifdef WMI_COEX_BTC_DUTYCYCLE +VOS_STATUS sme_set_btc_coex_dutycycle(uint32_t coex_btc_PauseDuration,uint32_t coex_btc_UnPauseDuration); +#endif + uint8_t sme_is_any_session_in_connected_state(tHalHandle h_hal); typedef void ( *tSmeSetThermalLevelCallback)(void *pContext, u_int8_t level); diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c index 4f5f76a41553..d7adada1d08a 100644 --- a/CORE/SME/src/sme_common/sme_Api.c +++ b/CORE/SME/src/sme_common/sme_Api.c @@ -20059,6 +20059,42 @@ VOS_STATUS sme_set_btc_wlan_coex_tx_power(uint32_t coex_tx_power) return vos_status; } +#ifdef WMI_COEX_BTC_DUTYCYCLE +VOS_STATUS sme_set_btc_coex_dutycycle(uint32_t coex_btc_PauseDuration,uint32_t coex_btc_UnPauseDuration) +{ + 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_DUTYCYCLE; + sme_interval->config_arg1 = coex_btc_PauseDuration; + sme_interval->config_arg2 = coex_btc_UnPauseDuration; + printk(KERN_ERR "ENTER sme_set_btc_coex_dutycycle = %d",coex_btc_PauseDuration); + printk(KERN_ERR "ENTER sme_set_btc_coex_dutycycle =%d",coex_btc_UnPauseDuration); + + 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; +} +#endif + /** * sme_send_disassoc_req_frame - send disassoc req * @hal: handler to hal diff --git a/Kbuild b/Kbuild index 84b9a1b70e96..deb4d0d1b3e3 100644 --- a/Kbuild +++ b/Kbuild @@ -1097,7 +1097,8 @@ CDEFINES := -DANI_LITTLE_BYTE_ENDIAN \ -DFEATURE_WLAN_CH144 \ -DHTC_CRP_DEBUG \ -DWLAN_VOWIFI_DEBUG \ - -DATH_SUPPORT_DFS + -DATH_SUPPORT_DFS \ + -DWMI_COEX_BTC_DUTYCYCLE ifeq ($(CONFIG_WLAN_POWER_DEBUGFS), y) CDEFINES += -DWLAN_POWER_DEBUGFS -- cgit v1.2.3