Lines Matching refs:ring

96 static u16 xgene_enet_dst_ring_num(struct xgene_enet_desc_ring *ring)  in xgene_enet_dst_ring_num()  argument
98 struct xgene_enet_pdata *pdata = netdev_priv(ring->ndev); in xgene_enet_dst_ring_num()
100 return ((u16)pdata->rm << 10) | ring->num; in xgene_enet_dst_ring_num()
272 static __le64 *xgene_enet_get_exp_bufs(struct xgene_enet_desc_ring *ring) in xgene_enet_get_exp_bufs() argument
276 exp_bufs = &ring->exp_bufs[ring->exp_buf_tail * MAX_EXP_BUFFS]; in xgene_enet_get_exp_bufs()
278 ring->exp_buf_tail = (ring->exp_buf_tail + 1) & ((ring->slots / 2) - 1); in xgene_enet_get_exp_bufs()
283 static dma_addr_t *xgene_get_frag_dma_array(struct xgene_enet_desc_ring *ring) in xgene_get_frag_dma_array() argument
285 return &ring->cp_ring->frag_dma_addr[ring->tail * MAX_SKB_FRAGS]; in xgene_get_frag_dma_array()
536 static int xgene_enet_process_ring(struct xgene_enet_desc_ring *ring, in xgene_enet_process_ring() argument
539 struct xgene_enet_pdata *pdata = netdev_priv(ring->ndev); in xgene_enet_process_ring()
541 u16 head = ring->head; in xgene_enet_process_ring()
542 u16 slots = ring->slots - 1; in xgene_enet_process_ring()
547 raw_desc = &ring->raw_desc[head]; in xgene_enet_process_ring()
558 exp_desc = &ring->raw_desc[head]; in xgene_enet_process_ring()
569 ret = xgene_enet_rx_frame(ring, raw_desc); in xgene_enet_process_ring()
571 ret = xgene_enet_tx_completion(ring, raw_desc); in xgene_enet_process_ring()
590 pdata->ring_ops->wr_cmd(ring, -count); in xgene_enet_process_ring()
591 ring->head = head; in xgene_enet_process_ring()
593 if (netif_queue_stopped(ring->ndev)) in xgene_enet_process_ring()
594 netif_start_queue(ring->ndev); in xgene_enet_process_ring()
602 struct xgene_enet_desc_ring *ring; in xgene_enet_napi() local
605 ring = container_of(napi, struct xgene_enet_desc_ring, napi); in xgene_enet_napi()
606 processed = xgene_enet_process_ring(ring, budget); in xgene_enet_napi()
610 enable_irq(ring->irq); in xgene_enet_napi()
627 struct xgene_enet_desc_ring *ring; in xgene_enet_register_irq() local
630 ring = pdata->rx_ring; in xgene_enet_register_irq()
631 ret = devm_request_irq(dev, ring->irq, xgene_enet_rx_irq, in xgene_enet_register_irq()
632 IRQF_SHARED, ring->irq_name, ring); in xgene_enet_register_irq()
634 netdev_err(ndev, "Failed to request irq %s\n", ring->irq_name); in xgene_enet_register_irq()
637 ring = pdata->tx_ring->cp_ring; in xgene_enet_register_irq()
638 ret = devm_request_irq(dev, ring->irq, xgene_enet_rx_irq, in xgene_enet_register_irq()
639 IRQF_SHARED, ring->irq_name, ring); in xgene_enet_register_irq()
642 ring->irq_name); in xgene_enet_register_irq()
736 static void xgene_enet_delete_ring(struct xgene_enet_desc_ring *ring) in xgene_enet_delete_ring() argument
741 pdata = netdev_priv(ring->ndev); in xgene_enet_delete_ring()
742 dev = ndev_to_dev(ring->ndev); in xgene_enet_delete_ring()
744 pdata->ring_ops->clear(ring); in xgene_enet_delete_ring()
745 dma_free_coherent(dev, ring->size, ring->desc_addr, ring->dma); in xgene_enet_delete_ring()
795 static void xgene_enet_free_desc_ring(struct xgene_enet_desc_ring *ring) in xgene_enet_free_desc_ring() argument
800 if (!ring) in xgene_enet_free_desc_ring()
803 dev = ndev_to_dev(ring->ndev); in xgene_enet_free_desc_ring()
804 pdata = netdev_priv(ring->ndev); in xgene_enet_free_desc_ring()
806 if (ring->desc_addr) { in xgene_enet_free_desc_ring()
807 pdata->ring_ops->clear(ring); in xgene_enet_free_desc_ring()
808 dma_free_coherent(dev, ring->size, ring->desc_addr, ring->dma); in xgene_enet_free_desc_ring()
810 devm_kfree(dev, ring); in xgene_enet_free_desc_ring()
816 struct xgene_enet_desc_ring *ring; in xgene_enet_free_desc_rings() local
818 ring = pdata->tx_ring; in xgene_enet_free_desc_rings()
819 if (ring) { in xgene_enet_free_desc_rings()
820 if (ring->cp_ring && ring->cp_ring->cp_skb) in xgene_enet_free_desc_rings()
821 devm_kfree(dev, ring->cp_ring->cp_skb); in xgene_enet_free_desc_rings()
822 if (ring->cp_ring && pdata->cq_cnt) in xgene_enet_free_desc_rings()
823 xgene_enet_free_desc_ring(ring->cp_ring); in xgene_enet_free_desc_rings()
824 xgene_enet_free_desc_ring(ring); in xgene_enet_free_desc_rings()
827 ring = pdata->rx_ring; in xgene_enet_free_desc_rings()
828 if (ring) { in xgene_enet_free_desc_rings()
829 if (ring->buf_pool) { in xgene_enet_free_desc_rings()
830 if (ring->buf_pool->rx_skb) in xgene_enet_free_desc_rings()
831 devm_kfree(dev, ring->buf_pool->rx_skb); in xgene_enet_free_desc_rings()
832 xgene_enet_free_desc_ring(ring->buf_pool); in xgene_enet_free_desc_rings()
834 xgene_enet_free_desc_ring(ring); in xgene_enet_free_desc_rings()
839 struct xgene_enet_desc_ring *ring) in is_irq_mbox_required() argument
842 (xgene_enet_ring_owner(ring->id) == RING_OWNER_CPU)) { in is_irq_mbox_required()
850 struct xgene_enet_desc_ring *ring) in xgene_enet_ring_cmd_base() argument
854 return pdata->ring_cmd_addr + (ring->num << num_ring_id_shift); in xgene_enet_ring_cmd_base()
861 struct xgene_enet_desc_ring *ring; in xgene_enet_create_desc_ring() local
870 ring = devm_kzalloc(dev, sizeof(struct xgene_enet_desc_ring), in xgene_enet_create_desc_ring()
872 if (!ring) in xgene_enet_create_desc_ring()
875 ring->ndev = ndev; in xgene_enet_create_desc_ring()
876 ring->num = ring_num; in xgene_enet_create_desc_ring()
877 ring->cfgsize = cfgsize; in xgene_enet_create_desc_ring()
878 ring->id = ring_id; in xgene_enet_create_desc_ring()
880 ring->desc_addr = dma_zalloc_coherent(dev, size, &ring->dma, in xgene_enet_create_desc_ring()
882 if (!ring->desc_addr) { in xgene_enet_create_desc_ring()
883 devm_kfree(dev, ring); in xgene_enet_create_desc_ring()
886 ring->size = size; in xgene_enet_create_desc_ring()
888 if (is_irq_mbox_required(pdata, ring)) { in xgene_enet_create_desc_ring()
889 ring->irq_mbox_addr = dma_zalloc_coherent(dev, INTR_MBOX_SIZE, in xgene_enet_create_desc_ring()
890 &ring->irq_mbox_dma, GFP_KERNEL); in xgene_enet_create_desc_ring()
891 if (!ring->irq_mbox_addr) { in xgene_enet_create_desc_ring()
892 dma_free_coherent(dev, size, ring->desc_addr, in xgene_enet_create_desc_ring()
893 ring->dma); in xgene_enet_create_desc_ring()
894 devm_kfree(dev, ring); in xgene_enet_create_desc_ring()
899 ring->cmd_base = xgene_enet_ring_cmd_base(pdata, ring); in xgene_enet_create_desc_ring()
900 ring->cmd = ring->cmd_base + INC_DEC_CMD_ADDR; in xgene_enet_create_desc_ring()
901 ring = pdata->ring_ops->setup(ring); in xgene_enet_create_desc_ring()
903 ring->num, ring->size, ring->id, ring->slots); in xgene_enet_create_desc_ring()
905 return ring; in xgene_enet_create_desc_ring()