summaryrefslogtreecommitdiff
path: root/apps/codecs/codec_crt0.c
diff options
context:
space:
mode:
authorTomasz Malesinski <tomal@rockbox.org>2006-11-26 18:31:41 +0000
committerTomasz Malesinski <tomal@rockbox.org>2006-11-26 18:31:41 +0000
commit80da8b141c4672ca4380d66094976b6342ed5071 (patch)
tree631e9edd537ae9983524622a9e1ec82e24957280 /apps/codecs/codec_crt0.c
parent8ef3c8a342d41c2aa5e5d8370fd4e89d4d8d937e (diff)
downloadrockbox-80da8b141c4672ca4380d66094976b6342ed5071.zip
rockbox-80da8b141c4672ca4380d66094976b6342ed5071.tar.gz
rockbox-80da8b141c4672ca4380d66094976b6342ed5071.tar.bz2
rockbox-80da8b141c4672ca4380d66094976b6342ed5071.tar.xz
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
Diffstat (limited to 'apps/codecs/codec_crt0.c')
-rw-r--r--apps/codecs/codec_crt0.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/apps/codecs/codec_crt0.c b/apps/codecs/codec_crt0.c
new file mode 100644
index 0000000..96dc862
--- /dev/null
+++ b/apps/codecs/codec_crt0.c
@@ -0,0 +1,46 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2006 Tomasz Malesinski
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#include "config.h"
+#include "codeclib.h"
+
+struct codec_api *ci;
+
+extern unsigned char iramcopy[];
+extern unsigned char iramstart[];
+extern unsigned char iramend[];
+extern unsigned char iedata[];
+extern unsigned char iend[];
+extern unsigned char plugin_bss_start[];
+extern unsigned char plugin_end_addr[];
+
+extern enum codec_status codec_main(void);
+
+enum codec_status codec_start(struct codec_api *api)
+{
+#ifndef SIMULATOR
+#ifdef USE_IRAM
+ api->memcpy(iramstart, iramcopy, iramend - iramstart);
+ api->memset(iedata, 0, iend - iedata);
+#endif
+ api->memset(plugin_bss_start, 0, plugin_end_addr - plugin_bss_start);
+#endif
+ ci = api;
+ return codec_main();
+}