summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg.h49
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg.c24
-rw-r--r--CORE/SERVICES/COMMON/wmi_unified.h4
-rw-r--r--CORE/SME/inc/sme_Api.h4
-rw-r--r--CORE/SME/src/sme_common/sme_Api.c40
5 files changed, 121 insertions, 0 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 8bc04f9c8f7f..54b65c8f308e 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -4612,6 +4612,51 @@ FG_BTC_BT_INTERVAL_PAGE_P2P_STA_DEFAULT
#define CFG_REDUCED_BEACON_INTERVAL_MAX (100)
#define CFG_REDUCED_BEACON_INTERVAL_DEFAULT (0)
+#ifdef FEATURE_COEX_PTA_CONFIG_ENABLE
+/*
+ * <ini>
+ * gCoexPtaConfigEnable - enable pta coex
+ * @Min: 0
+ * @Max: 1
+ * @Default: 0
+ *
+ * This ini is used to enable the coexistence between QCA wifi and External BT.
+ * when val is 1, or the feature is disabled.
+ *
+ * Related: none
+ *
+ * Usage: External
+ *
+ * </ini>
+ */
+
+#define CFG_COEX_PTA_CONFIG_ENABLE "gCoexPtaConfigEnable"
+#define CFG_COEX_PTA_CONFIG_ENABLE_MIN (0)
+#define CFG_COEX_PTA_CONFIG_ENABLE_MAX (1)
+#define CFG_COEX_PTA_CONFIG_ENABLE_DEFAULT (0)
+
+/*
+ * <ini>
+ * gCoexPtaConfigEnable - configure pta coex param
+ * @Min: 0x00000000
+ * @Max: 0xFFFFFFFF
+ * @Default: 0x00000000
+ *
+ * This ini is used to configure the coexistence param between QCA wifi and External BT.
+ *
+ * Related: none
+ *
+ * Usage: External
+ *
+ * </ini>
+ */
+
+#define CFG_COEX_PTA_CONFIG_PARAM "gCoexPtaConfigParam"
+#define CFG_COEX_PTA_CONFIG_PARAM_MIN (0x00000000)
+#define CFG_COEX_PTA_CONFIG_PARAM_MAX (0xFFFFFFFF)
+#define CFG_COEX_PTA_CONFIG_PARAM_DEFAULT (0x00000000)
+#endif
+
/*
* <ini>
* arp_ac_category - ARP access category
@@ -5382,6 +5427,10 @@ struct hdd_config {
uint32_t coex_inquiry_p2p_sta_bt_interval;
uint32_t coex_inquiry_p2p_sta_wlan_interval;
uint32_t coex_tx_power;
+#ifdef FEATURE_COEX_PTA_CONFIG_ENABLE
+ uint8_t coex_pta_config_enable;
+ uint32_t coex_pta_config_param;
+#endif
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 b91d940e279e..d0cc32752884 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -5024,6 +5024,22 @@ REG_TABLE_ENTRY g_registry_table[] =
CFG_REDUCED_BEACON_INTERVAL_MIN,
CFG_REDUCED_BEACON_INTERVAL_MAX),
+#ifdef FEATURE_COEX_PTA_CONFIG_ENABLE
+ REG_VARIABLE(CFG_COEX_PTA_CONFIG_ENABLE, WLAN_PARAM_Integer,
+ hdd_config_t, coex_pta_config_enable,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_COEX_PTA_CONFIG_ENABLE_DEFAULT,
+ CFG_COEX_PTA_CONFIG_ENABLE_MIN,
+ CFG_COEX_PTA_CONFIG_ENABLE_MAX),
+
+ REG_VARIABLE(CFG_COEX_PTA_CONFIG_PARAM, WLAN_PARAM_Integer,
+ hdd_config_t, coex_pta_config_param,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_COEX_PTA_CONFIG_PARAM_DEFAULT,
+ CFG_COEX_PTA_CONFIG_PARAM_MIN,
+ CFG_COEX_PTA_CONFIG_PARAM_MAX),
+#endif
+
REG_VARIABLE(CFG_ARP_AC_CATEGORY, WLAN_PARAM_Integer,
hdd_config_t, arp_ac_category,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
@@ -8604,6 +8620,14 @@ void hdd_set_btc_bt_wlan_interval(hdd_context_t *hdd_ctx)
if (VOS_STATUS_SUCCESS != status)
hddLog(LOGE, "Fail to set coex tx power");
+
+#ifdef FEATURE_COEX_PTA_CONFIG_ENABLE
+ status = sme_configure_pta_coex(config->coex_pta_config_enable,config->coex_pta_config_param);
+
+ if (VOS_STATUS_SUCCESS != status)
+ hddLog(LOGE, "Fail to set pta coex");
+#endif
+
}
/**
diff --git a/CORE/SERVICES/COMMON/wmi_unified.h b/CORE/SERVICES/COMMON/wmi_unified.h
index 06dd9c2650bd..8e5e2c908e8a 100644
--- a/CORE/SERVICES/COMMON/wmi_unified.h
+++ b/CORE/SERVICES/COMMON/wmi_unified.h
@@ -17974,6 +17974,10 @@ typedef enum wmi_coex_config_type {
arg5 PTA algorithm (WMI_COEX_ALGO_TYPE),
arg6 PTA priority */
WMI_COEX_CONFIG_BTC_DUTYCYCLE = 18, /* config interval (ms units) (arg1 WLAN pause duration, arg2 WLAN unpause duration) for WLAN UL + BT Rx */
+#ifdef FEATURE_COEX_PTA_CONFIG_ENABLE
+ /* config BT info to FW when coexistence enable */
+ WMI_COEX_CONFIG_PTA_BT_INFO = 20,
+#endif
} WMI_COEX_CONFIG_TYPE;
typedef struct {
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index a387ba67da42..d7da4dfd6941 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -4576,6 +4576,10 @@ VOS_STATUS sme_set_btc_bt_wlan_interval_inquiry_p2p_sta(uint32_t bt_interval,
VOS_STATUS sme_set_btc_wlan_coex_tx_power(uint32_t coex_tx_power);
+#ifdef FEATURE_COEX_PTA_CONFIG_ENABLE
+VOS_STATUS sme_configure_pta_coex(uint8_t coex_pta_config_enable, uint32_t coex_pta_config_param);
+#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 8554086471f6..4bd32fc71fa4 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -19075,6 +19075,46 @@ eHalStatus sme_delete_all_tdls_peers(tHalHandle hal, uint8_t session_id)
return status;
}
+#ifdef FEATURE_COEX_PTA_CONFIG_ENABLE
+/**
+ * sme_configure_pta_coex() - Set coex PTA params
+ * @pta_enable: PTA enable or not
+ * @pta_param: PTA params
+ *
+ * Return: Return VOS_STATUS.
+ */
+VOS_STATUS sme_configure_pta_coex(uint8_t coex_pta_config_enable, uint32_t coex_pta_config_param)
+{
+ vos_msg_t msg = {0};
+ VOS_STATUS vos_status;
+ WMI_COEX_CONFIG_CMD_fixed_param *sme_pta_config;
+
+ sme_pta_config = vos_mem_malloc(sizeof(*sme_pta_config));
+ if (!sme_pta_config) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ FL("Malloc failed"));
+ return VOS_STATUS_E_NOMEM;
+ }
+
+ sme_pta_config->config_type = WMI_COEX_CONFIG_PTA_CONFIG;
+ sme_pta_config->config_arg1 = coex_pta_config_enable;
+ sme_pta_config->config_arg2 = coex_pta_config_param;
+
+ msg.type = WDA_BTC_BT_WLAN_INTERVAL_CMD;
+ msg.reserved = 0;
+ msg.bodyptr = sme_pta_config;
+
+ 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_pta_config);
+ return VOS_STATUS_E_FAILURE;
+ }
+
+ return vos_status;
+}
+#endif
/**
* sme_set_beacon_filter() - set the beacon filter configuration