Lines Matching refs:q

11 void queue_init_with_spinlock(queue_t *q, uint element_size, uint element_count, uint spinlock_num)…  in queue_init_with_spinlock()  argument
12 lock_init(&q->core, spinlock_num); in queue_init_with_spinlock()
13 q->data = (uint8_t *)calloc(element_count + 1, element_size); in queue_init_with_spinlock()
14 q->element_count = (uint16_t)element_count; in queue_init_with_spinlock()
15 q->element_size = (uint16_t)element_size; in queue_init_with_spinlock()
16 q->wptr = 0; in queue_init_with_spinlock()
17 q->rptr = 0; in queue_init_with_spinlock()
20 void queue_free(queue_t *q) { in queue_free() argument
21 free(q->data); in queue_free()
24 static inline void *element_ptr(queue_t *q, uint index) { in element_ptr() argument
25 assert(index <= q->element_count); in element_ptr()
26 return q->data + index * q->element_size; in element_ptr()
29 static inline uint16_t inc_index(queue_t *q, uint16_t index) { in inc_index() argument
30 if (++index > q->element_count) { // > because we have element_count + 1 elements in inc_index()
35 uint16_t level = queue_get_level_unsafe(q); in inc_index()
36 if (level > q->max_level) { in inc_index()
37 q->max_level = level; in inc_index()
44 static bool queue_add_internal(queue_t *q, const void *data, bool block) { in queue_add_internal() argument
46 uint32_t save = spin_lock_blocking(q->core.spin_lock); in queue_add_internal()
47 if (queue_get_level_unsafe(q) != q->element_count) { in queue_add_internal()
48 memcpy(element_ptr(q, q->wptr), data, q->element_size); in queue_add_internal()
49 q->wptr = inc_index(q, q->wptr); in queue_add_internal()
50 lock_internal_spin_unlock_with_notify(&q->core, save); in queue_add_internal()
54 lock_internal_spin_unlock_with_wait(&q->core, save); in queue_add_internal()
56 spin_unlock(q->core.spin_lock, save); in queue_add_internal()
62 static bool queue_remove_internal(queue_t *q, void *data, bool block) { in queue_remove_internal() argument
64 uint32_t save = spin_lock_blocking(q->core.spin_lock); in queue_remove_internal()
65 if (queue_get_level_unsafe(q) != 0) { in queue_remove_internal()
67 memcpy(data, element_ptr(q, q->rptr), q->element_size); in queue_remove_internal()
69 q->rptr = inc_index(q, q->rptr); in queue_remove_internal()
70 lock_internal_spin_unlock_with_notify(&q->core, save); in queue_remove_internal()
74 lock_internal_spin_unlock_with_wait(&q->core, save); in queue_remove_internal()
76 spin_unlock(q->core.spin_lock, save); in queue_remove_internal()
82 static bool queue_peek_internal(queue_t *q, void *data, bool block) { in queue_peek_internal() argument
84 uint32_t save = spin_lock_blocking(q->core.spin_lock); in queue_peek_internal()
85 if (queue_get_level_unsafe(q) != 0) { in queue_peek_internal()
87 memcpy(data, element_ptr(q, q->rptr), q->element_size); in queue_peek_internal()
89 lock_internal_spin_unlock_with_notify(&q->core, save); in queue_peek_internal()
93 lock_internal_spin_unlock_with_wait(&q->core, save); in queue_peek_internal()
95 spin_unlock(q->core.spin_lock, save); in queue_peek_internal()
101 bool queue_try_add(queue_t *q, const void *data) { in queue_try_add() argument
102 return queue_add_internal(q, data, false); in queue_try_add()
105 bool queue_try_remove(queue_t *q, void *data) { in queue_try_remove() argument
106 return queue_remove_internal(q, data, false); in queue_try_remove()
109 bool queue_try_peek(queue_t *q, void *data) { in queue_try_peek() argument
110 return queue_peek_internal(q, data, false); in queue_try_peek()
113 void queue_add_blocking(queue_t *q, const void *data) { in queue_add_blocking() argument
114 queue_add_internal(q, data, true); in queue_add_blocking()
117 void queue_remove_blocking(queue_t *q, void *data) { in queue_remove_blocking() argument
118 queue_remove_internal(q, data, true); in queue_remove_blocking()
121 void queue_peek_blocking(queue_t *q, void *data) { in queue_peek_blocking() argument
122 queue_peek_internal(q, data, true); in queue_peek_blocking()