From 3267f9580f2557a17a9191e37ef3323d346435ca Mon Sep 17 00:00:00 2001 From: Gedare Bloom Date: Fri, 8 Jan 2016 16:54:20 -0500 Subject: i386: prepare for paravirtualized interrupts --- cpukit/score/cpu/i386/cpu.c | 4 ++++ cpukit/score/cpu/i386/rtems/score/cpu.h | 7 +++++++ cpukit/score/cpu/i386/rtems/score/interrupts.h | 9 ++++++++- 3 files changed, 19 insertions(+), 1 deletion(-) (limited to 'cpukit/score') diff --git a/cpukit/score/cpu/i386/cpu.c b/cpukit/score/cpu/i386/cpu.c index 17aa990f3c..f0bbad47a3 100644 --- a/cpukit/score/cpu/i386/cpu.c +++ b/cpukit/score/cpu/i386/cpu.c @@ -115,7 +115,11 @@ uint32_t _CPU_ISR_Get_level( void ) { uint32_t level; +#if !defined(RTEMS_PARAVIRT) i386_get_interrupt_level( level ); +#else + level = i386_get_interrupt_level(); +#endif return level; } diff --git a/cpukit/score/cpu/i386/rtems/score/cpu.h b/cpukit/score/cpu/i386/rtems/score/cpu.h index 84a8c97038..ce703aec49 100644 --- a/cpukit/score/cpu/i386/rtems/score/cpu.h +++ b/cpukit/score/cpu/i386/rtems/score/cpu.h @@ -395,6 +395,7 @@ extern Context_Control_fp _CPU_Null_fp_context; * + set a particular level */ +#if !defined(RTEMS_PARAVIRT) #define _CPU_ISR_Disable( _level ) i386_disable_interrupts( _level ) #define _CPU_ISR_Enable( _level ) i386_enable_interrupts( _level ) @@ -406,6 +407,12 @@ extern Context_Control_fp _CPU_Null_fp_context; if ( _new_level ) __asm__ volatile ( "cli" ); \ else __asm__ volatile ( "sti" ); \ } +#else +#define _CPU_ISR_Disable( _level ) _level = i386_disable_interrupts( ) +#define _CPU_ISR_Enable( _level ) i386_enable_interrupts( _level ) +#define _CPU_ISR_Flash( _level ) i386_flash_interrupts( _level ) +#define _CPU_ISR_Set_level( _new_level ) i386_set_interrupt_level( _new_level) +#endif uint32_t _CPU_ISR_Get_level( void ); diff --git a/cpukit/score/cpu/i386/rtems/score/interrupts.h b/cpukit/score/cpu/i386/rtems/score/interrupts.h index 9cf0c99028..3a7971c1ff 100644 --- a/cpukit/score/cpu/i386/rtems/score/interrupts.h +++ b/cpukit/score/cpu/i386/rtems/score/interrupts.h @@ -33,7 +33,7 @@ typedef int (*rtems_raw_irq_is_enabled) (const struct __rtems_raw_irq_connect_d * */ /**@{**/ - +#if !defined(RTEMS_PARAVIRT) #define i386_disable_interrupts( _level ) \ { \ __asm__ volatile ( "pushf ; \ @@ -71,6 +71,13 @@ typedef int (*rtems_raw_irq_is_enabled) (const struct __rtems_raw_irq_connect_d \ _level = (_eflags & EFLAGS_INTR_ENABLE) ? 0 : 1; \ } while (0) +#else +uint32_t i386_disable_interrupts( void ); +void i386_enable_interrupts(uint32_t level); +void i386_flash_interrupts(uint32_t level); +void i386_set_interrupt_level(uint32_t new_level); +uint32_t i386_get_interrupt_level( void ); +#endif /* PARAVIRT */ /** @} */ -- cgit v1.2.3