diff options
-rw-r--r-- | apps/codecs/aiff_enc.c | 14 | ||||
-rw-r--r-- | apps/codecs/mp3_enc.c | 14 | ||||
-rw-r--r-- | apps/codecs/wav_enc.c | 9 | ||||
-rw-r--r-- | apps/codecs/wavpack_enc.c | 9 | ||||
-rw-r--r-- | firmware/drivers/ata.c | 25 | ||||
-rw-r--r-- | firmware/export/config.h | 9 | ||||
-rw-r--r-- | firmware/target/arm/sandisk/sansa-e200/ata-e200.c | 12 | ||||
-rwxr-xr-x | tools/configure | 4 |
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; | |||
75 | static int32_t err IBSS_ATTR; | 75 | static 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 */ |
78 | static void uint32_h_to_ieee754_extended_be(uint8_t f[10], uint32_t l) ICODE_ATTR; | 78 | STATICIRAM void uint32_h_to_ieee754_extended_be(uint8_t f[10], uint32_t l) |
79 | static void uint32_h_to_ieee754_extended_be(uint8_t f[10], uint32_t l) | 79 | ICODE_ATTR; |
80 | STATICIRAM 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 | ||
195 | static void enc_events_callback(enum enc_events event, void *data) ICODE_ATTR; | 196 | STATICIRAM void enc_events_callback(enum enc_events event, void *data) |
196 | static void enc_events_callback(enum enc_events event, void *data) | 197 | ICODE_ATTR; |
198 | STATICIRAM 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 */ |
222 | static void chunk_to_aiff_format(uint32_t *src, uint32_t *dst) ICODE_ATTR; | 224 | STATICIRAM void chunk_to_aiff_format(uint32_t *src, uint32_t *dst) ICODE_ATTR; |
223 | static void chunk_to_aiff_format(uint32_t *src, uint32_t *dst) | 225 | STATICIRAM 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 | ||
2047 | static void to_mono_mm(void) ICODE_ATTR; | 2047 | STATICIRAM void to_mono_mm(void) ICODE_ATTR; |
2048 | static void to_mono_mm(void) | 2048 | STATICIRAM 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 | ||
2103 | static void encode_frame(char *buffer, struct enc_chunk_hdr *chunk) ICODE_ATTR; | 2103 | STATICIRAM void encode_frame(char *buffer, struct enc_chunk_hdr *chunk) |
2104 | static void encode_frame(char *buffer, struct enc_chunk_hdr *chunk) | 2104 | ICODE_ATTR; |
2105 | STATICIRAM 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 | ||
2385 | static void enc_events_callback(enum enc_events event, void *data) ICODE_ATTR; | 2386 | STATICIRAM void enc_events_callback(enum enc_events event, void *data) |
2386 | static void enc_events_callback(enum enc_events event, void *data) | 2387 | ICODE_ATTR; |
2388 | STATICIRAM 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 | ||
184 | static void enc_events_callback(enum enc_events event, void *data) ICODE_ATTR; | 184 | STATICIRAM void enc_events_callback(enum enc_events event, void *data) |
185 | static void enc_events_callback(enum enc_events event, void *data) | 185 | ICODE_ATTR; |
186 | STATICIRAM 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 */ |
211 | static void chunk_to_wav_format(uint32_t *src, uint32_t *dst) ICODE_ATTR; | 212 | STATICIRAM void chunk_to_wav_format(uint32_t *src, uint32_t *dst) ICODE_ATTR; |
212 | static void chunk_to_wav_format(uint32_t *src, uint32_t *dst) | 213 | STATICIRAM 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 | ||
102 | static void chunk_to_int32(int32_t *src) ICODE_ATTR; | 102 | STATICIRAM void chunk_to_int32(int32_t *src) ICODE_ATTR; |
103 | static void chunk_to_int32(int32_t *src) | 103 | STATICIRAM 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 | ||
309 | static void enc_events_callback(enum enc_events event, void *data) ICODE_ATTR; | 309 | STATICIRAM void enc_events_callback(enum enc_events event, void *data) |
310 | static void enc_events_callback(enum enc_events event, void *data) | 310 | ICODE_ATTR; |
311 | STATICIRAM 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); | |||
98 | static int set_multiple_mode(int sectors); | 98 | static int set_multiple_mode(int sectors); |
99 | static int set_features(void); | 99 | static int set_features(void); |
100 | 100 | ||
101 | static int wait_for_bsy(void) ICODE_ATTR; | 101 | STATICIRAM int wait_for_bsy(void) ICODE_ATTR; |
102 | static int wait_for_bsy(void) | 102 | STATICIRAM 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 | ||
116 | static int wait_for_rdy(void) ICODE_ATTR; | 116 | STATICIRAM int wait_for_rdy(void) ICODE_ATTR; |
117 | static int wait_for_rdy(void) | 117 | STATICIRAM 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 | ||
138 | static int wait_for_start_of_transfer(void) ICODE_ATTR; | 138 | STATICIRAM int wait_for_start_of_transfer(void) ICODE_ATTR; |
139 | static int wait_for_start_of_transfer(void) | 139 | STATICIRAM 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 | ||
147 | static int wait_for_end_of_transfer(void) ICODE_ATTR; | 147 | STATICIRAM int wait_for_end_of_transfer(void) ICODE_ATTR; |
148 | static int wait_for_end_of_transfer(void) | 148 | STATICIRAM 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 |
169 | static void copy_read_sectors(unsigned char* buf, int wordcount) ICODE_ATTR; | 169 | STATICIRAM void copy_read_sectors(unsigned char* buf, int wordcount) ICODE_ATTR; |
170 | static void copy_read_sectors(unsigned char* buf, int wordcount) | 170 | STATICIRAM 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 |
368 | static void copy_write_sectors(const unsigned char* buf, int wordcount) ICODE_ATTR; | 368 | STATICIRAM void copy_write_sectors(const unsigned char* buf, int wordcount) |
369 | static void copy_write_sectors(const unsigned char* buf, int wordcount) | 369 | ICODE_ATTR; |
370 | STATICIRAM 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 | ||
237 | static void copy_read_sectors(unsigned char* buf, int wordcount) | 237 | STATICIRAM void copy_read_sectors(unsigned char* buf, int wordcount) |
238 | NOINLINE_ATTR ICODE_ATTR; | 238 | NOINLINE_ATTR ICODE_ATTR; |
239 | 239 | ||
240 | static void copy_read_sectors(unsigned char* buf, int wordcount) | 240 | STATICIRAM 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 | ||
265 | static void copy_write_sectors(const unsigned char* buf, int wordcount) | 265 | STATICIRAM void copy_write_sectors(const unsigned char* buf, int wordcount) |
266 | NOINLINE_ATTR ICODE_ATTR; | 266 | NOINLINE_ATTR ICODE_ATTR; |
267 | 267 | ||
268 | static void copy_write_sectors(const unsigned char* buf, int wordcount) | 268 | STATICIRAM 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 | ||
238 | arm9tdmicc () { | 238 | arm9tdmicc () { |
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 | } |