Lines Matching refs:ring
140 static unsigned int owl_emac_ring_num_unused(struct owl_emac_ring *ring)
142 return CIRC_SPACE(ring->head, ring->tail, ring->size);
145 static unsigned int owl_emac_ring_get_next(struct owl_emac_ring *ring,
148 return (cur + 1) & (ring->size - 1);
151 static void owl_emac_ring_push_head(struct owl_emac_ring *ring)
153 ring->head = owl_emac_ring_get_next(ring, ring->head);
156 static void owl_emac_ring_pop_tail(struct owl_emac_ring *ring)
158 ring->tail = owl_emac_ring_get_next(ring, ring->tail);
181 struct owl_emac_ring *ring = &priv->rx_ring;
189 for (i = 0; i < ring->size; i++) {
200 desc = &ring->descs[i];
206 ring->skbs[i] = skb;
207 ring->skbs_dma[i] = dma_addr;
212 ring->head = 0;
213 ring->tail = 0;
220 struct owl_emac_ring *ring = &priv->tx_ring;
224 for (i = 0; i < ring->size; i++) {
225 desc = &ring->descs[i];
235 memset(ring->skbs_dma, 0, sizeof(dma_addr_t) * ring->size);
237 ring->head = 0;
238 ring->tail = 0;
243 struct owl_emac_ring *ring = &priv->rx_ring;
246 for (i = 0; i < ring->size; i++) {
247 ring->descs[i].status = 0;
249 if (!ring->skbs_dma[i])
252 owl_emac_dma_unmap_rx(priv, ring->skbs[i], ring->skbs_dma[i]);
253 ring->skbs_dma[i] = 0;
255 dev_kfree_skb(ring->skbs[i]);
256 ring->skbs[i] = NULL;
262 struct owl_emac_ring *ring = &priv->tx_ring;
265 for (i = 0; i < ring->size; i++) {
266 ring->descs[i].status = 0;
268 if (!ring->skbs_dma[i])
271 owl_emac_dma_unmap_tx(priv, ring->skbs[i], ring->skbs_dma[i]);
272 ring->skbs_dma[i] = 0;
274 dev_kfree_skb(ring->skbs[i]);
275 ring->skbs[i] = NULL;
279 static int owl_emac_ring_alloc(struct device *dev, struct owl_emac_ring *ring,
282 ring->descs = dmam_alloc_coherent(dev,
284 &ring->descs_dma, GFP_KERNEL);
285 if (!ring->descs)
288 ring->skbs = devm_kcalloc(dev, size, sizeof(struct sk_buff *),
290 if (!ring->skbs)
293 ring->skbs_dma = devm_kcalloc(dev, size, sizeof(dma_addr_t),
295 if (!ring->skbs_dma)
298 ring->size = size;
492 struct owl_emac_ring *ring = &priv->tx_ring;
515 tx_head = ring->head;
516 desc = &ring->descs[tx_head];
523 !owl_emac_ring_num_unused(ring)) {
530 ring->skbs[tx_head] = skb;
531 ring->skbs_dma[tx_head] = dma_addr;
542 owl_emac_ring_push_head(ring);
570 struct owl_emac_ring *ring = &priv->tx_ring;
586 tx_head = ring->head;
587 desc = &ring->descs[tx_head];
593 if (!owl_emac_ring_num_unused(ring) ||
605 ring->skbs[tx_head] = skb;
606 ring->skbs_dma[tx_head] = dma_addr;
618 owl_emac_ring_push_head(ring);
633 struct owl_emac_ring *ring = &priv->tx_ring;
640 tx_tail = ring->tail;
641 desc = &ring->descs[tx_tail];
673 netdev->stats.tx_bytes += ring->skbs[tx_tail]->len;
680 skb = ring->skbs[tx_tail];
681 owl_emac_dma_unmap_tx(priv, skb, ring->skbs_dma[tx_tail]);
684 ring->skbs[tx_tail] = NULL;
685 ring->skbs_dma[tx_tail] = 0;
687 owl_emac_ring_pop_tail(ring);
697 struct owl_emac_ring *ring = &priv->tx_ring;
704 while (ring->tail != ring->head) {
721 if (unlikely(!owl_emac_ring_num_unused(ring))) {
722 tx_next = ring->tail;
724 while ((tx_next = owl_emac_ring_get_next(ring, tx_next)) != ring->head) {
725 status = READ_ONCE(ring->descs[tx_next].status);
733 status = READ_ONCE(ring->descs[ring->tail].status);
736 WRITE_ONCE(ring->descs[ring->tail].status, status);
748 struct owl_emac_ring *ring = &priv->rx_ring;
761 rx_tail = ring->tail;
762 desc = &ring->descs[rx_tail];
772 curr_skb = ring->skbs[rx_tail];
773 curr_dma = ring->skbs_dma[rx_tail];
774 owl_emac_ring_pop_tail(ring);
850 ring->skbs[ring->head] = new_skb;
851 ring->skbs_dma[ring->head] = new_dma;
857 owl_emac_ring_push_head(ring);