Lines Matching refs:ring
151 #define BCM_RING_IS_VALID(ring) (((ring) != BCM_RING_NULL) && \ argument
152 ((ring)->self == (ring)))
155 #define BCM_RING_IS_VALID(ring) ((ring) != BCM_RING_NULL) argument
173 static INLINE void bcm_ring_init(bcm_ring_t *ring);
175 static INLINE bool bcm_ring_is_empty(bcm_ring_t *ring);
177 static INLINE int __bcm_ring_next_write(bcm_ring_t *ring, const int ring_size);
179 static INLINE bool __bcm_ring_full(bcm_ring_t *ring, int next_write);
180 static INLINE bool bcm_ring_is_full(bcm_ring_t *ring, const int ring_size);
182 static INLINE void bcm_ring_prod_done(bcm_ring_t *ring, int write);
183 static INLINE int bcm_ring_prod_pend(bcm_ring_t *ring, int *pend_write,
185 static INLINE int bcm_ring_prod(bcm_ring_t *ring, const int ring_size);
187 static INLINE void bcm_ring_cons_done(bcm_ring_t *ring, int read);
188 static INLINE int bcm_ring_cons_pend(bcm_ring_t *ring, int *pend_read,
190 static INLINE int bcm_ring_cons(bcm_ring_t *ring, const int ring_size);
195 static INLINE int bcm_ring_prod_avail(const bcm_ring_t *ring,
197 static INLINE int bcm_ring_cons_avail(const bcm_ring_t *ring,
199 static INLINE void bcm_ring_cons_all(bcm_ring_t *ring);
206 bcm_ring_init(bcm_ring_t *ring) in bcm_ring_init() argument
208 ASSERT(ring != (bcm_ring_t *)NULL); in bcm_ring_init()
210 ring->self = ring; in bcm_ring_init()
212 ring->write = 0; in bcm_ring_init()
213 ring->read = 0; in bcm_ring_init()
237 bcm_ring_is_empty(bcm_ring_t *ring) in bcm_ring_is_empty() argument
239 RING_ASSERT(BCM_RING_IS_VALID(ring)); in bcm_ring_is_empty()
240 return (ring->read == ring->write); in bcm_ring_is_empty()
252 __bcm_ring_next_write(bcm_ring_t *ring, const int ring_size) in __bcm_ring_next_write() argument
254 RING_ASSERT(BCM_RING_IS_VALID(ring) && BCM_RING_SIZE_IS_VALID(ring_size)); in __bcm_ring_next_write()
255 return ((ring->write + 1) % ring_size); in __bcm_ring_next_write()
266 __bcm_ring_full(bcm_ring_t *ring, int next_write) in __bcm_ring_full() argument
268 return (next_write == ring->read); in __bcm_ring_full()
279 bcm_ring_is_full(bcm_ring_t *ring, const int ring_size) in bcm_ring_is_full() argument
282 RING_ASSERT(BCM_RING_IS_VALID(ring) && BCM_RING_SIZE_IS_VALID(ring_size)); in bcm_ring_is_full()
283 next_write = __bcm_ring_next_write(ring, ring_size); in bcm_ring_is_full()
284 return __bcm_ring_full(ring, next_write); in bcm_ring_is_full()
295 bcm_ring_prod_done(bcm_ring_t *ring, int write) in bcm_ring_prod_done() argument
297 RING_ASSERT(BCM_RING_IS_VALID(ring)); in bcm_ring_prod_done()
298 ring->write = write; in bcm_ring_prod_done()
309 bcm_ring_prod_pend(bcm_ring_t *ring, int *pend_write, const int ring_size) in bcm_ring_prod_pend() argument
312 RING_ASSERT(BCM_RING_IS_VALID(ring) && BCM_RING_SIZE_IS_VALID(ring_size)); in bcm_ring_prod_pend()
313 *pend_write = __bcm_ring_next_write(ring, ring_size); in bcm_ring_prod_pend()
314 if (__bcm_ring_full(ring, *pend_write)) { in bcm_ring_prod_pend()
319 rtn = ring->write; in bcm_ring_prod_pend()
331 bcm_ring_prod(bcm_ring_t *ring, const int ring_size) in bcm_ring_prod() argument
334 RING_ASSERT(BCM_RING_IS_VALID(ring) && BCM_RING_SIZE_IS_VALID(ring_size)); in bcm_ring_prod()
336 next_write = __bcm_ring_next_write(ring, ring_size); in bcm_ring_prod()
337 if (__bcm_ring_full(ring, next_write)) { in bcm_ring_prod()
340 prod_write = ring->write; in bcm_ring_prod()
341 bcm_ring_prod_done(ring, next_write); /* "commit" production */ in bcm_ring_prod()
352 bcm_ring_cons_done(bcm_ring_t *ring, int read) in bcm_ring_cons_done() argument
354 RING_ASSERT(BCM_RING_IS_VALID(ring)); in bcm_ring_cons_done()
355 ring->read = read; in bcm_ring_cons_done()
366 bcm_ring_cons_pend(bcm_ring_t *ring, int *pend_read, const int ring_size) in bcm_ring_cons_pend() argument
369 RING_ASSERT(BCM_RING_IS_VALID(ring) && BCM_RING_SIZE_IS_VALID(ring_size)); in bcm_ring_cons_pend()
370 if (bcm_ring_is_empty(ring)) { in bcm_ring_cons_pend()
374 *pend_read = (ring->read + 1) % ring_size; in bcm_ring_cons_pend()
376 rtn = ring->read; in bcm_ring_cons_pend()
388 bcm_ring_cons(bcm_ring_t *ring, const int ring_size) in bcm_ring_cons() argument
391 RING_ASSERT(BCM_RING_IS_VALID(ring) && BCM_RING_SIZE_IS_VALID(ring_size)); in bcm_ring_cons()
392 if (bcm_ring_is_empty(ring)) { in bcm_ring_cons()
395 cons_read = ring->read; in bcm_ring_cons()
396 ring->read = (ring->read + 1) % ring_size; /* read is committed */ in bcm_ring_cons()
434 bcm_ring_prod_avail(const bcm_ring_t *ring, const int ring_size) in bcm_ring_prod_avail() argument
437 RING_ASSERT(BCM_RING_IS_VALID(ring) && BCM_RING_SIZE_IS_VALID(ring_size)); in bcm_ring_prod_avail()
438 if (ring->write >= ring->read) { in bcm_ring_prod_avail()
439 prod_avail = (ring_size - (ring->write - ring->read) - 1); in bcm_ring_prod_avail()
441 prod_avail = (ring->read - (ring->write + 1)); in bcm_ring_prod_avail()
453 bcm_ring_cons_avail(const bcm_ring_t *ring, const int ring_size) in bcm_ring_cons_avail() argument
456 RING_ASSERT(BCM_RING_IS_VALID(ring) && BCM_RING_SIZE_IS_VALID(ring_size)); in bcm_ring_cons_avail()
457 if (ring->read == ring->write) { in bcm_ring_cons_avail()
459 } else if (ring->read > ring->write) { in bcm_ring_cons_avail()
460 cons_avail = ((ring_size - ring->read) + ring->write); in bcm_ring_cons_avail()
462 cons_avail = ring->write - ring->read; in bcm_ring_cons_avail()
473 bcm_ring_cons_all(bcm_ring_t *ring) in bcm_ring_cons_all() argument
475 ring->read = ring->write; in bcm_ring_cons_all()
486 bcm_ring_t ring; /* Ring context abstraction */ member
510 #define WORKQ_RING(workq) (&((workq)->ring))
511 #define WORKQ_PEER_RING(workq) (&((workq)->peer->ring))