diff options
Diffstat (limited to 'gcc/ada/5qosinte.ads')
-rw-r--r-- | gcc/ada/5qosinte.ads | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/gcc/ada/5qosinte.ads b/gcc/ada/5qosinte.ads new file mode 100644 index 00000000000..7bc4d2c8088 --- /dev/null +++ b/gcc/ada/5qosinte.ads @@ -0,0 +1,188 @@ +------------------------------------------------------------------------------ +-- -- +-- GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS -- +-- -- +-- S Y S T E M . O S _ I N T E R F A C E -- +-- -- +-- S p e c -- +-- -- +-- $Revision: 1.8 $ +-- -- +-- Copyright (C) 1991-2001 Florida State University -- +-- -- +-- GNARL is free software; you can redistribute it and/or modify it under -- +-- terms of the GNU General Public License as published by the Free Soft- -- +-- ware Foundation; either version 2, or (at your option) any later ver- -- +-- sion. GNARL is distributed in the hope that it will be useful, but WITH- -- +-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- +-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- +-- for more details. You should have received a copy of the GNU General -- +-- Public License distributed with GNARL; see file COPYING. If not, write -- +-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -- +-- MA 02111-1307, USA. -- +-- -- +-- As a special exception, if other files instantiate generics from this -- +-- unit, or you link this unit with other files to produce an executable, -- +-- this unit does not by itself cause the resulting executable to be -- +-- covered by the GNU General Public License. This exception does not -- +-- however invalidate any other reasons why the executable file might be -- +-- covered by the GNU Public License. -- +-- -- +-- GNARL was developed by the GNARL team at Florida State University. It is -- +-- now maintained by Ada Core Technologies Inc. in cooperation with Florida -- +-- State University (http://www.gnat.com). -- +-- -- +------------------------------------------------------------------------------ + +-- RT Linux version. + +-- This package encapsulates all direct interfaces to OS services +-- that are needed by children of System. + +-- PLEASE DO NOT add any with-clauses to this package +-- or remove the pragma Elaborate_Body. +-- It is designed to be a bottom-level (leaf) package. + +with Interfaces.C; + +package System.OS_Interface is + + pragma Preelaborate; + + subtype int is Interfaces.C.int; + subtype unsigned_long is Interfaces.C.unsigned_long; + + -- RT Linux kernel threads should not use the + -- OS signal interfaces. + + Max_Interrupt : constant := 2; + type Signal is new int range 0 .. Max_Interrupt; + type sigset_t is new Integer; + + ---------- + -- Time -- + ---------- + + RT_TICKS_PER_SEC : constant := 1193180; + -- the amount of time units in one second. + + RT_TIME_END : constant := 16#7fffFfffFfffFfff#; + + type RTIME is range -2 ** 63 .. 2 ** 63 - 1; + -- the introduction of type RTIME is due to the fact that RT-Linux + -- uses this type to represent time. In RT-Linux, it's a long long + -- integer that takes 64 bits for storage + + ------------------------- + -- Priority Scheduling -- + ------------------------- + + RT_LOWEST_PRIORITY : constant System.Any_Priority := + System.Any_Priority'First; + -- for the lowest priority task in RT_Linux. By the design, this task + -- is the regular linux kernel. + + RT_TASK_MAGIC : constant := 16#754d2774#; + -- a special constant used as a label for a task that has been created + + ---------------------------- + -- RT constants and types -- + ---------------------------- + + SFIF : Integer; + pragma Import (C, SFIF, "SFIF"); + -- Interrupt emulation flag used by RT-Linux. If it's 0, the regular + -- Linux kernel is preempted. Otherwise, the regular Linux kernel is + -- running + + GFP_ATOMIC : constant := 16#1#; + GFP_KERNEL : constant := 16#3#; + -- constants to indicate the priority of a call to kmalloc. + -- GFP_KERNEL is used in the current implementation to allocate + -- stack space for a task. Since GFP_ATOMIC has higher priority, + -- if necessary, replace GFP_KERNEL with GFP_ATOMIC + + type Rt_Task_States is (RT_TASK_READY, RT_TASK_DELAYED, RT_TASK_DORMANT); + + ------------- + -- Threads -- + ------------- + + type Thread_Body is access + function (arg : System.Address) return System.Address; + + -- ??? need to define a type for references to (IDs of) + -- RT Linux lock objects, and implement the lock objects. + + subtype Thread_Id is System.Address; + + ------------------------------- + -- Useful imported functions -- + ------------------------------- + + --------------------------------- + -- functions from linux kernel -- + --------------------------------- + + function Kmalloc (size : Integer; Priority : Integer) return System.Address; + pragma Import (C, Kmalloc, "kmalloc"); + + procedure Kfree (Ptr : System.Address); + pragma Import (C, Kfree, "kfree"); + + procedure Printk (Msg : String); + pragma Import (C, Printk, "printk"); + + --------------------- + -- RT time related -- + --------------------- + + function Rt_Get_Time return RTIME; + pragma Import (C, Rt_Get_Time, "rt_get_time"); + + function Rt_Request_Timer (Fn : System.Address) return Integer; + procedure Rt_Request_Timer (Fn : System.Address); + pragma Import (C, Rt_Request_Timer, "rt_request_timer"); + + procedure Rt_Free_Timer; + pragma Import (C, Rt_Free_Timer, "rt_free_timer"); + + procedure Rt_Set_Timer (T : RTIME); + pragma Import (C, Rt_Set_Timer, "rt_set_timer"); + + procedure Rt_No_Timer; + pragma Import (C, Rt_No_Timer, "rt_no_timer"); + + --------------------- + -- RT FIFO related -- + --------------------- + + function Rtf_Create (Fifo : Integer; Size : Integer) return Integer; + pragma Import (C, Rtf_Create, "rtf_create"); + + function Rtf_Destroy (Fifo : Integer) return Integer; + pragma Import (C, Rtf_Destroy, "rtf_destroy"); + + function Rtf_Resize (Minor : Integer; Size : Integer) return Integer; + pragma Import (C, Rtf_Resize, "rtf_resize"); + + function Rtf_Put + (Fifo : Integer; + Buf : System.Address; + Count : Integer) return Integer; + pragma Import (C, Rtf_Put, "rtf_put"); + + function Rtf_Get + (Fifo : Integer; + Buf : System.Address; + Count : Integer) return Integer; + pragma Import (C, Rtf_Get, "rtf_get"); + + function Rtf_Create_Handler + (Fifo : Integer; + Handler : System.Address) return Integer; + pragma Import (C, Rtf_Create_Handler, "rtf_create_handler"); + +private + type Require_Body; +end System.OS_Interface; |