Lines Matching refs:channel
135 struct xgbe_channel *channel_mem, *channel; in xgbe_alloc_channels() local
156 for (i = 0, channel = channel_mem; i < count; i++, channel++) { in xgbe_alloc_channels()
157 snprintf(channel->name, sizeof(channel->name), "channel-%d", i); in xgbe_alloc_channels()
158 channel->pdata = pdata; in xgbe_alloc_channels()
159 channel->queue_index = i; in xgbe_alloc_channels()
160 channel->dma_regs = pdata->xgmac_regs + DMA_CH_BASE + in xgbe_alloc_channels()
173 channel->dma_irq = ret; in xgbe_alloc_channels()
178 channel->tx_ring = tx_ring++; in xgbe_alloc_channels()
183 channel->rx_ring = rx_ring++; in xgbe_alloc_channels()
187 channel->name, channel->queue_index, channel->dma_regs, in xgbe_alloc_channels()
188 channel->dma_irq, channel->tx_ring, channel->rx_ring); in xgbe_alloc_channels()
191 pdata->channel = channel_mem; in xgbe_alloc_channels()
211 if (!pdata->channel) in xgbe_free_channels()
214 kfree(pdata->channel->rx_ring); in xgbe_free_channels()
215 kfree(pdata->channel->tx_ring); in xgbe_free_channels()
216 kfree(pdata->channel); in xgbe_free_channels()
218 pdata->channel = NULL; in xgbe_free_channels()
232 static int xgbe_maybe_stop_tx_queue(struct xgbe_channel *channel, in xgbe_maybe_stop_tx_queue() argument
235 struct xgbe_prv_data *pdata = channel->pdata; in xgbe_maybe_stop_tx_queue()
239 netif_stop_subqueue(pdata->netdev, channel->queue_index); in xgbe_maybe_stop_tx_queue()
246 pdata->hw_if.tx_start_xmit(channel, ring); in xgbe_maybe_stop_tx_queue()
275 struct xgbe_channel *channel; in xgbe_enable_rx_tx_ints() local
279 channel = pdata->channel; in xgbe_enable_rx_tx_ints()
280 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_enable_rx_tx_ints()
281 if (channel->tx_ring && channel->rx_ring) in xgbe_enable_rx_tx_ints()
283 else if (channel->tx_ring) in xgbe_enable_rx_tx_ints()
285 else if (channel->rx_ring) in xgbe_enable_rx_tx_ints()
290 hw_if->enable_int(channel, int_id); in xgbe_enable_rx_tx_ints()
297 struct xgbe_channel *channel; in xgbe_disable_rx_tx_ints() local
301 channel = pdata->channel; in xgbe_disable_rx_tx_ints()
302 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_disable_rx_tx_ints()
303 if (channel->tx_ring && channel->rx_ring) in xgbe_disable_rx_tx_ints()
305 else if (channel->tx_ring) in xgbe_disable_rx_tx_ints()
307 else if (channel->rx_ring) in xgbe_disable_rx_tx_ints()
312 hw_if->disable_int(channel, int_id); in xgbe_disable_rx_tx_ints()
320 struct xgbe_channel *channel; in xgbe_isr() local
339 channel = pdata->channel + i; in xgbe_isr()
341 dma_ch_isr = XGMAC_DMA_IOREAD(channel, DMA_CH_SR); in xgbe_isr()
365 XGMAC_DMA_IOWRITE(channel, DMA_CH_SR, dma_ch_isr); in xgbe_isr()
397 struct xgbe_channel *channel = data; in xgbe_dma_isr() local
402 if (napi_schedule_prep(&channel->napi)) { in xgbe_dma_isr()
404 disable_irq_nosync(channel->dma_irq); in xgbe_dma_isr()
407 __napi_schedule(&channel->napi); in xgbe_dma_isr()
415 struct xgbe_channel *channel = (struct xgbe_channel *)data; in xgbe_tx_timer() local
416 struct xgbe_prv_data *pdata = channel->pdata; in xgbe_tx_timer()
421 napi = (pdata->per_channel_irq) ? &channel->napi : &pdata->napi; in xgbe_tx_timer()
426 disable_irq_nosync(channel->dma_irq); in xgbe_tx_timer()
434 channel->tx_timer_active = 0; in xgbe_tx_timer()
441 struct xgbe_channel *channel; in xgbe_init_tx_timers() local
446 channel = pdata->channel; in xgbe_init_tx_timers()
447 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_init_tx_timers()
448 if (!channel->tx_ring) in xgbe_init_tx_timers()
451 DBGPR(" %s adding tx timer\n", channel->name); in xgbe_init_tx_timers()
452 setup_timer(&channel->tx_timer, xgbe_tx_timer, in xgbe_init_tx_timers()
453 (unsigned long)channel); in xgbe_init_tx_timers()
461 struct xgbe_channel *channel; in xgbe_stop_tx_timers() local
466 channel = pdata->channel; in xgbe_stop_tx_timers()
467 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_stop_tx_timers()
468 if (!channel->tx_ring) in xgbe_stop_tx_timers()
471 DBGPR(" %s deleting tx timer\n", channel->name); in xgbe_stop_tx_timers()
472 del_timer_sync(&channel->tx_timer); in xgbe_stop_tx_timers()
579 struct xgbe_channel *channel; in xgbe_napi_enable() local
583 channel = pdata->channel; in xgbe_napi_enable()
584 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_napi_enable()
586 netif_napi_add(pdata->netdev, &channel->napi, in xgbe_napi_enable()
589 napi_enable(&channel->napi); in xgbe_napi_enable()
602 struct xgbe_channel *channel; in xgbe_napi_disable() local
606 channel = pdata->channel; in xgbe_napi_disable()
607 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_napi_disable()
608 napi_disable(&channel->napi); in xgbe_napi_disable()
611 netif_napi_del(&channel->napi); in xgbe_napi_disable()
623 struct xgbe_channel *channel; in xgbe_request_irqs() local
639 channel = pdata->channel; in xgbe_request_irqs()
640 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_request_irqs()
641 snprintf(channel->dma_irq_name, in xgbe_request_irqs()
642 sizeof(channel->dma_irq_name) - 1, in xgbe_request_irqs()
644 channel->queue_index); in xgbe_request_irqs()
646 ret = devm_request_irq(pdata->dev, channel->dma_irq, in xgbe_request_irqs()
648 channel->dma_irq_name, channel); in xgbe_request_irqs()
651 channel->dma_irq); in xgbe_request_irqs()
660 for (i--, channel--; i < pdata->channel_count; i--, channel--) in xgbe_request_irqs()
661 devm_free_irq(pdata->dev, channel->dma_irq, channel); in xgbe_request_irqs()
670 struct xgbe_channel *channel; in xgbe_free_irqs() local
678 channel = pdata->channel; in xgbe_free_irqs()
679 for (i = 0; i < pdata->channel_count; i++, channel++) in xgbe_free_irqs()
680 devm_free_irq(pdata->dev, channel->dma_irq, channel); in xgbe_free_irqs()
715 struct xgbe_channel *channel; in xgbe_free_tx_data() local
722 channel = pdata->channel; in xgbe_free_tx_data()
723 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_free_tx_data()
724 ring = channel->tx_ring; in xgbe_free_tx_data()
740 struct xgbe_channel *channel; in xgbe_free_rx_data() local
747 channel = pdata->channel; in xgbe_free_rx_data()
748 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_free_rx_data()
749 ring = channel->rx_ring; in xgbe_free_rx_data()
988 struct xgbe_channel *channel; in xgbe_stop() local
1010 channel = pdata->channel; in xgbe_stop()
1011 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_stop()
1012 if (!channel->tx_ring) in xgbe_stop()
1015 txq = netdev_get_tx_queue(netdev, channel->queue_index); in xgbe_stop()
1465 struct xgbe_channel *channel; in xgbe_xmit() local
1473 channel = pdata->channel + skb->queue_mapping; in xgbe_xmit()
1474 txq = netdev_get_tx_queue(netdev, channel->queue_index); in xgbe_xmit()
1475 ring = channel->tx_ring; in xgbe_xmit()
1491 ret = xgbe_maybe_stop_tx_queue(channel, ring, packet->rdesc_count); in xgbe_xmit()
1503 if (!desc_if->map_tx_skb(channel, skb)) { in xgbe_xmit()
1514 hw_if->dev_xmit(channel); in xgbe_xmit()
1521 xgbe_maybe_stop_tx_queue(channel, ring, XGBE_TX_MAX_DESCS); in xgbe_xmit()
1678 struct xgbe_channel *channel; in xgbe_poll_controller() local
1684 channel = pdata->channel; in xgbe_poll_controller()
1685 for (i = 0; i < pdata->channel_count; i++, channel++) in xgbe_poll_controller()
1686 xgbe_dma_isr(channel->dma_irq, channel); in xgbe_poll_controller()
1791 static void xgbe_rx_refresh(struct xgbe_channel *channel) in xgbe_rx_refresh() argument
1793 struct xgbe_prv_data *pdata = channel->pdata; in xgbe_rx_refresh()
1796 struct xgbe_ring *ring = channel->rx_ring; in xgbe_rx_refresh()
1819 XGMAC_DMA_IOWRITE(channel, DMA_CH_RDTR_LO, in xgbe_rx_refresh()
1847 static int xgbe_tx_poll(struct xgbe_channel *channel) in xgbe_tx_poll() argument
1849 struct xgbe_prv_data *pdata = channel->pdata; in xgbe_tx_poll()
1852 struct xgbe_ring *ring = channel->tx_ring; in xgbe_tx_poll()
1866 txq = netdev_get_tx_queue(netdev, channel->queue_index); in xgbe_tx_poll()
1913 static int xgbe_rx_poll(struct xgbe_channel *channel, int budget) in xgbe_rx_poll() argument
1915 struct xgbe_prv_data *pdata = channel->pdata; in xgbe_rx_poll()
1917 struct xgbe_ring *ring = channel->rx_ring; in xgbe_rx_poll()
1935 napi = (pdata->per_channel_irq) ? &channel->napi : &pdata->napi; in xgbe_rx_poll()
1962 xgbe_rx_refresh(channel); in xgbe_rx_poll()
1964 if (hw_if->dev_read(channel)) in xgbe_rx_poll()
2072 skb_record_rx_queue(skb, channel->queue_index); in xgbe_rx_poll()
2100 struct xgbe_channel *channel = container_of(napi, struct xgbe_channel, in xgbe_one_poll() local
2107 xgbe_tx_poll(channel); in xgbe_one_poll()
2110 processed = xgbe_rx_poll(channel, budget); in xgbe_one_poll()
2118 enable_irq(channel->dma_irq); in xgbe_one_poll()
2130 struct xgbe_channel *channel; in xgbe_all_poll() local
2142 channel = pdata->channel; in xgbe_all_poll()
2143 for (i = 0; i < pdata->channel_count; i++, channel++) { in xgbe_all_poll()
2145 xgbe_tx_poll(channel); in xgbe_all_poll()
2150 processed += xgbe_rx_poll(channel, ring_budget); in xgbe_all_poll()