|
@@ -1690,325 +1690,6 @@ QDF_STATUS wma_set_smps_params(tp_wma_handle wma, uint8_t vdev_id,
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * wma_configure_vdev_suspend_params() - set suspend related parameters in fw
|
|
|
- * @wma: wma handle
|
|
|
- * @vdev_id: vdev id
|
|
|
- *
|
|
|
- * Return: none
|
|
|
- */
|
|
|
-static void wma_configure_vdev_suspend_params(tp_wma_handle wma,
|
|
|
- uint8_t vdev_id)
|
|
|
-{
|
|
|
- uint32_t cfg_data_val = 0;
|
|
|
- struct wma_txrx_node *iface = &wma->interfaces[vdev_id];
|
|
|
- struct sAniSirGlobal *mac;
|
|
|
- QDF_STATUS ret;
|
|
|
- uint8_t ito_repeat_count_value = 0;
|
|
|
- uint32_t inactivity_time;
|
|
|
-
|
|
|
- if (iface->type != WMI_VDEV_TYPE_STA)
|
|
|
- return;
|
|
|
-
|
|
|
- mac = cds_get_context(QDF_MODULE_ID_PE);
|
|
|
- if (!mac) {
|
|
|
- WMA_LOGE(FL("Failed to get mac context"));
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- if (wlan_cfg_get_int(mac,
|
|
|
- WNI_CFG_PS_WOW_DATA_INACTIVITY_TIMEOUT,
|
|
|
- &cfg_data_val) != QDF_STATUS_SUCCESS) {
|
|
|
- QDF_TRACE(QDF_MODULE_ID_WMA, QDF_TRACE_LEVEL_ERROR,
|
|
|
- "Can't get WNI_CFG_PS_WOW_DATA_INACTIVITY_TO");
|
|
|
- cfg_data_val = WOW_POWERSAVE_DEFAULT_INACTIVITY_TIME;
|
|
|
- }
|
|
|
-
|
|
|
- WMA_LOGD("%s: Set inactivity_time for wow: %d", __func__,
|
|
|
- cfg_data_val);
|
|
|
- ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id,
|
|
|
- WMI_STA_PS_PARAM_INACTIVITY_TIME, cfg_data_val);
|
|
|
- if (ret)
|
|
|
- WMA_LOGE("%s: Setting InActivity time Failed.",
|
|
|
- __func__);
|
|
|
-
|
|
|
- if (wlan_cfg_get_int(mac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
|
|
|
- &inactivity_time) != QDF_STATUS_SUCCESS) {
|
|
|
- QDF_TRACE(QDF_MODULE_ID_WMA, QDF_TRACE_LEVEL_ERROR,
|
|
|
- "Failed to get WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
|
|
|
- inactivity_time = POWERSAVE_DEFAULT_INACTIVITY_TIME;
|
|
|
- }
|
|
|
-
|
|
|
- /*
|
|
|
- * To keep ito repeat count same in wow mode as in non wow mode,
|
|
|
- * modulating ito repeat count value.
|
|
|
- */
|
|
|
- ito_repeat_count_value = (inactivity_time / cfg_data_val) *
|
|
|
- wma->ito_repeat_count;
|
|
|
-
|
|
|
- if (ito_repeat_count_value) {
|
|
|
- ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id,
|
|
|
- WMI_STA_PS_PARAM_MAX_RESET_ITO_COUNT_ON_TIM_NO_TXRX,
|
|
|
- ito_repeat_count_value);
|
|
|
- WMA_LOGD("%s: Setting ito_repeat_count_value %d.", __func__,
|
|
|
- ito_repeat_count_value);
|
|
|
-
|
|
|
- if (ret)
|
|
|
- WMA_LOGE("%s: Setting ITO count failed.", __func__);
|
|
|
- }
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * wma_set_vdev_suspend_dtim() - set suspend dtim parameters in fw
|
|
|
- * @wma: wma handle
|
|
|
- * @vdev_id: vdev id
|
|
|
- *
|
|
|
- * Return: none
|
|
|
- */
|
|
|
-static void wma_set_vdev_suspend_dtim(tp_wma_handle wma, uint8_t vdev_id)
|
|
|
-{
|
|
|
- struct wma_txrx_node *iface = &wma->interfaces[vdev_id];
|
|
|
- uint32_t cfg_data_val = 0;
|
|
|
-
|
|
|
- if ((iface->type == WMI_VDEV_TYPE_STA) &&
|
|
|
- (iface->dtimPeriod != 0)) {
|
|
|
- QDF_STATUS ret;
|
|
|
- uint32_t listen_interval;
|
|
|
- uint32_t max_mod_dtim;
|
|
|
- uint32_t beacon_interval_mod;
|
|
|
-
|
|
|
- /* get mac to access CFG data base */
|
|
|
- struct sAniSirGlobal *mac = cds_get_context(QDF_MODULE_ID_PE);
|
|
|
-
|
|
|
- if (!mac) {
|
|
|
- WMA_LOGE(FL("Failed to get mac context"));
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- if (wma->staDynamicDtim) {
|
|
|
- listen_interval = wma->staDynamicDtim;
|
|
|
- } else if ((wma->staModDtim) &&
|
|
|
- (wma->staMaxLIModDtim)) {
|
|
|
- /*
|
|
|
- * When the system is in suspend
|
|
|
- * (maximum beacon will be at 1s == 10)
|
|
|
- * If maxModulatedDTIM ((MAX_LI_VAL = 10) / AP_DTIM)
|
|
|
- * equal or larger than MDTIM
|
|
|
- * (configured in WCNSS_qcom_cfg.ini)
|
|
|
- * Set LI to MDTIM * AP_DTIM
|
|
|
- * If Dtim = 2 and Mdtim = 2 then LI is 4
|
|
|
- * Else
|
|
|
- * Set LI to maxModulatedDTIM * AP_DTIM
|
|
|
- */
|
|
|
-
|
|
|
- beacon_interval_mod = iface->beaconInterval / 100;
|
|
|
- if (beacon_interval_mod == 0)
|
|
|
- beacon_interval_mod = 1;
|
|
|
-
|
|
|
- max_mod_dtim = wma->staMaxLIModDtim
|
|
|
- / (iface->dtimPeriod*beacon_interval_mod);
|
|
|
-
|
|
|
- if (max_mod_dtim <= 0)
|
|
|
- max_mod_dtim = 1;
|
|
|
-
|
|
|
- if (max_mod_dtim >= wma->staModDtim) {
|
|
|
- listen_interval =
|
|
|
- (wma->staModDtim * iface->dtimPeriod);
|
|
|
- } else {
|
|
|
- listen_interval =
|
|
|
- (max_mod_dtim * iface->dtimPeriod);
|
|
|
- }
|
|
|
- } else {
|
|
|
- /* Set Listen Interval */
|
|
|
- if ((wlan_cfg_get_int(mac, WNI_CFG_LISTEN_INTERVAL,
|
|
|
- &cfg_data_val) != QDF_STATUS_SUCCESS)) {
|
|
|
- QDF_TRACE(QDF_MODULE_ID_WMA,
|
|
|
- QDF_TRACE_LEVEL_ERROR,
|
|
|
- "Failed to listen interval");
|
|
|
- cfg_data_val =
|
|
|
- POWERSAVE_DEFAULT_LISTEN_INTERVAL;
|
|
|
- }
|
|
|
- listen_interval = cfg_data_val;
|
|
|
- }
|
|
|
- ret = wma_vdev_set_param(wma->wmi_handle, vdev_id,
|
|
|
- WMI_VDEV_PARAM_LISTEN_INTERVAL,
|
|
|
- listen_interval);
|
|
|
- if (QDF_IS_STATUS_ERROR(ret)) {
|
|
|
- /* Even it fails continue Fw will take default LI */
|
|
|
- WMA_LOGE("Failed to Set Listen Interval vdevId %d",
|
|
|
- vdev_id);
|
|
|
- }
|
|
|
-
|
|
|
- WMA_LOGD("%s: Set Listen Interval vdevId %d Listen Intv %d",
|
|
|
- __func__, vdev_id, listen_interval);
|
|
|
-
|
|
|
- iface->restore_dtim_setting = true;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
- * wma_is_user_set_li_params() - Check LI related params are set by user or not
|
|
|
- * @iface: wma vdev handle
|
|
|
- *
|
|
|
- * Return: 1 if true else 0
|
|
|
- */
|
|
|
-static inline uint8_t wma_is_user_set_li_params(struct wma_txrx_node *iface)
|
|
|
-{
|
|
|
- return iface->alt_modulated_dtim_enabled || iface->override_li ? 1 : 0;
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * wma_set_suspend_dtim() - set suspend dtim
|
|
|
- * @wma: wma handle
|
|
|
- *
|
|
|
- * Return: none
|
|
|
- */
|
|
|
-void wma_set_suspend_dtim(tp_wma_handle wma)
|
|
|
-{
|
|
|
- uint8_t i;
|
|
|
- bool li_offload_support = false;
|
|
|
-
|
|
|
- if (NULL == wma) {
|
|
|
- WMA_LOGE("%s: wma is NULL", __func__);
|
|
|
- return;
|
|
|
- }
|
|
|
- if (WMI_SERVICE_EXT_IS_ENABLED(wma->wmi_service_bitmap,
|
|
|
- wma->wmi_service_ext_bitmap,
|
|
|
- WMI_SERVICE_LISTEN_INTERVAL_OFFLOAD_SUPPORT)) {
|
|
|
- WMA_LOGD("%s: listen interval support is enabled", __func__);
|
|
|
- li_offload_support = true;
|
|
|
- }
|
|
|
-
|
|
|
- for (i = 0; i < wma->max_bssid; i++) {
|
|
|
- if (wma->interfaces[i].handle) {
|
|
|
- if (!wma_is_user_set_li_params(&wma->interfaces[i]) &&
|
|
|
- !li_offload_support)
|
|
|
- wma_set_vdev_suspend_dtim(wma, i);
|
|
|
- wma_configure_vdev_suspend_params(wma, i);
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * wma_configure_vdev_resume_params() - set resume related parameters in fw
|
|
|
- * @wma: wma handle
|
|
|
- * @vdev_id: vdev id
|
|
|
- *
|
|
|
- * Return: none
|
|
|
- */
|
|
|
-static void wma_configure_vdev_resume_params(tp_wma_handle wma, uint8_t vdev_id)
|
|
|
-{
|
|
|
- struct wma_txrx_node *iface = &wma->interfaces[vdev_id];
|
|
|
- u_int32_t cfg_data_val;
|
|
|
- struct sAniSirGlobal *mac;
|
|
|
- QDF_STATUS ret;
|
|
|
-
|
|
|
- if (iface->type != WMI_VDEV_TYPE_STA)
|
|
|
- return;
|
|
|
-
|
|
|
- mac = cds_get_context(QDF_MODULE_ID_PE);
|
|
|
- if (!mac) {
|
|
|
- WMA_LOGE(FL("Failed to get mac context"));
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- if (wlan_cfg_get_int(mac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
|
|
|
- &cfg_data_val) != QDF_STATUS_SUCCESS) {
|
|
|
- QDF_TRACE(QDF_MODULE_ID_WMA, QDF_TRACE_LEVEL_ERROR,
|
|
|
- "Failed to get WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
|
|
|
- cfg_data_val = POWERSAVE_DEFAULT_INACTIVITY_TIME;
|
|
|
- }
|
|
|
-
|
|
|
- WMA_LOGD("%s: Setting InActivity time %d.", __func__, cfg_data_val);
|
|
|
- ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id,
|
|
|
- WMI_STA_PS_PARAM_INACTIVITY_TIME,
|
|
|
- cfg_data_val);
|
|
|
- if (ret)
|
|
|
- WMA_LOGE("%s: Setting InActivity time Failed.",
|
|
|
- __func__);
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * wma_set_vdev_resume_dtim() - set resume dtim parameters in fw
|
|
|
- * @wma: wma handle
|
|
|
- * @vdev_id: vdev id
|
|
|
- *
|
|
|
- * Return: none
|
|
|
- */
|
|
|
-static void wma_set_vdev_resume_dtim(tp_wma_handle wma, uint8_t vdev_id)
|
|
|
-{
|
|
|
- struct wma_txrx_node *iface = &wma->interfaces[vdev_id];
|
|
|
-
|
|
|
- if ((iface->type == WMI_VDEV_TYPE_STA) &&
|
|
|
- (iface->restore_dtim_setting)) {
|
|
|
- QDF_STATUS ret;
|
|
|
- uint32_t cfg_data_val = 0;
|
|
|
- /* get mac to access CFG data base */
|
|
|
- struct sAniSirGlobal *mac = cds_get_context(QDF_MODULE_ID_PE);
|
|
|
-
|
|
|
- if (!mac) {
|
|
|
- WMA_LOGE(FL("Failed to get mac context"));
|
|
|
- return;
|
|
|
- }
|
|
|
- /* Set Listen Interval */
|
|
|
- if ((wlan_cfg_get_int(mac, WNI_CFG_LISTEN_INTERVAL,
|
|
|
- &cfg_data_val) != QDF_STATUS_SUCCESS)) {
|
|
|
- QDF_TRACE(QDF_MODULE_ID_WMA, QDF_TRACE_LEVEL_ERROR,
|
|
|
- "Failed to get value for listen interval");
|
|
|
- cfg_data_val = POWERSAVE_DEFAULT_LISTEN_INTERVAL;
|
|
|
- }
|
|
|
-
|
|
|
- ret = wma_vdev_set_param(wma->wmi_handle, vdev_id,
|
|
|
- WMI_VDEV_PARAM_LISTEN_INTERVAL,
|
|
|
- cfg_data_val);
|
|
|
- if (QDF_IS_STATUS_ERROR(ret)) {
|
|
|
- /* Even it fails continue Fw will take default LI */
|
|
|
- WMA_LOGE("Failed to Set Listen Interval vdevId %d",
|
|
|
- vdev_id);
|
|
|
- }
|
|
|
-
|
|
|
- WMA_LOGD("%s: Set Listen Interval vdevId %d Listen Intv %d",
|
|
|
- __func__, vdev_id, cfg_data_val);
|
|
|
-
|
|
|
- iface->restore_dtim_setting = false;
|
|
|
-
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * wma_set_resume_dtim() - set resume dtim
|
|
|
- * @wma: wma handle
|
|
|
- *
|
|
|
- * Return: none
|
|
|
- */
|
|
|
-void wma_set_resume_dtim(tp_wma_handle wma)
|
|
|
-{
|
|
|
- uint8_t i;
|
|
|
- bool li_offload_support = false;
|
|
|
-
|
|
|
- if (NULL == wma) {
|
|
|
- WMA_LOGE("%s: wma is NULL", __func__);
|
|
|
- return;
|
|
|
- }
|
|
|
- if (WMI_SERVICE_EXT_IS_ENABLED(wma->wmi_service_bitmap,
|
|
|
- wma->wmi_service_ext_bitmap,
|
|
|
- WMI_SERVICE_LISTEN_INTERVAL_OFFLOAD_SUPPORT)) {
|
|
|
- WMA_LOGD("%s: listen interval support is enabled", __func__);
|
|
|
- li_offload_support = true;
|
|
|
- }
|
|
|
-
|
|
|
- for (i = 0; i < wma->max_bssid; i++) {
|
|
|
- if (wma->interfaces[i].handle) {
|
|
|
- if (!wma_is_user_set_li_params(&wma->interfaces[i]) &&
|
|
|
- !li_offload_support)
|
|
|
- wma_set_vdev_resume_dtim(wma, i);
|
|
|
- wma_configure_vdev_resume_params(wma, i);
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* wma_set_tx_power_scale() - set tx power scale
|
|
|
* @vdev_id: vdev id
|