qcacld-3.0: Don't send zero ITO to target

Currently, userspace sends
"QCA_NL80211_VENDOR_SUBCMD_SET_WIFI_CONFIGURATION" vendor command
for power configuration. With this vendor command, driver receives
the PS parameters which it sends it to the target. Usually,
inactivity timeout is 200ms, but in some scenario, if driver send
the inactivity timeout as zero, then it causes crash in target as
target expects non-zero value.

Scenarios:
1. Userspace updates inactivity timeout to zero.
2. For OPM mode as disable(0) or enable(1), driver updates the PS
params to zero. So, inactivity timeout is zero.

So, to fix this, return invalid if userspace send ITO value as zero
and update vdev PS params for OPM mode as user defined(2).

Change-Id: I120829f12ed350ad7ad0bfb983ad49087dea4fc8
CRs-Fixed: 3653524
This commit is contained in:
Rahul Gusain
2023-11-01 14:14:51 +05:30
committed by Ravindra Konda
parent 6154cb19ca
commit 5adb10addb
4 changed files with 109 additions and 5 deletions

View File

@@ -829,6 +829,26 @@ ucfg_pmo_set_ps_params(struct wlan_objmgr_vdev *vdev,
QDF_STATUS ucfg_pmo_get_ps_params(struct wlan_objmgr_vdev *vdev,
struct pmo_ps_params *ps_params);
/**
* ucfg_pmo_core_vdev_set_ps_opm_mode() - Set OPM mode
* @vdev: pointer to vdev object
* @opm_mode: OPM mode
*
* Return: QDF Status
*/
QDF_STATUS ucfg_pmo_core_vdev_set_ps_opm_mode(struct wlan_objmgr_vdev *vdev,
enum powersave_mode opm_mode);
/**
* ucfg_pmo_core_vdev_get_ps_opm_mode() - Get OPM mode
* @vdev: pointer to vdev object
* @opm_mode: OPM mode
*
* Return: QDF Status
*/
QDF_STATUS ucfg_pmo_core_vdev_get_ps_opm_mode(struct wlan_objmgr_vdev *vdev,
enum powersave_mode *opm_mode);
/**
* ucfg_pmo_get_gtk_rsp(): API to send gtk response request to fwr
* @vdev: objmgr vdev handle

View File

@@ -607,6 +607,18 @@ QDF_STATUS ucfg_pmo_get_ps_params(struct wlan_objmgr_vdev *vdev,
return pmo_core_vdev_get_ps_params(vdev, ps_params);
}
QDF_STATUS ucfg_pmo_core_vdev_set_ps_opm_mode(struct wlan_objmgr_vdev *vdev,
enum powersave_mode opm_mode)
{
return pmo_vdev_set_ps_opm_mode(vdev, opm_mode);
}
QDF_STATUS ucfg_pmo_core_vdev_get_ps_opm_mode(struct wlan_objmgr_vdev *vdev,
enum powersave_mode *opm_mode)
{
return pmo_vdev_get_ps_opm_mode(vdev, opm_mode);
}
bool
ucfg_pmo_is_arp_offload_enabled(struct wlan_objmgr_psoc *psoc)
{