Index: c/src/ada/ChangeLog
===================================================================
--- c/src/ada/ChangeLog	(revision 73b019a066122c998838b5c67528a3b2ac3dc4ea)
+++ c/src/ada/ChangeLog	(revision f04014876315109f4a8266c083f6bfd7f4bb59ea)
@@ -1,2 +1,7 @@
+2008-11-20	Joel Sherrill <joel.sherrill@OARcorp.com>
+
+	PR 1339/Ada
+	* rtems.adb, rtems.ads: Re-add IO Manager to Ada binding.
+
 2008-05-06	Joel Sherrill <joel.sherrill@oarcorp.com>
 
Index: c/src/ada/rtems.adb
===================================================================
--- c/src/ada/rtems.adb	(revision 73b019a066122c998838b5c67528a3b2ac3dc4ea)
+++ c/src/ada/rtems.adb	(revision f04014876315109f4a8266c083f6bfd7f4bb59ea)
@@ -23,5 +23,4 @@
 with Ada;
 with Ada.Unchecked_Conversion;
-with System;
 with Interfaces; use Interfaces;
 with Interfaces.C; use Interfaces.C;
@@ -39,5 +38,5 @@
    begin
 
-      if Ada_Boolean = Standard.True then
+      if Ada_Boolean then
          return RTEMS.True;
       end if;
@@ -1735,4 +1734,143 @@
    end Port_Internal_To_External;
 
+   --
+   -- Input/Output Manager
+   --
+
+   procedure IO_Register_Name (
+      Name   : in     String;
+      Major  : in     RTEMS.Device_Major_Number;
+      Minor  : in     RTEMS.Device_Minor_Number;
+      Result :    out RTEMS.Status_Codes
+   ) is
+      function IO_Register_Name_Base (
+         Name   : Interfaces.C.Char_Array;
+         Major  : RTEMS.Device_Major_Number;
+         Minor  : RTEMS.Device_Minor_Number
+      )  return RTEMS.Status_Codes;
+      pragma Import (C, IO_Register_Name_Base, "rtems_io_register_name");
+   begin
+
+      Result :=
+         IO_Register_Name_Base ( Interfaces.C.To_C (Name), Major, Minor );
+
+   end IO_Register_Name;
+
+   procedure IO_Lookup_Name (
+      Name         : in     String;
+      Device_Info  :    out RTEMS.Driver_Name_t;
+      Result       :    out RTEMS.Status_Codes
+   ) is
+      function IO_Lookup_Name_Base (
+         Name        : Interfaces.C.Char_Array;
+         Device_Info : access RTEMS.Driver_Name_t
+      )  return RTEMS.Status_Codes;
+      pragma Import (C, IO_Lookup_Name_Base, "rtems_io_lookup_name");
+      Device_Info_Base : aliased RTEMS.Driver_Name_t;
+   begin
+
+      Result := IO_Lookup_Name_Base (
+         Interfaces.C.To_C (Name),
+         Device_Info_Base'Unchecked_Access
+      );
+      Device_Info := Device_Info_Base;
+
+   end IO_Lookup_Name;
+
+   procedure IO_Open (
+      Major        : in     RTEMS.Device_Major_Number;
+      Minor        : in     RTEMS.Device_Minor_Number;
+      Argument     : in     RTEMS.Address;
+      Result       :    out RTEMS.Status_Codes
+   ) is
+      function IO_Open_Base (
+         Major        : RTEMS.Device_Major_Number;
+         Minor        : RTEMS.Device_Minor_Number;
+         Argument     : RTEMS.Address
+      )  return RTEMS.Status_Codes;
+      pragma Import (C, IO_Open_Base, "rtems_io_open");
+   begin
+ 
+      Result := IO_Open_Base (Major, Minor, Argument);
+ 
+   end IO_Open;
+   pragma Inline (IO_Open);
+ 
+   procedure IO_Close (
+      Major        : in     RTEMS.Device_Major_Number;
+      Minor        : in     RTEMS.Device_Minor_Number;
+      Argument     : in     RTEMS.Address;
+      Result       :    out RTEMS.Status_Codes
+   ) is
+      function IO_Close_Base (
+         Major        : RTEMS.Device_Major_Number;
+         Minor        : RTEMS.Device_Minor_Number;
+         Argument     : RTEMS.Address
+      )  return RTEMS.Status_Codes;
+      pragma Import (C, IO_Close_Base, "rtems_io_close");
+   begin
+ 
+      Result := IO_Close_Base (Major, Minor, Argument);
+ 
+   end IO_Close;
+   pragma Inline (IO_Close);
+ 
+   procedure IO_Read (
+      Major        : in     RTEMS.Device_Major_Number;
+      Minor        : in     RTEMS.Device_Minor_Number;
+      Argument     : in     RTEMS.Address;
+      Result       :    out RTEMS.Status_Codes
+   ) is
+      function IO_Read_Base (
+         Major        : RTEMS.Device_Major_Number;
+         Minor        : RTEMS.Device_Minor_Number;
+         Argument     : RTEMS.Address
+      )  return RTEMS.Status_Codes;
+      pragma Import (C, IO_Read_Base, "rtems_io_read");
+   begin
+ 
+      Result := IO_Read_Base (Major, Minor, Argument);
+ 
+   end IO_Read;
+   pragma Inline (IO_Read);
+ 
+   procedure IO_Write (
+      Major        : in     RTEMS.Device_Major_Number;
+      Minor        : in     RTEMS.Device_Minor_Number;
+      Argument     : in     RTEMS.Address;
+      Result       :    out RTEMS.Status_Codes
+   ) is
+      function IO_Write_Base (
+         Major        : RTEMS.Device_Major_Number;
+         Minor        : RTEMS.Device_Minor_Number;
+         Argument     : RTEMS.Address
+      )  return RTEMS.Status_Codes;
+      pragma Import (C, IO_Write_Base, "rtems_io_write");
+   begin
+ 
+      Result := IO_Write_Base (Major, Minor, Argument);
+ 
+   end IO_Write;
+   pragma Inline (IO_Write);
+ 
+   procedure IO_Control (
+      Major        : in     RTEMS.Device_Major_Number;
+      Minor        : in     RTEMS.Device_Minor_Number;
+      Argument     : in     RTEMS.Address;
+      Result       :    out RTEMS.Status_Codes
+   ) is
+      function IO_Control_Base (
+         Major        : RTEMS.Device_Major_Number;
+         Minor        : RTEMS.Device_Minor_Number;
+         Argument     : RTEMS.Address
+      )  return RTEMS.Status_Codes;
+      pragma Import (C, IO_Control_Base, "rtems_io_control");
+   begin
+ 
+      Result := IO_Control_Base (Major, Minor, Argument);
+ 
+   end IO_Control;
+   pragma Inline (IO_Control);
+ 
 
    --
@@ -2100,5 +2238,5 @@
       )  return RTEMS.Status_Codes;
       pragma Import (C, Object_Set_Name_Base, "rtems_object_set_name");
-      NameAsCString : chars_ptr := New_String(Name);
+      NameAsCString : constant chars_ptr := New_String(Name);
    begin
       Result := Object_Set_Name_Base (ID, NameAsCString);
@@ -2233,6 +2371,6 @@
       )  return chars_ptr;
       pragma Import (C, Object_Get_API_Name_Base, "rtems_object_get_api_name");
-      Result : chars_ptr := Object_Get_API_Name_Base (API);
-      APIName : String :=  Value_Without_Exception (Result);
+      Result : constant chars_ptr := Object_Get_API_Name_Base (API);
+      APIName : constant String :=  Value_Without_Exception (Result);
    begin
       Name := APIName;
@@ -2250,6 +2388,7 @@
       pragma Import
          (C, Object_Get_API_Class_Name_Base, "rtems_object_get_api_class_name");
-      Result : chars_ptr := Object_Get_API_Class_Name_Base (The_API, The_Class);
-      ClassName : String :=  Value_Without_Exception (Result);
+      Result : constant
+        chars_ptr := Object_Get_API_Class_Name_Base (The_API, The_Class);
+      ClassName : constant String :=  Value_Without_Exception (Result);
    begin
       Name := ClassName;
Index: c/src/ada/rtems.ads
===================================================================
--- c/src/ada/rtems.ads	(revision 73b019a066122c998838b5c67528a3b2ac3dc4ea)
+++ c/src/ada/rtems.ads	(revision f04014876315109f4a8266c083f6bfd7f4bb59ea)
@@ -99,4 +99,14 @@
 
    subtype Node                is RTEMS.Unsigned32;
+
+   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;
+
 
    --
@@ -1163,4 +1173,61 @@
 
    --
+   --  Input/Output Manager
+   --
+
+   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;
+      Result       :    out RTEMS.Status_Codes
+   );
+   pragma Inline (IO_Open);
+
+   procedure IO_Close (
+      Major        : in     RTEMS.Device_Major_Number;
+      Minor        : in     RTEMS.Device_Minor_Number;
+      Argument     : in     RTEMS.Address;
+      Result       :    out RTEMS.Status_Codes
+   );
+   pragma Inline (IO_Close);
+
+   procedure IO_Read (
+      Major        : in     RTEMS.Device_Major_Number;
+      Minor        : in     RTEMS.Device_Minor_Number;
+      Argument     : in     RTEMS.Address;
+      Result       :    out RTEMS.Status_Codes
+   );
+   pragma Inline (IO_Read);
+
+   procedure IO_Write (
+      Major        : in     RTEMS.Device_Major_Number;
+      Minor        : in     RTEMS.Device_Minor_Number;
+      Argument     : in     RTEMS.Address;
+      Result       :    out RTEMS.Status_Codes
+   );
+   pragma Inline (IO_Write);
+
+   procedure IO_Control (
+      Major        : in     RTEMS.Device_Major_Number;
+      Minor        : in     RTEMS.Device_Minor_Number;
+      Argument     : in     RTEMS.Address;
+      Result       :    out RTEMS.Status_Codes
+   );
+   pragma Inline (IO_Control);
+
+   --
    --  Fatal Error Manager
    --
