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.tar.gz rockbox-21f0c9a2829415f52b64cbdf965b01525e78f17a.zip |
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 231b612358..4fcf9ce02f 100644 --- a/apps/codecs.c +++ b/apps/codecs.c | |||
@@ -113,9 +113,9 @@ struct codec_api ci = { | |||
113 | semaphore_release, | 113 | semaphore_release, |
114 | #endif | 114 | #endif |
115 | 115 | ||
116 | #ifdef CACHE_FUNCTIONS_AS_CALL | 116 | #if NUM_CORES > 1 |
117 | flush_icache, | 117 | cpucache_flush, |
118 | invalidate_icache, | 118 | cpucache_invalidate, |
119 | #endif | 119 | #endif |
120 | 120 | ||
121 | /* strings and memory */ | 121 | /* strings and memory */ |
@@ -232,7 +232,7 @@ static int codec_load_ram(int size, struct codec_api *api) | |||
232 | } | 232 | } |
233 | 233 | ||
234 | *(hdr->api) = api; | 234 | *(hdr->api) = api; |
235 | invalidate_icache(); | 235 | cpucache_invalidate(); |
236 | status = hdr->entry_point(); | 236 | status = hdr->entry_point(); |
237 | 237 | ||
238 | sim_codec_close(pd); | 238 | sim_codec_close(pd); |
diff --git a/apps/codecs.h b/apps/codecs.h index 3eab1d35c2..c2358e1750 100644 --- a/apps/codecs.h +++ b/apps/codecs.h | |||
@@ -170,9 +170,9 @@ struct codec_api { | |||
170 | void (*semaphore_release)(struct semaphore *s); | 170 | void (*semaphore_release)(struct semaphore *s); |
171 | #endif /* NUM_CORES */ | 171 | #endif /* NUM_CORES */ |
172 | 172 | ||
173 | #ifdef CACHE_FUNCTIONS_AS_CALL | 173 | #if NUM_CORES > 1 |
174 | void (*flush_icache)(void); | 174 | void (*cpucache_flush)(void); |
175 | void (*invalidate_icache)(void); | 175 | void (*cpucache_invalidate)(void); |
176 | #endif | 176 | #endif |
177 | 177 | ||
178 | /* strings and memory */ | 178 | /* strings and memory */ |
@@ -297,22 +297,4 @@ int codec_load_file(const char* codec, struct codec_api *api); | |||
297 | enum codec_status codec_start(void); | 297 | enum codec_status codec_start(void); |
298 | enum codec_status codec_main(void); | 298 | enum codec_status codec_main(void); |
299 | 299 | ||
300 | #ifndef CACHE_FUNCTION_WRAPPERS | ||
301 | |||
302 | #ifdef CACHE_FUNCTIONS_AS_CALL | ||
303 | #define CACHE_FUNCTION_WRAPPERS(api) \ | ||
304 | void flush_icache(void) \ | ||
305 | { \ | ||
306 | (api)->flush_icache(); \ | ||
307 | } \ | ||
308 | void invalidate_icache(void) \ | ||
309 | { \ | ||
310 | (api)->invalidate_icache(); \ | ||
311 | } | ||
312 | #else | ||
313 | #define CACHE_FUNCTION_WRAPPERS(api) | ||
314 | #endif /* CACHE_FUNCTIONS_AS_CALL */ | ||
315 | |||
316 | #endif /* CACHE_FUNCTION_WRAPPERS */ | ||
317 | |||
318 | #endif | 300 | #endif |
diff --git a/apps/codecs/codec_crt0.c b/apps/codecs/codec_crt0.c index 467e115de9..09b6982246 100644 --- a/apps/codecs/codec_crt0.c +++ b/apps/codecs/codec_crt0.c | |||
@@ -34,8 +34,6 @@ extern unsigned char plugin_end_addr[]; | |||
34 | 34 | ||
35 | extern enum codec_status codec_main(void); | 35 | extern enum codec_status codec_main(void); |
36 | 36 | ||
37 | CACHE_FUNCTION_WRAPPERS(ci); | ||
38 | |||
39 | enum codec_status codec_start(void) | 37 | enum codec_status codec_start(void) |
40 | { | 38 | { |
41 | #ifndef SIMULATOR | 39 | #ifndef SIMULATOR |
@@ -47,7 +45,7 @@ enum codec_status codec_start(void) | |||
47 | #endif | 45 | #endif |
48 | #if NUM_CORES > 1 | 46 | #if NUM_CORES > 1 |
49 | /* writeback cleared iedata and bss areas */ | 47 | /* writeback cleared iedata and bss areas */ |
50 | flush_icache(); | 48 | ci->cpucache_flush(); |
51 | #endif | 49 | #endif |
52 | return codec_main(); | 50 | return codec_main(); |
53 | } | 51 | } |
diff --git a/apps/codecs/mpa.c b/apps/codecs/mpa.c index 1a0b03c272..1b71bde79e 100644 --- a/apps/codecs/mpa.c +++ b/apps/codecs/mpa.c | |||
@@ -268,7 +268,7 @@ static void mad_synth_thread_quit(void) | |||
268 | die=1; | 268 | die=1; |
269 | ci->semaphore_release(&synth_pending_sem); | 269 | ci->semaphore_release(&synth_pending_sem); |
270 | ci->thread_wait(mad_synth_thread_id); | 270 | ci->thread_wait(mad_synth_thread_id); |
271 | invalidate_icache(); | 271 | ci->cpucache_invalidate(); |
272 | } | 272 | } |
273 | #else | 273 | #else |
274 | static inline void mad_synth_thread_ready(void) | 274 | static inline void mad_synth_thread_ready(void) |
diff --git a/apps/codecs/spc.c b/apps/codecs/spc.c index 5ac594431a..6ceb704c7c 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) | |||
302 | if (id == SPC_EMU_LOAD) | 302 | if (id == SPC_EMU_LOAD) |
303 | { | 303 | { |
304 | struct spc_load *ld = (struct spc_load *)chunk->data; | 304 | struct spc_load *ld = (struct spc_load *)chunk->data; |
305 | invalidate_icache(); | 305 | ci->cpucache_invalidate(); |
306 | SPC_Init(&spc_emu); | 306 | SPC_Init(&spc_emu); |
307 | sample_queue.retval = SPC_load_spc(&spc_emu, ld->buf, ld->size); | 307 | sample_queue.retval = SPC_load_spc(&spc_emu, ld->buf, ld->size); |
308 | 308 | ||
@@ -376,7 +376,7 @@ static bool spc_emu_start(void) | |||
376 | static inline int load_spc_buffer(uint8_t *buf, size_t size) | 376 | static inline int load_spc_buffer(uint8_t *buf, size_t size) |
377 | { | 377 | { |
378 | struct spc_load ld = { buf, size }; | 378 | struct spc_load ld = { buf, size }; |
379 | flush_icache(); | 379 | ci->cpucache_flush(); |
380 | return emu_thread_send_msg(SPC_EMU_LOAD, (intptr_t)&ld); | 380 | return emu_thread_send_msg(SPC_EMU_LOAD, (intptr_t)&ld); |
381 | } | 381 | } |
382 | 382 | ||
@@ -386,7 +386,7 @@ static inline void spc_emu_quit(void) | |||
386 | emu_thread_send_msg(SPC_EMU_QUIT, 0); | 386 | emu_thread_send_msg(SPC_EMU_QUIT, 0); |
387 | /* Wait for emu thread to be killed */ | 387 | /* Wait for emu thread to be killed */ |
388 | ci->thread_wait(emu_thread_id); | 388 | ci->thread_wait(emu_thread_id); |
389 | invalidate_icache(); | 389 | ci->cpucache_invalidate(); |
390 | } | 390 | } |
391 | } | 391 | } |
392 | 392 | ||
diff --git a/apps/playback.c b/apps/playback.c index 55c1878d4e..deaebfbdf0 100644 --- a/apps/playback.c +++ b/apps/playback.c | |||
@@ -1317,9 +1317,9 @@ static void codec_thread(void) | |||
1317 | queue_reply(&codec_queue, 1); | 1317 | queue_reply(&codec_queue, 1); |
1318 | if ((void*)ev.data != NULL) | 1318 | if ((void*)ev.data != NULL) |
1319 | { | 1319 | { |
1320 | invalidate_icache(); | 1320 | cpucache_invalidate(); |
1321 | ((void (*)(void))ev.data)(); | 1321 | ((void (*)(void))ev.data)(); |
1322 | flush_icache(); | 1322 | cpucache_flush(); |
1323 | } | 1323 | } |
1324 | break; | 1324 | break; |
1325 | 1325 | ||
diff --git a/apps/plugin.c b/apps/plugin.c index 3b14b0032f..f9f1c53617 100644 --- a/apps/plugin.c +++ b/apps/plugin.c | |||
@@ -327,9 +327,9 @@ static const struct plugin_api rockbox_api = { | |||
327 | trigger_cpu_boost, | 327 | trigger_cpu_boost, |
328 | cancel_cpu_boost, | 328 | cancel_cpu_boost, |
329 | #endif | 329 | #endif |
330 | #ifdef CACHE_FUNCTIONS_AS_CALL | 330 | #if NUM_CORES > 1 |
331 | flush_icache, | 331 | cpucache_flush, |
332 | invalidate_icache, | 332 | cpucache_invalidate, |
333 | #endif | 333 | #endif |
334 | timer_register, | 334 | timer_register, |
335 | timer_unregister, | 335 | timer_unregister, |
@@ -694,7 +694,7 @@ int plugin_load(const char* plugin, const void* parameter) | |||
694 | #if NUM_CORES > 1 | 694 | #if NUM_CORES > 1 |
695 | /* Make sure COP cache is flushed and invalidated before loading */ | 695 | /* Make sure COP cache is flushed and invalidated before loading */ |
696 | my_core = switch_core(CURRENT_CORE ^ 1); | 696 | my_core = switch_core(CURRENT_CORE ^ 1); |
697 | invalidate_icache(); | 697 | cpucache_invalidate(); |
698 | switch_core(my_core); | 698 | switch_core(my_core); |
699 | #endif | 699 | #endif |
700 | 700 | ||
@@ -742,7 +742,7 @@ int plugin_load(const char* plugin, const void* parameter) | |||
742 | lcd_remote_update(); | 742 | lcd_remote_update(); |
743 | #endif | 743 | #endif |
744 | 744 | ||
745 | invalidate_icache(); | 745 | cpucache_invalidate(); |
746 | oldbars = viewportmanager_set_statusbar(VP_SB_HIDE_ALL); | 746 | oldbars = viewportmanager_set_statusbar(VP_SB_HIDE_ALL); |
747 | 747 | ||
748 | rc = hdr->entry_point(parameter); | 748 | rc = hdr->entry_point(parameter); |
@@ -854,7 +854,7 @@ void plugin_iram_init(char *iramstart, char *iramcopy, size_t iram_size, | |||
854 | memset(iramcopy, 0, iram_size); | 854 | memset(iramcopy, 0, iram_size); |
855 | #if NUM_CORES > 1 | 855 | #if NUM_CORES > 1 |
856 | /* writeback cleared iedata and iramcopy areas */ | 856 | /* writeback cleared iedata and iramcopy areas */ |
857 | flush_icache(); | 857 | cpucache_flush(); |
858 | #endif | 858 | #endif |
859 | } | 859 | } |
860 | #endif /* PLUGIN_USE_IRAM */ | 860 | #endif /* PLUGIN_USE_IRAM */ |
diff --git a/apps/plugin.h b/apps/plugin.h index 9ebf793d3f..715f2ec512 100644 --- a/apps/plugin.h +++ b/apps/plugin.h | |||
@@ -438,9 +438,9 @@ struct plugin_api { | |||
438 | void (*trigger_cpu_boost)(void); | 438 | void (*trigger_cpu_boost)(void); |
439 | void (*cancel_cpu_boost)(void); | 439 | void (*cancel_cpu_boost)(void); |
440 | #endif | 440 | #endif |
441 | #ifdef CACHE_FUNCTIONS_AS_CALL | 441 | #if NUM_CORES > 1 |
442 | void (*flush_icache)(void); | 442 | void (*cpucache_flush)(void); |
443 | void (*invalidate_icache)(void); | 443 | void (*cpucache_invalidate)(void); |
444 | #endif | 444 | #endif |
445 | bool (*timer_register)(int reg_prio, void (*unregister_callback)(void), | 445 | bool (*timer_register)(int reg_prio, void (*unregister_callback)(void), |
446 | long cycles, int int_prio, | 446 | long cycles, int int_prio, |
@@ -854,20 +854,5 @@ extern const struct plugin_api *rb; | |||
854 | enum plugin_status plugin_start(const void* parameter) | 854 | enum plugin_status plugin_start(const void* parameter) |
855 | NO_PROF_ATTR; | 855 | NO_PROF_ATTR; |
856 | 856 | ||
857 | #undef CACHE_FUNCTION_WRAPPERS | ||
858 | #ifdef CACHE_FUNCTIONS_AS_CALL | ||
859 | #define CACHE_FUNCTION_WRAPPERS \ | ||
860 | void flush_icache(void) \ | ||
861 | { \ | ||
862 | rb->flush_icache(); \ | ||
863 | } \ | ||
864 | void invalidate_icache(void) \ | ||
865 | { \ | ||
866 | rb->invalidate_icache(); \ | ||
867 | } | ||
868 | #else | ||
869 | #define CACHE_FUNCTION_WRAPPERS | ||
870 | #endif /* CACHE_FUNCTIONS_AS_CALL */ | ||
871 | |||
872 | #endif /* __PCTOOL__ */ | 857 | #endif /* __PCTOOL__ */ |
873 | #endif | 858 | #endif |
diff --git a/apps/plugins/mpegplayer/alloc.c b/apps/plugins/mpegplayer/alloc.c index a69b6accf8..da92f8754a 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) | |||
149 | return false; | 149 | return false; |
150 | } | 150 | } |
151 | 151 | ||
152 | IF_COP(invalidate_icache()); | 152 | IF_COP(rb->cpucache_invalidate()); |
153 | return true; | 153 | return true; |
154 | } | 154 | } |
155 | 155 | ||
diff --git a/apps/plugins/mpegplayer/mpegplayer.c b/apps/plugins/mpegplayer/mpegplayer.c index 6e8f9350f8..eaf8f246c6 100644 --- a/apps/plugins/mpegplayer/mpegplayer.c +++ b/apps/plugins/mpegplayer/mpegplayer.c | |||
@@ -296,8 +296,6 @@ CONFIG_KEYPAD == SANSA_M200_PAD | |||
296 | #endif | 296 | #endif |
297 | #endif | 297 | #endif |
298 | 298 | ||
299 | CACHE_FUNCTION_WRAPPERS; | ||
300 | |||
301 | /* One thing we can do here for targets with remotes is having a display | 299 | /* One thing we can do here for targets with remotes is having a display |
302 | * always on the remote instead of always forcing a popup on the main display */ | 300 | * always on the remote instead of always forcing a popup on the main display */ |
303 | 301 | ||
diff --git a/apps/plugins/mpegplayer/video_thread.c b/apps/plugins/mpegplayer/video_thread.c index 8b84686a3b..6d60e64131 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) | |||
524 | } | 524 | } |
525 | else | 525 | else |
526 | { | 526 | { |
527 | IF_COP(invalidate_icache()); | 527 | IF_COP(rb->cpucache_invalidate()); |
528 | vo_lock(); | 528 | vo_lock(); |
529 | rb->lcd_update(); | 529 | rb->lcd_update(); |
530 | vo_unlock(); | 530 | vo_unlock(); |
@@ -996,7 +996,7 @@ bool video_thread_init(void) | |||
996 | { | 996 | { |
997 | intptr_t rep; | 997 | intptr_t rep; |
998 | 998 | ||
999 | IF_COP(flush_icache()); | 999 | IF_COP(rb->cpucache_flush()); |
1000 | 1000 | ||
1001 | video_str.hdr.q = &video_str_queue; | 1001 | video_str.hdr.q = &video_str_queue; |
1002 | rb->queue_init(video_str.hdr.q, false); | 1002 | rb->queue_init(video_str.hdr.q, false); |
@@ -1014,7 +1014,7 @@ bool video_thread_init(void) | |||
1014 | 1014 | ||
1015 | /* Wait for thread to initialize */ | 1015 | /* Wait for thread to initialize */ |
1016 | rep = str_send_msg(&video_str, STREAM_NULL, 0); | 1016 | rep = str_send_msg(&video_str, STREAM_NULL, 0); |
1017 | IF_COP(invalidate_icache()); | 1017 | IF_COP(rb->cpucache_invalidate()); |
1018 | 1018 | ||
1019 | return rep == 0; /* Normally STREAM_NULL should be ignored */ | 1019 | return rep == 0; /* Normally STREAM_NULL should be ignored */ |
1020 | } | 1020 | } |
@@ -1026,7 +1026,7 @@ void video_thread_exit(void) | |||
1026 | { | 1026 | { |
1027 | str_post_msg(&video_str, STREAM_QUIT, 0); | 1027 | str_post_msg(&video_str, STREAM_QUIT, 0); |
1028 | rb->thread_wait(video_str.thread); | 1028 | rb->thread_wait(video_str.thread); |
1029 | IF_COP(invalidate_icache()); | 1029 | IF_COP(rb->cpucache_invalidate()); |
1030 | video_str.thread = 0; | 1030 | video_str.thread = 0; |
1031 | } | 1031 | } |
1032 | } | 1032 | } |
diff --git a/apps/plugins/rockboy/dynarec.c b/apps/plugins/rockboy/dynarec.c index 7c466de986..afe6caaf1a 100644 --- a/apps/plugins/rockboy/dynarec.c +++ b/apps/plugins/rockboy/dynarec.c | |||
@@ -1905,7 +1905,7 @@ void dynamic_recompile (struct dynarec_block *newblock) | |||
1905 | PC=oldpc; | 1905 | PC=oldpc; |
1906 | setmallocpos(dynapointer); | 1906 | setmallocpos(dynapointer); |
1907 | newblock->length=dynapointer-newblock->block; | 1907 | newblock->length=dynapointer-newblock->block; |
1908 | invalidate_icache(); | 1908 | IF_COP(rb->cpucache_invalidate()); |
1909 | snprintf(meow,499,"/dyna_0x%x_code.rb",PC); | 1909 | snprintf(meow,499,"/dyna_0x%x_code.rb",PC); |
1910 | fd=open(meow,O_WRONLY|O_CREAT|O_TRUNC); | 1910 | fd=open(meow,O_WRONLY|O_CREAT|O_TRUNC); |
1911 | if(fd>=0) | 1911 | if(fd>=0) |
diff --git a/apps/plugins/test_codec.c b/apps/plugins/test_codec.c index ec5c8e9800..3260360882 100644 --- a/apps/plugins/test_codec.c +++ b/apps/plugins/test_codec.c | |||
@@ -480,9 +480,9 @@ static void init_ci(void) | |||
480 | ci.profile_func_exit = rb->profile_func_exit; | 480 | ci.profile_func_exit = rb->profile_func_exit; |
481 | #endif | 481 | #endif |
482 | 482 | ||
483 | #ifdef CACHE_FUNCTIONS_AS_CALL | 483 | #if NUM_CORES > 1 |
484 | ci.invalidate_icache = invalidate_icache; | 484 | ci.cpucache_invalidate = rb->cpucache_invalidate; |
485 | ci.flush_icache = flush_icache; | 485 | ci.cpucache_flush = rb->cpucache_flush; |
486 | #endif | 486 | #endif |
487 | 487 | ||
488 | #if NUM_CORES > 1 | 488 | #if NUM_CORES > 1 |