qcacld-3.0: Don't send sta keepalive time greater than configured val
currently if bss_max_idle_period is greater than default configured value of sta_keep_alive then same value will be sent to FW. If any AP sets bss_max_idle_period to greater than sta_keep_alive then reset is not done on vdev stop due to which same value will be set for new connection. Fix is to not to send bss_max_idle_period as time period limit because same value is updated in bss_max_idle_period of interface. So, default configured value of sta_keep_alive_timer is required to be passed for threshold validation. value reset is required once vdev stop happens to avoid same keep alive even if bss_max_idle_period is not advertised by AP. CRs-Fixed: 3861815 Change-Id: I457a436a4c8a561600e93b3d5deaa0399fbd2c7d
This commit is contained in:

committed by
Ravindra Konda

parent
9c8536b86f
commit
35c8eefa9e
@@ -5002,4 +5002,27 @@ void wlan_mlme_set_keepalive_period(struct wlan_objmgr_vdev *vdev,
|
||||
* Return: Keep alive period.
|
||||
*/
|
||||
uint16_t wlan_mlme_get_keepalive_period(struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* wlan_mlme_reset_sta_keepalive_period() - Reset keep alive period to default
|
||||
* cfg whether it is set by userspace or via assoc rsp
|
||||
* @psoc: pointer to psoc object
|
||||
* @vdev: VDEV object
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void wlan_mlme_reset_sta_keepalive_period(struct wlan_objmgr_psoc *psoc,
|
||||
struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* wlan_mlme_get_sta_keep_alive_period() - get keep alive period
|
||||
* @psoc: pointer to psoc object
|
||||
* @keep_alive_period: keep alive period
|
||||
*
|
||||
* Return: QDF STATUS
|
||||
*/
|
||||
QDF_STATUS
|
||||
wlan_mlme_get_sta_keep_alive_period(struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t *keep_alive_period);
|
||||
|
||||
#endif /* _WLAN_MLME_API_H_ */
|
||||
|
@@ -8432,3 +8432,44 @@ uint16_t wlan_mlme_get_keepalive_period(struct wlan_objmgr_vdev *vdev)
|
||||
|
||||
return mlme_priv->keep_alive_period;
|
||||
}
|
||||
|
||||
void wlan_mlme_reset_sta_keepalive_period(struct wlan_objmgr_psoc *psoc,
|
||||
struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
struct wlan_mlme_psoc_ext_obj *mlme_obj;
|
||||
|
||||
mlme_obj = mlme_get_psoc_ext_obj(psoc);
|
||||
if (!mlme_obj) {
|
||||
mlme_err("invalid mlem object");
|
||||
return;
|
||||
}
|
||||
mlme_obj->cfg.sta.sta_keep_alive_period =
|
||||
cfg_default(CFG_INFRA_STA_KEEP_ALIVE_PERIOD);
|
||||
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
|
||||
if (!mlme_priv) {
|
||||
mlme_err("vdev legacy private object is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
mlme_priv->keep_alive_period =
|
||||
cfg_default(CFG_INFRA_STA_KEEP_ALIVE_PERIOD);
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_mlme_get_sta_keep_alive_period(struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t *keep_alive_period)
|
||||
{
|
||||
struct wlan_mlme_psoc_ext_obj *mlme_obj;
|
||||
|
||||
mlme_obj = mlme_get_psoc_ext_obj(psoc);
|
||||
if (!mlme_obj) {
|
||||
*keep_alive_period =
|
||||
cfg_default(CFG_INFRA_STA_KEEP_ALIVE_PERIOD);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
*keep_alive_period = mlme_obj->cfg.sta.sta_keep_alive_period;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
@@ -251,17 +251,7 @@ QDF_STATUS
|
||||
ucfg_mlme_get_sta_keep_alive_period(struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t *val)
|
||||
{
|
||||
struct wlan_mlme_psoc_ext_obj *mlme_obj;
|
||||
|
||||
mlme_obj = mlme_get_psoc_ext_obj(psoc);
|
||||
if (!mlme_obj) {
|
||||
*val = cfg_default(CFG_INFRA_STA_KEEP_ALIVE_PERIOD);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
*val = mlme_obj->cfg.sta.sta_keep_alive_period;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
return wlan_mlme_get_sta_keep_alive_period(psoc, val);
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
|
@@ -4142,7 +4142,6 @@ void wma_remove_req(tp_wma_handle wma, uint8_t vdev_id,
|
||||
* @shortSlotTimeSupported: short slot time
|
||||
* @llbCoexist: llbCoexist
|
||||
* @maxTxPower: max tx power
|
||||
* @bss_max_idle_period: BSS max idle period
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
@@ -4150,14 +4149,14 @@ static QDF_STATUS
|
||||
wma_vdev_set_bss_params(tp_wma_handle wma, int vdev_id,
|
||||
tSirMacBeaconInterval beaconInterval,
|
||||
uint8_t dtimPeriod, uint8_t shortSlotTimeSupported,
|
||||
uint8_t llbCoexist, int8_t maxTxPower,
|
||||
uint16_t bss_max_idle_period)
|
||||
uint8_t llbCoexist, int8_t maxTxPower)
|
||||
{
|
||||
uint32_t slot_time;
|
||||
struct wma_txrx_node *intr = wma->interfaces;
|
||||
struct dev_set_param setparam[MAX_VDEV_SET_BSS_PARAMS];
|
||||
uint8_t index = 0;
|
||||
enum ieee80211_protmode prot_mode;
|
||||
uint32_t keep_alive_period;
|
||||
QDF_STATUS ret;
|
||||
|
||||
ret = QDF_STATUS_E_FAILURE;
|
||||
@@ -4235,11 +4234,12 @@ wma_vdev_set_bss_params(tp_wma_handle wma, int vdev_id,
|
||||
goto error;
|
||||
}
|
||||
mlme_set_max_reg_power(intr[vdev_id].vdev, maxTxPower);
|
||||
if (bss_max_idle_period)
|
||||
wma_set_sta_keep_alive(
|
||||
wlan_mlme_get_sta_keep_alive_period(wma->psoc,
|
||||
&keep_alive_period);
|
||||
wma_set_sta_keep_alive(
|
||||
wma, vdev_id,
|
||||
SIR_KEEP_ALIVE_NULL_PKT,
|
||||
bss_max_idle_period,
|
||||
keep_alive_period,
|
||||
NULL, NULL, NULL);
|
||||
error:
|
||||
return ret;
|
||||
@@ -4394,7 +4394,7 @@ QDF_STATUS wma_post_vdev_start_setup(uint8_t vdev_id)
|
||||
mlme_obj->proto.generic.dtim_period,
|
||||
mlme_obj->proto.generic.slot_time,
|
||||
mlme_obj->proto.generic.protection_mode,
|
||||
bss_power, 0)) {
|
||||
bss_power)) {
|
||||
wma_err("Failed to set wma_vdev_set_bss_params");
|
||||
}
|
||||
|
||||
@@ -4711,8 +4711,7 @@ QDF_STATUS wma_send_peer_assoc_req(struct bss_params *add_bss)
|
||||
add_bss->dtimPeriod,
|
||||
add_bss->shortSlotTimeSupported,
|
||||
add_bss->llbCoexist,
|
||||
add_bss->maxTxPower,
|
||||
add_bss->bss_max_idle_period)) {
|
||||
add_bss->maxTxPower)) {
|
||||
wma_err("Failed to set bss params");
|
||||
}
|
||||
|
||||
@@ -5414,8 +5413,7 @@ static void wma_add_sta_req_sta_mode(tp_wma_handle wma, tpAddStaParams params)
|
||||
if (wma_vdev_set_bss_params(wma, params->smesessionId,
|
||||
iface->beaconInterval, iface->dtimPeriod,
|
||||
iface->shortSlotTimeSupported,
|
||||
iface->llbCoexist, maxTxPower,
|
||||
iface->bss_max_idle_period)) {
|
||||
iface->llbCoexist, maxTxPower)) {
|
||||
wma_err("Failed to bss params");
|
||||
}
|
||||
|
||||
|
@@ -4081,12 +4081,14 @@ QDF_STATUS wma_send_vdev_stop_to_fw(t_wma_handle *wma, uint8_t vdev_id)
|
||||
return status;
|
||||
}
|
||||
|
||||
wlan_mlme_reset_sta_keepalive_period(wma->psoc, iface->vdev);
|
||||
iface->bss_max_idle_period = 0;
|
||||
|
||||
vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(iface->vdev);
|
||||
if (!vdev_mlme) {
|
||||
wma_err("Failed to get vdev mlme obj for vdev id %d", vdev_id);
|
||||
return status;
|
||||
}
|
||||
|
||||
/*
|
||||
* Reset the dynamic nss chains config to the ini values, as when the
|
||||
* vdev gets its started again, this would be a fresh connection,
|
||||
|
Reference in New Issue
Block a user