浏览代码

qcacmn: Add new API to clear the MLO MGR context

Add new API to clear the particular AP link info
from the MLO MGR context.

CRs-Fixed: 3616166
Change-Id: Ia3b69a58dd3d3687199ee58462d59ba76c24cd6d
Deeksha Gupta 1 年之前
父节点
当前提交
78868f0a7e

+ 2 - 0
umac/mlme/connection_mgr/core/src/wlan_cm_connect.c

@@ -1954,6 +1954,8 @@ cm_modify_partner_info_based_on_dbs_or_sbs_mode(struct wlan_objmgr_vdev *vdev,
 				best_partner_idx_2g = i;
 			else
 				best_partner_idx_5g = i;
+
+			break;
 		}
 	}
 

+ 11 - 0
umac/mlo_mgr/inc/wlan_mlo_mgr_link_switch.h

@@ -209,6 +209,17 @@ void mlo_mgr_update_ap_link_info(struct wlan_objmgr_vdev *vdev, uint8_t link_id,
 				 uint8_t *ap_link_addr,
 				 struct wlan_channel channel);
 
+/**
+ * mlo_mgr_clear_ap_link_info() - Clear AP link information
+ * @vdev: Object Manager vdev
+ * @ap_link_addr: AP link addresses
+ *
+ * Clear AP link info
+ * Return: void
+ */
+void mlo_mgr_clear_ap_link_info(struct wlan_objmgr_vdev *vdev,
+				uint8_t *ap_link_addr);
+
 /**
  * mlo_mgr_reset_ap_link_info() - Reset AP links information
  * @vdev: Object Manager vdev

+ 32 - 0
umac/mlo_mgr/src/wlan_mlo_mgr_link_switch.c

@@ -89,6 +89,38 @@ void mlo_mgr_update_ap_link_info(struct wlan_objmgr_vdev *vdev, uint8_t link_id,
 		  QDF_MAC_ADDR_REF(link_info->ap_link_addr.bytes));
 }
 
+void mlo_mgr_clear_ap_link_info(struct wlan_objmgr_vdev *vdev,
+				uint8_t *ap_link_addr)
+{
+	struct mlo_link_info *link_info;
+	uint8_t link_info_iter;
+
+	if (!vdev || !vdev->mlo_dev_ctx || !ap_link_addr)
+		return;
+
+	link_info = &vdev->mlo_dev_ctx->link_ctx->links_info[0];
+	for (link_info_iter = 0; link_info_iter < WLAN_MAX_ML_BSS_LINKS;
+	     link_info_iter++) {
+		if (qdf_is_macaddr_equal(&link_info->ap_link_addr,
+					 (struct qdf_mac_addr *)ap_link_addr)) {
+			mlo_debug("Clear AP link info for link_id: %d, vdev_id:%d, link_addr:" QDF_MAC_ADDR_FMT,
+				  link_info->link_id, link_info->vdev_id,
+				  QDF_MAC_ADDR_REF(link_info->ap_link_addr.bytes));
+
+			qdf_mem_zero(&link_info->ap_link_addr,
+				     QDF_MAC_ADDR_SIZE);
+			qdf_mem_zero(link_info->link_chan_info,
+				     sizeof(*link_info->link_chan_info));
+			link_info->link_id = WLAN_INVALID_LINK_ID;
+			link_info->link_status_flags = 0;
+
+			return;
+		}
+
+		link_info++;
+	}
+}
+
 void mlo_mgr_update_ap_channel_info(struct wlan_objmgr_vdev *vdev, uint8_t link_id,
 				    uint8_t *ap_link_addr,
 				    struct wlan_channel channel)