Ver Fonte

qcacmn: Handle RADAR detect in RESTART state

If MLME gets RADAR detected event while waiting for RESTART response from
FW(RESTART_PROGRESS substate), it sets PDEV RADAR detect deferred flag.

Once VDEV SM moves from START to other state, it invokes MLME SM callback,
which checks whether “RADAR detect defer” is set.

If it is set, SM callback posts message to scheduler to notify all VDEVs on
RADAR detection.(from here, flow goes as regular radar detected event)

Change-Id: Icaa2aee900be60c12c5b38b1d199bb01ba31f722
CRs-Fixed: 2390019
Srinivas Pitla há 6 anos atrás
pai
commit
d9ad48d3ff

+ 2 - 0
umac/cmn_services/obj_mgr/inc/wlan_objmgr_pdev_obj.h

@@ -121,6 +121,8 @@
 #define WLAN_PDEV_OP_RESTART_INPROGRESS 0x00020000
    /* PDEV MBSSID VDEV restart trigger */
 #define WLAN_PDEV_OP_MBSSID_RESTART     0x00040000
+   /* RADAR DETECT Defer */
+#define WLAN_PDEV_OP_RADAR_DETECT_DEFER 0x00080000
 
 
 struct osif_pdev_priv;

+ 25 - 0
umac/mlme/include/wlan_vdev_mlme.h

@@ -452,6 +452,8 @@ enum vdev_start_resp_type {
  *                                      peer delete completion
  * @mlme_vdev_down_send:                callback to initiate actions of VDEV
  *                                      MLME down operation
+ * @mlme_vdev_notify_start_state_exit:  callback to notify on vdev start
+ *                                      start state exit
  */
 struct vdev_mlme_ops {
 	QDF_STATUS (*mlme_vdev_validate_basic_params)(
@@ -519,6 +521,8 @@ struct vdev_mlme_ops {
 	QDF_STATUS (*mlme_vdev_ext_start_rsp)(
 				struct vdev_mlme_obj *vdev_mlme,
 				struct vdev_start_response *rsp);
+	QDF_STATUS (*mlme_vdev_notify_start_state_exit)(
+				struct vdev_mlme_obj *vdev_mlme);
 };
 
 /**
@@ -986,4 +990,25 @@ static inline QDF_STATUS mlme_vdev_notify_down_complete(
 	return ret;
 }
 
+/**
+ * mlme_vdev_notify_start_state_exit - VDEV SM start state exit notification
+ * @vdev_mlme_obj:  VDEV MLME comp object
+ *
+ * API notifies on start state exit
+ *
+ * Return: SUCCESS on successful completion of notification
+ *         FAILURE, if it fails due to any
+ */
+static inline QDF_STATUS mlme_vdev_notify_start_state_exit(
+				struct vdev_mlme_obj *vdev_mlme)
+{
+	QDF_STATUS ret = QDF_STATUS_SUCCESS;
+
+	if ((vdev_mlme->ops) &&
+	    vdev_mlme->ops->mlme_vdev_notify_start_state_exit)
+		ret = vdev_mlme->ops->mlme_vdev_notify_start_state_exit(
+								vdev_mlme);
+
+	return ret;
+}
 #endif

+ 3 - 1
umac/mlme/vdev_mgr/core/src/vdev_mlme_sm.c

@@ -888,7 +888,9 @@ static void mlme_vdev_subst_start_conn_progress_entry(void *ctx)
  */
 static void mlme_vdev_subst_start_conn_progress_exit(void *ctx)
 {
-	/* NONE */
+	struct vdev_mlme_obj *vdev_mlme = (struct vdev_mlme_obj *)ctx;
+
+	mlme_vdev_notify_start_state_exit(vdev_mlme);
 }
 
 /**