|
@@ -1756,6 +1756,7 @@ QDF_STATUS wma_set_smps_params(tp_wma_handle wma, uint8_t vdev_id,
|
|
|
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)) {
|
|
@@ -1764,6 +1765,13 @@ static void wma_set_vdev_suspend_dtim(tp_wma_handle wma, uint8_t vdev_id)
|
|
|
uint32_t max_mod_dtim;
|
|
|
uint32_t beacon_interval_mod;
|
|
|
|
|
|
+ /* get mac to acess 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) &&
|
|
@@ -1798,12 +1806,20 @@ static void wma_set_vdev_suspend_dtim(tp_wma_handle wma, uint8_t vdev_id)
|
|
|
(max_mod_dtim * iface->dtimPeriod);
|
|
|
}
|
|
|
} else {
|
|
|
- return;
|
|
|
+ /* Set Listen Interval */
|
|
|
+ if ((wlan_cfg_get_int(mac, WNI_CFG_LISTEN_INTERVAL,
|
|
|
+ &cfg_data_val) != eSIR_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);
|
|
|
+ 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",
|
|
@@ -1813,6 +1829,22 @@ static void wma_set_vdev_suspend_dtim(tp_wma_handle wma, uint8_t vdev_id)
|
|
|
WMA_LOGD("Set Listen Interval vdevId %d Listen Intv %d",
|
|
|
vdev_id, listen_interval);
|
|
|
|
|
|
+ if (wlan_cfg_get_int(mac,
|
|
|
+ WNI_CFG_PS_WOW_DATA_INACTIVITY_TIMEOUT,
|
|
|
+ &cfg_data_val) != eSIR_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__);
|
|
|
+
|
|
|
iface->restore_dtim_setting = true;
|
|
|
}
|
|
|
}
|
|
@@ -1850,6 +1882,7 @@ void wma_set_suspend_dtim(tp_wma_handle wma)
|
|
|
static void wma_set_vdev_resume_dtim(tp_wma_handle wma, uint8_t vdev_id)
|
|
|
{
|
|
|
struct wma_txrx_node *iface = &wma->interfaces[vdev_id];
|
|
|
+ uint32_t inactivity_time;
|
|
|
|
|
|
if ((iface->type == WMI_VDEV_TYPE_STA) &&
|
|
|
(iface->restore_dtim_setting)) {
|
|
@@ -1881,6 +1914,31 @@ static void wma_set_vdev_resume_dtim(tp_wma_handle wma, uint8_t vdev_id)
|
|
|
WMA_LOGD("Set Listen Interval vdevId %d Listen Intv %d",
|
|
|
vdev_id, cfg_data_val);
|
|
|
|
|
|
+ if (wlan_cfg_get_int(mac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
|
|
|
+ &cfg_data_val) != eSIR_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;
|
|
|
+ }
|
|
|
+
|
|
|
+ inactivity_time = (u_int32_t)cfg_data_val;
|
|
|
+ WMA_LOGD("%s: Setting InActivity time %d.", __func__,
|
|
|
+ inactivity_time);
|
|
|
+ ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id,
|
|
|
+ WMI_STA_PS_PARAM_INACTIVITY_TIME,
|
|
|
+ inactivity_time);
|
|
|
+ if (ret)
|
|
|
+ WMA_LOGE("%s: Setting InActivity time Failed.",
|
|
|
+ __func__);
|
|
|
+
|
|
|
+ if (wlan_cfg_get_int(mac, WNI_CFG_MAX_PS_POLL,
|
|
|
+ &cfg_data_val) != eSIR_SUCCESS) {
|
|
|
+ QDF_TRACE(QDF_MODULE_ID_WMA,
|
|
|
+ QDF_TRACE_LEVEL_ERROR,
|
|
|
+ "Failed to get value for WNI_CFG_MAX_PS_POLL");
|
|
|
+ cfg_data_val = 0;
|
|
|
+ }
|
|
|
+
|
|
|
iface->restore_dtim_setting = false;
|
|
|
|
|
|
}
|