Lines Matching full:tx_chn

61 		struct prueth_tx_chn *tx_chn = &emac->tx_chns[i];  in prueth_cleanup_tx_chns()  local
63 if (tx_chn->desc_pool) in prueth_cleanup_tx_chns()
64 k3_cppi_desc_pool_destroy(tx_chn->desc_pool); in prueth_cleanup_tx_chns()
66 if (tx_chn->tx_chn) in prueth_cleanup_tx_chns()
67 k3_udma_glue_release_tx_chn(tx_chn->tx_chn); in prueth_cleanup_tx_chns()
72 memset(tx_chn, 0, sizeof(*tx_chn)); in prueth_cleanup_tx_chns()
82 struct prueth_tx_chn *tx_chn = &emac->tx_chns[i]; in prueth_ndev_del_tx_napi() local
84 if (tx_chn->irq) in prueth_ndev_del_tx_napi()
85 free_irq(tx_chn->irq, tx_chn); in prueth_ndev_del_tx_napi()
86 netif_napi_del(&tx_chn->napi_tx); in prueth_ndev_del_tx_napi()
91 void prueth_xmit_free(struct prueth_tx_chn *tx_chn, in prueth_xmit_free() argument
102 k3_udma_glue_tx_cppi5_to_dma_addr(tx_chn->tx_chn, &buf_dma); in prueth_xmit_free()
104 dma_unmap_single(tx_chn->dma_dev, buf_dma, buf_dma_len, in prueth_xmit_free()
108 k3_udma_glue_tx_cppi5_to_dma_addr(tx_chn->tx_chn, &next_desc_dma); in prueth_xmit_free()
110 next_desc = k3_cppi_desc_pool_dma2virt(tx_chn->desc_pool, in prueth_xmit_free()
113 k3_udma_glue_tx_cppi5_to_dma_addr(tx_chn->tx_chn, &buf_dma); in prueth_xmit_free()
115 dma_unmap_page(tx_chn->dma_dev, buf_dma, buf_dma_len, in prueth_xmit_free()
119 k3_udma_glue_tx_cppi5_to_dma_addr(tx_chn->tx_chn, &next_desc_dma); in prueth_xmit_free()
121 k3_cppi_desc_pool_free(tx_chn->desc_pool, next_desc); in prueth_xmit_free()
124 k3_cppi_desc_pool_free(tx_chn->desc_pool, first_desc); in prueth_xmit_free()
134 struct prueth_tx_chn *tx_chn; in emac_tx_complete_packets() local
141 tx_chn = &emac->tx_chns[chn]; in emac_tx_complete_packets()
144 res = k3_udma_glue_pop_tx_chn(tx_chn->tx_chn, &desc_dma); in emac_tx_complete_packets()
156 desc_tx = k3_cppi_desc_pool_dma2virt(tx_chn->desc_pool, in emac_tx_complete_packets()
162 prueth_xmit_free(tx_chn, desc_tx); in emac_tx_complete_packets()
167 prueth_xmit_free(tx_chn, desc_tx); in emac_tx_complete_packets()
189 (k3_cppi_desc_pool_avail(tx_chn->desc_pool) >= in emac_tx_complete_packets()
209 struct prueth_tx_chn *tx_chn = prueth_napi_to_tx_chn(napi_tx); in emac_napi_tx_poll() local
210 struct prueth_emac *emac = tx_chn->emac; in emac_napi_tx_poll()
214 num_tx_packets = emac_tx_complete_packets(emac, tx_chn->id, budget, in emac_napi_tx_poll()
221 if (unlikely(tx_chn->tx_pace_timeout_ns && !tdown)) { in emac_napi_tx_poll()
222 hrtimer_start(&tx_chn->tx_hrtimer, in emac_napi_tx_poll()
223 ns_to_ktime(tx_chn->tx_pace_timeout_ns), in emac_napi_tx_poll()
226 enable_irq(tx_chn->irq); in emac_napi_tx_poll()
235 struct prueth_tx_chn *tx_chn = dev_id; in prueth_tx_irq() local
238 napi_schedule(&tx_chn->napi_tx); in prueth_tx_irq()
249 struct prueth_tx_chn *tx_chn = &emac->tx_chns[i]; in prueth_ndev_add_tx_napi() local
251 netif_napi_add_tx(emac->ndev, &tx_chn->napi_tx, emac_napi_tx_poll); in prueth_ndev_add_tx_napi()
252 hrtimer_init(&tx_chn->tx_hrtimer, CLOCK_MONOTONIC, in prueth_ndev_add_tx_napi()
254 tx_chn->tx_hrtimer.function = &emac_tx_timer_callback; in prueth_ndev_add_tx_napi()
255 ret = request_irq(tx_chn->irq, prueth_tx_irq, in prueth_ndev_add_tx_napi()
256 IRQF_TRIGGER_HIGH, tx_chn->name, in prueth_ndev_add_tx_napi()
257 tx_chn); in prueth_ndev_add_tx_napi()
259 netif_napi_del(&tx_chn->napi_tx); in prueth_ndev_add_tx_napi()
261 tx_chn->irq); in prueth_ndev_add_tx_napi()
301 struct prueth_tx_chn *tx_chn = &emac->tx_chns[i]; in prueth_init_tx_chns() local
304 snprintf(tx_chn->name, sizeof(tx_chn->name), in prueth_init_tx_chns()
307 tx_chn->emac = emac; in prueth_init_tx_chns()
308 tx_chn->id = i; in prueth_init_tx_chns()
309 tx_chn->descs_num = PRUETH_MAX_TX_DESC; in prueth_init_tx_chns()
311 tx_chn->tx_chn = in prueth_init_tx_chns()
312 k3_udma_glue_request_tx_chn(dev, tx_chn->name, in prueth_init_tx_chns()
314 if (IS_ERR(tx_chn->tx_chn)) { in prueth_init_tx_chns()
315 ret = PTR_ERR(tx_chn->tx_chn); in prueth_init_tx_chns()
316 tx_chn->tx_chn = NULL; in prueth_init_tx_chns()
322 tx_chn->dma_dev = k3_udma_glue_tx_get_dma_device(tx_chn->tx_chn); in prueth_init_tx_chns()
323 tx_chn->desc_pool = in prueth_init_tx_chns()
324 k3_cppi_desc_pool_create_name(tx_chn->dma_dev, in prueth_init_tx_chns()
325 tx_chn->descs_num, in prueth_init_tx_chns()
327 tx_chn->name); in prueth_init_tx_chns()
328 if (IS_ERR(tx_chn->desc_pool)) { in prueth_init_tx_chns()
329 ret = PTR_ERR(tx_chn->desc_pool); in prueth_init_tx_chns()
330 tx_chn->desc_pool = NULL; in prueth_init_tx_chns()
335 ret = k3_udma_glue_tx_get_irq(tx_chn->tx_chn); in prueth_init_tx_chns()
340 tx_chn->irq = ret; in prueth_init_tx_chns()
342 snprintf(tx_chn->name, sizeof(tx_chn->name), "%s-tx%d", in prueth_init_tx_chns()
343 dev_name(dev), tx_chn->id); in prueth_init_tx_chns()
665 struct prueth_tx_chn *tx_chn; in icssg_ndo_start_xmit() local
677 tx_chn = &emac->tx_chns[q_idx]; in icssg_ndo_start_xmit()
681 buf_dma = dma_map_single(tx_chn->dma_dev, skb->data, pkt_len, DMA_TO_DEVICE); in icssg_ndo_start_xmit()
682 if (dma_mapping_error(tx_chn->dma_dev, buf_dma)) { in icssg_ndo_start_xmit()
688 first_desc = k3_cppi_desc_pool_alloc(tx_chn->desc_pool); in icssg_ndo_start_xmit()
691 dma_unmap_single(tx_chn->dma_dev, buf_dma, pkt_len, DMA_TO_DEVICE); in icssg_ndo_start_xmit()
730 k3_udma_glue_tx_dma_to_cppi5_addr(tx_chn->tx_chn, &buf_dma); in icssg_ndo_start_xmit()
741 next_desc = k3_cppi_desc_pool_alloc(tx_chn->desc_pool); in icssg_ndo_start_xmit()
748 buf_dma = skb_frag_dma_map(tx_chn->dma_dev, frag, 0, frag_size, in icssg_ndo_start_xmit()
750 if (dma_mapping_error(tx_chn->dma_dev, buf_dma)) { in icssg_ndo_start_xmit()
752 k3_cppi_desc_pool_free(tx_chn->desc_pool, next_desc); in icssg_ndo_start_xmit()
758 k3_udma_glue_tx_dma_to_cppi5_addr(tx_chn->tx_chn, &buf_dma); in icssg_ndo_start_xmit()
762 desc_dma = k3_cppi_desc_pool_virt2dma(tx_chn->desc_pool, in icssg_ndo_start_xmit()
764 k3_udma_glue_tx_dma_to_cppi5_addr(tx_chn->tx_chn, &desc_dma); in icssg_ndo_start_xmit()
776 desc_dma = k3_cppi_desc_pool_virt2dma(tx_chn->desc_pool, first_desc); in icssg_ndo_start_xmit()
780 ret = k3_udma_glue_push_tx_chn(tx_chn->tx_chn, first_desc, desc_dma); in icssg_ndo_start_xmit()
789 if (k3_cppi_desc_pool_avail(tx_chn->desc_pool) < MAX_SKB_FRAGS) { in icssg_ndo_start_xmit()
794 if (k3_cppi_desc_pool_avail(tx_chn->desc_pool) >= in icssg_ndo_start_xmit()
808 prueth_xmit_free(tx_chn, first_desc); in icssg_ndo_start_xmit()
824 prueth_xmit_free(tx_chn, first_desc); in icssg_ndo_start_xmit()
834 struct prueth_tx_chn *tx_chn = data; in prueth_tx_cleanup() local
839 desc_tx = k3_cppi_desc_pool_dma2virt(tx_chn->desc_pool, desc_dma); in prueth_tx_cleanup()
842 prueth_xmit_free(tx_chn, desc_tx); in prueth_tx_cleanup()
943 k3_udma_glue_reset_tx_chn(emac->tx_chns[i].tx_chn, in prueth_reset_tx_chan()
946 k3_udma_glue_disable_tx_chn(emac->tx_chns[i].tx_chn); in prueth_reset_tx_chan()