diff options
Diffstat (limited to 'cpukit/score/cpu/powerpc/rtems/powerpc/registers.h')
-rw-r--r-- | cpukit/score/cpu/powerpc/rtems/powerpc/registers.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/cpukit/score/cpu/powerpc/rtems/powerpc/registers.h b/cpukit/score/cpu/powerpc/rtems/powerpc/registers.h index 5502120d53..c982e460fd 100644 --- a/cpukit/score/cpu/powerpc/rtems/powerpc/registers.h +++ b/cpukit/score/cpu/powerpc/rtems/powerpc/registers.h @@ -620,6 +620,14 @@ static inline uint32_t ppc_interrupt_get_disable_mask( void ) static inline uint32_t ppc_interrupt_disable( void ) { uint32_t level; + +#if defined(__PPC_CPU_E6500__) + __asm__ volatile ( + "mfmsr %0;" + "wrteei 0" + : "=r" (level) + ); +#else uint32_t mask; __asm__ volatile ( @@ -630,17 +638,26 @@ static inline uint32_t ppc_interrupt_disable( void ) "mtmsr %1" : "=r" (level), "=r" (mask) ); +#endif return level; } static inline void ppc_interrupt_enable( uint32_t level ) { +#if defined(__PPC_CPU_E6500__) + __asm__ volatile ( + "wrtee %0" + : + : "r" (level) + ); +#else __asm__ volatile ( "mtmsr %0" : : "r" (level) ); +#endif } static inline void ppc_interrupt_flash( uint32_t level ) |