Browse Source

qcacmn: Return appropriate Rx descriptor pool for monitor mode

Replenish buffers consumed during monitor packet processing
and map it to the rx_desc_pool associated with a pdev.

Change-Id: Ia844c92c6b61bbb22ae42d38796aad2f29756b5e
CRs-Fixed: 2407502
Venkata Sharath Chandra Manchala 6 years ago
parent
commit
aedd8c3606
1 changed files with 15 additions and 9 deletions
  1. 15 9
      dp/wifi3.0/dp_rx_mon_dest.c

+ 15 - 9
dp/wifi3.0/dp_rx_mon_dest.c

@@ -195,21 +195,23 @@ struct dp_srng *dp_rxdma_get_mon_buf_ring(struct dp_pdev *pdev,
 }
 
 /**
- * dp_rx_get_desc_pool() - Return monitor descriptor pool
- *			      based on target
+ * dp_rx_get_mon_desc_pool() - Return monitor descriptor pool
+ *			       based on target
  * @soc: soc handle
  * @mac_id: mac id number
+ * @pdev_id: pdev id number
  *
  * Return: descriptor pool address
  */
 static inline
-struct rx_desc_pool *dp_rx_get_desc_pool(struct dp_soc *soc,
-					 uint8_t mac_id)
+struct rx_desc_pool *dp_rx_get_mon_desc_pool(struct dp_soc *soc,
+					     uint8_t mac_id,
+					     uint8_t pdev_id)
 {
 	if (soc->wlan_cfg_ctx->rxdma1_enable)
 		return &soc->rx_desc_mon[mac_id];
 
-	return &soc->rx_desc_buf[mac_id];
+	return &soc->rx_desc_buf[pdev_id];
 }
 
 /**
@@ -1039,6 +1041,7 @@ mon_deliver_non_std_fail:
 void dp_rx_mon_dest_process(struct dp_soc *soc, uint32_t mac_id, uint32_t quota)
 {
 	struct dp_pdev *pdev = dp_get_pdev_for_mac_id(soc, mac_id);
+	uint8_t pdev_id;
 	void *hal_soc;
 	void *rxdma_dst_ring_desc;
 	void *mon_dst_srng;
@@ -1060,7 +1063,7 @@ void dp_rx_mon_dest_process(struct dp_soc *soc, uint32_t mac_id, uint32_t quota)
 
 	hal_soc = soc->hal_soc;
 
-	qdf_assert(hal_soc);
+	qdf_assert((hal_soc && pdev));
 
 	qdf_spin_lock_bh(&pdev->mon_lock);
 
@@ -1071,6 +1074,7 @@ void dp_rx_mon_dest_process(struct dp_soc *soc, uint32_t mac_id, uint32_t quota)
 		return;
 	}
 
+	pdev_id = pdev->pdev_id;
 	ppdu_id = pdev->ppdu_info.com_info.ppdu_id;
 	rx_bufs_used = 0;
 	rx_mon_stats = &pdev->rx_mon_stats;
@@ -1114,9 +1118,11 @@ void dp_rx_mon_dest_process(struct dp_soc *soc, uint32_t mac_id, uint32_t quota)
 	if (rx_bufs_used) {
 		rx_mon_stats->dest_ppdu_done++;
 		dp_rx_buffers_replenish(soc, mac_id,
-			dp_rxdma_get_mon_buf_ring(pdev, mac_for_pdev),
-			dp_rx_get_desc_pool(soc, mac_id),
-			rx_bufs_used, &head, &tail);
+					dp_rxdma_get_mon_buf_ring(pdev,
+								  mac_for_pdev),
+					dp_rx_get_mon_desc_pool(soc, mac_id,
+								pdev_id),
+					rx_bufs_used, &head, &tail);
 	}
 }