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 03/12/18 at 19:46:29

Rework i386 Paravirtualization to have paravirt.h

  • Property mode set to 100644
File size: 2.0 KB
RevLine 
[6d6891e]1/**
[d9e0006]2 * @file
3 *
4 * @brief Intel I386 Interrupt Macros
5 *
6 * Formerly contained in and extracted from libcpu/i386/cpu.h
[6d6891e]7 */
8
[a324355]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
[c499856]14 *  http://www.rtems.org/license/LICENSE.
[84c53452]15 *
[a324355]16 *  Applications must not include this file directly.
17 */
18
[7f70d1b7]19#ifndef _RTEMS_SCORE_INTERRUPTS_H
20#define _RTEMS_SCORE_INTERRUPTS_H
[a324355]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
[d9e0006]31/**
32 * @name Interrupt Level Macros
33 *
[a324355]34 */
[b697bc6]35/**@{**/
[7c39cab]36#if !defined(I386_DISABLE_INLINE_ISR_DISABLE_ENABLE)
[a324355]37#define i386_disable_interrupts( _level ) \
38  { \
[c05f6238]39    __asm__ volatile ( "pushf ; \
[a324355]40                    cli ; \
41                    pop %0" \
42                   : "=rm" ((_level)) \
43    ); \
44  }
45
46#define i386_enable_interrupts( _level )  \
47  { \
[c05f6238]48    __asm__ volatile ( "push %0 ; \
[a324355]49                    popf" \
50                    : : "rm" ((_level)) : "cc" \
51    ); \
52  }
53
54#define i386_flash_interrupts( _level ) \
55  { \
[c05f6238]56    __asm__ volatile ( "push %0 ; \
[a324355]57                    popf ; \
58                    cli" \
59                    : : "rm" ((_level)) : "cc" \
60    ); \
61  }
62
63#define i386_get_interrupt_level( _level ) \
64  do { \
[e6aeabd]65    register uint32_t   _eflags; \
[a324355]66    \
[c05f6238]67    __asm__ volatile ( "pushf ; \
[a324355]68                    pop %0" \
69                    : "=rm" ((_eflags)) \
70    ); \
71    \
72    _level = (_eflags & EFLAGS_INTR_ENABLE) ? 0 : 1; \
73  } while (0)
[3267f95]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 */
[a324355]81
[d9e0006]82/** @} */
83
[a324355]84#endif
85#endif
Note: See TracBrowser for help on using the repository browser.