mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-13 18:17:39 -04:00
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
This commit is contained in:
parent
3183b9e534
commit
ac9b92716a
11 changed files with 36 additions and 22 deletions
|
@ -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
|
||||
|
@ -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)
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,6 +267,11 @@ bool timer_register(int reg_prio, void (*unregister_callback)(void),
|
|||
return true;
|
||||
#elif defined(CPU_PP)
|
||||
/* unmask interrupt source */
|
||||
#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
|
||||
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue