Lines Matching defs:channel

176 	for (i = 0; i < ARRAY_SIZE(pdata->channel); i++) {
177 if (!pdata->channel[i])
180 kfree(pdata->channel[i]->rx_ring);
181 kfree(pdata->channel[i]->tx_ring);
182 kfree(pdata->channel[i]);
184 pdata->channel[i] = NULL;
192 struct xgbe_channel *channel;
206 channel = xgbe_alloc_node(sizeof(*channel), node);
207 if (!channel)
209 pdata->channel[i] = channel;
211 snprintf(channel->name, sizeof(channel->name), "channel-%u", i);
212 channel->pdata = pdata;
213 channel->queue_index = i;
214 channel->dma_regs = pdata->xgmac_regs + DMA_CH_BASE +
216 channel->node = node;
217 cpumask_set_cpu(cpu, &channel->affinity_mask);
220 channel->dma_irq = pdata->channel_irq[i];
230 channel->tx_ring = ring;
241 channel->rx_ring = ring;
245 "%s: cpu=%u, node=%d\n", channel->name, cpu, node);
249 channel->name, channel->dma_regs, channel->dma_irq,
250 channel->tx_ring, channel->rx_ring);
273 static int xgbe_maybe_stop_tx_queue(struct xgbe_channel *channel,
276 struct xgbe_prv_data *pdata = channel->pdata;
281 netif_stop_subqueue(pdata->netdev, channel->queue_index);
288 pdata->hw_if.tx_start_xmit(channel, ring);
310 struct xgbe_channel *channel)
315 if (channel->tx_ring && channel->rx_ring)
317 else if (channel->tx_ring)
319 else if (channel->rx_ring)
324 hw_if->enable_int(channel, int_id);
332 xgbe_enable_rx_tx_int(pdata, pdata->channel[i]);
336 struct xgbe_channel *channel)
341 if (channel->tx_ring && channel->rx_ring)
343 else if (channel->tx_ring)
345 else if (channel->rx_ring)
350 hw_if->disable_int(channel, int_id);
358 xgbe_disable_rx_tx_int(pdata, pdata->channel[i]);
480 struct xgbe_channel *channel;
499 channel = pdata->channel[i];
501 dma_ch_isr = XGMAC_DMA_IOREAD(channel, DMA_CH_SR);
506 * per channel DMA interrupts. Check to be sure those are not
520 /* Don't clear Rx/Tx status if doing per channel DMA
522 * per channel DMA interrupts.
536 XGMAC_DMA_IOWRITE(channel, DMA_CH_SR, dma_ch_isr);
617 struct xgbe_channel *channel = data;
618 struct xgbe_prv_data *pdata = channel->pdata;
621 /* Per channel DMA interrupts are enabled, so we use the per
622 * channel napi structure and not the private data napi structure
624 if (napi_schedule_prep(&channel->napi)) {
627 xgbe_disable_rx_tx_int(pdata, channel);
629 disable_irq_nosync(channel->dma_irq);
632 __napi_schedule_irqoff(&channel->napi);
639 XGMAC_DMA_IOWRITE(channel, DMA_CH_SR, dma_status);
646 struct xgbe_channel *channel = from_timer(channel, t, tx_timer);
647 struct xgbe_prv_data *pdata = channel->pdata;
652 napi = (pdata->per_channel_irq) ? &channel->napi : &pdata->napi;
658 xgbe_disable_rx_tx_int(pdata, channel);
660 disable_irq_nosync(channel->dma_irq);
668 channel->tx_timer_active = 0;
685 struct xgbe_channel *channel;
696 channel = pdata->channel[i];
697 if (!channel->tx_ring || channel->tx_timer_active)
699 channel->tx_timer_active = 1;
700 mod_timer(&channel->tx_timer,
707 struct xgbe_channel *channel;
713 channel = pdata->channel[i];
714 if (!channel->tx_ring)
717 timer_setup(&channel->tx_timer, xgbe_tx_timer, 0);
728 struct xgbe_channel *channel;
734 channel = pdata->channel[i];
735 if (!channel->tx_ring)
739 del_timer_sync(&channel->tx_timer);
740 channel->tx_timer_active = 0;
912 dev_dbg(pdata->dev, " RX DMA channel count : %u\n",
914 dev_dbg(pdata->dev, " TX DMA channel count : %u\n",
961 struct xgbe_channel *channel;
966 channel = pdata->channel[i];
968 netif_napi_add(pdata->netdev, &channel->napi,
971 napi_enable(&channel->napi);
984 struct xgbe_channel *channel;
989 channel = pdata->channel[i];
990 napi_disable(&channel->napi);
993 netif_napi_del(&channel->napi);
1005 struct xgbe_channel *channel;
1035 channel = pdata->channel[i];
1036 snprintf(channel->dma_irq_name,
1037 sizeof(channel->dma_irq_name) - 1,
1039 channel->queue_index);
1041 ret = devm_request_irq(pdata->dev, channel->dma_irq,
1043 channel->dma_irq_name, channel);
1046 channel->dma_irq);
1050 irq_set_affinity_hint(channel->dma_irq,
1051 &channel->affinity_mask);
1059 channel = pdata->channel[i];
1061 irq_set_affinity_hint(channel->dma_irq, NULL);
1062 devm_free_irq(pdata->dev, channel->dma_irq, channel);
1076 struct xgbe_channel *channel;
1091 channel = pdata->channel[i];
1093 irq_set_affinity_hint(channel->dma_irq, NULL);
1094 devm_free_irq(pdata->dev, channel->dma_irq, channel);
1137 ring = pdata->channel[i]->tx_ring;
1160 ring = pdata->channel[i]->rx_ring;
1265 /* Free the channel and ring structures */
1289 /* Allocate the channel and ring structures */
1379 struct xgbe_channel *channel;
1409 channel = pdata->channel[i];
1410 if (!channel->tx_ring)
1413 txq = netdev_get_tx_queue(netdev, channel->queue_index);
1950 struct xgbe_channel *channel;
1958 channel = pdata->channel[skb->queue_mapping];
1959 txq = netdev_get_tx_queue(netdev, channel->queue_index);
1960 ring = channel->tx_ring;
1977 ret = xgbe_maybe_stop_tx_queue(channel, ring, packet->rdesc_count);
1990 if (!desc_if->map_tx_skb(channel, skb)) {
2001 hw_if->dev_xmit(channel);
2007 xgbe_maybe_stop_tx_queue(channel, ring, XGBE_TX_MAX_DESCS);
2162 struct xgbe_channel *channel;
2169 channel = pdata->channel[i];
2170 xgbe_dma_isr(channel->dma_irq, channel);
2328 static void xgbe_rx_refresh(struct xgbe_channel *channel)
2330 struct xgbe_prv_data *pdata = channel->pdata;
2333 struct xgbe_ring *ring = channel->rx_ring;
2356 XGMAC_DMA_IOWRITE(channel, DMA_CH_RDTR_LO,
2424 static int xgbe_tx_poll(struct xgbe_channel *channel)
2426 struct xgbe_prv_data *pdata = channel->pdata;
2429 struct xgbe_ring *ring = channel->tx_ring;
2440 /* Nothing to do if there isn't a Tx ring for this channel */
2449 txq = netdev_get_tx_queue(netdev, channel->queue_index);
2495 static int xgbe_rx_poll(struct xgbe_channel *channel, int budget)
2497 struct xgbe_prv_data *pdata = channel->pdata;
2499 struct xgbe_ring *ring = channel->rx_ring;
2513 /* Nothing to do if there isn't a Rx ring for this channel */
2520 napi = (pdata->per_channel_irq) ? &channel->napi : &pdata->napi;
2543 xgbe_rx_refresh(channel);
2545 if (hw_if->dev_read(channel))
2673 skb_record_rx_queue(skb, channel->queue_index);
2697 struct xgbe_channel *channel = container_of(napi, struct xgbe_channel,
2699 struct xgbe_prv_data *pdata = channel->pdata;
2705 xgbe_tx_poll(channel);
2708 processed = xgbe_rx_poll(channel, budget);
2714 xgbe_enable_rx_tx_int(pdata, channel);
2716 enable_irq(channel->dma_irq);
2728 struct xgbe_channel *channel;
2741 channel = pdata->channel[i];
2744 xgbe_tx_poll(channel);
2749 processed += xgbe_rx_poll(channel, ring_budget);