Lines Matching refs:ring

119 #define BCM_RING_IS_VALID(ring)             (((ring) != BCM_RING_NULL) && \  argument
120 ((ring)->self == (ring)))
123 #define BCM_RING_IS_VALID(ring) ((ring) != BCM_RING_NULL) argument
141 static INLINE void bcm_ring_init(bcm_ring_t *ring);
143 static INLINE bool bcm_ring_is_empty(const bcm_ring_t *ring);
145 static INLINE int __bcm_ring_next_write(const bcm_ring_t *ring, const int ring_size);
147 static INLINE bool __bcm_ring_full(const bcm_ring_t *ring, int next_write);
148 static INLINE bool bcm_ring_is_full(bcm_ring_t *ring, const int ring_size);
150 static INLINE void bcm_ring_prod_done(bcm_ring_t *ring, int write);
151 static INLINE int bcm_ring_prod_pend(const bcm_ring_t *ring, int *pend_write,
153 static INLINE int bcm_ring_prod(bcm_ring_t *ring, const int ring_size);
155 static INLINE void bcm_ring_cons_done(bcm_ring_t *ring, int read);
156 static INLINE int bcm_ring_cons_pend(const bcm_ring_t *ring, int *pend_read,
158 static INLINE int bcm_ring_cons(bcm_ring_t *ring, const int ring_size);
163 static INLINE int bcm_ring_prod_avail(const bcm_ring_t *ring,
165 static INLINE int bcm_ring_cons_avail(const bcm_ring_t *ring,
167 static INLINE void bcm_ring_cons_all(bcm_ring_t *ring);
174 bcm_ring_init(bcm_ring_t *ring) in bcm_ring_init() argument
176 ASSERT(ring != (bcm_ring_t *)NULL); in bcm_ring_init()
178 ring->self = ring; in bcm_ring_init()
180 ring->write = 0; in bcm_ring_init()
181 ring->read = 0; in bcm_ring_init()
205 bcm_ring_is_empty(const bcm_ring_t *ring) in bcm_ring_is_empty() argument
207 RING_ASSERT(BCM_RING_IS_VALID(ring)); in bcm_ring_is_empty()
208 return (ring->read == ring->write); in bcm_ring_is_empty()
220 __bcm_ring_next_write(const bcm_ring_t *ring, const int ring_size) in __bcm_ring_next_write() argument
222 RING_ASSERT(BCM_RING_IS_VALID(ring) && BCM_RING_SIZE_IS_VALID(ring_size)); in __bcm_ring_next_write()
223 return ((ring->write + 1) % ring_size); in __bcm_ring_next_write()
234 __bcm_ring_full(const bcm_ring_t *ring, int next_write) in __bcm_ring_full() argument
236 return (next_write == ring->read); in __bcm_ring_full()
247 bcm_ring_is_full(bcm_ring_t *ring, const int ring_size) in bcm_ring_is_full() argument
250 RING_ASSERT(BCM_RING_IS_VALID(ring) && BCM_RING_SIZE_IS_VALID(ring_size)); in bcm_ring_is_full()
251 next_write = __bcm_ring_next_write(ring, ring_size); in bcm_ring_is_full()
252 return __bcm_ring_full(ring, next_write); in bcm_ring_is_full()
263 bcm_ring_prod_done(bcm_ring_t *ring, int write) in bcm_ring_prod_done() argument
265 RING_ASSERT(BCM_RING_IS_VALID(ring)); in bcm_ring_prod_done()
266 ring->write = write; in bcm_ring_prod_done()
277 bcm_ring_prod_pend(const bcm_ring_t *ring, int *pend_write, const int ring_size) in bcm_ring_prod_pend() argument
280 RING_ASSERT(BCM_RING_IS_VALID(ring) && BCM_RING_SIZE_IS_VALID(ring_size)); in bcm_ring_prod_pend()
281 *pend_write = __bcm_ring_next_write(ring, ring_size); in bcm_ring_prod_pend()
282 if (__bcm_ring_full(ring, *pend_write)) { in bcm_ring_prod_pend()
287 rtn = ring->write; in bcm_ring_prod_pend()
299 bcm_ring_prod(bcm_ring_t *ring, const int ring_size) in bcm_ring_prod() argument
302 RING_ASSERT(BCM_RING_IS_VALID(ring) && BCM_RING_SIZE_IS_VALID(ring_size)); in bcm_ring_prod()
304 next_write = __bcm_ring_next_write(ring, ring_size); in bcm_ring_prod()
305 if (__bcm_ring_full(ring, next_write)) { in bcm_ring_prod()
308 prod_write = ring->write; in bcm_ring_prod()
309 bcm_ring_prod_done(ring, next_write); /* "commit" production */ in bcm_ring_prod()
320 bcm_ring_cons_done(bcm_ring_t *ring, int read) in bcm_ring_cons_done() argument
322 RING_ASSERT(BCM_RING_IS_VALID(ring)); in bcm_ring_cons_done()
323 ring->read = read; in bcm_ring_cons_done()
334 bcm_ring_cons_pend(const bcm_ring_t *ring, int *pend_read, const int ring_size) in bcm_ring_cons_pend() argument
337 RING_ASSERT(BCM_RING_IS_VALID(ring) && BCM_RING_SIZE_IS_VALID(ring_size)); in bcm_ring_cons_pend()
338 if (bcm_ring_is_empty(ring)) { in bcm_ring_cons_pend()
342 *pend_read = (ring->read + 1) % ring_size; in bcm_ring_cons_pend()
344 rtn = ring->read; in bcm_ring_cons_pend()
356 bcm_ring_cons(bcm_ring_t *ring, const int ring_size) in bcm_ring_cons() argument
359 RING_ASSERT(BCM_RING_IS_VALID(ring) && BCM_RING_SIZE_IS_VALID(ring_size)); in bcm_ring_cons()
360 if (bcm_ring_is_empty(ring)) { in bcm_ring_cons()
363 cons_read = ring->read; in bcm_ring_cons()
364 ring->read = (ring->read + 1) % ring_size; /* read is committed */ in bcm_ring_cons()
402 bcm_ring_prod_avail(const bcm_ring_t *ring, const int ring_size) in bcm_ring_prod_avail() argument
405 RING_ASSERT(BCM_RING_IS_VALID(ring) && BCM_RING_SIZE_IS_VALID(ring_size)); in bcm_ring_prod_avail()
406 if (ring->write >= ring->read) { in bcm_ring_prod_avail()
407 prod_avail = (ring_size - (ring->write - ring->read) - 1); in bcm_ring_prod_avail()
409 prod_avail = (ring->read - (ring->write + 1)); in bcm_ring_prod_avail()
421 bcm_ring_cons_avail(const bcm_ring_t *ring, const int ring_size) in bcm_ring_cons_avail() argument
424 RING_ASSERT(BCM_RING_IS_VALID(ring) && BCM_RING_SIZE_IS_VALID(ring_size)); in bcm_ring_cons_avail()
425 if (ring->read == ring->write) { in bcm_ring_cons_avail()
427 } else if (ring->read > ring->write) { in bcm_ring_cons_avail()
428 cons_avail = ((ring_size - ring->read) + ring->write); in bcm_ring_cons_avail()
430 cons_avail = ring->write - ring->read; in bcm_ring_cons_avail()
441 bcm_ring_cons_all(bcm_ring_t *ring) in bcm_ring_cons_all() argument
443 ring->read = ring->write; in bcm_ring_cons_all()
454 bcm_ring_t ring; /* Ring context abstraction */ member
478 #define WORKQ_RING(workq) (&((workq)->ring))
479 #define WORKQ_PEER_RING(workq) (&((workq)->peer->ring))