Index: c/src/ada/rtems.ads
===================================================================
--- c/src/ada/rtems.ads	(revision f3f06f79c34b82beb05532972f04e1bc1fcb7d2d)
+++ c/src/ada/rtems.ads	(revision f3f06f79c34b82beb05532972f04e1bc1fcb7d2d)
@@ -0,0 +1,1336 @@
+--
+--  RTEMS / Specification
+--
+--  DESCRIPTION:
+--
+--  This package provides the interface to the RTEMS API.
+--
+--  DEPENDENCIES:
+--
+--
+--
+--  COPYRIGHT (c) 1989 - 1997.
+--  On-Line Applications Research Corporation (OAR).
+--
+
+with System;
+with Interfaces;
+with Interfaces.C;
+
+package RTEMS is
+
+   --
+   --  RTEMS Base Types
+   --
+
+   subtype Unsigned8  is Interfaces.Unsigned_8;
+   subtype Unsigned16 is Interfaces.Unsigned_16;
+   subtype Unsigned32 is Interfaces.Unsigned_32;
+
+   type Unsigned32_Pointer     is access all RTEMS.Unsigned32;
+   type Unsigned16_Pointer     is access all RTEMS.Unsigned16;
+   type Unsigned8_Pointer      is access all RTEMS.Unsigned8;
+
+   subtype Boolean             is RTEMS.Unsigned32;
+   subtype Address             is System.Address;
+   subtype Single              is Interfaces.C.C_float;
+   subtype Double              is Interfaces.C.Double;
+
+   --
+   --  The following define the size of each of the base types in
+   --  both bits and system units.
+   --
+
+   Unsigned8_Bits   : constant := 7;
+   Unsigned16_Bits  : constant := 15;
+   Unsigned32_Bits  : constant := 31;
+   Boolean_Bits     : constant := 31;
+   Address_Bits     : constant := 31;
+   Single_Bits      : constant := 31;
+   Double_Bits      : constant := 63;
+
+   Unsigned8_Units  : constant := 1;
+   Unsigned16_Units : constant := 2;
+   Unsigned32_Units : constant := 4;
+   Boolean_Units    : constant := 4;
+   Address_Units    : constant := 4;
+   Single_Units     : constant := 4;
+   Double_Units     : constant := 8;
+
+   --
+   --  More Types
+   --
+
+   subtype Name                is RTEMS.Unsigned32;
+   subtype ID                  is RTEMS.Unsigned32;
+   subtype Interval            is RTEMS.Unsigned32;
+   subtype Attribute           is RTEMS.Unsigned32;
+   subtype Mode                is RTEMS.Unsigned32;
+   subtype Option              is RTEMS.Unsigned32;
+   subtype Task_Priority       is RTEMS.Unsigned32;
+   subtype Notepad_Index       is RTEMS.Unsigned32;
+
+   subtype Event_Set           is RTEMS.Unsigned32;
+   subtype Signal_Set          is RTEMS.Unsigned32;
+   subtype Debug_Set           is RTEMS.Unsigned32;
+   subtype Device_Major_Number is RTEMS.Unsigned32;
+   subtype Device_Minor_Number is RTEMS.Unsigned32;
+   subtype Vector_Number       is RTEMS.Unsigned32;
+   subtype ISR_Level           is RTEMS.Unsigned32;
+
+   subtype Node                is RTEMS.Unsigned32;
+
+   --
+   --  Task Related Types
+   --  XXXX fix this
+   subtype Task_Argument       is RTEMS.Unsigned32;
+   type Task_Argument_PTR      is access all Task_Argument;
+
+   -- XXXX fix this
+   subtype TCB                 is RTEMS.Unsigned32;
+   type    TCB_Pointer         is access all RTEMS.TCB;
+
+   subtype Task_States         is RTEMS.Unsigned32;
+
+   type Task_Entry is access procedure (
+      Argument : RTEMS.Unsigned32
+   );
+
+   --
+   --  Clock and Time of Day Types
+   --
+
+   type Time_Of_Day is
+      record
+         Year    : RTEMS.Unsigned32; -- year, A.D.
+         Month   : RTEMS.Unsigned32; -- month, 1 .. 12
+         Day     : RTEMS.Unsigned32; -- day, 1 .. 31
+         Hour    : RTEMS.Unsigned32; -- hour, 0 .. 23
+         Minute  : RTEMS.Unsigned32; -- minute, 0 .. 59
+         Second  : RTEMS.Unsigned32; -- second, 0 .. 59
+         Ticks   : RTEMS.Unsigned32; -- elapsed ticks between seconds
+      end record;
+
+   type Clock_Time_Value is
+      record
+         Seconds      : RTEMS.Unsigned32;
+         Microseconds : RTEMS.Unsigned32;
+      end record;
+
+   type Clock_Get_Options is (
+      Clock_Get_TOD,
+      Clock_Get_Seconds_Since_Epoch,
+      Clock_Get_Ticks_Since_Boot,
+      Clock_Get_Ticks_Per_Seconds,
+      Clock_Get_Time_Value
+   );
+
+   --
+   --  Device Driver Entry Prototype
+   --
+
+   type Device_Driver_Entry is access function (
+      Major    : in     RTEMS.Device_Major_Number;
+      Minor    : in     RTEMS.Device_Major_Number;
+      Argument : in     RTEMS.Unsigned32;
+      ID       : in     RTEMS.Unsigned32
+   ) return RTEMS.Unsigned32;
+
+   type Driver_Address_Table_Entry is
+      record
+         Initialization : RTEMS.Device_Driver_Entry;
+         Open           : RTEMS.Device_Driver_Entry;
+         Close          : RTEMS.Device_Driver_Entry;
+         Read           : RTEMS.Device_Driver_Entry;
+         Write          : RTEMS.Device_Driver_Entry;
+         Control        : RTEMS.Device_Driver_Entry;
+      end record;
+
+   type Driver_Address_Table is array ( RTEMS.Unsigned32
+     range 1 .. RTEMS.Unsigned32'Last ) of RTEMS.Driver_Address_Table_Entry;
+
+   type Driver_Address_Table_Pointer is access all Driver_Address_Table;
+
+   type Driver_Name_t is
+      record
+         Device_Name        : RTEMS.Address;
+         Device_Name_Length : RTEMS.Unsigned32;
+         Major              : RTEMS.Device_Major_Number;
+         Minor              : RTEMS.Device_Minor_Number;
+         
+      end record;
+
+   --
+   --  Ident Options
+   --
+
+   Search_All_Nodes : constant RTEMS.Node := 0;
+
+   --
+   --  Options
+   --
+
+   Default_Options    : constant RTEMS.Option    := 16#0000#;
+
+   Wait      : constant RTEMS.Option := 16#0000#;
+   No_Wait   : constant RTEMS.Option := 16#0001#;
+
+   Event_All : constant RTEMS.Option := 16#0000#;
+   Event_Any : constant RTEMS.Option := 16#0002#;
+
+   --
+   --  Mode constants
+   --
+
+   Default_Modes      : constant RTEMS.Mode      := 16#0000#;
+
+   --
+   --  Attribute constants
+   --
+
+   Default_Attributes : constant RTEMS.Attribute := 16#0000#;
+
+   --Floating_Point :
+   --No_Floating_Point :
+
+   function Interrupt_Level (
+      Level : in     RTEMS.Unsigned32
+   ) return RTEMS.Attribute;
+   
+   --
+   --  Notepad index constants
+   --
+
+   Notepad_0  : constant RTEMS.Unsigned32 := 0;
+   Notepad_1  : constant RTEMS.Unsigned32 := 1;
+   Notepad_2  : constant RTEMS.Unsigned32 := 2;
+   Notepad_3  : constant RTEMS.Unsigned32 := 3;
+   Notepad_4  : constant RTEMS.Unsigned32 := 4;
+   Notepad_5  : constant RTEMS.Unsigned32 := 5;
+   Notepad_6  : constant RTEMS.Unsigned32 := 6;
+   Notepad_7  : constant RTEMS.Unsigned32 := 7;
+   Notepad_8  : constant RTEMS.Unsigned32 := 8;
+   Notepad_9  : constant RTEMS.Unsigned32 := 9;
+   Notepad_10 : constant RTEMS.Unsigned32 := 10;
+   Notepad_11 : constant RTEMS.Unsigned32 := 11;
+   Notepad_12 : constant RTEMS.Unsigned32 := 12;
+   Notepad_13 : constant RTEMS.Unsigned32 := 13;
+   Notepad_14 : constant RTEMS.Unsigned32 := 14;
+   Notepad_15 : constant RTEMS.Unsigned32 := 15;
+
+   --
+   --  Miscellaneous
+   --
+
+   No_Timeout       : constant RTEMS.Interval := 0;
+   Self             : constant RTEMS.ID       := 0;
+   Period_Status    : constant RTEMS.Interval := 0;
+   Yield_Processor  : constant RTEMS.Interval := 0;
+   Current_Priority : constant RTEMS.Task_Priority := 0;
+
+
+   --
+   --  Extension Callouts and Table
+   --
+
+   type Thread_Create_Extension is access procedure (
+      Current_Task : in     RTEMS.TCB_Pointer;
+      New_Task     : in     RTEMS.TCB_Pointer
+   );
+
+   type Thread_Start_Extension is access procedure (
+      Current_Task : in     RTEMS.TCB_Pointer;
+      Started_Task : in     RTEMS.TCB_Pointer
+   );
+
+   type Thread_Restart_Extension is access procedure (
+      Current_Task   : in     RTEMS.TCB_Pointer;
+      Restarted_Task : in     RTEMS.TCB_Pointer
+   );
+
+   type Thread_Delete_Extension is access procedure (
+      Current_Task : in     RTEMS.TCB_Pointer;
+      Deleted_Task : in     RTEMS.TCB_Pointer
+   );
+
+   type Thread_Switch_Extension is access procedure (
+      Current_Task : in     RTEMS.TCB_Pointer;
+      Heir_Task    : in     RTEMS.TCB_Pointer
+   );
+
+   type Thread_Post_Switch_Extension is access procedure (
+      Current_Task : in     RTEMS.TCB_Pointer
+   );
+
+   type Thread_Begin_Extension is access procedure (
+      Current_Task : in     RTEMS.TCB_Pointer
+   );
+
+   type Thread_Exitted_Extension is access procedure (
+      Current_Task : in     RTEMS.TCB_Pointer
+   );
+
+   type Fatal_Error_Extension is access procedure (
+      Error : in     RTEMS.Unsigned32
+   );
+
+   type Extensions_Table_Entry is
+      record
+         Thread_Create      : RTEMS.Thread_Create_Extension;
+         Thread_Start       : RTEMS.Thread_Start_Extension;
+         Thread_Restart     : RTEMS.Thread_Restart_Extension;
+         Thread_Delete      : RTEMS.Thread_Delete_Extension;
+         Thread_Switch      : RTEMS.Thread_Switch_Extension;
+         Thread_Post_Switch : RTEMS.Thread_Post_Switch_Extension;
+         Thread_Begin       : RTEMS.Thread_Begin_Extension;
+         Thread_Exitted     : RTEMS.Thread_Exitted_Extension;
+         Fatal              : RTEMS.Fatal_Error_Extension;
+      end record;
+
+   type Extensions_Table is array ( RTEMS.Unsigned32
+     range 1 .. RTEMS.Unsigned32'Last ) of RTEMS.Extensions_Table_Entry;
+
+   type Extensions_Table_Pointer is access all Extensions_Table;
+
+   --
+   --  The following type define a pointer to a watchdog/timer service routine.
+   --
+
+   type Timer_Service_Routine is access procedure (
+      ID          : in     RTEMS.ID;
+      User_Data   : in     RTEMS.Address
+   );
+
+   --
+   --  The following type define a pointer to a signal service routine.
+   --
+
+   type ASR_Handler is access procedure (
+      Signals : in     RTEMS.Signal_Set
+   );
+
+   --
+   --  The following type defines the status information returned
+   --  about a period.
+   --
+
+   type Rate_Monotonic_Period_States is (
+     Inactive,               -- off chain, never initialized
+     Owner_Is_Blocking,      -- on chain, owner is blocking on it
+     Active,                 -- on chain, running continuously
+     Expired_While_Blocking, -- on chain, expired while owner was was blocking
+     Expired                 -- off chain, will be reset by next
+                             --   rtems_rate_monotonic_period
+   );
+
+   for Rate_Monotonic_Period_States'Size use 32;
+
+   for Rate_Monotonic_Period_States use (
+     Inactive                => 0,
+     Owner_Is_Blocking       => 1,
+     Active                  => 2,
+     Expired_While_Blocking  => 3,
+     Expired                 => 4
+   );
+ 
+   type Rate_Monotonic_Period_Status is
+      record
+         State                            : RTEMS.Rate_Monotonic_Period_States;
+         Ticks_Since_Last_Period          : RTEMS.Unsigned32;
+         Ticks_Executed_Since_Last_Period : RTEMS.Unsigned32;
+      end record;
+
+   --
+   --  Method Completions Status Codes
+   --
+
+   type Status_Codes is (
+      Successful,               -- successful completion
+      Task_Exitted,             -- returned from a task
+      MP_Not_Configured,        -- multiprocessing not configured
+      Invalid_Name,             -- invalid object name
+      Invalid_ID,               -- invalid object id
+      Too_Many,                 -- too many
+      Timeout,                  -- timed out waiting
+      Object_Was_Deleted,       -- object deleted while waiting
+      Invalid_Size,             -- specified size was invalid
+      Invalid_Address,          -- address specified is invalid
+      Invalid_Number,           -- number was invalid
+      Not_Defined,              -- item has not been initialized
+      Resource_In_Use,          -- resources still outstanding
+      Unsatisfied,              -- request not satisfied
+      Incorrect_State,          -- task is in wrong state
+      Already_Suspended,        -- task already in state
+      Illegal_On_Self,          -- illegal on calling task
+      Illegal_On_Remote_Object, -- illegal for remote object
+      Called_From_ISR,          -- called from wrong environment
+      Invalid_Priority,         -- invalid task priority
+      Invalid_Clock,            -- invalid date/time
+      Invalid_Node,             -- invalid node id
+      Not_Configured,           -- directive not configured
+      Not_Owner_Of_Resource,    -- not owner of resource
+      Not_Implemented,          -- directive not implemented
+      Internal_Error,           -- RTEMS inconsistency detected
+      Proxy_Blocking,           -- internal multiprocessing only
+      No_Memory                 -- no memory left in heap
+   );
+
+   for Status_Codes'Size use 32;
+
+   for Status_Codes use (
+      Successful                  =>  0,
+      Task_Exitted                =>  1,
+      MP_Not_Configured           =>  2,
+      Invalid_Name                =>  3,
+      Invalid_ID                  =>  4,
+      Too_Many                    =>  5,
+      Timeout                     =>  6,
+      Object_Was_Deleted          =>  7,
+      Invalid_Size                =>  8,
+      Invalid_Address             =>  9,
+      Invalid_NumbeR              => 10,
+      Not_Defined                 => 11,
+      Resource_In_Use             => 12,
+      Unsatisfied                 => 13,
+      Incorrect_State             => 14,
+      Already_Suspended           => 15,
+      Illegal_On_Self             => 16,
+      Illegal_On_Remote_Object    => 17,
+      Called_From_ISR             => 18,
+      Invalid_Priority            => 19,
+      Invalid_Clock               => 20,
+      Invalid_Node                => 21,
+      Not_Configured              => 22,
+      Not_Owner_Of_Resource       => 23,
+      Not_ImplementeD             => 24,
+      Internal_Error              => 25,
+      Proxy_Blocking              => 26,
+      No_Memory                   => 27
+   );
+
+   --
+   --  RTEMS Events
+   --
+
+   All_Events : constant RTEMS.Event_Set := 16#7FFFFFFF#;
+   Event_0    : constant RTEMS.Event_Set := 16#00000001#;
+   Event_1    : constant RTEMS.Event_Set := 16#00000002#;
+   Event_2    : constant RTEMS.Event_Set := 16#00000004#;
+   Event_3    : constant RTEMS.Event_Set := 16#00000008#;
+   Event_4    : constant RTEMS.Event_Set := 16#00000010#;
+   Event_5    : constant RTEMS.Event_Set := 16#00000020#;
+   Event_6    : constant RTEMS.Event_Set := 16#00000040#;
+   Event_7    : constant RTEMS.Event_Set := 16#00000080#;
+   Event_8    : constant RTEMS.Event_Set := 16#00000100#;
+   Event_9    : constant RTEMS.Event_Set := 16#00000200#;
+   Event_10   : constant RTEMS.Event_Set := 16#00000400#;
+   Event_11   : constant RTEMS.Event_Set := 16#00000800#;
+   Event_12   : constant RTEMS.Event_Set := 16#00001000#;
+   Event_13   : constant RTEMS.Event_Set := 16#00002000#;
+   Event_14   : constant RTEMS.Event_Set := 16#00004000#;
+   Event_15   : constant RTEMS.Event_Set := 16#00008000#;
+   Event_16   : constant RTEMS.Event_Set := 16#00010000#;
+   Event_17   : constant RTEMS.Event_Set := 16#00020000#;
+   Event_18   : constant RTEMS.Event_Set := 16#00040000#;
+   Event_19   : constant RTEMS.Event_Set := 16#00080000#;
+   Event_20   : constant RTEMS.Event_Set := 16#00100000#;
+   Event_21   : constant RTEMS.Event_Set := 16#00200000#;
+   Event_22   : constant RTEMS.Event_Set := 16#00400000#;
+   Event_23   : constant RTEMS.Event_Set := 16#00800000#;
+   Event_24   : constant RTEMS.Event_Set := 16#01000000#;
+   Event_25   : constant RTEMS.Event_Set := 16#02000000#;
+   Event_26   : constant RTEMS.Event_Set := 16#04000000#;
+   Event_27   : constant RTEMS.Event_Set := 16#08000000#;
+   Event_28   : constant RTEMS.Event_Set := 16#10000000#;
+   Event_29   : constant RTEMS.Event_Set := 16#20000000#;
+   Event_30   : constant RTEMS.Event_Set := 16#40000000#;
+   Event_31   : constant RTEMS.Event_Set := 16#80000000#;
+
+   --
+   --  RTEMS API Configuration Information
+   --
+
+   type Initialization_Tasks_Table_Entry is
+      record
+         Name             : RTEMS.Name;          -- task name
+         Stack_Size       : RTEMS.Unsigned32;    -- task stack size
+         Initial_Priority : RTEMS.Task_priority; -- task priority
+         Attribute_Set    : RTEMS.Attribute;     -- task attributes
+         Entry_Point      : RTEMS.Task_Entry;    -- task entry point
+         Mode_Set         : RTEMS.Mode;          -- task initial mode
+         Argument         : RTEMS.Unsigned32;    -- task argument
+      end record;
+
+   type Initialization_Tasks_Table is array ( RTEMS.Unsigned32 range <> ) of
+     RTEMS.Initialization_Tasks_Table_Entry;
+
+   type Initialization_Tasks_Table_Pointer is access all
+        Initialization_Tasks_Table;
+
+   type API_Configuration_Table is
+      record
+         Maximum_Tasks                   : RTEMS.Unsigned32;
+         Maximum_Timers                  : RTEMS.Unsigned32;
+         Maximum_Semaphores              : RTEMS.Unsigned32;
+         Maximum_Message_queues          : RTEMS.Unsigned32;
+         Maximum_Partitions              : RTEMS.Unsigned32;
+         Maximum_Regions                 : RTEMS.Unsigned32;
+         Maximum_Ports                   : RTEMS.Unsigned32;
+         Maximum_Periods                 : RTEMS.Unsigned32;
+         Number_Of_Initialization_Tasks  : RTEMS.Unsigned32;
+         User_Initialization_Tasks_Table :
+                                   RTEMS.Initialization_Tasks_Table_Pointer;
+      end record;
+
+   type API_Configuration_Table_Pointer is access all API_Configuration_Table;
+
+   --
+   --  RTEMS POSIX API Configuration Information
+   --
+
+   type POSIX_Thread_Entry is access procedure (
+      Argument : in     RTEMS.Address
+   );
+
+   type POSIX_Initialization_Threads_Table_Entry is
+   record
+      Thread_Entry : RTEMS.POSIX_Thread_Entry;
+   end record;
+
+   type POSIX_Initialization_Threads_Table is array
+       ( RTEMS.Unsigned32 range <> ) of
+       RTEMS.POSIX_Initialization_Threads_Table_Entry;
+
+   type POSIX_Initialization_Threads_Table_Pointer is access all
+       POSIX_Initialization_Threads_Table;
+   
+   type POSIX_API_Configuration_Table_Entry is
+      record
+         Maximum_Threads                 : Interfaces.C.Int;
+         Maximum_Mutexes                 : Interfaces.C.Int;
+         Maximum_Condition_Variables     : Interfaces.C.Int;
+         Maximum_Keys                    : Interfaces.C.Int;
+         Maximum_Queued_Signals          : Interfaces.C.Int;
+         Number_Of_Initialization_Tasks  : Interfaces.C.Int;
+         User_Initialization_Tasks_Table : 
+            RTEMS.POSIX_Initialization_Threads_Table_Pointer;
+      end record;
+
+   type POSIX_API_Configuration_Table is array ( RTEMS.Unsigned32 range <> ) of
+      RTEMS.POSIX_API_Configuration_Table_Entry;
+
+   type POSIX_API_Configuration_Table_Pointer is access all
+          RTEMS.POSIX_API_Configuration_Table;
+
+   --
+   --  MPCI Information include MPCI Configuration
+   --
+
+   type Configuration_Table_Pointer;
+
+   type MP_Packet_Classes is (
+      MP_PACKET_MPCI_INTERNAL,
+      MP_PACKET_TASKS,
+      MP_PACKET_MESSAGE_QUEUE,
+      MP_PACKET_SEMAPHORE,
+      MP_PACKET_PARTITION,
+      MP_PACKET_REGION,
+      MP_PACKET_EVENT,
+      MP_PACKET_SIGNAL
+   );
+
+   for MP_Packet_Classes use (
+      MP_PACKET_MPCI_INTERNAL    => 0,
+      MP_PACKET_TASKS            => 1,
+      MP_PACKET_MESSAGE_QUEUE    => 2,
+      MP_PACKET_SEMAPHORE        => 3,
+      MP_PACKET_PARTITION        => 4,
+      MP_PACKET_REGION           => 5,
+      MP_PACKET_EVENT            => 6,
+      MP_PACKET_SIGNAL           => 7
+   );
+
+   type Packet_Prefix is
+      record
+         The_Class       : RTEMS.MP_Packet_Classes;
+         ID              : RTEMS.ID;
+         Source_TID      : RTEMS.ID;
+         Source_Priority : RTEMS.Task_Priority;
+         Return_Code     : RTEMS.Unsigned32;
+         Length          : RTEMS.Unsigned32;
+         To_Convert      : RTEMS.Unsigned32;
+         Timeout         : RTEMS.Interval;
+      end record;
+
+   type Packet_Prefix_Pointer is access all Packet_Prefix;
+
+   type MPCI_Initialization_Entry is access procedure (
+      Configuration : in     RTEMS.Configuration_Table_Pointer
+   );
+
+   type MPCI_Get_Packet_Entry is access procedure (
+      Packet : access RTEMS.Packet_Prefix_Pointer
+   );
+
+   type MPCI_Return_Packet_Entry is access procedure (
+      Packet : in     RTEMS.Packet_Prefix_Pointer
+   );
+
+   type MPCI_Send_Entry is access procedure (
+      Packet : in     RTEMS.Packet_Prefix_Pointer
+   );
+
+   type MPCI_Receive_Entry is access procedure (
+      Packet : access RTEMS.Packet_Prefix_Pointer
+   );
+
+   type MPCI_Table is
+      record
+         Default_Timeout     : RTEMS.Unsigned32; -- in ticks
+         Maximum_Packet_Size : RTEMS.Unsigned32;
+         Initialization      : RTEMS.MPCI_Initialization_Entry;
+         Get_Packet          : RTEMS.MPCI_Get_Packet_Entry;
+         Return_Packet       : RTEMS.MPCI_Return_Packet_Entry;
+         Send                : RTEMS.MPCI_Send_Entry;
+         Receive             : RTEMS.MPCI_Receive_Entry;
+      end record;
+
+   type MPCI_Table_Pointer is access all MPCI_Table;
+
+   --
+   --  Configuration Information
+   --
+
+   type Multiprocessing_Table is
+      record
+         Node                   : RTEMS.Unsigned32;
+         Maximum_Nodes          : RTEMS.Unsigned32;
+         Maximum_Global_Objects : RTEMS.Unsigned32;
+         Maximum_Proxies        : RTEMS.Unsigned32;
+         User_MPCI_Table        : RTEMS.MPCI_Table_Pointer;
+      end record;
+
+   type Multiprocessing_Table_Pointer is access all Multiprocessing_Table;
+
+   type Configuration_Table is
+      record
+          Work_Space_Start           : RTEMS.Address;
+          Work_Space_Size            : RTEMS.Unsigned32;
+          Maximum_Extensions         : RTEMS.Unsigned32;
+          Microseconds_Per_Tick      : RTEMS.Unsigned32;
+          Ticks_Per_Timeslice        : RTEMS.Unsigned32;
+          Maximum_Devices            : RTEMS.Unsigned32;
+          Number_Of_Device_Drivers   : RTEMS.Unsigned32;
+          Device_Driver_Table        : RTEMS.Driver_Address_Table_Pointer;
+          User_Extension_Table       : RTEMS.Extensions_Table_Pointer;
+          User_Multiprocessing_Table : RTEMS.Multiprocessing_Table_Pointer;
+          RTEMS_API_Configuration    : RTEMS.API_Configuration_Table_Pointer;
+          POSIX_API_Configuration    : RTEMS.POSIX_API_Configuration_Table_Pointer;
+      end record;
+
+   type Configuration_Table_Pointer is access all Configuration_Table;
+
+   --
+   --  For now, do not provide access to the CPU Table from Ada.
+   --  When this type is provided, a CPU dependent file must
+   --  define it.
+   --
+
+   subtype CPU_Table is RTEMS.Address;
+   type CPU_Table_Pointer is access all CPU_Table;
+
+   --
+   --  Utility Functions
+   --
+
+   function From_Ada_Boolean (
+      Ada_Boolean : Standard.Boolean
+   ) return RTEMS.Boolean;
+
+   function To_Ada_Boolean (
+      RTEMS_Boolean : RTEMS.Boolean
+   ) return Standard.Boolean;
+
+   function Milliseconds_To_Microseconds (
+      Milliseconds : RTEMS.Unsigned32
+   ) return RTEMS.Unsigned32;
+
+   function Milliseconds_To_Ticks (
+      Milliseconds : RTEMS.Unsigned32
+   ) return RTEMS.Interval;
+
+   function Microseconds_To_Ticks (
+      Microseconds : RTEMS.Unsigned32
+   ) return RTEMS.Interval;
+
+   function Build_Name (
+      C1 : in     Character;
+      C2 : in     Character;
+      C3 : in     Character;
+      C4 : in     Character
+   ) return RTEMS.Name;
+
+   procedure Name_To_Characters (
+      Name : in     RTEMS.Name;
+      C1   :    out Character;
+      C2   :    out Character;
+      C3   :    out Character;
+      C4   :    out Character
+   );
+
+   function Get_Node (
+      ID : in     RTEMS.ID
+   ) return RTEMS.Unsigned32;
+
+   function Get_Index (
+      ID : in     RTEMS.ID
+   ) return RTEMS.Unsigned32;
+
+   function Are_Statuses_Equal (
+      Status  : in     RTEMS.Status_Codes;
+      Desired : in     RTEMS.Status_Codes
+   ) return Standard.Boolean;
+
+   --
+   --  RTEMS API
+   --
+
+   --
+   --  Initialization Manager
+   --
+
+   procedure Initialize_Executive (
+      Configuration_Table   : in     RTEMS.Configuration_Table_Pointer;
+      CPU_Table             : in     RTEMS.CPU_Table_Pointer
+   );
+
+   procedure Initialize_Executive_Early (
+      Configuration_Table : in     RTEMS.Configuration_Table_Pointer;
+      CPU_Table           : in     RTEMS.CPU_Table_Pointer;
+      Level               :    out RTEMS.ISR_Level
+   );
+
+   procedure Initialize_Executive_Late (
+      BSP_Level : in    RTEMS.ISR_Level
+   );
+
+   procedure Shutdown_Executive (
+      Result : in     RTEMS.Unsigned32
+   );
+
+   --
+   --  Task Manager
+   --
+
+   procedure Task_Create (
+      Name             : in     RTEMS.Name;
+      Initial_Priority : in     RTEMS.Task_Priority;
+      Stack_Size       : in     Unsigned32;
+      Initial_Modes    : in     RTEMS.Mode;
+      Attribute_Set    : in     RTEMS.Attribute;
+      ID               :    out RTEMS.ID;
+      Result           :    out RTEMS.Status_Codes
+   );
+
+   procedure Task_Ident (
+      Name   : in     RTEMS.Name;
+      Node   : in     RTEMS.Node;
+      ID     :    out RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Task_Start (
+      ID          : in     RTEMS.ID;
+      Entry_Point : in     RTEMS.Task_Entry;
+      Argument    : in     RTEMS.Task_Argument;
+      Result      :    out RTEMS.Status_Codes
+   );
+
+   procedure Task_Restart (
+      ID       : in     RTEMS.ID;
+      Argument : in     RTEMS.Task_Argument;
+      Result   :    out RTEMS.Status_Codes
+   );
+
+   procedure Task_Delete (
+      ID     : in     RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Task_Suspend (
+      ID     : in     RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Task_Resume (
+      ID     : in     RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Task_Set_Priority (
+      ID           : in     RTEMS.ID;
+      New_Priority : in     RTEMS.Task_Priority;
+      Old_Priority :    out RTEMS.Task_Priority;
+      Result       :    out RTEMS.Status_Codes
+   );
+
+   procedure Task_Mode (
+      Mode_Set          : in     RTEMS.Mode;
+      Mask              : in     RTEMS.Mode;
+      Previous_Mode_Set :    out RTEMS.Mode;
+      Result            :    out RTEMS.Status_Codes
+   );
+
+   procedure Task_Get_Note (
+      ID      : in     RTEMS.ID;
+      Notepad : in     RTEMS.Notepad_Index;
+      Note    :    out RTEMS.Unsigned32;
+      Result  :    out RTEMS.Status_Codes
+   );
+
+   procedure Task_Set_Note (
+      ID      : in     RTEMS.ID;
+      Notepad : in     RTEMS.Notepad_Index;
+      Note    : in     RTEMS.Unsigned32;
+      Result  :    out RTEMS.Status_Codes
+   );
+
+   procedure Task_Wake_When (
+      Time_Buffer : in     RTEMS.Time_Of_Day;
+      Result      :    out RTEMS.Status_Codes
+   );
+
+   procedure Task_Wake_After (
+      Ticks  : in     RTEMS.Interval;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   --
+   --  Interrupt Manager
+   --
+
+   procedure Interrupt_Catch (
+      New_ISR_Handler : in     RTEMS.Address;
+      Vector          : in     RTEMS.Vector_Number;
+      Old_ISR_Handler :    out RTEMS.Address;
+      Result          :    out RTEMS.Status_Codes
+   );
+
+   function Interrupt_Disable
+   return RTEMS.ISR_Level;
+
+   procedure Interrupt_Enable (
+      Level : in     RTEMS.ISR_Level
+   );
+
+   procedure Interrupt_Flash (
+      Level : in     RTEMS.ISR_Level
+   );
+
+   function Interrupt_Is_In_Progress
+   return RTEMS.Boolean;
+
+   --
+   --  Clock Manager
+   --
+
+   procedure Clock_Get (
+      Option      : in     RTEMS.Clock_Get_Options;
+      Time_Buffer : in     RTEMS.Address;
+      Result      :    out RTEMS.Status_Codes
+   );
+
+   procedure Clock_Set (
+      Time_Buffer : in     RTEMS.Time_Of_Day;
+      Result      :    out RTEMS.Status_Codes
+   );
+
+   procedure Clock_Tick (
+      Result :    out RTEMS.Status_Codes
+   );
+
+   --
+   --  Extension Manager
+   --
+
+   procedure Extension_Create (
+      Name   : in     RTEMS.Name;
+      Table  : in     RTEMS.Extensions_Table_Pointer;
+      ID     :    out RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Extension_Ident (
+      Name   : in     RTEMS.Name;
+      ID     :    out RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Extension_Delete (
+      ID     : in     RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+
+   --
+   --  Timer Manager
+   --
+
+   procedure Timer_Create (
+      Name   : in     RTEMS.Name;
+      ID     :    out RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Timer_Ident (
+      Name   : in     RTEMS.Name;
+      ID     :    out RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Timer_Delete (
+      ID     : in     RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Timer_Fire_After (
+      ID        : in     RTEMS.ID;
+      Ticks     : in     RTEMS.Interval;
+      Routine   : in     RTEMS.Timer_Service_Routine;
+      User_Data : in     RTEMS.Address;
+      Result    :    out RTEMS.Status_Codes
+   );
+
+   procedure Timer_Fire_When (
+      ID        : in     RTEMS.ID;
+      Wall_Time : in     RTEMS.Time_Of_Day;
+      Routine   : in     RTEMS.Timer_Service_Routine;
+      User_Data : in     RTEMS.Address;
+      Result    :    out RTEMS.Status_Codes
+   );
+
+   procedure Timer_Reset (
+      ID     : in     RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Timer_Cancel (
+      ID     : in     RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   --
+   --  Semaphore Manager
+   --
+
+   procedure Semaphore_Create (
+      Name          : in     RTEMS.Name;
+      Count         : in     RTEMS.Unsigned32;
+      Attribute_Set : in     RTEMS.Attribute;
+      ID            :    out RTEMS.ID;
+      Result        :    out RTEMS.Status_Codes
+   );
+
+   procedure Semaphore_Delete (
+      ID     : in     RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Semaphore_Ident (
+      Name   : in     RTEMS.Name;
+      Node   : in     RTEMS.Unsigned32;
+      ID     :    out RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Semaphore_Obtain (
+      ID         : in     RTEMS.ID;
+      Option_Set : in     RTEMS.Option;
+      Timeout    : in     RTEMS.Interval;
+      Result     :    out RTEMS.Status_Codes
+   );
+
+   procedure Semaphore_Release (
+      ID     : in     RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+
+   --
+   --  Message Queue Manager
+   --
+
+   procedure Message_Queue_Create (
+      Name             : in     RTEMS.Name;
+      Count            : in     RTEMS.Unsigned32;
+      Max_Message_Size : in     RTEMS.Unsigned32;
+      Attribute_Set    : in     RTEMS.Attribute;
+      ID               :    out RTEMS.ID;
+      Result           :    out RTEMS.Status_Codes
+   );
+
+   procedure Message_Queue_Ident (
+      Name   : in     RTEMS.Name;
+      Node   : in     RTEMS.Unsigned32;
+      ID     :    out RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Message_Queue_Delete (
+      ID     : in     RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Message_Queue_Send (
+      ID     : in     RTEMS.ID;
+      Buffer : in     RTEMS.Address;
+      Size   : in     RTEMS.Unsigned32;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Message_Queue_Urgent (
+      ID     : in     RTEMS.ID;
+      Buffer : in     RTEMS.Address;
+      Size   : in     RTEMS.Unsigned32;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Message_Queue_Broadcast (
+      ID     : in     RTEMS.ID;
+      Buffer : in     RTEMS.Address;
+      Size   : in     RTEMS.Unsigned32;
+      Count  :    out RTEMS.Unsigned32;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Message_Queue_Receive (
+      ID         : in     RTEMS.ID;
+      Buffer     : in     RTEMS.Address;
+      Option_Set : in     RTEMS.Option;
+      Timeout    : in     RTEMS.Interval;
+      Size       :    out RTEMS.Unsigned32;
+      Result     :    out RTEMS.Status_Codes
+   );
+
+   procedure Message_Queue_Flush (
+      ID     : in     RTEMS.ID;
+      Count  :    out RTEMS.Unsigned32;
+      Result :    out RTEMS.Status_Codes
+   );
+
+
+   --
+   --  Event Manager
+   --
+
+   procedure Event_Send (
+      ID       : in     RTEMS.ID;
+      Event_In : in     RTEMS.Event_Set;
+      Result   :    out RTEMS.Status_Codes
+   );
+
+   procedure Event_Receive (
+      Event_In   : in     RTEMS.Event_Set;
+      Option_Set : in     RTEMS.Option;
+      Ticks      : in     RTEMS.Interval;
+      Event_Out  :    out RTEMS.Event_Set;
+      Result     :    out RTEMS.Status_Codes
+   );
+
+   --
+   --  Signal Manager
+   --
+
+   procedure Signal_Catch (
+      ASR_Handler : in     RTEMS.ASR_Handler;
+      Mode_Set    : in     RTEMS.Mode;
+      Result      :    out RTEMS.Status_Codes
+   );
+
+   procedure Signal_Send (
+      ID         : in     RTEMS.ID;
+      Signal_Set : in     RTEMS.Signal_Set;
+      Result     :    out RTEMS.Status_Codes
+   );
+
+
+   --
+   --  Partition Manager
+   --
+
+   procedure Partition_Create (
+      Name             : in     RTEMS.Name;
+      Starting_Address : in     RTEMS.Address;
+      Length           : in     RTEMS.Unsigned32;
+      Buffer_Size      : in     RTEMS.Unsigned32;
+      Attribute_Set    : in     RTEMS.Attribute;
+      ID               :    out RTEMS.ID;
+      Result           :    out RTEMS.Status_Codes
+   );
+
+   procedure Partition_Ident (
+      Name   : in     RTEMS.Name;
+      Node   : in     RTEMS.Unsigned32;
+      ID     :    out RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Partition_Delete (
+      ID     : in     RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Partition_Get_Buffer (
+      ID     : in     RTEMS.ID;
+      Buffer :    out RTEMS.Address;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Partition_Return_Buffer (
+      ID     : in     RTEMS.ID;
+      Buffer : in     RTEMS.Address;
+      Result :    out RTEMS.Status_Codes
+   );
+
+
+   --
+   --  Region Manager
+   --
+
+   procedure Region_Create (
+      Name             : in     RTEMS.Name;
+      Starting_Address : in     RTEMS.Address;
+      Length           : in     RTEMS.Unsigned32;
+      Page_Size        : in     RTEMS.Unsigned32;
+      Attribute_Set    : in     RTEMS.Attribute;
+      ID               :    out RTEMS.ID;
+      Result           :    out RTEMS.Status_Codes
+   );
+
+   procedure Region_Ident (
+      Name   : in     RTEMS.Name;
+      ID     :    out RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Region_Delete (
+      ID     : in     RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Region_Extend (
+      ID               : in     RTEMS.ID;
+      Starting_Address : in     RTEMS.Address;
+      Length           : in     RTEMS.Unsigned32;
+      Result           :    out RTEMS.Status_Codes
+   );
+
+   procedure Region_Get_Segment (
+      ID         : in     RTEMS.ID;
+      Size       : in     RTEMS.Unsigned32;
+      Option_Set : in     RTEMS.Option;
+      Timeout    : in     RTEMS.Interval;
+      Segment    :    out RTEMS.Address;
+      Result     :    out RTEMS.Status_Codes
+   );
+
+   procedure Region_Get_Segment_Size (
+      ID         : in     RTEMS.ID;
+      Segment    : in     RTEMS.Address;
+      Size       :    out RTEMS.Unsigned32;
+      Result     :    out RTEMS.Status_Codes
+   );
+
+   procedure Region_Return_Segment (
+      ID      : in     RTEMS.ID;
+      Segment : in     RTEMS.Address;
+      Result  :    out RTEMS.Status_Codes
+   );
+
+
+   --
+   --  Dual Ported Memory Manager
+   --
+
+   procedure Port_Create (
+      Name           : in     RTEMS.Name;
+      Internal_Start : in     RTEMS.Address;
+      External_Start : in     RTEMS.Address;
+      Length         : in     RTEMS.Unsigned32;
+      ID             :    out RTEMS.ID;
+      Result         :    out RTEMS.Status_Codes
+   );
+
+   procedure Port_Ident (
+      Name   : in     RTEMS.Name;
+      ID     :    out RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Port_Delete (
+      ID     : in     RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Port_External_To_Internal (
+      ID       : in     RTEMS.ID;
+      External : in     RTEMS.Address;
+      Internal :    out RTEMS.Address;
+      Result   :    out RTEMS.Status_Codes
+   );
+
+   procedure Port_Internal_To_External (
+      ID       : in     RTEMS.ID;
+      Internal : in     RTEMS.Address;
+      External :    out RTEMS.Address;
+      Result   :    out RTEMS.Status_Codes
+   );
+
+   --
+   --  Input/Output Manager
+   --
+
+   procedure IO_Initialize (
+      Major        : in     RTEMS.Device_Major_Number;
+      Minor        : in     RTEMS.Device_Minor_Number;
+      Argument     : in     RTEMS.Address;
+      Return_Value :    out RTEMS.Unsigned32;
+      Result       :    out RTEMS.Status_Codes
+   );
+
+   procedure IO_Register_Name (
+      Name   : in     String;
+      Major  : in     RTEMS.Device_Major_Number;
+      Minor  : in     RTEMS.Device_Minor_Number;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure IO_Lookup_Name (
+      Name         : in     String;
+      Device_Info  :    out RTEMS.Driver_Name_t;
+      Result       :    out RTEMS.Status_Codes
+   );
+
+   procedure IO_Open (
+      Major        : in     RTEMS.Device_Major_Number;
+      Minor        : in     RTEMS.Device_Minor_Number;
+      Argument     : in     RTEMS.Address;
+      Return_Value :    out RTEMS.Unsigned32;
+      Result       :    out RTEMS.Status_Codes
+   );
+
+   procedure IO_Close (
+      Major        : in     RTEMS.Device_Major_Number;
+      Minor        : in     RTEMS.Device_Minor_Number;
+      Argument     : in     RTEMS.Address;
+      Return_Value :    out RTEMS.Unsigned32;
+      Result       :    out RTEMS.Status_Codes
+   );
+
+   procedure IO_Read (
+      Major        : in     RTEMS.Device_Major_Number;
+      Minor        : in     RTEMS.Device_Minor_Number;
+      Argument     : in     RTEMS.Address;
+      Return_Value :    out RTEMS.Unsigned32;
+      Result       :    out RTEMS.Status_Codes
+   );
+
+   procedure IO_Write (
+      Major        : in     RTEMS.Device_Major_Number;
+      Minor        : in     RTEMS.Device_Minor_Number;
+      Argument     : in     RTEMS.Address;
+      Return_Value :    out RTEMS.Unsigned32;
+      Result       :    out RTEMS.Status_Codes
+   );
+
+   procedure IO_Control (
+      Major        : in     RTEMS.Device_Major_Number;
+      Minor        : in     RTEMS.Device_Minor_Number;
+      Argument     : in     RTEMS.Address;
+      Return_Value :    out RTEMS.Unsigned32;
+      Result       :    out RTEMS.Status_Codes
+   );
+
+
+   --
+   --  Fatal Error Manager
+   --
+
+   procedure Fatal_Error_Occurred (
+      The_Error : in     RTEMS.Unsigned32
+   );
+
+
+   --
+   --  Rate Monotonic Manager
+   --
+
+   procedure Rate_Monotonic_Create (
+      Name   : in     RTEMS.Name;
+      ID     :    out RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Rate_Monotonic_Ident (
+      Name   : in     RTEMS.Name;
+      ID     :    out RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Rate_Monotonic_Delete (
+      ID     : in     RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Rate_Monotonic_Cancel (
+      ID     : in     RTEMS.ID;
+      Result :    out RTEMS.Status_Codes
+   );
+
+   procedure Rate_Monotonic_Period (
+      ID      : in     RTEMS.ID;
+      Length  : in     RTEMS.Interval;
+      Result  :    out RTEMS.Status_Codes
+   );
+
+   procedure Rate_Monotonic_Get_Status (
+      ID      : in     RTEMS.ID;
+      Status  :    out RTEMS.Rate_Monotonic_Period_Status;
+      Result  :    out RTEMS.Status_Codes
+   );
+
+   --
+   --  Multiprocessing Manager
+   --
+
+   procedure Multiprocessing_Announce;
+
+
+   --
+   --  Debug Manager
+   --
+
+   procedure Debug_Enable (
+      To_Be_Enabled : in     RTEMS.Debug_Set
+   );
+
+   procedure Debug_Disable (
+      To_Be_Disabled : in     RTEMS.Debug_Set
+   );
+
+   function Debug_Is_Enabled (
+      Level : in     RTEMS.Debug_Set
+   ) return RTEMS.Boolean;
+
+  --
+  --  Some Useful Data Items
+  --
+
+  Configuration : RTEMS.Configuration_Table_Pointer;
+  pragma Import (C, Configuration, "_Configuration_Table");
+  -- function Configuration 
+  -- return RTEMS.Configuration_Table_Pointer;
+
+  
+private
+end RTEMS;
