summaryrefslogtreecommitdiffstats
path: root/cpukit/include/adainclude/rtems.adb
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/include/adainclude/rtems.adb')
-rw-r--r--cpukit/include/adainclude/rtems.adb232
1 files changed, 232 insertions, 0 deletions
diff --git a/cpukit/include/adainclude/rtems.adb b/cpukit/include/adainclude/rtems.adb
new file mode 100644
index 0000000000..e717f42bab
--- /dev/null
+++ b/cpukit/include/adainclude/rtems.adb
@@ -0,0 +1,232 @@
+-- RTEMS / Body
+--
+-- DESCRIPTION:
+--
+-- This package provides the interface to the RTEMS API.
+--
+--
+-- DEPENDENCIES:
+--
+--
+--
+-- COPYRIGHT (c) 1997-2011.
+-- On-Line Applications Research Corporation (OAR).
+--
+-- The license and distribution terms for this file may in
+-- the file LICENSE in this distribution or at
+-- http://www.rtems.org/license/LICENSE.
+--
+
+with Ada;
+with Ada.Unchecked_Conversion;
+with Interfaces; use Interfaces;
+with Interfaces.C; use Interfaces.C;
+
+package body RTEMS is
+
+ --
+ -- Utility Functions
+ --
+
+ function From_Ada_Boolean
+ (Ada_Boolean : Standard.Boolean)
+ return RTEMS.Boolean
+ is
+ begin
+
+ if Ada_Boolean then
+ return RTEMS.True;
+ end if;
+
+ return RTEMS.False;
+
+ end From_Ada_Boolean;
+
+ function To_Ada_Boolean
+ (RTEMS_Boolean : RTEMS.Boolean)
+ return Standard.Boolean
+ is
+ begin
+
+ if RTEMS_Boolean = RTEMS.True then
+ return Standard.True;
+ end if;
+
+ return Standard.False;
+
+ end To_Ada_Boolean;
+
+ function Milliseconds_To_Microseconds
+ (Milliseconds : RTEMS.Unsigned32)
+ return RTEMS.Unsigned32
+ is
+ begin
+
+ return Milliseconds * 1000;
+
+ end Milliseconds_To_Microseconds;
+
+ function Microseconds_To_Ticks
+ (Microseconds : RTEMS.Unsigned32)
+ return RTEMS.Interval
+ is
+ function Microseconds_Per_Tick return RTEMS.Unsigned32;
+ pragma Import (C, Microseconds_Per_Tick, "_ada_microseconds_per_tick");
+ begin
+
+ return Microseconds / Microseconds_Per_Tick;
+
+ end Microseconds_To_Ticks;
+
+ function Milliseconds_To_Ticks
+ (Milliseconds : RTEMS.Unsigned32)
+ return RTEMS.Interval
+ is
+ begin
+
+ return Microseconds_To_Ticks
+ (Milliseconds_To_Microseconds (Milliseconds));
+
+ end Milliseconds_To_Ticks;
+
+ procedure Name_To_Characters
+ (Name : in RTEMS.Name;
+ C1 : out Character;
+ C2 : out Character;
+ C3 : out Character;
+ C4 : out Character)
+ is
+ C1_Value : RTEMS.Unsigned32;
+ C2_Value : RTEMS.Unsigned32;
+ C3_Value : RTEMS.Unsigned32;
+ C4_Value : RTEMS.Unsigned32;
+ begin
+
+ C1_Value := Interfaces.Shift_Right (Name, 24);
+ C2_Value := Interfaces.Shift_Right (Name, 16);
+ C3_Value := Interfaces.Shift_Right (Name, 8);
+ C4_Value := Name;
+
+ C1_Value := C1_Value and 16#00FF#;
+ C2_Value := C2_Value and 16#00FF#;
+ C3_Value := C3_Value and 16#00FF#;
+ C4_Value := C4_Value and 16#00FF#;
+
+ C1 := Character'Val (C1_Value);
+ C2 := Character'Val (C2_Value);
+ C3 := Character'Val (C3_Value);
+ C4 := Character'Val (C4_Value);
+
+ end Name_To_Characters;
+
+ function Get_Node (ID : in RTEMS.ID) return RTEMS.Unsigned32 is
+ begin
+
+ -- May not be right
+ return Interfaces.Shift_Right (ID, 16);
+
+ end Get_Node;
+
+ function Get_Index (ID : in RTEMS.ID) return RTEMS.Unsigned32 is
+ begin
+
+ -- May not be right
+ return ID and 16#FFFF#;
+
+ end Get_Index;
+
+ function Are_Statuses_Equal
+ (Status : in RTEMS.Status_Codes;
+ Desired : in RTEMS.Status_Codes)
+ return Standard.Boolean
+ is
+ begin
+
+ if Status = Desired then
+ return Standard.True;
+ end if;
+
+ return Standard.False;
+
+ end Are_Statuses_Equal;
+
+ function Is_Status_Successful
+ (Status : in RTEMS.Status_Codes)
+ return Standard.Boolean
+ is
+ begin
+
+ if Status = RTEMS.Successful then
+ return Standard.True;
+ end if;
+
+ return Standard.False;
+
+ end Is_Status_Successful;
+
+ function Subtract
+ (Left : in RTEMS.Address;
+ Right : in RTEMS.Address)
+ return RTEMS.Unsigned32
+ is
+ function To_Unsigned32 is new Ada.Unchecked_Conversion (
+ System.Address,
+ RTEMS.Unsigned32);
+
+ begin
+ return To_Unsigned32 (Left) - To_Unsigned32 (Right);
+ end Subtract;
+
+ function Are_Equal
+ (Left : in RTEMS.Address;
+ Right : in RTEMS.Address)
+ return Standard.Boolean
+ is
+ function To_Unsigned32 is new Ada.Unchecked_Conversion (
+ System.Address,
+ RTEMS.Unsigned32);
+
+ begin
+ return (To_Unsigned32 (Left) = To_Unsigned32 (Right));
+ end Are_Equal;
+
+ --
+ --
+ -- RTEMS API
+ --
+
+ function Build_Name (
+ C1 : in Character;
+ C2 : in Character;
+ C3 : in Character;
+ C4 : in Character
+ ) return RTEMS.Name is
+ C1_Value : RTEMS.Unsigned32;
+ C2_Value : RTEMS.Unsigned32;
+ C3_Value : RTEMS.Unsigned32;
+ C4_Value : RTEMS.Unsigned32;
+ begin
+
+ C1_Value := Character'Pos( C1 );
+ C2_Value := Character'Pos( C2 );
+ C3_Value := Character'Pos( C3 );
+ C4_Value := Character'Pos( C4 );
+
+ return Interfaces.Shift_Left( C1_Value, 24 ) or
+ Interfaces.Shift_Left( C2_Value, 16 ) or
+ Interfaces.Shift_Left( C3_Value, 8 ) or
+ C4_Value;
+
+ end Build_Name;
+
+ --
+ -- Initialization Manager -- Shutdown Only
+ --
+ procedure Shutdown_Executive (Status : in RTEMS.Unsigned32) is
+ procedure Shutdown_Executive_Base (Status : RTEMS.Unsigned32);
+ pragma Import (C, Shutdown_Executive_Base, "rtems_shutdown_executive");
+ begin
+ Shutdown_Executive_Base (Status);
+ end Shutdown_Executive;
+
+end RTEMS;