summaryrefslogtreecommitdiff
path: root/firmware/export/thread.h
diff options
context:
space:
mode:
authorBrandon Low <lostlogic@rockbox.org>2006-11-11 05:33:24 +0000
committerBrandon Low <lostlogic@rockbox.org>2006-11-11 05:33:24 +0000
commit8a82892e52127f50efaafaeda3ae841e8bbefe2d (patch)
tree1dfa1a18c05018045db4fe8e67d1dc3fbc5a2d72 /firmware/export/thread.h
parent806d8f3505ef7e477f9af4d1b07fe30cd1f28fb3 (diff)
downloadrockbox-8a82892e52127f50efaafaeda3ae841e8bbefe2d.tar.gz
rockbox-8a82892e52127f50efaafaeda3ae841e8bbefe2d.zip
Thread API enhancements.
1) block_thread -> block_thread + block_thread_w_tmo -- this call was always used in distinct ways so having one call with a conditional was ugly. 2) enhance Slasheri's scheduler controlled boost concept. now any thread may trigger a boost which will last until that thread next sleeps. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11509 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/export/thread.h')
-rw-r--r--firmware/export/thread.h25
1 files changed, 17 insertions, 8 deletions
diff --git a/firmware/export/thread.h b/firmware/export/thread.h
index 8bb9ae2608..0c1567de97 100644
--- a/firmware/export/thread.h
+++ b/firmware/export/thread.h
@@ -78,14 +78,22 @@ struct regs
78 78
79#endif /* !SIMULATOR */ 79#endif /* !SIMULATOR */
80 80
81#define STATE_RUNNING 0 81#define STATE_RUNNING 0x00000000
82#define STATE_BLOCKED 1 82#define STATE_BLOCKED 0x20000000
83#define STATE_SLEEPING 2 83#define STATE_SLEEPING 0x40000000
84#define STATE_BLOCKED_W_TMO 3 84#define STATE_BLOCKED_W_TMO 0x60000000
85 85
86#define GET_STATE_ARG(state) (state & 0x3FFFFFFF) 86#define THREAD_STATE_MASK 0x60000000
87#define GET_STATE(state) ((state >> 30) & 3) 87#define STATE_ARG_MASK 0x1FFFFFFF
88#define SET_STATE(state,arg) ((state << 30) | (arg)) 88
89#define GET_STATE_ARG(state) (state & STATE_ARG_MASK)
90#define GET_STATE(state) (state & THREAD_STATE_MASK)
91#define SET_STATE(var,state,arg) (var = (state | ((arg) & STATE_ARG_MASK)))
92#define CLEAR_STATE_ARG(var) (var &= ~STATE_ARG_MASK)
93
94#define STATE_BOOSTED 0x80000000
95#define STATE_IS_BOOSTED(var) (var & STATE_BOOSTED)
96#define SET_BOOST_STATE(var) (var |= STATE_BOOSTED)
89 97
90struct thread_entry { 98struct thread_entry {
91#ifndef SIMULATOR 99#ifndef SIMULATOR
@@ -133,7 +141,8 @@ void trigger_cpu_boost(void);
133void remove_thread(struct thread_entry *thread); 141void remove_thread(struct thread_entry *thread);
134void switch_thread(bool save_context, struct thread_entry **blocked_list); 142void switch_thread(bool save_context, struct thread_entry **blocked_list);
135void sleep_thread(int ticks); 143void sleep_thread(int ticks);
136void block_thread(struct thread_entry **thread, int timeout); 144void block_thread(struct thread_entry **thread);
145void block_thread_w_tmo(struct thread_entry **thread, int timeout);
137void wakeup_thread(struct thread_entry **thread); 146void wakeup_thread(struct thread_entry **thread);
138#ifdef HAVE_PRIORITY_SCHEDULING 147#ifdef HAVE_PRIORITY_SCHEDULING
139int thread_set_priority(struct thread_entry *thread, int priority); 148int thread_set_priority(struct thread_entry *thread, int priority);