diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index c0ed69d3182b..39e4cbf613fc 100644 --- a/dp/wifi3.0/dp_main.c +++ b/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); }