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

qcacmn: Adding back lost LMAC interrupt changes

Redo some of the LMAC interrupt mapping changes made in
Iec8e9f4a02cd618a3b244cfd6fc7ead1e7d993c3, which were lost
due to a recent change made to support MSI.

Change-Id: Ic566e7285feaeb9058defe01c5e704be3135ed2d
CRs-Fixed: 2113818
Karunakar Dasineni 7 жил өмнө
parent
commit
ea027c5bf2
1 өөрчлөгдсөн 19 нэмэгдсэн , 3 устгасан
  1. 19 3
      dp/wifi3.0/dp_main.c

+ 19 - 3
dp/wifi3.0/dp_main.c

@@ -335,6 +335,10 @@ static int dp_srng_calculate_msi_group(struct dp_soc *soc,
 		/* dp_mon_process */
 		grp_mask = &soc->wlan_cfg_ctx->int_rx_mon_ring_mask[0];
 	break;
+	case RXDMA_DST:
+		/* dp_rxdma_err_process */
+		grp_mask = &soc->wlan_cfg_ctx->int_rxdma2host_ring_mask[0];
+	break;
 
 	case RXDMA_MONITOR_BUF:
 	case RXDMA_BUF:
@@ -353,7 +357,6 @@ static int dp_srng_calculate_msi_group(struct dp_soc *soc,
 
 	case TCL_STATUS:
 	case REO_REINJECT:
-	case RXDMA_DST:
 		/* misc unused rings */
 		return -QDF_STATUS_E_NOENT;
 	break;
@@ -1013,6 +1016,8 @@ static void dp_soc_interrupt_map_calculate_integrated(struct dp_soc *soc,
 					soc->wlan_cfg_ctx, intr_ctx_num);
 	int reo_status_ring_mask = wlan_cfg_get_reo_status_ring_mask(
 					soc->wlan_cfg_ctx, intr_ctx_num);
+	int rxdma2host_ring_mask = wlan_cfg_get_rxdma2host_ring_mask(
+					soc->wlan_cfg_ctx, intr_ctx_num);
 
 	for (j = 0; j < HIF_MAX_GRP_IRQ; j++) {
 
@@ -1026,10 +1031,18 @@ static void dp_soc_interrupt_map_calculate_integrated(struct dp_soc *soc,
 				(reo2host_destination_ring1 - j);
 		}
 
+		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);
+		}
+
 		if (rx_mon_mask & (1 << j)) {
 			irq_id_map[num_irq++] =
-				(ppdu_end_interrupts_mac1 - j);
+				ppdu_end_interrupts_mac1 -
+				wlan_cfg_get_hw_mac_idx(soc->wlan_cfg_ctx, j);
 		}
+
 		if (rx_wbm_rel_ring_mask & (1 << j))
 			irq_id_map[num_irq++] = wbm2host_rx_release;
 
@@ -1059,6 +1072,8 @@ static void dp_soc_interrupt_map_calculate_msi(struct dp_soc *soc,
 					soc->wlan_cfg_ctx, intr_ctx_num);
 	int reo_status_ring_mask = wlan_cfg_get_reo_status_ring_mask(
 					soc->wlan_cfg_ctx, intr_ctx_num);
+	int rxdma2host_ring_mask = wlan_cfg_get_rxdma2host_ring_mask(
+					soc->wlan_cfg_ctx, intr_ctx_num);
 
 	unsigned int vector =
 		(intr_ctx_num % msi_vector_count) + msi_vector_start;
@@ -1067,7 +1082,7 @@ static void dp_soc_interrupt_map_calculate_msi(struct dp_soc *soc,
 	soc->intr_mode = DP_INTR_MSI;
 
 	if (tx_mask | rx_mask | rx_mon_mask | rx_err_ring_mask |
-	    rx_wbm_rel_ring_mask | reo_status_ring_mask)
+	    rx_wbm_rel_ring_mask | reo_status_ring_mask | rxdma2host_ring_mask)
 		irq_id_map[num_irq++] =
 			pld_get_msi_irq(soc->osdev->dev, vector);
 
@@ -1192,6 +1207,7 @@ static void dp_soc_interrupt_detach(void *txrx_soc)
 		soc->intr_ctx[i].rx_err_ring_mask = 0;
 		soc->intr_ctx[i].rx_wbm_rel_ring_mask = 0;
 		soc->intr_ctx[i].reo_status_ring_mask = 0;
+		soc->intr_ctx[i].rxdma2host_ring_mask = 0;
 
 		qdf_lro_deinit(soc->intr_ctx[i].lro_ctx);
 	}