diff options
author | Yilun Lin <yllin@google.com> | 2019-08-08 10:57:02 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-08-22 08:48:56 +0000 |
commit | 60c1f84d024395fac90f144ad5a027f56b5ff3d0 (patch) | |
tree | 8bd5268caf5d30cc17e1961c3e9b1a46ee401db3 /core/cortex-m0/task.c | |
parent | 50ca8d5e647b7002650eda35dbc829c42f978bb6 (diff) | |
download | chrome-ec-60c1f84d024395fac90f144ad5a027f56b5ff3d0.tar.gz |
task: Add task_enable_task() and task_disable_task()
Provide API to disable/enable tasks.
All the tasks are marked enabled after hook_task starts.
We need a way to control the tasks when it shouldn't run in some states.
BUG=b:136240895
TEST=Disable the tasks and see it won't be scheudled when task_wake().
BRANCH=None
Change-Id: I2662f3619b22ed28387fe3c783001ba2a745620c
Signed-off-by: Yilun Lin <yllin@google.com>
Signed-off-by: Yilun Lin <yllin@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1753562
Diffstat (limited to 'core/cortex-m0/task.c')
-rw-r--r-- | core/cortex-m0/task.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/core/cortex-m0/task.c b/core/cortex-m0/task.c index 1a198827db..d9f0e85c40 100644 --- a/core/cortex-m0/task.c +++ b/core/cortex-m0/task.c @@ -433,6 +433,19 @@ void task_enable_all_tasks(void) __schedule(0, 0); } +void task_enable_task(task_id_t tskid) +{ + atomic_or(&tasks_enabled, BIT(tskid)); +} + +void task_disable_task(task_id_t tskid) +{ + atomic_clear(&tasks_enabled, BIT(tskid)); + + if (!in_interrupt_context() && tskid == task_get_current()) + __schedule(0, 0); +} + void task_enable_irq(int irq) { CPU_NVIC_EN(0) = 1 << irq; |