• Home
  • Raw
  • Download

Lines Matching refs:ring

26    struct util_ringbuffer *ring = CALLOC_STRUCT(util_ringbuffer);  in util_ringbuffer_create()  local
27 if (ring == NULL) in util_ringbuffer_create()
32 ring->buf = MALLOC( dwords * sizeof(unsigned) ); in util_ringbuffer_create()
33 if (ring->buf == NULL) in util_ringbuffer_create()
36 ring->mask = dwords - 1; in util_ringbuffer_create()
38 pipe_condvar_init(ring->change); in util_ringbuffer_create()
39 pipe_mutex_init(ring->mutex); in util_ringbuffer_create()
40 return ring; in util_ringbuffer_create()
43 FREE(ring->buf); in util_ringbuffer_create()
44 FREE(ring); in util_ringbuffer_create()
48 void util_ringbuffer_destroy( struct util_ringbuffer *ring ) in util_ringbuffer_destroy() argument
50 pipe_condvar_destroy(ring->change); in util_ringbuffer_destroy()
51 pipe_mutex_destroy(ring->mutex); in util_ringbuffer_destroy()
52 FREE(ring->buf); in util_ringbuffer_destroy()
53 FREE(ring); in util_ringbuffer_destroy()
59 static INLINE unsigned util_ringbuffer_space( const struct util_ringbuffer *ring ) in util_ringbuffer_space() argument
61 return (ring->tail - (ring->head + 1)) & ring->mask; in util_ringbuffer_space()
67 static INLINE boolean util_ringbuffer_empty( const struct util_ringbuffer *ring ) in util_ringbuffer_empty() argument
69 return util_ringbuffer_space(ring) == ring->mask; in util_ringbuffer_empty()
72 void util_ringbuffer_enqueue( struct util_ringbuffer *ring, in util_ringbuffer_enqueue() argument
79 pipe_mutex_lock(ring->mutex); in util_ringbuffer_enqueue()
83 assert(packet->dwords <= ring->mask); in util_ringbuffer_enqueue()
87 while (util_ringbuffer_space(ring) < packet->dwords) in util_ringbuffer_enqueue()
88 pipe_condvar_wait(ring->change, ring->mutex); in util_ringbuffer_enqueue()
98 ring->buf[ring->head] = packet[i]; in util_ringbuffer_enqueue()
99 ring->head++; in util_ringbuffer_enqueue()
100 ring->head &= ring->mask; in util_ringbuffer_enqueue()
105 pipe_condvar_signal(ring->change); in util_ringbuffer_enqueue()
106 pipe_mutex_unlock(ring->mutex); in util_ringbuffer_enqueue()
109 enum pipe_error util_ringbuffer_dequeue( struct util_ringbuffer *ring, in util_ringbuffer_dequeue() argument
120 pipe_mutex_lock(ring->mutex); in util_ringbuffer_dequeue()
125 while (util_ringbuffer_empty(ring)) in util_ringbuffer_dequeue()
126 pipe_condvar_wait(ring->change, ring->mutex); in util_ringbuffer_dequeue()
129 if (util_ringbuffer_empty(ring)) { in util_ringbuffer_dequeue()
135 ring_packet = &ring->buf[ring->tail]; in util_ringbuffer_dequeue()
139 if (ring_packet->dwords > ring->mask + 1 - util_ringbuffer_space(ring) || in util_ringbuffer_dequeue()
149 packet[i] = ring->buf[ring->tail]; in util_ringbuffer_dequeue()
150 ring->tail++; in util_ringbuffer_dequeue()
151 ring->tail &= ring->mask; in util_ringbuffer_dequeue()
157 pipe_condvar_signal(ring->change); in util_ringbuffer_dequeue()
158 pipe_mutex_unlock(ring->mutex); in util_ringbuffer_dequeue()