summaryrefslogtreecommitdiffstats
path: root/src/target/firmware/layer1/mframe_sched.c
diff options
context:
space:
mode:
authorSylvain Munaut <tnt@246tNt.com>2010-04-26 21:33:26 +0200
committerSylvain Munaut <tnt@246tNt.com>2010-04-28 10:17:04 +0200
commit2afc002e1255f711325abc44e1d670d32a8b25a6 (patch)
tree197c86a92caad3e9859d575c7786c4a37a4e0d03 /src/target/firmware/layer1/mframe_sched.c
parentafc0ee79c466f74194c19770489d01ce1370f9da (diff)
fw/layer1: Encapsulate mframe scheduler function better
There was some code meddling with mf_tasks directly. This is fine if it's just setting/clearing a bit but since we're gonna need some 'cleverness' into when to activate what to prevent conflict, it's better to abstract that logic. Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
Diffstat (limited to 'src/target/firmware/layer1/mframe_sched.c')
-rw-r--r--src/target/firmware/layer1/mframe_sched.c29
1 files changed, 27 insertions, 2 deletions
diff --git a/src/target/firmware/layer1/mframe_sched.c b/src/target/firmware/layer1/mframe_sched.c
index 92e95ed1..c63637a9 100644
--- a/src/target/firmware/layer1/mframe_sched.c
+++ b/src/target/firmware/layer1/mframe_sched.c
@@ -308,13 +308,38 @@ static void mframe_schedule_set(enum mframe_task task_id)
}
}
+/* Enable a specific task */
+void mframe_enable(enum mframe_task task_id)
+{
+ l1s.mframe_sched.tasks |= (1 << task_id);
+}
+
+/* Disable a specific task */
+void mframe_disable(enum mframe_task task_id)
+{
+ l1s.mframe_sched.tasks &= ~(1 << task_id);
+}
+
+/* Replace the current active set by the new one */
+void mframe_set(uint32_t tasks)
+{
+ l1s.mframe_sched.tasks = tasks;
+}
+
/* Schedule mframe_sched_items according to current MF TASK list */
-void mframe_schedule(uint32_t tasks_enabled)
+void mframe_schedule(void)
{
unsigned int i;
for (i = 0; i < 32; i++) {
- if (tasks_enabled & (1 << i))
+ if (l1s.mframe_sched.tasks & (1 << i))
mframe_schedule_set(i);
}
}
+
+/* reset the scheduler, disabling all tasks */
+void mframe_reset(void)
+{
+ l1s.mframe_sched.tasks = 0;
+}
+