Lines Matching refs:ring

79 	dma_index = readl(&pdev->adma_regs->ep_traddr) - pep->ring.dma;
102 u32 offset = (char *)trb - (char *)pep->ring.trbs;
104 return pep->ring.dma + offset;
110 struct cdns2_ring *ring = &pep->ring;
112 if (pep->ring.trbs) {
113 dma_pool_free(pdev->eps_dma_pool, ring->trbs, ring->dma);
114 memset(ring, 0, sizeof(*ring));
123 struct cdns2_ring *ring;
125 ring = &pep->ring;
127 if (!ring->trbs) {
128 ring->trbs = dma_pool_alloc(pdev->eps_dma_pool,
130 &ring->dma);
131 if (!ring->trbs)
135 memset(ring->trbs, 0, TR_SEG_SIZE);
141 link_trb = (ring->trbs + (TRBS_PER_SEGMENT - 1));
142 link_trb->buffer = cpu_to_le32(TRB_BUFFER(ring->dma));
185 static void cdns2_ep_inc_enq(struct cdns2_ring *ring)
187 ring->free_trbs--;
188 cdns2_ep_inc_trb(&ring->enqueue, &ring->pcs, TRBS_PER_SEGMENT);
191 static void cdns2_ep_inc_deq(struct cdns2_ring *ring)
193 ring->free_trbs++;
194 cdns2_ep_inc_trb(&ring->dequeue, &ring->ccs, TRBS_PER_SEGMENT);
230 if (trb == (pep->ring.trbs + (TRBS_PER_SEGMENT - 1)))
231 return pep->ring.trbs;
291 pep->wa1_cycle_bit = pep->ring.pcs ? TRB_CYCLE : 0;
294 pep->wa1_trb_index = pep->ring.enqueue;
321 struct cdns2_ring *ring;
324 ring = &pep->ring;
326 if (num_trbs > ring->free_trbs) {
332 if ((ring->enqueue + num_trbs) >= (TRBS_PER_SEGMENT - 1)) {
343 link_trb = ring->trbs + (TRBS_PER_SEGMENT - 1);
356 link_trb->control = cpu_to_le32(((ring->pcs) ? TRB_CYCLE : 0) |
366 struct cdns2_trb *link_trb = pep->ring.trbs + (TRBS_PER_SEGMENT - 1);
374 trb = pep->ring.trbs;
574 if (pep->ring.pcs == 0)
577 control |= pep->ring.pcs;
586 trb = pep->ring.trbs + pep->ring.enqueue;
607 preq->end_trb = pep->ring.enqueue;
609 cdns2_ep_inc_enq(&pep->ring);
619 struct cdns2_ring *ring;
635 ring = &pep->ring;
638 control = TRB_TYPE(TRB_NORMAL) | ring->pcs | TRB_ISP;
639 trb = pep->ring.trbs + ring->enqueue;
642 preq->end_trb = ring->enqueue;
643 control = ring->pcs | TRB_TYPE(TRB_LINK) | TRB_CHAIN
645 cdns2_ep_inc_enq(&pep->ring);
647 if (ring->enqueue == 0)
651 trb->buffer = cpu_to_le32(pep->ring.dma +
652 (ring->enqueue * TRB_SIZE));
683 preq->end_trb = ring->enqueue;
684 cdns2_ep_inc_enq(&pep->ring);
723 writel(pep->ring.dma + pep->ring.dequeue,
732 buffer = pep->ring.dma + pep->ring.dequeue * TRB_SIZE;
735 trb = &pep->ring.trbs[TRBS_PER_SEGMENT];
742 * move to correct place in transfer ring.
750 if (hw_ccs != pep->ring.ccs)
754 writel(pep->ring.dma + (TRBS_PER_SEGMENT * TRB_SIZE),
765 struct cdns2_ring *ring;
782 ring = &pep->ring;
783 preq->start_trb = ring->enqueue;
784 preq->trb = ring->trbs + ring->enqueue;
789 togle_pcs = cdns2_wa1_update_guard(pep, ring->trbs + ring->enqueue);
849 * SR - start ring
850 * ER - end ring
851 * DQ = ring->dequeue - dequeue position
852 * EQ = ring->enqueue - enqueue position
853 * ST = preq->start_trb - index of first TRB in transfer ring
854 * ET = preq->end_trb - index of last TRB in transfer ring
862 * 1. ring->dequeue never equals to current_index.
863 * 2 ring->enqueue never exceed ring->dequeue
864 * 3. exception: ring->enqueue == ring->dequeue
865 * and ring->free_trbs is zero.
869 * Case 1 - ring->dequeue < current_index
873 * Case 2 - ring->dequeue > current_index
875 * transfer ring.
882 struct cdns2_ring *ring;
888 ring = &pep->ring;
902 if (ring->dequeue > preq->end_trb)
905 if (ring->dequeue < preq->start_trb)
909 if (preq->start_trb > preq->end_trb && ring->dequeue > preq->end_trb &&
910 ring->dequeue < preq->start_trb)
913 if (preq->start_trb == preq->end_trb && ring->dequeue != preq->end_trb)
916 trb = &ring->trbs[ring->dequeue];
918 if ((le32_to_cpu(trb->control) & TRB_CYCLE) != ring->ccs)
921 if (doorbell == 1 && current_index == ring->dequeue)
930 if (ring->enqueue == ring->dequeue &&
931 ring->free_trbs == 0) {
933 } else if (ring->dequeue < current_index) {
935 !ring->dequeue)
939 } else if (ring->dequeue > current_index) {
956 trb = pep->ring.trbs + pep->ring.dequeue;
961 cdns2_ep_inc_deq(&pep->ring);
980 trb = pep->ring.trbs + pep->ring.dequeue;
989 cdns2_ep_inc_deq(&pep->ring);
990 trb = pep->ring.trbs + pep->ring.dequeue;
1005 trb = pep->ring.trbs + pep->ring.dequeue;
1018 cdns2_ep_inc_deq(&pep->ring);
1594 pep->ring.enqueue = 0;
1595 pep->ring.dequeue = 0;
1597 pep->ring.pcs = !!DMA_EP_STS_CCS(reg);
1598 pep->ring.ccs = !!DMA_EP_STS_CCS(reg);
1600 writel(pep->ring.dma, &pdev->adma_regs->ep_traddr);
1603 pep->ring.free_trbs = TRBS_PER_SEGMENT - 1;
1785 /* Update ring only if removed request is on pending_req_list list. */
1794 buffer = cpu_to_le32(TRB_BUFFER(pep->ring.dma +