Lines Matching refs:tx_ring
992 struct al_eth_ring *ring = &adapter->tx_ring[i]; in al_eth_init_rings()
1151 al_eth_tx_do_cleanup(struct al_eth_ring *tx_ring) in al_eth_tx_do_cleanup() argument
1155 int qid = tx_ring->ring_id; in al_eth_tx_do_cleanup()
1157 total_done = al_eth_comp_tx_get(tx_ring->dma_q); in al_eth_tx_do_cleanup()
1158 device_printf_dbg(tx_ring->dev, in al_eth_tx_do_cleanup()
1160 next_to_clean = tx_ring->next_to_clean; in al_eth_tx_do_cleanup()
1166 tx_info = &tx_ring->tx_buffer_info[next_to_clean]; in al_eth_tx_do_cleanup()
1175 device_printf_dbg(tx_ring->dev, in al_eth_tx_do_cleanup()
1179 bus_dmamap_unload(tx_ring->dma_buf_tag, tx_info->dma_map); in al_eth_tx_do_cleanup()
1183 next_to_clean = AL_ETH_TX_RING_IDX_NEXT(tx_ring, next_to_clean); in al_eth_tx_do_cleanup()
1186 tx_ring->next_to_clean = next_to_clean; in al_eth_tx_do_cleanup()
1188 device_printf_dbg(tx_ring->dev, "tx_poll: q %d done next to clean %x\n", in al_eth_tx_do_cleanup()
1199 al_eth_tx_csum(struct al_eth_ring *tx_ring, struct al_eth_tx_buffer *tx_info, in al_eth_tx_csum() argument
1226 struct al_eth_meta_data *meta = &tx_ring->hal_meta; in al_eth_tx_csum()
1297 al_eth_xmit_mbuf(struct al_eth_ring *tx_ring, struct mbuf *m) in al_eth_xmit_mbuf() argument
1309 if (unlikely(tx_ring->stall) != 0) { in al_eth_xmit_mbuf()
1311 if (al_udma_available_get(tx_ring->dma_q) >= in al_eth_xmit_mbuf()
1314 tx_ring->stall = 0; in al_eth_xmit_mbuf()
1320 device_printf(tx_ring->dev, in al_eth_xmit_mbuf()
1322 tx_ring->ring_id); in al_eth_xmit_mbuf()
1325 device_printf_dbg(tx_ring->dev, in al_eth_xmit_mbuf()
1326 "queue %d is ready!\n", tx_ring->ring_id); in al_eth_xmit_mbuf()
1330 next_to_use = tx_ring->next_to_use; in al_eth_xmit_mbuf()
1331 tx_info = &tx_ring->tx_buffer_info[next_to_use]; in al_eth_xmit_mbuf()
1336 device_printf(tx_ring->dev, "mbuf is NULL\n"); in al_eth_xmit_mbuf()
1343 error = bus_dmamap_load_mbuf_sg(tx_ring->dma_buf_tag, tx_info->dma_map, in al_eth_xmit_mbuf()
1354 device_printf(tx_ring->dev, in al_eth_xmit_mbuf()
1361 device_printf(tx_ring->dev, in al_eth_xmit_mbuf()
1366 device_printf(tx_ring->dev, in al_eth_xmit_mbuf()
1374 al_eth_tx_csum(tx_ring, tx_info, hal_pkt, m); in al_eth_xmit_mbuf()
1387 tx_info->tx_descs = al_eth_tx_pkt_prepare(tx_ring->dma_q, hal_pkt); in al_eth_xmit_mbuf()
1396 if (unlikely(al_udma_available_get(tx_ring->dma_q) < in al_eth_xmit_mbuf()
1398 tx_ring->stall = 1; in al_eth_xmit_mbuf()
1399 device_printf_dbg(tx_ring->dev, "stall, stopping queue %d...\n", in al_eth_xmit_mbuf()
1400 tx_ring->ring_id); in al_eth_xmit_mbuf()
1404 tx_ring->next_to_use = AL_ETH_TX_RING_IDX_NEXT(tx_ring, next_to_use); in al_eth_xmit_mbuf()
1407 al_eth_tx_dma_action(tx_ring->dma_q, tx_info->tx_descs); in al_eth_xmit_mbuf()
1417 struct al_eth_ring *tx_ring = arg; in al_eth_tx_cmpl_work() local
1420 tx_ring->cmpl_is_running = 1; in al_eth_tx_cmpl_work()
1424 al_eth_tx_do_cleanup(tx_ring); in al_eth_tx_cmpl_work()
1427 tx_ring->cmpl_is_running = 0; in al_eth_tx_cmpl_work()
1431 al_eth_irq_config(tx_ring->unmask_reg_offset, tx_ring->unmask_val); in al_eth_tx_cmpl_work()
1437 struct al_eth_ring *tx_ring = arg; in al_eth_tx_cmlp_irq_filter() local
1441 device_printf_dbg(tx_ring->dev, "%s for ring ID = %d\n", __func__, in al_eth_tx_cmlp_irq_filter()
1442 tx_ring->ring_id); in al_eth_tx_cmlp_irq_filter()
1448 if ((napi == 0) || (napi && tx_ring->cmpl_is_running == 0)) in al_eth_tx_cmlp_irq_filter()
1449 taskqueue_enqueue(tx_ring->cmpl_tq, &tx_ring->cmpl_task); in al_eth_tx_cmlp_irq_filter()
1699 struct al_eth_ring *tx_ring = arg; in al_eth_start_xmit() local
1703 tx_ring->enqueue_is_running = 1; in al_eth_start_xmit()
1708 mtx_lock(&tx_ring->br_mtx); in al_eth_start_xmit()
1709 mbuf = drbr_dequeue(NULL, tx_ring->br); in al_eth_start_xmit()
1710 mtx_unlock(&tx_ring->br_mtx); in al_eth_start_xmit()
1715 al_eth_xmit_mbuf(tx_ring, mbuf); in al_eth_start_xmit()
1719 tx_ring->enqueue_is_running = 0; in al_eth_start_xmit()
1722 mtx_lock(&tx_ring->br_mtx); in al_eth_start_xmit()
1723 mbuf = drbr_dequeue(NULL, tx_ring->br); in al_eth_start_xmit()
1724 mtx_unlock(&tx_ring->br_mtx); in al_eth_start_xmit()
1727 al_eth_xmit_mbuf(tx_ring, mbuf); in al_eth_start_xmit()
1736 struct al_eth_ring *tx_ring; in al_mq_start() local
1751 tx_ring = &adapter->tx_ring[i]; in al_mq_start()
1756 ret = drbr_enqueue(ifp, tx_ring->br, m); in al_mq_start()
1762 if ((napi == 0) || ((napi != 0) && (tx_ring->enqueue_is_running == 0))) in al_mq_start()
1763 taskqueue_enqueue(tx_ring->enqueue_tq, &tx_ring->enqueue_task); in al_mq_start()
1980 al_eth_tx_cmlp_irq_filter(adapter->tx_ring); in al_eth_intr_intx_all()
2149 adapter->irq_tbl[irq_idx].data = &adapter->tx_ring[i]; in al_eth_setup_int_mode()
2300 struct al_eth_ring *tx_ring = &adapter->tx_ring[qid]; in al_eth_setup_tx_resources() local
2301 struct device *dev = tx_ring->dev; in al_eth_setup_tx_resources()
2302 struct al_udma_q_params *q_params = &tx_ring->q_params; in al_eth_setup_tx_resources()
2309 size = sizeof(struct al_eth_tx_buffer) * tx_ring->sw_count; in al_eth_setup_tx_resources()
2311 tx_ring->tx_buffer_info = malloc(size, M_IFAL, M_ZERO | M_WAITOK); in al_eth_setup_tx_resources()
2312 if (tx_ring->tx_buffer_info == NULL) in al_eth_setup_tx_resources()
2315 tx_ring->descs_size = tx_ring->hw_count * sizeof(union al_udma_desc); in al_eth_setup_tx_resources()
2316 q_params->size = tx_ring->hw_count; in al_eth_setup_tx_resources()
2321 (void**)&q_params->desc_base, tx_ring->descs_size); in al_eth_setup_tx_resources()
2334 mtx_init(&tx_ring->br_mtx, "AlRingMtx", NULL, MTX_DEF); in al_eth_setup_tx_resources()
2335 tx_ring->br = buf_ring_alloc(AL_BR_SIZE, M_DEVBUF, M_WAITOK, in al_eth_setup_tx_resources()
2336 &tx_ring->br_mtx); in al_eth_setup_tx_resources()
2337 if (tx_ring->br == NULL) { in al_eth_setup_tx_resources()
2343 TASK_INIT(&tx_ring->enqueue_task, 0, al_eth_start_xmit, tx_ring); in al_eth_setup_tx_resources()
2344 tx_ring->enqueue_tq = taskqueue_create_fast("al_tx_enque", M_NOWAIT, in al_eth_setup_tx_resources()
2345 taskqueue_thread_enqueue, &tx_ring->enqueue_tq); in al_eth_setup_tx_resources()
2346 taskqueue_start_threads(&tx_ring->enqueue_tq, 1, PI_NET, "%s txeq", in al_eth_setup_tx_resources()
2348 TASK_INIT(&tx_ring->cmpl_task, 0, al_eth_tx_cmpl_work, tx_ring); in al_eth_setup_tx_resources()
2349 tx_ring->cmpl_tq = taskqueue_create_fast("al_tx_cmpl", M_NOWAIT, in al_eth_setup_tx_resources()
2350 taskqueue_thread_enqueue, &tx_ring->cmpl_tq); in al_eth_setup_tx_resources()
2351 taskqueue_start_threads(&tx_ring->cmpl_tq, 1, PI_REALTIME, "%s txcq", in al_eth_setup_tx_resources()
2366 &tx_ring->dma_buf_tag); in al_eth_setup_tx_resources()
2374 for (size = 0; size < tx_ring->sw_count; size++) { in al_eth_setup_tx_resources()
2375 ret = bus_dmamap_create(tx_ring->dma_buf_tag, 0, in al_eth_setup_tx_resources()
2376 &tx_ring->tx_buffer_info[size].dma_map); in al_eth_setup_tx_resources()
2388 tx_ring->next_to_use = 0; in al_eth_setup_tx_resources()
2389 tx_ring->next_to_clean = 0; in al_eth_setup_tx_resources()
2404 struct al_eth_ring *tx_ring = &adapter->tx_ring[qid]; in al_eth_free_tx_resources() local
2405 struct al_udma_q_params *q_params = &tx_ring->q_params; in al_eth_free_tx_resources()
2409 while (taskqueue_cancel(tx_ring->cmpl_tq, &tx_ring->cmpl_task, NULL)) in al_eth_free_tx_resources()
2410 taskqueue_drain(tx_ring->cmpl_tq, &tx_ring->cmpl_task); in al_eth_free_tx_resources()
2412 taskqueue_free(tx_ring->cmpl_tq); in al_eth_free_tx_resources()
2413 while (taskqueue_cancel(tx_ring->enqueue_tq, in al_eth_free_tx_resources()
2414 &tx_ring->enqueue_task, NULL)) { in al_eth_free_tx_resources()
2415 taskqueue_drain(tx_ring->enqueue_tq, &tx_ring->enqueue_task); in al_eth_free_tx_resources()
2418 taskqueue_free(tx_ring->enqueue_tq); in al_eth_free_tx_resources()
2420 if (tx_ring->br != NULL) { in al_eth_free_tx_resources()
2421 drbr_flush(adapter->netdev, tx_ring->br); in al_eth_free_tx_resources()
2422 buf_ring_free(tx_ring->br, M_DEVBUF); in al_eth_free_tx_resources()
2425 for (size = 0; size < tx_ring->sw_count; size++) { in al_eth_free_tx_resources()
2426 m_freem(tx_ring->tx_buffer_info[size].m); in al_eth_free_tx_resources()
2427 tx_ring->tx_buffer_info[size].m = NULL; in al_eth_free_tx_resources()
2429 bus_dmamap_unload(tx_ring->dma_buf_tag, in al_eth_free_tx_resources()
2430 tx_ring->tx_buffer_info[size].dma_map); in al_eth_free_tx_resources()
2431 bus_dmamap_destroy(tx_ring->dma_buf_tag, in al_eth_free_tx_resources()
2432 tx_ring->tx_buffer_info[size].dma_map); in al_eth_free_tx_resources()
2434 bus_dma_tag_destroy(tx_ring->dma_buf_tag); in al_eth_free_tx_resources()
2436 free(tx_ring->tx_buffer_info, M_IFAL); in al_eth_free_tx_resources()
2437 tx_ring->tx_buffer_info = NULL; in al_eth_free_tx_resources()
2439 mtx_destroy(&tx_ring->br_mtx); in al_eth_free_tx_resources()
2463 if (adapter->tx_ring[i].q_params.desc_base) in al_eth_free_all_tx_resources()
3095 q_params = &adapter->tx_ring[qid].q_params; in al_eth_udma_queue_enable()