summaryrefslogtreecommitdiff
path: root/firmware/export/system.h
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2008-03-25 02:34:12 +0000
committerMichael Sevakis <jethead71@rockbox.org>2008-03-25 02:34:12 +0000
commit27cf67733936abd75fcb1f8da765977cd75906ee (patch)
treef894211a8a0c77b402dd3250b2bee2d17dcfe13f /firmware/export/system.h
parentbc2f8fd8f38a3e010cd67bbac358f6e9991153c6 (diff)
downloadrockbox-27cf67733936abd75fcb1f8da765977cd75906ee.tar.gz
rockbox-27cf67733936abd75fcb1f8da765977cd75906ee.zip
Add a complete priority inheritance implementation to the scheduler (all mutex ownership and queue_send calls are inheritable). Priorities are differential so that dispatch depends on the runnable range of priorities. Codec priority can therefore be raised in small steps (pcmbuf updated to enable). Simplify the kernel functions to ease implementation and use the same kernel.c for both sim and target (I'm tired of maintaining two ;_). 1) Not sure if a minor audio break at first buffering issue will exist on large-sector disks (the main mutex speed issue was genuinely resolved earlier). At this point it's best dealt with at the buffering level. It seems a larger filechunk could be used again. 2) Perhaps 64-bit sims will have some minor issues (finicky) but a backroll of the code of concern there is a 5-minute job. All kernel objects become incompatible so a full rebuild and update is needed.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16791 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/export/system.h')
-rw-r--r--firmware/export/system.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/firmware/export/system.h b/firmware/export/system.h
index b973b57fd9..dc3853211b 100644
--- a/firmware/export/system.h
+++ b/firmware/export/system.h
@@ -159,6 +159,20 @@ int get_cpu_boost_counter(void);
159#define H_TO_BE32(x) (x) 159#define H_TO_BE32(x) (x)
160#endif 160#endif
161 161
162/* Get the byte offset of a type's member */
163#define OFFSETOF(type, membername) ((off_t)&((type *)0)->membername)
164
165/* Get the type pointer from one of its members */
166#define TYPE_FROM_MEMBER(type, memberptr, membername) \
167 ((type *)((intptr_t)(memberptr) - OFFSETOF(type, membername)))
168
169/* returns index of first set bit + 1 or 0 if no bits are set */
170int find_first_set_bit(uint32_t val);
171
172static inline __attribute__((always_inline))
173uint32_t isolate_first_bit(uint32_t val)
174 { return val & -val; }
175
162/* gcc 3.4 changed the format of the constraints */ 176/* gcc 3.4 changed the format of the constraints */
163#if (__GNUC__ >= 3) && (__GNUC_MINOR__ > 3) || (__GNUC__ >= 4) 177#if (__GNUC__ >= 3) && (__GNUC_MINOR__ > 3) || (__GNUC__ >= 4)
164#define I_CONSTRAINT "I08" 178#define I_CONSTRAINT "I08"