forked from len0rd/rockbox
Make basic cache functions into calls, and get rid of CACHE_FUNCTION_WRAPPERS and CACHE_FUNCTIONS_AS_CALL macros. Rename flush/invalidate_icache to cpucache_flush/invalidate. They're inlined only if an implementation isn't provided by defining HAVE_CPUCACHE_FLUSH/INVALIDATE.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19971 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
4cd7597172
commit
21f0c9a282
28 changed files with 136 additions and 173 deletions
|
@ -113,9 +113,9 @@ struct codec_api ci = {
|
|||
semaphore_release,
|
||||
#endif
|
||||
|
||||
#ifdef CACHE_FUNCTIONS_AS_CALL
|
||||
flush_icache,
|
||||
invalidate_icache,
|
||||
#if NUM_CORES > 1
|
||||
cpucache_flush,
|
||||
cpucache_invalidate,
|
||||
#endif
|
||||
|
||||
/* strings and memory */
|
||||
|
@ -232,7 +232,7 @@ static int codec_load_ram(int size, struct codec_api *api)
|
|||
}
|
||||
|
||||
*(hdr->api) = api;
|
||||
invalidate_icache();
|
||||
cpucache_invalidate();
|
||||
status = hdr->entry_point();
|
||||
|
||||
sim_codec_close(pd);
|
||||
|
|
|
@ -170,9 +170,9 @@ struct codec_api {
|
|||
void (*semaphore_release)(struct semaphore *s);
|
||||
#endif /* NUM_CORES */
|
||||
|
||||
#ifdef CACHE_FUNCTIONS_AS_CALL
|
||||
void (*flush_icache)(void);
|
||||
void (*invalidate_icache)(void);
|
||||
#if NUM_CORES > 1
|
||||
void (*cpucache_flush)(void);
|
||||
void (*cpucache_invalidate)(void);
|
||||
#endif
|
||||
|
||||
/* strings and memory */
|
||||
|
@ -297,22 +297,4 @@ int codec_load_file(const char* codec, struct codec_api *api);
|
|||
enum codec_status codec_start(void);
|
||||
enum codec_status codec_main(void);
|
||||
|
||||
#ifndef CACHE_FUNCTION_WRAPPERS
|
||||
|
||||
#ifdef CACHE_FUNCTIONS_AS_CALL
|
||||
#define CACHE_FUNCTION_WRAPPERS(api) \
|
||||
void flush_icache(void) \
|
||||
{ \
|
||||
(api)->flush_icache(); \
|
||||
} \
|
||||
void invalidate_icache(void) \
|
||||
{ \
|
||||
(api)->invalidate_icache(); \
|
||||
}
|
||||
#else
|
||||
#define CACHE_FUNCTION_WRAPPERS(api)
|
||||
#endif /* CACHE_FUNCTIONS_AS_CALL */
|
||||
|
||||
#endif /* CACHE_FUNCTION_WRAPPERS */
|
||||
|
||||
#endif
|
||||
|
|
|
@ -34,8 +34,6 @@ extern unsigned char plugin_end_addr[];
|
|||
|
||||
extern enum codec_status codec_main(void);
|
||||
|
||||
CACHE_FUNCTION_WRAPPERS(ci);
|
||||
|
||||
enum codec_status codec_start(void)
|
||||
{
|
||||
#ifndef SIMULATOR
|
||||
|
@ -47,7 +45,7 @@ enum codec_status codec_start(void)
|
|||
#endif
|
||||
#if NUM_CORES > 1
|
||||
/* writeback cleared iedata and bss areas */
|
||||
flush_icache();
|
||||
ci->cpucache_flush();
|
||||
#endif
|
||||
return codec_main();
|
||||
}
|
||||
|
|
|
@ -268,7 +268,7 @@ static void mad_synth_thread_quit(void)
|
|||
die=1;
|
||||
ci->semaphore_release(&synth_pending_sem);
|
||||
ci->thread_wait(mad_synth_thread_id);
|
||||
invalidate_icache();
|
||||
ci->cpucache_invalidate();
|
||||
}
|
||||
#else
|
||||
static inline void mad_synth_thread_ready(void)
|
||||
|
|
|
@ -302,7 +302,7 @@ static bool emu_thread_process_msg(struct sample_queue_chunk *chunk)
|
|||
if (id == SPC_EMU_LOAD)
|
||||
{
|
||||
struct spc_load *ld = (struct spc_load *)chunk->data;
|
||||
invalidate_icache();
|
||||
ci->cpucache_invalidate();
|
||||
SPC_Init(&spc_emu);
|
||||
sample_queue.retval = SPC_load_spc(&spc_emu, ld->buf, ld->size);
|
||||
|
||||
|
@ -376,7 +376,7 @@ static bool spc_emu_start(void)
|
|||
static inline int load_spc_buffer(uint8_t *buf, size_t size)
|
||||
{
|
||||
struct spc_load ld = { buf, size };
|
||||
flush_icache();
|
||||
ci->cpucache_flush();
|
||||
return emu_thread_send_msg(SPC_EMU_LOAD, (intptr_t)&ld);
|
||||
}
|
||||
|
||||
|
@ -386,7 +386,7 @@ static inline void spc_emu_quit(void)
|
|||
emu_thread_send_msg(SPC_EMU_QUIT, 0);
|
||||
/* Wait for emu thread to be killed */
|
||||
ci->thread_wait(emu_thread_id);
|
||||
invalidate_icache();
|
||||
ci->cpucache_invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1317,9 +1317,9 @@ static void codec_thread(void)
|
|||
queue_reply(&codec_queue, 1);
|
||||
if ((void*)ev.data != NULL)
|
||||
{
|
||||
invalidate_icache();
|
||||
cpucache_invalidate();
|
||||
((void (*)(void))ev.data)();
|
||||
flush_icache();
|
||||
cpucache_flush();
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -327,9 +327,9 @@ static const struct plugin_api rockbox_api = {
|
|||
trigger_cpu_boost,
|
||||
cancel_cpu_boost,
|
||||
#endif
|
||||
#ifdef CACHE_FUNCTIONS_AS_CALL
|
||||
flush_icache,
|
||||
invalidate_icache,
|
||||
#if NUM_CORES > 1
|
||||
cpucache_flush,
|
||||
cpucache_invalidate,
|
||||
#endif
|
||||
timer_register,
|
||||
timer_unregister,
|
||||
|
@ -694,7 +694,7 @@ int plugin_load(const char* plugin, const void* parameter)
|
|||
#if NUM_CORES > 1
|
||||
/* Make sure COP cache is flushed and invalidated before loading */
|
||||
my_core = switch_core(CURRENT_CORE ^ 1);
|
||||
invalidate_icache();
|
||||
cpucache_invalidate();
|
||||
switch_core(my_core);
|
||||
#endif
|
||||
|
||||
|
@ -742,7 +742,7 @@ int plugin_load(const char* plugin, const void* parameter)
|
|||
lcd_remote_update();
|
||||
#endif
|
||||
|
||||
invalidate_icache();
|
||||
cpucache_invalidate();
|
||||
oldbars = viewportmanager_set_statusbar(VP_SB_HIDE_ALL);
|
||||
|
||||
rc = hdr->entry_point(parameter);
|
||||
|
@ -854,7 +854,7 @@ void plugin_iram_init(char *iramstart, char *iramcopy, size_t iram_size,
|
|||
memset(iramcopy, 0, iram_size);
|
||||
#if NUM_CORES > 1
|
||||
/* writeback cleared iedata and iramcopy areas */
|
||||
flush_icache();
|
||||
cpucache_flush();
|
||||
#endif
|
||||
}
|
||||
#endif /* PLUGIN_USE_IRAM */
|
||||
|
|
|
@ -438,9 +438,9 @@ struct plugin_api {
|
|||
void (*trigger_cpu_boost)(void);
|
||||
void (*cancel_cpu_boost)(void);
|
||||
#endif
|
||||
#ifdef CACHE_FUNCTIONS_AS_CALL
|
||||
void (*flush_icache)(void);
|
||||
void (*invalidate_icache)(void);
|
||||
#if NUM_CORES > 1
|
||||
void (*cpucache_flush)(void);
|
||||
void (*cpucache_invalidate)(void);
|
||||
#endif
|
||||
bool (*timer_register)(int reg_prio, void (*unregister_callback)(void),
|
||||
long cycles, int int_prio,
|
||||
|
@ -854,20 +854,5 @@ extern const struct plugin_api *rb;
|
|||
enum plugin_status plugin_start(const void* parameter)
|
||||
NO_PROF_ATTR;
|
||||
|
||||
#undef CACHE_FUNCTION_WRAPPERS
|
||||
#ifdef CACHE_FUNCTIONS_AS_CALL
|
||||
#define CACHE_FUNCTION_WRAPPERS \
|
||||
void flush_icache(void) \
|
||||
{ \
|
||||
rb->flush_icache(); \
|
||||
} \
|
||||
void invalidate_icache(void) \
|
||||
{ \
|
||||
rb->invalidate_icache(); \
|
||||
}
|
||||
#else
|
||||
#define CACHE_FUNCTION_WRAPPERS
|
||||
#endif /* CACHE_FUNCTIONS_AS_CALL */
|
||||
|
||||
#endif /* __PCTOOL__ */
|
||||
#endif
|
||||
|
|
|
@ -149,7 +149,7 @@ bool mpeg_alloc_init(unsigned char *buf, size_t mallocsize)
|
|||
return false;
|
||||
}
|
||||
|
||||
IF_COP(invalidate_icache());
|
||||
IF_COP(rb->cpucache_invalidate());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -296,8 +296,6 @@ CONFIG_KEYPAD == SANSA_M200_PAD
|
|||
#endif
|
||||
#endif
|
||||
|
||||
CACHE_FUNCTION_WRAPPERS;
|
||||
|
||||
/* One thing we can do here for targets with remotes is having a display
|
||||
* always on the remote instead of always forcing a popup on the main display */
|
||||
|
||||
|
|
|
@ -524,7 +524,7 @@ static void video_thread_msg(struct video_thread_data *td)
|
|||
}
|
||||
else
|
||||
{
|
||||
IF_COP(invalidate_icache());
|
||||
IF_COP(rb->cpucache_invalidate());
|
||||
vo_lock();
|
||||
rb->lcd_update();
|
||||
vo_unlock();
|
||||
|
@ -996,7 +996,7 @@ bool video_thread_init(void)
|
|||
{
|
||||
intptr_t rep;
|
||||
|
||||
IF_COP(flush_icache());
|
||||
IF_COP(rb->cpucache_flush());
|
||||
|
||||
video_str.hdr.q = &video_str_queue;
|
||||
rb->queue_init(video_str.hdr.q, false);
|
||||
|
@ -1014,7 +1014,7 @@ bool video_thread_init(void)
|
|||
|
||||
/* Wait for thread to initialize */
|
||||
rep = str_send_msg(&video_str, STREAM_NULL, 0);
|
||||
IF_COP(invalidate_icache());
|
||||
IF_COP(rb->cpucache_invalidate());
|
||||
|
||||
return rep == 0; /* Normally STREAM_NULL should be ignored */
|
||||
}
|
||||
|
@ -1026,7 +1026,7 @@ void video_thread_exit(void)
|
|||
{
|
||||
str_post_msg(&video_str, STREAM_QUIT, 0);
|
||||
rb->thread_wait(video_str.thread);
|
||||
IF_COP(invalidate_icache());
|
||||
IF_COP(rb->cpucache_invalidate());
|
||||
video_str.thread = 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1905,7 +1905,7 @@ void dynamic_recompile (struct dynarec_block *newblock)
|
|||
PC=oldpc;
|
||||
setmallocpos(dynapointer);
|
||||
newblock->length=dynapointer-newblock->block;
|
||||
invalidate_icache();
|
||||
IF_COP(rb->cpucache_invalidate());
|
||||
snprintf(meow,499,"/dyna_0x%x_code.rb",PC);
|
||||
fd=open(meow,O_WRONLY|O_CREAT|O_TRUNC);
|
||||
if(fd>=0)
|
||||
|
|
|
@ -480,9 +480,9 @@ static void init_ci(void)
|
|||
ci.profile_func_exit = rb->profile_func_exit;
|
||||
#endif
|
||||
|
||||
#ifdef CACHE_FUNCTIONS_AS_CALL
|
||||
ci.invalidate_icache = invalidate_icache;
|
||||
ci.flush_icache = flush_icache;
|
||||
#if NUM_CORES > 1
|
||||
ci.cpucache_invalidate = rb->cpucache_invalidate;
|
||||
ci.cpucache_flush = rb->cpucache_flush;
|
||||
#endif
|
||||
|
||||
#if NUM_CORES > 1
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue