瀏覽代碼

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
Jianmin Zhu 6 年之前
父節點
當前提交
d3474e05ad
共有 2 個文件被更改,包括 68 次插入0 次删除
  1. 33 0
      mlme/core/inc/wlan_mlme_vdev_mgr_interface.h
  2. 35 0
      mlme/core/src/wlan_mlme_vdev_mgr_interface.c

+ 33 - 0
mlme/core/inc/wlan_mlme_vdev_mgr_interface.h

@@ -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

+ 35 - 0
mlme/core/src/wlan_mlme_vdev_mgr_interface.c

@@ -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)
 {