summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2008-04-04 19:38:46 +0000
committerJens Arnold <amiconn@rockbox.org>2008-04-04 19:38:46 +0000
commitac9b92716a11cf7699f6ce9668b1ca5cd4171cf9 (patch)
treeb327ea00d2320464d5022b63690032ec31b55f47
parent3183b9e534eba4ca07ffaa68895e63177b5d8761 (diff)
downloadrockbox-ac9b92716a11cf7699f6ce9668b1ca5cd4171cf9.zip
rockbox-ac9b92716a11cf7699f6ce9668b1ca5cd4171cf9.tar.gz
rockbox-ac9b92716a11cf7699f6ce9668b1ca5cd4171cf9.tar.bz2
rockbox-ac9b92716a11cf7699f6ce9668b1ca5cd4171cf9.tar.xz
Allow to select the core for running the user timer on portalplayer targets. * Incompatible plugin API change -> sorted API.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16965 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/plugin.c4
-rw-r--r--apps/plugin.h8
-rw-r--r--apps/plugins/alpine_cdc.c4
-rw-r--r--apps/plugins/doom/i_system.c2
-rw-r--r--apps/plugins/lib/grey_core.c2
-rw-r--r--apps/plugins/metronome.c2
-rw-r--r--apps/plugins/test_scanrate.c3
-rw-r--r--apps/plugins/video.c6
-rw-r--r--firmware/backlight.c5
-rw-r--r--firmware/export/timer.h3
-rw-r--r--firmware/timer.c19
11 files changed, 36 insertions, 22 deletions
diff --git a/apps/plugin.c b/apps/plugin.c
index 7c3fab1..66e3d63 100644
--- a/apps/plugin.c
+++ b/apps/plugin.c
@@ -144,6 +144,7 @@ static const struct plugin_api rockbox_api = {
#if CONFIG_CHARGING
backlight_set_timeout_plugged,
#endif
+ is_backlight_on,
gui_syncsplash,
#ifdef HAVE_REMOTE_LCD
@@ -477,7 +478,7 @@ static const struct plugin_api rockbox_api = {
# endif
#endif
#ifdef HAVE_USB_POWER
- usb_powered,
+ usb_powered,
#endif
/* misc */
@@ -576,7 +577,6 @@ static const struct plugin_api rockbox_api = {
/* new stuff at the end, sort into place next time
the API gets incompatible */
- is_backlight_on,
};
int plugin_load(const char* plugin, void* parameter)
diff --git a/apps/plugin.h b/apps/plugin.h
index cfbd3e7..c638688 100644
--- a/apps/plugin.h
+++ b/apps/plugin.h
@@ -120,12 +120,12 @@
#define PLUGIN_MAGIC 0x526F634B /* RocK */
/* increase this every time the api struct changes */
-#define PLUGIN_API_VERSION 106
+#define PLUGIN_API_VERSION 107
/* update this to latest version if a change to the api struct breaks
backwards compatibility (and please take the opportunity to sort in any
new function which are "waiting" at the end of the function table) */
-#define PLUGIN_MIN_API_VERSION 105
+#define PLUGIN_MIN_API_VERSION 107
/* plugin return codes */
enum plugin_status {
@@ -235,6 +235,7 @@ struct plugin_api {
#if CONFIG_CHARGING
void (*backlight_set_timeout_plugged)(int index);
#endif
+ bool (*is_backlight_on)(bool ignore_always_off);
void (*splash)(int ticks, const char *fmt, ...) ATTRIBUTE_PRINTF(2, 3);
#ifdef HAVE_REMOTE_LCD
@@ -394,7 +395,7 @@ struct plugin_api {
#endif
bool (*timer_register)(int reg_prio, void (*unregister_callback)(void),
long cycles, int int_prio,
- void (*timer_callback)(void));
+ void (*timer_callback)(void) IF_COP(, int core));
void (*timer_unregister)(void);
bool (*timer_set_period)(long count);
@@ -722,7 +723,6 @@ struct plugin_api {
/* new stuff at the end, sort into place next time
the API gets incompatible */
- bool (*is_backlight_on)(bool ignore_always_off);
};
/* plugin header */
diff --git a/apps/plugins/alpine_cdc.c b/apps/plugins/alpine_cdc.c
index 919ce18..f781509 100644
--- a/apps/plugins/alpine_cdc.c
+++ b/apps/plugins/alpine_cdc.c
@@ -231,11 +231,11 @@ void timer_set_mode(int mode)
if (mode == TM_RX_TIMEOUT)
{
- rb->timer_register(1, NULL, gTimer.timeout, 11, timer4_isr);
+ rb->timer_register(1, NULL, gTimer.timeout, 11, timer4_isr IF_COP(, CPU));
}
else if (mode == TM_TRANSMIT)
{
- rb->timer_register(1, NULL, gTimer.transmit, 14, timer4_isr);
+ rb->timer_register(1, NULL, gTimer.transmit, 14, timer4_isr IF_COP(, CPU));
}
else
{
diff --git a/apps/plugins/doom/i_system.c b/apps/plugins/doom/i_system.c
index 4a22743..09a6180 100644
--- a/apps/plugins/doom/i_system.c
+++ b/apps/plugins/doom/i_system.c
@@ -109,7 +109,7 @@ int I_GetTime (void)
void I_Init (void)
{
#if defined(HAVE_LCD_COLOR) && !defined(SIMULATOR) && !defined(RB_PROFILE)
- rb->timer_register(1, NULL, TIMER_FREQ/TICRATE, 1, doomtime);
+ rb->timer_register(1, NULL, TIMER_FREQ/TICRATE, 1, doomtime IF_COP(, CPU));
#endif
I_InitSound();
}
diff --git a/apps/plugins/lib/grey_core.c b/apps/plugins/lib/grey_core.c
index 5125d77..20c33a6 100644
--- a/apps/plugins/lib/grey_core.c
+++ b/apps/plugins/lib/grey_core.c
@@ -603,7 +603,7 @@ void grey_show(bool enable)
_grey_info.rb->cpu_boost(true);
#endif
_grey_info.rb->timer_register(1, NULL, TIMER_FREQ / LCD_SCANRATE, 1,
- _timer_isr);
+ _timer_isr IF_COP(, CPU));
#endif /* !SIMULATOR */
_grey_info.rb->screen_dump_set_hook(grey_screendump_hook);
}
diff --git a/apps/plugins/metronome.c b/apps/plugins/metronome.c
index 571e085..d05e881 100644
--- a/apps/plugins/metronome.c
+++ b/apps/plugins/metronome.c
@@ -322,7 +322,7 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter){
#endif /* CONFIG_CODEC != SWCODEC */
calc_period();
- rb->timer_register(1, NULL, TIMER_FREQ/1024, 1, timer_callback);
+ rb->timer_register(1, NULL, TIMER_FREQ/1024, 1, timer_callback IF_COP(, CPU));
draw_display();
diff --git a/apps/plugins/test_scanrate.c b/apps/plugins/test_scanrate.c
index aabc623..e88ac99 100644
--- a/apps/plugins/test_scanrate.c
+++ b/apps/plugins/test_scanrate.c
@@ -150,7 +150,8 @@ int plugin_main(void)
rb->cpu_boost(true);
#endif
/* The actual frequency is twice the displayed value */
- rb->timer_register(1, NULL, TIMER_FREQ * 5 / scan_rate, 1, timer_isr);
+ rb->timer_register(1, NULL, TIMER_FREQ * 5 / scan_rate, 1,
+ timer_isr IF_COP(, CPU));
while (!done)
{
diff --git a/apps/plugins/video.c b/apps/plugins/video.c
index fa1646d..3e7e53a 100644
--- a/apps/plugins/video.c
+++ b/apps/plugins/video.c
@@ -540,9 +540,11 @@ int SeekTo(int fd, int nPos)
gPlay.bVideoUnderrun = false;
/* start display interrupt */
#if FREQ == 12000000 /* Ondio speed kludge */
- rb->timer_register(1, NULL, gPlay.nFrameTimeAdjusted, 1, timer4_isr);
+ rb->timer_register(1, NULL, gPlay.nFrameTimeAdjusted, 1,
+ timer4_isr IF_COP(, CPU));
#else
- rb->timer_register(1, NULL, gFileHdr.video_frametime, 1, timer4_isr);
+ rb->timer_register(1, NULL, gFileHdr.video_frametime, 1,
+ timer4_isr IF_COP(, CPU));
#endif
}
diff --git a/firmware/backlight.c b/firmware/backlight.c
index 4126b82..a09521d 100644
--- a/firmware/backlight.c
+++ b/firmware/backlight.c
@@ -289,7 +289,8 @@ static void backlight_dim(int value)
if (bl_timer_active)
return ;
- if (timer_register(0, backlight_release_timer, 2, 0, backlight_isr))
+ if (timer_register(0, backlight_release_timer, 2, 0, backlight_isr
+ IF_COP(, CPU)))
{
#ifdef _BACKLIGHT_FADE_BOOST
/* Prevent cpu frequency changes while dimming. */
@@ -813,7 +814,7 @@ void remote_backlight_on(void) {}
void remote_backlight_off(void) {}
void remote_backlight_set_timeout(int value) {(void)value;}
-bool is_remote_backlight_on(bool ignore_always_off)
+bool is_remote_backlight_on(bool ignore_always_off)
{
(void)ignore_always_off;
return true;
diff --git a/firmware/export/timer.h b/firmware/export/timer.h
index 21995ef..08bf7b1 100644
--- a/firmware/export/timer.h
+++ b/firmware/export/timer.h
@@ -39,7 +39,8 @@
#define TIMER_FREQ CPU_FREQ
#endif
bool timer_register(int reg_prio, void (*unregister_callback)(void),
- long cycles, int int_prio, void (*timer_callback)(void));
+ long cycles, int int_prio, void (*timer_callback)(void)
+ IF_COP(,int core));
bool timer_set_period(long cycles);
#ifdef CPU_COLDFIRE
void timers_adjust_prescale(int multiplier, bool enable_irq);
diff --git a/firmware/timer.c b/firmware/timer.c
index d15ba64..23df271 100644
--- a/firmware/timer.c
+++ b/firmware/timer.c
@@ -25,12 +25,12 @@
#include "logf.h"
static int timer_prio = -1;
-void (*pfn_timer)(void) = NULL; /* timer callback */
-void (*pfn_unregister)(void) = NULL; /* unregister callback */
+void NOCACHEBSS_ATTR (*pfn_timer)(void) = NULL; /* timer callback */
+void NOCACHEBSS_ATTR (*pfn_unregister)(void) = NULL; /* unregister callback */
#ifdef CPU_COLDFIRE
static int base_prescale;
#elif defined CPU_PP || CONFIG_CPU == PNX0101
-static long cycles_new = 0;
+static long NOCACHEBSS_ATTR cycles_new = 0;
#endif
/* interrupt handler */
@@ -201,6 +201,8 @@ static bool timer_set(long cycles, bool start)
pfn_unregister();
pfn_unregister = NULL;
}
+ CPU_INT_CLR = TIMER2_MASK;
+ COP_INT_CLR = TIMER2_MASK;
}
if (start || (cycles_new == -1)) /* within isr, cycles_new is "locked" */
TIMER2_CFG = 0xc0000000 | (cycles - 1); /* enable timer */
@@ -236,7 +238,8 @@ void timers_adjust_prescale(int multiplier, bool enable_irq)
/* Register a user timer, called every <cycles> TIMER_FREQ cycles */
bool timer_register(int reg_prio, void (*unregister_callback)(void),
- long cycles, int int_prio, void (*timer_callback)(void))
+ long cycles, int int_prio, void (*timer_callback)(void)
+ IF_COP(, int core))
{
if (reg_prio <= timer_prio || cycles == 0)
return false;
@@ -264,7 +267,12 @@ bool timer_register(int reg_prio, void (*unregister_callback)(void),
return true;
#elif defined(CPU_PP)
/* unmask interrupt source */
- CPU_INT_EN = TIMER2_MASK;
+#if NUM_CORES > 1
+ if (core == COP)
+ COP_INT_EN = TIMER2_MASK;
+ else
+#endif
+ CPU_INT_EN = TIMER2_MASK;
return true;
#elif CONFIG_CPU == PNX0101
irq_set_int_handler(IRQ_TIMER1, TIMER1_ISR);
@@ -301,6 +309,7 @@ void timer_unregister(void)
#elif defined(CPU_PP)
TIMER2_CFG = 0; /* stop timer 2 */
CPU_INT_CLR = TIMER2_MASK;
+ COP_INT_CLR = TIMER2_MASK;
#elif CONFIG_CPU == PNX0101
TIMER1.ctrl &= ~0x80; /* disable timer 1 */
irq_disable_int(IRQ_TIMER1);