summaryrefslogtreecommitdiff
path: root/firmware/export
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2004-03-02 11:32:59 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2004-03-02 11:32:59 +0000
commit111a972b65f5fcc2ef98a5164d0367e7e50f4b09 (patch)
tree84cdb473f8c439575ac99d90f94d636e7f25e731 /firmware/export
parentaa5b23d6162a5ac6cbfc1d871ed9360ffa946c56 (diff)
downloadrockbox-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.h15
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];