فهرست منبع

qcacmn: DP changes corresponding to single netdev model

DP changes to support the single netdev model.

Change-Id: I03c74e605c7530f4ab81edb68f0090f103e84578
CRs-Fixed: 3360499
Sai Rupesh Chevuru 2 سال پیش
والد
کامیت
e219606587
5فایلهای تغییر یافته به همراه91 افزوده شده و 0 حذف شده
  1. 16 0
      dp/inc/cdp_txrx_cmn_struct.h
  2. 6 0
      dp/inc/cdp_txrx_stats_struct.h
  3. 11 0
      dp/wifi3.0/be/dp_be.c
  4. 43 0
      dp/wifi3.0/dp_main.c
  5. 15 0
      dp/wifi3.0/dp_peer.c

+ 16 - 0
dp/inc/cdp_txrx_cmn_struct.h

@@ -3085,4 +3085,20 @@ struct cdp_pdev_attach_params {
 	uint8_t pdev_id;
 	uint32_t mlo_link_id;
 };
+
+/*
+ * cdp_txrx_peer_params_update
+ *
+ * @osif_vdev: Handle for OS shim virtual device
+ * @peer_mac: Peer mac address
+ * @chip_id: CHIP ID
+ * @pdev_id: PDEV ID
+ */
+struct cdp_txrx_peer_params_update {
+	void	*osif_vdev;
+	uint8_t	*peer_mac;
+	uint8_t	chip_id;
+	uint8_t	pdev_id;
+};
+
 #endif

+ 6 - 0
dp/inc/cdp_txrx_stats_struct.h

@@ -790,6 +790,12 @@ enum WDI_EVENT {
 #endif
 	WDI_EVENT_LITE_MON_RX,
 	WDI_EVENT_LITE_MON_TX,
+	WDI_EVENT_TXRX_PEER_CREATE,
+	WDI_EVENT_PEER_UNMAP,
+	WDI_EVENT_PEER_DELETE,
+	WDI_EVENT_PEER_PRIMARY_UMAC_UPDATE,
+	WDI_EVENT_MCAST_PRIMARY_UPDATE,
+	WDI_EVENT_STA_PRIMARY_UMAC_UPDATE,
 	/* End of new event items */
 	WDI_EVENT_LAST
 };

+ 11 - 0
dp/wifi3.0/be/dp_be.c

@@ -2168,10 +2168,21 @@ static void dp_txrx_set_mlo_mcast_primary_vdev_param_be(
 				   HAL_TX_MCAST_CTRL_NO_SPECIAL);
 
 	if (be_vdev->mcast_primary) {
+		struct cdp_txrx_peer_params_update params = {0};
+
 		dp_mcast_mlo_iter_ptnr_vdev(be_soc, be_vdev,
 					    dp_mlo_mcast_reset_pri_mcast,
 					    (void *)&be_vdev->mcast_primary,
 					    DP_MOD_ID_TX_MCAST);
+
+		params.chip_id = be_soc->mlo_chip_id;
+		params.pdev_id = vdev->pdev->pdev_id;
+		params.osif_vdev = vdev->osif_vdev;
+		dp_wdi_event_handler(
+				WDI_EVENT_MCAST_PRIMARY_UPDATE,
+				vdev->pdev->soc,
+				(void *)&params, CDP_INVALID_PEER,
+				WDI_NO_VAL, params.pdev_id);
 	}
 }
 

+ 43 - 0
dp/wifi3.0/dp_main.c

@@ -7815,6 +7815,7 @@ static QDF_STATUS dp_txrx_peer_detach(struct dp_soc *soc, struct dp_peer *peer)
 {
 	struct dp_txrx_peer *txrx_peer;
 	struct dp_pdev *pdev;
+	struct cdp_txrx_peer_params_update params = {0};
 
 	/* dp_txrx_peer exists for mld peer and legacy peer */
 	if (peer->txrx_peer) {
@@ -7822,6 +7823,13 @@ static QDF_STATUS dp_txrx_peer_detach(struct dp_soc *soc, struct dp_peer *peer)
 		peer->txrx_peer = NULL;
 		pdev = txrx_peer->vdev->pdev;
 
+		params.osif_vdev = (void *)peer->vdev->osif_vdev;
+		params.peer_mac = peer->mac_addr.raw;
+
+		dp_wdi_event_handler(WDI_EVENT_PEER_DELETE, soc,
+				     (void *)&params, peer->peer_id,
+				     WDI_NO_VAL, pdev->pdev_id);
+
 		dp_peer_defrag_rx_tids_deinit(txrx_peer);
 		/*
 		 * Deallocate the extended stats contenxt
@@ -7841,6 +7849,7 @@ static QDF_STATUS dp_txrx_peer_attach(struct dp_soc *soc, struct dp_peer *peer)
 {
 	struct dp_txrx_peer *txrx_peer;
 	struct dp_pdev *pdev;
+	struct cdp_txrx_peer_params_update params = {0};
 
 	txrx_peer = (struct dp_txrx_peer *)qdf_mem_malloc(sizeof(*txrx_peer));
 
@@ -7884,6 +7893,15 @@ static QDF_STATUS dp_txrx_peer_attach(struct dp_soc *soc, struct dp_peer *peer)
 
 	dp_txrx_peer_attach_add(soc, peer, txrx_peer);
 
+	params.peer_mac = peer->mac_addr.raw;
+	params.osif_vdev = (void *)peer->vdev->osif_vdev;
+	params.chip_id = dp_mlo_get_chip_id(soc);
+	params.pdev_id = peer->vdev->pdev->pdev_id;
+
+	dp_wdi_event_handler(WDI_EVENT_TXRX_PEER_CREATE, soc,
+			     (void *)&params, peer->peer_id,
+			     WDI_NO_VAL, params.pdev_id);
+
 	return QDF_STATUS_SUCCESS;
 }
 
@@ -8162,6 +8180,7 @@ QDF_STATUS dp_peer_mlo_setup(
 			struct cdp_peer_setup_info *setup_info)
 {
 	struct dp_peer *mld_peer = NULL;
+	struct cdp_txrx_peer_params_update params = {0};
 
 	/* Non-MLO connection, do nothing */
 	if (!setup_info || !setup_info->mld_peer_mac)
@@ -8184,6 +8203,21 @@ QDF_STATUS dp_peer_mlo_setup(
 				     setup_info->mld_peer_mac,
 				     CDP_MLD_PEER_TYPE);
 
+	if (peer->vdev->opmode == wlan_op_mode_sta &&
+	    setup_info->is_primary_link) {
+		struct cdp_txrx_peer_params_update params = {0};
+
+		params.chip_id = dp_mlo_get_chip_id(soc);
+		params.pdev_id = peer->vdev->pdev->pdev_id;
+		params.osif_vdev = peer->vdev->osif_vdev;
+
+		dp_wdi_event_handler(
+				WDI_EVENT_STA_PRIMARY_UMAC_UPDATE,
+				soc,
+				(void *)&params, peer->peer_id,
+				WDI_NO_VAL, params.pdev_id);
+	}
+
 	peer->first_link = setup_info->is_first_link;
 	peer->primary_link = setup_info->is_primary_link;
 	mld_peer = dp_mld_peer_find_hash_find(soc,
@@ -8233,6 +8267,15 @@ QDF_STATUS dp_peer_mlo_setup(
 					soc, mld_peer, prev_vdev,
 					mld_peer->vdev);
 
+			params.osif_vdev = (void *)peer->vdev->osif_vdev;
+			params.peer_mac = peer->mac_addr.raw;
+			params.chip_id = dp_mlo_get_chip_id(soc);
+			params.pdev_id = peer->vdev->pdev->pdev_id;
+
+			dp_wdi_event_handler(
+					WDI_EVENT_PEER_PRIMARY_UMAC_UPDATE,
+					soc, (void *)&params, peer->peer_id,
+					WDI_NO_VAL, params.pdev_id);
 		}
 
 		/* associate mld and link peer */

+ 15 - 0
dp/wifi3.0/dp_peer.c

@@ -3269,6 +3269,21 @@ dp_rx_peer_unmap_handler(struct dp_soc *soc, uint16_t peer_id,
 		return;
 	}
 
+	vdev = peer->vdev;
+
+	if (peer->txrx_peer) {
+		struct cdp_txrx_peer_params_update params = {0};
+
+		params.osif_vdev = (void *)vdev->osif_vdev;
+		params.peer_mac = peer->mac_addr.raw;
+		params.chip_id = dp_mlo_get_chip_id(soc);
+		params.pdev_id = vdev->pdev->pdev_id;
+
+		dp_wdi_event_handler(WDI_EVENT_PEER_UNMAP, soc,
+				     (void *)&params, peer_id,
+				     WDI_NO_VAL, vdev->pdev->pdev_id);
+	}
+
 	/* If V2 Peer map messages are enabled AST entry has to be
 	 * freed here
 	 */