diff options
author | Harald Welte <laforge@gnumonks.org> | 2010-06-20 18:31:22 +0200 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2010-06-20 18:44:27 +0200 |
commit | e05dfe99f19f7887adef296ed80444077a189366 (patch) | |
tree | 239b4d87544427b76a4db557e6d0a65a3313e5ca /src | |
parent | cdc91973ee004c5de90739bfb53f439f568f59d7 (diff) |
[layer1] Introduce function to reset the gsmtime scheduler
Diffstat (limited to 'src')
-rw-r--r-- | src/target/firmware/include/layer1/sched_gsmtime.h | 1 | ||||
-rw-r--r-- | src/target/firmware/layer1/sched_gsmtime.c | 11 | ||||
-rw-r--r-- | src/target/firmware/layer1/sync.c | 1 |
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(); |