summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/codecs/aiff_enc.c14
-rw-r--r--apps/codecs/mp3_enc.c14
-rw-r--r--apps/codecs/wav_enc.c9
-rw-r--r--apps/codecs/wavpack_enc.c9
-rw-r--r--firmware/drivers/ata.c25
-rw-r--r--firmware/export/config.h9
-rw-r--r--firmware/target/arm/sandisk/sansa-e200/ata-e200.c12
-rwxr-xr-xtools/configure4
8 files changed, 56 insertions, 40 deletions
diff --git a/apps/codecs/aiff_enc.c b/apps/codecs/aiff_enc.c
index 5f993084c7..02d159e52f 100644
--- a/apps/codecs/aiff_enc.c
+++ b/apps/codecs/aiff_enc.c
@@ -75,8 +75,9 @@ static uint32_t enc_size;
75static int32_t err IBSS_ATTR; 75static int32_t err IBSS_ATTR;
76 76
77/* convert unsigned 32 bit value to 80-bit floating point number */ 77/* convert unsigned 32 bit value to 80-bit floating point number */
78static void uint32_h_to_ieee754_extended_be(uint8_t f[10], uint32_t l) ICODE_ATTR; 78STATICIRAM void uint32_h_to_ieee754_extended_be(uint8_t f[10], uint32_t l)
79static void uint32_h_to_ieee754_extended_be(uint8_t f[10], uint32_t l) 79 ICODE_ATTR;
80STATICIRAM void uint32_h_to_ieee754_extended_be(uint8_t f[10], uint32_t l)
80{ 81{
81 int32_t exp; 82 int32_t exp;
82 83
@@ -192,8 +193,9 @@ static bool on_end_file(struct enc_file_event_data *data)
192 return true; 193 return true;
193} /* on_end_file */ 194} /* on_end_file */
194 195
195static void enc_events_callback(enum enc_events event, void *data) ICODE_ATTR; 196STATICIRAM void enc_events_callback(enum enc_events event, void *data)
196static void enc_events_callback(enum enc_events event, void *data) 197 ICODE_ATTR;
198STATICIRAM void enc_events_callback(enum enc_events event, void *data)
197{ 199{
198 if (event == ENC_WRITE_CHUNK) 200 if (event == ENC_WRITE_CHUNK)
199 { 201 {
@@ -219,8 +221,8 @@ static void enc_events_callback(enum enc_events event, void *data)
219} /* enc_events_callback */ 221} /* enc_events_callback */
220 222
221/* convert native pcm samples to aiff format samples */ 223/* convert native pcm samples to aiff format samples */
222static void chunk_to_aiff_format(uint32_t *src, uint32_t *dst) ICODE_ATTR; 224STATICIRAM void chunk_to_aiff_format(uint32_t *src, uint32_t *dst) ICODE_ATTR;
223static void chunk_to_aiff_format(uint32_t *src, uint32_t *dst) 225STATICIRAM void chunk_to_aiff_format(uint32_t *src, uint32_t *dst)
224{ 226{
225 if (num_channels == 1) 227 if (num_channels == 1)
226 { 228 {
diff --git a/apps/codecs/mp3_enc.c b/apps/codecs/mp3_enc.c
index 70b327aef2..81ea47e56b 100644
--- a/apps/codecs/mp3_enc.c
+++ b/apps/codecs/mp3_enc.c
@@ -2044,8 +2044,8 @@ bool init_mp3_encoder_engine(int sample_rate,
2044 return true; 2044 return true;
2045} 2045}
2046 2046
2047static void to_mono_mm(void) ICODE_ATTR; 2047STATICIRAM void to_mono_mm(void) ICODE_ATTR;
2048static void to_mono_mm(void) 2048STATICIRAM void to_mono_mm(void)
2049{ 2049{
2050 /* |llllllllllllllll|rrrrrrrrrrrrrrrr| => 2050 /* |llllllllllllllll|rrrrrrrrrrrrrrrr| =>
2051 * |mmmmmmmmmmmmmmmm|mmmmmmmmmmmmmmmm| 2051 * |mmmmmmmmmmmmmmmm|mmmmmmmmmmmmmmmm|
@@ -2100,8 +2100,9 @@ static inline void byte_swap_frame32(uint32_t *dst, uint32_t *src,
2100} /* byte_swap_frame32 */ 2100} /* byte_swap_frame32 */
2101#endif /* ROCKBOX_LITTLE_ENDIAN */ 2101#endif /* ROCKBOX_LITTLE_ENDIAN */
2102 2102
2103static void encode_frame(char *buffer, struct enc_chunk_hdr *chunk) ICODE_ATTR; 2103STATICIRAM void encode_frame(char *buffer, struct enc_chunk_hdr *chunk)
2104static void encode_frame(char *buffer, struct enc_chunk_hdr *chunk) 2104 ICODE_ATTR;
2105STATICIRAM void encode_frame(char *buffer, struct enc_chunk_hdr *chunk)
2105{ 2106{
2106 int gr, gr_cnt; 2107 int gr, gr_cnt;
2107 int max, min; 2108 int max, min;
@@ -2382,8 +2383,9 @@ static void on_rec_new_stream(struct enc_buffer_event_data *data)
2382 } 2383 }
2383} /* on_rec_new_stream */ 2384} /* on_rec_new_stream */
2384 2385
2385static void enc_events_callback(enum enc_events event, void *data) ICODE_ATTR; 2386STATICIRAM void enc_events_callback(enum enc_events event, void *data)
2386static void enc_events_callback(enum enc_events event, void *data) 2387 ICODE_ATTR;
2388STATICIRAM void enc_events_callback(enum enc_events event, void *data)
2387{ 2389{
2388 if (event == ENC_WRITE_CHUNK) 2390 if (event == ENC_WRITE_CHUNK)
2389 { 2391 {
diff --git a/apps/codecs/wav_enc.c b/apps/codecs/wav_enc.c
index dddca3f5c2..622ff3a6d1 100644
--- a/apps/codecs/wav_enc.c
+++ b/apps/codecs/wav_enc.c
@@ -181,8 +181,9 @@ static bool on_end_file(struct enc_file_event_data *data)
181 return true; 181 return true;
182} /* on_end_file */ 182} /* on_end_file */
183 183
184static void enc_events_callback(enum enc_events event, void *data) ICODE_ATTR; 184STATICIRAM void enc_events_callback(enum enc_events event, void *data)
185static void enc_events_callback(enum enc_events event, void *data) 185 ICODE_ATTR;
186STATICIRAM void enc_events_callback(enum enc_events event, void *data)
186{ 187{
187 if (event == ENC_WRITE_CHUNK) 188 if (event == ENC_WRITE_CHUNK)
188 { 189 {
@@ -208,8 +209,8 @@ static void enc_events_callback(enum enc_events event, void *data)
208} /* enc_events_callback */ 209} /* enc_events_callback */
209 210
210/* convert native pcm samples to wav format samples */ 211/* convert native pcm samples to wav format samples */
211static void chunk_to_wav_format(uint32_t *src, uint32_t *dst) ICODE_ATTR; 212STATICIRAM void chunk_to_wav_format(uint32_t *src, uint32_t *dst) ICODE_ATTR;
212static void chunk_to_wav_format(uint32_t *src, uint32_t *dst) 213STATICIRAM void chunk_to_wav_format(uint32_t *src, uint32_t *dst)
213{ 214{
214 if (num_channels == 1) 215 if (num_channels == 1)
215 { 216 {
diff --git a/apps/codecs/wavpack_enc.c b/apps/codecs/wavpack_enc.c
index 71222597e0..547d309159 100644
--- a/apps/codecs/wavpack_enc.c
+++ b/apps/codecs/wavpack_enc.c
@@ -99,8 +99,8 @@ static const struct riff_header riff_header =
99 /* (*) updated during ENC_END_FILE event */ 99 /* (*) updated during ENC_END_FILE event */
100}; 100};
101 101
102static void chunk_to_int32(int32_t *src) ICODE_ATTR; 102STATICIRAM void chunk_to_int32(int32_t *src) ICODE_ATTR;
103static void chunk_to_int32(int32_t *src) 103STATICIRAM void chunk_to_int32(int32_t *src)
104{ 104{
105 int32_t *src_end, *dst; 105 int32_t *src_end, *dst;
106#ifdef USE_IRAM 106#ifdef USE_IRAM
@@ -306,8 +306,9 @@ static bool on_end_file(struct enc_file_event_data *data)
306 return true; 306 return true;
307} /* on_end_file */ 307} /* on_end_file */
308 308
309static void enc_events_callback(enum enc_events event, void *data) ICODE_ATTR; 309STATICIRAM void enc_events_callback(enum enc_events event, void *data)
310static void enc_events_callback(enum enc_events event, void *data) 310 ICODE_ATTR;
311STATICIRAM void enc_events_callback(enum enc_events event, void *data)
311{ 312{
312 if (event == ENC_WRITE_CHUNK) 313 if (event == ENC_WRITE_CHUNK)
313 { 314 {
diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c
index 349f76c0ec..91aae158c6 100644
--- a/firmware/drivers/ata.c
+++ b/firmware/drivers/ata.c
@@ -98,8 +98,8 @@ static int perform_soft_reset(void);
98static int set_multiple_mode(int sectors); 98static int set_multiple_mode(int sectors);
99static int set_features(void); 99static int set_features(void);
100 100
101static int wait_for_bsy(void) ICODE_ATTR; 101STATICIRAM int wait_for_bsy(void) ICODE_ATTR;
102static int wait_for_bsy(void) 102STATICIRAM int wait_for_bsy(void)
103{ 103{
104 long timeout = current_tick + HZ*30; 104 long timeout = current_tick + HZ*30;
105 while (TIME_BEFORE(current_tick, timeout) && (ATA_STATUS & STATUS_BSY)) { 105 while (TIME_BEFORE(current_tick, timeout) && (ATA_STATUS & STATUS_BSY)) {
@@ -113,8 +113,8 @@ static int wait_for_bsy(void)
113 return 0; /* timeout */ 113 return 0; /* timeout */
114} 114}
115 115
116static int wait_for_rdy(void) ICODE_ATTR; 116STATICIRAM int wait_for_rdy(void) ICODE_ATTR;
117static int wait_for_rdy(void) 117STATICIRAM int wait_for_rdy(void)
118{ 118{
119 long timeout; 119 long timeout;
120 120
@@ -135,8 +135,8 @@ static int wait_for_rdy(void)
135 return 0; /* timeout */ 135 return 0; /* timeout */
136} 136}
137 137
138static int wait_for_start_of_transfer(void) ICODE_ATTR; 138STATICIRAM int wait_for_start_of_transfer(void) ICODE_ATTR;
139static int wait_for_start_of_transfer(void) 139STATICIRAM int wait_for_start_of_transfer(void)
140{ 140{
141 if (!wait_for_bsy()) 141 if (!wait_for_bsy())
142 return 0; 142 return 0;
@@ -144,8 +144,8 @@ static int wait_for_start_of_transfer(void)
144 return (ATA_ALT_STATUS & (STATUS_BSY|STATUS_DRQ)) == STATUS_DRQ; 144 return (ATA_ALT_STATUS & (STATUS_BSY|STATUS_DRQ)) == STATUS_DRQ;
145} 145}
146 146
147static int wait_for_end_of_transfer(void) ICODE_ATTR; 147STATICIRAM int wait_for_end_of_transfer(void) ICODE_ATTR;
148static int wait_for_end_of_transfer(void) 148STATICIRAM int wait_for_end_of_transfer(void)
149{ 149{
150 if (!wait_for_bsy()) 150 if (!wait_for_bsy())
151 return 0; 151 return 0;
@@ -166,8 +166,8 @@ static void ata_led(bool on)
166#endif 166#endif
167 167
168#ifndef ATA_OPTIMIZED_READING 168#ifndef ATA_OPTIMIZED_READING
169static void copy_read_sectors(unsigned char* buf, int wordcount) ICODE_ATTR; 169STATICIRAM void copy_read_sectors(unsigned char* buf, int wordcount) ICODE_ATTR;
170static void copy_read_sectors(unsigned char* buf, int wordcount) 170STATICIRAM void copy_read_sectors(unsigned char* buf, int wordcount)
171{ 171{
172 unsigned short tmp = 0; 172 unsigned short tmp = 0;
173 173
@@ -365,8 +365,9 @@ int ata_read_sectors(IF_MV2(int drive,)
365} 365}
366 366
367#ifndef ATA_OPTIMIZED_WRITING 367#ifndef ATA_OPTIMIZED_WRITING
368static void copy_write_sectors(const unsigned char* buf, int wordcount) ICODE_ATTR; 368STATICIRAM void copy_write_sectors(const unsigned char* buf, int wordcount)
369static void copy_write_sectors(const unsigned char* buf, int wordcount) 369 ICODE_ATTR;
370STATICIRAM void copy_write_sectors(const unsigned char* buf, int wordcount)
370{ 371{
371 if ( (unsigned long)buf & 1) 372 if ( (unsigned long)buf & 1)
372 { /* not 16-bit aligned, copy byte by byte */ 373 { /* not 16-bit aligned, copy byte by byte */
diff --git a/firmware/export/config.h b/firmware/export/config.h
index 5e127b430d..4d7a3aecdf 100644
--- a/firmware/export/config.h
+++ b/firmware/export/config.h
@@ -298,11 +298,20 @@
298#if CONFIG_CPU != SH7034 298#if CONFIG_CPU != SH7034
299#define IRAM_STEAL 299#define IRAM_STEAL
300#endif 300#endif
301#if defined(CPU_ARM)
302/* GCC quirk workaround: arm-elf-gcc treats static functions as short_call
303 * when not compiling with -ffunction-sections, even when the function has
304 * a section attribute. */
305#define STATICIRAM
306#else
307#define STATICIRAM static
308#endif
301#else 309#else
302#define ICODE_ATTR 310#define ICODE_ATTR
303#define ICONST_ATTR 311#define ICONST_ATTR
304#define IDATA_ATTR 312#define IDATA_ATTR
305#define IBSS_ATTR 313#define IBSS_ATTR
314#define STATICIRAM static
306#endif 315#endif
307 316
308#ifndef IRAM_LCDFRAMEBUFFER 317#ifndef IRAM_LCDFRAMEBUFFER
diff --git a/firmware/target/arm/sandisk/sansa-e200/ata-e200.c b/firmware/target/arm/sandisk/sansa-e200/ata-e200.c
index bfb0d27f97..56f351c001 100644
--- a/firmware/target/arm/sandisk/sansa-e200/ata-e200.c
+++ b/firmware/target/arm/sandisk/sansa-e200/ata-e200.c
@@ -234,10 +234,10 @@ void sd_wait_for_state(tSDCardInfo* card, unsigned int state)
234} 234}
235 235
236 236
237static void copy_read_sectors(unsigned char* buf, int wordcount) 237STATICIRAM void copy_read_sectors(unsigned char* buf, int wordcount)
238 NOINLINE_ATTR ICODE_ATTR; 238 NOINLINE_ATTR ICODE_ATTR;
239 239
240static void copy_read_sectors(unsigned char* buf, int wordcount) 240STATICIRAM void copy_read_sectors(unsigned char* buf, int wordcount)
241{ 241{
242 unsigned int tmp = 0; 242 unsigned int tmp = 0;
243 243
@@ -262,10 +262,10 @@ static void copy_read_sectors(unsigned char* buf, int wordcount)
262 } 262 }
263} 263}
264 264
265static void copy_write_sectors(const unsigned char* buf, int wordcount) 265STATICIRAM void copy_write_sectors(const unsigned char* buf, int wordcount)
266 NOINLINE_ATTR ICODE_ATTR; 266 NOINLINE_ATTR ICODE_ATTR;
267 267
268static void copy_write_sectors(const unsigned char* buf, int wordcount) 268STATICIRAM void copy_write_sectors(const unsigned char* buf, int wordcount)
269{ 269{
270 unsigned short tmp = 0; 270 unsigned short tmp = 0;
271 const unsigned char* bufend = buf + wordcount*2; 271 const unsigned char* bufend = buf + wordcount*2;
diff --git a/tools/configure b/tools/configure
index 799ac638f1..77884ef02c 100755
--- a/tools/configure
+++ b/tools/configure
@@ -229,7 +229,7 @@ arm7tdmicc () {
229 prefixtools arm-elf- 229 prefixtools arm-elf-
230 GCCOPTS="$CCOPTS -mcpu=arm7tdmi" 230 GCCOPTS="$CCOPTS -mcpu=arm7tdmi"
231 if test "X$1" != "Xshort"; then 231 if test "X$1" != "Xshort"; then
232 GCCOPTS="$GCCOPTS -ffunction-sections -mlong-calls" 232 GCCOPTS="$GCCOPTS -mlong-calls"
233 fi 233 fi
234 GCCOPTIMIZE="-fomit-frame-pointer" 234 GCCOPTIMIZE="-fomit-frame-pointer"
235 endian="little" 235 endian="little"
@@ -237,7 +237,7 @@ arm7tdmicc () {
237 237
238arm9tdmicc () { 238arm9tdmicc () {
239 prefixtools arm-elf- 239 prefixtools arm-elf-
240 GCCOPTS="$CCOPTS -mcpu=arm9tdmi -ffunction-sections -mlong-calls" 240 GCCOPTS="$CCOPTS -mcpu=arm9tdmi -mlong-calls"
241 GCCOPTIMIZE="-fomit-frame-pointer" 241 GCCOPTIMIZE="-fomit-frame-pointer"
242 endian="little" 242 endian="little"
243} 243}