summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2009-02-11 12:55:51 +0000
committerMichael Sevakis <jethead71@rockbox.org>2009-02-11 12:55:51 +0000
commit21f0c9a2829415f52b64cbdf965b01525e78f17a (patch)
treeb5cb8021097722969f75784011c9f64f991c0c3d /apps
parent4cd7597172d916db9fc99bde4c03b669366f852a (diff)
downloadrockbox-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.c8
-rw-r--r--apps/codecs.h24
-rw-r--r--apps/codecs/codec_crt0.c4
-rw-r--r--apps/codecs/mpa.c2
-rw-r--r--apps/codecs/spc.c6
-rw-r--r--apps/playback.c4
-rw-r--r--apps/plugin.c12
-rw-r--r--apps/plugin.h21
-rw-r--r--apps/plugins/mpegplayer/alloc.c2
-rw-r--r--apps/plugins/mpegplayer/mpegplayer.c2
-rw-r--r--apps/plugins/mpegplayer/video_thread.c8
-rw-r--r--apps/plugins/rockboy/dynarec.c2
-rw-r--r--apps/plugins/test_codec.c6
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