1------------------------------------------------------------------------------ 2-- -- 3-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS -- 4-- -- 5-- SYSTEM.INTERRUPT_MANAGEMENT.OPERATIONS -- 6-- -- 7-- B o d y -- 8-- -- 9-- Copyright (C) 1991-2017, Florida State University -- 10-- Copyright (C) 1995-2018, 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 33-- This is a VxWorks version of this package. Many operations are null as this 34-- package supports the use of Ada interrupt handling facilities for signals, 35-- while those facilities are used for hardware interrupts on these targets. 36 37with Ada.Exceptions; 38 39with Interfaces.C; 40 41with System.OS_Interface; 42 43package body System.Interrupt_Management.Operations is 44 45 use Ada.Exceptions; 46 use Interfaces.C; 47 use System.OS_Interface; 48 49 ---------------------------- 50 -- Thread_Block_Interrupt -- 51 ---------------------------- 52 53 procedure Thread_Block_Interrupt 54 (Interrupt : Interrupt_ID) 55 is 56 pragma Unreferenced (Interrupt); 57 begin 58 Raise_Exception 59 (Program_Error'Identity, 60 "Thread_Block_Interrupt unimplemented"); 61 end Thread_Block_Interrupt; 62 63 ------------------------------ 64 -- Thread_Unblock_Interrupt -- 65 ------------------------------ 66 67 procedure Thread_Unblock_Interrupt 68 (Interrupt : Interrupt_ID) 69 is 70 pragma Unreferenced (Interrupt); 71 begin 72 Raise_Exception 73 (Program_Error'Identity, 74 "Thread_Unblock_Interrupt unimplemented"); 75 end Thread_Unblock_Interrupt; 76 77 ------------------------ 78 -- Set_Interrupt_Mask -- 79 ------------------------ 80 81 procedure Set_Interrupt_Mask (Mask : access Interrupt_Mask) is 82 pragma Unreferenced (Mask); 83 begin 84 null; 85 end Set_Interrupt_Mask; 86 87 procedure Set_Interrupt_Mask 88 (Mask : access Interrupt_Mask; 89 OMask : access Interrupt_Mask) 90 is 91 pragma Unreferenced (Mask, OMask); 92 begin 93 Raise_Exception 94 (Program_Error'Identity, 95 "Set_Interrupt_Mask unimplemented"); 96 end Set_Interrupt_Mask; 97 98 ------------------------ 99 -- Get_Interrupt_Mask -- 100 ------------------------ 101 102 procedure Get_Interrupt_Mask (Mask : access Interrupt_Mask) is 103 pragma Unreferenced (Mask); 104 begin 105 Raise_Exception 106 (Program_Error'Identity, 107 "Get_Interrupt_Mask unimplemented"); 108 end Get_Interrupt_Mask; 109 110 -------------------- 111 -- Interrupt_Wait -- 112 -------------------- 113 114 function Interrupt_Wait 115 (Mask : access Interrupt_Mask) return Interrupt_ID 116 is 117 pragma Unreferenced (Mask); 118 begin 119 Raise_Exception 120 (Program_Error'Identity, 121 "Interrupt_Wait unimplemented"); 122 return 0; 123 end Interrupt_Wait; 124 125 ---------------------------- 126 -- Install_Default_Action -- 127 ---------------------------- 128 129 procedure Install_Default_Action (Interrupt : Interrupt_ID) is 130 pragma Unreferenced (Interrupt); 131 begin 132 Raise_Exception 133 (Program_Error'Identity, 134 "Install_Default_Action unimplemented"); 135 end Install_Default_Action; 136 137 --------------------------- 138 -- Install_Ignore_Action -- 139 --------------------------- 140 141 procedure Install_Ignore_Action (Interrupt : Interrupt_ID) is 142 pragma Unreferenced (Interrupt); 143 begin 144 Raise_Exception 145 (Program_Error'Identity, 146 "Install_Ignore_Action unimplemented"); 147 end Install_Ignore_Action; 148 149 ------------------------- 150 -- Fill_Interrupt_Mask -- 151 ------------------------- 152 153 procedure Fill_Interrupt_Mask (Mask : access Interrupt_Mask) is 154 pragma Unreferenced (Mask); 155 begin 156 Raise_Exception 157 (Program_Error'Identity, 158 "Fill_Interrupt_Mask unimplemented"); 159 end Fill_Interrupt_Mask; 160 161 -------------------------- 162 -- Empty_Interrupt_Mask -- 163 -------------------------- 164 165 procedure Empty_Interrupt_Mask (Mask : access Interrupt_Mask) is 166 pragma Unreferenced (Mask); 167 begin 168 Raise_Exception 169 (Program_Error'Identity, 170 "Empty_Interrupt_Mask unimplemented"); 171 end Empty_Interrupt_Mask; 172 173 --------------------------- 174 -- Add_To_Interrupt_Mask -- 175 --------------------------- 176 177 procedure Add_To_Interrupt_Mask 178 (Mask : access Interrupt_Mask; 179 Interrupt : Interrupt_ID) 180 is 181 pragma Unreferenced (Mask, Interrupt); 182 begin 183 Raise_Exception 184 (Program_Error'Identity, 185 "Add_To_Interrupt_Mask unimplemented"); 186 end Add_To_Interrupt_Mask; 187 188 -------------------------------- 189 -- Delete_From_Interrupt_Mask -- 190 -------------------------------- 191 192 procedure Delete_From_Interrupt_Mask 193 (Mask : access Interrupt_Mask; 194 Interrupt : Interrupt_ID) 195 is 196 pragma Unreferenced (Mask, Interrupt); 197 begin 198 Raise_Exception 199 (Program_Error'Identity, 200 "Delete_From_Interrupt_Mask unimplemented"); 201 end Delete_From_Interrupt_Mask; 202 203 --------------- 204 -- Is_Member -- 205 --------------- 206 207 function Is_Member 208 (Mask : access Interrupt_Mask; 209 Interrupt : Interrupt_ID) return Boolean 210 is 211 pragma Unreferenced (Mask, Interrupt); 212 begin 213 Raise_Exception 214 (Program_Error'Identity, 215 "Is_Member unimplemented"); 216 return False; 217 end Is_Member; 218 219 ------------------------- 220 -- Copy_Interrupt_Mask -- 221 ------------------------- 222 223 procedure Copy_Interrupt_Mask 224 (X : out Interrupt_Mask; 225 Y : Interrupt_Mask) is 226 pragma Unreferenced (X, Y); 227 begin 228 Raise_Exception 229 (Program_Error'Identity, 230 "Copy_Interrupt_Mask unimplemented"); 231 end Copy_Interrupt_Mask; 232 233 ---------------------------- 234 -- Interrupt_Self_Process -- 235 ---------------------------- 236 237 procedure Interrupt_Self_Process (Interrupt : Interrupt_ID) is 238 Result : Interfaces.C.int; 239 begin 240 Result := kill (getpid, Signal (Interrupt)); 241 pragma Assert (Result = 0); 242 end Interrupt_Self_Process; 243 244 -------------------------- 245 -- Setup_Interrupt_Mask -- 246 -------------------------- 247 248 procedure Setup_Interrupt_Mask is 249 begin 250 -- Nothing to be done. Ada interrupt facilities on VxWorks do not use 251 -- signals but hardware interrupts. Therefore, interrupt management does 252 -- not need anything related to signal masking. Note that this procedure 253 -- cannot raise an exception (as some others in this package) because 254 -- the generic implementation of the Timer_Server and timing events make 255 -- explicit calls to this routine to make ensure proper signal masking 256 -- on targets needed that. 257 258 null; 259 end Setup_Interrupt_Mask; 260 261end System.Interrupt_Management.Operations; 262