diff options
| author | copilot-swe-agent[bot] <[email protected]> | 2025-10-28 23:36:25 +0000 |
|---|---|---|
| committer | copilot-swe-agent[bot] <[email protected]> | 2025-10-28 23:36:25 +0000 |
| commit | 35e4335ee752da9adb3029a06cb6004f3d9320f7 (patch) | |
| tree | 25f26a0a9992f35e877ff08c1d0a41c48fd726c4 /components/vbus/watermark_queue.h | |
| parent | 6d2f401e172911b8433bebe6d6a6e76c1b637d5c (diff) | |
Remove vbus component and related codecopilot/remove-vbus-code-implementation
Co-authored-by: BernardXiong <[email protected]>
Diffstat (limited to 'components/vbus/watermark_queue.h')
| -rw-r--r-- | components/vbus/watermark_queue.h | 129 |
1 files changed, 0 insertions, 129 deletions
diff --git a/components/vbus/watermark_queue.h b/components/vbus/watermark_queue.h deleted file mode 100644 index d03ef9eeba..0000000000 --- a/components/vbus/watermark_queue.h +++ /dev/null @@ -1,129 +0,0 @@ -/* - * COPYRIGHT (C) 2011-2021, Real-Thread Information Technology Ltd - * - * SPDX-License-Identifier: Apache-2.0 - * - * Change Logs: - * Date Author Notes - * 2014-04-16 Grissiom first version - */ - -struct rt_watermark_queue -{ - /* Current water level. */ - unsigned int level; - unsigned int high_mark; - unsigned int low_mark; - rt_list_t suspended_threads; -}; - -/** Init the struct rt_watermark_queue. - */ -void rt_wm_que_init(struct rt_watermark_queue *wg, - unsigned int low, unsigned int high); -void rt_wm_que_set_mark(struct rt_watermark_queue *wg, - unsigned int low, unsigned int high); -void rt_wm_que_dump(struct rt_watermark_queue *wg); - -/* Water marks are often used in performance critical places. Benchmark shows - * inlining functions will have 10% performance gain in some situation(for - * example, VBus). So keep the inc/dec compact and inline. */ - -/** Increase the water level. - * - * It should be called in the thread that want to raise the water level. If the - * current level is above the high mark, the thread will be suspended up to - * @timeout ticks. - * - * @return RT_EOK if water level increased successfully. -RT_EFULL on @timeout - * is zero and the level is above water mark. -RT_ETIMEOUT if timeout occurred. - */ -rt_inline rt_err_t rt_wm_que_inc(struct rt_watermark_queue *wg, - int timeout) -{ - rt_base_t level; - - /* Assert as early as possible. */ - if (timeout != 0) - { - RT_DEBUG_IN_THREAD_CONTEXT; - } - - level = rt_hw_interrupt_disable(); - - while (wg->level > wg->high_mark) - { - rt_thread_t thread; - - if (timeout == 0) - { - rt_hw_interrupt_enable(level); - return -RT_EFULL; - } - - thread = rt_thread_self(); - thread->error = RT_EOK; - rt_thread_suspend(thread); - rt_list_insert_after(&wg->suspended_threads, &RT_THREAD_LIST_NODE(thread)); - if (timeout > 0) - { - rt_tick_t timeout_tick = timeout; - rt_timer_control(&(thread->thread_timer), - RT_TIMER_CTRL_SET_TIME, - &timeout_tick); - rt_timer_start(&(thread->thread_timer)); - } - rt_hw_interrupt_enable(level); - rt_schedule(); - if (thread->error != RT_EOK) - return thread->error; - - level = rt_hw_interrupt_disable(); - } - - wg->level++; - - if (wg->level == 0) - { - wg->level = ~0; - } - - rt_hw_interrupt_enable(level); - - return RT_EOK; -} - -/** Decrease the water level. - * - * It should be called by the consumer that drain the water out. If the water - * level reached low mark, all the thread suspended in this queue will be waken - * up. It's safe to call this function in interrupt context. - */ -rt_inline void rt_wm_que_dec(struct rt_watermark_queue *wg) -{ - int need_sched = 0; - rt_base_t level; - - if (wg->level == 0) - return; - - level = rt_hw_interrupt_disable(); - wg->level--; - if (wg->level == wg->low_mark) - { - /* There should be spaces between the low mark and high mark, so it's - * safe to resume all the threads. */ - while (!rt_list_isempty(&wg->suspended_threads)) - { - rt_thread_t thread; - - thread = RT_THREAD_LIST_NODE_ENTRY(wg->suspended_threads.next); - rt_thread_resume(thread); - need_sched = 1; - } - } - rt_hw_interrupt_enable(level); - - if (need_sched) - rt_schedule(); -} |
