summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYingying Tang <yintang@codeaurora.org>2016-11-17 11:07:40 +0800
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2016-11-21 13:27:14 +0530
commit79d7c513aecb3818f9e96bd78185df5a8c48d7b7 (patch)
tree05b085087c7bf141f085175685d14e2a682f168e
parent65f1e3abb4ebcc2e350ea9224bf270f9568d7888 (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.h11
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg.c12
-rw-r--r--CORE/SME/inc/sme_Api.h3
-rw-r--r--CORE/SME/src/sme_common/sme_Api.c37
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