diff options
Diffstat (limited to 'cpukit/score/cpu/arm/armv7m-multitasking-start-stop.c')
-rw-r--r-- | cpukit/score/cpu/arm/armv7m-multitasking-start-stop.c | 36 |
1 files changed, 5 insertions, 31 deletions
diff --git a/cpukit/score/cpu/arm/armv7m-multitasking-start-stop.c b/cpukit/score/cpu/arm/armv7m-multitasking-start-stop.c index f3e96e343c..864bb53379 100644 --- a/cpukit/score/cpu/arm/armv7m-multitasking-start-stop.c +++ b/cpukit/score/cpu/arm/armv7m-multitasking-start-stop.c @@ -1,14 +1,14 @@ /** * @file * - * @brief ARMV7M Start and Stop Multitasking + * @brief ARMV7M Start Multitasking */ /* - * Copyright (c) 2011 Sebastian Huber. All rights reserved. + * Copyright (c) 2011-2014 Sebastian Huber. All rights reserved. * * embedded brains GmbH - * Obere Lagerstr. 30 + * Dornierstr. 4 * 82178 Puchheim * Germany * <rtems@embedded-brains.de> @@ -27,18 +27,14 @@ #ifdef ARM_MULTILIB_ARCH_V7M void __attribute__((naked)) _ARMV7M_Start_multitasking( - Context_Control *bsp, Context_Control *heir ) { __asm__ volatile ( - /* Store BSP context */ - "stm r0, {r4-r11, lr}\n" - "str sp, [r0, %[spctxoff]]\n" /* Restore heir context */ - "ldr r2, [r1, %[spctxoff]]\n" + "ldr r2, [r0, %[spctxoff]]\n" "msr psp, r2\n" - "ldm r1, {r4-r11, lr}\n" + "ldm r0, {r4-r11, lr}\n" /* Enable process stack pointer (PSP) */ "mrs r2, control\n" "orr r2, #0x2\n" @@ -50,26 +46,4 @@ void __attribute__((naked)) _ARMV7M_Start_multitasking( ); } -void __attribute__((naked)) _ARMV7M_Stop_multitasking( Context_Control *bsp ) -{ - __asm__ volatile ( - /* Disable interrupts */ - "mov r2, #0x80\n" - "msr basepri_max, r2\n" - /* Restore BSP context */ - "ldr r2, [r0, %[spctxoff]]\n" - "msr msp, r2\n" - "ldm r0, {r4-r11, lr}\n" - /* Disable process stack pointer (PSP) */ - "mrs r2, control\n" - "bic r2, #0x2\n" - "msr control, r2\n" - /* Return to BSP */ - "bx lr\n" - : - : [spctxoff] "J" (offsetof(Context_Control, register_sp)) - ); - __builtin_unreachable(); -} - #endif /* ARM_MULTILIB_ARCH_V7M */ |