Lines Matching refs:tx_ring

985 		struct al_eth_ring *ring = &adapter->tx_ring[i];  in al_eth_init_rings()
1144 al_eth_tx_do_cleanup(struct al_eth_ring *tx_ring) in al_eth_tx_do_cleanup() argument
1148 int qid = tx_ring->ring_id; in al_eth_tx_do_cleanup()
1150 total_done = al_eth_comp_tx_get(tx_ring->dma_q); in al_eth_tx_do_cleanup()
1151 device_printf_dbg(tx_ring->dev, in al_eth_tx_do_cleanup()
1153 next_to_clean = tx_ring->next_to_clean; in al_eth_tx_do_cleanup()
1159 tx_info = &tx_ring->tx_buffer_info[next_to_clean]; in al_eth_tx_do_cleanup()
1168 device_printf_dbg(tx_ring->dev, in al_eth_tx_do_cleanup()
1172 bus_dmamap_unload(tx_ring->dma_buf_tag, tx_info->dma_map); in al_eth_tx_do_cleanup()
1176 next_to_clean = AL_ETH_TX_RING_IDX_NEXT(tx_ring, next_to_clean); in al_eth_tx_do_cleanup()
1179 tx_ring->next_to_clean = next_to_clean; in al_eth_tx_do_cleanup()
1181 device_printf_dbg(tx_ring->dev, "tx_poll: q %d done next to clean %x\n", in al_eth_tx_do_cleanup()
1192 al_eth_tx_csum(struct al_eth_ring *tx_ring, struct al_eth_tx_buffer *tx_info, in al_eth_tx_csum() argument
1219 struct al_eth_meta_data *meta = &tx_ring->hal_meta; in al_eth_tx_csum()
1290 al_eth_xmit_mbuf(struct al_eth_ring *tx_ring, struct mbuf *m) in al_eth_xmit_mbuf() argument
1302 if (unlikely(tx_ring->stall) != 0) { in al_eth_xmit_mbuf()
1304 if (al_udma_available_get(tx_ring->dma_q) >= in al_eth_xmit_mbuf()
1307 tx_ring->stall = 0; in al_eth_xmit_mbuf()
1313 device_printf(tx_ring->dev, in al_eth_xmit_mbuf()
1315 tx_ring->ring_id); in al_eth_xmit_mbuf()
1318 device_printf_dbg(tx_ring->dev, in al_eth_xmit_mbuf()
1319 "queue %d is ready!\n", tx_ring->ring_id); in al_eth_xmit_mbuf()
1323 next_to_use = tx_ring->next_to_use; in al_eth_xmit_mbuf()
1324 tx_info = &tx_ring->tx_buffer_info[next_to_use]; in al_eth_xmit_mbuf()
1329 device_printf(tx_ring->dev, "mbuf is NULL\n"); in al_eth_xmit_mbuf()
1336 error = bus_dmamap_load_mbuf_sg(tx_ring->dma_buf_tag, tx_info->dma_map, in al_eth_xmit_mbuf()
1347 device_printf(tx_ring->dev, in al_eth_xmit_mbuf()
1354 device_printf(tx_ring->dev, in al_eth_xmit_mbuf()
1359 device_printf(tx_ring->dev, in al_eth_xmit_mbuf()
1367 al_eth_tx_csum(tx_ring, tx_info, hal_pkt, m); in al_eth_xmit_mbuf()
1380 tx_info->tx_descs = al_eth_tx_pkt_prepare(tx_ring->dma_q, hal_pkt); in al_eth_xmit_mbuf()
1389 if (unlikely(al_udma_available_get(tx_ring->dma_q) < in al_eth_xmit_mbuf()
1391 tx_ring->stall = 1; in al_eth_xmit_mbuf()
1392 device_printf_dbg(tx_ring->dev, "stall, stopping queue %d...\n", in al_eth_xmit_mbuf()
1393 tx_ring->ring_id); in al_eth_xmit_mbuf()
1397 tx_ring->next_to_use = AL_ETH_TX_RING_IDX_NEXT(tx_ring, next_to_use); in al_eth_xmit_mbuf()
1400 al_eth_tx_dma_action(tx_ring->dma_q, tx_info->tx_descs); in al_eth_xmit_mbuf()
1410 struct al_eth_ring *tx_ring = arg; in al_eth_tx_cmpl_work() local
1413 tx_ring->cmpl_is_running = 1; in al_eth_tx_cmpl_work()
1417 al_eth_tx_do_cleanup(tx_ring); in al_eth_tx_cmpl_work()
1420 tx_ring->cmpl_is_running = 0; in al_eth_tx_cmpl_work()
1424 al_eth_irq_config(tx_ring->unmask_reg_offset, tx_ring->unmask_val); in al_eth_tx_cmpl_work()
1430 struct al_eth_ring *tx_ring = arg; in al_eth_tx_cmlp_irq_filter() local
1434 device_printf_dbg(tx_ring->dev, "%s for ring ID = %d\n", __func__, in al_eth_tx_cmlp_irq_filter()
1435 tx_ring->ring_id); in al_eth_tx_cmlp_irq_filter()
1441 if ((napi == 0) || (napi && tx_ring->cmpl_is_running == 0)) in al_eth_tx_cmlp_irq_filter()
1442 taskqueue_enqueue(tx_ring->cmpl_tq, &tx_ring->cmpl_task); in al_eth_tx_cmlp_irq_filter()
1686 struct al_eth_ring *tx_ring = arg; in al_eth_start_xmit() local
1690 tx_ring->enqueue_is_running = 1; in al_eth_start_xmit()
1695 mtx_lock(&tx_ring->br_mtx); in al_eth_start_xmit()
1696 mbuf = drbr_dequeue(NULL, tx_ring->br); in al_eth_start_xmit()
1697 mtx_unlock(&tx_ring->br_mtx); in al_eth_start_xmit()
1702 al_eth_xmit_mbuf(tx_ring, mbuf); in al_eth_start_xmit()
1706 tx_ring->enqueue_is_running = 0; in al_eth_start_xmit()
1709 mtx_lock(&tx_ring->br_mtx); in al_eth_start_xmit()
1710 mbuf = drbr_dequeue(NULL, tx_ring->br); in al_eth_start_xmit()
1711 mtx_unlock(&tx_ring->br_mtx); in al_eth_start_xmit()
1714 al_eth_xmit_mbuf(tx_ring, mbuf); in al_eth_start_xmit()
1723 struct al_eth_ring *tx_ring; in al_mq_start() local
1738 tx_ring = &adapter->tx_ring[i]; in al_mq_start()
1743 ret = drbr_enqueue(ifp, tx_ring->br, m); in al_mq_start()
1749 if ((napi == 0) || ((napi != 0) && (tx_ring->enqueue_is_running == 0))) in al_mq_start()
1750 taskqueue_enqueue(tx_ring->enqueue_tq, &tx_ring->enqueue_task); in al_mq_start()
1967 al_eth_tx_cmlp_irq_filter(adapter->tx_ring); in al_eth_intr_intx_all()
2128 adapter->irq_tbl[irq_idx].data = &adapter->tx_ring[i]; in al_eth_setup_int_mode()
2278 struct al_eth_ring *tx_ring = &adapter->tx_ring[qid]; in al_eth_setup_tx_resources() local
2279 device_t dev = tx_ring->dev; in al_eth_setup_tx_resources()
2280 struct al_udma_q_params *q_params = &tx_ring->q_params; in al_eth_setup_tx_resources()
2287 size = sizeof(struct al_eth_tx_buffer) * tx_ring->sw_count; in al_eth_setup_tx_resources()
2289 tx_ring->tx_buffer_info = malloc(size, M_IFAL, M_ZERO | M_WAITOK); in al_eth_setup_tx_resources()
2290 tx_ring->descs_size = tx_ring->hw_count * sizeof(union al_udma_desc); in al_eth_setup_tx_resources()
2291 q_params->size = tx_ring->hw_count; in al_eth_setup_tx_resources()
2296 (void**)&q_params->desc_base, tx_ring->descs_size); in al_eth_setup_tx_resources()
2309 mtx_init(&tx_ring->br_mtx, "AlRingMtx", NULL, MTX_DEF); in al_eth_setup_tx_resources()
2310 tx_ring->br = buf_ring_alloc(AL_BR_SIZE, M_DEVBUF, M_WAITOK, in al_eth_setup_tx_resources()
2311 &tx_ring->br_mtx); in al_eth_setup_tx_resources()
2314 TASK_INIT(&tx_ring->enqueue_task, 0, al_eth_start_xmit, tx_ring); in al_eth_setup_tx_resources()
2315 tx_ring->enqueue_tq = taskqueue_create_fast("al_tx_enque", M_NOWAIT, in al_eth_setup_tx_resources()
2316 taskqueue_thread_enqueue, &tx_ring->enqueue_tq); in al_eth_setup_tx_resources()
2317 taskqueue_start_threads(&tx_ring->enqueue_tq, 1, PI_NET, "%s txeq", in al_eth_setup_tx_resources()
2319 TASK_INIT(&tx_ring->cmpl_task, 0, al_eth_tx_cmpl_work, tx_ring); in al_eth_setup_tx_resources()
2320 tx_ring->cmpl_tq = taskqueue_create_fast("al_tx_cmpl", M_NOWAIT, in al_eth_setup_tx_resources()
2321 taskqueue_thread_enqueue, &tx_ring->cmpl_tq); in al_eth_setup_tx_resources()
2322 taskqueue_start_threads(&tx_ring->cmpl_tq, 1, PI_REALTIME, "%s txcq", in al_eth_setup_tx_resources()
2337 &tx_ring->dma_buf_tag); in al_eth_setup_tx_resources()
2345 for (size = 0; size < tx_ring->sw_count; size++) { in al_eth_setup_tx_resources()
2346 ret = bus_dmamap_create(tx_ring->dma_buf_tag, 0, in al_eth_setup_tx_resources()
2347 &tx_ring->tx_buffer_info[size].dma_map); in al_eth_setup_tx_resources()
2359 tx_ring->next_to_use = 0; in al_eth_setup_tx_resources()
2360 tx_ring->next_to_clean = 0; in al_eth_setup_tx_resources()
2375 struct al_eth_ring *tx_ring = &adapter->tx_ring[qid]; in al_eth_free_tx_resources() local
2376 struct al_udma_q_params *q_params = &tx_ring->q_params; in al_eth_free_tx_resources()
2380 while (taskqueue_cancel(tx_ring->cmpl_tq, &tx_ring->cmpl_task, NULL)) in al_eth_free_tx_resources()
2381 taskqueue_drain(tx_ring->cmpl_tq, &tx_ring->cmpl_task); in al_eth_free_tx_resources()
2383 taskqueue_free(tx_ring->cmpl_tq); in al_eth_free_tx_resources()
2384 while (taskqueue_cancel(tx_ring->enqueue_tq, in al_eth_free_tx_resources()
2385 &tx_ring->enqueue_task, NULL)) { in al_eth_free_tx_resources()
2386 taskqueue_drain(tx_ring->enqueue_tq, &tx_ring->enqueue_task); in al_eth_free_tx_resources()
2389 taskqueue_free(tx_ring->enqueue_tq); in al_eth_free_tx_resources()
2391 if (tx_ring->br != NULL) { in al_eth_free_tx_resources()
2392 drbr_flush(adapter->netdev, tx_ring->br); in al_eth_free_tx_resources()
2393 buf_ring_free(tx_ring->br, M_DEVBUF); in al_eth_free_tx_resources()
2396 for (size = 0; size < tx_ring->sw_count; size++) { in al_eth_free_tx_resources()
2397 m_freem(tx_ring->tx_buffer_info[size].m); in al_eth_free_tx_resources()
2398 tx_ring->tx_buffer_info[size].m = NULL; in al_eth_free_tx_resources()
2400 bus_dmamap_unload(tx_ring->dma_buf_tag, in al_eth_free_tx_resources()
2401 tx_ring->tx_buffer_info[size].dma_map); in al_eth_free_tx_resources()
2402 bus_dmamap_destroy(tx_ring->dma_buf_tag, in al_eth_free_tx_resources()
2403 tx_ring->tx_buffer_info[size].dma_map); in al_eth_free_tx_resources()
2405 bus_dma_tag_destroy(tx_ring->dma_buf_tag); in al_eth_free_tx_resources()
2407 free(tx_ring->tx_buffer_info, M_IFAL); in al_eth_free_tx_resources()
2408 tx_ring->tx_buffer_info = NULL; in al_eth_free_tx_resources()
2410 mtx_destroy(&tx_ring->br_mtx); in al_eth_free_tx_resources()
2434 if (adapter->tx_ring[i].q_params.desc_base) in al_eth_free_all_tx_resources()
3049 q_params = &adapter->tx_ring[qid].q_params; in al_eth_udma_queue_enable()