From 80da8b141c4672ca4380d66094976b6342ed5071 Mon Sep 17 00:00:00 2001 From: Tomasz Malesinski Date: Sun, 26 Nov 2006 18:31:41 +0000 Subject: FS#6357, patch 1: let iramcopy and bss share the same space in codecs and plugins. Currently, in case of plugins using IRAM bss is cleared twice, once in the loader, once in PLUGIN_IRAM_INIT. For codecs, bss is cleared only during codec initialization. Also, removed double variables in codecs storing a pointer to codec_api. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11606 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/doom/rockdoom.c | 4 ++-- apps/plugins/midiplay.c | 6 +++--- apps/plugins/mp3_encoder.c | 6 +++--- apps/plugins/mpegplayer/mpegplayer.c | 9 ++++----- apps/plugins/pacbox/pacbox.c | 3 +-- apps/plugins/plugin.lds | 7 +++---- apps/plugins/rockboy/rockboy.c | 4 ++-- apps/plugins/zxbox/zxbox.c | 8 +++++--- 8 files changed, 23 insertions(+), 24 deletions(-) (limited to 'apps/plugins') diff --git a/apps/plugins/doom/rockdoom.c b/apps/plugins/doom/rockdoom.c index 8b73a5b..d66d86d 100644 --- a/apps/plugins/doom/rockdoom.c +++ b/apps/plugins/doom/rockdoom.c @@ -769,6 +769,8 @@ extern int systemvol; /* this is the plugin entry point */ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) { + PLUGIN_IRAM_INIT(api) + rb = api; (void)parameter; @@ -778,8 +780,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) rb->cpu_boost(true); #endif - PLUGIN_IRAM_INIT(rb) - rb->lcd_setfont(0); #ifdef FANCY_MENU diff --git a/apps/plugins/midiplay.c b/apps/plugins/midiplay.c index a0e7d0e..759535a 100644 --- a/apps/plugins/midiplay.c +++ b/apps/plugins/midiplay.c @@ -105,8 +105,10 @@ struct plugin_api * rb; enum plugin_status plugin_start(struct plugin_api* api, void* parameter) { int retval = 0; - rb = api; + PLUGIN_IRAM_INIT(api) + + rb = api; if(parameter == NULL) { rb->splash(HZ*2, true, " Play .MID file "); @@ -114,8 +116,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) } rb->lcd_setfont(0); - PLUGIN_IRAM_INIT(rb) - #if defined(HAVE_ADJUSTABLE_CPU_FREQ) rb->cpu_boost(true); #endif diff --git a/apps/plugins/mp3_encoder.c b/apps/plugins/mp3_encoder.c index 5bfd384..da0245e 100644 --- a/apps/plugins/mp3_encoder.c +++ b/apps/plugins/mp3_encoder.c @@ -2364,14 +2364,14 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) int brate[] = { 64, 80, 96, 112, 128, 160, 192, 224, 256, 320 }; (void)parameter; - rb = api; + + PLUGIN_IRAM_INIT(api) #ifdef CPU_COLDFIRE asm volatile ("move.l #0, %macsr"); /* integer mode */ #endif - PLUGIN_IRAM_INIT(rb) - + rb = api; rb->lcd_setfont(FONT_SYSFIXED); #ifdef HAVE_ADJUSTABLE_CPU_FREQ diff --git a/apps/plugins/mpegplayer/mpegplayer.c b/apps/plugins/mpegplayer/mpegplayer.c index 0fbd0f0..8a839eb 100644 --- a/apps/plugins/mpegplayer/mpegplayer.c +++ b/apps/plugins/mpegplayer/mpegplayer.c @@ -297,10 +297,11 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) uint8_t* buffer; size_t buffer_size; - rb = api; - /* This also stops audio playback - so we do it before using IRAM */ - audiobuf = rb->plugin_get_audio_buffer(&audiosize); + audiobuf = api->plugin_get_audio_buffer(&audiosize); + + PLUGIN_IRAM_INIT(api) + rb = api; /* Initialise our malloc buffer */ mpeg2_alloc_init(audiobuf,audiosize); @@ -312,8 +313,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) if (buffer == NULL) return PLUGIN_ERROR; - PLUGIN_IRAM_INIT(rb) - rb->lcd_set_backdrop(NULL); #ifdef HAVE_LCD_COLOR diff --git a/apps/plugins/pacbox/pacbox.c b/apps/plugins/pacbox/pacbox.c index 62f5bcd..4c539c5 100644 --- a/apps/plugins/pacbox/pacbox.c +++ b/apps/plugins/pacbox/pacbox.c @@ -364,10 +364,9 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) { (void)parameter; + PLUGIN_IRAM_INIT(api) rb = api; - PLUGIN_IRAM_INIT(rb) - #ifdef HAVE_ADJUSTABLE_CPU_FREQ rb->cpu_boost(true); #endif diff --git a/apps/plugins/plugin.lds b/apps/plugins/plugin.lds index ef0dece..f27733a 100644 --- a/apps/plugins/plugin.lds +++ b/apps/plugins/plugin.lds @@ -115,12 +115,11 @@ SECTIONS . = ALIGN(0x4); iend = .; } > PLUGIN_IRAM - - .bss ADDR(.data) + SIZEOF(.data) + SIZEOF(.iram): -#else - .bss : #endif + + .bss (NOLOAD) : { + plugin_bss_start = .; *(.bss*) *(COMMON) . = ALIGN(0x4); diff --git a/apps/plugins/rockboy/rockboy.c b/apps/plugins/rockboy/rockboy.c index 6a72856..cce0f8c 100644 --- a/apps/plugins/rockboy/rockboy.c +++ b/apps/plugins/rockboy/rockboy.c @@ -157,6 +157,8 @@ void savesettings(void) /* this is the plugin entry point */ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) { + PLUGIN_IRAM_INIT(api) + /* if you are using a global api pointer, don't forget to copy it! otherwise you will get lovely "I04: IllInstr" errors... :-) */ rb = api; @@ -181,8 +183,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) #endif setoptions(); - PLUGIN_IRAM_INIT(rb) - shut=0; cleanshut=0; diff --git a/apps/plugins/zxbox/zxbox.c b/apps/plugins/zxbox/zxbox.c index 753fb1f..cfc4e5d 100644 --- a/apps/plugins/zxbox/zxbox.c +++ b/apps/plugins/zxbox/zxbox.c @@ -61,14 +61,16 @@ long start_time IBSS_ATTR = 0; enum plugin_status plugin_start(struct plugin_api* api, void* parameter) { - rb = api; #if CODEC == SWCODEC && !defined SIMULATOR - rb->pcm_play_stop(); + api->pcm_play_stop(); #endif + + PLUGIN_IRAM_INIT(api) + + rb = api; rb->lcd_set_backdrop(NULL); rb->splash(HZ, true, "Welcome to ZXBox"); - PLUGIN_IRAM_INIT(rb) sp_init(); -- cgit v1.1