diff options
| author | Michael Sevakis <jethead71@rockbox.org> | 2009-02-11 12:55:51 +0000 |
|---|---|---|
| committer | Michael Sevakis <jethead71@rockbox.org> | 2009-02-11 12:55:51 +0000 |
| commit | 21f0c9a2829415f52b64cbdf965b01525e78f17a (patch) | |
| tree | b5cb8021097722969f75784011c9f64f991c0c3d /apps | |
| parent | 4cd7597172d916db9fc99bde4c03b669366f852a (diff) | |
| download | rockbox-21f0c9a2829415f52b64cbdf965b01525e78f17a.zip rockbox-21f0c9a2829415f52b64cbdf965b01525e78f17a.tar.gz rockbox-21f0c9a2829415f52b64cbdf965b01525e78f17a.tar.bz2 rockbox-21f0c9a2829415f52b64cbdf965b01525e78f17a.tar.xz | |
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
Diffstat (limited to 'apps')
| -rw-r--r-- | apps/codecs.c | 8 | ||||
| -rw-r--r-- | apps/codecs.h | 24 | ||||
| -rw-r--r-- | apps/codecs/codec_crt0.c | 4 | ||||
| -rw-r--r-- | apps/codecs/mpa.c | 2 | ||||
| -rw-r--r-- | apps/codecs/spc.c | 6 | ||||
| -rw-r--r-- | apps/playback.c | 4 | ||||
| -rw-r--r-- | apps/plugin.c | 12 | ||||
| -rw-r--r-- | apps/plugin.h | 21 | ||||
| -rw-r--r-- | apps/plugins/mpegplayer/alloc.c | 2 | ||||
| -rw-r--r-- | apps/plugins/mpegplayer/mpegplayer.c | 2 | ||||
| -rw-r--r-- | apps/plugins/mpegplayer/video_thread.c | 8 | ||||
| -rw-r--r-- | apps/plugins/rockboy/dynarec.c | 2 | ||||
| -rw-r--r-- | apps/plugins/test_codec.c | 6 |
13 files changed, 32 insertions, 69 deletions
diff --git a/apps/codecs.c b/apps/codecs.c index 231b612..4fcf9ce 100644 --- a/apps/codecs.c +++ b/apps/codecs.c @@ -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); diff --git a/apps/codecs.h b/apps/codecs.h index 3eab1d3..c2358e1 100644 --- a/apps/codecs.h +++ b/apps/codecs.h @@ -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 diff --git a/apps/codecs/codec_crt0.c b/apps/codecs/codec_crt0.c index 467e115..09b6982 100644 --- a/apps/codecs/codec_crt0.c +++ b/apps/codecs/codec_crt0.c @@ -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(); } diff --git a/apps/codecs/mpa.c b/apps/codecs/mpa.c index 1a0b03c..1b71bde 100644 --- a/apps/codecs/mpa.c +++ b/apps/codecs/mpa.c @@ -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) diff --git a/apps/codecs/spc.c b/apps/codecs/spc.c index 5ac5944..6ceb704 100644 --- a/apps/codecs/spc.c +++ b/apps/codecs/spc.c @@ -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(); } } diff --git a/apps/playback.c b/apps/playback.c index 55c1878..deaebfb 100644 --- a/apps/playback.c +++ b/apps/playback.c @@ -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; diff --git a/apps/plugin.c b/apps/plugin.c index 3b14b00..f9f1c53 100644 --- a/apps/plugin.c +++ b/apps/plugin.c @@ -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 */ diff --git a/apps/plugin.h b/apps/plugin.h index 9ebf793..715f2ec 100644 --- a/apps/plugin.h +++ b/apps/plugin.h @@ -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 diff --git a/apps/plugins/mpegplayer/alloc.c b/apps/plugins/mpegplayer/alloc.c index a69b6ac..da92f87 100644 --- a/apps/plugins/mpegplayer/alloc.c +++ b/apps/plugins/mpegplayer/alloc.c @@ -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; } diff --git a/apps/plugins/mpegplayer/mpegplayer.c b/apps/plugins/mpegplayer/mpegplayer.c index 6e8f935..eaf8f24 100644 --- a/apps/plugins/mpegplayer/mpegplayer.c +++ b/apps/plugins/mpegplayer/mpegplayer.c @@ -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 */ diff --git a/apps/plugins/mpegplayer/video_thread.c b/apps/plugins/mpegplayer/video_thread.c index 8b84686..6d60e64 100644 --- a/apps/plugins/mpegplayer/video_thread.c +++ b/apps/plugins/mpegplayer/video_thread.c @@ -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; } } diff --git a/apps/plugins/rockboy/dynarec.c b/apps/plugins/rockboy/dynarec.c index 7c466de..afe6caa 100644 --- a/apps/plugins/rockboy/dynarec.c +++ b/apps/plugins/rockboy/dynarec.c @@ -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) diff --git a/apps/plugins/test_codec.c b/apps/plugins/test_codec.c index ec5c8e9..3260360 100644 --- a/apps/plugins/test_codec.c +++ b/apps/plugins/test_codec.c @@ -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 |