summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg.h75
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg.c89
-rw-r--r--CORE/HDD/src/wlan_hdd_main.c7
-rw-r--r--CORE/MAC/src/include/sirParams.h2
-rw-r--r--CORE/SERVICES/WMA/wma.c58
-rw-r--r--CORE/SERVICES/WMA/wma.h4
-rw-r--r--CORE/SME/inc/sme_Api.h7
-rw-r--r--CORE/SME/src/sme_common/sme_Api.c128
-rw-r--r--CORE/WDA/inc/wlan_qct_wda.h2
-rwxr-xr-xfirmware_bin/WCNSS_qcom_cfg.ini16
10 files changed, 386 insertions, 2 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index a6c8b285579c..8c592a245b6a 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -3314,6 +3314,68 @@ enum dot11p_mode {
#define CFG_ENABLE_NON_DFS_CHAN_ON_RADAR_MAX (1)
#define CFG_ENABLE_NON_DFS_CHAN_ON_RADAR_DEFAULT (0)
+/**
+* For P2P
+* gBTIntervalPageP2P/gWLIntervalPageP2P intervals length (in ms) during
+* WLAN P2P (single vdev) + BT Paging, min 20ms, max 200ms.
+* Customer could change these parameters' value in qcom_cfg.ini file to improve
+* P2P throughput when BT doing Page. Example as:
+* gBTIntervalPageP2P=30
+* gWLIntervalPageP2P=120
+*/
+
+#define CFG_BTC_BT_INTERVAL_PAGE_P2P "gBTIntervalPageP2P"
+#define CFG_BTC_BT_INTERVAL_PAGE_P2P_MIN (20)
+#define CFG_BTC_BT_INTERVAL_PAGE_P2P_MAX (200)
+#define CFG_BTC_BT_INTERVAL_PAGE_P2P_DEFAULT (30)
+
+#define CFG_BTC_WLAN_INTERVAL_PAGE_P2P "gWLIntervalPageP2P"
+#define CFG_BTC_WLAN_INTERVAL_PAGE_P2P_MIN (20)
+#define CFG_BTC_WLAN_INTERVAL_PAGE_P2P_MAX (200)
+#define CFG_BTC_WLAN_INTERVAL_PAGE_P2P_DEFAULT (30)
+
+/**
+* For STA
+* gBTIntervalPageSTA/gWLIntervalPageSTA intervals length (in ms) during
+* WLAN STA (single vdev) + BT Paging, min 20ms, max 200ms.
+* Customer could change these parameters' value in qcom_cfg.ini file to improve
+* STA throughput when BT doing Page. Example as:
+* gBTIntervalPageSTA=30
+* gWLIntervalPageSTA=120
+*/
+
+#define CFG_BTC_BT_INTERVAL_PAGE_STA "gBTIntervalPageSTA"
+#define CFG_BTC_BT_INTERVAL_PAGE_STA_MIN (20)
+#define CFG_BTC_BT_INTERVAL_PAGE_STA_MAX (200)
+#define CFG_BTC_BT_INTERVAL_PAGE_STA_DEFAULT (30)
+
+#define CFG_BTC_WLAN_INTERVAL_PAGE_STA "gWLIntervalPageSTA"
+#define CFG_BTC_WLAN_INTERVAL_PAGE_STA_MIN (20)
+#define CFG_BTC_WLAN_INTERVAL_PAGE_STA_MAX (200)
+#define CFG_BTC_WLAN_INTERVAL_PAGE_STA_DEFAULT (30)
+
+
+/**
+* For SAP
+* gBTIntervalPageSAP/gWLIntervalPageSAP intervals length (in ms) during
+* WLAN SAP (single vdev) + BT Paging, min 20ms, max 200ms.
+* Customer could change these parameters' value in qcom_cfg.ini file to improve
+* SAP throughput when BT doing Page. Example as:
+* gBTIntervalPageSAP=30
+* gWLIntervalPageSAP=120
+*/
+
+#define CFG_BTC_BT_INTERVAL_PAGE_SAP "gBTIntervalPageSAP"
+#define CFG_BTC_BT_INTERVAL_PAGE_SAP_MIN (20)
+#define CFG_BTC_BT_INTERVAL_PAGE_SAP_MAX (200)
+#define CFG_BTC_BT_INTERVAL_PAGE_SAP_DEFAULT (30)
+
+#define CFG_BTC_WLAN_INTERVAL_PAGE_SAP "gWLIntervalPageSAP"
+#define CFG_BTC_WLAN_INTERVAL_PAGE_SAP_MIN (20)
+#define CFG_BTC_WLAN_INTERVAL_PAGE_SAP_MAX (200)
+#define CFG_BTC_WLAN_INTERVAL_PAGE_SAP_DEFAULT (30)
+
+
/* Parameters for roaming scans performed at high RSSI */
/* Maximum number of scans after RSSI change */
@@ -4295,6 +4357,16 @@ struct hdd_config {
#endif /* FEATURE_AP_MCC_CH_AVOIDANCE */
uint8_t sap_p2p_11ac_override;
uint8_t prefer_non_dfs_on_radar;
+
+ uint32_t coex_page_p2p_bt_interval;
+ uint32_t coex_page_p2p_wlan_interval;
+
+ uint32_t coex_page_sta_bt_interval;
+ uint32_t coex_page_sta_wlan_interval;
+
+ uint32_t coex_page_sap_bt_interval;
+ uint32_t coex_page_sap_wlan_interval;
+
uint8_t inform_bss_rssi_raw;
#ifdef WLAN_FEATURE_TSF
uint32_t tsf_gpio_pin;
@@ -4505,5 +4577,8 @@ v_VOID_t hdd_mbssid_apply_def_cfg_ini(hdd_adapter_t *pAdapter);
#endif
void print_hdd_cfg(hdd_context_t *pHddCtx);
+
+void hdd_set_btc_bt_wlan_interval(hdd_context_t *pHddCtx);
+
VOS_STATUS hdd_update_nss(hdd_context_t *hdd_ctx, uint8_t nss);
#endif
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index 7b60dc4d91aa..2efdb22be5ac 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -4140,6 +4140,48 @@ REG_TABLE_ENTRY g_registry_table[] =
CFG_ENABLE_NON_DFS_CHAN_ON_RADAR_DEFAULT,
CFG_ENABLE_NON_DFS_CHAN_ON_RADAR_MIN,
CFG_ENABLE_NON_DFS_CHAN_ON_RADAR_MAX),
+/* For P2P */
+ REG_VARIABLE(CFG_BTC_BT_INTERVAL_PAGE_P2P, WLAN_PARAM_Integer,
+ hdd_config_t, coex_page_p2p_bt_interval,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_BTC_BT_INTERVAL_PAGE_P2P_DEFAULT,
+ CFG_BTC_BT_INTERVAL_PAGE_P2P_MIN,
+ CFG_BTC_BT_INTERVAL_PAGE_P2P_MAX),
+
+ REG_VARIABLE(CFG_BTC_WLAN_INTERVAL_PAGE_P2P, WLAN_PARAM_Integer,
+ hdd_config_t, coex_page_p2p_wlan_interval,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_BTC_WLAN_INTERVAL_PAGE_P2P_DEFAULT,
+ CFG_BTC_WLAN_INTERVAL_PAGE_P2P_MIN,
+ CFG_BTC_WLAN_INTERVAL_PAGE_P2P_MAX),
+/* For STA */
+ REG_VARIABLE(CFG_BTC_BT_INTERVAL_PAGE_STA, WLAN_PARAM_Integer,
+ hdd_config_t, coex_page_sta_bt_interval,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_BTC_BT_INTERVAL_PAGE_STA_DEFAULT,
+ CFG_BTC_BT_INTERVAL_PAGE_STA_MIN,
+ CFG_BTC_BT_INTERVAL_PAGE_STA_MAX),
+
+ REG_VARIABLE(CFG_BTC_WLAN_INTERVAL_PAGE_STA, WLAN_PARAM_Integer,
+ hdd_config_t, coex_page_sta_wlan_interval,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_BTC_WLAN_INTERVAL_PAGE_STA_DEFAULT,
+ CFG_BTC_WLAN_INTERVAL_PAGE_STA_MIN,
+ CFG_BTC_WLAN_INTERVAL_PAGE_STA_MAX),
+/* For SAP */
+ REG_VARIABLE(CFG_BTC_BT_INTERVAL_PAGE_SAP, WLAN_PARAM_Integer,
+ hdd_config_t, coex_page_sap_bt_interval,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_BTC_BT_INTERVAL_PAGE_SAP_DEFAULT,
+ CFG_BTC_BT_INTERVAL_PAGE_SAP_MIN,
+ CFG_BTC_BT_INTERVAL_PAGE_SAP_MAX),
+
+ REG_VARIABLE(CFG_BTC_WLAN_INTERVAL_PAGE_SAP, WLAN_PARAM_Integer,
+ hdd_config_t, coex_page_sap_wlan_interval,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_BTC_WLAN_INTERVAL_PAGE_SAP_DEFAULT,
+ CFG_BTC_WLAN_INTERVAL_PAGE_SAP_MIN,
+ CFG_BTC_WLAN_INTERVAL_PAGE_SAP_MAX),
REG_VARIABLE(CFG_INFORM_BSS_RSSI_RAW_NAME, WLAN_PARAM_Integer,
hdd_config_t, inform_bss_rssi_raw,
@@ -7490,3 +7532,50 @@ VOS_STATUS hdd_update_nss(hdd_context_t *hdd_ctx, uint8_t nss)
return (status == FALSE) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS;
}
+/**
+ * hdd_set_btc_bt_wlan_interval() - set btc bt/wlan interval page to FW
+ * @hdd_ctx: the pointer to hdd context
+ *
+ * This function set btc bt/wlan interval page (p2p/sta/sap) to FW.
+ *
+ * Return: None
+ */
+void hdd_set_btc_bt_wlan_interval(hdd_context_t *hdd_ctx)
+{
+ hdd_config_t *config = hdd_ctx->cfg_ini;
+ VOS_STATUS status = VOS_STATUS_SUCCESS;
+
+ /** Sanity check.
+ * If not set in ini file, these parameters will be zero.
+ * Otherwise hdd_apply_cfg_ini()
+ * will ensure the valuse to be in the range 20~200 (ms as unit).
+ * If no parameters sent to firmware,
+ * firmware will set relevant parameters to default value itself.
+ */
+ if ((config->coex_page_p2p_bt_interval !=0) &&
+ (config->coex_page_p2p_wlan_interval !=0)) {
+ status = sme_set_btc_bt_wlan_interval_page_p2p(
+ config->coex_page_p2p_bt_interval,
+ config->coex_page_p2p_wlan_interval);
+ if (VOS_STATUS_SUCCESS != status)
+ hddLog(LOGE, "Fail to set coex page p2p bt interval parameters");
+ }
+
+ if ((config->coex_page_sta_bt_interval !=0) &&
+ (config->coex_page_sta_wlan_interval !=0)) {
+ status = sme_set_btc_bt_wlan_interval_page_sta(
+ config->coex_page_sta_bt_interval,
+ config->coex_page_sta_wlan_interval);
+ if (VOS_STATUS_SUCCESS != status)
+ hddLog(LOGE, "Fail to set coex page sta bt interval parameters");
+ }
+
+ if ((config->coex_page_sap_bt_interval !=0) &&
+ (config->coex_page_sap_wlan_interval !=0)) {
+ status = sme_set_btc_bt_wlan_interval_page_sap(
+ config->coex_page_sap_bt_interval,
+ config->coex_page_sap_wlan_interval);
+ if (VOS_STATUS_SUCCESS != status)
+ hddLog(LOGE, "Fail to set coex page sap bt interval parameters");
+ }
+}
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index dea53577eb99..0ca392d59cf2 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -15003,6 +15003,13 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
hddLog(LOG1, FL("Registered IPv4 notifier"));
ol_pktlog_init(hif_sc);
+
+ /*
+ * Send btc page and wlan (p2p/sta/sap) interval to firmware if
+ * relevant parameters set in ini file.
+ */
+ hdd_set_btc_bt_wlan_interval(pHddCtx);
+
hdd_runtime_suspend_init(pHddCtx);
pHddCtx->isLoadInProgress = FALSE;
vos_set_load_unload_in_progress(VOS_MODULE_ID_VOSS, FALSE);
diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h
index be27dc1a171c..59fe800d2ec8 100644
--- a/CORE/MAC/src/include/sirParams.h
+++ b/CORE/MAC/src/include/sirParams.h
@@ -775,6 +775,8 @@ typedef struct sSirMbMsgP2p
#define SIR_HAL_NDP_END_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 358)
#define SIR_HAL_SEND_FREQ_RANGE_CONTROL_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 359)
+#define SIR_BTC_BT_WLAN_INTERVAL_CMD (SIR_HAL_ITC_MSG_TYPES_BEGIN + 360)
+
#define SIR_HAL_MSG_TYPES_END (SIR_HAL_MSG_TYPES_BEGIN + 0x1FF)
// CFG message types
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index 4464ec8eab1e..e709ce0300c2 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -29671,6 +29671,11 @@ VOS_STATUS wma_mc_process_msg(v_VOID_t *vos_context, vos_msg_t *msg)
case WDA_GET_FW_STATUS_REQ:
wma_send_echo_request(wma_handle);
break;
+ case WDA_BTC_BT_WLAN_INTERVAL_CMD:
+ wma_btc_set_bt_wlan_interval(wma_handle,
+ (WMI_COEX_CONFIG_CMD_fixed_param *)msg->bodyptr);
+ vos_mem_free(msg->bodyptr);
+ break;
case SIR_HAL_CONFIG_STATS_FACTOR:
wma_config_stats_factor(wma_handle,
(struct sir_stats_avg_factor *)msg->bodyptr);
@@ -35434,3 +35439,56 @@ int wma_resume_fw(void)
return ret;
}
+
+
+/**
+ * wma_btc_set_bt_wlan_interval() - send btc bt/wlan interval page to FW
+ * common function to send btc bt/wlan interval page (p2p/sta/sap)
+ * to the firmware
+ * @wma_handle: pointer to the WMA handle
+ * @interval: pointer to the WMI_COEX_CONFIG_CMD_fixed_param struct
+ *
+ * Return: 0 - success
+ */
+int wma_btc_set_bt_wlan_interval(tp_wma_handle wma_handle,
+ WMI_COEX_CONFIG_CMD_fixed_param *interval)
+{
+ int32_t ret;
+ WMI_COEX_CONFIG_CMD_fixed_param *cmd;
+ uint8_t *buf_ptr;
+ uint32_t len;
+ wmi_buf_t buf;
+
+ len = sizeof(*cmd);
+ buf = wmi_buf_alloc(wma_handle->wmi_handle, len);
+ if (!buf) {
+ WMA_LOGE(FL("wmi_buf_alloc failed"));
+ return -ENOMEM;
+ }
+
+ buf_ptr = (uint8_t *)wmi_buf_data(buf);
+ cmd = (WMI_COEX_CONFIG_CMD_fixed_param *)buf_ptr;
+ WMITLV_SET_HDR(&cmd->tlv_header,
+ WMITLV_TAG_STRUC_WMI_COEX_CONFIG_CMD_fixed_param,
+ WMITLV_GET_STRUCT_TLVLEN(WMI_COEX_CONFIG_CMD_fixed_param));
+
+ cmd->vdev_id = interval->vdev_id;
+
+ cmd->config_type= interval->config_type;
+ cmd->config_arg1 = interval->config_arg1;
+ cmd->config_arg2 = interval->config_arg2;
+
+ ret = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, len,
+ WMI_COEX_CONFIG_CMDID);
+ if (ret != EOK) {
+ WMA_LOGE(FL("Failed to set btc bt/wlan interval"));
+ wmi_buf_free(buf);
+ return -EIO;
+ }
+ WMA_LOGI("[BTC]: config_type = %d, config_arg1 = %d, config_arg2 = %d",
+ interval->config_type,
+ interval->config_arg1,
+ interval->config_arg2);
+ return 0;
+}
+
diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h
index 5c12ae14a1df..1c4ac5a55940 100644
--- a/CORE/SERVICES/WMA/wma.h
+++ b/CORE/SERVICES/WMA/wma.h
@@ -1710,6 +1710,10 @@ void wma_send_flush_logs_to_fw(tp_wma_handle wma_handle);
struct wma_txrx_node *wma_get_interface_by_vdev_id(uint8_t vdev_id);
bool wma_is_vdev_up(uint8_t vdev_id);
+int wma_btc_set_bt_wlan_interval(tp_wma_handle wma_handle,
+ WMI_COEX_CONFIG_CMD_fixed_param *interval);
+
+
int wma_crash_inject(tp_wma_handle wma_handle, uint32_t type,
uint32_t delay_time_ms);
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index 5f7e637fdf24..f20d5e51611a 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -4427,6 +4427,13 @@ eHalStatus sme_register_mgmt_frame_ind_callback(tHalHandle hal,
eHalStatus sme_update_nss(tHalHandle h_hal, uint8_t nss);
void sme_enable_phy_error_logs(tHalHandle hal, bool enable_log);
+VOS_STATUS sme_set_btc_bt_wlan_interval_page_p2p(uint32_t bt_interval,
+ uint32_t p2p_interval);
+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);
+
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 5ce457d2ed23..977cfff804b0 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -18478,6 +18478,7 @@ eHalStatus sme_delete_all_tdls_peers(tHalHandle hal, uint8_t session_id)
return status;
}
+
/**
* sme_set_beacon_filter() - set the beacon filter configuration
* @vdev_id: vdev index id
@@ -18511,13 +18512,55 @@ VOS_STATUS sme_set_beacon_filter(uint32_t vdev_id, uint32_t *ie_map)
VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
"%s: Not able to post msg to WDA!",
__func__);
-
vos_mem_free(filter_param);
+ return VOS_STATUS_E_FAILURE;
+ }
+
+ return vos_status;
+}
+
+/**
+ * sme_set_btc_bt_wlan_interval_page_p2p() - Set the btc bt/p2p interval
+ * @bt_interval: BT Page Interval
+ * @bt_interval: P2P Interval
+ *
+ * Return: Return VOS_STATUS.
+ */
+VOS_STATUS sme_set_btc_bt_wlan_interval_page_p2p(uint32_t bt_interval,
+ uint32_t p2p_interval)
+{
+ 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_PAGE_P2P_TDM;
+ sme_interval->config_arg1 = bt_interval;
+ sme_interval->config_arg2 = p2p_interval;
+
+ 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_unset_beacon_filter() - set the beacon filter configuration
* @vdev_id: vdev index id
*
@@ -18546,9 +18589,90 @@ VOS_STATUS sme_unset_beacon_filter(uint32_t vdev_id)
VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
"%s: Not able to post msg to WDA!",
__func__);
-
vos_mem_free(filter_param);
+ return VOS_STATUS_E_FAILURE;
}
+
+ return vos_status;
+}
+
+/**
+ * sme_set_btc_bt_wlan_interval_page_sta() - Set the btc bt/sta interval
+ * @bt_interval: BT Page Interval
+ * @sta_interval: STA Interval
+ *
+ * Return: Return VOS_STATUS.
+ */
+VOS_STATUS sme_set_btc_bt_wlan_interval_page_sta(uint32_t bt_interval,
+ uint32_t sta_interval)
+{
+ 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_PAGE_STA_TDM;
+ sme_interval->config_arg1 = bt_interval;
+ sme_interval->config_arg2 = sta_interval;
+
+ 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_set_btc_bt_wlan_interval_page_sap() - Set the btc bt/sap interval
+ * @bt_interval: BT Page Interval
+ * @bt_interval: SAP Interval
+ *
+ * Return: Return VOS_STATUS.
+ */
+VOS_STATUS sme_set_btc_bt_wlan_interval_page_sap(uint32_t bt_interval,
+ uint32_t sap_interval)
+{
+ 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_PAGE_SAP_TDM;
+ sme_interval->config_arg1 = bt_interval;
+ sme_interval->config_arg2 = sap_interval;
+
+ 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;
}
diff --git a/CORE/WDA/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h
index 022c0bca12aa..f969cfae4672 100644
--- a/CORE/WDA/inc/wlan_qct_wda.h
+++ b/CORE/WDA/inc/wlan_qct_wda.h
@@ -1057,6 +1057,8 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb);
#define WDA_DCC_CLEAR_STATS_CMD SIR_HAL_DCC_CLEAR_STATS_CMD
#define WDA_DCC_UPDATE_NDL_CMD SIR_HAL_DCC_UPDATE_NDL_CMD
+#define WDA_BTC_BT_WLAN_INTERVAL_CMD SIR_BTC_BT_WLAN_INTERVAL_CMD
+
#ifdef FEATURE_RUNTIME_PM
#define WDA_RUNTIME_PM_SUSPEND_IND SIR_HAL_RUNTIME_PM_SUSPEND_IND
#define WDA_RUNTIME_PM_RESUME_IND SIR_HAL_RUNTIME_PM_RESUME_IND
diff --git a/firmware_bin/WCNSS_qcom_cfg.ini b/firmware_bin/WCNSS_qcom_cfg.ini
index d064d0d6f3af..418419f15a35 100755
--- a/firmware_bin/WCNSS_qcom_cfg.ini
+++ b/firmware_bin/WCNSS_qcom_cfg.ini
@@ -661,6 +661,22 @@ gEnableFWHashCheck=1
# runtime suspend.
# This flag will take affect when Runtime PM is enabled
gRuntimePmEnableBcastPattern=0
+
+# intervals length (in ms) during WLAN P2P (single vdev) + BT Paging
+# min 20ms, max 200ms
+gBTIntervalPageP2P=30
+gWLIntervalPageP2P=30
+
+# intervals length (in ms) during WLAN STA (single vdev) + BT Paging
+# min 20ms, max 200ms
+gBTIntervalPageSTA=30
+gWLIntervalPageSTA=30
+
+# intervals length (in ms) during WLAN SAP (single vdev) + BT Paging
+# min 20ms, max 200ms
+gBTIntervalPageSAP=30
+gWLIntervalPageSAP=30
+
END
# Note: Configuration parser would not read anything past the END marker