Lines Matching refs:ring
91 static u16 xgene_enet_dst_ring_num(struct xgene_enet_desc_ring *ring) in xgene_enet_dst_ring_num() argument
93 struct xgene_enet_pdata *pdata = netdev_priv(ring->ndev); in xgene_enet_dst_ring_num()
95 return ((u16)pdata->rm << 10) | ring->num; in xgene_enet_dst_ring_num()
105 static u32 xgene_enet_ring_len(struct xgene_enet_desc_ring *ring) in xgene_enet_ring_len() argument
107 u32 __iomem *cmd_base = ring->cmd_base; in xgene_enet_ring_len()
362 static int xgene_enet_process_ring(struct xgene_enet_desc_ring *ring, in xgene_enet_process_ring() argument
365 struct xgene_enet_pdata *pdata = netdev_priv(ring->ndev); in xgene_enet_process_ring()
367 u16 head = ring->head; in xgene_enet_process_ring()
368 u16 slots = ring->slots - 1; in xgene_enet_process_ring()
372 raw_desc = &ring->raw_desc[head]; in xgene_enet_process_ring()
379 ret = xgene_enet_rx_frame(ring, raw_desc); in xgene_enet_process_ring()
381 ret = xgene_enet_tx_completion(ring, raw_desc); in xgene_enet_process_ring()
392 iowrite32(-count, ring->cmd); in xgene_enet_process_ring()
393 ring->head = head; in xgene_enet_process_ring()
395 if (netif_queue_stopped(ring->ndev)) { in xgene_enet_process_ring()
396 if (xgene_enet_ring_len(ring) < pdata->cp_qcnt_low) in xgene_enet_process_ring()
397 netif_wake_queue(ring->ndev); in xgene_enet_process_ring()
406 struct xgene_enet_desc_ring *ring; in xgene_enet_napi() local
409 ring = container_of(napi, struct xgene_enet_desc_ring, napi); in xgene_enet_napi()
410 processed = xgene_enet_process_ring(ring, budget); in xgene_enet_napi()
414 enable_irq(ring->irq); in xgene_enet_napi()
431 struct xgene_enet_desc_ring *ring; in xgene_enet_register_irq() local
434 ring = pdata->rx_ring; in xgene_enet_register_irq()
435 ret = devm_request_irq(dev, ring->irq, xgene_enet_rx_irq, in xgene_enet_register_irq()
436 IRQF_SHARED, ring->irq_name, ring); in xgene_enet_register_irq()
438 netdev_err(ndev, "Failed to request irq %s\n", ring->irq_name); in xgene_enet_register_irq()
441 ring = pdata->tx_ring->cp_ring; in xgene_enet_register_irq()
442 ret = devm_request_irq(dev, ring->irq, xgene_enet_rx_irq, in xgene_enet_register_irq()
443 IRQF_SHARED, ring->irq_name, ring); in xgene_enet_register_irq()
446 ring->irq_name); in xgene_enet_register_irq()
540 static void xgene_enet_delete_ring(struct xgene_enet_desc_ring *ring) in xgene_enet_delete_ring() argument
545 pdata = netdev_priv(ring->ndev); in xgene_enet_delete_ring()
546 dev = ndev_to_dev(ring->ndev); in xgene_enet_delete_ring()
548 xgene_enet_clear_ring(ring); in xgene_enet_delete_ring()
549 dma_free_coherent(dev, ring->size, ring->desc_addr, ring->dma); in xgene_enet_delete_ring()
599 static void xgene_enet_free_desc_ring(struct xgene_enet_desc_ring *ring) in xgene_enet_free_desc_ring() argument
603 if (!ring) in xgene_enet_free_desc_ring()
606 dev = ndev_to_dev(ring->ndev); in xgene_enet_free_desc_ring()
608 if (ring->desc_addr) { in xgene_enet_free_desc_ring()
609 xgene_enet_clear_ring(ring); in xgene_enet_free_desc_ring()
610 dma_free_coherent(dev, ring->size, ring->desc_addr, ring->dma); in xgene_enet_free_desc_ring()
612 devm_kfree(dev, ring); in xgene_enet_free_desc_ring()
618 struct xgene_enet_desc_ring *ring; in xgene_enet_free_desc_rings() local
620 ring = pdata->tx_ring; in xgene_enet_free_desc_rings()
621 if (ring) { in xgene_enet_free_desc_rings()
622 if (ring->cp_ring && ring->cp_ring->cp_skb) in xgene_enet_free_desc_rings()
623 devm_kfree(dev, ring->cp_ring->cp_skb); in xgene_enet_free_desc_rings()
624 if (ring->cp_ring && pdata->cq_cnt) in xgene_enet_free_desc_rings()
625 xgene_enet_free_desc_ring(ring->cp_ring); in xgene_enet_free_desc_rings()
626 xgene_enet_free_desc_ring(ring); in xgene_enet_free_desc_rings()
629 ring = pdata->rx_ring; in xgene_enet_free_desc_rings()
630 if (ring) { in xgene_enet_free_desc_rings()
631 if (ring->buf_pool) { in xgene_enet_free_desc_rings()
632 if (ring->buf_pool->rx_skb) in xgene_enet_free_desc_rings()
633 devm_kfree(dev, ring->buf_pool->rx_skb); in xgene_enet_free_desc_rings()
634 xgene_enet_free_desc_ring(ring->buf_pool); in xgene_enet_free_desc_rings()
636 xgene_enet_free_desc_ring(ring); in xgene_enet_free_desc_rings()
644 struct xgene_enet_desc_ring *ring; in xgene_enet_create_desc_ring() local
653 ring = devm_kzalloc(dev, sizeof(struct xgene_enet_desc_ring), in xgene_enet_create_desc_ring()
655 if (!ring) in xgene_enet_create_desc_ring()
658 ring->ndev = ndev; in xgene_enet_create_desc_ring()
659 ring->num = ring_num; in xgene_enet_create_desc_ring()
660 ring->cfgsize = cfgsize; in xgene_enet_create_desc_ring()
661 ring->id = ring_id; in xgene_enet_create_desc_ring()
663 ring->desc_addr = dma_zalloc_coherent(dev, size, &ring->dma, in xgene_enet_create_desc_ring()
665 if (!ring->desc_addr) { in xgene_enet_create_desc_ring()
666 devm_kfree(dev, ring); in xgene_enet_create_desc_ring()
669 ring->size = size; in xgene_enet_create_desc_ring()
671 ring->cmd_base = pdata->ring_cmd_addr + (ring->num << 6); in xgene_enet_create_desc_ring()
672 ring->cmd = ring->cmd_base + INC_DEC_CMD_ADDR; in xgene_enet_create_desc_ring()
673 ring = xgene_enet_setup_ring(ring); in xgene_enet_create_desc_ring()
675 ring->num, ring->size, ring->id, ring->slots); in xgene_enet_create_desc_ring()
677 return ring; in xgene_enet_create_desc_ring()