Эх сурвалжийг харах

qcacld-3.0: Provide peer_info for cdp_peer_setup

As DP requirement, CP should not provide peer mlo information for
cdp_peer_create and CP should provide peer mlo information for
cdp_peer_setup.

Change-Id: Ic15f209b009e5a3bd6b154992d2a88cb19f489de
CRs-Fixed: 3020662
Bing Sun 3 жил өмнө
parent
commit
ca4409e50a
1 өөрчлөгдсөн 57 нэмэгдсэн , 63 устгасан
  1. 57 63
      core/wma/src/wma_dev_if.c

+ 57 - 63
core/wma/src/wma_dev_if.c

@@ -1784,65 +1784,6 @@ wma_increment_peer_count(tp_wma_handle wma, uint8_t vdev_id)
 	wma->interfaces[vdev_id].peer_count++;
 }
 
-#ifdef MLO_DP_INTERIM
-static QDF_STATUS wma_cdp_peer_create(ol_txrx_soc_handle dp_soc,
-				      uint8_t vdev_id,
-				      uint8_t *peer_addr,
-				      struct wlan_objmgr_peer *obj_peer)
-{
-	struct cdp_txrx_peer_info peer_info;
-	uint8_t *mld_mac;
-	QDF_STATUS status;
-
-	mld_mac = wlan_peer_mlme_get_mldaddr(peer);
-
-	if (!mld_mac || qdf_is_macaddr_zero(mld_mac))
-		return cdp_peer_create(dp_soc, vdev_id, peer_addr, NULL);
-
-	qdf_mem_zero(&peer_info, sizeof(peer_info));
-
-	peer_info.mld_peer_mac = mld_mac;
-	peer_info.peer_type = CDP_TXRX_LINK_PEER;
-	status = cdp_peer_create(dp_soc, vdev_id, peer_addr, &peer_info);
-	if (QDF_IS_STATUS_ERROR(status)) {
-		wma_err("Unable to attach mld link peer " QDF_MAC_ADDR_FMT,
-			QDF_MAC_ADDR_REF(peer_addr));
-		return status;
-	}
-	if (wlan_peer_mlme_is_assoc_peer(obj_peer)) {
-		peer_info.mld_peer_mac = mld_mac;
-		peer_info.peer_type = CDP_TXRX_MLD_PEER;
-		status = cdp_peer_create(dp_soc, vdev_id, peer_addr,
-					 &peer_info);
-		if (QDF_IS_STATUS_ERROR(status)) {
-			wma_err("Unable to attach mld peer " QDF_MAC_ADDR_FMT,
-				QDF_MAC_ADDR_REF(peer_addr));
-			if (cdp_cfg_get_peer_unmap_conf_support(dp_soc))
-				cdp_peer_delete_sync(
-					dp_soc, vdev_id, peer_addr,
-					wma_peer_unmap_conf_cb,
-					1 << CDP_PEER_DO_NOT_START_UNMAP_TIMER);
-			else
-				cdp_peer_delete(
-					dp_soc, vdev_id, peer_addr,
-					1 << CDP_PEER_DO_NOT_START_UNMAP_TIMER);
-			wlan_objmgr_peer_obj_delete(obj_peer);
-		}
-	}
-
-	return status;
-}
-
-#else
-static QDF_STATUS wma_cdp_peer_create(ol_txrx_soc_handle dp_soc,
-				      uint8_t vdev_id,
-				      uint8_t *peer_addr,
-				      struct wlan_objmgr_peer *obj_peer)
-{
-	return cdp_peer_create(dp_soc, vdev_id, peer_addr);
-}
-#endif
-
 /**
  * wma_update_mlo_peer_create() - update mlo parameter for peer creation
  * @param: peer create param
@@ -1934,7 +1875,7 @@ QDF_STATUS wma_add_peer(tp_wma_handle wma,
 		wlan_peer_mlme_set_assoc_peer(obj_peer, is_assoc_peer);
 		wma_update_mlo_peer_create(&param, true);
 	}
-	status = wma_cdp_peer_create(dp_soc, vdev_id, peer_addr, obj_peer);
+	status = cdp_peer_create(dp_soc, vdev_id, peer_addr);
 	if (QDF_IS_STATUS_ERROR(status)) {
 		wma_err("Unable to attach peer "QDF_MAC_ADDR_FMT,
 			QDF_MAC_ADDR_REF(peer_addr));
@@ -1981,6 +1922,59 @@ QDF_STATUS wma_add_peer(tp_wma_handle wma,
 	return QDF_STATUS_SUCCESS;
 }
 
+#ifdef WLAN_FEATURE_11BE_MLO
+/**
+ * wma_cdp_peer_setup() - provide mlo information to cdp_peer_setup
+ * @wma: wma handle
+ * @dp_soc: dp soc
+ * @vdev_id: vdev id
+ * @peer_addr: peer mac addr
+ *
+ * Return: VOID
+ */
+static void wma_cdp_peer_setup(tp_wma_handle wma,
+			       ol_txrx_soc_handle dp_soc,
+			       uint8_t vdev_id,
+			       uint8_t *peer_addr)
+{
+	struct cdp_peer_setup_info peer_info;
+	uint8_t *mld_mac;
+	struct wlan_objmgr_peer *obj_peer = NULL;
+
+	obj_peer = wlan_objmgr_get_peer_by_mac(wma->psoc,
+					       peer_addr,
+					       WLAN_LEGACY_WMA_ID);
+	if (!obj_peer) {
+		wma_err("Invalid obj_peer");
+		return;
+	}
+
+	mld_mac = wlan_peer_mlme_get_mldaddr(obj_peer);
+
+	if (!mld_mac || qdf_is_macaddr_zero((struct qdf_mac_addr *)mld_mac)) {
+		cdp_peer_setup(dp_soc, vdev_id, peer_addr, NULL);
+		wlan_objmgr_peer_release_ref(obj_peer, WLAN_LEGACY_WMA_ID);
+		return;
+	}
+
+	qdf_mem_zero(&peer_info, sizeof(peer_info));
+
+	peer_info.mld_peer_mac = mld_mac;
+	peer_info.is_assoc_link = wlan_peer_mlme_is_assoc_peer(obj_peer);
+	peer_info.is_primary_link = peer_info.is_assoc_link;
+	cdp_peer_setup(dp_soc, vdev_id, peer_addr, &peer_info);
+	wlan_objmgr_peer_release_ref(obj_peer, WLAN_LEGACY_WMA_ID);
+}
+#else
+static void wma_cdp_peer_setup(tp_wma_handle wma,
+			       ol_txrx_soc_handle dp_soc,
+			       uint8_t vdev_id,
+			       uint8_t *peer_addr)
+{
+	cdp_peer_setup(dp_soc, vdev_id, peer_addr, NULL);
+}
+#endif
+
 QDF_STATUS wma_create_peer(tp_wma_handle wma,
 			   uint8_t peer_addr[QDF_MAC_ADDR_SIZE],
 			   uint32_t peer_type, uint8_t vdev_id,
@@ -1998,7 +1992,7 @@ QDF_STATUS wma_create_peer(tp_wma_handle wma,
 		return status;
 
 	wma_increment_peer_count(wma, vdev_id);
-	cdp_peer_setup(dp_soc, vdev_id, peer_addr);
+	wma_cdp_peer_setup(wma, dp_soc, vdev_id, peer_addr);
 
 	return QDF_STATUS_SUCCESS;
 }
@@ -3190,8 +3184,8 @@ int wma_peer_create_confirm_handler(void *handle, uint8_t *evt_param_info,
 			goto fail;
 		}
 
-		cdp_peer_setup(dp_soc, peer_create_rsp->vdev_id,
-			       peer_mac.bytes);
+		wma_cdp_peer_setup(wma, dp_soc, peer_create_rsp->vdev_id,
+				   peer_mac.bytes);
 
 		status = QDF_STATUS_SUCCESS;
 		ret = 0;