]>
Commit | Line | Data |
---|---|---|
e6e7bf38 | 1 | ------------------------------------------------------------------------------ |
2 | -- -- | |
96d7aa32 | 3 | -- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS -- |
e6e7bf38 | 4 | -- -- |
5 | -- S Y S T E M . I N T E R R U P T _ M A N A G E M E N T -- | |
6 | -- -- | |
7 | -- B o d y -- | |
8 | -- -- | |
6e2e029f | 9 | -- Copyright (C) 1992-2017, Free Software Foundation, Inc. -- |
e6e7bf38 | 10 | -- -- |
11 | -- GNARL is free software; you can redistribute it and/or modify it under -- | |
12 | -- terms of the GNU General Public License as published by the Free Soft- -- | |
6bc9506f | 13 | -- ware Foundation; either version 3, or (at your option) any later ver- -- |
14 | -- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- | |
e6e7bf38 | 15 | -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- |
6bc9506f | 16 | -- or FITNESS FOR A PARTICULAR PURPOSE. -- |
17 | -- -- | |
18 | -- As a special exception under Section 7 of GPL version 3, you are granted -- | |
19 | -- additional permissions described in the GCC Runtime Library Exception, -- | |
20 | -- version 3.1, as published by the Free Software Foundation. -- | |
21 | -- -- | |
f03f06a2 | 22 | -- You should have received a copy of the GNU General Public License and -- |
23 | -- a copy of the GCC Runtime Library Exception along with this program; -- | |
24 | -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- | |
25 | -- <http://www.gnu.org/licenses/>. -- | |
e6e7bf38 | 26 | -- -- |
83f07f11 | 27 | -- GNARL was developed by the GNARL team at Florida State University. -- |
28 | -- Extensive contributions were provided by Ada Core Technologies, Inc. -- | |
e6e7bf38 | 29 | -- -- |
30 | ------------------------------------------------------------------------------ | |
31 | ||
9925603e | 32 | -- This is the VxWorks version of this package |
e6e7bf38 | 33 | |
c7b7b140 | 34 | -- It is simpler than other versions because the Ada interrupt handling |
35 | -- mechanisms are used for hardware interrupts rather than signals. | |
e6e7bf38 | 36 | |
e6e7bf38 | 37 | package body System.Interrupt_Management is |
38 | ||
e6e7bf38 | 39 | use System.OS_Interface; |
e6e7bf38 | 40 | |
cf428c6c | 41 | ----------------------- |
42 | -- Local Subprograms -- | |
43 | ----------------------- | |
e6e7bf38 | 44 | |
51e69f04 | 45 | function State (Int : Interrupt_ID) return Character; |
46 | pragma Import (C, State, "__gnat_get_interrupt_state"); | |
9925603e | 47 | -- Get interrupt state. Defined in init.c The input argument is the |
c7b7b140 | 48 | -- hardware interrupt number, and the result is one of the following: |
51e69f04 | 49 | |
50 | Runtime : constant Character := 'r'; | |
51 | Default : constant Character := 's'; | |
52 | -- 'n' this interrupt not set by any Interrupt_State pragma | |
53 | -- 'u' Interrupt_State pragma set state to User | |
54 | -- 'r' Interrupt_State pragma set state to Runtime | |
55 | -- 's' Interrupt_State pragma set state to System (use "default" | |
56 | -- system handler) | |
57 | ||
51e69f04 | 58 | ---------------- |
59 | -- Initialize -- | |
60 | ---------------- | |
9dfe12ae | 61 | |
51e69f04 | 62 | Initialized : Boolean := False; |
9434216a | 63 | -- Set to True once Initialize is called, further calls have no effect |
9dfe12ae | 64 | |
51e69f04 | 65 | procedure Initialize is |
9434216a | 66 | |
e6e7bf38 | 67 | begin |
51e69f04 | 68 | if Initialized then |
69 | return; | |
70 | end if; | |
71 | ||
72 | Initialized := True; | |
9dfe12ae | 73 | |
e6e7bf38 | 74 | -- Change this if you want to use another signal for task abort. |
75 | -- SIGTERM might be a good one. | |
76 | ||
d1470585 | 77 | Abort_Task_Interrupt := SIGABRT; |
9dfe12ae | 78 | |
9dfe12ae | 79 | -- Initialize hardware interrupt handling |
80 | ||
81 | pragma Assert (Reserve = (Interrupt_ID'Range => False)); | |
82 | ||
83 | -- Check all interrupts for state that requires keeping them reserved | |
84 | ||
85 | for J in Interrupt_ID'Range loop | |
86 | if State (J) = Default or else State (J) = Runtime then | |
87 | Reserve (J) := True; | |
88 | end if; | |
89 | end loop; | |
cf428c6c | 90 | |
51e69f04 | 91 | end Initialize; |
92 | ||
e6e7bf38 | 93 | end System.Interrupt_Management; |