summaryrefslogtreecommitdiffstats
path: root/c/src/exec/rtems/headers/intr.h
blob: 168806bff2f09ed7fa6138c44e8a76f6d7c72019 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/*  intr.h
 *
 *  This include file contains all the constants and structures associated
 *  with the Interrupt Manager.
 *
 *  COPYRIGHT (c) 1989-1998.
 *  On-Line Applications Research Corporation (OAR).
 *  Copyright assigned to U.S. Government, 1994.
 *
 *  The license and distribution terms for this file may be
 *  found in the file LICENSE in this distribution or at
 *  http://www.OARcorp.com/rtems/license.html.
 *
 *  $Id$
 */

#ifndef __RTEMS_INTERRUPT_h
#define __RTEMS_INTERRUPT_h

#ifdef __cplusplus
extern "C" {
#endif

#include <rtems/score/isr.h>

/*
 *  Interrupt level type
 */

typedef ISR_Level rtems_interrupt_level;

/*
 *  The following type defines the control block used to manage
 *  the vectors.
 */
 
typedef ISR_Vector_number rtems_vector_number;

/*
 *  Return type for ISR Handler
 */
 
typedef void rtems_isr;

/*
 *  Pointer to an ISR Handler
 */
 
typedef rtems_isr ( *rtems_isr_entry )(
                 rtems_vector_number
             );

/*
 *  _Interrupt_Manager_initialization
 *
 *  DESCRIPTION:
 *
 *  This routine initializes the interrupt manager.
 *
 */

void _Interrupt_Manager_initialization( void );

/*
 *  rtems_interrupt_catch
 *
 *  DESCRIPTION:
 *
 *  This routine implements the rtems_interrupt_catch directive.  This
 *  directive installs new_isr_handler as the RTEMS interrupt service
 *  routine for vector.  The previous RTEMS interrupt service
 *  routine is returned in old_isr_handler.
 */

rtems_status_code rtems_interrupt_catch(
  rtems_isr_entry      new_isr_handler,
  rtems_vector_number  vector,
  rtems_isr_entry     *old_isr_handler
);

/*
 *  rtems_interrupt_disable
 *
 *  DESCRIPTION:
 *
 *  This routine disables all maskable interrupts and returns the
 *  previous level in _isr_cookie.
 */

#define rtems_interrupt_disable( _isr_cookie ) \
    _ISR_Disable(_isr_cookie)
        
/*
 *  rtems_interrupt_enable
 *
 *  DESCRIPTION:
 *
 *  This routine enables maskable interrupts to the level indicated
 *  _isr_cookie.
 */

#define rtems_interrupt_enable( _isr_cookie ) \
    _ISR_Enable(_isr_cookie)
        
/*
 *  rtems_interrupt_flash
 *
 *  DESCRIPTION:
 *
 *  This routine temporarily enables maskable interrupts to the
 *  level in _isr_cookie before redisabling them.
 */

#define rtems_interrupt_flash( _isr_cookie ) \
    _ISR_Flash(_isr_cookie)

/*
 *  rtems_interrupt_is_in_progress
 *
 *  DESCRIPTION:
 *
 *  This function returns TRUE if the processor is currently servicing
 *  an interrupt and FALSE otherwise.   A return value of TRUE indicates
 *  that the caller is an interrupt service routine, NOT a thread.  The
 *  directives available to an interrupt service routine are restricted.
 */
 
#define rtems_interrupt_is_in_progress() \
    _ISR_Is_in_progress()

/*
 *  rtems_interrupt_cause
 *
 *  DESCRIPTION:
 *
 *  This routine generates an interrupt.
 *
 *  NOTE:  No implementation.
 */

#define rtems_interrupt_cause( _interrupt_to_cause )

/*
 *  rtems_interrupt_cause
 *
 *  DESCRIPTION:
 *
 *  This routine clears the specified interrupt.
 *
 *  NOTE:  No implementation.
 */

#define rtems_interrupt_clear( _interrupt_to_clear )

#ifdef __cplusplus
}
#endif

#endif
/* end of include file */