RTEMS CPU Kit with SuperCore  4.11.3
interrupts.h
Go to the documentation of this file.
1 
9 /*
10  * COPYRIGHT (c) 1998 valette@crf.canon.fr
11  *
12  * The license and distribution terms for this file may be
13  * found in the file LICENSE in this distribution or at
14  * http://www.rtems.org/license/LICENSE.
15  *
16  * Applications must not include this file directly.
17  */
18 
19 #ifndef _RTEMS_SCORE_INTERRUPTS_H
20 #define _RTEMS_SCORE_INTERRUPTS_H
21 
22 #ifndef ASM
23 
24 struct __rtems_raw_irq_connect_data__;
25 
26 typedef void (*rtems_raw_irq_hdl) (void);
27 typedef void (*rtems_raw_irq_enable) (const struct __rtems_raw_irq_connect_data__*);
28 typedef void (*rtems_raw_irq_disable) (const struct __rtems_raw_irq_connect_data__*);
29 typedef int (*rtems_raw_irq_is_enabled) (const struct __rtems_raw_irq_connect_data__*);
30 
37 #define i386_disable_interrupts( _level ) \
38  { \
39  __asm__ volatile ( "pushf ; \
40  cli ; \
41  pop %0" \
42  : "=rm" ((_level)) \
43  ); \
44  }
45 
46 #define i386_enable_interrupts( _level ) \
47  { \
48  __asm__ volatile ( "push %0 ; \
49  popf" \
50  : : "rm" ((_level)) : "cc" \
51  ); \
52  }
53 
54 #define i386_flash_interrupts( _level ) \
55  { \
56  __asm__ volatile ( "push %0 ; \
57  popf ; \
58  cli" \
59  : : "rm" ((_level)) : "cc" \
60  ); \
61  }
62 
63 #define i386_get_interrupt_level( _level ) \
64  do { \
65  register uint32_t _eflags; \
66  \
67  __asm__ volatile ( "pushf ; \
68  pop %0" \
69  : "=rm" ((_eflags)) \
70  ); \
71  \
72  _level = (_eflags & EFLAGS_INTR_ENABLE) ? 0 : 1; \
73  } while (0)
74 
75 #define _CPU_ISR_Disable( _level ) i386_disable_interrupts( _level )
76 #define _CPU_ISR_Enable( _level ) i386_enable_interrupts( _level )
77 
80 #endif
81 #endif