File : s-intman-vxworks.adb


   1 ------------------------------------------------------------------------------
   2 --                                                                          --
   3 --                 GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS                 --
   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 --                                                                          --
   9 --          Copyright (C) 1992-2010, Free Software Foundation, Inc.         --
  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- --
  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- --
  15 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
  16 -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
  17 --                                                                          --
  18 --                                                                          --
  19 --                                                                          --
  20 --                                                                          --
  21 --                                                                          --
  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/>.                                          --
  26 --                                                                          --
  27 -- GNARL was developed by the GNARL team at Florida State University.       --
  28 -- Extensive contributions were provided by Ada Core Technologies, Inc.     --
  29 --                                                                          --
  30 ------------------------------------------------------------------------------
  31 
  32 --  This is the VxWorks version of this package
  33 
  34 --  It is simpler than other versions because the Ada interrupt handling
  35 --  mechanisms are used for hardware interrupts rather than signals.
  36 
  37 package body System.Interrupt_Management is
  38 
  39    use System.OS_Interface;
  40    use type Interfaces.C.int;
  41 
  42    -----------------------
  43    -- Local Subprograms --
  44    -----------------------
  45 
  46    function State (Int : Interrupt_ID) return Character;
  47    pragma Import (C, State, "__gnat_get_interrupt_state");
  48    --  Get interrupt state. Defined in init.c The input argument is the
  49    --  hardware interrupt number, and the result is one of the following:
  50 
  51    Runtime : constant Character := 'r';
  52    Default : constant Character := 's';
  53    --    'n'   this interrupt not set by any Interrupt_State pragma
  54    --    'u'   Interrupt_State pragma set state to User
  55    --    'r'   Interrupt_State pragma set state to Runtime
  56    --    's'   Interrupt_State pragma set state to System (use "default"
  57    --           system handler)
  58 
  59    ----------------
  60    -- Initialize --
  61    ----------------
  62 
  63    Initialized : Boolean := False;
  64    --  Set to True once Initialize is called, further calls have no effect
  65 
  66    procedure Initialize is
  67 
  68    begin
  69       if Initialized then
  70          return;
  71       end if;
  72 
  73       Initialized := True;
  74 
  75       --  Change this if you want to use another signal for task abort.
  76       --  SIGTERM might be a good one.
  77 
  78       Abort_Task_Interrupt := SIGABRT;
  79 
  80       --  Initialize hardware interrupt handling
  81 
  82       pragma Assert (Reserve = (Interrupt_ID'Range => False));
  83 
  84       --  Check all interrupts for state that requires keeping them reserved
  85 
  86       for J in Interrupt_ID'Range loop
  87          if State (J) = Default or else State (J) = Runtime then
  88             Reserve (J) := True;
  89          end if;
  90       end loop;
  91 
  92    end Initialize;
  93 
  94 end System.Interrupt_Management;