Lines Matching refs:tx_ring
986 struct al_eth_ring *ring = &adapter->tx_ring[i]; in al_eth_init_rings()
1145 al_eth_tx_do_cleanup(struct al_eth_ring *tx_ring) in al_eth_tx_do_cleanup() argument
1149 int qid = tx_ring->ring_id; in al_eth_tx_do_cleanup()
1151 total_done = al_eth_comp_tx_get(tx_ring->dma_q); in al_eth_tx_do_cleanup()
1152 device_printf_dbg(tx_ring->dev, in al_eth_tx_do_cleanup()
1154 next_to_clean = tx_ring->next_to_clean; in al_eth_tx_do_cleanup()
1160 tx_info = &tx_ring->tx_buffer_info[next_to_clean]; in al_eth_tx_do_cleanup()
1169 device_printf_dbg(tx_ring->dev, in al_eth_tx_do_cleanup()
1173 bus_dmamap_unload(tx_ring->dma_buf_tag, tx_info->dma_map); in al_eth_tx_do_cleanup()
1177 next_to_clean = AL_ETH_TX_RING_IDX_NEXT(tx_ring, next_to_clean); in al_eth_tx_do_cleanup()
1180 tx_ring->next_to_clean = next_to_clean; in al_eth_tx_do_cleanup()
1182 device_printf_dbg(tx_ring->dev, "tx_poll: q %d done next to clean %x\n", in al_eth_tx_do_cleanup()
1193 al_eth_tx_csum(struct al_eth_ring *tx_ring, struct al_eth_tx_buffer *tx_info, in al_eth_tx_csum() argument
1220 struct al_eth_meta_data *meta = &tx_ring->hal_meta; in al_eth_tx_csum()
1291 al_eth_xmit_mbuf(struct al_eth_ring *tx_ring, struct mbuf *m) in al_eth_xmit_mbuf() argument
1303 if (unlikely(tx_ring->stall) != 0) { in al_eth_xmit_mbuf()
1305 if (al_udma_available_get(tx_ring->dma_q) >= in al_eth_xmit_mbuf()
1308 tx_ring->stall = 0; in al_eth_xmit_mbuf()
1314 device_printf(tx_ring->dev, in al_eth_xmit_mbuf()
1316 tx_ring->ring_id); in al_eth_xmit_mbuf()
1319 device_printf_dbg(tx_ring->dev, in al_eth_xmit_mbuf()
1320 "queue %d is ready!\n", tx_ring->ring_id); in al_eth_xmit_mbuf()
1324 next_to_use = tx_ring->next_to_use; in al_eth_xmit_mbuf()
1325 tx_info = &tx_ring->tx_buffer_info[next_to_use]; in al_eth_xmit_mbuf()
1330 device_printf(tx_ring->dev, "mbuf is NULL\n"); in al_eth_xmit_mbuf()
1337 error = bus_dmamap_load_mbuf_sg(tx_ring->dma_buf_tag, tx_info->dma_map, in al_eth_xmit_mbuf()
1348 device_printf(tx_ring->dev, in al_eth_xmit_mbuf()
1355 device_printf(tx_ring->dev, in al_eth_xmit_mbuf()
1360 device_printf(tx_ring->dev, in al_eth_xmit_mbuf()
1368 al_eth_tx_csum(tx_ring, tx_info, hal_pkt, m); in al_eth_xmit_mbuf()
1381 tx_info->tx_descs = al_eth_tx_pkt_prepare(tx_ring->dma_q, hal_pkt); in al_eth_xmit_mbuf()
1390 if (unlikely(al_udma_available_get(tx_ring->dma_q) < in al_eth_xmit_mbuf()
1392 tx_ring->stall = 1; in al_eth_xmit_mbuf()
1393 device_printf_dbg(tx_ring->dev, "stall, stopping queue %d...\n", in al_eth_xmit_mbuf()
1394 tx_ring->ring_id); in al_eth_xmit_mbuf()
1398 tx_ring->next_to_use = AL_ETH_TX_RING_IDX_NEXT(tx_ring, next_to_use); in al_eth_xmit_mbuf()
1401 al_eth_tx_dma_action(tx_ring->dma_q, tx_info->tx_descs); in al_eth_xmit_mbuf()
1411 struct al_eth_ring *tx_ring = arg; in al_eth_tx_cmpl_work() local
1414 tx_ring->cmpl_is_running = 1; in al_eth_tx_cmpl_work()
1418 al_eth_tx_do_cleanup(tx_ring); in al_eth_tx_cmpl_work()
1421 tx_ring->cmpl_is_running = 0; in al_eth_tx_cmpl_work()
1425 al_eth_irq_config(tx_ring->unmask_reg_offset, tx_ring->unmask_val); in al_eth_tx_cmpl_work()
1431 struct al_eth_ring *tx_ring = arg; in al_eth_tx_cmlp_irq_filter() local
1435 device_printf_dbg(tx_ring->dev, "%s for ring ID = %d\n", __func__, in al_eth_tx_cmlp_irq_filter()
1436 tx_ring->ring_id); in al_eth_tx_cmlp_irq_filter()
1442 if ((napi == 0) || (napi && tx_ring->cmpl_is_running == 0)) in al_eth_tx_cmlp_irq_filter()
1443 taskqueue_enqueue(tx_ring->cmpl_tq, &tx_ring->cmpl_task); in al_eth_tx_cmlp_irq_filter()
1687 struct al_eth_ring *tx_ring = arg; in al_eth_start_xmit() local
1691 tx_ring->enqueue_is_running = 1; in al_eth_start_xmit()
1696 mtx_lock(&tx_ring->br_mtx); in al_eth_start_xmit()
1697 mbuf = drbr_dequeue(NULL, tx_ring->br); in al_eth_start_xmit()
1698 mtx_unlock(&tx_ring->br_mtx); in al_eth_start_xmit()
1703 al_eth_xmit_mbuf(tx_ring, mbuf); in al_eth_start_xmit()
1707 tx_ring->enqueue_is_running = 0; in al_eth_start_xmit()
1710 mtx_lock(&tx_ring->br_mtx); in al_eth_start_xmit()
1711 mbuf = drbr_dequeue(NULL, tx_ring->br); in al_eth_start_xmit()
1712 mtx_unlock(&tx_ring->br_mtx); in al_eth_start_xmit()
1715 al_eth_xmit_mbuf(tx_ring, mbuf); in al_eth_start_xmit()
1724 struct al_eth_ring *tx_ring; in al_mq_start() local
1739 tx_ring = &adapter->tx_ring[i]; in al_mq_start()
1744 ret = drbr_enqueue(ifp, tx_ring->br, m); in al_mq_start()
1750 if ((napi == 0) || ((napi != 0) && (tx_ring->enqueue_is_running == 0))) in al_mq_start()
1751 taskqueue_enqueue(tx_ring->enqueue_tq, &tx_ring->enqueue_task); in al_mq_start()
1968 al_eth_tx_cmlp_irq_filter(adapter->tx_ring); in al_eth_intr_intx_all()
2129 adapter->irq_tbl[irq_idx].data = &adapter->tx_ring[i]; in al_eth_setup_int_mode()
2279 struct al_eth_ring *tx_ring = &adapter->tx_ring[qid]; in al_eth_setup_tx_resources() local
2280 device_t dev = tx_ring->dev; in al_eth_setup_tx_resources()
2281 struct al_udma_q_params *q_params = &tx_ring->q_params; in al_eth_setup_tx_resources()
2288 size = sizeof(struct al_eth_tx_buffer) * tx_ring->sw_count; in al_eth_setup_tx_resources()
2290 tx_ring->tx_buffer_info = malloc(size, M_IFAL, M_ZERO | M_WAITOK); in al_eth_setup_tx_resources()
2291 tx_ring->descs_size = tx_ring->hw_count * sizeof(union al_udma_desc); in al_eth_setup_tx_resources()
2292 q_params->size = tx_ring->hw_count; in al_eth_setup_tx_resources()
2297 (void**)&q_params->desc_base, tx_ring->descs_size); in al_eth_setup_tx_resources()
2310 mtx_init(&tx_ring->br_mtx, "AlRingMtx", NULL, MTX_DEF); in al_eth_setup_tx_resources()
2311 tx_ring->br = buf_ring_alloc(AL_BR_SIZE, M_DEVBUF, M_WAITOK, in al_eth_setup_tx_resources()
2312 &tx_ring->br_mtx); in al_eth_setup_tx_resources()
2315 TASK_INIT(&tx_ring->enqueue_task, 0, al_eth_start_xmit, tx_ring); in al_eth_setup_tx_resources()
2316 tx_ring->enqueue_tq = taskqueue_create_fast("al_tx_enque", M_NOWAIT, in al_eth_setup_tx_resources()
2317 taskqueue_thread_enqueue, &tx_ring->enqueue_tq); in al_eth_setup_tx_resources()
2318 taskqueue_start_threads(&tx_ring->enqueue_tq, 1, PI_NET, "%s txeq", in al_eth_setup_tx_resources()
2320 TASK_INIT(&tx_ring->cmpl_task, 0, al_eth_tx_cmpl_work, tx_ring); in al_eth_setup_tx_resources()
2321 tx_ring->cmpl_tq = taskqueue_create_fast("al_tx_cmpl", M_NOWAIT, in al_eth_setup_tx_resources()
2322 taskqueue_thread_enqueue, &tx_ring->cmpl_tq); in al_eth_setup_tx_resources()
2323 taskqueue_start_threads(&tx_ring->cmpl_tq, 1, PI_REALTIME, "%s txcq", in al_eth_setup_tx_resources()
2338 &tx_ring->dma_buf_tag); in al_eth_setup_tx_resources()
2346 for (size = 0; size < tx_ring->sw_count; size++) { in al_eth_setup_tx_resources()
2347 ret = bus_dmamap_create(tx_ring->dma_buf_tag, 0, in al_eth_setup_tx_resources()
2348 &tx_ring->tx_buffer_info[size].dma_map); in al_eth_setup_tx_resources()
2360 tx_ring->next_to_use = 0; in al_eth_setup_tx_resources()
2361 tx_ring->next_to_clean = 0; in al_eth_setup_tx_resources()
2376 struct al_eth_ring *tx_ring = &adapter->tx_ring[qid]; in al_eth_free_tx_resources() local
2377 struct al_udma_q_params *q_params = &tx_ring->q_params; in al_eth_free_tx_resources()
2381 while (taskqueue_cancel(tx_ring->cmpl_tq, &tx_ring->cmpl_task, NULL)) in al_eth_free_tx_resources()
2382 taskqueue_drain(tx_ring->cmpl_tq, &tx_ring->cmpl_task); in al_eth_free_tx_resources()
2384 taskqueue_free(tx_ring->cmpl_tq); in al_eth_free_tx_resources()
2385 while (taskqueue_cancel(tx_ring->enqueue_tq, in al_eth_free_tx_resources()
2386 &tx_ring->enqueue_task, NULL)) { in al_eth_free_tx_resources()
2387 taskqueue_drain(tx_ring->enqueue_tq, &tx_ring->enqueue_task); in al_eth_free_tx_resources()
2390 taskqueue_free(tx_ring->enqueue_tq); in al_eth_free_tx_resources()
2392 if (tx_ring->br != NULL) { in al_eth_free_tx_resources()
2393 drbr_flush(adapter->netdev, tx_ring->br); in al_eth_free_tx_resources()
2394 buf_ring_free(tx_ring->br, M_DEVBUF); in al_eth_free_tx_resources()
2397 for (size = 0; size < tx_ring->sw_count; size++) { in al_eth_free_tx_resources()
2398 m_freem(tx_ring->tx_buffer_info[size].m); in al_eth_free_tx_resources()
2399 tx_ring->tx_buffer_info[size].m = NULL; in al_eth_free_tx_resources()
2401 bus_dmamap_unload(tx_ring->dma_buf_tag, in al_eth_free_tx_resources()
2402 tx_ring->tx_buffer_info[size].dma_map); in al_eth_free_tx_resources()
2403 bus_dmamap_destroy(tx_ring->dma_buf_tag, in al_eth_free_tx_resources()
2404 tx_ring->tx_buffer_info[size].dma_map); in al_eth_free_tx_resources()
2406 bus_dma_tag_destroy(tx_ring->dma_buf_tag); in al_eth_free_tx_resources()
2408 free(tx_ring->tx_buffer_info, M_IFAL); in al_eth_free_tx_resources()
2409 tx_ring->tx_buffer_info = NULL; in al_eth_free_tx_resources()
2411 mtx_destroy(&tx_ring->br_mtx); in al_eth_free_tx_resources()
2435 if (adapter->tx_ring[i].q_params.desc_base) in al_eth_free_all_tx_resources()
3050 q_params = &adapter->tx_ring[qid].q_params; in al_eth_udma_queue_enable()