diff options
| author | Yingying Tang <yintang@codeaurora.org> | 2016-11-17 11:07:40 +0800 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2016-11-21 13:27:14 +0530 |
| commit | 79d7c513aecb3818f9e96bd78185df5a8c48d7b7 (patch) | |
| tree | 05b085087c7bf141f085175685d14e2a682f168e | |
| parent | 65f1e3abb4ebcc2e350ea9224bf270f9568d7888 (diff) | |
qcacld-2.0: Add support to set BT/WLAN coex tx power
For 3 antennas solution, BT/WLAN can work on it's dedicated
antenna. Add one ini item to set the tx power when BT WLAN
coex.
CRs-fixed: 1020123
Change-Id: Ia30cb11995bd920cbd56f02c6717effd848e7752
| -rw-r--r-- | CORE/HDD/inc/wlan_hdd_cfg.h | 11 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg.c | 12 | ||||
| -rw-r--r-- | CORE/SME/inc/sme_Api.h | 3 | ||||
| -rw-r--r-- | CORE/SME/src/sme_common/sme_Api.c | 37 |
4 files changed, 63 insertions, 0 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h index 6aa43be35675..a1106864c2b8 100644 --- a/CORE/HDD/inc/wlan_hdd_cfg.h +++ b/CORE/HDD/inc/wlan_hdd_cfg.h @@ -3543,6 +3543,16 @@ FG_BTC_BT_INTERVAL_PAGE_P2P_STA_DEFAULT #define CFG_BTC_WLAN_INTERVAL_INQ_P2P_STA_MAX (200) #define CFG_BTC_WLAN_INTERVAL_INQ_P2P_STA_DEFAULT (30) +/** + * Config to set WLAN/BT coex tx power + * range: 0 - 63 + * default: 63 + */ +#define CFG_BTC_WLAN_COEX_TX_POWER "gWLCoexTxPower" +#define CFG_BTC_WLAN_COEX_TX_POWER_MIN (0) +#define CFG_BTC_WLAN_COEX_TX_POWER_MAX (63) +#define CFG_BTC_WLAN_COEX_TX_POWER_DEFAULT (63) + /* Parameters for roaming scans performed at high RSSI */ /* Maximum number of scans after RSSI change */ @@ -4992,6 +5002,7 @@ struct hdd_config { uint32_t coex_inquiry_p2p_sta_bt_interval; uint32_t coex_inquiry_p2p_sta_wlan_interval; + uint32_t coex_tx_power; 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 b2833cf62d31..7e66789b52ea 100644 --- a/CORE/HDD/src/wlan_hdd_cfg.c +++ b/CORE/HDD/src/wlan_hdd_cfg.c @@ -4282,6 +4282,13 @@ REG_TABLE_ENTRY g_registry_table[] = CFG_BTC_WLAN_INTERVAL_INQ_P2P_STA_MIN, CFG_BTC_WLAN_INTERVAL_INQ_P2P_STA_MAX), + REG_VARIABLE(CFG_BTC_WLAN_COEX_TX_POWER, WLAN_PARAM_Integer, + hdd_config_t, coex_tx_power, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_BTC_WLAN_COEX_TX_POWER_DEFAULT, + CFG_BTC_WLAN_COEX_TX_POWER_MIN, + CFG_BTC_WLAN_COEX_TX_POWER_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, @@ -8390,6 +8397,11 @@ void hdd_set_btc_bt_wlan_interval(hdd_context_t *hdd_ctx) if (VOS_STATUS_SUCCESS != status) hddLog(LOGE, "Fail to set enable bt wlan coex parameters"); + + status = sme_set_btc_wlan_coex_tx_power(config->coex_tx_power); + + if (VOS_STATUS_SUCCESS != status) + hddLog(LOGE, "Fail to set coex tx power"); } /** diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h index 9f6b2d5614d6..3a08cb5ae6ae 100644 --- a/CORE/SME/inc/sme_Api.h +++ b/CORE/SME/inc/sme_Api.h @@ -4567,6 +4567,9 @@ VOS_STATUS sme_set_btc_bt_wlan_interval_inquiry_p2p(uint32_t bt_interval, uint32_t p2p_interval); VOS_STATUS sme_set_btc_bt_wlan_interval_inquiry_p2p_sta(uint32_t bt_interval, uint32_t p2p_sta_interval); + +VOS_STATUS sme_set_btc_wlan_coex_tx_power(uint32_t coex_tx_power); + 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 35b585462b82..4db2b3f75dec 100644 --- a/CORE/SME/src/sme_common/sme_Api.c +++ b/CORE/SME/src/sme_common/sme_Api.c @@ -19429,6 +19429,43 @@ VOS_STATUS sme_set_btc_bt_wlan_interval_inquiry_p2p_sta(uint32_t bt_interval, } /** + * sme_set_btc_coex_tx_power() - Set the btc bt/wlan coex tx power + * @coex_tx_power: bt/wlan coex tx power + * + * Return: Return VOS_STATUS. + */ +VOS_STATUS sme_set_btc_wlan_coex_tx_power(uint32_t coex_tx_power) +{ + 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_TX_POWER; + sme_interval->config_arg1 = coex_tx_power; + + 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 |
