Selaa lähdekoodia

qcacld-3.0: Create and delete ML peer context

Create mlo peer context after BSS peer create response and
delete mlo peer context before deleting bss peer.

Change-Id: I322ea83ebe0572b0d593a8988ff6c11e205b0f96
CRs-Fixed: 2972564
Amruta Kulkarni 3 vuotta sitten
vanhempi
sitoutus
14ef4d1333
2 muutettua tiedostoa jossa 49 lisäystä ja 3 poistoa
  1. 39 3
      core/mac/src/pe/lim/lim_process_mlm_req_messages.c
  2. 10 0
      core/wma/src/wma_dev_if.c

+ 39 - 3
core/mac/src/pe/lim/lim_process_mlm_req_messages.c

@@ -392,17 +392,53 @@ failure:
 }
 
 void lim_send_peer_create_resp(struct mac_context *mac, uint8_t vdev_id,
-			       QDF_STATUS status, uint8_t *peer_mac)
+			       QDF_STATUS qdf_status, uint8_t *peer_mac)
 {
 	struct wlan_objmgr_vdev *vdev;
+#ifdef WLAN_FEATURE_11BE_MLO
+	struct wlan_objmgr_peer *link_peer;
+	uint8_t link_id;
+	struct mlo_partner_info partner_info;
+#endif
+	QDF_STATUS status;
 
 	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(mac->psoc,
 						    vdev_id,
 						    WLAN_LEGACY_MAC_ID);
 	if (!vdev)
 		return;
-	wlan_cm_bss_peer_create_rsp(vdev, status,
-				    (struct qdf_mac_addr *)peer_mac);
+	status = wlan_cm_bss_peer_create_rsp(vdev, qdf_status,
+					     (struct qdf_mac_addr *)peer_mac);
+
+#ifdef WLAN_FEATURE_11BE_MLO
+	link_id = vdev->vdev_mlme.mlo_link_id;
+	/* currently only 2 link MLO supported */
+	partner_info.num_partner_links = 1;
+	qdf_mem_copy(partner_info.partner_link_info[0].link_addr.bytes,
+		     vdev->vdev_mlme.macaddr,
+		     QDF_MAC_ADDR_SIZE);
+	partner_info.partner_link_info[0].link_id = link_id;
+
+	if (QDF_IS_STATUS_SUCCESS(status)) {
+		/* Get the bss peer obj */
+		link_peer = wlan_objmgr_get_peer_by_mac(mac->psoc, peer_mac,
+							WLAN_LEGACY_MAC_ID);
+		if (!link_peer) {
+			pe_err("Link peer is NULL");
+			goto end;
+		}
+
+		status = wlan_mlo_peer_create(vdev, link_peer,
+					      &partner_info,
+					      NULL,
+					      0);
+
+		if (QDF_IS_STATUS_ERROR(status))
+			pe_err("Peer creation failed");
+	}
+end:
+	wlan_objmgr_peer_release_ref(link_peer, WLAN_LEGACY_MAC_ID);
+#endif
 	wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
 }
 

+ 10 - 0
core/wma/src/wma_dev_if.c

@@ -2265,6 +2265,9 @@ wma_delete_peer_on_vdev_stop(tp_wma_handle wma, uint8_t vdev_id)
 	struct wma_txrx_node *iface;
 	QDF_STATUS status;
 	struct qdf_mac_addr bssid;
+#ifdef WLAN_FEATURE_11BE_MLO
+	struct wlan_objmgr_peer *peer = NULL;
+#endif
 
 	iface = &wma->interfaces[vdev_id];
 	status = wlan_vdev_get_bss_peer_mac(iface->vdev, &bssid);
@@ -2280,6 +2283,13 @@ wma_delete_peer_on_vdev_stop(tp_wma_handle wma, uint8_t vdev_id)
 		return QDF_STATUS_E_INVAL;
 	}
 
+#ifdef WLAN_FEATURE_11BE_MLO
+	peer = wlan_objmgr_get_peer_by_mac(wma.psoc, &bssid.bytes,
+					   WLAN_LEGACY_WMA_ID);
+	if (peer)
+		wlan_mlo_link_peer_delete(peer);
+#endif
+
 	vdev_stop_resp = qdf_mem_malloc(sizeof(*vdev_stop_resp));
 	if (!vdev_stop_resp)
 		return QDF_STATUS_E_NOMEM;