xref: /nrf52832-nimble/rt-thread/components/vbus/watermark_queue.c (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero /*
2*10465441SEvalZero  * COPYRIGHT (C) 2018, Real-Thread Information Technology Ltd
3*10465441SEvalZero  *
4*10465441SEvalZero  * SPDX-License-Identifier: Apache-2.0
5*10465441SEvalZero  *
6*10465441SEvalZero  * Change Logs:
7*10465441SEvalZero  * Date           Author       Notes
8*10465441SEvalZero  * 2014-04-16     Grissiom     first version
9*10465441SEvalZero  */
10*10465441SEvalZero 
11*10465441SEvalZero #include <rthw.h>
12*10465441SEvalZero #include <rtthread.h>
13*10465441SEvalZero 
14*10465441SEvalZero #include "watermark_queue.h"
15*10465441SEvalZero 
rt_wm_que_set_mark(struct rt_watermark_queue * wg,unsigned int low,unsigned int high)16*10465441SEvalZero void rt_wm_que_set_mark(struct rt_watermark_queue *wg,
17*10465441SEvalZero                              unsigned int low, unsigned int high)
18*10465441SEvalZero {
19*10465441SEvalZero     RT_ASSERT(low <= high);
20*10465441SEvalZero 
21*10465441SEvalZero     wg->high_mark = high;
22*10465441SEvalZero     wg->low_mark = low;
23*10465441SEvalZero }
24*10465441SEvalZero 
rt_wm_que_init(struct rt_watermark_queue * wg,unsigned int low,unsigned int high)25*10465441SEvalZero void rt_wm_que_init(struct rt_watermark_queue *wg,
26*10465441SEvalZero                          unsigned int low, unsigned int high)
27*10465441SEvalZero {
28*10465441SEvalZero     rt_wm_que_set_mark(wg, low, high);
29*10465441SEvalZero     rt_list_init(&wg->suspended_threads);
30*10465441SEvalZero     wg->level = 0;
31*10465441SEvalZero }
32*10465441SEvalZero 
rt_wm_que_dump(struct rt_watermark_queue * wg)33*10465441SEvalZero void rt_wm_que_dump(struct rt_watermark_queue *wg)
34*10465441SEvalZero {
35*10465441SEvalZero     struct rt_list_node *node;
36*10465441SEvalZero 
37*10465441SEvalZero     rt_kprintf("wg %p: low: %d, high: %d, cur: %d\n",
38*10465441SEvalZero                wg, wg->low_mark, wg->high_mark, wg->level);
39*10465441SEvalZero     rt_kprintf("thread suspend:");
40*10465441SEvalZero     for (node = wg->suspended_threads.next;
41*10465441SEvalZero          node != &wg->suspended_threads;
42*10465441SEvalZero          node = node->next)
43*10465441SEvalZero     {
44*10465441SEvalZero         rt_thread_t thread;
45*10465441SEvalZero 
46*10465441SEvalZero         thread = rt_list_entry(wg->suspended_threads.next,
47*10465441SEvalZero                                struct rt_thread,
48*10465441SEvalZero                                tlist);
49*10465441SEvalZero         rt_kprintf(" %.*s", RT_NAME_MAX, thread->name);
50*10465441SEvalZero     }
51*10465441SEvalZero     rt_kprintf("\n");
52*10465441SEvalZero }
53