ソースを参照

qcacmn: Send connect/disconnect response for flushed connect/disconnect

Send connect/disconnect response for flushed connect/disconnect

Change-Id: I23df9c249bdcba0530dcee33c2a09534869815b0
CRs-Fixed: 3008838
Vivek 3 年 前
コミット
a32acb5027

+ 16 - 8
umac/mlme/connection_mgr/core/src/wlan_cm_connect.c

@@ -1298,6 +1298,7 @@ QDF_STATUS cm_connect_start(struct cnx_mgr *cm_ctx,
 	}
 
 	status = cm_connect_get_candidates(pdev, cm_ctx, cm_req);
+
 	/* In case of status pending connect will continue after scan */
 	if (status == QDF_STATUS_E_PENDING)
 		return QDF_STATUS_SUCCESS;
@@ -1812,6 +1813,19 @@ cm_update_scan_db_on_connect_success(struct cnx_mgr *cm_ctx,
 			    resp->freq, rssi, resp->cm_id);
 }
 
+QDF_STATUS cm_notify_connect_complete(struct cnx_mgr *cm_ctx,
+				      struct wlan_cm_connect_resp *resp)
+{
+	mlme_cm_connect_complete_ind(cm_ctx->vdev, resp);
+	mlo_sta_link_connect_notify(cm_ctx->vdev, resp);
+	mlme_cm_osif_connect_complete(cm_ctx->vdev, resp);
+	cm_if_mgr_inform_connect_complete(cm_ctx->vdev,
+					  resp->connect_status);
+	cm_inform_blm_connect_complete(cm_ctx->vdev, resp);
+
+	return QDF_STATUS_SUCCESS;
+}
+
 QDF_STATUS cm_connect_complete(struct cnx_mgr *cm_ctx,
 			       struct wlan_cm_connect_resp *resp)
 {
@@ -1840,14 +1854,8 @@ QDF_STATUS cm_connect_complete(struct cnx_mgr *cm_ctx,
 	if (resp->is_reassoc && QDF_IS_STATUS_ERROR(resp->connect_status))
 		send_ind = false;
 
-	if (send_ind) {
-		mlme_cm_connect_complete_ind(cm_ctx->vdev, resp);
-		mlo_sta_link_connect_notify(cm_ctx->vdev, resp);
-		mlme_cm_osif_connect_complete(cm_ctx->vdev, resp);
-		cm_if_mgr_inform_connect_complete(cm_ctx->vdev,
-						  resp->connect_status);
-		cm_inform_blm_connect_complete(cm_ctx->vdev, resp);
-	}
+	if (send_ind)
+		cm_notify_connect_complete(cm_ctx, resp);
 
 	/* Update scan entry in case connect is success or fails with bssid */
 	if (!qdf_is_macaddr_zero(&resp->bssid)) {

+ 13 - 5
umac/mlme/connection_mgr/core/src/wlan_cm_disconnect.c

@@ -449,6 +449,18 @@ cm_inform_blm_disconnect_complete(struct wlan_objmgr_vdev *vdev,
 {}
 #endif
 
+QDF_STATUS cm_notify_disconnect_complete(struct cnx_mgr *cm_ctx,
+					 struct wlan_cm_discon_rsp *resp)
+{
+	mlme_cm_disconnect_complete_ind(cm_ctx->vdev, resp);
+	mlo_sta_link_disconn_notify(cm_ctx->vdev, resp);
+	mlme_cm_osif_disconnect_complete(cm_ctx->vdev, resp);
+	cm_if_mgr_inform_disconnect_complete(cm_ctx->vdev);
+	cm_inform_blm_disconnect_complete(cm_ctx->vdev, resp);
+
+	return QDF_STATUS_SUCCESS;
+}
+
 QDF_STATUS cm_disconnect_complete(struct cnx_mgr *cm_ctx,
 				  struct wlan_cm_discon_rsp *resp)
 {
@@ -459,11 +471,7 @@ QDF_STATUS cm_disconnect_complete(struct cnx_mgr *cm_ctx,
 	if (!cm_get_req_by_cm_id(cm_ctx, resp->req.cm_id))
 		return QDF_STATUS_SUCCESS;
 
-	mlme_cm_disconnect_complete_ind(cm_ctx->vdev, resp);
-	mlo_sta_link_disconn_notify(cm_ctx->vdev, resp);
-	mlme_cm_osif_disconnect_complete(cm_ctx->vdev, resp);
-	cm_if_mgr_inform_disconnect_complete(cm_ctx->vdev);
-	cm_inform_blm_disconnect_complete(cm_ctx->vdev, resp);
+	cm_notify_disconnect_complete(cm_ctx, resp);
 
 	/*
 	 * Remove all pending disconnect if this is an active disconnect

+ 24 - 0
umac/mlme/connection_mgr/core/src/wlan_cm_main_api.h

@@ -215,6 +215,18 @@ QDF_STATUS cm_bss_peer_create_rsp(struct wlan_objmgr_vdev *vdev,
 QDF_STATUS cm_connect_rsp(struct wlan_objmgr_vdev *vdev,
 			  struct wlan_cm_connect_resp *resp);
 
+/**
+ * cm_notify_connect_complete() - This API would be called for sending
+ * connect response notification
+ * @cm_ctx: connection manager context
+ * @resp: connection complete resp.
+ *
+ * This API would be called after connection completion resp from VDEV mgr
+ *
+ * Return: QDF status
+ */
+QDF_STATUS cm_notify_connect_complete(struct cnx_mgr *cm_ctx,
+				      struct wlan_cm_connect_resp *resp);
 /**
  * cm_connect_complete() - This API would be called after connect complete
  * request from the serialization.
@@ -319,6 +331,18 @@ QDF_STATUS cm_disconnect_start(struct cnx_mgr *cm_ctx,
  */
 QDF_STATUS cm_disconnect_active(struct cnx_mgr *cm_ctx, wlan_cm_id *cm_id);
 
+/**
+ * cm_notify_disconnect_complete() - This API would be called for sending
+ * disconnect response notification
+ * @cm_ctx: connection manager context
+ * @resp: disconnection complete resp.
+ *
+ * This API would be called after disconnect completion resp from VDEV mgr
+ *
+ * Return: QDF status
+ */
+QDF_STATUS cm_notify_disconnect_complete(struct cnx_mgr *cm_ctx,
+					 struct wlan_cm_discon_rsp *resp);
 /**
  * cm_disconnect_complete() - This API would be called after disconnect complete
  * request from the serialization.

+ 6 - 3
umac/mlme/connection_mgr/core/src/wlan_cm_util.c

@@ -472,12 +472,15 @@ cm_handle_connect_flush(struct cnx_mgr *cm_ctx, struct cm_req *cm_req)
 	resp->connect_status = QDF_STATUS_E_FAILURE;
 	resp->cm_id = cm_req->cm_id;
 	resp->vdev_id = wlan_vdev_get_id(cm_ctx->vdev);
-	resp->reason = CM_ABORT_DUE_TO_NEW_REQ_RECVD;
+	if (cm_req->failed_req)
+		resp->reason = CM_GENERIC_FAILURE;
+	else
+		resp->reason = CM_ABORT_DUE_TO_NEW_REQ_RECVD;
 
 	/* Get bssid and ssid and freq for the cm id from the req list */
 	cm_fill_connect_resp_from_req(resp, cm_req);
 
-	mlme_cm_osif_connect_complete(cm_ctx->vdev, resp);
+	cm_notify_connect_complete(cm_ctx, resp);
 	qdf_mem_free(resp);
 }
 
@@ -500,7 +503,7 @@ cm_handle_disconnect_flush(struct cnx_mgr *cm_ctx, struct cm_req *cm_req)
 	resp.req.cm_id = cm_req->cm_id;
 	resp.req.req = cm_req->discon_req.req;
 
-	mlme_cm_osif_disconnect_complete(cm_ctx->vdev, &resp);
+	cm_notify_disconnect_complete(cm_ctx, &resp);
 }
 
 static void cm_remove_cmd_from_serialization(struct cnx_mgr *cm_ctx,