summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2010-06-20 18:31:22 +0200
committerHarald Welte <laforge@gnumonks.org>2010-06-20 18:44:27 +0200
commite05dfe99f19f7887adef296ed80444077a189366 (patch)
tree239b4d87544427b76a4db557e6d0a65a3313e5ca /src
parentcdc91973ee004c5de90739bfb53f439f568f59d7 (diff)
[layer1] Introduce function to reset the gsmtime scheduler
Diffstat (limited to 'src')
-rw-r--r--src/target/firmware/include/layer1/sched_gsmtime.h1
-rw-r--r--src/target/firmware/layer1/sched_gsmtime.c11
-rw-r--r--src/target/firmware/layer1/sync.c1
3 files changed, 13 insertions, 0 deletions
diff --git a/src/target/firmware/include/layer1/sched_gsmtime.h b/src/target/firmware/include/layer1/sched_gsmtime.h
index c45054cf..630c6163 100644
--- a/src/target/firmware/include/layer1/sched_gsmtime.h
+++ b/src/target/firmware/include/layer1/sched_gsmtime.h
@@ -20,4 +20,5 @@ int sched_gsmtime(const struct tdma_sched_item *si, uint32_t fn, uint16_t p3);
/* execute all GSMTIME one-shot events pending for 'current_fn' */
int sched_gsmtime_execute(uint32_t current_fn);
+void sched_gsmtime_reset(void);
#endif
diff --git a/src/target/firmware/layer1/sched_gsmtime.c b/src/target/firmware/layer1/sched_gsmtime.c
index b4e970e0..6a549e2d 100644
--- a/src/target/firmware/layer1/sched_gsmtime.c
+++ b/src/target/firmware/layer1/sched_gsmtime.c
@@ -106,3 +106,14 @@ void sched_gsmtime_init(void)
for (i = 0; i < ARRAY_SIZE(sched_gsmtime_events); i++)
llist_add(&sched_gsmtime_events[i].list, &inactive_evts);
}
+
+void sched_gsmtime_reset(void)
+{
+ struct sched_gsmtime_event *evt, *evt2;
+
+ llist_for_each_entry_safe(evt, evt2, &active_evts, list) {
+ llist_del(&evt->list);
+ /* put event back in list of inactive (free) events */
+ llist_add(&evt->list, &inactive_evts);
+ }
+}
diff --git a/src/target/firmware/layer1/sync.c b/src/target/firmware/layer1/sync.c
index bb7c6b70..9ecb5812 100644
--- a/src/target/firmware/layer1/sync.c
+++ b/src/target/firmware/layer1/sync.c
@@ -338,6 +338,7 @@ void l1s_reset(void)
l1s.fb.mode = 0;
/* reset scheduler and hardware */
+ sched_gsmtime_reset();
mframe_reset();
tdma_sched_reset();
l1s_dsp_abort();