summaryrefslogtreecommitdiff
path: root/gcc/ada/5qosinte.ads
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ada/5qosinte.ads')
-rw-r--r--gcc/ada/5qosinte.ads188
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;