|
@@ -1414,6 +1414,10 @@ static int dp_srng_calculate_msi_group(struct dp_soc *soc,
|
|
grp_mask = &soc->wlan_cfg_ctx->int_host2rxdma_mon_ring_mask[0];
|
|
grp_mask = &soc->wlan_cfg_ctx->int_host2rxdma_mon_ring_mask[0];
|
|
break;
|
|
break;
|
|
|
|
|
|
|
|
+ case TX_MONITOR_BUF:
|
|
|
|
+ grp_mask = &soc->wlan_cfg_ctx->int_host2txmon_ring_mask[0];
|
|
|
|
+ break;
|
|
|
|
+
|
|
case TCL_DATA:
|
|
case TCL_DATA:
|
|
/* CMD_CREDIT_RING is used as command in 8074 and credit in 9000 */
|
|
/* CMD_CREDIT_RING is used as command in 8074 and credit in 9000 */
|
|
case TCL_CMD_CREDIT:
|
|
case TCL_CMD_CREDIT:
|
|
@@ -2322,7 +2326,7 @@ static int dp_process_lmac_rings(struct dp_intr *int_ctx, int total_budget)
|
|
}
|
|
}
|
|
|
|
|
|
if (int_ctx->host2rxdma_ring_mask &
|
|
if (int_ctx->host2rxdma_ring_mask &
|
|
- (1 << mac_for_pdev)) {
|
|
|
|
|
|
+ (1 << mac_for_pdev)) {
|
|
union dp_rx_desc_list_elem_t *desc_list = NULL;
|
|
union dp_rx_desc_list_elem_t *desc_list = NULL;
|
|
union dp_rx_desc_list_elem_t *tail = NULL;
|
|
union dp_rx_desc_list_elem_t *tail = NULL;
|
|
struct dp_srng *rx_refill_buf_ring;
|
|
struct dp_srng *rx_refill_buf_ring;
|
|
@@ -2336,14 +2340,21 @@ static int dp_process_lmac_rings(struct dp_intr *int_ctx, int total_budget)
|
|
|
|
|
|
intr_stats->num_host2rxdma_ring_masks++;
|
|
intr_stats->num_host2rxdma_ring_masks++;
|
|
DP_STATS_INC(pdev, replenish.low_thresh_intrs,
|
|
DP_STATS_INC(pdev, replenish.low_thresh_intrs,
|
|
- 1);
|
|
|
|
|
|
+ 1);
|
|
dp_rx_buffers_replenish(soc, 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);
|
|
|
|
|
|
+ rx_refill_buf_ring,
|
|
|
|
+ &soc->rx_desc_buf[mac_for_pdev],
|
|
|
|
+ 0, &desc_list, &tail);
|
|
}
|
|
}
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (int_ctx->host2rxdma_mon_ring_mask)
|
|
|
|
+ dp_tx_mon_buf_refill(int_ctx);
|
|
|
|
+
|
|
|
|
+ if (int_ctx->host2txmon_ring_mask)
|
|
|
|
+ dp_tx_mon_buf_refill(int_ctx);
|
|
|
|
+
|
|
budget_done:
|
|
budget_done:
|
|
return total_budget - budget;
|
|
return total_budget - budget;
|
|
}
|
|
}
|
|
@@ -2895,6 +2906,8 @@ static void dp_soc_interrupt_map_calculate_msi(struct dp_soc *soc,
|
|
wlan_cfg_get_tx_ring_near_full_mask(soc->wlan_cfg_ctx,
|
|
wlan_cfg_get_tx_ring_near_full_mask(soc->wlan_cfg_ctx,
|
|
intr_ctx_num);
|
|
intr_ctx_num);
|
|
|
|
|
|
|
|
+ int host2txmon_ring_mask = wlan_cfg_get_host2txmon_ring_mask(
|
|
|
|
+ soc->wlan_cfg_ctx, intr_ctx_num);
|
|
unsigned int vector =
|
|
unsigned int vector =
|
|
(intr_ctx_num % msi_vector_count) + msi_vector_start;
|
|
(intr_ctx_num % msi_vector_count) + msi_vector_start;
|
|
int num_irq = 0;
|
|
int num_irq = 0;
|
|
@@ -2905,7 +2918,7 @@ static void dp_soc_interrupt_map_calculate_msi(struct dp_soc *soc,
|
|
rx_wbm_rel_ring_mask | reo_status_ring_mask | rxdma2host_ring_mask |
|
|
rx_wbm_rel_ring_mask | reo_status_ring_mask | rxdma2host_ring_mask |
|
|
host2rxdma_ring_mask | host2rxdma_mon_ring_mask |
|
|
host2rxdma_ring_mask | host2rxdma_mon_ring_mask |
|
|
rx_near_full_grp_1_mask | rx_near_full_grp_2_mask |
|
|
rx_near_full_grp_1_mask | rx_near_full_grp_2_mask |
|
|
- tx_ring_near_full_mask)
|
|
|
|
|
|
+ tx_ring_near_full_mask | host2txmon_ring_mask)
|
|
irq_id_map[num_irq++] =
|
|
irq_id_map[num_irq++] =
|
|
pld_get_msi_irq(soc->osdev->dev, vector);
|
|
pld_get_msi_irq(soc->osdev->dev, vector);
|
|
|
|
|
|
@@ -3062,12 +3075,13 @@ static QDF_STATUS dp_soc_interrupt_attach(struct cdp_soc_t *txrx_soc)
|
|
int tx_ring_near_full_mask =
|
|
int tx_ring_near_full_mask =
|
|
wlan_cfg_get_tx_ring_near_full_mask(soc->wlan_cfg_ctx,
|
|
wlan_cfg_get_tx_ring_near_full_mask(soc->wlan_cfg_ctx,
|
|
i);
|
|
i);
|
|
|
|
+ int host2txmon_ring_mask =
|
|
|
|
+ wlan_cfg_get_host2txmon_ring_mask(soc->wlan_cfg_ctx, i);
|
|
|
|
|
|
soc->intr_ctx[i].dp_intr_id = i;
|
|
soc->intr_ctx[i].dp_intr_id = i;
|
|
soc->intr_ctx[i].tx_ring_mask = tx_mask;
|
|
soc->intr_ctx[i].tx_ring_mask = tx_mask;
|
|
soc->intr_ctx[i].rx_ring_mask = rx_mask;
|
|
soc->intr_ctx[i].rx_ring_mask = rx_mask;
|
|
soc->intr_ctx[i].rx_mon_ring_mask = rx_mon_mask;
|
|
soc->intr_ctx[i].rx_mon_ring_mask = rx_mon_mask;
|
|
- soc->intr_ctx[i].tx_mon_ring_mask = tx_mon_ring_mask;
|
|
|
|
soc->intr_ctx[i].rx_err_ring_mask = rx_err_ring_mask;
|
|
soc->intr_ctx[i].rx_err_ring_mask = rx_err_ring_mask;
|
|
soc->intr_ctx[i].rxdma2host_ring_mask = rxdma2host_ring_mask;
|
|
soc->intr_ctx[i].rxdma2host_ring_mask = rxdma2host_ring_mask;
|
|
soc->intr_ctx[i].host2rxdma_ring_mask = host2rxdma_ring_mask;
|
|
soc->intr_ctx[i].host2rxdma_ring_mask = host2rxdma_ring_mask;
|
|
@@ -3081,6 +3095,8 @@ static QDF_STATUS dp_soc_interrupt_attach(struct cdp_soc_t *txrx_soc)
|
|
rx_near_full_grp_2_mask;
|
|
rx_near_full_grp_2_mask;
|
|
soc->intr_ctx[i].tx_ring_near_full_mask =
|
|
soc->intr_ctx[i].tx_ring_near_full_mask =
|
|
tx_ring_near_full_mask;
|
|
tx_ring_near_full_mask;
|
|
|
|
+ soc->intr_ctx[i].tx_mon_ring_mask = tx_mon_ring_mask;
|
|
|
|
+ soc->intr_ctx[i].host2txmon_ring_mask = host2txmon_ring_mask;
|
|
|
|
|
|
soc->intr_ctx[i].soc = soc;
|
|
soc->intr_ctx[i].soc = soc;
|
|
|
|
|