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