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()
1697 struct al_eth_ring *tx_ring = arg; in al_eth_start_xmit() local
1701 tx_ring->enqueue_is_running = 1; in al_eth_start_xmit()
1706 mtx_lock(&tx_ring->br_mtx); in al_eth_start_xmit()
1707 mbuf = drbr_dequeue(NULL, tx_ring->br); in al_eth_start_xmit()
1708 mtx_unlock(&tx_ring->br_mtx); in al_eth_start_xmit()
1713 al_eth_xmit_mbuf(tx_ring, mbuf); in al_eth_start_xmit()
1717 tx_ring->enqueue_is_running = 0; in al_eth_start_xmit()
1720 mtx_lock(&tx_ring->br_mtx); in al_eth_start_xmit()
1721 mbuf = drbr_dequeue(NULL, tx_ring->br); in al_eth_start_xmit()
1722 mtx_unlock(&tx_ring->br_mtx); in al_eth_start_xmit()
1725 al_eth_xmit_mbuf(tx_ring, mbuf); in al_eth_start_xmit()
1734 struct al_eth_ring *tx_ring; in al_mq_start() local
1749 tx_ring = &adapter->tx_ring[i]; in al_mq_start()
1754 ret = drbr_enqueue(ifp, tx_ring->br, m); in al_mq_start()
1760 if ((napi == 0) || ((napi != 0) && (tx_ring->enqueue_is_running == 0))) in al_mq_start()
1761 taskqueue_enqueue(tx_ring->enqueue_tq, &tx_ring->enqueue_task); in al_mq_start()
1978 al_eth_tx_cmlp_irq_filter(adapter->tx_ring); in al_eth_intr_intx_all()
2147 adapter->irq_tbl[irq_idx].data = &adapter->tx_ring[i]; in al_eth_setup_int_mode()
2297 struct al_eth_ring *tx_ring = &adapter->tx_ring[qid]; in al_eth_setup_tx_resources() local
2298 device_t dev = tx_ring->dev; in al_eth_setup_tx_resources()
2299 struct al_udma_q_params *q_params = &tx_ring->q_params; in al_eth_setup_tx_resources()
2306 size = sizeof(struct al_eth_tx_buffer) * tx_ring->sw_count; in al_eth_setup_tx_resources()
2308 tx_ring->tx_buffer_info = malloc(size, M_IFAL, M_ZERO | M_WAITOK); in al_eth_setup_tx_resources()
2309 if (tx_ring->tx_buffer_info == NULL) in al_eth_setup_tx_resources()
2312 tx_ring->descs_size = tx_ring->hw_count * sizeof(union al_udma_desc); in al_eth_setup_tx_resources()
2313 q_params->size = tx_ring->hw_count; in al_eth_setup_tx_resources()
2318 (void**)&q_params->desc_base, tx_ring->descs_size); in al_eth_setup_tx_resources()
2331 mtx_init(&tx_ring->br_mtx, "AlRingMtx", NULL, MTX_DEF); in al_eth_setup_tx_resources()
2332 tx_ring->br = buf_ring_alloc(AL_BR_SIZE, M_DEVBUF, M_WAITOK, in al_eth_setup_tx_resources()
2333 &tx_ring->br_mtx); in al_eth_setup_tx_resources()
2334 if (tx_ring->br == NULL) { in al_eth_setup_tx_resources()
2340 TASK_INIT(&tx_ring->enqueue_task, 0, al_eth_start_xmit, tx_ring); in al_eth_setup_tx_resources()
2341 tx_ring->enqueue_tq = taskqueue_create_fast("al_tx_enque", M_NOWAIT, in al_eth_setup_tx_resources()
2342 taskqueue_thread_enqueue, &tx_ring->enqueue_tq); in al_eth_setup_tx_resources()
2343 taskqueue_start_threads(&tx_ring->enqueue_tq, 1, PI_NET, "%s txeq", in al_eth_setup_tx_resources()
2345 TASK_INIT(&tx_ring->cmpl_task, 0, al_eth_tx_cmpl_work, tx_ring); in al_eth_setup_tx_resources()
2346 tx_ring->cmpl_tq = taskqueue_create_fast("al_tx_cmpl", M_NOWAIT, in al_eth_setup_tx_resources()
2347 taskqueue_thread_enqueue, &tx_ring->cmpl_tq); in al_eth_setup_tx_resources()
2348 taskqueue_start_threads(&tx_ring->cmpl_tq, 1, PI_REALTIME, "%s txcq", in al_eth_setup_tx_resources()
2363 &tx_ring->dma_buf_tag); in al_eth_setup_tx_resources()
2371 for (size = 0; size < tx_ring->sw_count; size++) { in al_eth_setup_tx_resources()
2372 ret = bus_dmamap_create(tx_ring->dma_buf_tag, 0, in al_eth_setup_tx_resources()
2373 &tx_ring->tx_buffer_info[size].dma_map); in al_eth_setup_tx_resources()
2385 tx_ring->next_to_use = 0; in al_eth_setup_tx_resources()
2386 tx_ring->next_to_clean = 0; in al_eth_setup_tx_resources()
2401 struct al_eth_ring *tx_ring = &adapter->tx_ring[qid]; in al_eth_free_tx_resources() local
2402 struct al_udma_q_params *q_params = &tx_ring->q_params; in al_eth_free_tx_resources()
2406 while (taskqueue_cancel(tx_ring->cmpl_tq, &tx_ring->cmpl_task, NULL)) in al_eth_free_tx_resources()
2407 taskqueue_drain(tx_ring->cmpl_tq, &tx_ring->cmpl_task); in al_eth_free_tx_resources()
2409 taskqueue_free(tx_ring->cmpl_tq); in al_eth_free_tx_resources()
2410 while (taskqueue_cancel(tx_ring->enqueue_tq, in al_eth_free_tx_resources()
2411 &tx_ring->enqueue_task, NULL)) { in al_eth_free_tx_resources()
2412 taskqueue_drain(tx_ring->enqueue_tq, &tx_ring->enqueue_task); in al_eth_free_tx_resources()
2415 taskqueue_free(tx_ring->enqueue_tq); in al_eth_free_tx_resources()
2417 if (tx_ring->br != NULL) { in al_eth_free_tx_resources()
2418 drbr_flush(adapter->netdev, tx_ring->br); in al_eth_free_tx_resources()
2419 buf_ring_free(tx_ring->br, M_DEVBUF); in al_eth_free_tx_resources()
2422 for (size = 0; size < tx_ring->sw_count; size++) { in al_eth_free_tx_resources()
2423 m_freem(tx_ring->tx_buffer_info[size].m); in al_eth_free_tx_resources()
2424 tx_ring->tx_buffer_info[size].m = NULL; in al_eth_free_tx_resources()
2426 bus_dmamap_unload(tx_ring->dma_buf_tag, in al_eth_free_tx_resources()
2427 tx_ring->tx_buffer_info[size].dma_map); in al_eth_free_tx_resources()
2428 bus_dmamap_destroy(tx_ring->dma_buf_tag, in al_eth_free_tx_resources()
2429 tx_ring->tx_buffer_info[size].dma_map); in al_eth_free_tx_resources()
2431 bus_dma_tag_destroy(tx_ring->dma_buf_tag); in al_eth_free_tx_resources()
2433 free(tx_ring->tx_buffer_info, M_IFAL); in al_eth_free_tx_resources()
2434 tx_ring->tx_buffer_info = NULL; in al_eth_free_tx_resources()
2436 mtx_destroy(&tx_ring->br_mtx); in al_eth_free_tx_resources()
2460 if (adapter->tx_ring[i].q_params.desc_base) in al_eth_free_all_tx_resources()
3078 q_params = &adapter->tx_ring[qid].q_params; in al_eth_udma_queue_enable()