diff options
| author | c_zding <c_zding@qti.qualcomm.com> | 2016-02-18 18:36:52 +0800 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2016-03-29 11:58:48 +0530 |
| commit | f23cbc6b09b8ba0f5c574c9ffb9161424e4c9086 (patch) | |
| tree | f4005a3f6303d8bfcea7aeaedcf7ac1db14a2241 | |
| parent | 6258d7865b4d336daca097f42ca6f963e96e6f34 (diff) | |
qcacld-2.0: Add API to configure the period or ratio between BT and WLAN
Add API to configure the period or ratio between BT and WLAN.
Several parameters which needed depending on the use case.
1) BT Paging/Page Scan.
2) A2DP.
3) BT Inquiry/Inquiry Scan.
4) Etc. (depends on current implementation of supported use case.)
Change-Id: I4cbe8308a66088b48a93c7582d658b655b584553
CRs-Fixed: 970861
| -rw-r--r-- | CORE/HDD/inc/wlan_hdd_cfg.h | 75 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg.c | 89 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_main.c | 7 | ||||
| -rw-r--r-- | CORE/MAC/src/include/sirParams.h | 2 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.c | 58 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.h | 4 | ||||
| -rw-r--r-- | CORE/SME/inc/sme_Api.h | 7 | ||||
| -rw-r--r-- | CORE/SME/src/sme_common/sme_Api.c | 128 | ||||
| -rw-r--r-- | CORE/WDA/inc/wlan_qct_wda.h | 2 | ||||
| -rwxr-xr-x | firmware_bin/WCNSS_qcom_cfg.ini | 16 |
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 |
