diff options
| author | Linus Nielsen Feltzing <linus@haxx.se> | 2004-03-02 11:32:59 +0000 |
|---|---|---|
| committer | Linus Nielsen Feltzing <linus@haxx.se> | 2004-03-02 11:32:59 +0000 |
| commit | 111a972b65f5fcc2ef98a5164d0367e7e50f4b09 (patch) | |
| tree | 84cdb473f8c439575ac99d90f94d636e7f25e731 /firmware/export | |
| parent | aa5b23d6162a5ac6cbfc1d871ed9360ffa946c56 (diff) | |
| download | rockbox-111a972b65f5fcc2ef98a5164d0367e7e50f4b09.zip rockbox-111a972b65f5fcc2ef98a5164d0367e7e50f4b09.tar.gz rockbox-111a972b65f5fcc2ef98a5164d0367e7e50f4b09.tar.bz2 rockbox-111a972b65f5fcc2ef98a5164d0367e7e50f4b09.tar.xz | |
Made set_irq_level() an inline function, and optimized it by removing the bit shifts
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4330 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/export')
| -rw-r--r-- | firmware/export/system.h | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/firmware/export/system.h b/firmware/export/system.h index 5886145..038d956 100644 --- a/firmware/export/system.h +++ b/firmware/export/system.h @@ -25,7 +25,6 @@ extern void system_reboot (void); extern void system_init(void); -extern int set_irq_level(int level); #define FREQ CPU_FREQ #define BAUDRATE 9600 @@ -73,6 +72,20 @@ extern int set_irq_level(int level); #ifndef SIMULATOR +/**************************************************************************** + * Interrupt level setting + * The level is left shifted 4 bits + ****************************************************************************/ +#define HIGHEST_IRQ_LEVEL (15<<4) +static inline int set_irq_level(int level) +{ + int i; + /* Read the old level and set the new one */ + asm volatile ("stc sr, %0" : "=r" (i)); + asm volatile ("ldc %0, sr" : : "r" (level)); + return i; +} + static inline short SWAB16(short value) /* result[15..8] = value[ 7..0]; |