Explorar o código

qcacld-3.0: Add vdev state machine for CSA and radar

Add vdev state machine for Channel change and to handle
radar indication.

Change-Id: Ib5a5476510ffe55611325c98dd9779261c7bd9a3
CRs-Fixed: 2316574
Abhishek Singh %!s(int64=6) %!d(string=hai) anos
pai
achega
58869c5582

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

@@ -23,8 +23,20 @@
 #define _WLAN_MLME_VDEV_MGR_INT_API_H_
 
 #ifdef CONFIG_VDEV_SM
+#include <wlan_objmgr_vdev_obj.h>
 #include "include/wlan_vdev_mlme.h"
 
+/**
+ * struct mlme_legacy_priv - VDEV MLME legacy priv object
+ * @chan_switch_in_progress: flag to indicate that channel switch is in progress
+ * @hidden_ssid_restart_in_progress: flag to indicate hidden ssid restart is
+ *                                   in progress
+ */
+struct mlme_legacy_priv {
+	bool chan_switch_in_progress;
+	bool hidden_ssid_restart_in_progress;
+};
+
 /**
  * mlme_register_vdev_mgr_ops() - Register vdev mgr ops
  * @vdev_mlme: vdev mlme object
@@ -43,5 +55,24 @@ QDF_STATUS mlme_register_vdev_mgr_ops(void *mlme);
  * Return: QDF_STATUS
  */
 QDF_STATUS mlme_unregister_vdev_mgr_ops(struct vdev_mlme_obj *vdev_mlme);
+
+/**
+ * ap_mlme_set_chan_switch_in_progress() - set mlme priv restart in progress
+ * @vdev: vdev pointer
+ * @val: value to be set
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS ap_mlme_set_chan_switch_in_progress(struct wlan_objmgr_vdev *vdev,
+					       bool val);
+
+/**
+ * ap_mlme_get_chan_switch_in_progress() - get mlme priv restart in progress
+ * @vdev: vdev pointer
+ *
+ * Return: value of mlme priv restart in progress
+ */
+bool ap_mlme_get_chan_switch_in_progress(struct wlan_objmgr_vdev *vdev);
+
 #endif
 #endif

+ 62 - 7
mlme/core/src/wlan_mlme_vdev_mgr_interface.c

@@ -18,7 +18,6 @@
 /**
  * DOC: define internal APIs related to the mlme component
  */
-#include <wlan_objmgr_vdev_obj.h>
 #include "wlan_mlme_main.h"
 #include "wlan_mlme_vdev_mgr_interface.h"
 #include "lim_utils.h"
@@ -460,20 +459,19 @@ static QDF_STATUS ap_mlme_vdev_start_req_failed(struct vdev_mlme_obj *vdev_mlme,
 }
 
 /**
- * sap_mlme_vdev_restart_send() a callback to send vdev restart
+ * ap_mlme_vdev_restart_send() a callback to send vdev restart
  * @vdev_mlme: vdev mlme object
- * @event_data_len: event data length
- * @event_data: event data
+ * @data_len: event data length
+ * @data: event data
  *
  * This function is called to initiate and send vdev restart req
  *
  * Return: QDF_STATUS
  */
 static QDF_STATUS ap_mlme_vdev_restart_send(struct vdev_mlme_obj *vdev_mlme,
-					    uint16_t event_data_len,
-					    void *event_data)
+					    uint16_t data_len, void *data)
 {
-	return QDF_STATUS_SUCCESS;
+	return lim_ap_mlme_vdev_restart_send(vdev_mlme, data_len, data);
 }
 
 static QDF_STATUS ap_mlme_vdev_stop_start_send(struct vdev_mlme_obj *vdev_mlme,
@@ -484,15 +482,72 @@ static QDF_STATUS ap_mlme_vdev_stop_start_send(struct vdev_mlme_obj *vdev_mlme,
 	return QDF_STATUS_SUCCESS;
 }
 
+QDF_STATUS ap_mlme_set_chan_switch_in_progress(struct wlan_objmgr_vdev *vdev,
+					       bool val)
+{
+	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->chan_switch_in_progress = val;
+
+	return QDF_STATUS_SUCCESS;
+}
+
+bool ap_mlme_get_chan_switch_in_progress(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->chan_switch_in_progress;
+}
+
+/**
+ * ap_mlme_vdev_legacy_hdl_create () - Create sap mlme legacy priv object
+ * @vdev_mlme: vdev mlme object
+ *
+ * Return: QDF_STATUS
+ */
 static
 QDF_STATUS ap_mlme_vdev_legacy_hdl_create(struct vdev_mlme_obj *vdev_mlme)
 {
+	vdev_mlme->legacy_vdev_ptr =
+		qdf_mem_malloc(sizeof(struct mlme_legacy_priv));
+	if (!vdev_mlme->legacy_vdev_ptr) {
+		mlme_err("failed to allocate meory for legacy_vdev_ptr");
+		return QDF_STATUS_E_NOMEM;
+	}
+
 	return QDF_STATUS_SUCCESS;
 }
 
+/**
+ * ap_mlme_vdev_legacy_hdl_destroy () - Destroy sap mlme legacy priv object
+ * @vdev_mlme: vdev mlme object
+ *
+ * Return: QDF_STATUS
+ */
 static
 QDF_STATUS ap_mlme_vdev_legacy_hdl_destroy(struct vdev_mlme_obj *vdev_mlme)
 {
+	qdf_mem_free(vdev_mlme->legacy_vdev_ptr);
+	vdev_mlme->legacy_vdev_ptr = NULL;
+
 	return QDF_STATUS_SUCCESS;
 }