Преглед изворни кода

qcacmn: Fix standby link removal fail

Add callback mlme_vdev_reconfig_notify_standby to cld code to
handle standby link removal.
For standby link, it is going to be removed by AP, so don't
start link removal timer for it. Force inactive it to avoid
link switch to it.

Change-Id: Iae8eebeb2263b0057026c0e80223ef5c6b68a41f
CRs-Fixed: 3640204
Liangwei Dong пре 1 година
родитељ
комит
a725261a81
2 измењених фајлова са 31 додато и 0 уклоњено
  1. 6 0
      umac/mlme/include/wlan_vdev_mlme.h
  2. 25 0
      umac/mlo_mgr/src/wlan_mlo_mgr_sta.c

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

@@ -28,6 +28,7 @@
 
 struct vdev_mlme_obj;
 struct cnx_mgr;
+struct ml_rv_info;
 
 /* Requestor ID for multiple vdev restart */
 #define MULTIPLE_VDEV_RESTART_REQ_ID 0x1234
@@ -721,6 +722,8 @@ enum vdev_start_resp_type {
  *                                      the first ml reconfig IE
  * @mlme_vdev_reconfig_timer_complete:  callback to process ml reconfing
  *                                      operation
+ * @mlme_vdev_reconfig_notify_standby: callback to notify to process standby
+ *                                      link removal
  * @mlme_vdev_notify_mlo_sync_wait_entry:
  */
 struct vdev_mlme_ops {
@@ -806,6 +809,9 @@ struct vdev_mlme_ops {
 				uint16_t *tbtt_count, uint16_t bcn_int);
 	void (*mlme_vdev_reconfig_timer_complete)(
 				struct vdev_mlme_obj *vdev_mlme);
+	QDF_STATUS (*mlme_vdev_reconfig_notify_standby)(
+				struct vdev_mlme_obj *vdev_mlme,
+				struct ml_rv_info *reconfig_info);
 	QDF_STATUS (*mlme_vdev_notify_mlo_sync_wait_entry)(
 				struct vdev_mlme_obj *vdev_mlme);
 };

+ 25 - 0
umac/mlo_mgr/src/wlan_mlo_mgr_sta.c

@@ -2012,6 +2012,29 @@ QDF_STATUS mlo_sta_handle_csa_standby_link(
 	qdf_mem_free(params.chan);
 	return status;
 }
+
+static void mlo_sta_handle_link_reconfig_standby_link(
+			struct wlan_objmgr_vdev *vdev,
+			struct ml_rv_info *reconfig_info)
+{
+	struct vdev_mlme_obj *vdev_mlme;
+
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme)
+		return;
+	if (vdev_mlme->ops &&
+	    vdev_mlme->ops->mlme_vdev_reconfig_notify_standby) {
+		vdev_mlme->ops->mlme_vdev_reconfig_notify_standby(
+				vdev_mlme,
+				reconfig_info);
+	}
+}
+#else
+static void mlo_sta_handle_link_reconfig_standby_link(
+			struct wlan_objmgr_vdev *vdev,
+			struct ml_rv_info *reconfig_info)
+{
+}
 #endif
 
 QDF_STATUS mlo_sta_csa_save_params(struct wlan_mlo_dev_context *mlo_dev_ctx,
@@ -2704,6 +2727,8 @@ check_ml_rv:
 		}
 	}
 
+	mlo_sta_handle_link_reconfig_standby_link(vdev, &reconfig_info);
+
 err_release_refs:
 
 	for (i = 0; i < vdev_count; i++)