qcacld-3.0: Move OPM parameters to PMO module

Store OPM parameters in PMO per vdev context.

Change-Id: I97b84171db434af0e43246d61416b37849728a6d
CRs-Fixed: 3567042
This commit is contained in:
Vishal Miskin
2023-07-05 12:14:46 +05:30
committad av Rahul Choudhary
förälder 6a7f372d75
incheckning a9c42d3d8f
14 ändrade filer med 254 tillägg och 65 borttagningar

Visa fil

@@ -35,6 +35,9 @@
#include "wlan_pmo_wow_public_struct.h"
#include "wlan_pmo_mc_addr_filtering_public_struct.h"
#define PMO_PS_DATA_INACTIVITY_TIMEOUT (200)
#define PMO_PS_DATA_SPEC_WAKE (0)
/**
* struct pmo_psoc_priv_obj - psoc related data require for pmo
* @psoc_cfg: place holder for psoc configuration
@@ -100,6 +103,7 @@ struct wlan_pmo_ctx {
* @addr_filter_pattern: addr filter pattern for vdev
* @vdev_gtk_req: place holder for gtk request for vdev
* @vdev_gtk_rsp_req: place holder for gtk response request for vdev
* @ps_params: OPM params
* @gtk_err_enable: gtk error is enabled or not
* @vdev_bpf_req: place holder for apf/bpf for vdev
* @vdev_pkt_filter: place holder for vdev packet filter
@@ -130,6 +134,7 @@ struct pmo_vdev_priv_obj {
uint8_t addr_filter_pattern;
struct pmo_gtk_req vdev_gtk_req;
struct pmo_gtk_rsp_req vdev_gtk_rsp_req;
struct pmo_ps_params ps_params;
qdf_atomic_t gtk_err_enable;
bool magic_ptrn_enable;
bool ptrn_match_enable;

Visa fil

@@ -106,6 +106,48 @@ void pmo_set_sta_wow_bitmask(uint32_t *bitmask, uint32_t wow_bitmask_size);
*/
void pmo_set_sap_wow_bitmask(uint32_t *bitmask, uint32_t wow_bitmask_size);
/**
* pmo_core_vdev_set_ps_params() - set vdev ps_params
* @vdev: objmgr vdev handle
* @ps_params: vdev OPM parameters
*
* Return: None
*/
static inline
void pmo_core_vdev_set_ps_params(struct wlan_objmgr_vdev *vdev,
struct pmo_ps_params *ps_params)
{
struct pmo_vdev_priv_obj *vdev_ctx;
vdev_ctx = pmo_vdev_get_priv(vdev);
qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
vdev_ctx->ps_params = *ps_params;
qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
}
/**
* pmo_core_vdev_get_ps_params() - get vdev ps_params
* @vdev: objmgr vdev handle
* @ps_params: pointer to get vdev ps_params
*
* Return: QDF_STATUS
*/
static inline
QDF_STATUS pmo_core_vdev_get_ps_params(struct wlan_objmgr_vdev *vdev,
struct pmo_ps_params *ps_params)
{
struct pmo_vdev_priv_obj *vdev_ctx;
vdev_ctx = pmo_vdev_get_priv(vdev);
if (!vdev_ctx)
return QDF_STATUS_E_NULL_VALUE;
qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
*ps_params = vdev_ctx->ps_params;
qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
return QDF_STATUS_SUCCESS;
}
#ifdef WLAN_FEATURE_NAN
/**
* pmo_set_ndp_wow_bitmask() - set predefined NDP wow wakeup events

Visa fil

@@ -207,7 +207,7 @@ static void pmo_configure_vdev_suspend_params(
vdev_id);
}
non_wow_inactivity_time = PS_DATA_INACTIVITY_TIMEOUT;
non_wow_inactivity_time = PMO_PS_DATA_INACTIVITY_TIMEOUT;
wow_inactivity_time = psoc_cfg->wow_data_inactivity_timeout;
/*
* To keep ito repeat count same in wow mode as in non wow mode,
@@ -244,14 +244,14 @@ static void pmo_configure_vdev_resume_params(
return;
ret = pmo_tgt_send_vdev_sta_ps_param(vdev,
pmo_sta_ps_param_inactivity_time,
PS_DATA_INACTIVITY_TIMEOUT);
vdev_ctx->ps_params.ps_ito);
if (QDF_IS_STATUS_ERROR(ret)) {
pmo_err("Failed to Set inactivity timeout vdevId %d",
vdev_id);
}
ret = pmo_tgt_send_vdev_sta_ps_param(vdev,
pmo_sta_ps_param_spec_wake_interval,
PS_DATA_SPEC_WAKE);
vdev_ctx->ps_params.spec_wake);
if (QDF_IS_STATUS_ERROR(ret)) {
pmo_err("Failed to Set wow spec wake interval vdevId %d",
vdev_id);

Visa fil

@@ -532,4 +532,17 @@ struct pmo_igmp_offload_req {
uint32_t num_grp_ip_address;
uint32_t grp_ip_address[MAX_MC_IP_ADDR];
};
/**
* struct pmo_ps_params - structure to hold OPM params
*
* @opm_mode: OPM mode
* @ps_ito: power save inactivity timeout
* @spec_wake: OPM speculative wake interval
*/
struct pmo_ps_params {
enum powersave_mode opm_mode;
uint16_t ps_ito;
uint16_t spec_wake;
};
#endif /* end of _WLAN_PMO_COMMONP_STRUCT_H_ */

Visa fil

@@ -325,6 +325,26 @@ wlan_pmo_get_interval_for_pagefault_wakeup_counts(
QDF_STATUS wlan_pmo_get_listen_interval(struct wlan_objmgr_vdev *vdev,
uint32_t *listen_interval);
/**
* wlan_pmo_set_ps_params() - Set vdev OPM params
* @vdev: pointer to vdev object
* @ps_params: pointer to OPM params
*
* Return: None
*/
void wlan_pmo_set_ps_params(struct wlan_objmgr_vdev *vdev,
struct pmo_ps_params *ps_params);
/**
* wlan_pmo_get_ps_params() - Get vdev OPM params
* @vdev: pointer to vdev object
* @ps_params: Pointer to get OPM params
*
* Return: QDF Status
*/
QDF_STATUS wlan_pmo_get_ps_params(struct wlan_objmgr_vdev *vdev,
struct pmo_ps_params *ps_params);
#else /* WLAN_POWER_MANAGEMENT_OFFLOAD */
static inline QDF_STATUS pmo_init(void)
@@ -512,6 +532,18 @@ static QDF_STATUS wlan_pmo_get_listen_interval(struct wlan_objmgr_vdev *vdev,
return QDF_STATUS_SUCCESS;
}
static inline
void wlan_pmo_set_ps_params(struct wlan_objmgr_vdev *vdev,
struct pmo_ps_params *ps_params)
{
}
static inline QDF_STATUS
wlan_pmo_get_ps_params(struct wlan_objmgr_vdev *vdev,
struct pmo_ps_params *ps_params)
{
return QDF_STATUS_SUCCESS;
}
#endif /* WLAN_POWER_MANAGEMENT_OFFLOAD */
#endif /* end of _WLAN_PMO_OBJ_MGMT_API_H_ */

Visa fil

@@ -808,6 +808,27 @@ void
ucfg_pmo_set_wow_enable(struct wlan_objmgr_psoc *psoc,
enum pmo_wow_enable_type val);
/**
* ucfg_pmo_set_ps_params() - Set vdev OPM params
* @vdev: pointer to vdev object
* @ps_params: pointer to OPM params
*
* Return: None
*/
void
ucfg_pmo_set_ps_params(struct wlan_objmgr_vdev *vdev,
struct pmo_ps_params *ps_params);
/**
* ucfg_pmo_get_ps_params() - Get vdev OPM params
* @vdev: pointer to vdev object
* @ps_params: Pointer to get OPM params
*
* Return: QDF Status
*/
QDF_STATUS ucfg_pmo_get_ps_params(struct wlan_objmgr_vdev *vdev,
struct pmo_ps_params *ps_params);
/**
* ucfg_pmo_get_gtk_rsp(): API to send gtk response request to fwr
* @vdev: objmgr vdev handle

Visa fil

@@ -285,6 +285,15 @@ QDF_STATUS pmo_vdev_object_created_notification(
vdev_ctx->pmo_psoc_ctx = psoc_ctx;
qdf_atomic_init(&vdev_ctx->gtk_err_enable);
pmo_vdev_dynamic_arp_ns_offload_init(vdev_ctx);
/*
* Update Powersave mode
* 0 - PMO_PS_ADVANCED_POWER_SAVE_DISABLE
* 1 - PMO_PS_ADVANCED_POWER_SAVE_ENABLE
* 2 - PMO_PS_ADVANCED_POWER_SAVE_USER_DEFINED
*/
vdev_ctx->ps_params.opm_mode = psoc_ctx->psoc_cfg.power_save_mode;
vdev_ctx->ps_params.ps_ito = PMO_PS_DATA_INACTIVITY_TIMEOUT;
vdev_ctx->ps_params.spec_wake = PMO_PS_DATA_SPEC_WAKE;
out:
pmo_exit();
@@ -906,3 +915,15 @@ QDF_STATUS wlan_pmo_get_listen_interval(struct wlan_objmgr_vdev *vdev,
{
return pmo_core_get_listen_interval(vdev, listen_interval);
}
void wlan_pmo_set_ps_params(struct wlan_objmgr_vdev *vdev,
struct pmo_ps_params *ps_params)
{
pmo_core_vdev_set_ps_params(vdev, ps_params);
}
QDF_STATUS wlan_pmo_get_ps_params(struct wlan_objmgr_vdev *vdev,
struct pmo_ps_params *ps_params)
{
return pmo_core_vdev_get_ps_params(vdev, ps_params);
}

Visa fil

@@ -594,6 +594,19 @@ ucfg_pmo_set_wow_enable(struct wlan_objmgr_psoc *psoc,
pmo_psoc_ctx->psoc_cfg.wow_enable = val;
}
void
ucfg_pmo_set_ps_params(struct wlan_objmgr_vdev *vdev,
struct pmo_ps_params *ps_params)
{
pmo_core_vdev_set_ps_params(vdev, ps_params);
}
QDF_STATUS ucfg_pmo_get_ps_params(struct wlan_objmgr_vdev *vdev,
struct pmo_ps_params *ps_params)
{
return pmo_core_vdev_get_ps_params(vdev, ps_params);
}
bool
ucfg_pmo_is_arp_offload_enabled(struct wlan_objmgr_psoc *psoc)
{

Visa fil

@@ -154,7 +154,7 @@ QDF_STATUS target_if_pmo_send_vdev_ps_param_req(
*/
switch (param_id) {
case pmo_sta_ps_enable_advanced_power:
param_id = WMI_STA_PS_ENABLE_QPOWER;
param_id = WMI_STA_PS_ENABLE_OPM;
break;
case pmo_sta_ps_param_inactivity_time:
param_id = WMI_STA_PS_PARAM_INACTIVITY_TIME;

Visa fil

@@ -54,12 +54,6 @@ struct mac_context;
#include "wlan_mlo_mgr_public_structs.h"
#endif
/* The ini gDataInactivityTimeout is deprecated. So, definng a new macro
* PS_DATA_INACTIVITY_TIMEOUT with the ini's default value.
*/
#define PS_DATA_INACTIVITY_TIMEOUT (200)
#define PS_DATA_SPEC_WAKE (0)
#define OFFSET_OF(structType, fldName) (&((structType *)0)->fldName)
#define WLAN_DOT11_BASIC_RATE_MASK (0x80)
#define BITS_ON(_Field, _Bitmask) ((_Field) |= (_Bitmask))

Visa fil

@@ -836,7 +836,6 @@ struct wma_wlm_stats_data {
* @vht_supp_mcs: VHT supported MCS
* @is_fw_assert: is fw asserted
* @ack_work_ctx: Context for deferred processing of TX ACK
* @powersave_mode: power save mode
* @pGetRssiReq: get RSSI request
* @get_one_peer_info: When a "get peer info" request is active, is
* the request for a single peer?
@@ -961,7 +960,6 @@ typedef struct {
uint32_t vht_supp_mcs;
uint8_t is_fw_assert;
struct wma_tx_ack_work_ctx *ack_work_ctx;
uint8_t powersave_mode;
void *pGetRssiReq;
bool get_one_peer_info;
struct qdf_mac_addr peer_macaddr;

Visa fil

@@ -95,6 +95,12 @@ struct wma_caps_per_phy {
uint32_t rx_chain_mask_5G;
};
struct wma_ps_params {
enum wmi_sta_ps_scheme_cfg opm_mode;
uint16_t ps_ito;
uint16_t spec_wake;
};
#define VDEV_CMD 1
#define PDEV_CMD 2

Visa fil

@@ -3795,15 +3795,6 @@ QDF_STATUS wma_open(struct wlan_objmgr_psoc *psoc,
goto err_dbglog_init;
}
/*
* Update Powersave mode
* 1 - Legacy Powersave + Deepsleep Disabled
* 2 - QPower + Deepsleep Disabled
* 3 - Legacy Powersave + Deepsleep Enabled
* 4 - QPower + Deepsleep Enabled
*/
wma_handle->powersave_mode =
ucfg_pmo_power_save_offload_enabled(wma_handle->psoc);
wma_handle->staMaxLIModDtim = cds_cfg->sta_maxlimod_dtim;
wma_handle->sta_max_li_mod_dtim_ms = cds_cfg->sta_maxlimod_dtim_ms;
wma_handle->staModDtim = ucfg_pmo_get_sta_mod_dtim(wma_handle->psoc);

Visa fil

@@ -459,14 +459,15 @@ static inline uint32_t wma_get_uapsd_mask(tpUapsd_Params uapsd_params)
* @wma: wma handle
* @vdev_id: vdev id
* @enable: enable/disable
* @power_config: power configuration
* @ps_param: OPM params
* @enable_ps: enable power save
*
* Return: QDF_STATUS_SUCCESS for success or error code
*/
static QDF_STATUS wma_set_force_sleep(tp_wma_handle wma,
uint32_t vdev_id,
uint8_t enable,
enum powersave_mode power_config,
struct wma_ps_params *ps_params,
bool enable_ps)
{
QDF_STATUS ret;
@@ -475,7 +476,6 @@ static QDF_STATUS wma_set_force_sleep(tp_wma_handle wma,
uint32_t rx_wake_policy;
uint32_t tx_wake_threshold;
uint32_t pspoll_count;
uint32_t inactivity_time;
uint32_t psmode;
struct wlan_objmgr_vdev *vdev;
u32 listen_interval = 0;
@@ -487,8 +487,6 @@ static QDF_STATUS wma_set_force_sleep(tp_wma_handle wma,
return QDF_STATUS_E_NOMEM;
}
inactivity_time = PS_DATA_INACTIVITY_TIMEOUT;
if (enable) {
/* override normal configuration and force station asleep */
rx_wake_policy = WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD;
@@ -522,17 +520,42 @@ static QDF_STATUS wma_set_force_sleep(tp_wma_handle wma,
* So Disable advanced power save explicitly
*/
ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id,
WMI_STA_PS_ENABLE_QPOWER,
power_config);
WMI_STA_PS_ENABLE_OPM,
ps_params->opm_mode);
if (QDF_IS_STATUS_ERROR(ret)) {
wma_err("%s(%d) Power Failed vdevId %d",
power_config ? "Enable" : "Disable",
power_config, vdev_id);
ps_params->opm_mode ? "Enable" : "Disable",
ps_params->opm_mode, vdev_id);
return ret;
}
wma_debug("Power %s(%d) vdevId %d",
power_config ? "Enabled" : "Disabled",
power_config, vdev_id);
ps_params->opm_mode ? "Enabled" : "Disabled",
ps_params->opm_mode, vdev_id);
/* Set the Tx/Rx InActivity */
ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id,
WMI_STA_PS_PARAM_INACTIVITY_TIME,
ps_params->ps_ito);
if (QDF_IS_STATUS_ERROR(ret)) {
wma_err("Setting Tx/Rx InActivity Failed vdevId %d InAct %d",
vdev_id, ps_params->ps_ito);
return ret;
}
wma_debug("Set Tx/Rx InActivity vdevId %d InAct %d",
vdev_id, ps_params->ps_ito);
ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id,
WMI_STA_PS_PARAM_SPEC_WAKE_INTERVAL,
ps_params->spec_wake);
if (QDF_IS_STATUS_ERROR(ret)) {
wma_err("Setting Spec wake Failed vdevId %d InAct %d",
vdev_id, ps_params->spec_wake);
return ret;
}
wma_debug("Set Spec wake vdevId %d InAct %d",
vdev_id, ps_params->spec_wake);
/* Set the Wake Policy to WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD */
ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id,
@@ -571,19 +594,6 @@ static QDF_STATUS wma_set_force_sleep(tp_wma_handle wma,
wma_debug("Set Ps Poll Count vdevId %d ps poll cnt %d",
vdev_id, pspoll_count);
/* Set the Tx/Rx InActivity */
ret = wma_unified_set_sta_ps_param(wma->wmi_handle, vdev_id,
WMI_STA_PS_PARAM_INACTIVITY_TIME,
inactivity_time);
if (QDF_IS_STATUS_ERROR(ret)) {
wma_err("Setting Tx/Rx InActivity Failed vdevId %d InAct %d",
vdev_id, inactivity_time);
return ret;
}
wma_debug("Set Tx/Rx InActivity vdevId %d InAct %d",
vdev_id, inactivity_time);
/* Enable Sta Mode Power save */
if (enable_ps) {
ret = wmi_unified_set_sta_ps(wma->wmi_handle, vdev_id, true);
@@ -622,20 +632,43 @@ static QDF_STATUS wma_set_force_sleep(tp_wma_handle wma,
return QDF_STATUS_SUCCESS;
}
static uint8_t wma_get_power_config(tp_wma_handle wma)
static QDF_STATUS wma_wlan_pmo_get_ps_params(struct wlan_objmgr_vdev *vdev,
struct wma_ps_params *ps_params)
{
wma_debug("POWER mode is %d", wma->powersave_mode);
struct pmo_ps_params pmo_ps_param = {0};
QDF_STATUS status;
return wma->powersave_mode;
status = wlan_pmo_get_ps_params(vdev, &pmo_ps_param);
if (QDF_IS_STATUS_ERROR(status))
return status;
switch (pmo_ps_param.opm_mode) {
case PMO_PS_ADVANCED_POWER_SAVE_DISABLE:
ps_params->opm_mode = WMI_STA_PS_OPM_CONSERVATIVE;
break;
case PMO_PS_ADVANCED_POWER_SAVE_ENABLE:
ps_params->opm_mode = WMI_STA_PS_OPM_AGGRESSIVE;
break;
case PMO_PS_ADVANCED_POWER_SAVE_USER_DEFINED:
ps_params->opm_mode = WMI_STA_PS_USER_DEF;
break;
default:
wma_err("Invalid opm_mode:%d", pmo_ps_param.opm_mode);
return QDF_STATUS_E_INVAL;
}
ps_params->ps_ito = pmo_ps_param.ps_ito;
ps_params->spec_wake = pmo_ps_param.spec_wake;
return status;
}
void wma_enable_sta_ps_mode(tpEnablePsParams ps_req)
{
uint32_t vdev_id = ps_req->sessionid;
QDF_STATUS ret;
enum powersave_mode power_config;
struct wma_txrx_node *iface;
t_wma_handle *wma_handle;
struct wma_ps_params ps_params = {0};
wma_handle = cds_get_context(QDF_MODULE_ID_WMA);
if (!wma_handle)
@@ -648,10 +681,13 @@ void wma_enable_sta_ps_mode(tpEnablePsParams ps_req)
return;
}
power_config = wma_get_power_config(wma_handle);
ret = wma_wlan_pmo_get_ps_params(iface->vdev, &ps_params);
if (QDF_IS_STATUS_ERROR(ret))
return;
if (eSIR_ADDON_NOTHING == ps_req->psSetting) {
if (power_config && iface->uapsd_cached_val) {
power_config = 0;
if (ps_params.opm_mode && iface->uapsd_cached_val) {
ps_params.opm_mode = WMI_STA_PS_OPM_CONSERVATIVE;
wma_debug("Advanced power save is disabled");
}
wma_debug("Enable Sta Mode Ps vdevId %d", vdev_id);
@@ -664,7 +700,7 @@ void wma_enable_sta_ps_mode(tpEnablePsParams ps_req)
}
ret = wma_set_force_sleep(wma_handle, vdev_id, false,
power_config, true);
&ps_params, true);
if (QDF_IS_STATUS_ERROR(ret)) {
wma_err("Enable Sta Ps Failed vdevId %d", vdev_id);
return;
@@ -693,13 +729,13 @@ void wma_enable_sta_ps_mode(tpEnablePsParams ps_req)
vdev_id, uapsd_val);
}
if (power_config && iface->uapsd_cached_val) {
power_config = 0;
if (ps_params.opm_mode && iface->uapsd_cached_val) {
ps_params.opm_mode = WMI_STA_PS_OPM_CONSERVATIVE;
wma_debug("Qpower is disabled");
}
wma_debug("Enable Forced Sleep vdevId %d", vdev_id);
ret = wma_set_force_sleep(wma_handle, vdev_id, true,
power_config, true);
&ps_params, true);
if (QDF_IS_STATUS_ERROR(ret)) {
wma_err("Enable Forced Sleep Failed vdevId %d",
@@ -782,11 +818,10 @@ QDF_STATUS wma_set_power_config(uint8_t vdev_id, enum powersave_mode power)
return QDF_STATUS_E_INVAL;
wma_info("configuring power: %d", power);
wma->powersave_mode = power;
return wma_unified_set_sta_ps_param(wma->wmi_handle,
vdev_id,
WMI_STA_PS_ENABLE_QPOWER,
wma_get_power_config(wma));
WMI_STA_PS_ENABLE_OPM,
power);
}
void wma_enable_uapsd_mode(tp_wma_handle wma, tpEnableUapsdParams ps_req)
@@ -794,7 +829,7 @@ void wma_enable_uapsd_mode(tp_wma_handle wma, tpEnableUapsdParams ps_req)
QDF_STATUS ret;
uint32_t vdev_id = ps_req->sessionid;
uint32_t uapsd_val = 0;
enum powersave_mode power_config = wma_get_power_config(wma);
struct wma_ps_params ps_params = {0};
struct wma_txrx_node *iface = &wma->interfaces[vdev_id];
if (!iface->vdev) {
@@ -802,6 +837,12 @@ void wma_enable_uapsd_mode(tp_wma_handle wma, tpEnableUapsdParams ps_req)
return;
}
ret = wma_wlan_pmo_get_ps_params(iface->vdev, &ps_params);
if (QDF_IS_STATUS_ERROR(ret)) {
wma_err("ps_param is invalid for vdev_%d", vdev_id);
return;
}
/* Disable Sta Mode Power save */
ret = wmi_unified_set_sta_ps(wma->wmi_handle, vdev_id, false);
if (QDF_IS_STATUS_ERROR(ret)) {
@@ -819,14 +860,14 @@ void wma_enable_uapsd_mode(tp_wma_handle wma, tpEnableUapsdParams ps_req)
return;
}
if (power_config && uapsd_val) {
power_config = 0;
if (ps_params.opm_mode && uapsd_val) {
ps_params.opm_mode = 0;
wma_debug("Disable power %d", vdev_id);
}
iface->uapsd_cached_val = uapsd_val;
wma_debug("Enable Forced Sleep vdevId %d", vdev_id);
ret = wma_set_force_sleep(wma, vdev_id, true,
power_config, ps_req->uapsdParams.enable_ps);
&ps_params, ps_req->uapsdParams.enable_ps);
if (QDF_IS_STATUS_ERROR(ret)) {
wma_err("Enable Forced Sleep Failed vdevId %d", vdev_id);
return;
@@ -846,10 +887,22 @@ void wma_disable_uapsd_mode(tp_wma_handle wma,
{
QDF_STATUS ret;
uint32_t vdev_id = ps_req->sessionid;
enum powersave_mode power_config = wma_get_power_config(wma);
struct wma_ps_params ps_params = {0};
struct wma_txrx_node *iface = &wma->interfaces[vdev_id];
if (!iface->vdev) {
wma_err("vdev is null for vdev_%d", vdev_id);
return;
}
wma_debug("Disable Uapsd vdevId %d", vdev_id);
ret = wma_wlan_pmo_get_ps_params(iface->vdev, &ps_params);
if (QDF_IS_STATUS_ERROR(ret)) {
wma_err("ps_param is invalid for vdev_%d", vdev_id);
return;
}
/* Disable Sta Mode Power save */
ret = wmi_unified_set_sta_ps(wma->wmi_handle, vdev_id, false);
if (QDF_IS_STATUS_ERROR(ret)) {
@@ -866,7 +919,7 @@ void wma_disable_uapsd_mode(tp_wma_handle wma,
/* Re enable Sta Mode Powersave with proper configuration */
ret = wma_set_force_sleep(wma, vdev_id, false,
power_config, true);
&ps_params, true);
if (QDF_IS_STATUS_ERROR(ret)) {
wma_err("Disable Forced Sleep Failed vdevId %d", vdev_id);
return;