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.
|
* Return: Keep alive period.
|
||||||
*/
|
*/
|
||||||
uint16_t wlan_mlme_get_keepalive_period(struct wlan_objmgr_vdev *vdev);
|
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_ */
|
#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;
|
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,
|
ucfg_mlme_get_sta_keep_alive_period(struct wlan_objmgr_psoc *psoc,
|
||||||
uint32_t *val)
|
uint32_t *val)
|
||||||
{
|
{
|
||||||
struct wlan_mlme_psoc_ext_obj *mlme_obj;
|
return wlan_mlme_get_sta_keep_alive_period(psoc, val);
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
|
@@ -4142,7 +4142,6 @@ void wma_remove_req(tp_wma_handle wma, uint8_t vdev_id,
|
|||||||
* @shortSlotTimeSupported: short slot time
|
* @shortSlotTimeSupported: short slot time
|
||||||
* @llbCoexist: llbCoexist
|
* @llbCoexist: llbCoexist
|
||||||
* @maxTxPower: max tx power
|
* @maxTxPower: max tx power
|
||||||
* @bss_max_idle_period: BSS max idle period
|
|
||||||
*
|
*
|
||||||
* Return: QDF_STATUS
|
* Return: QDF_STATUS
|
||||||
*/
|
*/
|
||||||
@@ -4150,14 +4149,14 @@ static QDF_STATUS
|
|||||||
wma_vdev_set_bss_params(tp_wma_handle wma, int vdev_id,
|
wma_vdev_set_bss_params(tp_wma_handle wma, int vdev_id,
|
||||||
tSirMacBeaconInterval beaconInterval,
|
tSirMacBeaconInterval beaconInterval,
|
||||||
uint8_t dtimPeriod, uint8_t shortSlotTimeSupported,
|
uint8_t dtimPeriod, uint8_t shortSlotTimeSupported,
|
||||||
uint8_t llbCoexist, int8_t maxTxPower,
|
uint8_t llbCoexist, int8_t maxTxPower)
|
||||||
uint16_t bss_max_idle_period)
|
|
||||||
{
|
{
|
||||||
uint32_t slot_time;
|
uint32_t slot_time;
|
||||||
struct wma_txrx_node *intr = wma->interfaces;
|
struct wma_txrx_node *intr = wma->interfaces;
|
||||||
struct dev_set_param setparam[MAX_VDEV_SET_BSS_PARAMS];
|
struct dev_set_param setparam[MAX_VDEV_SET_BSS_PARAMS];
|
||||||
uint8_t index = 0;
|
uint8_t index = 0;
|
||||||
enum ieee80211_protmode prot_mode;
|
enum ieee80211_protmode prot_mode;
|
||||||
|
uint32_t keep_alive_period;
|
||||||
QDF_STATUS ret;
|
QDF_STATUS ret;
|
||||||
|
|
||||||
ret = QDF_STATUS_E_FAILURE;
|
ret = QDF_STATUS_E_FAILURE;
|
||||||
@@ -4235,11 +4234,12 @@ wma_vdev_set_bss_params(tp_wma_handle wma, int vdev_id,
|
|||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
mlme_set_max_reg_power(intr[vdev_id].vdev, maxTxPower);
|
mlme_set_max_reg_power(intr[vdev_id].vdev, maxTxPower);
|
||||||
if (bss_max_idle_period)
|
wlan_mlme_get_sta_keep_alive_period(wma->psoc,
|
||||||
wma_set_sta_keep_alive(
|
&keep_alive_period);
|
||||||
|
wma_set_sta_keep_alive(
|
||||||
wma, vdev_id,
|
wma, vdev_id,
|
||||||
SIR_KEEP_ALIVE_NULL_PKT,
|
SIR_KEEP_ALIVE_NULL_PKT,
|
||||||
bss_max_idle_period,
|
keep_alive_period,
|
||||||
NULL, NULL, NULL);
|
NULL, NULL, NULL);
|
||||||
error:
|
error:
|
||||||
return ret;
|
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.dtim_period,
|
||||||
mlme_obj->proto.generic.slot_time,
|
mlme_obj->proto.generic.slot_time,
|
||||||
mlme_obj->proto.generic.protection_mode,
|
mlme_obj->proto.generic.protection_mode,
|
||||||
bss_power, 0)) {
|
bss_power)) {
|
||||||
wma_err("Failed to set wma_vdev_set_bss_params");
|
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->dtimPeriod,
|
||||||
add_bss->shortSlotTimeSupported,
|
add_bss->shortSlotTimeSupported,
|
||||||
add_bss->llbCoexist,
|
add_bss->llbCoexist,
|
||||||
add_bss->maxTxPower,
|
add_bss->maxTxPower)) {
|
||||||
add_bss->bss_max_idle_period)) {
|
|
||||||
wma_err("Failed to set bss params");
|
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,
|
if (wma_vdev_set_bss_params(wma, params->smesessionId,
|
||||||
iface->beaconInterval, iface->dtimPeriod,
|
iface->beaconInterval, iface->dtimPeriod,
|
||||||
iface->shortSlotTimeSupported,
|
iface->shortSlotTimeSupported,
|
||||||
iface->llbCoexist, maxTxPower,
|
iface->llbCoexist, maxTxPower)) {
|
||||||
iface->bss_max_idle_period)) {
|
|
||||||
wma_err("Failed to bss params");
|
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;
|
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);
|
vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(iface->vdev);
|
||||||
if (!vdev_mlme) {
|
if (!vdev_mlme) {
|
||||||
wma_err("Failed to get vdev mlme obj for vdev id %d", vdev_id);
|
wma_err("Failed to get vdev mlme obj for vdev id %d", vdev_id);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Reset the dynamic nss chains config to the ini values, as when the
|
* Reset the dynamic nss chains config to the ini values, as when the
|
||||||
* vdev gets its started again, this would be a fresh connection,
|
* vdev gets its started again, this would be a fresh connection,
|
||||||
|
Reference in New Issue
Block a user