Sfoglia il codice sorgente

qcacmn: Data path changes for Dynamic Mode Change FR. Changes include-

	1. Move all LMAC rings to SOC from pDEV
	2. Dynamically obtain lmac->pdev mapping while handling LMAC interrupts

Change-Id: Ib017d49243405b62fc34099c01a2b898b25341d0
Amit Shukla 5 anni fa
parent
commit
1edfe5ae7c

+ 4 - 4
dp/inc/cdp_txrx_cmn.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011-2019 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2020 The Linux Foundation. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -1929,12 +1929,12 @@ cdp_soc_set_dp_txrx_handle(ol_txrx_soc_handle soc, void *dp_handle)
  * @soc: opaque soc handle
  * @pdev_id: id of data path pdev handle
  * @lmac_id: lmac id
- *
+ * @mode_change: flag to indicate mode change (true) or init (false)
  * Return: QDF_STATUS
  */
 static inline QDF_STATUS
 cdp_soc_map_pdev_to_lmac(ol_txrx_soc_handle soc, uint8_t pdev_id,
-			 uint32_t lmac_id)
+			 uint32_t lmac_id, bool mode_change)
 {
 	if (!soc || !soc->ops) {
 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
@@ -1948,7 +1948,7 @@ cdp_soc_map_pdev_to_lmac(ol_txrx_soc_handle soc, uint8_t pdev_id,
 		return QDF_STATUS_E_FAILURE;
 
 	return soc->ops->cmn_drv_ops->map_pdev_to_lmac(soc, pdev_id,
-			lmac_id);
+			lmac_id, mode_change);
 }
 
 /**

+ 1 - 1
dp/inc/cdp_txrx_ops.h

@@ -447,7 +447,7 @@ struct cdp_cmn_ops {
 			void *dp_txrx_handle);
 
 	QDF_STATUS (*map_pdev_to_lmac)(ol_txrx_soc_handle soc, uint8_t pdev_id,
-				       uint32_t lmac_id);
+				       uint32_t lmac_id, bool mode_change);
 
 	QDF_STATUS (*set_pdev_status_down)(struct cdp_soc_t *soc_handle,
 					   uint8_t pdev_id, bool is_pdev_down);

+ 33 - 15
dp/wifi3.0/dp_htt.c

@@ -765,6 +765,8 @@ int htt_srng_setup(struct htt_soc *soc, int mac_id,
 		hal_srng_get_entrysize(soc->hal_soc, hal_ring_type);
 	int htt_ring_type, htt_ring_id;
 	uint8_t *htt_logger_bufp;
+	int target_pdev_id;
+	int lmac_id = dp_get_lmac_id_for_pdev_id(soc->dp_soc, 0, mac_id);
 
 	/* Sizes should be set in 4-byte words */
 	ring_entry_size = ring_entry_size >> 2;
@@ -796,7 +798,7 @@ int htt_srng_setup(struct htt_soc *soc, int mac_id,
 #else
 		if (srng_params.ring_id ==
 			(HAL_SRNG_WMAC1_SW2RXDMA0_BUF0 +
-			  (mac_id * HAL_MAX_RINGS_PER_LMAC))) {
+			(lmac_id * HAL_MAX_RINGS_PER_LMAC))) {
 			htt_ring_id = HTT_RXDMA_HOST_BUF_RING;
 			htt_ring_type = HTT_SW_TO_HW_RING;
 #endif
@@ -806,7 +808,7 @@ int htt_srng_setup(struct htt_soc *soc, int mac_id,
 #else
 			 (HAL_SRNG_WMAC1_SW2RXDMA1_BUF +
 #endif
-			  (mac_id * HAL_MAX_RINGS_PER_LMAC))) {
+			(lmac_id * HAL_MAX_RINGS_PER_LMAC))) {
 			htt_ring_id = HTT_RXDMA_HOST_BUF_RING;
 			htt_ring_type = HTT_SW_TO_HW_RING;
 		} else {
@@ -870,11 +872,12 @@ int htt_srng_setup(struct htt_soc *soc, int mac_id,
 	*msg_word = 0;
 	htt_logger_bufp = (uint8_t *)msg_word;
 	HTT_H2T_MSG_TYPE_SET(*msg_word, HTT_H2T_MSG_TYPE_SRING_SETUP);
+	target_pdev_id =
+	dp_get_target_pdev_id_for_host_pdev_id(soc->dp_soc, mac_id);
 
 	if ((htt_ring_type == HTT_SW_TO_HW_RING) ||
 			(htt_ring_type == HTT_HW_TO_SW_RING))
-		HTT_SRING_SETUP_PDEV_ID_SET(*msg_word,
-			 DP_SW2HW_MACID(mac_id));
+		HTT_SRING_SETUP_PDEV_ID_SET(*msg_word, target_pdev_id);
 	else
 		HTT_SRING_SETUP_PDEV_ID_SET(*msg_word, mac_id);
 
@@ -1011,7 +1014,7 @@ fail0:
  * htt_h2t_rx_ring_cfg() - Send SRNG packet and TLV filter
  * config message to target
  * @htt_soc:	HTT SOC handle
- * @pdev_id:	PDEV Id
+ * @pdev_id:	WIN- PDEV Id, MCL- mac id
  * @hal_srng:	Opaque HAL SRNG pointer
  * @hal_ring_type:	SRNG ring type
  * @ring_buf_size:	SRNG buffer size
@@ -1033,6 +1036,7 @@ int htt_h2t_rx_ring_cfg(struct htt_soc *htt_soc, int pdev_id,
 	uint8_t *htt_logger_bufp;
 	struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx = soc->dp_soc->wlan_cfg_ctx;
 	uint32_t mon_drop_th = wlan_cfg_get_mon_drop_thresh(wlan_cfg_ctx);
+	int target_pdev_id;
 
 	htt_msg = qdf_nbuf_alloc(soc->osdev,
 		HTT_MSG_BUF_SIZE(HTT_RX_RING_SELECTION_CFG_SZ),
@@ -1102,10 +1106,13 @@ int htt_h2t_rx_ring_cfg(struct htt_soc *htt_soc, int pdev_id,
 	 * pdev_id is indexed from 0 whereas mac_id is indexed from 1
 	 * SW_TO_SW and SW_TO_HW rings are unaffected by this
 	 */
+	target_pdev_id =
+	dp_get_target_pdev_id_for_host_pdev_id(soc->dp_soc, pdev_id);
+
 	if (htt_ring_type == HTT_SW_TO_SW_RING ||
 			htt_ring_type == HTT_SW_TO_HW_RING)
 		HTT_RX_RING_SELECTION_CFG_PDEV_ID_SET(*msg_word,
-						DP_SW2HW_MACID(pdev_id));
+						      target_pdev_id);
 
 	/* TODO: Discuss with FW on changing this to unique ID and using
 	 * htt_ring_type to send the type of ring
@@ -3656,10 +3663,12 @@ dp_ppdu_stats_ind_handler(struct htt_soc *soc,
 				qdf_nbuf_t htt_t2h_msg)
 {
 	u_int8_t pdev_id;
+	u_int8_t target_pdev_id;
 	bool free_buf;
 	qdf_nbuf_set_pktlen(htt_t2h_msg, HTT_T2H_MAX_MSG_SIZE);
-	pdev_id = HTT_T2H_PPDU_STATS_PDEV_ID_GET(*msg_word);
-	pdev_id = DP_HW2SW_MACID(pdev_id);
+	target_pdev_id = HTT_T2H_PPDU_STATS_PDEV_ID_GET(*msg_word);
+	pdev_id = dp_get_host_pdev_id_for_target_pdev_id(soc->dp_soc,
+							 target_pdev_id);
 	free_buf = dp_txrx_ppdu_stats_handler(soc->dp_soc, pdev_id,
 					      htt_t2h_msg);
 	dp_wdi_event_handler(WDI_EVENT_LITE_T2H, soc->dp_soc,
@@ -3691,10 +3700,12 @@ dp_pktlog_msg_handler(struct htt_soc *soc,
 		      uint32_t *msg_word)
 {
 	uint8_t pdev_id;
+	uint8_t target_pdev_id;
 	uint32_t *pl_hdr;
 
-	pdev_id = HTT_T2H_PKTLOG_PDEV_ID_GET(*msg_word);
-	pdev_id = DP_HW2SW_MACID(pdev_id);
+	target_pdev_id = HTT_T2H_PKTLOG_PDEV_ID_GET(*msg_word);
+	pdev_id = dp_get_host_pdev_id_for_target_pdev_id(soc->dp_soc,
+							 target_pdev_id);
 	pl_hdr = (msg_word + 1);
 	dp_wdi_event_handler(WDI_EVENT_OFFLOAD_ALL, soc->dp_soc,
 		pl_hdr, HTT_INVALID_PEER, WDI_NO_VAL,
@@ -3761,6 +3772,7 @@ static void dp_htt_bkp_event_alert(u_int32_t *msg_word, struct htt_soc *soc)
 {
 	u_int8_t ring_type;
 	u_int8_t pdev_id;
+	uint8_t target_pdev_id;
 	u_int8_t ring_id;
 	u_int16_t hp_idx;
 	u_int16_t tp_idx;
@@ -3776,8 +3788,9 @@ static void dp_htt_bkp_event_alert(u_int32_t *msg_word, struct htt_soc *soc)
 	dpsoc = (struct dp_soc *)soc->dp_soc;
 	msg_type = HTT_T2H_MSG_TYPE_GET(*msg_word);
 	ring_type = HTT_T2H_RX_BKPRESSURE_RING_TYPE_GET(*msg_word);
-	pdev_id = HTT_T2H_RX_BKPRESSURE_PDEV_ID_GET(*msg_word);
-	pdev_id = DP_HW2SW_MACID(pdev_id);
+	target_pdev_id = HTT_T2H_RX_BKPRESSURE_PDEV_ID_GET(*msg_word);
+	pdev_id = dp_get_host_pdev_id_for_target_pdev_id(soc->dp_soc,
+							 target_pdev_id);
 	pdev = (struct dp_pdev *)dpsoc->pdev_list[pdev_id];
 	ring_id = HTT_T2H_RX_BKPRESSURE_RINGID_GET(*msg_word);
 	hp_idx = HTT_T2H_RX_BKPRESSURE_HEAD_IDX_GET(*(msg_word + 1));
@@ -4268,6 +4281,8 @@ QDF_STATUS dp_h2t_ext_stats_msg_send(struct dp_pdev *pdev,
 	uint32_t *msg_word;
 	uint8_t pdev_mask = 0;
 	uint8_t *htt_logger_bufp;
+	int mac_for_pdev;
+	int target_pdev_id;
 
 	msg = qdf_nbuf_alloc(
 			soc->osdev,
@@ -4283,9 +4298,11 @@ QDF_STATUS dp_h2t_ext_stats_msg_send(struct dp_pdev *pdev,
 	 * Bit 2: Pdev stats for pdev id 1
 	 * Bit 3: Pdev stats for pdev id 2
 	 */
-	mac_id = dp_get_mac_id_for_pdev(mac_id, pdev->pdev_id);
+	mac_for_pdev = dp_get_mac_id_for_pdev(mac_id, pdev->pdev_id);
+	target_pdev_id =
+	dp_get_target_pdev_id_for_host_pdev_id(pdev->soc, mac_for_pdev);
 
-	pdev_mask = 1 << DP_SW2HW_MACID(mac_id);
+	pdev_mask = 1 << target_pdev_id;
 	/*
 	 * Set the length of the message.
 	 * The contribution from the HTC_HDR_ALIGNMENT_PADDING is added
@@ -4412,7 +4429,8 @@ QDF_STATUS dp_h2t_cfg_stats_msg_send(struct dp_pdev *pdev,
 	 * Bit 2: Pdev stats for pdev id 1
 	 * Bit 3: Pdev stats for pdev id 2
 	 */
-	pdev_mask = 1 << DP_SW2HW_MACID(mac_id);
+	pdev_mask = 1 << dp_get_target_pdev_id_for_host_pdev_id(pdev->soc,
+								mac_id);
 
 	/*
 	 * Set the length of the message.

+ 116 - 1
dp/wifi3.0/dp_internal.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2020 The Linux Foundation. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -1202,6 +1202,121 @@ static inline int dp_get_mac_id_for_pdev(uint32_t mac_id, uint32_t pdev_id)
 	return (mac_id + pdev_id);
 }
 
+/**
+ * dp_get_lmac_id_for_pdev_id() -  Return lmac id corresponding to host pdev id
+ * @soc: soc pointer
+ * @mac_id: MAC id
+ * @pdev_id: pdev_id corresponding to pdev, 0 for MCL
+ *
+ * For MCL, Single pdev using both MACs will operate on both MAC rings.
+ *
+ * For WIN, each PDEV will operate one ring.
+ *
+ */
+static inline int
+dp_get_lmac_id_for_pdev_id
+	(struct dp_soc *soc, uint32_t mac_id, uint32_t pdev_id)
+{
+	if (!wlan_cfg_per_pdev_lmac_ring(soc->wlan_cfg_ctx)) {
+		if (mac_id && pdev_id) {
+			qdf_print("Both mac_id and pdev_id cannot be non zero");
+			QDF_BUG(0);
+			return 0;
+		}
+		return (mac_id + pdev_id);
+	}
+
+	return soc->pdev_list[pdev_id]->lmac_id;
+}
+
+/**
+ * dp_get_pdev_for_lmac_id() -  Return pdev pointer corresponding to lmac id
+ * @soc: soc pointer
+ * @lmac_id: LMAC id
+ *
+ * For MCL, Single pdev exists
+ *
+ * For WIN, each PDEV will operate one ring.
+ *
+ */
+static inline struct dp_pdev *
+	dp_get_pdev_for_lmac_id(struct dp_soc *soc, uint32_t lmac_id)
+{
+	int i = 0;
+
+	if (wlan_cfg_per_pdev_lmac_ring(soc->wlan_cfg_ctx)) {
+		i = wlan_cfg_get_pdev_idx(soc->wlan_cfg_ctx, lmac_id);
+		qdf_assert_always(i < MAX_PDEV_CNT);
+
+		return soc->pdev_list[i];
+	}
+
+	/* Typically for MCL as there only 1 PDEV*/
+	return soc->pdev_list[0];
+}
+
+/**
+ * dp_get_target_pdev_id_for_host_pdev_id() - Return target pdev corresponding
+ *                                         to host pdev id
+ * @soc: soc pointer
+ * @mac_for_pdev: pdev_id corresponding to host pdev for WIN, mac id for MCL
+ *
+ * returns target pdev_id for host pdev id. For WIN, this is derived through
+ * a two step process:
+ * 1. Get lmac_id corresponding to host pdev_id (lmac_id can change
+ *    during mode switch)
+ * 2. Get target pdev_id (set up during WMI ready) from lmac_id
+ *
+ * For MCL, return the offset-1 translated mac_id
+ */
+static inline int
+dp_get_target_pdev_id_for_host_pdev_id
+	(struct dp_soc *soc, uint32_t mac_for_pdev)
+{
+	struct dp_pdev *pdev;
+
+	if (!wlan_cfg_per_pdev_lmac_ring(soc->wlan_cfg_ctx))
+		return DP_SW2HW_MACID(mac_for_pdev);
+
+	pdev = soc->pdev_list[mac_for_pdev];
+
+	/*non-MCL case, get original target_pdev mapping*/
+	return wlan_cfg_get_target_pdev_id(soc->wlan_cfg_ctx, pdev->lmac_id);
+}
+
+/**
+ * dp_get_host_pdev_id_for_target_pdev_id() - Return host pdev corresponding
+ *                                         to target pdev id
+ * @soc: soc pointer
+ * @pdev_id: pdev_id corresponding to target pdev
+ *
+ * returns host pdev_id for target pdev id. For WIN, this is derived through
+ * a two step process:
+ * 1. Get lmac_id corresponding to target pdev_id
+ * 2. Get host pdev_id (set up during WMI ready) from lmac_id
+ *
+ * For MCL, return the 0-offset pdev_id
+ */
+static inline int
+dp_get_host_pdev_id_for_target_pdev_id
+	(struct dp_soc *soc, uint32_t pdev_id)
+{
+	struct dp_pdev *pdev;
+	int lmac_id;
+
+	if (!wlan_cfg_per_pdev_lmac_ring(soc->wlan_cfg_ctx))
+		return DP_HW2SW_MACID(pdev_id);
+
+	/*non-MCL case, get original target_lmac mapping from target pdev*/
+	lmac_id = wlan_cfg_get_hw_mac_idx(soc->wlan_cfg_ctx,
+					  DP_HW2SW_MACID(pdev_id));
+
+	/*Get host pdev from lmac*/
+	pdev = dp_get_pdev_for_lmac_id(soc, lmac_id);
+
+	return pdev->pdev_id;
+}
+
 /*
  * dp_get_mac_id_for_mac() -  Return mac corresponding WIN and MCL mac_ids
  *

+ 339 - 218
dp/wifi3.0/dp_main.c

@@ -340,23 +340,19 @@ uint32_t dp_soc_get_mon_mask_for_interrupt_mode(struct dp_soc *soc, int intr_ctx
 static void dp_service_mon_rings(void *arg)
 {
 	struct dp_soc *soc = (struct dp_soc *)arg;
-	int ring = 0, work_done, mac_id;
+	int ring = 0, work_done;
 	struct dp_pdev *pdev = NULL;
 
-	for  (ring = 0 ; ring < MAX_PDEV_CNT; ring++) {
-		pdev = soc->pdev_list[ring];
+	for  (ring = 0 ; ring < MAX_NUM_LMAC_HW; ring++) {
+		pdev = dp_get_pdev_for_lmac_id(soc, ring);
 		if (!pdev)
 			continue;
-		for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) {
-			int mac_for_pdev = dp_get_mac_id_for_pdev(mac_id,
-								pdev->pdev_id);
-			work_done = dp_mon_process(soc, mac_for_pdev,
-						   QCA_NAPI_BUDGET);
+		work_done = dp_mon_process(soc, ring,
+					   QCA_NAPI_BUDGET);
 
-			QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
-				  FL("Reaped %d descs from Monitor rings"),
-				  work_done);
-		}
+		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
+			  FL("Reaped %d descs from Monitor rings"),
+			  work_done);
 	}
 
 	qdf_timer_mod(&soc->mon_reap_timer, DP_INTR_POLL_TIMER_MS);
@@ -486,36 +482,37 @@ uint32_t dp_soc_get_mon_mask_for_interrupt_mode(struct dp_soc *soc, int intr_ctx
 static void dp_service_lmac_rings(void *arg)
 {
 	struct dp_soc *soc = (struct dp_soc *)arg;
-	int ring = 0, mac_id, i;
+	int ring = 0, i;
 	struct dp_pdev *pdev = NULL;
 	union dp_rx_desc_list_elem_t *desc_list = NULL;
 	union dp_rx_desc_list_elem_t *tail = NULL;
 
 	/* Process LMAC interrupts */
-	for  (ring = 0 ; ring < MAX_PDEV_CNT; ring++) {
-		pdev = soc->pdev_list[ring];
+	for  (ring = 0 ; ring < MAX_NUM_LMAC_HW; ring++) {
+		int mac_for_pdev = ring;
+		struct dp_srng *rx_refill_buf_ring;
+
+		pdev = dp_get_pdev_for_lmac_id(soc, mac_for_pdev);
 		if (!pdev)
 			continue;
-		for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) {
-			int mac_for_pdev = dp_get_mac_id_for_pdev(mac_id,
-					pdev->pdev_id);
-			struct dp_srng *rx_refill_buf_ring =
-				&pdev->rx_refill_buf_ring;
 
-			dp_mon_process(soc, mac_for_pdev,
-				       QCA_NAPI_BUDGET);
+		rx_refill_buf_ring = &soc->rx_refill_buf_ring[mac_for_pdev];
 
-			for (i = 0; i < wlan_cfg_get_num_contexts(soc->wlan_cfg_ctx); i++)
-				dp_rxdma_err_process(&soc->intr_ctx[i], soc,
-						     mac_for_pdev,
-						     QCA_NAPI_BUDGET);
+		dp_mon_process(soc, mac_for_pdev,
+			       QCA_NAPI_BUDGET);
 
-			if (!dp_soc_ring_if_nss_offloaded(soc, RXDMA_BUF, mac_id))
-				dp_rx_buffers_replenish(soc, mac_for_pdev,
-							rx_refill_buf_ring,
-							&soc->rx_desc_buf[mac_for_pdev],
-							0, &desc_list, &tail);
-		}
+		for (i = 0;
+		     i < wlan_cfg_get_num_contexts(soc->wlan_cfg_ctx); i++)
+			dp_rxdma_err_process(&soc->intr_ctx[i], soc,
+					     mac_for_pdev,
+					     QCA_NAPI_BUDGET);
+
+		if (!dp_soc_ring_if_nss_offloaded(soc, RXDMA_BUF,
+						  mac_for_pdev))
+			dp_rx_buffers_replenish(soc, mac_for_pdev,
+						rx_refill_buf_ring,
+						&soc->rx_desc_buf[mac_for_pdev],
+						0, &desc_list, &tail);
 	}
 
 	qdf_timer_mod(&soc->lmac_reap_timer, DP_INTR_POLL_TIMER_MS);
@@ -1513,7 +1510,6 @@ static uint32_t dp_service_srngs(void *dp_ctx, uint32_t dp_budget)
 	uint8_t reo_status_mask = int_ctx->reo_status_ring_mask;
 	uint32_t remaining_quota = dp_budget;
 	struct dp_pdev *pdev = NULL;
-	int mac_id;
 
 	dp_verbose_debug("tx %x rx %x rx_err %x rx_wbm_rel %x reo_status %x rx_mon_ring %x host2rxdma %x rxdma2host %x\n",
 			 tx_mask, rx_mask, rx_err_mask, rx_wbm_rel_mask,
@@ -1613,52 +1609,51 @@ static uint32_t dp_service_srngs(void *dp_ctx, uint32_t dp_budget)
 	}
 
 	/* Process LMAC interrupts */
-	for  (ring = 0 ; ring < MAX_PDEV_CNT; ring++) {
-		pdev = soc->pdev_list[ring];
+	for  (ring = 0 ; ring < MAX_NUM_LMAC_HW; ring++) {
+		int mac_for_pdev = ring;
+
+		pdev = dp_get_pdev_for_lmac_id(soc, mac_for_pdev);
 		if (!pdev)
 			continue;
-		for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) {
-			int mac_for_pdev = dp_get_mac_id_for_pdev(mac_id,
-								pdev->pdev_id);
-			if (int_ctx->rx_mon_ring_mask & (1 << mac_for_pdev)) {
-				work_done = dp_mon_process(soc, mac_for_pdev,
-							   remaining_quota);
-				if (work_done)
-					intr_stats->num_rx_mon_ring_masks++;
-				budget -= work_done;
-				if (budget <= 0)
-					goto budget_done;
-				remaining_quota = budget;
-			}
+		if (int_ctx->rx_mon_ring_mask & (1 << mac_for_pdev)) {
+			work_done = dp_mon_process(soc, mac_for_pdev,
+						   remaining_quota);
+			if (work_done)
+				intr_stats->num_rx_mon_ring_masks++;
+			budget -= work_done;
+			if (budget <= 0)
+				goto budget_done;
+			remaining_quota = budget;
+		}
+
+		if (int_ctx->rxdma2host_ring_mask &
+				(1 << mac_for_pdev)) {
+			work_done = dp_rxdma_err_process(int_ctx, soc,
+							 mac_for_pdev,
+							 remaining_quota);
+			if (work_done)
+				intr_stats->num_rxdma2host_ring_masks++;
+			budget -=  work_done;
+			if (budget <= 0)
+				goto budget_done;
+			remaining_quota = budget;
+		}
 
-			if (int_ctx->rxdma2host_ring_mask &
+		if (int_ctx->host2rxdma_ring_mask &
 					(1 << mac_for_pdev)) {
-				work_done = dp_rxdma_err_process(int_ctx, soc,
-								 mac_for_pdev,
-								 remaining_quota);
-				if (work_done)
-					intr_stats->num_rxdma2host_ring_masks++;
-				budget -=  work_done;
-				if (budget <= 0)
-					goto budget_done;
-				remaining_quota = budget;
-			}
+			union dp_rx_desc_list_elem_t *desc_list = NULL;
+			union dp_rx_desc_list_elem_t *tail = NULL;
+			struct dp_srng *rx_refill_buf_ring =
+				&soc->rx_refill_buf_ring[mac_for_pdev];
+
+			intr_stats->num_host2rxdma_ring_masks++;
+			DP_STATS_INC(pdev, replenish.low_thresh_intrs,
+				     1);
+			dp_rx_buffers_replenish(soc, mac_for_pdev,
+						rx_refill_buf_ring,
+						&soc->rx_desc_buf[mac_for_pdev],
+						0, &desc_list, &tail);
 
-			if (int_ctx->host2rxdma_ring_mask &
-						(1 << mac_for_pdev)) {
-				union dp_rx_desc_list_elem_t *desc_list = NULL;
-				union dp_rx_desc_list_elem_t *tail = NULL;
-				struct dp_srng *rx_refill_buf_ring =
-					&pdev->rx_refill_buf_ring;
-
-				intr_stats->num_host2rxdma_ring_masks++;
-				DP_STATS_INC(pdev, replenish.low_thresh_intrs,
-						1);
-				dp_rx_buffers_replenish(soc, mac_for_pdev,
-							rx_refill_buf_ring,
-							&soc->rx_desc_buf[mac_for_pdev],
-							0, &desc_list, &tail);
-			}
 		}
 	}
 
@@ -1849,29 +1844,24 @@ static void dp_soc_interrupt_map_calculate_integrated(struct dp_soc *soc,
 
 		if (rxdma2host_ring_mask & (1 << j)) {
 			irq_id_map[num_irq++] =
-				rxdma2host_destination_ring_mac1 -
-				wlan_cfg_get_hw_mac_idx(soc->wlan_cfg_ctx, j);
+				rxdma2host_destination_ring_mac1 - j;
 		}
 
 		if (host2rxdma_ring_mask & (1 << j)) {
 			irq_id_map[num_irq++] =
-				host2rxdma_host_buf_ring_mac1 -
-				wlan_cfg_get_hw_mac_idx(soc->wlan_cfg_ctx, j);
+				host2rxdma_host_buf_ring_mac1 -	j;
 		}
 
 		if (host2rxdma_mon_ring_mask & (1 << j)) {
 			irq_id_map[num_irq++] =
-				host2rxdma_monitor_ring1 -
-				wlan_cfg_get_hw_mac_idx(soc->wlan_cfg_ctx, j);
+				host2rxdma_monitor_ring1 - j;
 		}
 
 		if (rx_mon_mask & (1 << j)) {
 			irq_id_map[num_irq++] =
-				ppdu_end_interrupts_mac1 -
-				wlan_cfg_get_hw_mac_idx(soc->wlan_cfg_ctx, j);
+				ppdu_end_interrupts_mac1 - j;
 			irq_id_map[num_irq++] =
-				rxdma2host_monitor_status_ring_mac1 -
-				wlan_cfg_get_hw_mac_idx(soc->wlan_cfg_ctx, j);
+				rxdma2host_monitor_status_ring_mac1 - j;
 		}
 
 		if (rx_wbm_rel_ring_mask & (1 << j))
@@ -3009,11 +2999,9 @@ static int dp_soc_cmn_setup(struct dp_soc *soc)
 	entries = wlan_cfg_get_dp_soc_rxdma_err_dst_ring_size(soc_cfg_ctx);
 	/* LMAC RxDMA to SW Rings configuration */
 	if (!wlan_cfg_per_pdev_lmac_ring(soc_cfg_ctx)) {
-		/* Only valid for MCL */
-		struct dp_pdev *pdev = soc->pdev_list[0];
 
 		for (i = 0; i < MAX_RX_MAC_RINGS; i++) {
-			if (dp_srng_setup(soc, &pdev->rxdma_err_dst_ring[i],
+			if (dp_srng_setup(soc, &soc->rxdma_err_dst_ring[i],
 					  RXDMA_DST, 0, i, entries, 0)) {
 				QDF_TRACE(QDF_MODULE_ID_DP,
 					  QDF_TRACE_LEVEL_ERROR,
@@ -3394,14 +3382,14 @@ QDF_STATUS dp_mon_rings_setup(struct dp_soc *soc, struct dp_pdev *pdev)
 	pdev_cfg_ctx = pdev->wlan_cfg_ctx;
 
 	for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) {
-		int mac_for_pdev = dp_get_mac_id_for_pdev(mac_id, pdev_id);
+		int lmac_id = dp_get_lmac_id_for_pdev_id(soc, mac_id, pdev_id);
 
 		if (soc->wlan_cfg_ctx->rxdma1_enable) {
 			entries =
 			   wlan_cfg_get_dma_mon_buf_ring_size(pdev_cfg_ctx);
 			if (dp_srng_setup(soc,
-					  &pdev->rxdma_mon_buf_ring[mac_id],
-					  RXDMA_MONITOR_BUF, 0, mac_for_pdev,
+					  &soc->rxdma_mon_buf_ring[lmac_id],
+					  RXDMA_MONITOR_BUF, 0,	lmac_id,
 					  entries, 0)) {
 				QDF_TRACE(QDF_MODULE_ID_DP,
 					  QDF_TRACE_LEVEL_ERROR,
@@ -3412,8 +3400,8 @@ QDF_STATUS dp_mon_rings_setup(struct dp_soc *soc, struct dp_pdev *pdev)
 			entries =
 			   wlan_cfg_get_dma_mon_dest_ring_size(pdev_cfg_ctx);
 			if (dp_srng_setup(soc,
-					  &pdev->rxdma_mon_dst_ring[mac_id],
-					  RXDMA_MONITOR_DST, 0, mac_for_pdev,
+					  &soc->rxdma_mon_dst_ring[lmac_id],
+					  RXDMA_MONITOR_DST, 0, lmac_id,
 					  entries, 0)) {
 				QDF_TRACE(QDF_MODULE_ID_DP,
 					  QDF_TRACE_LEVEL_ERROR,
@@ -3424,8 +3412,8 @@ QDF_STATUS dp_mon_rings_setup(struct dp_soc *soc, struct dp_pdev *pdev)
 			entries =
 			    wlan_cfg_get_dma_mon_stat_ring_size(pdev_cfg_ctx);
 			if (dp_srng_setup(soc,
-					  &pdev->rxdma_mon_status_ring[mac_id],
-					  RXDMA_MONITOR_STATUS, 0, mac_for_pdev,
+					  &soc->rxdma_mon_status_ring[lmac_id],
+					  RXDMA_MONITOR_STATUS, 0, lmac_id,
 					  entries, 0)) {
 				QDF_TRACE(QDF_MODULE_ID_DP,
 					  QDF_TRACE_LEVEL_ERROR,
@@ -3436,8 +3424,8 @@ QDF_STATUS dp_mon_rings_setup(struct dp_soc *soc, struct dp_pdev *pdev)
 			entries =
 			   wlan_cfg_get_dma_mon_desc_ring_size(pdev_cfg_ctx);
 			if (dp_srng_setup(soc,
-					  &pdev->rxdma_mon_desc_ring[mac_id],
-					  RXDMA_MONITOR_DESC, 0, mac_for_pdev,
+				  &soc->rxdma_mon_desc_ring[lmac_id],
+					  RXDMA_MONITOR_DESC, 0, lmac_id,
 					  entries, 0)) {
 				QDF_TRACE(QDF_MODULE_ID_DP,
 					  QDF_TRACE_LEVEL_ERROR,
@@ -3448,8 +3436,8 @@ QDF_STATUS dp_mon_rings_setup(struct dp_soc *soc, struct dp_pdev *pdev)
 			entries =
 			   wlan_cfg_get_dma_mon_stat_ring_size(pdev_cfg_ctx);
 			if (dp_srng_setup(soc,
-					  &pdev->rxdma_mon_status_ring[mac_id],
-					  RXDMA_MONITOR_STATUS, 0, mac_for_pdev,
+					  &soc->rxdma_mon_status_ring[lmac_id],
+					  RXDMA_MONITOR_STATUS, 0, lmac_id,
 					  entries, 0)) {
 				QDF_TRACE(QDF_MODULE_ID_DP,
 					  QDF_TRACE_LEVEL_ERROR,
@@ -3651,8 +3639,8 @@ static struct cdp_pdev *dp_pdev_attach_wifi3(struct cdp_soc_t *txrx_soc,
 	ring_size =
 		wlan_cfg_get_dp_soc_rxdma_refill_ring_size(soc->wlan_cfg_ctx);
 
-	if (dp_srng_setup(soc, &pdev->rx_refill_buf_ring, RXDMA_BUF, 0, pdev_id,
-			  ring_size, 0)) {
+	if (dp_srng_setup(soc, &soc->rx_refill_buf_ring[pdev->lmac_id],
+			  RXDMA_BUF, 0, pdev->lmac_id, ring_size, 0)) {
 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
 			 FL("dp_srng_setup failed rx refill ring"));
 		goto fail1;
@@ -3672,8 +3660,10 @@ static struct cdp_pdev *dp_pdev_attach_wifi3(struct cdp_soc_t *txrx_soc,
 
 	entries = wlan_cfg_get_dp_soc_rxdma_err_dst_ring_size(soc_cfg_ctx);
 	if (wlan_cfg_per_pdev_lmac_ring(soc->wlan_cfg_ctx)) {
-		if (dp_srng_setup(soc, &pdev->rxdma_err_dst_ring[0], RXDMA_DST,
-				  0, pdev_id, entries, 0)) {
+		if (dp_srng_setup(soc,
+				  &soc->rxdma_err_dst_ring[pdev->lmac_id],
+				  RXDMA_DST,
+				  0, pdev->lmac_id, entries, 0)) {
 			QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
 				  FL(RNG_ERR "rxdma_err_dst_ring"));
 			goto fail1;
@@ -3871,35 +3861,35 @@ static
 void dp_mon_ring_cleanup(struct dp_soc *soc, struct dp_pdev *pdev,
 			 int mac_id)
 {
-		if (soc->wlan_cfg_ctx->rxdma1_enable) {
-			dp_srng_cleanup(soc,
-					&pdev->rxdma_mon_buf_ring[mac_id],
-					RXDMA_MONITOR_BUF, 0);
+	if (soc->wlan_cfg_ctx->rxdma1_enable) {
+		dp_srng_cleanup(soc,
+				&soc->rxdma_mon_buf_ring[mac_id],
+				RXDMA_MONITOR_BUF, 0);
 
-			dp_srng_cleanup(soc,
-					&pdev->rxdma_mon_dst_ring[mac_id],
-					RXDMA_MONITOR_DST, 0);
+		dp_srng_cleanup(soc,
+				&soc->rxdma_mon_dst_ring[mac_id],
+				RXDMA_MONITOR_DST, 0);
 
-			dp_srng_cleanup(soc,
-					&pdev->rxdma_mon_status_ring[mac_id],
-					RXDMA_MONITOR_STATUS, 0);
+		dp_srng_cleanup(soc,
+				&soc->rxdma_mon_status_ring[mac_id],
+				RXDMA_MONITOR_STATUS, 0);
 
-			dp_srng_cleanup(soc,
-					&pdev->rxdma_mon_desc_ring[mac_id],
-					RXDMA_MONITOR_DESC, 0);
+		dp_srng_cleanup(soc,
+				&soc->rxdma_mon_desc_ring[mac_id],
+				RXDMA_MONITOR_DESC, 0);
 
-			dp_srng_cleanup(soc,
-					&pdev->rxdma_err_dst_ring[mac_id],
-					RXDMA_DST, 0);
-		} else {
-			dp_srng_cleanup(soc,
-					&pdev->rxdma_mon_status_ring[mac_id],
-					RXDMA_MONITOR_STATUS, 0);
+		dp_srng_cleanup(soc,
+				&soc->rxdma_err_dst_ring[mac_id],
+				RXDMA_DST, 0);
+	} else {
+		dp_srng_cleanup(soc,
+				&soc->rxdma_mon_status_ring[mac_id],
+				RXDMA_MONITOR_STATUS, 0);
 
-			dp_srng_cleanup(soc,
-					&pdev->rxdma_err_dst_ring[mac_id],
-					RXDMA_DST, 0);
-		}
+		dp_srng_cleanup(soc,
+				&soc->rxdma_err_dst_ring[mac_id],
+				RXDMA_DST, 0);
+	}
 
 }
 #else
@@ -4039,13 +4029,18 @@ static void dp_pdev_deinit(struct cdp_pdev *txrx_pdev, int force)
 			       REO_DST, pdev->pdev_id);
 	}
 
-	dp_srng_deinit(soc, &pdev->rx_refill_buf_ring, RXDMA_BUF, 0);
+	dp_srng_deinit(soc, &soc->rx_refill_buf_ring[pdev->lmac_id],
+		       RXDMA_BUF, 0);
 
 	dp_rxdma_ring_cleanup(soc, pdev);
 
 	for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) {
-		dp_mon_ring_deinit(soc, pdev, mac_id);
-		dp_srng_deinit(soc, &pdev->rxdma_err_dst_ring[mac_id],
+		int lmac_id =
+			dp_get_lmac_id_for_pdev_id(soc, pdev->pdev_id, mac_id);
+
+		dp_mon_ring_deinit(soc, pdev, lmac_id);
+
+		dp_srng_deinit(soc, &soc->rxdma_err_dst_ring[lmac_id],
 			       RXDMA_DST, 0);
 	}
 
@@ -4120,6 +4115,7 @@ static void dp_pdev_detach(struct cdp_pdev *txrx_pdev, int force)
 	struct dp_soc *soc = pdev->soc;
 	struct rx_desc_pool *rx_desc_pool;
 	int mac_id, mac_for_pdev;
+	int lmac_id;
 
 	if (wlan_cfg_per_pdev_tx_ring(soc->wlan_cfg_ctx)) {
 		dp_srng_cleanup(soc, &soc->tcl_data_ring[pdev->pdev_id],
@@ -4138,16 +4134,21 @@ static void dp_pdev_detach(struct cdp_pdev *txrx_pdev, int force)
 	dp_rxdma_ring_cleanup(soc, pdev);
 	wlan_cfg_pdev_detach(pdev->wlan_cfg_ctx);
 
-	dp_srng_cleanup(soc, &pdev->rx_refill_buf_ring, RXDMA_BUF, 0);
+	dp_srng_cleanup(soc, &soc->rx_refill_buf_ring[pdev->lmac_id],
+			RXDMA_BUF, 0);
 	dp_cleanup_ipa_rx_refill_buf_ring(soc, pdev);
 
 	for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) {
-		dp_mon_ring_cleanup(soc, pdev, mac_id);
-		dp_srng_cleanup(soc, &pdev->rxdma_err_dst_ring[mac_id],
+		lmac_id =
+			dp_get_lmac_id_for_pdev_id(soc, mac_id, pdev->pdev_id);
+		dp_mon_ring_cleanup(soc, pdev, lmac_id);
+		dp_srng_cleanup(soc, &soc->rxdma_err_dst_ring[lmac_id],
 				RXDMA_DST, 0);
+
 		if (dp_is_soc_reinit(soc)) {
-			mac_for_pdev = dp_get_mac_id_for_pdev(mac_id,
-							      pdev->pdev_id);
+			mac_for_pdev =
+				dp_get_lmac_id_for_pdev_id(soc, mac_id,
+							   pdev->pdev_id);
 			rx_desc_pool = &soc->rx_desc_status[mac_for_pdev];
 			dp_rx_desc_pool_free(soc, rx_desc_pool);
 			rx_desc_pool = &soc->rx_desc_mon[mac_for_pdev];
@@ -4465,7 +4466,7 @@ static QDF_STATUS dp_mon_htt_srng_setup(struct dp_soc *soc,
 
 	if (soc->wlan_cfg_ctx->rxdma1_enable) {
 		status = htt_srng_setup(soc->htt_handle, mac_for_pdev,
-					pdev->rxdma_mon_buf_ring[mac_id]
+					soc->rxdma_mon_buf_ring[mac_id]
 					.hal_srng,
 					RXDMA_MONITOR_BUF);
 
@@ -4475,7 +4476,7 @@ static QDF_STATUS dp_mon_htt_srng_setup(struct dp_soc *soc,
 		}
 
 		status = htt_srng_setup(soc->htt_handle, mac_for_pdev,
-					pdev->rxdma_mon_dst_ring[mac_id]
+					soc->rxdma_mon_dst_ring[mac_id]
 					.hal_srng,
 					RXDMA_MONITOR_DST);
 
@@ -4485,7 +4486,7 @@ static QDF_STATUS dp_mon_htt_srng_setup(struct dp_soc *soc,
 		}
 
 		status = htt_srng_setup(soc->htt_handle, mac_for_pdev,
-					pdev->rxdma_mon_status_ring[mac_id]
+					soc->rxdma_mon_status_ring[mac_id]
 					.hal_srng,
 					RXDMA_MONITOR_STATUS);
 
@@ -4495,7 +4496,7 @@ static QDF_STATUS dp_mon_htt_srng_setup(struct dp_soc *soc,
 		}
 
 		status = htt_srng_setup(soc->htt_handle, mac_for_pdev,
-					pdev->rxdma_mon_desc_ring[mac_id]
+				soc->rxdma_mon_desc_ring[mac_id]
 					.hal_srng,
 					RXDMA_MONITOR_DESC);
 
@@ -4505,7 +4506,7 @@ static QDF_STATUS dp_mon_htt_srng_setup(struct dp_soc *soc,
 		}
 	} else {
 		status = htt_srng_setup(soc->htt_handle, mac_for_pdev,
-					pdev->rxdma_mon_status_ring[mac_id]
+					soc->rxdma_mon_status_ring[mac_id]
 					.hal_srng,
 					RXDMA_MONITOR_STATUS);
 
@@ -4554,10 +4555,12 @@ static QDF_STATUS dp_rxdma_ring_config(struct dp_soc *soc)
 			int max_mac_rings =
 				 wlan_cfg_get_num_mac_rings
 				(pdev->wlan_cfg_ctx);
+			int lmac_id = dp_get_lmac_id_for_pdev_id(soc, 0, i);
 
 			htt_srng_setup(soc->htt_handle, 0,
-				 pdev->rx_refill_buf_ring.hal_srng,
-				 RXDMA_BUF);
+				       soc->rx_refill_buf_ring[lmac_id]
+				       .hal_srng,
+				       RXDMA_BUF);
 
 			if (pdev->rx_refill_buf_ring2.hal_srng)
 				htt_srng_setup(soc->htt_handle, 0,
@@ -4589,9 +4592,17 @@ static QDF_STATUS dp_rxdma_ring_config(struct dp_soc *soc)
 					 pdev->pdev_id, max_mac_rings);
 
 			for (mac_id = 0; mac_id < max_mac_rings; mac_id++) {
-				int mac_for_pdev = dp_get_mac_id_for_pdev(
-							mac_id, pdev->pdev_id);
-
+				int mac_for_pdev =
+					dp_get_mac_id_for_pdev(mac_id,
+							       pdev->pdev_id);
+				/*
+				 * Obtain lmac id from pdev to access the LMAC
+				 * ring in soc context
+				 */
+				lmac_id =
+				dp_get_lmac_id_for_pdev_id(soc,
+							   mac_id,
+							   pdev->pdev_id);
 				QDF_TRACE(QDF_MODULE_ID_TXRX,
 					 QDF_TRACE_LEVEL_ERROR,
 					 FL("mac_id %d"), mac_for_pdev);
@@ -4601,13 +4612,13 @@ static QDF_STATUS dp_rxdma_ring_config(struct dp_soc *soc)
 						.hal_srng,
 					 RXDMA_BUF);
 				htt_srng_setup(soc->htt_handle, mac_for_pdev,
-					pdev->rxdma_err_dst_ring[mac_id]
-						.hal_srng,
+				soc->rxdma_err_dst_ring[lmac_id]
+					.hal_srng,
 					RXDMA_DST);
 
 				/* Configure monitor mode rings */
 				status = dp_mon_htt_srng_setup(soc, pdev,
-							       mac_id,
+							       lmac_id,
 							       mac_for_pdev);
 				if (status != QDF_STATUS_SUCCESS) {
 					dp_err("Failed to send htt monitor messages to target");
@@ -4633,38 +4644,40 @@ static QDF_STATUS dp_rxdma_ring_config(struct dp_soc *soc)
 static QDF_STATUS dp_rxdma_ring_config(struct dp_soc *soc)
 {
 	int i;
-	int mac_id;
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
+	int mac_for_pdev;
+	int lmac_id;
 
 	for (i = 0; i < MAX_PDEV_CNT; i++) {
-		struct dp_pdev *pdev = soc->pdev_list[i];
+		struct dp_pdev *pdev =  soc->pdev_list[i];
 
 		if (!pdev)
 			continue;
 
-		for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) {
-			int mac_for_pdev = dp_get_mac_id_for_pdev(mac_id, i);
+		mac_for_pdev = i;
+		lmac_id = dp_get_lmac_id_for_pdev_id(soc, 0, i);
 
-			htt_srng_setup(soc->htt_handle, mac_for_pdev,
-				pdev->rx_refill_buf_ring.hal_srng, RXDMA_BUF);
+		htt_srng_setup(soc->htt_handle, mac_for_pdev,
+			       soc->rx_refill_buf_ring[lmac_id].
+			       hal_srng, RXDMA_BUF);
 #ifndef DISABLE_MON_CONFIG
-			htt_srng_setup(soc->htt_handle, mac_for_pdev,
-				pdev->rxdma_mon_buf_ring[mac_id].hal_srng,
-				RXDMA_MONITOR_BUF);
-			htt_srng_setup(soc->htt_handle, mac_for_pdev,
-				pdev->rxdma_mon_dst_ring[mac_id].hal_srng,
-				RXDMA_MONITOR_DST);
-			htt_srng_setup(soc->htt_handle, mac_for_pdev,
-				pdev->rxdma_mon_status_ring[mac_id].hal_srng,
-				RXDMA_MONITOR_STATUS);
-			htt_srng_setup(soc->htt_handle, mac_for_pdev,
-				pdev->rxdma_mon_desc_ring[mac_id].hal_srng,
-				RXDMA_MONITOR_DESC);
+
+		htt_srng_setup(soc->htt_handle, mac_for_pdev,
+			       soc->rxdma_mon_buf_ring[lmac_id].hal_srng,
+			       RXDMA_MONITOR_BUF);
+		htt_srng_setup(soc->htt_handle, mac_for_pdev,
+			       soc->rxdma_mon_dst_ring[lmac_id].hal_srng,
+			       RXDMA_MONITOR_DST);
+		htt_srng_setup(soc->htt_handle, mac_for_pdev,
+			       soc->rxdma_mon_status_ring[lmac_id].hal_srng,
+			       RXDMA_MONITOR_STATUS);
+		htt_srng_setup(soc->htt_handle, mac_for_pdev,
+			       soc->rxdma_mon_desc_ring[lmac_id].hal_srng,
+			       RXDMA_MONITOR_DESC);
 #endif
-			htt_srng_setup(soc->htt_handle, mac_for_pdev,
-				pdev->rxdma_err_dst_ring[mac_id].hal_srng,
-				RXDMA_DST);
-		}
+		htt_srng_setup(soc->htt_handle, mac_for_pdev,
+			       soc->rxdma_err_dst_ring[lmac_id].hal_srng,
+			       RXDMA_DST);
 	}
 
 	/* Configure LMAC rings in Polled mode */
@@ -4742,11 +4755,19 @@ dp_rxdma_ring_sel_cfg(struct dp_soc *soc)
 			continue;
 
 		for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) {
-			int mac_for_pdev = dp_get_mac_id_for_pdev(mac_id,
-					pdev->pdev_id);
+			int mac_for_pdev =
+				dp_get_mac_id_for_pdev(mac_id, pdev->pdev_id);
+			/*
+			 * Obtain lmac id from pdev to access the LMAC ring
+			 * in soc context
+			 */
+			int lmac_id =
+				dp_get_lmac_id_for_pdev_id(soc, mac_id,
+							   pdev->pdev_id);
 
 			htt_h2t_rx_ring_cfg(soc->htt_handle, mac_for_pdev,
-					    pdev->rx_refill_buf_ring.hal_srng,
+					    soc->rx_refill_buf_ring[lmac_id].
+					    hal_srng,
 					    RXDMA_BUF, RX_BUFFER_SIZE,
 					    &htt_tlv_filter);
 		}
@@ -6494,7 +6515,7 @@ static struct cdp_cfg *dp_get_ctrl_pdev_from_vdev_wifi3(
  * dp_monitor_mode_ring_config() - Send the tlv config to fw for monitor buffer
  *                                 ring based on target
  * @soc: soc handle
- * @mac_for_pdev: pdev_id
+ * @mac_for_pdev: WIN- pdev_id, MCL- mac id
  * @pdev: physical device handle
  * @ring_num: mac id
  * @htt_tlv_filter: tlv filter
@@ -6510,7 +6531,7 @@ QDF_STATUS dp_monitor_mode_ring_config(struct dp_soc *soc, uint8_t mac_for_pdev,
 
 	if (soc->wlan_cfg_ctx->rxdma1_enable)
 		status = htt_h2t_rx_ring_cfg(soc->htt_handle, mac_for_pdev,
-					     pdev->rxdma_mon_buf_ring[ring_num]
+					     soc->rxdma_mon_buf_ring[ring_num]
 					     .hal_srng,
 					     RXDMA_MONITOR_BUF, RX_BUFFER_SIZE,
 					     &htt_tlv_filter);
@@ -6555,9 +6576,13 @@ QDF_STATUS dp_reset_monitor_mode(struct cdp_pdev *pdev_handle)
 
 	for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) {
 		int mac_for_pdev = dp_get_mac_id_for_pdev(mac_id, pdev_id);
-
+		/*
+		 * Obtain lmac id from pdev to access the ring in soc
+		 * context
+		 */
+		int lmac_id = dp_get_lmac_id_for_pdev_id(soc, mac_id, pdev_id);
 		status = dp_monitor_mode_ring_config(soc, mac_for_pdev,
-						     pdev, mac_id,
+						     pdev, lmac_id,
 						     htt_tlv_filter);
 
 		if (status != QDF_STATUS_SUCCESS) {
@@ -6567,9 +6592,10 @@ QDF_STATUS dp_reset_monitor_mode(struct cdp_pdev *pdev_handle)
 		}
 
 		htt_h2t_rx_ring_cfg(soc->htt_handle, mac_for_pdev,
-			    pdev->rxdma_mon_status_ring[mac_id].hal_srng,
-			    RXDMA_MONITOR_STATUS, RX_BUFFER_SIZE,
-			    &htt_tlv_filter);
+				    soc->rxdma_mon_status_ring[lmac_id]
+				    .hal_srng,
+				    RXDMA_MONITOR_STATUS, RX_BUFFER_SIZE,
+				    &htt_tlv_filter);
 	}
 
 	pdev->monitor_vdev = NULL;
@@ -6719,9 +6745,14 @@ QDF_STATUS dp_pdev_configure_monitor_rings(struct dp_pdev *pdev)
 
 	for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) {
 		int mac_for_pdev = dp_get_mac_id_for_pdev(mac_id, pdev_id);
+		/*
+		 * Obtain lmac id from pdev to access the LMAC ring in soc
+		 * context
+		 */
+		int lmac_id = dp_get_lmac_id_for_pdev_id(soc, mac_id, pdev_id);
 
 		status = dp_monitor_mode_ring_config(soc, mac_for_pdev,
-						     pdev, mac_id,
+						     pdev, lmac_id,
 						     htt_tlv_filter);
 
 		if (status != QDF_STATUS_SUCCESS) {
@@ -6778,8 +6809,13 @@ QDF_STATUS dp_pdev_configure_monitor_rings(struct dp_pdev *pdev)
 	htt_tlv_filter.offset_valid = false;
 
 	for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) {
-		int mac_for_pdev = dp_get_mac_id_for_pdev(mac_id,
-						pdev->pdev_id);
+		int mac_for_pdev = dp_get_mac_id_for_pdev(mac_id, pdev_id);
+		/*
+		 * Obtain lmac id from pdev to access the LMAC ring in soc
+		 * context
+		 */
+		int lmac_id = dp_get_lmac_id_for_pdev_id(soc, mac_id, pdev_id);
+
 		/*
 		 * If two back to back HTT msg sending happened in
 		 * short time, the second HTT msg source SRNG HP
@@ -6795,8 +6831,10 @@ QDF_STATUS dp_pdev_configure_monitor_rings(struct dp_pdev *pdev)
 			qdf_udelay(100);
 
 		htt_h2t_rx_ring_cfg(soc->htt_handle, mac_for_pdev,
-			pdev->rxdma_mon_status_ring[mac_id].hal_srng,
-			RXDMA_MONITOR_STATUS, RX_BUFFER_SIZE, &htt_tlv_filter);
+				    soc->rxdma_mon_status_ring[lmac_id]
+				    .hal_srng,
+				    RXDMA_MONITOR_STATUS,
+				    RX_BUFFER_SIZE, &htt_tlv_filter);
 	}
 
 	return status;
@@ -6906,9 +6944,14 @@ dp_pdev_set_advance_monitor_filter(struct cdp_pdev *pdev_handle,
 
 	for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) {
 		int mac_for_pdev = dp_get_mac_id_for_pdev(mac_id, pdev_id);
+		/*
+		 * Obtain lmac id from pdev to access the LMAC ring in soc
+		 * context
+		 */
+		int lmac_id = dp_get_lmac_id_for_pdev_id(soc, mac_id, pdev_id);
 
 		status = dp_monitor_mode_ring_config(soc, mac_for_pdev,
-						     pdev, mac_id,
+						     pdev, lmac_id,
 						     htt_tlv_filter);
 
 		if (status != QDF_STATUS_SUCCESS) {
@@ -6917,7 +6960,7 @@ dp_pdev_set_advance_monitor_filter(struct cdp_pdev *pdev_handle,
 		}
 
 		htt_h2t_rx_ring_cfg(soc->htt_handle, mac_for_pdev,
-			pdev->rxdma_mon_status_ring[mac_id].hal_srng,
+			soc->rxdma_mon_status_ring[lmac_id].hal_srng,
 			RXDMA_MONITOR_STATUS, RX_BUFFER_SIZE, &htt_tlv_filter);
 	}
 
@@ -6952,9 +6995,14 @@ dp_pdev_set_advance_monitor_filter(struct cdp_pdev *pdev_handle,
 
 	for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) {
 		int mac_for_pdev = dp_get_mac_id_for_pdev(mac_id, pdev_id);
+		/*
+		 * Obtain lmac id from pdev to access the LMAC ring in soc
+		 * context
+		 */
+		int lmac_id = dp_get_lmac_id_for_pdev_id(soc, mac_id, pdev_id);
 
 		status = dp_monitor_mode_ring_config(soc, mac_for_pdev,
-						     pdev, mac_id,
+						     pdev, lmac_id,
 						     htt_tlv_filter);
 
 		if (status != QDF_STATUS_SUCCESS) {
@@ -6991,11 +7039,19 @@ dp_pdev_set_advance_monitor_filter(struct cdp_pdev *pdev_handle,
 	htt_tlv_filter.offset_valid = false;
 
 	for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) {
-		int mac_for_pdev = dp_get_mac_id_for_pdev(mac_id,
-						pdev->pdev_id);
+		int mac_for_pdev =
+			dp_get_mac_id_for_pdev(mac_id,
+					       pdev->pdev_id);
+		/*
+		 * Obtain lmac id from pdev to access the LMAC ring in soc
+		 * context
+		 */
+		int lmac_id =
+			dp_get_lmac_id_for_pdev_id(soc,
+						   mac_id, pdev->pdev_id);
 
 		htt_h2t_rx_ring_cfg(soc->htt_handle, mac_for_pdev,
-			pdev->rxdma_mon_status_ring[mac_id].hal_srng,
+			soc->rxdma_mon_status_ring[lmac_id].hal_srng,
 			RXDMA_MONITOR_STATUS, RX_BUFFER_SIZE, &htt_tlv_filter);
 	}
 
@@ -7685,11 +7741,18 @@ dp_ppdu_ring_reset(struct dp_pdev *pdev)
 	qdf_mem_zero(&(htt_tlv_filter), sizeof(htt_tlv_filter));
 
 	for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) {
-		int mac_for_pdev = dp_get_mac_id_for_pdev(mac_id,
-							pdev->pdev_id);
+		int mac_for_pdev =
+			dp_get_mac_id_for_pdev(mac_id, pdev->pdev_id);
+		/*
+		 * Obtain lmac id from pdev to access the LMAC ring in soc
+		 * context
+		 */
+		int lmac_id =
+			dp_get_lmac_id_for_pdev_id(pdev->soc,
+						   mac_id, pdev->pdev_id);
 
 		htt_h2t_rx_ring_cfg(pdev->soc->htt_handle, mac_for_pdev,
-			pdev->rxdma_mon_status_ring[mac_id].hal_srng,
+			pdev->soc->rxdma_mon_status_ring[lmac_id].hal_srng,
 			RXDMA_MONITOR_STATUS, RX_BUFFER_SIZE, &htt_tlv_filter);
 	}
 }
@@ -7743,9 +7806,16 @@ dp_ppdu_ring_cfg(struct dp_pdev *pdev)
 	for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) {
 		int mac_for_pdev = dp_get_mac_id_for_pdev(mac_id,
 						pdev->pdev_id);
+		/*
+		 * Obtain lmac id from pdev to access the LMAC ring in soc
+		 * context
+		 */
+		int lmac_id =
+			dp_get_lmac_id_for_pdev_id(pdev->soc,
+						   mac_id, pdev->pdev_id);
 
 		htt_h2t_rx_ring_cfg(pdev->soc->htt_handle, mac_for_pdev,
-			pdev->rxdma_mon_status_ring[mac_id].hal_srng,
+			pdev->soc->rxdma_mon_status_ring[lmac_id].hal_srng,
 			RXDMA_MONITOR_STATUS, RX_BUFFER_SIZE, &htt_tlv_filter);
 	}
 }
@@ -9072,24 +9142,48 @@ dp_soc_set_dp_txrx_handle(struct cdp_soc *soc_handle, void *txrx_handle)
  * @soc_hdl: datapath soc handle
  * @pdev_id: id of the datapath pdev handle
  * @lmac_id: lmac id
+ * @mode_change: flag to indicate a mode change
  *
  * Return: QDF_STATUS
  */
 static QDF_STATUS
-dp_soc_map_pdev_to_lmac(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
-			uint32_t lmac_id)
+dp_soc_map_pdev_to_lmac
+	(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
+	 uint32_t lmac_id, bool mode_change)
 {
 	struct dp_soc *soc = (struct dp_soc *)soc_hdl;
 	struct dp_pdev *pdev = dp_get_pdev_from_soc_pdev_id_wifi3(soc,
 								  pdev_id);
+	struct dp_vdev *vdev = NULL;
+	int hw_pdev_id;
 
 	if (qdf_unlikely(!pdev))
 		return QDF_STATUS_E_FAILURE;
 
 	pdev->lmac_id = lmac_id;
-	wlan_cfg_set_hw_macid(soc->wlan_cfg_ctx,
-			      pdev_id,
-			      (lmac_id + 1));
+	dp_info(" mode change %d %d\n", pdev->pdev_id, pdev->lmac_id);
+
+	if (!mode_change) {
+		wlan_cfg_set_hw_mac_idx(soc->wlan_cfg_ctx,
+					pdev->pdev_id,
+					lmac_id);
+	}
+
+	/*Set host PDEV ID for lmac_id*/
+	wlan_cfg_set_pdev_idx(soc->wlan_cfg_ctx,
+			      pdev->pdev_id,
+			      lmac_id);
+
+	hw_pdev_id =
+		dp_get_target_pdev_id_for_host_pdev_id(soc,
+						       pdev->pdev_id);
+
+	qdf_spin_lock_bh(&pdev->vdev_list_lock);
+	TAILQ_FOREACH(vdev, &pdev->vdev_list, vdev_list_elem) {
+		HTT_TX_TCL_METADATA_PDEV_ID_SET(vdev->htt_tcl_metadata,
+						hw_pdev_id);
+	}
+	qdf_spin_unlock_bh(&pdev->vdev_list_lock);
 
 	return QDF_STATUS_SUCCESS;
 }
@@ -10934,17 +11028,26 @@ int dp_set_pktlog_wifi3(struct dp_pdev *pdev, uint32_t event,
 
 				for (mac_id = 0; mac_id < max_mac_rings;
 								mac_id++) {
+					int pdev_id = pdev->pdev_id;
 					int mac_for_pdev =
-						dp_get_mac_id_for_pdev(mac_id,
-								pdev->pdev_id);
+					dp_get_mac_id_for_pdev(mac_id,
+							       pdev_id);
+					/*
+					 * Obtain LMAC id from pdev for
+					 * accessing LMAC ring from SOC
+					 */
+					int lmac_id =
+					dp_get_lmac_id_for_pdev_id(soc,
+								   mac_id,
+								   pdev_id);
 
 					htt_h2t_rx_ring_cfg(soc->htt_handle,
-					 mac_for_pdev,
-					 pdev->rxdma_mon_status_ring[mac_id]
-					 .hal_srng,
-					 RXDMA_MONITOR_STATUS,
-					 RX_BUFFER_SIZE,
-					 &htt_tlv_filter);
+					mac_for_pdev,
+					soc->rxdma_mon_status_ring[lmac_id]
+					.hal_srng,
+					RXDMA_MONITOR_STATUS,
+					RX_BUFFER_SIZE,
+					&htt_tlv_filter);
 
 				}
 
@@ -10982,13 +11085,22 @@ int dp_set_pktlog_wifi3(struct dp_pdev *pdev, uint32_t event,
 
 				for (mac_id = 0; mac_id < max_mac_rings;
 								mac_id++) {
+					int pdev_id = pdev->pdev_id;
 					int mac_for_pdev =
-						dp_get_mac_id_for_pdev(mac_id,
-								pdev->pdev_id);
+					dp_get_mac_id_for_pdev(mac_id,
+							       pdev_id);
+					/*
+					 * Obtain lmac id from pdev to access
+					 * the LMAC ring in soc context
+					 */
+					int lmac_id =
+					dp_get_lmac_id_for_pdev_id(soc,
+								   mac_id,
+								   pdev_id);
 
 					htt_h2t_rx_ring_cfg(soc->htt_handle,
 					mac_for_pdev,
-					pdev->rxdma_mon_status_ring[mac_id]
+					soc->rxdma_mon_status_ring[lmac_id]
 					.hal_srng,
 					RXDMA_MONITOR_STATUS,
 					RX_BUFFER_SIZE_PKTLOG_LITE,
@@ -11039,17 +11151,26 @@ int dp_set_pktlog_wifi3(struct dp_pdev *pdev, uint32_t event,
 
 				for (mac_id = 0; mac_id < max_mac_rings;
 								mac_id++) {
+					int pdev_id = pdev->pdev_id;
 					int mac_for_pdev =
-						dp_get_mac_id_for_pdev(mac_id,
-								pdev->pdev_id);
+					dp_get_mac_id_for_pdev(mac_id,
+							       pdev_id);
+					/*
+					 * Obtain lmac id from pdev to access
+					 * the LMAC ring in soc context
+					 */
+					int lmac_id =
+					dp_get_lmac_id_for_pdev_id(soc,
+								   mac_id,
+								   pdev_id);
 
 					htt_h2t_rx_ring_cfg(soc->htt_handle,
-					  mac_for_pdev,
-					  pdev->rxdma_mon_status_ring[mac_id]
-					  .hal_srng,
-					  RXDMA_MONITOR_STATUS,
-					  RX_BUFFER_SIZE,
-					  &htt_tlv_filter);
+					mac_for_pdev,
+					soc->rxdma_mon_status_ring[lmac_id]
+					.hal_srng,
+					RXDMA_MONITOR_STATUS,
+					RX_BUFFER_SIZE,
+					&htt_tlv_filter);
 				}
 
 				if (soc->reap_timer_init)

+ 23 - 15
dp/wifi3.0/dp_rx.c

@@ -114,7 +114,7 @@ QDF_STATUS dp_rx_buffers_replenish(struct dp_soc *dp_soc, uint32_t mac_id,
 {
 	uint32_t num_alloc_desc;
 	uint16_t num_desc_to_free = 0;
-	struct dp_pdev *dp_pdev = dp_get_pdev_for_mac_id(dp_soc, mac_id);
+	struct dp_pdev *dp_pdev = dp_get_pdev_for_lmac_id(dp_soc, mac_id);
 	uint32_t num_entries_avail;
 	uint32_t count;
 	int sync_hw_ptr = 1;
@@ -761,7 +761,7 @@ uint8_t dp_rx_process_invalid_peer(struct dp_soc *soc, qdf_nbuf_t mpdu,
 		goto free;
 	}
 
-	pdev = dp_get_pdev_for_mac_id(soc, mac_id);
+	pdev = dp_get_pdev_for_lmac_id(soc, mac_id);
 
 	if (!pdev || qdf_unlikely(pdev->is_pdev_down)) {
 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
@@ -863,7 +863,7 @@ uint8_t dp_rx_process_invalid_peer(struct dp_soc *soc, qdf_nbuf_t mpdu,
 		goto free;
 	}
 
-	pdev = dp_get_pdev_for_mac_id(soc, mac_id);
+	pdev = dp_get_pdev_for_lmac_id(soc, mac_id);
 	if (!pdev) {
 		QDF_TRACE(QDF_MODULE_ID_DP,
 			  QDF_TRACE_LEVEL_ERROR,
@@ -891,6 +891,13 @@ out:
 	if (soc->cdp_soc.ol_ops->rx_invalid_peer)
 		soc->cdp_soc.ol_ops->rx_invalid_peer(vdev->vdev_id, wh);
 free:
+	/* reset the head and tail pointers */
+	pdev = dp_get_pdev_for_lmac_id(soc, mac_id);
+	if (pdev) {
+		pdev->invalid_peer_head_msdu = NULL;
+		pdev->invalid_peer_tail_msdu = NULL;
+	}
+
 	/* Drop and free packet */
 	curr_nbuf = mpdu;
 	while (curr_nbuf) {
@@ -1725,7 +1732,6 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl,
 	uint8_t *rx_tlv_hdr;
 	uint32_t rx_bufs_reaped[MAX_PDEV_CNT];
 	uint8_t mac_id = 0;
-	struct dp_pdev *pdev;
 	struct dp_pdev *rx_pdev;
 	struct dp_srng *dp_rxdma_srng;
 	struct rx_desc_pool *rx_desc_pool;
@@ -1960,8 +1966,8 @@ done:
 		if (!rx_bufs_reaped[mac_id])
 			continue;
 
-		pdev = soc->pdev_list[mac_id];
-		dp_rxdma_srng = &pdev->rx_refill_buf_ring;
+		dp_rxdma_srng = &soc->rx_refill_buf_ring[mac_id];
+
 		rx_desc_pool = &soc->rx_desc_buf[mac_id];
 
 		dp_rx_buffers_replenish(soc, mac_id, dp_rxdma_srng,
@@ -2312,15 +2318,15 @@ QDF_STATUS dp_rx_vdev_detach(struct dp_vdev *vdev)
 void
 dp_rx_pdev_detach(struct dp_pdev *pdev)
 {
-	uint8_t pdev_id = pdev->pdev_id;
+	uint8_t mac_for_pdev = pdev->lmac_id;
 	struct dp_soc *soc = pdev->soc;
 	struct rx_desc_pool *rx_desc_pool;
 
-	rx_desc_pool = &soc->rx_desc_buf[pdev_id];
+	rx_desc_pool = &soc->rx_desc_buf[mac_for_pdev];
 
 	if (rx_desc_pool->pool_size != 0) {
 		if (!dp_is_soc_reinit(soc))
-			dp_rx_desc_nbuf_and_pool_free(soc, pdev_id,
+			dp_rx_desc_nbuf_and_pool_free(soc, mac_for_pdev,
 						      rx_desc_pool);
 		else
 			dp_rx_desc_nbuf_free(soc, rx_desc_pool);
@@ -2375,7 +2381,7 @@ dp_pdev_rx_buffers_attach(struct dp_soc *dp_soc, uint32_t mac_id,
 			  struct rx_desc_pool *rx_desc_pool,
 			  uint32_t num_req_buffers)
 {
-	struct dp_pdev *dp_pdev = dp_get_pdev_for_mac_id(dp_soc, mac_id);
+	struct dp_pdev *dp_pdev = dp_get_pdev_for_lmac_id(dp_soc, mac_id);
 	hal_ring_handle_t rxdma_srng = dp_rxdma_srng->hal_srng;
 	union dp_rx_desc_list_elem_t *next;
 	void *rxdma_ring_entry;
@@ -2513,7 +2519,7 @@ dp_rx_pdev_attach(struct dp_pdev *pdev)
 	struct dp_srng *dp_rxdma_srng;
 	struct rx_desc_pool *rx_desc_pool;
 	QDF_STATUS ret_val;
-
+	int mac_for_pdev;
 
 	if (wlan_cfg_get_dp_pdev_nss_enabled(pdev->wlan_cfg_ctx)) {
 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO,
@@ -2522,15 +2528,17 @@ dp_rx_pdev_attach(struct dp_pdev *pdev)
 	}
 
 	pdev = soc->pdev_list[pdev_id];
-	dp_rxdma_srng = &pdev->rx_refill_buf_ring;
+	mac_for_pdev = pdev->lmac_id;
+	dp_rxdma_srng = &soc->rx_refill_buf_ring[mac_for_pdev];
+
 	rxdma_entries = dp_rxdma_srng->num_entries;
 
 	soc->process_rx_status = CONFIG_PROCESS_RX_STATUS;
 
-	rx_desc_pool = &soc->rx_desc_buf[pdev_id];
+	rx_desc_pool = &soc->rx_desc_buf[mac_for_pdev];
 	rx_sw_desc_weight = wlan_cfg_get_dp_soc_rx_sw_desc_weight(soc->wlan_cfg_ctx);
 
-	dp_rx_desc_pool_alloc(soc, pdev_id,
+	dp_rx_desc_pool_alloc(soc, mac_for_pdev,
 			      rx_sw_desc_weight * rxdma_entries,
 			      rx_desc_pool);
 
@@ -2546,7 +2554,7 @@ dp_rx_pdev_attach(struct dp_pdev *pdev)
 		return ret_val;
 	}
 
-	return dp_pdev_rx_buffers_attach(soc, pdev_id, dp_rxdma_srng,
+	return dp_pdev_rx_buffers_attach(soc, mac_for_pdev, dp_rxdma_srng,
 					 rx_desc_pool, rxdma_entries - 1);
 }
 

+ 4 - 3
dp/wifi3.0/dp_rx.h

@@ -730,15 +730,16 @@ void *dp_rx_cookie_2_mon_link_desc_va(struct dp_pdev *pdev,
 				  int mac_id)
 {
 	void *link_desc_va;
-	int mac_for_pdev = dp_get_mac_id_for_mac(pdev->soc, mac_id);
 
 	/* TODO */
 	/* Add sanity for  cookie */
 
 	link_desc_va =
-	   pdev->link_desc_banks[mac_for_pdev][buf_info->sw_cookie].base_vaddr +
+	   pdev->soc->mon_link_desc_banks[mac_id][buf_info->sw_cookie]
+			.base_vaddr +
 	   (buf_info->paddr -
-	   pdev->link_desc_banks[mac_for_pdev][buf_info->sw_cookie].base_paddr);
+	   pdev->soc->mon_link_desc_banks[mac_id][buf_info->sw_cookie]
+			.base_paddr);
 
 	return link_desc_va;
 }

+ 5 - 3
dp/wifi3.0/dp_rx_defrag.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017-2019 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -96,13 +96,15 @@ static void dp_rx_return_head_frag_desc(struct dp_peer *peer,
 	struct rx_desc_pool *rx_desc_pool;
 	union dp_rx_desc_list_elem_t *head = NULL;
 	union dp_rx_desc_list_elem_t *tail = NULL;
+	uint8_t pool_id;
 
 	pdev = peer->vdev->pdev;
 	soc = pdev->soc;
 
 	if (peer->rx_tid[tid].head_frag_desc) {
-		dp_rxdma_srng = &pdev->rx_refill_buf_ring;
-		rx_desc_pool = &soc->rx_desc_buf[pdev->pdev_id];
+		pool_id = peer->rx_tid[tid].head_frag_desc->pool_id;
+		dp_rxdma_srng = &soc->rx_refill_buf_ring[pool_id];
+		rx_desc_pool = &soc->rx_desc_buf[pool_id];
 
 		dp_rx_add_to_free_desc_list(&head, &tail,
 					    peer->rx_tid[tid].head_frag_desc);

+ 13 - 14
dp/wifi3.0/dp_rx_err.c

@@ -1303,7 +1303,7 @@ dp_rx_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
 				reo_error[HAL_REO_ERR_PN_CHECK_FAILED],
 				1);
 			/* increment @pdev level */
-			dp_pdev = dp_get_pdev_for_mac_id(soc, mac_id);
+			dp_pdev = dp_get_pdev_for_lmac_id(soc, mac_id);
 			if (dp_pdev)
 				DP_STATS_INC(dp_pdev, err.reo_error, 1);
 			count = dp_rx_pn_error_handle(soc,
@@ -1322,7 +1322,7 @@ dp_rx_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
 				reo_error[HAL_REO_ERR_REGULAR_FRAME_2K_JUMP],
 				1);
 			/* increment @pdev level */
-			dp_pdev = dp_get_pdev_for_mac_id(soc, mac_id);
+			dp_pdev = dp_get_pdev_for_lmac_id(soc, mac_id);
 			if (dp_pdev)
 				DP_STATS_INC(dp_pdev, err.reo_error, 1);
 
@@ -1348,8 +1348,8 @@ done:
 
 	for (mac_id = 0; mac_id < MAX_PDEV_CNT; mac_id++) {
 		if (rx_bufs_reaped[mac_id]) {
-			dp_pdev = soc->pdev_list[mac_id];
-			dp_rxdma_srng = &dp_pdev->rx_refill_buf_ring;
+			dp_pdev = dp_get_pdev_for_lmac_id(soc, mac_id);
+			dp_rxdma_srng = &soc->rx_refill_buf_ring[mac_id];
 			rx_desc_pool = &soc->rx_desc_buf[mac_id];
 
 			dp_rx_buffers_replenish(soc, mac_id, dp_rxdma_srng,
@@ -1489,8 +1489,8 @@ done:
 
 	for (mac_id = 0; mac_id < MAX_PDEV_CNT; mac_id++) {
 		if (rx_bufs_reaped[mac_id]) {
-			dp_pdev = soc->pdev_list[mac_id];
-			dp_rxdma_srng = &dp_pdev->rx_refill_buf_ring;
+			dp_pdev = dp_get_pdev_for_lmac_id(soc, mac_id);
+			dp_rxdma_srng = &soc->rx_refill_buf_ring[mac_id];
 			rx_desc_pool = &soc->rx_desc_buf[mac_id];
 
 			dp_rx_buffers_replenish(soc, mac_id, dp_rxdma_srng,
@@ -1537,7 +1537,7 @@ done:
 					[wbm_err_info.reo_err_code], 1);
 				/* increment @pdev level */
 				pool_id = wbm_err_info.pool_id;
-				dp_pdev = dp_get_pdev_for_mac_id(soc, pool_id);
+				dp_pdev = dp_get_pdev_for_lmac_id(soc, pool_id);
 				if (dp_pdev)
 					DP_STATS_INC(dp_pdev, err.reo_error,
 						     1);
@@ -1600,7 +1600,7 @@ done:
 					[wbm_err_info.rxdma_err_code], 1);
 				/* increment @pdev level */
 				pool_id = wbm_err_info.pool_id;
-				dp_pdev = dp_get_pdev_for_mac_id(soc, pool_id);
+				dp_pdev = dp_get_pdev_for_lmac_id(soc, pool_id);
 				if (dp_pdev)
 					DP_STATS_INC(dp_pdev,
 						     err.rxdma_error, 1);
@@ -1728,7 +1728,7 @@ dp_rx_err_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
 	uint8_t push_reason;
 	uint8_t rxdma_error_code = 0;
 	uint8_t bm_action = HAL_BM_ACTION_PUT_IN_IDLE_LIST;
-	struct dp_pdev *pdev = dp_get_pdev_for_mac_id(soc, mac_id);
+	struct dp_pdev *pdev = dp_get_pdev_for_lmac_id(soc, mac_id);
 	uint32_t rx_link_buf_info[HAL_RX_BUFFINFO_NUM_DWORDS];
 	hal_rxdma_desc_t ring_desc;
 
@@ -1843,8 +1843,7 @@ uint32_t
 dp_rxdma_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
 		     uint32_t mac_id, uint32_t quota)
 {
-	struct dp_pdev *pdev = dp_get_pdev_for_mac_id(soc, mac_id);
-	int mac_for_pdev = dp_get_mac_id_for_mac(soc, mac_id);
+	struct dp_pdev *pdev = dp_get_pdev_for_lmac_id(soc, mac_id);
 	hal_rxdma_desc_t rxdma_dst_ring_desc;
 	hal_soc_handle_t hal_soc;
 	void *err_dst_srng;
@@ -1858,7 +1857,7 @@ dp_rxdma_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
 	if (!pdev)
 		return 0;
 
-	err_dst_srng = pdev->rxdma_err_dst_ring[mac_for_pdev].hal_srng;
+	err_dst_srng = soc->rxdma_err_dst_ring[mac_id].hal_srng;
 
 	if (!err_dst_srng) {
 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
@@ -1891,7 +1890,7 @@ dp_rxdma_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
 	dp_srng_access_end(int_ctx, soc, err_dst_srng);
 
 	if (rx_bufs_used) {
-		dp_rxdma_srng = &pdev->rx_refill_buf_ring;
+		dp_rxdma_srng = &soc->rx_refill_buf_ring[mac_id];
 		rx_desc_pool = &soc->rx_desc_buf[mac_id];
 
 		dp_rx_buffers_replenish(soc, mac_id, dp_rxdma_srng,
@@ -2044,7 +2043,7 @@ dp_handle_wbm_internal_error(struct dp_soc *soc, void *hal_desc,
 
 		DP_STATS_INC(soc, tx.wbm_internal_error[WBM_INT_ERROR_REO_BUFF_REAPED], 1);
 		dp_pdev = soc->pdev_list[pool_id];
-		dp_rxdma_srng = &dp_pdev->rx_refill_buf_ring;
+		dp_rxdma_srng = &soc->rx_refill_buf_ring[pool_id];
 		rx_desc_pool = &soc->rx_desc_buf[pool_id];
 
 		dp_rx_buffers_replenish(soc, pool_id, dp_rxdma_srng,

+ 85 - 88
dp/wifi3.0/dp_rx_mon_dest.c

@@ -62,11 +62,10 @@ dp_rx_mon_link_desc_return(struct dp_pdev *dp_pdev,
 	hal_soc_handle_t hal_soc;
 	QDF_STATUS status = QDF_STATUS_E_FAILURE;
 	void *src_srng_desc;
-	int mac_for_pdev = dp_get_mac_id_for_mac(dp_pdev->soc, mac_id);
 
 	hal_soc = dp_pdev->soc->hal_soc;
 
-	dp_srng = &dp_pdev->rxdma_mon_desc_ring[mac_for_pdev];
+	dp_srng = &dp_pdev->soc->rxdma_mon_desc_ring[mac_id];
 	hal_ring_hdl = dp_srng->hal_srng;
 
 	qdf_assert(hal_ring_hdl);
@@ -178,9 +177,9 @@ void *dp_rxdma_get_mon_dst_ring(struct dp_pdev *pdev,
 				uint8_t mac_for_pdev)
 {
 	if (pdev->soc->wlan_cfg_ctx->rxdma1_enable)
-		return pdev->rxdma_mon_dst_ring[mac_for_pdev].hal_srng;
+		return pdev->soc->rxdma_mon_dst_ring[mac_for_pdev].hal_srng;
 
-	return pdev->rxdma_err_dst_ring[mac_for_pdev].hal_srng;
+	return pdev->soc->rxdma_err_dst_ring[mac_for_pdev].hal_srng;
 }
 
 /**
@@ -196,9 +195,9 @@ struct dp_srng *dp_rxdma_get_mon_buf_ring(struct dp_pdev *pdev,
 					  uint8_t mac_for_pdev)
 {
 	if (pdev->soc->wlan_cfg_ctx->rxdma1_enable)
-		return &pdev->rxdma_mon_buf_ring[mac_for_pdev];
+		return &pdev->soc->rxdma_mon_buf_ring[mac_for_pdev];
 
-	return &pdev->rx_refill_buf_ring;
+	return &pdev->soc->rx_refill_buf_ring[mac_for_pdev];
 }
 
 /**
@@ -261,7 +260,7 @@ dp_rx_mon_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
 	union dp_rx_desc_list_elem_t **head,
 	union dp_rx_desc_list_elem_t **tail)
 {
-	struct dp_pdev *dp_pdev = dp_get_pdev_for_mac_id(soc, mac_id);
+	struct dp_pdev *dp_pdev = dp_get_pdev_for_lmac_id(soc, mac_id);
 	void *rx_desc_tlv;
 	void *rx_msdu_link_desc;
 	qdf_nbuf_t msdu;
@@ -557,7 +556,7 @@ qdf_nbuf_t dp_rx_mon_restitch_mpdu_from_msdus(struct dp_soc *soc,
 	unsigned char *dest;
 	struct ieee80211_frame *wh;
 	struct ieee80211_qoscntl *qos;
-	struct dp_pdev *dp_pdev = dp_get_pdev_for_mac_id(soc, mac_id);
+	struct dp_pdev *dp_pdev = dp_get_pdev_for_lmac_id(soc, mac_id);
 	head_frag_list = NULL;
 	mpdu_buf = NULL;
 
@@ -936,7 +935,7 @@ void dp_rx_extract_radiotap_info(struct cdp_mon_status *rx_status,
 QDF_STATUS dp_rx_mon_deliver(struct dp_soc *soc, uint32_t mac_id,
 	qdf_nbuf_t head_msdu, qdf_nbuf_t tail_msdu)
 {
-	struct dp_pdev *pdev = dp_get_pdev_for_mac_id(soc, mac_id);
+	struct dp_pdev *pdev = dp_get_pdev_for_lmac_id(soc, mac_id);
 	struct cdp_mon_status *rs = &pdev->rx_mon_recv_status;
 	qdf_nbuf_t mon_skb, skb_next;
 	qdf_nbuf_t mon_mpdu = NULL;
@@ -1011,7 +1010,7 @@ mon_deliver_fail:
 QDF_STATUS dp_rx_mon_deliver_non_std(struct dp_soc *soc,
 				     uint32_t mac_id)
 {
-	struct dp_pdev *pdev = dp_get_pdev_for_mac_id(soc, mac_id);
+	struct dp_pdev *pdev = dp_get_pdev_for_lmac_id(soc, mac_id);
 	ol_txrx_rx_mon_fp osif_rx_mon;
 	qdf_nbuf_t dummy_msdu;
 
@@ -1073,7 +1072,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);
+	struct dp_pdev *pdev = dp_get_pdev_for_lmac_id(soc, mac_id);
 	uint8_t pdev_id;
 	hal_rxdma_desc_t rxdma_dst_ring_desc;
 	hal_soc_handle_t hal_soc;
@@ -1083,7 +1082,7 @@ void dp_rx_mon_dest_process(struct dp_soc *soc, uint32_t mac_id, uint32_t quota)
 	uint32_t ppdu_id;
 	uint32_t rx_bufs_used;
 	uint32_t mpdu_rx_bufs_used;
-	int mac_for_pdev = dp_get_mac_id_for_mac(soc, mac_id);
+	int mac_for_pdev = mac_id;
 	struct cdp_pdev_mon_stats *rx_mon_stats;
 
 	mon_dst_srng = dp_rxdma_get_mon_dst_ring(pdev, mac_for_pdev);
@@ -1205,10 +1204,9 @@ dp_rx_pdev_mon_buf_attach(struct dp_pdev *pdev, int mac_id) {
 	uint32_t num_entries;
 	struct rx_desc_pool *rx_desc_pool;
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
-	uint8_t mac_for_pdev = dp_get_mac_id_for_mac(soc, mac_id);
 	uint32_t rx_desc_pool_size, replenish_size;
 
-	mon_buf_ring = &pdev->rxdma_mon_buf_ring[mac_for_pdev];
+	mon_buf_ring = &soc->rxdma_mon_buf_ring[mac_id];
 
 	num_entries = mon_buf_ring->num_entries;
 
@@ -1264,8 +1262,6 @@ dp_rx_pdev_mon_buf_detach(struct dp_pdev *pdev, int mac_id)
 static
 QDF_STATUS dp_mon_link_desc_pool_setup(struct dp_soc *soc, uint32_t mac_id)
 {
-	struct dp_pdev *dp_pdev = dp_get_pdev_for_mac_id(soc, mac_id);
-	int mac_for_pdev = dp_get_mac_id_for_mac(soc, mac_id);
 	int link_desc_size = hal_get_link_desc_size(soc->hal_soc);
 	int link_desc_align = hal_get_link_desc_align(soc->hal_soc);
 	uint32_t max_alloc_size = wlan_cfg_max_alloc_size(soc->wlan_cfg_ctx);
@@ -1279,7 +1275,7 @@ QDF_STATUS dp_mon_link_desc_pool_setup(struct dp_soc *soc, uint32_t mac_id)
 	int i;
 	qdf_dma_addr_t *baseaddr = NULL;
 
-	dp_srng = &dp_pdev->rxdma_mon_desc_ring[mac_for_pdev];
+	dp_srng = &soc->rxdma_mon_desc_ring[mac_id];
 
 	num_entries = dp_srng->alloc_size/hal_srng_get_entrysize(
 					soc->hal_soc, RXDMA_MONITOR_DESC);
@@ -1315,17 +1311,17 @@ QDF_STATUS dp_mon_link_desc_pool_setup(struct dp_soc *soc, uint32_t mac_id)
 		  __func__, max_alloc_size, last_bank_size);
 
 	for (i = 0; i < num_link_desc_banks; i++) {
-		baseaddr = &dp_pdev->link_desc_banks[mac_for_pdev][i].
+		baseaddr = &soc->mon_link_desc_banks[mac_id][i].
 			base_paddr_unaligned;
 		if (!dp_is_soc_reinit(soc)) {
-			dp_pdev->link_desc_banks[mac_for_pdev][i].
+			soc->mon_link_desc_banks[mac_id][i].
 				base_vaddr_unaligned =
 				qdf_mem_alloc_consistent(soc->osdev,
 							 soc->osdev->dev,
 							 max_alloc_size,
 							 baseaddr);
 
-			if (!dp_pdev->link_desc_banks[mac_for_pdev][i].
+			if (!soc->mon_link_desc_banks[mac_id][i].
 					base_vaddr_unaligned) {
 				QDF_TRACE(QDF_MODULE_ID_TXRX,
 					  QDF_TRACE_LEVEL_ERROR,
@@ -1334,25 +1330,25 @@ QDF_STATUS dp_mon_link_desc_pool_setup(struct dp_soc *soc, uint32_t mac_id)
 				goto fail;
 			}
 		}
-		dp_pdev->link_desc_banks[mac_for_pdev][i].size = max_alloc_size;
+		soc->mon_link_desc_banks[mac_id][i].size = max_alloc_size;
 
-		dp_pdev->link_desc_banks[mac_for_pdev][i].base_vaddr =
+		soc->mon_link_desc_banks[mac_id][i].base_vaddr =
 		 (void *)((unsigned long)
-		 (dp_pdev->link_desc_banks[mac_for_pdev][i].
+		 (soc->mon_link_desc_banks[mac_id][i].
 							base_vaddr_unaligned) +
 		 ((unsigned long)
-		 (dp_pdev->link_desc_banks[mac_for_pdev][i].
+		 (soc->mon_link_desc_banks[mac_id][i].
 							base_vaddr_unaligned) %
 		 link_desc_align));
 
-		dp_pdev->link_desc_banks[mac_for_pdev][i].base_paddr =
+		soc->mon_link_desc_banks[mac_id][i].base_paddr =
 			(unsigned long)
-			(dp_pdev->link_desc_banks[mac_for_pdev][i].
+			(soc->mon_link_desc_banks[mac_id][i].
 							base_paddr_unaligned) +
 			((unsigned long)
-			(dp_pdev->link_desc_banks[mac_for_pdev][i].base_vaddr) -
+			(soc->mon_link_desc_banks[mac_id][i].base_vaddr) -
 			 (unsigned long)
-			 (dp_pdev->link_desc_banks[mac_for_pdev][i].
+			 (soc->mon_link_desc_banks[mac_id][i].
 							base_vaddr_unaligned));
 	}
 
@@ -1360,17 +1356,17 @@ QDF_STATUS dp_mon_link_desc_pool_setup(struct dp_soc *soc, uint32_t mac_id)
 		/* Allocate last bank in case total memory required is not exact
 		 * multiple of max_alloc_size
 		 */
-		baseaddr = &dp_pdev->link_desc_banks[mac_for_pdev][i].
+		baseaddr = &soc->mon_link_desc_banks[mac_id][i].
 			base_paddr_unaligned;
 		if (!dp_is_soc_reinit(soc)) {
-			dp_pdev->link_desc_banks[mac_for_pdev][i].
+			soc->mon_link_desc_banks[mac_id][i].
 				base_vaddr_unaligned =
 				qdf_mem_alloc_consistent(soc->osdev,
 							 soc->osdev->dev,
 							 last_bank_size,
 							 baseaddr);
 
-			if (!dp_pdev->link_desc_banks[mac_for_pdev][i].
+			if (!soc->mon_link_desc_banks[mac_id][i].
 					base_vaddr_unaligned) {
 				QDF_TRACE(QDF_MODULE_ID_TXRX,
 					  QDF_TRACE_LEVEL_ERROR,
@@ -1379,33 +1375,34 @@ QDF_STATUS dp_mon_link_desc_pool_setup(struct dp_soc *soc, uint32_t mac_id)
 				goto fail;
 			}
 		}
-		dp_pdev->link_desc_banks[mac_for_pdev][i].size = last_bank_size;
+		soc->mon_link_desc_banks[mac_id][i].size =
+			last_bank_size;
 
-		dp_pdev->link_desc_banks[mac_for_pdev][i].base_vaddr =
+		soc->mon_link_desc_banks[mac_id][i].base_vaddr =
 		(void *)((unsigned long)
-		(dp_pdev->link_desc_banks[mac_for_pdev][i].
-							base_vaddr_unaligned) +
+		(soc->mon_link_desc_banks[mac_id][i].
+			base_vaddr_unaligned) +
 		((unsigned long)
-		(dp_pdev->link_desc_banks[mac_for_pdev][i].
-							base_vaddr_unaligned) %
+		(soc->mon_link_desc_banks[mac_id][i].
+			base_vaddr_unaligned) %
 		link_desc_align));
 
-		dp_pdev->link_desc_banks[mac_for_pdev][i].base_paddr =
+		soc->mon_link_desc_banks[mac_id][i].base_paddr =
 		(unsigned long)
-		(dp_pdev->link_desc_banks[mac_for_pdev][i].
-							base_paddr_unaligned) +
+		(soc->mon_link_desc_banks[mac_id][i].
+			base_paddr_unaligned) +
 		((unsigned long)
-		(dp_pdev->link_desc_banks[mac_for_pdev][i].base_vaddr) -
+		(soc->mon_link_desc_banks[mac_id][i].base_vaddr) -
 		(unsigned long)
-		(dp_pdev->link_desc_banks[mac_for_pdev][i].
-							base_vaddr_unaligned));
+		(soc->mon_link_desc_banks[mac_id][i].
+			base_vaddr_unaligned));
 	}
 
 	/* Allocate and setup link descriptor idle list for HW internal use */
 	entry_size = hal_srng_get_entrysize(soc->hal_soc, RXDMA_MONITOR_DESC);
 	total_mem_size = entry_size * total_link_descs;
 
-	mon_desc_srng = dp_pdev->rxdma_mon_desc_ring[mac_for_pdev].hal_srng;
+	mon_desc_srng = soc->rxdma_mon_desc_ring[mac_id].hal_srng;
 
 	num_replenish_buf = 0;
 
@@ -1414,22 +1411,22 @@ QDF_STATUS dp_mon_link_desc_pool_setup(struct dp_soc *soc, uint32_t mac_id)
 
 
 		for (i = 0;
-		     i < MAX_MON_LINK_DESC_BANKS &&
-		     dp_pdev->link_desc_banks[mac_for_pdev][i].base_paddr;
-		     i++) {
+			 i < MAX_MON_LINK_DESC_BANKS &&
+			 soc->mon_link_desc_banks[mac_id][i].base_paddr;
+			 i++) {
 			uint32_t num_entries =
-			(dp_pdev->link_desc_banks[mac_for_pdev][i].size -
+			(soc->mon_link_desc_banks[mac_id][i].size -
 			(unsigned long)
-			(dp_pdev->link_desc_banks[mac_for_pdev][i].base_vaddr) -
+			(soc->mon_link_desc_banks[mac_id][i].base_vaddr) -
 			(unsigned long)
-			(dp_pdev->link_desc_banks[mac_for_pdev][i].
+			(soc->mon_link_desc_banks[mac_id][i].
 					base_vaddr_unaligned)) / link_desc_size;
 			unsigned long paddr =
 			 (unsigned long)
-			 (dp_pdev->link_desc_banks[mac_for_pdev][i].base_paddr);
+			 (soc->mon_link_desc_banks[mac_id][i].base_paddr);
 			unsigned long vaddr =
 			 (unsigned long)
-			 (dp_pdev->link_desc_banks[mac_for_pdev][i].base_vaddr);
+			 (soc->mon_link_desc_banks[mac_id][i].base_vaddr);
 
 			hal_srng_access_start_unlocked(soc->hal_soc,
 								mon_desc_srng);
@@ -1438,7 +1435,7 @@ QDF_STATUS dp_mon_link_desc_pool_setup(struct dp_soc *soc, uint32_t mac_id)
 				hal_srng_src_get_next(soc->hal_soc,
 					mon_desc_srng))) {
 
-				hal_set_link_desc_addr(desc, i,	paddr);
+				hal_set_link_desc_addr(desc, i, paddr);
 				num_entries--;
 				num_replenish_buf++;
 				paddr += link_desc_size;
@@ -1459,16 +1456,17 @@ QDF_STATUS dp_mon_link_desc_pool_setup(struct dp_soc *soc, uint32_t mac_id)
 
 fail:
 	for (i = 0; i < MAX_MON_LINK_DESC_BANKS; i++) {
-		if (dp_pdev->link_desc_banks[mac_for_pdev][i].
-							base_vaddr_unaligned) {
-			qdf_mem_free_consistent(soc->osdev, soc->osdev->dev,
-			dp_pdev->link_desc_banks[mac_for_pdev][i].size,
-			dp_pdev->link_desc_banks[mac_for_pdev][i].
-							base_vaddr_unaligned,
-			dp_pdev->link_desc_banks[mac_for_pdev][i].
-						base_paddr_unaligned, 0);
-			dp_pdev->link_desc_banks[mac_for_pdev][i].
-						base_vaddr_unaligned = NULL;
+		if (soc->mon_link_desc_banks[mac_id][i].
+						base_vaddr_unaligned) {
+		qdf_mem_free_consistent(soc->osdev, soc->osdev->dev,
+					soc->mon_link_desc_banks[mac_id][i].
+					size,
+					soc->mon_link_desc_banks[mac_id][i].
+					base_vaddr_unaligned,
+					soc->mon_link_desc_banks[mac_id][i].
+					base_paddr_unaligned, 0);
+					soc->mon_link_desc_banks[mac_id][i].
+					base_vaddr_unaligned = NULL;
 		}
 	}
 	return QDF_STATUS_E_FAILURE;
@@ -1480,21 +1478,20 @@ fail:
 static
 void dp_mon_link_desc_pool_cleanup(struct dp_soc *soc, uint32_t mac_id)
 {
-	struct dp_pdev *dp_pdev = dp_get_pdev_for_mac_id(soc, mac_id);
-	int mac_for_pdev = dp_get_mac_id_for_mac(soc, mac_id);
 	int i;
 
 	for (i = 0; i < MAX_MON_LINK_DESC_BANKS; i++) {
-		if (dp_pdev->link_desc_banks[mac_for_pdev][i].
-							base_vaddr_unaligned) {
-			qdf_mem_free_consistent(soc->osdev, soc->osdev->dev,
-			dp_pdev->link_desc_banks[mac_for_pdev][i].size,
-			dp_pdev->link_desc_banks[mac_for_pdev][i].
-							base_vaddr_unaligned,
-			dp_pdev->link_desc_banks[mac_for_pdev][i].
-						base_paddr_unaligned, 0);
-			dp_pdev->link_desc_banks[mac_for_pdev][i].
-						base_vaddr_unaligned = NULL;
+		if (soc->mon_link_desc_banks[mac_id][i].
+						base_vaddr_unaligned) {
+		qdf_mem_free_consistent(soc->osdev, soc->osdev->dev,
+					soc->mon_link_desc_banks[mac_id][i].
+					size,
+					soc->mon_link_desc_banks[mac_id][i].
+					base_vaddr_unaligned,
+					soc->mon_link_desc_banks[mac_id][i].
+					base_paddr_unaligned, 0);
+		soc->mon_link_desc_banks[mac_id][i].
+					base_vaddr_unaligned = NULL;
 		}
 	}
 }
@@ -1512,27 +1509,25 @@ void dp_mon_buf_delayed_replenish(struct dp_pdev *pdev)
 	union dp_rx_desc_list_elem_t *tail = NULL;
 	union dp_rx_desc_list_elem_t *desc_list = NULL;
 	uint32_t num_entries;
-	uint32_t mac_id, id;
+	uint32_t id;
 
 	soc = pdev->soc;
 	num_entries = wlan_cfg_get_dma_mon_buf_ring_size(pdev->wlan_cfg_ctx);
 
 	for (id = 0; id < NUM_RXDMA_RINGS_PER_PDEV; id++) {
-		mac_for_pdev = dp_get_mac_id_for_pdev(id,
-						      pdev->pdev_id);
-
 		/*
-		 * Map mac_for_pdev appropriately for both MCL & WIN,
+		 * Get mac_for_pdev appropriately for both MCL & WIN,
 		 * since MCL have multiple mon buf rings and WIN just
-		 * has one mon buffer ring, below API helps identify
-		 * accurate buffer_ring for both cases
+		 * has one mon buffer ring mapped per pdev, below API
+		 * helps identify accurate buffer_ring for both cases
 		 *
 		 */
-		mac_id = dp_get_mac_id_for_mac(soc, mac_for_pdev);
+		mac_for_pdev =
+			dp_get_lmac_id_for_pdev_id(soc, id, pdev->pdev_id);
 
 		dp_rx_buffers_replenish(soc, mac_for_pdev,
 					dp_rxdma_get_mon_buf_ring(pdev,
-								  mac_id),
+								  mac_for_pdev),
 					dp_rx_get_mon_desc_pool(soc,
 								mac_for_pdev,
 								pdev->pdev_id),
@@ -1582,7 +1577,7 @@ static QDF_STATUS
 dp_rx_pdev_mon_cmn_detach(struct dp_pdev *pdev, int mac_id) {
 	struct dp_soc *soc = pdev->soc;
 	uint8_t pdev_id = pdev->pdev_id;
-	int mac_for_pdev = dp_get_mac_id_for_pdev(mac_id, pdev_id);
+	int mac_for_pdev = dp_get_lmac_id_for_pdev_id(soc, mac_id, pdev_id);
 
 	dp_mon_link_desc_pool_cleanup(soc, mac_for_pdev);
 	dp_rx_pdev_mon_status_detach(pdev, mac_for_pdev);
@@ -1606,7 +1601,7 @@ static QDF_STATUS
 dp_rx_pdev_mon_cmn_attach(struct dp_pdev *pdev, int mac_id) {
 	struct dp_soc *soc = pdev->soc;
 	uint8_t pdev_id = pdev->pdev_id;
-	int mac_for_pdev = dp_get_mac_id_for_pdev(mac_id, pdev_id);
+	int mac_for_pdev = dp_get_lmac_id_for_pdev_id(soc, mac_id, pdev_id);
 	QDF_STATUS status;
 
 	status = dp_rx_pdev_mon_buf_attach(pdev, mac_for_pdev);
@@ -1688,7 +1683,8 @@ dp_mon_link_free(struct dp_pdev *pdev) {
 	int mac_id;
 
 	for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) {
-		int mac_for_pdev = dp_get_mac_id_for_pdev(mac_id, pdev_id);
+		int mac_for_pdev = dp_get_lmac_id_for_pdev_id(soc,
+							   mac_id, pdev_id);
 
 		dp_mon_link_desc_pool_cleanup(soc, mac_for_pdev);
 	}
@@ -1713,7 +1709,8 @@ dp_rx_pdev_mon_detach(struct dp_pdev *pdev) {
 
 	qdf_spinlock_destroy(&pdev->mon_lock);
 	for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) {
-		int mac_for_pdev = dp_get_mac_id_for_pdev(mac_id, pdev_id);
+		int mac_for_pdev = dp_get_lmac_id_for_pdev_id(pdev->soc,
+							   mac_id, pdev_id);
 
 		dp_rx_pdev_mon_status_detach(pdev, mac_for_pdev);
 		dp_rx_pdev_mon_buf_detach(pdev, mac_for_pdev);

+ 5 - 7
dp/wifi3.0/dp_rx_mon_status.c

@@ -1370,7 +1370,7 @@ static inline void
 dp_rx_mon_status_process_tlv(struct dp_soc *soc, uint32_t mac_id,
 	uint32_t quota)
 {
-	struct dp_pdev *pdev = dp_get_pdev_for_mac_id(soc, mac_id);
+	struct dp_pdev *pdev = dp_get_pdev_for_lmac_id(soc, mac_id);
 	struct hal_rx_ppdu_info *ppdu_info;
 	qdf_nbuf_t status_nbuf;
 	uint8_t *rx_tlv;
@@ -1522,15 +1522,14 @@ static inline uint32_t
 dp_rx_mon_status_srng_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);
+	struct dp_pdev *pdev = dp_get_pdev_for_lmac_id(soc, mac_id);
 	hal_soc_handle_t hal_soc;
 	void *mon_status_srng;
 	void *rxdma_mon_status_ring_entry;
 	QDF_STATUS status;
 	uint32_t work_done = 0;
-	int mac_for_pdev = dp_get_mac_id_for_mac(soc, mac_id);
 
-	mon_status_srng = pdev->rxdma_mon_status_ring[mac_for_pdev].hal_srng;
+	mon_status_srng = soc->rxdma_mon_status_ring[mac_id].hal_srng;
 
 	qdf_assert(mon_status_srng);
 	if (!mon_status_srng || !hal_srng_initialized(mon_status_srng)) {
@@ -1782,7 +1781,7 @@ QDF_STATUS dp_rx_mon_status_buffers_replenish(struct dp_soc *dp_soc,
 	void *rxdma_ring_entry;
 	union dp_rx_desc_list_elem_t *next;
 	void *rxdma_srng;
-	struct dp_pdev *dp_pdev = dp_get_pdev_for_mac_id(dp_soc, mac_id);
+	struct dp_pdev *dp_pdev = dp_get_pdev_for_lmac_id(dp_soc, mac_id);
 
 	rxdma_srng = dp_rxdma_srng->hal_srng;
 
@@ -1917,9 +1916,8 @@ dp_rx_pdev_mon_status_attach(struct dp_pdev *pdev, int ring_id) {
 	uint32_t i;
 	struct rx_desc_pool *rx_desc_pool;
 	QDF_STATUS status;
-	int mac_for_pdev = dp_get_mac_id_for_mac(soc, ring_id);
 
-	mon_status_ring = &pdev->rxdma_mon_status_ring[mac_for_pdev];
+	mon_status_ring = &soc->rxdma_mon_status_ring[ring_id];
 
 	num_entries = mon_status_ring->num_entries;
 

+ 26 - 16
dp/wifi3.0/dp_stats.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017-2019 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -4750,19 +4750,19 @@ void dp_print_mon_ring_stat_from_hal(struct dp_pdev *pdev, uint8_t mac_id)
 {
 	if (pdev->soc->wlan_cfg_ctx->rxdma1_enable) {
 		dp_print_ring_stat_from_hal(pdev->soc,
-					    &pdev->rxdma_mon_buf_ring[mac_id],
-					    RXDMA_MONITOR_BUF);
+			&pdev->soc->rxdma_mon_buf_ring[mac_id],
+			RXDMA_MONITOR_BUF);
 		dp_print_ring_stat_from_hal(pdev->soc,
-					    &pdev->rxdma_mon_dst_ring[mac_id],
-					    RXDMA_MONITOR_DST);
+			&pdev->soc->rxdma_mon_dst_ring[mac_id],
+			RXDMA_MONITOR_DST);
 		dp_print_ring_stat_from_hal(pdev->soc,
-					    &pdev->rxdma_mon_desc_ring[mac_id],
-					    RXDMA_MONITOR_DESC);
+			&pdev->soc->rxdma_mon_desc_ring[mac_id],
+			RXDMA_MONITOR_DESC);
 	}
 
 	dp_print_ring_stat_from_hal(pdev->soc,
-				    &pdev->rxdma_mon_status_ring[mac_id],
-				    RXDMA_MONITOR_STATUS);
+				    &pdev->soc->rxdma_mon_status_ring[mac_id],
+					RXDMA_MONITOR_STATUS);
 }
 
 void
@@ -4770,6 +4770,7 @@ dp_print_ring_stats(struct dp_pdev *pdev)
 {
 	uint32_t i;
 	int mac_id;
+	int lmac_id;
 
 	if (hif_pm_runtime_get_sync(pdev->soc->hif_handle))
 		return;
@@ -4812,9 +4813,10 @@ dp_print_ring_stats(struct dp_pdev *pdev)
 					    &pdev->soc->tx_comp_ring[i],
 					    WBM2SW_RELEASE);
 
+	lmac_id = dp_get_lmac_id_for_pdev_id(pdev->soc, 0, pdev->pdev_id);
 	dp_print_ring_stat_from_hal(pdev->soc,
-				    &pdev->rx_refill_buf_ring,
-				    RXDMA_BUF);
+				&pdev->soc->rx_refill_buf_ring[lmac_id],
+				RXDMA_BUF);
 
 	dp_print_ring_stat_from_hal(pdev->soc,
 				    &pdev->rx_refill_buf_ring2,
@@ -4825,14 +4827,22 @@ dp_print_ring_stats(struct dp_pdev *pdev)
 					    &pdev->rx_mac_buf_ring[i],
 					    RXDMA_BUF);
 
-	for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++)
-		dp_print_mon_ring_stat_from_hal(pdev, mac_id);
+	for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) {
+		lmac_id = dp_get_lmac_id_for_pdev_id(pdev->soc,
+						     mac_id, pdev->pdev_id);
+
+		dp_print_mon_ring_stat_from_hal(pdev, lmac_id);
+	}
+
+	for (i = 0; i < NUM_RXDMA_RINGS_PER_PDEV; i++)	{
+		lmac_id = dp_get_lmac_id_for_pdev_id(pdev->soc,
+						     i, pdev->pdev_id);
 
-	for (i = 0; i < NUM_RXDMA_RINGS_PER_PDEV; i++)
 		dp_print_ring_stat_from_hal(pdev->soc,
-					    &pdev->rxdma_err_dst_ring[i],
+					    &pdev->soc->rxdma_err_dst_ring
+					    [lmac_id],
 					    RXDMA_DST);
-
+	}
 	hif_pm_runtime_put(pdev->soc->hif_handle);
 }
 

+ 5 - 2
dp/wifi3.0/dp_tx.c

@@ -3722,6 +3722,7 @@ qdf_nbuf_t dp_tx_non_std(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
  */
 QDF_STATUS dp_tx_vdev_attach(struct dp_vdev *vdev)
 {
+	int pdev_id;
 	/*
 	 * Fill HTT TCL Metadata with Vdev ID and MAC ID
 	 */
@@ -3731,8 +3732,10 @@ QDF_STATUS dp_tx_vdev_attach(struct dp_vdev *vdev)
 	HTT_TX_TCL_METADATA_VDEV_ID_SET(vdev->htt_tcl_metadata,
 			vdev->vdev_id);
 
-	HTT_TX_TCL_METADATA_PDEV_ID_SET(vdev->htt_tcl_metadata,
-			DP_SW2HW_MACID(vdev->pdev->pdev_id));
+	pdev_id =
+		dp_get_target_pdev_id_for_host_pdev_id(vdev->pdev->soc,
+						       vdev->pdev->pdev_id);
+	HTT_TX_TCL_METADATA_PDEV_ID_SET(vdev->htt_tcl_metadata, pdev_id);
 
 	/*
 	 * Set HTT Extension Valid bit to 0 by default

+ 26 - 26
dp/wifi3.0/dp_types.h

@@ -907,6 +907,32 @@ struct dp_soc {
 	/* PDEVs on this SOC */
 	struct dp_pdev *pdev_list[MAX_PDEV_CNT];
 
+	/* Ring used to replenish rx buffers (maybe to the firmware of MAC) */
+	struct dp_srng rx_refill_buf_ring[MAX_PDEV_CNT];
+
+	struct dp_srng rxdma_mon_desc_ring[MAX_NUM_LMAC_HW];
+
+	/* RXDMA error destination ring */
+	struct dp_srng rxdma_err_dst_ring[MAX_NUM_LMAC_HW];
+
+	/* Link descriptor memory banks */
+	struct {
+		void *base_vaddr_unaligned;
+		void *base_vaddr;
+		qdf_dma_addr_t base_paddr_unaligned;
+		qdf_dma_addr_t base_paddr;
+		uint32_t size;
+	} mon_link_desc_banks[MAX_NUM_LMAC_HW][MAX_MON_LINK_DESC_BANKS];
+
+	/* RXDMA monitor buffer replenish ring */
+	struct dp_srng rxdma_mon_buf_ring[MAX_NUM_LMAC_HW];
+
+	/* RXDMA monitor destination ring */
+	struct dp_srng rxdma_mon_dst_ring[MAX_NUM_LMAC_HW];
+
+	/* RXDMA monitor status ring. TBD: Check format of this ring */
+	struct dp_srng rxdma_mon_status_ring[MAX_NUM_LMAC_HW];
+
 	/* Number of PDEVs */
 	uint8_t pdev_count;
 
@@ -1407,32 +1433,6 @@ struct dp_pdev {
 	/* TXRX SOC handle */
 	struct dp_soc *soc;
 
-	/* Ring used to replenish rx buffers (maybe to the firmware of MAC) */
-	struct dp_srng rx_refill_buf_ring;
-
-	/* RXDMA error destination ring */
-	struct dp_srng rxdma_err_dst_ring[NUM_RXDMA_RINGS_PER_PDEV];
-
-	/* Link descriptor memory banks */
-	struct {
-		void *base_vaddr_unaligned;
-		void *base_vaddr;
-		qdf_dma_addr_t base_paddr_unaligned;
-		qdf_dma_addr_t base_paddr;
-		uint32_t size;
-	} link_desc_banks[NUM_RXDMA_RINGS_PER_PDEV][MAX_MON_LINK_DESC_BANKS];
-
-	/* RXDMA monitor buffer replenish ring */
-	struct dp_srng rxdma_mon_buf_ring[NUM_RXDMA_RINGS_PER_PDEV];
-
-	/* RXDMA monitor destination ring */
-	struct dp_srng rxdma_mon_dst_ring[NUM_RXDMA_RINGS_PER_PDEV];
-
-	/* RXDMA monitor status ring. TBD: Check format of this ring */
-	struct dp_srng rxdma_mon_status_ring[NUM_RXDMA_RINGS_PER_PDEV];
-
-	struct dp_srng rxdma_mon_desc_ring[NUM_RXDMA_RINGS_PER_PDEV];
-
 	/* Stuck count on monitor destination ring MPDU process */
 	uint32_t mon_dest_ring_stuck_cnt;
 

+ 30 - 8
wlan_cfg/wlan_cfg.c

@@ -476,11 +476,11 @@ wlan_cfg_soc_attach(struct cdp_ctrl_objmgr_psoc *psoc)
 
 	/* This is default mapping and can be overridden by HW config
 	 * received from FW */
-	wlan_cfg_set_hw_macid(wlan_cfg_ctx, 0, 1);
+	wlan_cfg_set_hw_mac_idx(wlan_cfg_ctx, 0, 0);
 	if (MAX_PDEV_CNT > 1)
-		wlan_cfg_set_hw_macid(wlan_cfg_ctx, 1, 3);
+		wlan_cfg_set_hw_mac_idx(wlan_cfg_ctx, 1, 2);
 	if (MAX_PDEV_CNT > 2)
-		wlan_cfg_set_hw_macid(wlan_cfg_ctx, 2, 2);
+		wlan_cfg_set_hw_mac_idx(wlan_cfg_ctx, 2, 1);
 
 	wlan_cfg_ctx->base_hw_macid = cfg_get(psoc, CFG_DP_BASE_HW_MAC_ID);
 
@@ -685,23 +685,45 @@ int wlan_cfg_get_host2rxdma_ring_mask(struct wlan_cfg_dp_soc_ctxt *cfg,
 	return cfg->int_host2rxdma_ring_mask[context];
 }
 
-void wlan_cfg_set_hw_macid(struct wlan_cfg_dp_soc_ctxt *cfg, int pdev_idx,
-	int hw_macid)
+void wlan_cfg_set_hw_mac_idx(struct wlan_cfg_dp_soc_ctxt *cfg, int pdev_idx,
+			     int hw_macid)
 {
 	qdf_assert_always(pdev_idx < MAX_PDEV_CNT);
 	cfg->hw_macid[pdev_idx] = hw_macid;
 }
 
-int wlan_cfg_get_hw_macid(struct wlan_cfg_dp_soc_ctxt *cfg, int pdev_idx)
+int wlan_cfg_get_hw_mac_idx(struct wlan_cfg_dp_soc_ctxt *cfg, int pdev_idx)
 {
 	qdf_assert_always(pdev_idx < MAX_PDEV_CNT);
 	return cfg->hw_macid[pdev_idx];
 }
 
-int wlan_cfg_get_hw_mac_idx(struct wlan_cfg_dp_soc_ctxt *cfg, int pdev_idx)
+int wlan_cfg_get_target_pdev_id(struct wlan_cfg_dp_soc_ctxt *cfg,
+				int hw_macid)
+{
+	int idx;
+
+	for (idx = 0; idx < MAX_NUM_LMAC_HW; idx++) {
+		if (cfg->hw_macid[idx] == hw_macid)
+			return (idx + 1);
+	}
+	qdf_assert_always(idx < MAX_PDEV_CNT);
+	return WLAN_INVALID_PDEV_ID;
+}
+
+void wlan_cfg_set_pdev_idx(struct wlan_cfg_dp_soc_ctxt *cfg, int pdev_idx,
+			   int hw_macid)
 {
 	qdf_assert_always(pdev_idx < MAX_PDEV_CNT);
-	return cfg->hw_macid[pdev_idx] - cfg->base_hw_macid;
+	qdf_assert_always(hw_macid < MAX_NUM_LMAC_HW);
+
+	cfg->hw_macid_pdev_id_map[hw_macid] = pdev_idx;
+}
+
+int wlan_cfg_get_pdev_idx(struct wlan_cfg_dp_soc_ctxt *cfg, int hw_macid)
+{
+	qdf_assert_always(hw_macid < MAX_NUM_LMAC_HW);
+	return cfg->hw_macid_pdev_id_map[hw_macid];
 }
 
 void wlan_cfg_set_ce_ring_mask(struct wlan_cfg_dp_soc_ctxt *cfg,

+ 41 - 10
wlan_cfg/wlan_cfg.h

@@ -38,11 +38,16 @@
 #define DP_PPDU_TXLITE_STATS_BITMASK_CFG 0x3FFF
 
 #define NUM_RXDMA_RINGS_PER_PDEV 2
+
+/*Maximum Number of LMAC instances*/
+#define MAX_NUM_LMAC_HW	2
 #else
 #define WLAN_CFG_DST_RING_CACHED_DESC 1
 #define MAX_PDEV_CNT 3
 #define WLAN_CFG_INT_NUM_CONTEXTS 11
 #define NUM_RXDMA_RINGS_PER_PDEV 1
+#define MAX_NUM_LMAC_HW	3
+
 #endif
 
 #define WLAN_CFG_INT_NUM_CONTEXTS_MAX 11
@@ -213,6 +218,7 @@ struct wlan_cfg_dp_soc_ctxt {
 	int int_rxdma2host_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
 	int int_host2rxdma_ring_mask[WLAN_CFG_INT_NUM_CONTEXTS];
 	int hw_macid[MAX_PDEV_CNT];
+	int hw_macid_pdev_id_map[MAX_PDEV_CNT];
 	int base_hw_macid;
 	bool rx_hash;
 	bool tso_enabled;
@@ -486,36 +492,61 @@ int wlan_cfg_get_rxdma2host_mon_ring_mask(struct wlan_cfg_dp_soc_ctxt *cfg,
 					  int context);
 
 /**
- * wlan_cfg_set_hw_macid() - Set HW MAC Id for the given PDEV index
+ * wlan_cfg_set_hw_macidx() - Set HW MAC Idx for the given PDEV index
  *
  * @wlan_cfg_ctx - Configuration Handle
  * @pdev_idx - Index of SW PDEV
  * @hw_macid - HW MAC Id
  *
  */
-void wlan_cfg_set_hw_macid(struct wlan_cfg_dp_soc_ctxt *cfg, int pdev_idx,
-	int hw_macid);
+void wlan_cfg_set_hw_mac_idx
+	(struct wlan_cfg_dp_soc_ctxt *cfg, int pdev_idx, int hw_macid);
 
 /**
- * wlan_cfg_get_hw_macid() - Get HW MAC Id for the given PDEV index
+ * wlan_cfg_get_hw_mac_idx() - Get 0 based HW MAC index for the given
+ * PDEV index
  *
  * @wlan_cfg_ctx - Configuration Handle
  * @pdev_idx - Index of SW PDEV
  *
- * Return: HW MAC Id
+ * Return: HW MAC index
  */
-int wlan_cfg_get_hw_macid(struct wlan_cfg_dp_soc_ctxt *cfg, int pdev_idx);
+int wlan_cfg_get_hw_mac_idx(struct wlan_cfg_dp_soc_ctxt *cfg, int pdev_idx);
 
 /**
- * wlan_cfg_get_hw_mac_idx() - Get 0 based HW MAC index for the given
- * PDEV index
+ * wlan_cfg_get_target_pdev_id() - Get target PDEV ID for HW MAC ID
+ *
+ * @wlan_cfg_ctx - Configuration Handle
+ * @hw_macid - Index of hw mac
+ *
+ * Return: PDEV ID
+ */
+int
+wlan_cfg_get_target_pdev_id(struct wlan_cfg_dp_soc_ctxt *cfg, int hw_macid);
+
+/**
+ * wlan_cfg_set_pdev_idx() - Set 0 based host PDEV index for the given
+ * hw mac index
  *
  * @wlan_cfg_ctx - Configuration Handle
  * @pdev_idx - Index of SW PDEV
+ * @hw_macid - Index of hw mac
  *
- * Return: HW MAC index
+ * Return: PDEV index
  */
-int wlan_cfg_get_hw_mac_idx(struct wlan_cfg_dp_soc_ctxt *cfg, int pdev_idx);
+void wlan_cfg_set_pdev_idx
+	(struct wlan_cfg_dp_soc_ctxt *cfg, int pdev_idx, int hw_macid);
+
+/**
+ * wlan_cfg_get_pdev_idx() - Get 0 based PDEV index for the given
+ * hw mac index
+ *
+ * @wlan_cfg_ctx - Configuration Handle
+ * @hw_macid - Index of hw mac
+ *
+ * Return: PDEV index
+ */
+int wlan_cfg_get_pdev_idx(struct wlan_cfg_dp_soc_ctxt *cfg, int hw_macid);
 
 /**
  * wlan_cfg_get_rx_err_ring_mask() - Return Rx monitor ring interrupt mask