diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-05-31 13:59:34 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-05-31 15:20:32 +0200 |
commit | f2f211c543d97813bda5331cbf9796db18f62c33 (patch) | |
tree | 8a2a18b50ff5e0db834aa456f97806f8414da76b /cpukit/score/cpu/arm/rtems/score/cpu.h | |
parent | bsp/qoriq: Add SMP support (diff) | |
download | rtems-f2f211c543d97813bda5331cbf9796db18f62c33.tar.bz2 |
smp: Add ARM support
Diffstat (limited to 'cpukit/score/cpu/arm/rtems/score/cpu.h')
-rw-r--r-- | cpukit/score/cpu/arm/rtems/score/cpu.h | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/cpukit/score/cpu/arm/rtems/score/cpu.h b/cpukit/score/cpu/arm/rtems/score/cpu.h index e606146cb7..7020261619 100644 --- a/cpukit/score/cpu/arm/rtems/score/cpu.h +++ b/cpukit/score/cpu/arm/rtems/score/cpu.h @@ -439,6 +439,44 @@ void _CPU_Context_volatile_clobber( uintptr_t pattern ); void _CPU_Context_validate( uintptr_t pattern ); +#ifdef RTEMS_SMP + #define _CPU_Context_switch_to_first_task_smp( _context ) \ + _CPU_Context_restore( _context ) + + static inline void _ARM_Data_memory_barrier( void ) + { + __asm__ volatile ( "dmb" : : : "memory" ); + } + + static inline void _ARM_Data_synchronization_barrier( void ) + { + __asm__ volatile ( "dsb" : : : "memory" ); + } + + static inline void _ARM_Send_event( void ) + { + __asm__ volatile ( "sev" : : : "memory" ); + } + + static inline void _ARM_Wait_for_event( void ) + { + __asm__ volatile ( "wfe" : : : "memory" ); + } + + static inline void _CPU_Processor_event_broadcast( void ) + { + _ARM_Data_synchronization_barrier(); + _ARM_Send_event(); + } + + static inline void _CPU_Processor_event_receive( void ) + { + _ARM_Wait_for_event(); + _ARM_Data_memory_barrier(); + } +#endif + + static inline uint32_t CPU_swap_u32( uint32_t value ) { #if defined(__thumb2__) |