Lines Matching refs:rbb

26 void rt_rbb_init(rt_rbb_t rbb, rt_uint8_t *buf, rt_size_t buf_size, rt_rbb_blk_t block_set, rt_size…  in rt_rbb_init()  argument
30 RT_ASSERT(rbb); in rt_rbb_init()
34 rbb->buf = buf; in rt_rbb_init()
35 rbb->buf_size = buf_size; in rt_rbb_init()
36 rbb->blk_set = block_set; in rt_rbb_init()
37 rbb->blk_max_num = blk_max_num; in rt_rbb_init()
38 rbb->tail = &rbb->blk_list; in rt_rbb_init()
39 rt_slist_init(&rbb->blk_list); in rt_rbb_init()
40 rt_slist_init(&rbb->free_list); in rt_rbb_init()
46 rt_slist_insert(&rbb->free_list, &block_set[i].list); in rt_rbb_init()
48 rt_spin_lock_init(&(rbb->spinlock)); in rt_rbb_init()
65 rt_rbb_t rbb = RT_NULL; in rt_rbb_create() local
69 rbb = (rt_rbb_t)rt_malloc(sizeof(struct rt_rbb)); in rt_rbb_create()
70 if (!rbb) in rt_rbb_create()
78 rt_free(rbb); in rt_rbb_create()
86 rt_free(rbb); in rt_rbb_create()
90 rt_rbb_init(rbb, buf, buf_size, blk_set, blk_max_num); in rt_rbb_create()
92 return rbb; in rt_rbb_create()
101 void rt_rbb_destroy(rt_rbb_t rbb) in rt_rbb_destroy() argument
103 RT_ASSERT(rbb); in rt_rbb_destroy()
105 rt_free(rbb->buf); in rt_rbb_destroy()
106 rt_free(rbb->blk_set); in rt_rbb_destroy()
107 rt_free(rbb); in rt_rbb_destroy()
114 static rt_rbb_blk_t find_empty_blk_in_set(rt_rbb_t rbb) in find_empty_blk_in_set() argument
118 RT_ASSERT(rbb); in find_empty_blk_in_set()
120 if (rt_slist_isempty(&rbb->free_list)) in find_empty_blk_in_set()
124 blk = rt_slist_first_entry(&rbb->free_list, struct rt_rbb_blk, list); in find_empty_blk_in_set()
125 rt_slist_remove(&rbb->free_list, &blk->list); in find_empty_blk_in_set()
130 rt_inline void list_append(rt_rbb_t rbb, rt_slist_t *n) in list_append() argument
133 rbb->tail->next = n; in list_append()
136 rbb->tail = n; in list_append()
139 rt_inline rt_slist_t *list_remove(rt_rbb_t rbb, rt_slist_t *n) in list_remove() argument
141 rt_slist_t *l = &rbb->blk_list; in list_remove()
152 if (rbb->tail == n) in list_remove()
153 rbb->tail = node; in list_remove()
169 rt_rbb_blk_t rt_rbb_blk_alloc(rt_rbb_t rbb, rt_size_t blk_size) in rt_rbb_blk_alloc() argument
175 RT_ASSERT(rbb); in rt_rbb_blk_alloc()
178 level = rt_spin_lock_irqsave(&(rbb->spinlock)); in rt_rbb_blk_alloc()
180 new_rbb = find_empty_blk_in_set(rbb); in rt_rbb_blk_alloc()
184 if (rt_slist_isempty(&rbb->blk_list) == 0) in rt_rbb_blk_alloc()
186 head = rt_slist_first_entry(&rbb->blk_list, struct rt_rbb_blk, list); in rt_rbb_blk_alloc()
188 tail = rt_slist_entry(rbb->tail, struct rt_rbb_blk, list); in rt_rbb_blk_alloc()
198 empty1 = (rbb->buf + rbb->buf_size) - (tail->buf + tail->size); in rt_rbb_blk_alloc()
199 empty2 = head->buf - rbb->buf; in rt_rbb_blk_alloc()
203 list_append(rbb, &new_rbb->list); in rt_rbb_blk_alloc()
210 list_append(rbb, &new_rbb->list); in rt_rbb_blk_alloc()
212 new_rbb->buf = rbb->buf; in rt_rbb_blk_alloc()
218 rt_slist_insert(&rbb->free_list, &new_rbb->list); in rt_rbb_blk_alloc()
235 list_append(rbb, &new_rbb->list); in rt_rbb_blk_alloc()
243 rt_slist_insert(&rbb->free_list, &new_rbb->list); in rt_rbb_blk_alloc()
251 if(blk_size <= rbb->buf_size) in rt_rbb_blk_alloc()
253 list_append(rbb, &new_rbb->list); in rt_rbb_blk_alloc()
255 new_rbb->buf = rbb->buf; in rt_rbb_blk_alloc()
261 rt_slist_insert(&rbb->free_list, &new_rbb->list); in rt_rbb_blk_alloc()
267 rt_spin_unlock_irqrestore(&(rbb->spinlock), level); in rt_rbb_blk_alloc()
295 rt_rbb_blk_t rt_rbb_blk_get(rt_rbb_t rbb) in rt_rbb_blk_get() argument
301 RT_ASSERT(rbb); in rt_rbb_blk_get()
303 if (rt_slist_isempty(&rbb->blk_list)) in rt_rbb_blk_get()
306 level = rt_spin_lock_irqsave(&(rbb->spinlock)); in rt_rbb_blk_get()
308 for (node = rt_slist_first(&rbb->blk_list); node; node = rt_slist_next(node)) in rt_rbb_blk_get()
322 rt_spin_unlock_irqrestore(&(rbb->spinlock), level); in rt_rbb_blk_get()
364 void rt_rbb_blk_free(rt_rbb_t rbb, rt_rbb_blk_t block) in rt_rbb_blk_free() argument
368 RT_ASSERT(rbb); in rt_rbb_blk_free()
372 level = rt_spin_lock_irqsave(&(rbb->spinlock)); in rt_rbb_blk_free()
374 list_remove(rbb, &block->list); in rt_rbb_blk_free()
376 rt_slist_insert(&rbb->free_list, &block->list); in rt_rbb_blk_free()
377 rt_spin_unlock_irqrestore(&(rbb->spinlock), level); in rt_rbb_blk_free()
404 rt_size_t rt_rbb_blk_queue_get(rt_rbb_t rbb, rt_size_t queue_data_len, rt_rbb_blk_queue_t blk_queue) in rt_rbb_blk_queue_get() argument
411 RT_ASSERT(rbb); in rt_rbb_blk_queue_get()
414 if (rt_slist_isempty(&rbb->blk_list)) in rt_rbb_blk_queue_get()
417 level = rt_spin_lock_irqsave(&(rbb->spinlock)); in rt_rbb_blk_queue_get()
419 node = rt_slist_first(&rbb->blk_list); in rt_rbb_blk_queue_get()
466 rt_spin_unlock_irqrestore(&(rbb->spinlock), level); in rt_rbb_blk_queue_get()
516 void rt_rbb_blk_queue_free(rt_rbb_t rbb, rt_rbb_blk_queue_t blk_queue) in rt_rbb_blk_queue_free() argument
521 RT_ASSERT(rbb); in rt_rbb_blk_queue_free()
527 rt_rbb_blk_free(rbb, blk); in rt_rbb_blk_queue_free()
541 rt_size_t rt_rbb_next_blk_queue_len(rt_rbb_t rbb) in rt_rbb_next_blk_queue_len() argument
548 RT_ASSERT(rbb); in rt_rbb_next_blk_queue_len()
550 if (rt_slist_isempty(&rbb->blk_list)) in rt_rbb_next_blk_queue_len()
553 level = rt_spin_lock_irqsave(&(rbb->spinlock)); in rt_rbb_next_blk_queue_len()
555 for (node = rt_slist_first(&rbb->blk_list); node; node = rt_slist_next(node)) in rt_rbb_next_blk_queue_len()
585 rt_spin_unlock_irqrestore(&(rbb->spinlock), level); in rt_rbb_next_blk_queue_len()
598 rt_size_t rt_rbb_get_buf_size(rt_rbb_t rbb) in rt_rbb_get_buf_size() argument
600 RT_ASSERT(rbb); in rt_rbb_get_buf_size()
602 return rbb->buf_size; in rt_rbb_get_buf_size()