Lines Matching refs:queue
41 int vchiu_queue_init(VCHIU_QUEUE_T *queue, int size) in vchiu_queue_init() argument
45 queue->size = size; in vchiu_queue_init()
46 queue->read = 0; in vchiu_queue_init()
47 queue->write = 0; in vchiu_queue_init()
48 queue->initialized = 1; in vchiu_queue_init()
50 _sema_init(&queue->pop, 0); in vchiu_queue_init()
51 _sema_init(&queue->push, 0); in vchiu_queue_init()
53 queue->storage = kzalloc(size * sizeof(VCHIQ_HEADER_T *), GFP_KERNEL); in vchiu_queue_init()
54 if (queue->storage == NULL) { in vchiu_queue_init()
55 vchiu_queue_delete(queue); in vchiu_queue_init()
61 void vchiu_queue_delete(VCHIU_QUEUE_T *queue) in vchiu_queue_delete() argument
63 if (queue->storage != NULL) in vchiu_queue_delete()
64 kfree(queue->storage); in vchiu_queue_delete()
67 int vchiu_queue_is_empty(VCHIU_QUEUE_T *queue) in vchiu_queue_is_empty() argument
69 return queue->read == queue->write; in vchiu_queue_is_empty()
72 int vchiu_queue_is_full(VCHIU_QUEUE_T *queue) in vchiu_queue_is_full() argument
74 return queue->write == queue->read + queue->size; in vchiu_queue_is_full()
77 void vchiu_queue_push(VCHIU_QUEUE_T *queue, VCHIQ_HEADER_T *header) in vchiu_queue_push() argument
79 if (!queue->initialized) in vchiu_queue_push()
82 while (queue->write == queue->read + queue->size) { in vchiu_queue_push()
83 if (down_interruptible(&queue->pop) != 0) { in vchiu_queue_push()
94 queue->storage[queue->write & (queue->size - 1)] = header; in vchiu_queue_push()
102 queue->write++; in vchiu_queue_push()
104 up(&queue->push); in vchiu_queue_push()
107 VCHIQ_HEADER_T *vchiu_queue_peek(VCHIU_QUEUE_T *queue) in vchiu_queue_peek() argument
109 while (queue->write == queue->read) { in vchiu_queue_peek()
110 if (down_interruptible(&queue->push) != 0) { in vchiu_queue_peek()
115 up(&queue->push); // We haven't removed anything from the queue. in vchiu_queue_peek()
123 return queue->storage[queue->read & (queue->size - 1)]; in vchiu_queue_peek()
126 VCHIQ_HEADER_T *vchiu_queue_pop(VCHIU_QUEUE_T *queue) in vchiu_queue_pop() argument
130 while (queue->write == queue->read) { in vchiu_queue_pop()
131 if (down_interruptible(&queue->push) != 0) { in vchiu_queue_pop()
142 header = queue->storage[queue->read & (queue->size - 1)]; in vchiu_queue_pop()
150 queue->read++; in vchiu_queue_pop()
152 up(&queue->pop); in vchiu_queue_pop()