Lines Matching refs:tx_chn
66 struct prueth_tx_chn *tx_chn = &emac->tx_chns[i]; in prueth_cleanup_tx_chns() local
68 if (tx_chn->desc_pool) in prueth_cleanup_tx_chns()
69 k3_cppi_desc_pool_destroy(tx_chn->desc_pool); in prueth_cleanup_tx_chns()
71 if (tx_chn->tx_chn) in prueth_cleanup_tx_chns()
72 k3_udma_glue_release_tx_chn(tx_chn->tx_chn); in prueth_cleanup_tx_chns()
77 memset(tx_chn, 0, sizeof(*tx_chn)); in prueth_cleanup_tx_chns()
87 struct prueth_tx_chn *tx_chn = &emac->tx_chns[i]; in prueth_ndev_del_tx_napi() local
89 if (tx_chn->irq) in prueth_ndev_del_tx_napi()
90 free_irq(tx_chn->irq, tx_chn); in prueth_ndev_del_tx_napi()
91 netif_napi_del(&tx_chn->napi_tx); in prueth_ndev_del_tx_napi()
96 void prueth_xmit_free(struct prueth_tx_chn *tx_chn, in prueth_xmit_free() argument
107 k3_udma_glue_tx_cppi5_to_dma_addr(tx_chn->tx_chn, &buf_dma); in prueth_xmit_free()
109 dma_unmap_single(tx_chn->dma_dev, buf_dma, buf_dma_len, in prueth_xmit_free()
113 k3_udma_glue_tx_cppi5_to_dma_addr(tx_chn->tx_chn, &next_desc_dma); in prueth_xmit_free()
115 next_desc = k3_cppi_desc_pool_dma2virt(tx_chn->desc_pool, in prueth_xmit_free()
118 k3_udma_glue_tx_cppi5_to_dma_addr(tx_chn->tx_chn, &buf_dma); in prueth_xmit_free()
120 dma_unmap_page(tx_chn->dma_dev, buf_dma, buf_dma_len, in prueth_xmit_free()
124 k3_udma_glue_tx_cppi5_to_dma_addr(tx_chn->tx_chn, &next_desc_dma); in prueth_xmit_free()
126 k3_cppi_desc_pool_free(tx_chn->desc_pool, next_desc); in prueth_xmit_free()
129 k3_cppi_desc_pool_free(tx_chn->desc_pool, first_desc); in prueth_xmit_free()
140 struct prueth_tx_chn *tx_chn; in emac_tx_complete_packets() local
147 tx_chn = &emac->tx_chns[chn]; in emac_tx_complete_packets()
150 res = k3_udma_glue_pop_tx_chn(tx_chn->tx_chn, &desc_dma); in emac_tx_complete_packets()
162 desc_tx = k3_cppi_desc_pool_dma2virt(tx_chn->desc_pool, in emac_tx_complete_packets()
180 prueth_xmit_free(tx_chn, desc_tx); in emac_tx_complete_packets()
185 prueth_xmit_free(tx_chn, desc_tx); in emac_tx_complete_packets()
201 (k3_cppi_desc_pool_avail(tx_chn->desc_pool) >= in emac_tx_complete_packets()
221 struct prueth_tx_chn *tx_chn = prueth_napi_to_tx_chn(napi_tx); in emac_napi_tx_poll() local
222 struct prueth_emac *emac = tx_chn->emac; in emac_napi_tx_poll()
226 num_tx_packets = emac_tx_complete_packets(emac, tx_chn->id, budget, in emac_napi_tx_poll()
233 if (unlikely(tx_chn->tx_pace_timeout_ns && !tdown)) { in emac_napi_tx_poll()
234 hrtimer_start(&tx_chn->tx_hrtimer, in emac_napi_tx_poll()
235 ns_to_ktime(tx_chn->tx_pace_timeout_ns), in emac_napi_tx_poll()
238 enable_irq(tx_chn->irq); in emac_napi_tx_poll()
247 struct prueth_tx_chn *tx_chn = dev_id; in prueth_tx_irq() local
250 napi_schedule(&tx_chn->napi_tx); in prueth_tx_irq()
261 struct prueth_tx_chn *tx_chn = &emac->tx_chns[i]; in prueth_ndev_add_tx_napi() local
263 netif_napi_add_tx(emac->ndev, &tx_chn->napi_tx, emac_napi_tx_poll); in prueth_ndev_add_tx_napi()
264 hrtimer_setup(&tx_chn->tx_hrtimer, &emac_tx_timer_callback, CLOCK_MONOTONIC, in prueth_ndev_add_tx_napi()
266 ret = request_irq(tx_chn->irq, prueth_tx_irq, in prueth_ndev_add_tx_napi()
267 IRQF_TRIGGER_HIGH, tx_chn->name, in prueth_ndev_add_tx_napi()
268 tx_chn); in prueth_ndev_add_tx_napi()
270 netif_napi_del(&tx_chn->napi_tx); in prueth_ndev_add_tx_napi()
272 tx_chn->irq); in prueth_ndev_add_tx_napi()
312 struct prueth_tx_chn *tx_chn = &emac->tx_chns[i]; in prueth_init_tx_chns() local
315 snprintf(tx_chn->name, sizeof(tx_chn->name), in prueth_init_tx_chns()
318 tx_chn->emac = emac; in prueth_init_tx_chns()
319 tx_chn->id = i; in prueth_init_tx_chns()
320 tx_chn->descs_num = PRUETH_MAX_TX_DESC; in prueth_init_tx_chns()
322 tx_chn->tx_chn = in prueth_init_tx_chns()
323 k3_udma_glue_request_tx_chn(dev, tx_chn->name, in prueth_init_tx_chns()
325 if (IS_ERR(tx_chn->tx_chn)) { in prueth_init_tx_chns()
326 ret = PTR_ERR(tx_chn->tx_chn); in prueth_init_tx_chns()
327 tx_chn->tx_chn = NULL; in prueth_init_tx_chns()
333 tx_chn->dma_dev = k3_udma_glue_tx_get_dma_device(tx_chn->tx_chn); in prueth_init_tx_chns()
334 tx_chn->desc_pool = in prueth_init_tx_chns()
335 k3_cppi_desc_pool_create_name(tx_chn->dma_dev, in prueth_init_tx_chns()
336 tx_chn->descs_num, in prueth_init_tx_chns()
338 tx_chn->name); in prueth_init_tx_chns()
339 if (IS_ERR(tx_chn->desc_pool)) { in prueth_init_tx_chns()
340 ret = PTR_ERR(tx_chn->desc_pool); in prueth_init_tx_chns()
341 tx_chn->desc_pool = NULL; in prueth_init_tx_chns()
346 ret = k3_udma_glue_tx_get_irq(tx_chn->tx_chn); in prueth_init_tx_chns()
351 tx_chn->irq = ret; in prueth_init_tx_chns()
353 snprintf(tx_chn->name, sizeof(tx_chn->name), "%s-tx%d", in prueth_init_tx_chns()
354 dev_name(dev), tx_chn->id); in prueth_init_tx_chns()
560 struct prueth_tx_chn *tx_chn; in emac_xmit_xdp_frame() local
571 tx_chn = &emac->tx_chns[q_idx]; in emac_xmit_xdp_frame()
573 first_desc = k3_cppi_desc_pool_alloc(tx_chn->desc_pool); in emac_xmit_xdp_frame()
583 buf_dma = dma_map_single(tx_chn->dma_dev, xdpf->data, xdpf->len, DMA_TO_DEVICE); in emac_xmit_xdp_frame()
584 if (dma_mapping_error(tx_chn->dma_dev, buf_dma)) { in emac_xmit_xdp_frame()
602 k3_udma_glue_tx_dma_to_cppi5_addr(tx_chn->tx_chn, &buf_dma); in emac_xmit_xdp_frame()
609 netif_txq = netdev_get_tx_queue(ndev, tx_chn->id); in emac_xmit_xdp_frame()
613 desc_dma = k3_cppi_desc_pool_virt2dma(tx_chn->desc_pool, first_desc); in emac_xmit_xdp_frame()
615 ret = k3_udma_glue_push_tx_chn(tx_chn->tx_chn, first_desc, desc_dma); in emac_xmit_xdp_frame()
625 prueth_xmit_free(tx_chn, first_desc); in emac_xmit_xdp_frame()
860 struct prueth_tx_chn *tx_chn; in icssg_ndo_start_xmit() local
871 tx_chn = &emac->tx_chns[q_idx]; in icssg_ndo_start_xmit()
875 buf_dma = dma_map_single(tx_chn->dma_dev, skb->data, pkt_len, DMA_TO_DEVICE); in icssg_ndo_start_xmit()
876 if (dma_mapping_error(tx_chn->dma_dev, buf_dma)) { in icssg_ndo_start_xmit()
882 first_desc = k3_cppi_desc_pool_alloc(tx_chn->desc_pool); in icssg_ndo_start_xmit()
885 dma_unmap_single(tx_chn->dma_dev, buf_dma, pkt_len, DMA_TO_DEVICE); in icssg_ndo_start_xmit()
924 k3_udma_glue_tx_dma_to_cppi5_addr(tx_chn->tx_chn, &buf_dma); in icssg_ndo_start_xmit()
936 next_desc = k3_cppi_desc_pool_alloc(tx_chn->desc_pool); in icssg_ndo_start_xmit()
943 buf_dma = skb_frag_dma_map(tx_chn->dma_dev, frag, 0, frag_size, in icssg_ndo_start_xmit()
945 if (dma_mapping_error(tx_chn->dma_dev, buf_dma)) { in icssg_ndo_start_xmit()
947 k3_cppi_desc_pool_free(tx_chn->desc_pool, next_desc); in icssg_ndo_start_xmit()
953 k3_udma_glue_tx_dma_to_cppi5_addr(tx_chn->tx_chn, &buf_dma); in icssg_ndo_start_xmit()
957 desc_dma = k3_cppi_desc_pool_virt2dma(tx_chn->desc_pool, in icssg_ndo_start_xmit()
959 k3_udma_glue_tx_dma_to_cppi5_addr(tx_chn->tx_chn, &desc_dma); in icssg_ndo_start_xmit()
971 desc_dma = k3_cppi_desc_pool_virt2dma(tx_chn->desc_pool, first_desc); in icssg_ndo_start_xmit()
975 ret = k3_udma_glue_push_tx_chn(tx_chn->tx_chn, first_desc, desc_dma); in icssg_ndo_start_xmit()
985 if (k3_cppi_desc_pool_avail(tx_chn->desc_pool) < MAX_SKB_FRAGS) { in icssg_ndo_start_xmit()
990 if (k3_cppi_desc_pool_avail(tx_chn->desc_pool) >= in icssg_ndo_start_xmit()
1004 prueth_xmit_free(tx_chn, first_desc); in icssg_ndo_start_xmit()
1020 prueth_xmit_free(tx_chn, first_desc); in icssg_ndo_start_xmit()
1030 struct prueth_tx_chn *tx_chn = data; in prueth_tx_cleanup() local
1036 desc_tx = k3_cppi_desc_pool_dma2virt(tx_chn->desc_pool, desc_dma); in prueth_tx_cleanup()
1052 prueth_xmit_free(tx_chn, desc_tx); in prueth_tx_cleanup()
1199 k3_udma_glue_reset_tx_chn(emac->tx_chns[i].tx_chn, in prueth_reset_tx_chan()
1202 k3_udma_glue_disable_tx_chn(emac->tx_chns[i].tx_chn); in prueth_reset_tx_chan()