diff options
author | Thomas Martitz <kugel@rockbox.org> | 2012-01-04 18:07:21 +0100 |
---|---|---|
committer | Thomas Martitz <kugel@rockbox.org> | 2012-01-22 18:46:44 +0100 |
commit | 991ae1e39553172a7dd6cd8c634aebfce892e261 (patch) | |
tree | 672a4583af663def399c4fefdbad060605397fbc /firmware/target/arm/system-arm.h | |
parent | eaa83bd64775b87e943d345e2810deed44408776 (diff) | |
download | rockbox-991ae1e39553172a7dd6cd8c634aebfce892e261.tar.gz rockbox-991ae1e39553172a7dd6cd8c634aebfce892e261.zip |
Create fimrware/asm directory for assembly optimized stuff.
This dir is suitable for stuff that doesn't fit the target tree, e.g. because
it also builds on hosted or otherwise. It also has a generic subfolder for
fallback C implementations so that not all archs need to provide asm files.
SOURCES should only contain "foo.c" where foo.c includes the specific
<arch>/foo.c files from the subdirs using the preprocessor. This way automatic
selection of asm versions or generic C verion is possible.
For the start, the thread support files are moved, since ASM threads can
be used on hosted platforms as well. Since core_sleep() remains platform
specific it's moved to the corresponding system.h headers.
Change-Id: Iebff272f3407a6eaafeb7656ceb0ae9eca3f7cb9
Diffstat (limited to 'firmware/target/arm/system-arm.h')
-rw-r--r-- | firmware/target/arm/system-arm.h | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/firmware/target/arm/system-arm.h b/firmware/target/arm/system-arm.h index ffce77a176..719ec82f1b 100644 --- a/firmware/target/arm/system-arm.h +++ b/firmware/target/arm/system-arm.h | |||
@@ -347,4 +347,31 @@ static inline uint32_t swaw32_hw(uint32_t value) | |||
347 | 347 | ||
348 | } | 348 | } |
349 | 349 | ||
350 | #if defined(CPU_TCC780X) || defined(CPU_TCC77X) /* Single core only for now */ \ | ||
351 | || CONFIG_CPU == IMX31L || CONFIG_CPU == DM320 || CONFIG_CPU == AS3525 \ | ||
352 | || CONFIG_CPU == S3C2440 || CONFIG_CPU == S5L8701 || CONFIG_CPU == AS3525v2 \ | ||
353 | || CONFIG_CPU == S5L8702 | ||
354 | /* Use the generic ARMv4/v5/v6 wait for IRQ */ | ||
355 | static inline void core_sleep(void) | ||
356 | { | ||
357 | asm volatile ( | ||
358 | "mcr p15, 0, %0, c7, c0, 4 \n" /* Wait for interrupt */ | ||
359 | #if CONFIG_CPU == IMX31L | ||
360 | "nop\n nop\n nop\n nop\n nop\n" /* Clean out the pipes */ | ||
361 | #endif | ||
362 | : : "r"(0) | ||
363 | ); | ||
364 | enable_irq(); | ||
365 | } | ||
366 | #else | ||
367 | /* Skip this if special code is required and implemented */ | ||
368 | #if !(defined(CPU_PP)) && CONFIG_CPU != RK27XX && CONFIG_CPU != IMX233 | ||
369 | static inline void core_sleep(void) | ||
370 | { | ||
371 | /* TODO: core_sleep not implemented, battery life will be decreased */ | ||
372 | enable_irq(); | ||
373 | } | ||
374 | #endif /* CPU_PP */ | ||
375 | #endif | ||
376 | |||
350 | #endif /* SYSTEM_ARM_H */ | 377 | #endif /* SYSTEM_ARM_H */ |