source: rtems/cpukit/score/cpu/i386/include/rtems/score/interrupts.h @ 7c39cab

5
Last change on this file since 7c39cab was 7c39cab, checked in by Joel Sherrill <joel@…>, on Mar 12, 2018 at 7:46:29 PM

Rework i386 Paravirtualization to have paravirt.h

  • Property mode set to 100644
File size: 2.0 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#if !defined(I386_DISABLE_INLINE_ISR_DISABLE_ENABLE)
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#else
75uint32_t i386_disable_interrupts( void );
76void i386_enable_interrupts(uint32_t level);
77void i386_flash_interrupts(uint32_t level);
78void i386_set_interrupt_level(uint32_t new_level);
79uint32_t i386_get_interrupt_level( void );
80#endif /* PARAVIRT */
81
82/** @} */
83
84#endif
85#endif
Note: See TracBrowser for help on using the repository browser.