summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Chapman <dave@dchapman.com>2007-01-01 12:09:45 +0000
committerDave Chapman <dave@dchapman.com>2007-01-01 12:09:45 +0000
commit147693819d3275ec9eba8b580fa6ff8ada9896f3 (patch)
treea92f145b79b5248ab0550e8715ac1c479451d6b3
parent9d9b8c08de68f158bf9967a8ec340b10e25b840b (diff)
downloadrockbox-147693819d3275ec9eba8b580fa6ff8ada9896f3.zip
rockbox-147693819d3275ec9eba8b580fa6ff8ada9896f3.tar.gz
rockbox-147693819d3275ec9eba8b580fa6ff8ada9896f3.tar.bz2
rockbox-147693819d3275ec9eba8b580fa6ff8ada9896f3.tar.xz
Split the enable_fiq(fiq_handler) function into separate set_fiq_handler(fiq_handler) and enable_fiq(void) functions. This allows temporary disabling of the FIQ without knowing which fiq handler is in use.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11875 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/export/system.h5
-rw-r--r--firmware/target/arm/gigabeat/meg-fx/pcm-meg-fx.c3
-rw-r--r--firmware/target/arm/pcm-pp.c9
3 files changed, 12 insertions, 5 deletions
diff --git a/firmware/export/system.h b/firmware/export/system.h
index 3db38c9..66a2133 100644
--- a/firmware/export/system.h
+++ b/firmware/export/system.h
@@ -314,11 +314,14 @@ static inline int set_irq_level(int level)
return (cpsr >> 7) & 1;
}
-static inline void enable_fiq(void(*fiq_handler)(void))
+static inline void set_fiq_handler(void(*fiq_handler)(void))
{
/* Install the FIQ handler */
*((unsigned int*)(15*4)) = (unsigned int)fiq_handler;
+}
+static inline void enable_fiq(void)
+{
/* Clear FIQ disable bit */
asm volatile (
"mrs r0, cpsr \n"\
diff --git a/firmware/target/arm/gigabeat/meg-fx/pcm-meg-fx.c b/firmware/target/arm/gigabeat/meg-fx/pcm-meg-fx.c
index 936b836..04e1bbb 100644
--- a/firmware/target/arm/gigabeat/meg-fx/pcm-meg-fx.c
+++ b/firmware/target/arm/gigabeat/meg-fx/pcm-meg-fx.c
@@ -146,7 +146,8 @@ void pcm_play_dma_start(const void *addr, size_t size)
/* clear pending DMA interrupt */
SRCPND = 1<<19;
- enable_fiq(fiq);
+ set_fiq_handler(fiq);
+ enable_fiq();
/* unmask the DMA interrupt */
INTMSK &= ~(1<<19);
diff --git a/firmware/target/arm/pcm-pp.c b/firmware/target/arm/pcm-pp.c
index f6f71d7..9ee3acd 100644
--- a/firmware/target/arm/pcm-pp.c
+++ b/firmware/target/arm/pcm-pp.c
@@ -217,7 +217,8 @@ void pcm_play_dma_start(const void *addr, size_t size)
#endif
/* Clear the FIQ disable bit in cpsr_c */
- enable_fiq(fiq);
+ set_fiq_handler(fiq);
+ enable_fiq();
/* Enable playback FIFO */
#if CONFIG_CPU == PP5020
@@ -290,7 +291,8 @@ void pcm_play_pause_unpause(void)
{
/* Enable the FIFO and fill it */
- enable_fiq(fiq);
+ set_fiq_handler(fiq);
+ enable_fiq();
/* Enable playback FIFO */
#if CONFIG_CPU == PP5020
@@ -459,7 +461,8 @@ void pcm_rec_dma_start(void *addr, size_t size)
/* enable record fifo */
outl(inl(0x70002800) | 0x10000000, 0x70002800);
- enable_fiq(fiq_record);
+ set_fiq_handler(fiq_record);
+ enable_fiq();
}
void pcm_close_recording(void)