qcacld-3.0: Implement LFR2 and reassoc for new vdev SM

LFR2 uses ft reassoc, whose process is different from general
connect.

1.ft reassoc, normal reassoc and assoc, all of 3 need deliver
event WLAN_VDEV_SM_EV_START to SM,  but need different handler.

2.ft reassoc send vdev start when add bss, not switch channel.

Change-Id: Ieefbcf0a28867be3c8a86d9a912143857c54fe06
CRs-Fixed: 2334194
This commit is contained in:
Jianmin Zhu
2018-10-15 15:36:10 +08:00
committed by nshrivas
orang tua 0079d3e2b1
melakukan d3474e05ad
2 mengubah file dengan 68 tambahan dan 0 penghapusan

Melihat File

@@ -26,6 +26,18 @@
#include <wlan_objmgr_vdev_obj.h>
#include "include/wlan_vdev_mlme.h"
/**
* enum vdev_assoc_type - VDEV associate/reassociate type
* @VDEV_ASSOC: associate
* @VDEV_REASSOC: reassociate
* @VDEV_FT_REASSOC: fast reassociate
*/
enum vdev_assoc_type {
VDEV_ASSOC,
VDEV_REASSOC,
VDEV_FT_REASSOC
};
/**
* struct mlme_legacy_priv - VDEV MLME legacy priv object
* @chan_switch_in_progress: flag to indicate that channel switch is in progress
@@ -33,12 +45,14 @@
* in progress
* @vdev_start_failed: flag to indicate that vdev start failed.
* @connection_fail: flag to indicate connection failed
* @assoc_type: vdev associate/reassociate type
*/
struct mlme_legacy_priv {
bool chan_switch_in_progress;
bool hidden_ssid_restart_in_progress;
bool vdev_start_failed;
bool connection_fail;
enum vdev_assoc_type assoc_type;
};
/**
@@ -144,5 +158,24 @@ bool mlme_get_vdev_start_failed(struct wlan_objmgr_vdev *vdev);
* Return: true or false
*/
bool mlme_is_vdev_in_beaconning_mode(enum QDF_OPMODE vdev_opmode);
/**
* mlme_set_assoc_type() - set associate type
* @vdev: vdev pointer
* @assoc_type: type to be set
*
* Return: QDF_STATUS
*/
QDF_STATUS mlme_set_assoc_type(struct wlan_objmgr_vdev *vdev,
enum vdev_assoc_type assoc_type);
/**
* mlme_get_assoc_type() - get associate type
* @vdev: vdev pointer
*
* Return: associate type
*/
enum vdev_assoc_type mlme_get_assoc_type(struct wlan_objmgr_vdev *vdev);
#endif
#endif

Melihat File

@@ -541,6 +541,41 @@ bool mlme_is_connection_fail(struct wlan_objmgr_vdev *vdev)
return mlme_priv->connection_fail;
}
QDF_STATUS mlme_set_assoc_type(struct wlan_objmgr_vdev *vdev,
enum vdev_assoc_type assoc_type)
{
struct vdev_mlme_obj *vdev_mlme;
struct mlme_legacy_priv *mlme_priv;
vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
if (!vdev_mlme) {
mlme_err("vdev component object is NULL");
return QDF_STATUS_E_FAILURE;
}
mlme_priv = (struct mlme_legacy_priv *)vdev_mlme->legacy_vdev_ptr;
mlme_priv->assoc_type = assoc_type;
return QDF_STATUS_SUCCESS;
}
enum vdev_assoc_type mlme_get_assoc_type(struct wlan_objmgr_vdev *vdev)
{
struct vdev_mlme_obj *vdev_mlme;
struct mlme_legacy_priv *mlme_priv;
vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
if (!vdev_mlme) {
mlme_err("vdev component object is NULL");
return false;
}
mlme_priv = (struct mlme_legacy_priv *)vdev_mlme->legacy_vdev_ptr;
return mlme_priv->assoc_type;
}
QDF_STATUS
mlme_set_vdev_start_failed(struct wlan_objmgr_vdev *vdev, bool val)
{