1------------------------------------------------------------------------------
2--                                                                          --
3--                 GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS                 --
4--                                                                          --
5--                         A D A . I N T E R R U P T S                      --
6--                                                                          --
7--                                  B o d y                                 --
8--                                                                          --
9--             Copyright (C) 1991-2017, Florida State University            --
10--                     Copyright (C) 1995-2019, AdaCore                     --
11--                                                                          --
12-- GNAT is free software;  you can  redistribute it  and/or modify it under --
13-- terms of the  GNU General Public License as published  by the Free Soft- --
14-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
15-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
16-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
17-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
18--                                                                          --
19-- As a special exception under Section 7 of GPL version 3, you are granted --
20-- additional permissions described in the GCC Runtime Library Exception,   --
21-- version 3.1, as published by the Free Software Foundation.               --
22--                                                                          --
23-- You should have received a copy of the GNU General Public License and    --
24-- a copy of the GCC Runtime Library Exception along with this program;     --
25-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
26-- <http://www.gnu.org/licenses/>.                                          --
27--                                                                          --
28-- GNARL was developed by the GNARL team at Florida State University.       --
29-- Extensive contributions were provided by Ada Core Technologies, Inc.     --
30--                                                                          --
31------------------------------------------------------------------------------
32
33with Ada.Unchecked_Conversion;
34
35package body Ada.Interrupts is
36
37   package SI renames System.Interrupts;
38
39   function To_System is new Ada.Unchecked_Conversion
40     (Parameterless_Handler, SI.Parameterless_Handler);
41
42   function To_Ada is new Ada.Unchecked_Conversion
43     (SI.Parameterless_Handler, Parameterless_Handler);
44
45   --------------------
46   -- Attach_Handler --
47   --------------------
48
49   procedure Attach_Handler
50     (New_Handler : Parameterless_Handler;
51      Interrupt   : Interrupt_ID)
52   is
53   begin
54      SI.Attach_Handler
55        (To_System (New_Handler), SI.Interrupt_ID (Interrupt), False);
56   end Attach_Handler;
57
58   ---------------------
59   -- Current_Handler --
60   ---------------------
61
62   function Current_Handler
63     (Interrupt : Interrupt_ID) return Parameterless_Handler
64   is
65   begin
66      return To_Ada (SI.Current_Handler (SI.Interrupt_ID (Interrupt)));
67   end Current_Handler;
68
69   --------------------
70   -- Detach_Handler --
71   --------------------
72
73   procedure Detach_Handler (Interrupt : Interrupt_ID) is
74   begin
75      SI.Detach_Handler (SI.Interrupt_ID (Interrupt), False);
76   end Detach_Handler;
77
78   ----------------------
79   -- Exchange_Handler --
80   ----------------------
81
82   procedure Exchange_Handler
83     (Old_Handler : out Parameterless_Handler;
84      New_Handler : Parameterless_Handler;
85      Interrupt   : Interrupt_ID)
86   is
87      H : SI.Parameterless_Handler;
88
89   begin
90      SI.Exchange_Handler
91        (H, To_System (New_Handler),
92         SI.Interrupt_ID (Interrupt), False);
93      Old_Handler := To_Ada (H);
94   end Exchange_Handler;
95
96   -------------
97   -- Get_CPU --
98   -------------
99
100   function Get_CPU
101     (Interrupt : Interrupt_ID) return System.Multiprocessors.CPU_Range
102   is
103      pragma Unreferenced (Interrupt);
104
105   begin
106      --  The underlying operating system does not indicate the processor on
107      --  which the handler for Interrupt is executed.
108
109      return System.Multiprocessors.Not_A_Specific_CPU;
110   end Get_CPU;
111
112   -----------------
113   -- Is_Attached --
114   -----------------
115
116   function Is_Attached (Interrupt : Interrupt_ID) return Boolean is
117   begin
118      return SI.Is_Handler_Attached (SI.Interrupt_ID (Interrupt));
119   end Is_Attached;
120
121   -----------------
122   -- Is_Reserved --
123   -----------------
124
125   function Is_Reserved (Interrupt : Interrupt_ID) return Boolean is
126   begin
127      return SI.Is_Reserved (SI.Interrupt_ID (Interrupt));
128   end Is_Reserved;
129
130   ---------------
131   -- Reference --
132   ---------------
133
134   function Reference (Interrupt : Interrupt_ID) return System.Address is
135   begin
136      return SI.Reference (SI.Interrupt_ID (Interrupt));
137   end Reference;
138
139end Ada.Interrupts;
140