source: rtems/cpukit/score/cpu/i386/rtems/score/interrupts.h @ c499856

4.115
Last change on this file since c499856 was c499856, checked in by Chris Johns <chrisj@…>, on 03/20/14 at 21:10:47

Change all references of rtems.com to rtems.org.

  • Property mode set to 100644
File size: 1.9 KB
Line 
1/**
2 * @file
3 *
4 * @brief Intel I386 Interrupt Macros
5 *
6 * Formerly contained in and extracted from libcpu/i386/cpu.h
7 */
8
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
24struct  __rtems_raw_irq_connect_data__;
25
26typedef void (*rtems_raw_irq_hdl)               (void);
27typedef void (*rtems_raw_irq_enable)            (const struct __rtems_raw_irq_connect_data__*);
28typedef void (*rtems_raw_irq_disable)           (const struct __rtems_raw_irq_connect_data__*);
29typedef int  (*rtems_raw_irq_is_enabled)        (const struct __rtems_raw_irq_connect_data__*);
30
31/**
32 * @name Interrupt Level Macros
33 *
34 */
35/**@{**/
36
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
78/** @} */
79
80#endif
81#endif
Note: See TracBrowser for help on using the repository browser.