Index: c/src/exec/rtems/headers/asr.h
===================================================================
--- c/src/exec/rtems/headers/asr.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/asr.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,177 @@
+/*  asr.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Asynchronous Signal Handler.  This Handler provides the low-level
+ *  support required by the Signal Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_ASR_h
+#define __RTEMS_ASR_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/modes.h>
+
+/*
+ *
+ *  The following type defines the control block used to manage
+ *  each signal set.
+ */
+
+typedef unsigned32 rtems_signal_set;
+
+/*
+ *  Return type for ASR Handler
+ */
+
+typedef void rtems_asr;
+
+/*
+ *  The following type corresponds to the applications asynchronous
+ *  signal processing routine.
+ */
+
+typedef rtems_asr ( *rtems_asr_entry )(
+                 rtems_signal_set
+             );
+
+/*
+ *
+ *  The following defines the control structure used to manage
+ *  signals.  Each thread has a copy of this record.
+ */
+
+typedef struct {
+  rtems_asr_entry            handler;          /* address of RTEMS_ASR */
+  rtems_mode          mode_set;         /* RTEMS_ASR mode */
+  rtems_signal_set signals_posted;   /* signal set */
+  rtems_signal_set signals_pending;  /* pending signal set */
+  unsigned32             nest_level;       /* nest level of RTEMS_ASR */
+}   ASR_Information;
+
+/*
+ *  The following constants define the individual signals which may
+ *  be used to compose a signal set.
+ */
+
+#define RTEMS_SIGNAL_0    0x00000001
+#define RTEMS_SIGNAL_1    0x00000002
+#define RTEMS_SIGNAL_2    0x00000004
+#define RTEMS_SIGNAL_3    0x00000008
+#define RTEMS_SIGNAL_4    0x00000010
+#define RTEMS_SIGNAL_5    0x00000020
+#define RTEMS_SIGNAL_6    0x00000040
+#define RTEMS_SIGNAL_7    0x00000080
+#define RTEMS_SIGNAL_8    0x00000100
+#define RTEMS_SIGNAL_9    0x00000200
+#define RTEMS_SIGNAL_10   0x00000400
+#define RTEMS_SIGNAL_11   0x00000800
+#define RTEMS_SIGNAL_12   0x00001000
+#define RTEMS_SIGNAL_13   0x00002000
+#define RTEMS_SIGNAL_14   0x00004000
+#define RTEMS_SIGNAL_15   0x00008000
+#define RTEMS_SIGNAL_16   0x00010000
+#define RTEMS_SIGNAL_17   0x00020000
+#define RTEMS_SIGNAL_18   0x00040000
+#define RTEMS_SIGNAL_19   0x00080000
+#define RTEMS_SIGNAL_20   0x00100000
+#define RTEMS_SIGNAL_21   0x00200000
+#define RTEMS_SIGNAL_22   0x00400000
+#define RTEMS_SIGNAL_23   0x00800000
+#define RTEMS_SIGNAL_24   0x01000000
+#define RTEMS_SIGNAL_25   0x02000000
+#define RTEMS_SIGNAL_26   0x04000000
+#define RTEMS_SIGNAL_27   0x08000000
+#define RTEMS_SIGNAL_28   0x10000000
+#define RTEMS_SIGNAL_29   0x20000000
+#define RTEMS_SIGNAL_30   0x40000000
+#define RTEMS_SIGNAL_31   0x80000000
+
+/*
+ *  _ASR_Initialize
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine initializes the given RTEMS_ASR information record.
+ */
+
+STATIC INLINE void _ASR_Initialize (
+  ASR_Information *information
+);
+
+/*
+ *  _ASR_Swap_signals
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine atomically swaps the pending and posted signal
+ *  sets.  This is done when the thread alters its mode in such a
+ *  way that the RTEMS_ASR disable/enable flag changes.
+ */
+
+STATIC INLINE void _ASR_Swap_signals (
+  ASR_Information *information
+);
+
+/*
+ *  _ASR_Is_null_handler
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the given asr_handler is NULL and
+ *  FALSE otherwise.
+ */
+
+STATIC INLINE boolean _ASR_Is_null_handler (
+  rtems_asr_entry asr_handler
+);
+
+/*
+ *  _ASR_Are_signals_pending
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if there are signals pending in the
+ *  given RTEMS_ASR information record and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _ASR_Are_signals_pending (
+  ASR_Information *information
+);
+
+/*
+ *  _ASR_Post_signals
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine posts the given signals into the signal_set
+ *  passed in.  The result is returned to the user in signal_set.
+ *
+ *  NOTE:  This must be implemented as a macro.
+ */
+
+STATIC INLINE void _ASR_Post_signals(
+  rtems_signal_set  signals,
+  rtems_signal_set *signal_set
+);
+
+#include <rtems/asr.inl>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/headers/attr.h
===================================================================
--- c/src/exec/rtems/headers/attr.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/attr.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,188 @@
+/*  attr.h
+ *
+ *  This include file contains all information about the Object Attributes
+ *  Handler.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_ATTRIBUTES_h
+#define __RTEMS_ATTRIBUTES_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* types */
+
+typedef unsigned32 rtems_attribute;
+
+/* constants */
+
+#define RTEMS_DEFAULT_ATTRIBUTES            0x00000000
+
+#define RTEMS_NO_FLOATING_POINT   0x00000000 /* don't use FP HW */
+#define RTEMS_FLOATING_POINT      0x00000001 /* utilize coprocessor */
+
+#define RTEMS_LOCAL               0x00000000 /* local resource */
+#define RTEMS_GLOBAL              0x00000002 /* global resource */
+
+#define RTEMS_FIFO                0x00000000 /* process RTEMS_FIFO */
+#define RTEMS_PRIORITY            0x00000004 /* process by priority */
+
+#define RTEMS_NO_LIMIT            0x00000000 /* unlimited Q entries */
+#define RTEMS_LIMIT               0x00000008 /* limit Q entries */
+
+#define RTEMS_COUNTING_SEMAPHORE  0x00000000
+#define RTEMS_BINARY_SEMAPHORE    0x00000010
+
+#define RTEMS_NO_INHERIT_PRIORITY 0x00000000
+#define RTEMS_INHERIT_PRIORITY    0x00000020
+
+#if ( CPU_HARDWARE_FP == TRUE )
+#define ATTRIBUTES_NOT_SUPPORTED       0
+#else
+#define ATTRIBUTES_NOT_SUPPORTED       RTEMS_FLOATING_POINT
+#endif
+
+#if ( CPU_ALL_TASKS_ARE_FP == TRUE )
+#define ATTRIBUTES_REQUIRED            RTEMS_FLOATING_POINT
+#else
+#define ATTRIBUTES_REQUIRED            0
+#endif
+
+/*
+ *  _Attributes_Handler_initialization
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs initialization for this handler.
+ *
+ *  NOTE: There is no initialization required in C.  Conditional compilation
+ *        takes care of this in C.
+ */
+
+#define _Attributes_Handler_initialization()
+
+/*
+ *  _Attributes_Set
+ *
+ *  DESCRIPTION:
+ *
+ *  This function sets the requested new_attributes in the attribute_set
+ *  passed in.  The result is returned to the user.
+ */
+
+STATIC INLINE rtems_attribute _Attributes_Set (
+   rtems_attribute new_attributes,
+   rtems_attribute attribute_set
+);
+
+/*
+ *  _Attributes_Clear
+ *
+ *  DESCRIPTION:
+ *
+ *  This function clears the requested new_attributes in the attribute_set
+ *  passed in.  The result is returned to the user.
+ */
+
+STATIC INLINE rtems_attribute _Attributes_Clear (
+   rtems_attribute attribute_set,
+   rtems_attribute mask
+);
+
+/*
+ *  _Attributes_Is_floating_point
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the floating point attribute is
+ *  enabled in the attribute_set and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Attributes_Is_floating_point(
+  rtems_attribute attribute_set
+);
+
+/*
+ *  _Attributes_Is_global
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the global object attribute is
+ *  enabled in the attribute_set and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Attributes_Is_global(
+  rtems_attribute attribute_set
+);
+
+/*
+ *  _Attributes_Is_priority
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the priority attribute is
+ *  enabled in the attribute_set and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Attributes_Is_priority(
+  rtems_attribute attribute_set
+);
+
+/*
+ *  _Attributes_Is_limit
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the limited attribute is
+ *  enabled in the attribute_set and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Attributes_Is_limit(
+  rtems_attribute attribute_set
+);
+
+/*
+ *  _Attributes_Is_binary_semaphore
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the binary semaphore attribute is
+ *  enabled in the attribute_set and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Attributes_Is_binary_semaphore(
+  rtems_attribute attribute_set
+);
+
+/*
+ *  _Attributes_Is_inherit_priority
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the priority inheritance attribute
+ *  is enabled in the attribute_set and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Attributes_Is_inherit_priority(
+  rtems_attribute attribute_set
+);
+
+#include <rtems/attr.inl>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/headers/clock.h
===================================================================
--- c/src/exec/rtems/headers/clock.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/clock.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,102 @@
+/*  clock.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Clock Manager.  This manager provides facilities to set, obtain,
+ *  and continually update the current date and time.
+ *
+ *  This manager provides directives to:
+ *
+ *     + set the current date and time
+ *     + obtain the current date and time
+ *     + announce a clock tick
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_CLOCK_h
+#define __RTEMS_CLOCK_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/tod.h>
+
+/*
+ *  List of things which can be returned by the rtems_clock_get directive.
+ */
+
+typedef enum {
+  RTEMS_CLOCK_GET_TOD,
+  RTEMS_CLOCK_GET_SECONDS_SINCE_EPOCH,
+  RTEMS_CLOCK_GET_TICKS_SINCE_BOOT,
+  RTEMS_CLOCK_GET_TICKS_PER_SECOND,
+  RTEMS_CLOCK_GET_TIME_VALUE
+} rtems_clock_get_options;
+
+/*
+ *  Standard flavor style to return TOD in for a rtems_clock_get option.
+ */
+
+typedef struct {
+  unsigned32  seconds;
+  unsigned32  microseconds;
+} rtems_clock_time_value;
+
+/*
+ *  rtems_clock_get
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_clock_get directive.  It returns
+ *  one of the following:
+ *    + current time of day
+ *    + seconds since epoch
+ *    + ticks since boot
+ *    + ticks per second
+ */
+
+rtems_status_code rtems_clock_get(
+  rtems_clock_get_options  option,
+  void              *time_buffer
+);
+
+/*
+ *  rtems_clock_set
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_clock_set directive.  It sets
+ *  the current time of day to that in the time_buffer record.
+ */
+
+rtems_status_code rtems_clock_set(
+  rtems_time_of_day *time_buffer
+);
+
+/*
+ *  rtems_clock_tick
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_clock_tick directive.  It is invoked
+ *  to inform RTEMS of the occurrence of a clock tick.
+ */
+
+rtems_status_code rtems_clock_tick( void );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/headers/dpmem.h
===================================================================
--- c/src/exec/rtems/headers/dpmem.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/dpmem.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,210 @@
+/*  dpmem.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Dual Ported Memory Manager. This manager provides a mechanism
+ *  for converting addresses between internal and external representations
+ *  for multiple dual-ported memory areas.
+ *
+ *  Directives provided are:
+ *
+ *     + create a port
+ *     + get ID of a port
+ *     + delete a port
+ *     + convert external to internal address
+ *     + convert internal to external address
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_DUAL_PORTED_MEMORY_h
+#define __RTEMS_DUAL_PORTED_MEMORY_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/object.h>
+
+/*
+ *  The following structure defines the port control block.  Each port
+ *  has a control block associated with it.  This control block contains
+ *  all information required to support the port related operations.
+ */
+
+typedef struct {
+  Objects_Control  Object;
+  void            *internal_base; /* base internal address */
+  void            *external_base; /* base external address */
+  unsigned32       length;        /* length of dual-ported area */
+}   Dual_ported_memory_Control;
+
+/*
+ *  The following define the internal Dual Ported Memory information.
+ */
+
+EXTERN Objects_Information  _Dual_ported_memory_Information;
+
+/*
+ *  _Dual_ported_memory_Manager_initialization
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the initialization necessary for this manager.
+ */
+
+void _Dual_ported_memory_Manager_initialization(
+  unsigned32 maximum_ports
+);
+
+/*
+ *  rtems_port_create
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_port_create directive.  The port
+ *  will have the name name.  The port maps onto an area of dual ported
+ *  memory of length bytes which has internal_start and external_start
+ *  as the internal and external starting addresses, respectively.
+ *  It returns the id of the created port in ID.
+ */
+
+rtems_status_code rtems_port_create(
+  Objects_Name  name,
+  void         *internal_start,
+  void         *external_start,
+  unsigned32    length,
+  Objects_Id   *id
+);
+
+/*
+ *  rtems_port_ident
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_port_ident directive.  This directive
+ *  returns the port ID associated with name.  If more than one port is
+ *  named name, then the port to which the ID belongs is arbitrary.
+ */
+
+rtems_status_code rtems_port_ident(
+  Objects_Name  name,
+  Objects_Id   *id
+);
+
+/*
+ *  rtems_port_delete
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_port_delete directive.  It deletes
+ *  the port associated with ID.
+ */
+
+rtems_status_code rtems_port_delete(
+  Objects_Id id
+);
+
+/*
+ *  rtems_port_external_to_internal
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_port_external_to_internal directive.
+ *  It returns the internal port address which maps to the provided
+ *  external port address for the specified port ID.
+ */
+
+rtems_status_code rtems_port_external_to_internal(
+  Objects_Id   id,
+  void        *external,
+  void       **internal
+);
+
+/*
+ *  rtems_port_internal_to_external
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the Port_internal_to_external directive.
+ *  It returns the external port address which maps to the provided
+ *  internal port address for the specified port ID.
+ */
+
+rtems_status_code rtems_port_internal_to_external(
+  Objects_Id   id,
+  void        *internal,
+  void       **external
+);
+
+/*
+ *  _Dual_ported_memory_Allocate
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine allocates a port control block from the inactive chain
+ *  of free port control blocks.
+ */
+
+STATIC INLINE Dual_ported_memory_Control
+  *_Dual_ported_memory_Allocate ( void );
+
+/*
+ *  _Dual_ported_memory_Free
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine frees a port control block to the inactive chain
+ *  of free port control blocks.
+ */
+
+STATIC INLINE void _Dual_ported_memory_Free (
+   Dual_ported_memory_Control *the_port
+);
+
+/*
+ *  _Dual_ported_memory_Get
+ *
+ *  DESCRIPTION:
+ *
+ *  This function maps port IDs to port control blocks.  If ID
+ *  corresponds to a local port, then it returns the_port control
+ *  pointer which maps to ID and location is set to OBJECTS_LOCAL.
+ *  Global ports are not supported, thus if ID  does not map to a
+ *  local port, location is set to OBJECTS_ERROR and the_port is
+ *  undefined.
+ */
+
+STATIC INLINE Dual_ported_memory_Control *_Dual_ported_memory_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+);
+
+/*
+ *  _Dual_ported_memory_Is_null
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the_port is NULL and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Dual_ported_memory_Is_null(
+  Dual_ported_memory_Control *the_port
+);
+
+#include <rtems/dpmem.inl>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/headers/event.h
===================================================================
--- c/src/exec/rtems/headers/event.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/event.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,158 @@
+/*  event.h
+ *
+ *  This include file contains the information pertaining to the Event
+ *  Manager.  This manager provides a high performance method of communication
+ *  and synchronization.
+ *
+ *  Directives provided are:
+ *
+ *     + send an event set to a task
+ *     + receive event condition
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_EVENT_h
+#define __RTEMS_EVENT_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/thread.h>
+#include <rtems/watchdog.h>
+#include <rtems/eventset.h>
+
+/*
+ *  This constant is passed as the event_in to the
+ *  rtems_event_receive directive to determine which events are pending.
+ */
+
+#define EVENT_CURRENT  0
+
+/*
+ *  _Event_Manager_initialization
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the initialization necessary for this manager.
+ */
+
+STATIC INLINE void _Event_Manager_initialization( void );
+
+/*
+ *  rtems_event_send
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_event_send directive.  It sends
+ *  event_in to the task specified by ID.  If the task is blocked
+ *  waiting to receive events and the posting of event_in satisfies
+ *  the task's event condition, then it is unblocked.
+ */
+
+rtems_status_code rtems_event_send (
+  Objects_Id         id,
+  rtems_event_set event_in
+);
+
+/*
+ *  rtems_event_receive
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_event_receive directive.  This
+ *  directive is invoked when the calling task wishes to receive
+ *  the event_in event condition.  One of the fields in the option_set
+ *  parameter determines whether the receive request is satisfied if
+ *  any or all of the events are pending.   If the event condition
+ *  is not satisfied immediately, then the task may block with an
+ *  optional timeout of TICKS clock ticks or return immediately.
+ *  This determination is based on another field in the option_set
+ *  parameter.  This directive returns the events received in the
+ *  event_out parameter.
+ */
+
+rtems_status_code rtems_event_receive (
+  rtems_event_set  event_in,
+  rtems_option     option_set,
+  rtems_interval   ticks,
+  rtems_event_set *event_out
+);
+
+/*
+ *  _Event_Seize
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine determines if the event condition event_in is
+ *  satisfied.  If so or if the no_wait option is enabled in option_set,
+ *  then the procedure returns immediately.  If neither of these
+ *  conditions is true, then the calling task is blocked with an
+ *  optional timeout of ticks clock ticks.
+ */
+
+void _Event_Seize (
+  rtems_event_set event_in,
+  rtems_option    option_set,
+  rtems_interval  ticks
+);
+
+/*
+ *  _Event_Surrender
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine determines if the event condition of the_thread
+ *  has been satisfied.  If so, it unblocks the_thread.
+ */
+
+void _Event_Surrender (
+  Thread_Control *the_thread
+);
+
+/*
+ *  _Event_Timeout
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked when a task's event receive request
+ *  has not been satisfied after the specified timeout interval.
+ *  The task represented by ID will be unblocked and its status
+ *  code will be set in it's control block to indicate that a timeout
+ *  has occurred.
+ */
+
+void _Event_Timeout (
+  Objects_Id  id,
+  void       *ignored
+);
+
+/*
+ *  The following defines the synchronization flag used by the
+ *  Event Manager to insure that signals sent to the currently
+ *  executing thread are received properly.
+ */
+
+EXTERN boolean _Event_Sync;    /* event manager sync flag */
+
+#include <rtems/event.inl>
+#include <rtems/eventmp.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/headers/eventmp.h
===================================================================
--- c/src/exec/rtems/headers/eventmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/eventmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,147 @@
+/*  eventmp.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Multiprocessing Support in the Event Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_EVENT_MP_h
+#define __RTEMS_EVENT_MP_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/event.h>
+#include <rtems/mppkt.h>
+#include <rtems/object.h>
+#include <rtems/thread.h>
+#include <rtems/watchdog.h>
+
+/*
+ *  The following enumerated type defines the list of
+ *  remote event operations.
+ */
+
+typedef enum {
+  EVENT_MP_SEND_REQUEST  =  0,
+  EVENT_MP_SEND_RESPONSE =  1,
+}   Event_MP_Remote_operations;
+
+/*
+ *  The following data structure defines the packet used to perform
+ *  remote event operations.
+ */
+
+typedef struct {
+  rtems_packet_prefix           Prefix;
+  Event_MP_Remote_operations operation;
+  rtems_event_set         event_in;
+}   Event_MP_Packet;
+
+/*
+ *  _Event_MP_Send_process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  process operation can be performed on another node.
+ *
+ *  This routine is not needed since there are no process
+ *  packets to be sent by this manager.
+ */
+
+/*
+ *  _Event_MP_Send_request_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive operation can be initiated on another node.
+ */
+
+rtems_status_code _Event_MP_Send_request_packet (
+  Event_MP_Remote_operations operation,
+  Objects_Id                 event_id,
+  rtems_event_set         event_in
+);
+
+/*
+ *  _Event_MP_Send_response_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive can be performed on another node.
+ */
+
+void _Event_MP_Send_response_packet (
+  Event_MP_Remote_operations  operation,
+  Thread_Control             *the_thread
+);
+
+/*
+ *
+ *  _Event_MP_Process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the actions specific to this package for
+ *  the request from another node.
+ */
+
+void _Event_MP_Process_packet (
+  rtems_packet_prefix *the_packet_prefix
+);
+
+/*
+ *  _Event_MP_Send_object_was_deleted
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked indirectly by the thread queue
+ *  when a proxy has been removed from the thread queue and
+ *  the remote node must be informed of this.
+ *
+ *  This routine is not needed since there are no objects
+ *  deleted by this manager.
+ */
+
+/*
+ *  _Event_MP_Send_extract_proxy
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked when a task is deleted and it
+ *  has a proxy which must be removed from a thread queue and
+ *  the remote node must be informed of this.
+ *
+ *  This routine is not needed since there are no objects
+ *  deleted by this manager.
+ */
+
+/*
+ *  _Event_MP_Get_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This function is used to obtain a event mp packet.
+ */
+
+Event_MP_Packet *_Event_MP_Get_packet ( void );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of file */
Index: c/src/exec/rtems/headers/eventset.h
===================================================================
--- c/src/exec/rtems/headers/eventset.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/eventset.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,142 @@
+/*  eventset.h
+ *
+ *  This include file contains the information pertaining to the
+ *  Event Sets Handler.  This handler provides methods for the manipulation
+ *  of event sets which will be sent and received by tasks.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_EVENT_SET_h
+#define __RTEMS_EVENT_SET_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ *  The following defines the type used to control event sets.
+ */
+
+typedef unsigned32 rtems_event_set;
+
+/*
+ *  The following constants define the individual events which may
+ *  be used to compose an event set.
+ */
+
+#define RTEMS_PENDING_EVENTS      0           /* receive pending events   */
+#define RTEMS_ALL_EVENTS  0xFFFFFFFF
+
+#define RTEMS_EVENT_0     0x00000001
+#define RTEMS_EVENT_1     0x00000002
+#define RTEMS_EVENT_2     0x00000004
+#define RTEMS_EVENT_3     0x00000008
+#define RTEMS_EVENT_4     0x00000010
+#define RTEMS_EVENT_5     0x00000020
+#define RTEMS_EVENT_6     0x00000040
+#define RTEMS_EVENT_7     0x00000080
+#define RTEMS_EVENT_8     0x00000100
+#define RTEMS_EVENT_9     0x00000200
+#define RTEMS_EVENT_10    0x00000400
+#define RTEMS_EVENT_11    0x00000800
+#define RTEMS_EVENT_12    0x00001000
+#define RTEMS_EVENT_13    0x00002000
+#define RTEMS_EVENT_14    0x00004000
+#define RTEMS_EVENT_15    0x00008000
+#define RTEMS_EVENT_16    0x00010000
+#define RTEMS_EVENT_17    0x00020000
+#define RTEMS_EVENT_18    0x00040000
+#define RTEMS_EVENT_19    0x00080000
+#define RTEMS_EVENT_20    0x00100000
+#define RTEMS_EVENT_21    0x00200000
+#define RTEMS_EVENT_22    0x00400000
+#define RTEMS_EVENT_23    0x00800000
+#define RTEMS_EVENT_24    0x01000000
+#define RTEMS_EVENT_25    0x02000000
+#define RTEMS_EVENT_26    0x04000000
+#define RTEMS_EVENT_27    0x08000000
+#define RTEMS_EVENT_28    0x10000000
+#define RTEMS_EVENT_29    0x20000000
+#define RTEMS_EVENT_30    0x40000000
+#define RTEMS_EVENT_31    0x80000000
+
+
+/*
+ *  The following constant is the value of an event set which
+ *  has no events pending.
+ */
+
+#define EVENT_SETS_NONE_PENDING 0
+
+/*
+ *  _Event_sets_Is_empty
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if on events are posted in the event_set,
+ *  and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Event_sets_Is_empty(
+  rtems_event_set the_event_set
+);
+
+/*
+ *  _Event_sets_Post
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine posts the given new_events into the event_set
+ *  passed in.  The result is returned to the user in event_set.
+ */
+
+STATIC INLINE void _Event_sets_Post(
+  rtems_event_set  the_new_events,
+  rtems_event_set *the_event_set
+);
+
+/*
+ *  _Event_sets_Get
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns the events in event_condition which are
+ *  set in event_set.
+ */
+
+STATIC INLINE rtems_event_set _Event_sets_Get(
+  rtems_event_set the_event_set,
+  rtems_event_set the_event_condition
+);
+
+/*
+ *  _Event_sets_Clear
+ *
+ *  DESCRIPTION:
+ *
+ *  This function removes the events in mask from the event_set
+ *  passed in.  The result is returned to the user in event_set.
+ */
+
+STATIC INLINE rtems_event_set _Event_sets_Clear(
+ rtems_event_set the_event_set,
+ rtems_event_set the_mask
+);
+
+#include <rtems/eventset.inl>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/headers/intr.h
===================================================================
--- c/src/exec/rtems/headers/intr.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/intr.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,125 @@
+/*  intr.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Interrupt Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_INTERRUPT_h
+#define __RTEMS_INTERRUPT_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/isr.h>
+
+/*
+ *  Interrupt level type
+ */
+
+typedef ISR_Level rtems_interrupt_level;
+
+/*
+ *  _Interrupt_Manager_initialization
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine initializes the interrupt manager.
+ *
+ */
+
+void _Interrupt_Manager_initialization( void );
+
+/*
+ *  rtems_interrupt_catch
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_interrupt_catch directive.  This
+ *  directive installs new_isr_handler as the RTEMS interrupt service
+ *  routine for vector.  The previous RTEMS interrupt service
+ *  routine is returned in old_isr_handler.
+ */
+
+rtems_status_code rtems_interrupt_catch(
+  rtems_isr_entry    new_isr_handler,
+  rtems_vector_number  vector,
+  rtems_isr_entry   *old_isr_handler
+);
+
+/*
+ *  rtems_interrupt_disable
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine disables all maskable interrupts and returns the
+ *  previous level in _isr_cookie.
+ */
+
+#define rtems_interrupt_disable( _isr_cookie ) \
+    _ISR_Disable(_isr_cookie)
+        
+/*
+ *  rtems_interrupt_enable
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine enables maskable interrupts to the level indicated
+ *  _isr_cookie.
+ */
+
+#define rtems_interrupt_enable( _isr_cookie ) \
+    _ISR_Enable(_isr_cookie)
+        
+/*
+ *  rtems_interrupt_flash
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine temporarily enables maskable interrupts to the
+ *  level in _isr_cookie before redisabling them.
+ */
+
+#define rtems_interrupt_flash( _isr_cookie ) \
+    _ISR_Flash(_isr_cookie)
+
+/*
+ *  rtems_interrupt_cause
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine generates an interrupt.
+ *
+ *  NOTE:  No implementation.
+ */
+
+#define rtems_interrupt_cause( _interrupt_to_cause )
+
+/*
+ *  rtems_interrupt_cause
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine clears the specified interrupt.
+ *
+ *  NOTE:  No implementation.
+ */
+
+#define rtems_interrupt_clear( _interrupt_to_clear )
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/headers/message.h
===================================================================
--- c/src/exec/rtems/headers/message.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/message.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,461 @@
+/*  message.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Message Queue Manager.  This manager provides a mechanism for
+ *  communication and synchronization between tasks using messages.
+ *
+ *  Directives provided are:
+ *
+ *     + create a queue
+ *     + get ID of a queue
+ *     + delete a queue
+ *     + put a message at the rear of a queue
+ *     + put a message at the front of a queue
+ *     + broadcast N messages to a queue
+ *     + receive message from a queue
+ *     + flush all messages on a queue
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_MESSAGE_QUEUE_h
+#define __RTEMS_MESSAGE_QUEUE_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/chain.h>
+#include <rtems/object.h>
+#include <rtems/threadq.h>
+
+/*
+ *  The following defines the data types needed to manipulate
+ *  the contents of message buffers.
+ */
+
+typedef struct {
+  unsigned32 field1;
+  unsigned32 field2;
+  unsigned32 field3;
+  unsigned32 field4;
+}  Message_queue_Buffer;
+
+/*
+ *  The following records define the organization of a message
+ *  buffer.
+ */
+
+typedef struct {
+  Chain_Node           Node;
+  Message_queue_Buffer Contents;
+}   Message_queue_Buffer_control;
+
+/*
+ *  The following records define the control block used to manage
+ *  each message queue.
+ */
+
+typedef struct {
+  Objects_Control      Object;
+  Thread_queue_Control Wait_queue;
+  rtems_attribute   attribute_set;
+  unsigned32           maximum_pending_messages;
+  unsigned32           number_of_pending_messages;
+  Chain_Control        Pending_messages;
+}   Message_queue_Control;
+
+/*
+ *  The following defines the information control block used to
+ *  manage this class of objects.
+ */
+
+EXTERN Objects_Information  _Message_queue_Information;
+
+/*
+ *  The following defines the data structures used to
+ *  manage the pool of inactive message buffers.
+ */
+
+EXTERN Chain_Control _Message_queue_Inactive_messages;
+
+/*
+ *  The following enumerated type details the modes in which a message
+ *  may be submitted to a message queue.  The message may be posted
+ *  in a send or urgent fashion.
+ */
+
+typedef enum {
+  MESSAGE_QUEUE_SEND_REQUEST   = 0,
+  MESSAGE_QUEUE_URGENT_REQUEST = 1
+}  Message_queue_Submit_types;
+
+/*
+ *  _Message_queue_Manager_initialization
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the initialization necessary for this manager.
+ */
+
+void _Message_queue_Manager_initialization(
+  unsigned32 maximum_message_queues,
+  unsigned32 maximum_messages
+);
+
+/*
+ *  rtems_message_queue_create
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_message_queue_create directive.  The
+ *  message queue will have the name name.  If the attribute_set indicates
+ *  that the message queue is to be limited in the number of messages
+ *  that can be outstanding, then count indicates the maximum number of
+ *  messages that will be held.  It returns the id of the created
+ *  message queue in ID.
+ */
+
+rtems_status_code rtems_message_queue_create(
+  Objects_Name        name,
+  unsigned32          count,
+  rtems_attribute  attribute_set,
+  Objects_Id         *id
+);
+
+/*
+ *  rtems_message_queue_ident
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_message_queue_ident directive.
+ *  This directive returns the message queue ID associated with NAME.
+ *  If more than one message queue is named name, then the message
+ *  queue to which the ID belongs is arbitrary.  node indicates the
+ *  extent of the search for the ID of the message queue named name.
+ *  The search can be limited to a particular node or allowed to
+ *  encompass all nodes.
+ */
+
+rtems_status_code rtems_message_queue_ident(
+  Objects_Name  name,
+  unsigned32    node,
+  Objects_Id   *id
+);
+
+/*
+ *  rtems_message_queue_delete
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_message_queue_delete directive.  The
+ *  message queue indicated by ID is deleted.
+ */
+
+rtems_status_code rtems_message_queue_delete(
+  Objects_Id id
+);
+
+/*
+ *  rtems_message_queue_send
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_message_queue_send directive.
+ *  This directive sends the message buffer to the message queue
+ *  indicated by ID.  If one or more tasks is blocked waiting
+ *  to receive a message from this message queue, then one will
+ *  receive the message.  The task selected to receive the
+ *  message is based on the task queue discipline algorithm in
+ *  use by this particular message queue.  If no tasks are waiting,
+ *  then the message buffer will be placed at the rear of the
+ *  chain of pending messages for this message queue.
+ */
+
+rtems_status_code rtems_message_queue_send(
+  Objects_Id            id,
+  void                 *buffer
+);
+
+/*
+ *  rtems_message_queue_urgent
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_message_queue_send directive.
+ *  This directive sends the message buffer to the message queue
+ *  indicated by ID.  If one or more tasks is blocked waiting
+ *  to receive a message from this message queue, then one will
+ *  receive the message.  The task selected to receive the
+ *  message is based on the task queue discipline algorithm in
+ *  use by this particular message queue.  If no tasks are waiting,
+ *  then the message buffer will be placed at the rear of the
+ *  chain of pending messages for this message queue.
+ */
+
+rtems_status_code rtems_message_queue_urgent(
+  Objects_Id            id,
+  void                 *buffer
+);
+
+/*
+ *  rtems_message_queue_broadcast
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_message_queue_send directive.
+ *  This directive sends the message buffer to the message queue
+ *  indicated by ID.  If one or more tasks is blocked waiting
+ *  to receive a message from this message queue, then one will
+ *  receive the message.  The task selected to receive the
+ *  message is based on the task queue discipline algorithm in
+ *  use by this particular message queue.  If no tasks are waiting,
+ *  then the message buffer will be placed at the rear of the
+ *  chain of pending messages for this message queue.
+ */
+
+rtems_status_code rtems_message_queue_broadcast(
+  Objects_Id            id,
+  void                 *buffer,
+  unsigned32           *count
+);
+
+/*
+ *  rtems_message_queue_receive
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_message_queue_receive directive.
+ *  This directive is invoked when the calling task wishes to receive
+ *  a message from the message queue indicated by ID.  The received
+ *  message is to be placed in buffer.  If no messages are outstanding
+ *  and the option_set indicates that the task is willing to block,
+ *  then the task will be blocked until a message arrives or until,
+ *  optionally, timeout clock ticks have passed.
+ */
+
+rtems_status_code rtems_message_queue_receive(
+  Objects_Id            id,
+  void                 *buffer,
+  unsigned32            option_set,
+  rtems_interval     timeout
+);
+
+/*
+ *  rtems_message_queue_flush
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_message_queue_flush directive.
+ *  This directive takes all outstanding messages for the message
+ *  queue indicated by ID and returns them to the inactive message
+ *  chain.  The number of messages flushed is returned in COUNT.
+ */
+
+rtems_status_code rtems_message_queue_flush(
+  Objects_Id  id,
+  unsigned32 *count
+);
+
+/*
+ *  _Message_queue_Copy_buffer
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine copies the contents of the source message buffer
+ *  to the destination message buffer.
+ */
+
+STATIC INLINE void _Message_queue_Copy_buffer (
+  Message_queue_Buffer *source,
+  Message_queue_Buffer *destination
+);
+
+/*
+ *  _Message_queue_Seize
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine attempts to receive a message from the_message_queue.
+ *  If a message is available or if the RTEMS_NO_WAIT option is enabled in
+ *  option_set, then the routine returns.  Otherwise, the calling task
+ *  is blocked until a message is available.  If a message is returned
+ *  to the task, then buffer will contain its contents.
+ */
+
+boolean _Message_queue_Seize(
+  Message_queue_Control *the_message_queue,
+  unsigned32             option_set,
+  Message_queue_Buffer  *buffer
+);
+
+/*
+ *  _Message_queue_Flush_support
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine flushes all outstanding messages and returns
+ *  them to the inactive message chain.
+ */
+
+unsigned32 _Message_queue_Flush_support(
+  Message_queue_Control *the_message_queue
+);
+
+/*
+ *  _Message_queue_Submit
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine provides the common foundation for the
+ *  rtems_message_queue_send and rtems_message_queue_urgent directives.
+ */
+
+rtems_status_code _Message_queue_Submit(
+  Objects_Id                  id,
+  Message_queue_Buffer       *buffer,
+  Message_queue_Submit_types  submit_type
+);
+
+/*
+ *  _Message_queue_Allocate_message_buffer
+ *
+ *  DESCRIPTION:
+ *
+ *  This function allocates a message buffer from the inactive
+ *  message buffer chain.
+ */
+
+STATIC INLINE Message_queue_Buffer_control *
+  _Message_queue_Allocate_message_buffer ( void );
+
+/*
+ *  _Message_queue_Free_message_buffer
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine frees a message buffer to the inactive
+ *  message buffer chain.
+ */
+
+STATIC INLINE void _Message_queue_Free_message_buffer (
+  Message_queue_Buffer_control *the_message
+);
+
+/*
+ *  _Message_queue_Get_pending_message
+ *
+ *  DESCRIPTION:
+ *
+ *  This function removes the first message from the_message_queue
+ *  and returns a pointer to it.
+ */
+
+STATIC INLINE
+  Message_queue_Buffer_control *_Message_queue_Get_pending_message (
+  Message_queue_Control *the_message_queue
+);
+
+/*
+ *  _Message_queue_Append
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine places the_message at the rear of the outstanding
+ *  messages on the_message_queue.
+ */
+
+STATIC INLINE void _Message_queue_Append (
+  Message_queue_Control        *the_message_queue,
+  Message_queue_Buffer_control *the_message
+);
+
+/*
+ *  _Message_queue_Prepend
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine places the_message at the rear of the outstanding
+ *  messages on the_message_queue.
+ */
+
+STATIC INLINE void _Message_queue_Prepend (
+  Message_queue_Control        *the_message_queue,
+  Message_queue_Buffer_control *the_message
+);
+
+/*
+ *  _Message_queue_Is_null
+ *
+ *  DESCRIPTION:
+ *
+ *  This function places the_message at the rear of the outstanding
+ *  messages on the_message_queue.
+ */
+
+STATIC INLINE boolean _Message_queue_Is_null (
+  Message_queue_Control *the_message_queue
+);
+
+/*
+ *  _Message_queue_Allocate
+ *
+ *  DESCRIPTION:
+ *
+ *  This function allocates a message queue control block from
+ *  the inactive chain of free message queue control blocks.
+ */
+
+STATIC INLINE Message_queue_Control *_Message_queue_Allocate ( void );
+
+/*
+ *  _Message_queue_Free
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine allocates a message queue control block from
+ *  the inactive chain of free message queue control blocks.
+ */
+
+STATIC INLINE void _Message_queue_Free (
+  Message_queue_Control *the_message_queue
+);
+
+/*
+ *  _Message_queue_Get
+ *
+ *  DESCRIPTION:
+ *
+ *  This function maps message queue IDs to message queue control
+ *  blocks.  If ID corresponds to a local message queue, then it
+ *  returns the_message_queue control pointer which maps to ID
+ *  and location is set to OBJECTS_LOCAL.  If the message queue ID is
+ *  global and resides on a remote node, then location is set
+ *  to OBJECTS_REMOTE, and the_message_queue is undefined.
+ *  Otherwise, location is set to OBJECTS_ERROR and
+ *  the_message_queue is undefined.
+ */
+
+STATIC INLINE Message_queue_Control *_Message_queue_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+);
+
+#include <rtems/message.inl>
+#include <rtems/msgmp.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/headers/modes.h
===================================================================
--- c/src/exec/rtems/headers/modes.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/modes.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,183 @@
+/*  modes.h
+ *
+ *  This include file contains all constants and structures associated
+ *  with the RTEMS thread and RTEMS_ASR modes.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_MODES_h
+#define __RTEMS_MODES_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/isr.h>
+
+/*
+ *  The following type defines the control block used to manage
+ *  each a mode set.
+ */
+
+typedef unsigned32 rtems_mode;
+
+/*
+ *  The following constants define the individual modes and masks
+ *  which may be used to compose a mode set and to alter modes.
+ */
+
+#define RTEMS_ALL_MODE_MASKS     0x0000ffff
+
+#define RTEMS_DEFAULT_MODES     0x00000000
+#define RTEMS_CURRENT_MODE      0
+
+#define RTEMS_PREEMPT_MASK    0x00000100  /* preemption bit           */
+#define RTEMS_TIMESLICE_MASK  0x00000200  /* timeslice bit            */
+#define RTEMS_ASR_MASK        0x00000400  /* RTEMS_ASR enable bit           */
+#define RTEMS_INTERRUPT_MASK  CPU_MODES_INTERRUPT_MASK
+
+#define RTEMS_PREEMPT      0x00000000     /* enable preemption        */
+#define RTEMS_NO_PREEMPT   0x00000100     /* disable preemption       */
+
+#define RTEMS_NO_TIMESLICE 0x00000000     /* disable timeslicing      */
+#define RTEMS_TIMESLICE    0x00000200     /* enable timeslicing       */
+
+#define RTEMS_ASR          0x00000000     /* enable RTEMS_ASR               */
+#define RTEMS_NO_ASR       0x00000400     /* disable RTEMS_ASR              */
+
+/*
+ *  The number of bits for interrupt levels is CPU dependent.
+ *  RTEMS supports 0 to 256 levels in bits 0-7 of the mode.
+ */
+
+/*
+ *  RTEMS_INTERRUPT_LEVEL
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns the processor dependent interrupt
+ *  level which corresponds to the requested interrupt level.
+ *
+ * NOTE: RTEMS supports 256 interrupt levels using the least
+ *       significant eight bits of MODES.CONTROL.  On any
+ *       particular CPU, fewer than 256 levels may be supported.
+ */
+
+STATIC INLINE unsigned32 RTEMS_INTERRUPT_LEVEL (
+  rtems_mode mode_set
+);
+
+/*
+ *  _Modes_Mask_changed
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if any of the mode flags in mask
+ *  are set in mode_set, and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Modes_Mask_changed (
+  rtems_mode mode_set,
+  rtems_mode masks
+);
+
+/*
+ *  _Modes_Is_asr_disabled
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if mode_set indicates that Asynchronous
+ *  Signal Processing is disabled, and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Modes_Is_asr_disabled (
+  rtems_mode mode_set
+);
+
+/*
+ *  _Modes_Is_preempt
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if mode_set indicates that preemption
+ *  is enabled, and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Modes_Is_preempt (
+  rtems_mode mode_set
+);
+
+/*
+ *  _Modes_Is_timeslice
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if mode_set indicates that timeslicing
+ *  is enabled, and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Modes_Is_timeslice (
+  rtems_mode mode_set
+);
+
+/*
+ *  _Modes_Get_interrupt_level
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns the interrupt level portion of the mode_set.
+ */
+
+STATIC INLINE ISR_Level _Modes_Get_interrupt_level (
+  rtems_mode mode_set
+);
+
+/*
+ *  _Modes_Set_interrupt_level
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine sets the current interrupt level to that specified
+ *  in the mode_set.
+ */
+
+STATIC INLINE void _Modes_Set_interrupt_level (
+  rtems_mode mode_set
+);
+
+/*
+ *  _Modes_Change
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine changes the modes in old_mode_set indicated by
+ *  mask to the requested values in new_mode_set.  The resulting
+ *  mode set is returned in out_mode_set and the modes that changed
+ *  is returned in changed.
+ */
+
+STATIC INLINE void _Modes_Change (
+  rtems_mode  old_mode_set,
+  rtems_mode  new_mode_set,
+  rtems_mode  mask,
+  rtems_mode *out_mode_set,
+  rtems_mode *changed
+);
+
+#include <rtems/modes.inl>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/headers/mp.h
===================================================================
--- c/src/exec/rtems/headers/mp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/mp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,67 @@
+/*  mp.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Multiprocessing Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_MP_h
+#define __RTEMS_MP_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ *
+ *  _Multiprocessing_Manager_initialization
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the initialization necessary for this manager.
+ */
+
+void _Multiprocessing_Manager_initialization ( void );
+
+/*
+ *
+ *  rtems_multiprocessing_announce
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the MULTIPROCESSING_ANNOUNCE directive.
+ *  It is invoked by the MPCI layer to indicate that an MPCI packet
+ *  has been received.
+ */
+
+void rtems_multiprocessing_announce ( void );
+
+/*
+ *
+ *  _Multiprocessing_Receive_server
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is a server thread which processes remote requests
+ *  from other nodes.
+ */
+
+Thread _Multiprocessing_Receive_server (
+  Thread_Argument ignored
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/*  end of include file */
Index: c/src/exec/rtems/headers/msgmp.h
===================================================================
--- c/src/exec/rtems/headers/msgmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/msgmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,175 @@
+/*  msgmp.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Multiprocessing Support in the Message Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_MESSAGE_QUEUE_MP_h
+#define __RTEMS_MESSAGE_QUEUE_MP_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/message.h>
+#include <rtems/mppkt.h>
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/thread.h>
+#include <rtems/watchdog.h>
+
+/*
+ *  The following enumerated type defines the list of
+ *  remote message queue operations.
+ */
+
+typedef enum {
+  MESSAGE_QUEUE_MP_ANNOUNCE_CREATE     =  0,
+  MESSAGE_QUEUE_MP_ANNOUNCE_DELETE     =  1,
+  MESSAGE_QUEUE_MP_EXTRACT_PROXY       =  2,
+  MESSAGE_QUEUE_MP_RECEIVE_REQUEST     =  3,
+  MESSAGE_QUEUE_MP_RECEIVE_RESPONSE    =  4,
+  MESSAGE_QUEUE_MP_SEND_REQUEST        =  5,
+  MESSAGE_QUEUE_MP_SEND_RESPONSE       =  6,
+  MESSAGE_QUEUE_MP_URGENT_REQUEST      =  7,
+  MESSAGE_QUEUE_MP_URGENT_RESPONSE     =  8,
+  MESSAGE_QUEUE_MP_BROADCAST_REQUEST   =  9,
+  MESSAGE_QUEUE_MP_BROADCAST_RESPONSE  = 10,
+  MESSAGE_QUEUE_MP_FLUSH_REQUEST       = 11,
+  MESSAGE_QUEUE_MP_FLUSH_RESPONSE      = 12
+}   Message_queue_MP_Remote_operations;
+
+/*
+ *  The following data structure defines the packet used to perform
+ *  remote message queue operations.
+ */
+
+typedef struct {
+  rtems_packet_prefix                   Prefix;
+  Message_queue_MP_Remote_operations operation;
+  Objects_Name                       name;
+  rtems_option                    option_set;
+  Objects_Id                         proxy_id;
+  unsigned32                         count;
+  unsigned32                         pad0;
+  unsigned32                         pad1;
+  unsigned32                         pad2;
+  Message_queue_Buffer               Buffer;
+}   Message_queue_MP_Packet;
+
+/*
+ *  _Message_queue_MP_Send_process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  process operation can be performed on another node.
+ */
+
+void _Message_queue_MP_Send_process_packet (
+  Message_queue_MP_Remote_operations operation,
+  Objects_Id                         message_queue_id,
+  Objects_Name                       name,
+  Objects_Id                         proxy_id
+);
+
+/*
+ *  _Message_queue_MP_Send_request_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive operation can be initiated on another node.
+ */
+
+rtems_status_code _Message_queue_MP_Send_request_packet (
+  Message_queue_MP_Remote_operations  operation,
+  Objects_Id                          message_queue_id,
+  Message_queue_Buffer               *buffer,
+  rtems_option                     option_set,
+  rtems_interval                   timeout
+);
+
+/*
+ *  _Message_queue_MP_Send_response_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive can be performed on another node.
+ */
+
+void _Message_queue_MP_Send_response_packet (
+  Message_queue_MP_Remote_operations  operation,
+  Objects_Id                          message_queue_id,
+  Thread_Control                     *the_thread
+);
+
+/*
+ *
+ *  _Message_queue_MP_Process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the actions specific to this package for
+ *  the request from another node.
+ */
+
+void _Message_queue_MP_Process_packet (
+  rtems_packet_prefix *the_packet_prefix
+);
+
+/*
+ *  _Message_queue_MP_Send_object_was_deleted
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked indirectly by the thread queue
+ *  when a proxy has been removed from the thread queue and
+ *  the remote node must be informed of this.
+ */
+
+void _Message_queue_MP_Send_object_was_deleted (
+  Thread_Control *the_proxy
+);
+
+/*
+ *  _Message_queue_MP_Send_extract_proxy
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked when a task is deleted and it
+ *  has a proxy which must be removed from a thread queue and
+ *  the remote node must be informed of this.
+ */
+
+void _Message_queue_MP_Send_extract_proxy (
+  Thread_Control *the_thread
+);
+
+/*
+ *  _Message_queue_MP_Get_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This function is used to obtain a message queue mp packet.
+ */
+
+Message_queue_MP_Packet *_Message_queue_MP_Get_packet ( void );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of file */
Index: c/src/exec/rtems/headers/options.h
===================================================================
--- c/src/exec/rtems/headers/options.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/options.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,79 @@
+/*  options.h
+ *
+ *  This include file contains information which defines the
+ *  options available on many directives.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_OPTIONS_h
+#define __RTEMS_OPTIONS_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ *  The following type defines the control block used to manage
+ *  option sets.
+ */
+
+typedef unsigned32 rtems_option;
+
+/*
+ *  The following constants define the individual options which may
+ *  be used to compose an option set.
+ */
+
+#define RTEMS_DEFAULT_OPTIONS   0x00000000
+
+#define RTEMS_WAIT      0x00000000        /* wait on resource */
+#define RTEMS_NO_WAIT   0x00000001        /* do not wait on resource */
+
+#define RTEMS_EVENT_ALL 0x00000000        /* wait for all events */
+#define RTEMS_EVENT_ANY 0x00000002        /* wait on any event */
+
+/*
+ *  _Options_Is_no_wait
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the RTEMS_NO_WAIT option is enabled in
+ *  option_set, and FALSE otherwise.
+ *
+ */
+
+STATIC INLINE boolean _Options_Is_no_wait (
+  rtems_option option_set
+);
+
+/*
+ *  _Options_Is_any
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the RTEMS_EVENT_ANY option is enabled in
+ *  OPTION_SET, and FALSE otherwise.
+ *
+ */
+
+STATIC INLINE boolean _Options_Is_any (
+  rtems_option option_set
+);
+
+#include <rtems/options.inl>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/headers/part.h
===================================================================
--- c/src/exec/rtems/headers/part.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/part.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,290 @@
+/*  partition.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Partition Manager.  This manager provides facilities to
+ *  dynamically allocate memory in fixed-sized units which are returned
+ *  as buffers.
+ *
+ *  Directives provided are:
+ *
+ *     + create a partition
+ *     + get an ID of a partition
+ *     + delete a partition
+ *     + get a buffer from a partition
+ *     + return a buffer to a partition
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_PARTITION_h
+#define __RTEMS_PARTITION_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/address.h>
+#include <rtems/attr.h>
+#include <rtems/object.h>
+
+/*
+ *  The following defines the control block used to manage each partition.
+ */
+
+typedef struct {
+  Objects_Control     Object;
+  void               *starting_address;      /* physical address */
+  unsigned32          length;                /* in bytes */
+  unsigned32          buffer_size;           /* in bytes */
+  rtems_attribute  attribute_set;         /* attributes */
+  unsigned32          number_of_used_blocks; /* or allocated buffers */
+  Chain_Control       Memory;                /* buffer chain */
+}   Partition_Control;
+
+/*
+ *  The following defines the information control block used to
+ *  manage this class of objects.
+ */
+
+EXTERN Objects_Information _Partition_Information;
+
+/*
+ *  _Partition_Manager_initialization
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the initialization necessary for this manager.
+ */
+
+void _Partition_Manager_initialization(
+  unsigned32 maximum_partitions
+);
+
+/*
+ *  rtems_partition_create
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_partition_create directive.  The
+ *  partition will have the name name.  The memory area managed by
+ *  the partition is of length bytes and starts at starting_address.
+ *  The memory area will be divided into as many buffers of
+ *  buffer_size bytes as possible.   The attribute_set determines if
+ *  the partition is global or local.  It returns the id of the
+ *  created partition in ID.
+ */
+
+rtems_status_code rtems_partition_create(
+  Objects_Name        name,
+  void               *starting_address,
+  unsigned32          length,
+  unsigned32          buffer_size,
+  rtems_attribute  attribute_set,
+  Objects_Id         *id
+);
+
+/*
+ *  rtems_partition_ident
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_partition_ident directive.
+ *  This directive returns the partition ID associated with name.
+ *  If more than one partition is named name, then the partition
+ *  to which the ID belongs is arbitrary.  node indicates the
+ *  extent of the search for the ID of the partition named name.
+ *  The search can be limited to a particular node or allowed to
+ *  encompass all nodes.
+ */
+
+rtems_status_code rtems_partition_ident(
+  Objects_Name  name,
+  unsigned32    node,
+  Objects_Id   *id
+);
+
+/*
+ *  rtems_partition_delete
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_partition_delete directive.  The
+ *  partition indicated by ID is deleted.
+ */
+
+rtems_status_code rtems_partition_delete(
+  Objects_Id id
+);
+
+/*
+ *  rtems_partition_get_buffer
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_partition_get_buffer directive.  It
+ *  attempts to allocate a buffer from the partition associated with ID.
+ *  If a buffer is allocated, its address is returned in buffer.
+ */
+
+rtems_status_code rtems_partition_get_buffer(
+  Objects_Id  id,
+  void       **buffer
+);
+
+/*
+ *  rtems_partition_return_buffer
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_partition_return_buffer directive.  It
+ *  frees the buffer to the partition associated with ID.  The buffer must
+ *  have been previously allocated from the same partition.
+ */
+
+rtems_status_code rtems_partition_return_buffer(
+  Objects_Id  id,
+  void       *buffer
+);
+
+/*
+ *  _Partition_Allocate_buffer
+ *
+ *  DESCRIPTION:
+ *
+ *  This function attempts to allocate a buffer from the_partition.
+ *  If successful, it returns the address of the allocated buffer.
+ *  Otherwise, it returns NULL.
+ */
+
+STATIC INLINE void *_Partition_Allocate_buffer (
+   Partition_Control *the_partition
+);
+
+/*
+ *  _Partition_Free_buffer
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine frees the_buffer to the_partition.
+ */
+
+STATIC INLINE void _Partition_Free_buffer (
+  Partition_Control *the_partition,
+  Chain_Node        *the_buffer
+);
+
+/*
+ *  _Partition_Is_buffer_on_boundary
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the_buffer is on a valid buffer
+ *  boundary for the_partition, and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Partition_Is_buffer_on_boundary (
+  void              *the_buffer,
+  Partition_Control *the_partition
+);
+
+/*
+ *  _Partition_Is_buffer_valid
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the_buffer is a valid buffer from
+ *  the_partition, otherwise FALSE is returned.
+ */
+
+STATIC INLINE boolean _Partition_Is_buffer_valid (
+  Chain_Node        *the_buffer,
+  Partition_Control *the_partition
+);
+
+/*
+ *  _Partition_Is_buffer_size_aligned
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the use of the specified buffer_size
+ *  will result in the allocation of buffers whose first byte is
+ *  properly aligned, and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Partition_Is_buffer_size_aligned (
+  unsigned32 buffer_size
+);
+
+/*
+ *  _Partition_Allocate
+ *
+ *  DESCRIPTION:
+ *
+ *  This function allocates a partition control block from
+ *  the inactive chain of free partition control blocks.
+ */
+
+STATIC INLINE Partition_Control *_Partition_Allocate ( void );
+
+/*
+ *  _Partition_Free
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine frees a partition control block to the
+ *  inactive chain of free partition control blocks.
+ */
+
+STATIC INLINE void _Partition_Free (
+  Partition_Control *the_partition
+);
+
+/*
+ *  _Partition_Get
+ *
+ *  DESCRIPTION:
+ *
+ *  This function maps partition IDs to partition control blocks.
+ *  If ID corresponds to a local partition, then it returns
+ *  the_partition control pointer which maps to ID and location
+ *  is set to OBJECTS_LOCAL.  If the partition ID is global and
+ *  resides on a remote node, then location is set to OBJECTS_REMOTE,
+ *  and the_partition is undefined.  Otherwise, location is set
+ *  to OBJECTS_ERROR and the_partition is undefined.
+ */
+
+STATIC INLINE Partition_Control *_Partition_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+);
+
+/*
+ *  _Partition_Is_null
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the_partition is NULL
+ *  and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Partition_Is_null (
+  Partition_Control *the_partition
+);
+
+#include <rtems/part.inl>
+#include <rtems/partmp.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/headers/partmp.h
===================================================================
--- c/src/exec/rtems/headers/partmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/partmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,160 @@
+/*  partmp.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Multiprocessing Support in the Partition Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_PARTITION_MP_h
+#define __RTEMS_PARTITION_MP_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/mppkt.h>
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/part.h>
+#include <rtems/thread.h>
+
+/*
+ *  The following enumerated type defines the list of
+ *  remote partition operations.
+ */
+
+typedef enum {
+  PARTITION_MP_ANNOUNCE_CREATE        =  0,
+  PARTITION_MP_ANNOUNCE_DELETE        =  1,
+  PARTITION_MP_EXTRACT_PROXY          =  2,
+  PARTITION_MP_GET_BUFFER_REQUEST     =  3,
+  PARTITION_MP_GET_BUFFER_RESPONSE    =  4,
+  PARTITION_MP_RETURN_BUFFER_REQUEST  =  5,
+  PARTITION_MP_RETURN_BUFFER_RESPONSE =  6,
+}   Partition_MP_Remote_operations;
+
+/*
+ *  The following data structure defines the packet used to perform
+ *  remote partition operations.
+ */
+
+typedef struct {
+  rtems_packet_prefix                Prefix;
+  Partition_MP_Remote_operations  operation;
+  Objects_Name                    name;
+  void                           *buffer;
+  Objects_Id                      proxy_id;
+}   Partition_MP_Packet;
+
+/*
+ *  _Partition_MP_Send_process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  process operation can be performed on another node.
+ */
+
+void _Partition_MP_Send_process_packet (
+  Partition_MP_Remote_operations operation,
+  Objects_Id                     partition_id,
+  Objects_Name                   name,
+  Objects_Id                     proxy_id
+);
+
+/*
+ *  _Partition_MP_Send_request_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive operation can be initiated on another node.
+ */
+
+rtems_status_code _Partition_MP_Send_request_packet (
+  Partition_MP_Remote_operations  operation,
+  Objects_Id                      partition_id,
+  void                           *buffer
+);
+
+/*
+ *  _Partition_MP_Send_response_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive can be performed on another node.
+ */
+
+void _Partition_MP_Send_response_packet (
+  Partition_MP_Remote_operations  operation,
+  Objects_Id                      partition_id,
+  Thread_Control                 *the_thread
+);
+
+/*
+ *
+ *  _Partition_MP_Process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the actions specific to this package for
+ *  the request from another node.
+ */
+
+void _Partition_MP_Process_packet (
+  rtems_packet_prefix *the_packet_prefix
+);
+
+/*
+ *  _Partition_MP_Send_object_was_deleted
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked indirectly by the thread queue
+ *  when a proxy has been removed from the thread queue and
+ *  the remote node must be informed of this.
+ *
+ *  This routine is not needed by the Partition since a partition
+ *  cannot be deleted when buffers are in use.
+ */
+
+/*
+ *  _Partition_MP_Send_extract_proxy
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked when a task is deleted and it
+ *  has a proxy which must be removed from a thread queue and
+ *  the remote node must be informed of this.
+ */
+
+void _Partition_MP_Send_extract_proxy (
+  Thread_Control *the_thread
+);
+
+/*
+ *  _Partition_MP_Get_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This function is used to obtain a partition mp packet.
+ */
+
+Partition_MP_Packet *_Partition_MP_Get_packet ( void );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of file */
Index: c/src/exec/rtems/headers/ratemon.h
===================================================================
--- c/src/exec/rtems/headers/ratemon.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/ratemon.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,285 @@
+/*  ratemon.h
+ *
+ *  This include file contains all the constants, structures, and
+ *  prototypes associated with the Rate Monotonic Manager.  This manager
+ *  provides facilities to implement tasks which execute in a periodic fashion.
+ *
+ *  Directives provided are:
+ *
+ *     + create a rate monotonic timer
+ *     + cancel a period
+ *     + delete a rate monotonic timer
+ *     + conclude current and start the next period
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_RATE_MONOTONIC_h
+#define __RTEMS_RATE_MONOTONIC_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/object.h>
+#include <rtems/thread.h>
+#include <rtems/watchdog.h>
+
+/*
+ *  The following enumerated type defines the states in which a
+ *  period may be.
+ */
+
+typedef enum {
+  RATE_MONOTONIC_INACTIVE,  /* off chain, never initialized */
+  RATE_MONOTONIC_ACTIVE,    /* on chain, running continuously */
+  RATE_MONOTONIC_EXPIRED    /* off chain, will be reset by next rm_period */
+}   Rate_Monotonic_Period_states;
+
+/*
+ *  The following constant is the interval passed to the rate_monontonic_period
+ *  directive to obtain status information.
+ */
+
+#define RTEMS_PERIOD_STATUS       RTEMS_NO_TIMEOUT
+
+/*
+ *  The following structure defines the control block used to manage
+ *  each period.
+ */
+
+typedef struct {
+  Objects_Control               Object;
+  Watchdog_Control              Timer;
+  Rate_Monotonic_Period_states  state;
+  Thread_Control               *owner;
+}   Rate_monotonic_Control;
+
+EXTERN Objects_Information _Rate_monotonic_Information;
+
+/*
+ *  _Rate_monotonic_Manager_initialization
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the initialization necessary for this manager.
+ */
+
+void _Rate_monotonic_Manager_initialization(
+  unsigned32 maximum_periods
+);
+
+/*
+ *  rtems_rate_monotonic_create
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rate_monotonic_create directive.  The
+ *  period will have the name name.  It returns the id of the
+ *  created period in ID.
+ */
+
+rtems_status_code rtems_rate_monotonic_create(
+  Objects_Name  name,
+  Objects_Id   *id
+);
+
+/*
+ *  rtems_rate_monotonic_ident
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_rate_monotonic_ident directive.
+ *  This directive returns the period ID associated with name.
+ *  If more than one period is named name, then the period
+ *  to which the ID belongs is arbitrary.
+ */
+
+rtems_status_code rtems_rate_monotonic_ident(
+  Objects_Name  name,
+  Objects_Id   *id
+);
+
+/*
+ *  rtems_rate_monotonic_cancel
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_rate_monotonic_cancel directive.  This
+ *  directive stops the period associated with ID from continuing to
+ *  run.
+ */
+
+rtems_status_code rtems_rate_monotonic_cancel(
+  Objects_Id id
+);
+
+/*
+ *  rtems_rate_monotonic_delete
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_rate_monotonic_delete directive.  The
+ *  period indicated by ID is deleted.
+ */
+
+rtems_status_code rtems_rate_monotonic_delete(
+  Objects_Id id
+);
+
+/*
+ *  rtems_rate_monotonic_period
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_rate_monotonic_period directive.  When
+ *  length is non-zero, this directive initiates the period associated with
+ *  ID from continuing for a period of length.  If length is zero, then
+ *  result is set to indicate the current state of the period.
+ */
+
+rtems_status_code rtems_rate_monotonic_period(
+  Objects_Id        id,
+  rtems_interval length
+);
+
+/*
+ *  _Rate_monotonic_Allocate
+ *
+ *  DESCRIPTION:
+ *
+ *  This function allocates a period control block from
+ *  the inactive chain of free period control blocks.
+ */
+
+STATIC INLINE Rate_monotonic_Control *_Rate_monotonic_Allocate( void );
+
+/*
+ *  _Rate_monotonic_Free
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine allocates a period control block from
+ *  the inactive chain of free period control blocks.
+ */
+
+STATIC INLINE void _Rate_monotonic_Free (
+  Rate_monotonic_Control *the_period
+);
+
+/*
+ *  _Rate_monotonic_Get
+ *
+ *  DESCRIPTION:
+ *
+ *  This function maps period IDs to period control blocks.
+ *  If ID corresponds to a local period, then it returns
+ *  the_period control pointer which maps to ID and location
+ *  is set to OBJECTS_LOCAL.  Otherwise, location is set
+ *  to OBJECTS_ERROR and the_period is undefined.
+ */
+
+STATIC INLINE Rate_monotonic_Control *_Rate_monotonic_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+);
+
+/*
+ *  _Rate_monotonic_Set_state
+ *
+ *  DESCRIPTION:
+ *
+ *  This function blocks the calling task so that it is waiting for
+ *  a period to expire.  It returns TRUE if the task was successfully
+ *  blocked, and FALSE otherwise.
+ */
+
+boolean _Rate_monotonic_Set_state(
+  Rate_monotonic_Control *the_period
+);
+
+/*
+ *  _Rate_monotonic_Timeout
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked when the period represented
+ *  by ID expires.  If the task which owns this period is blocked
+ *  waiting for the period to expire, then it is readied and the
+ *  period is restarted.  If the owning task is not waiting for the
+ *  period to expire, then the period is placed in the EXPIRED
+ *  state and not restarted.
+ */
+
+void _Rate_monotonic_Timeout (
+  Objects_Id  id,
+  void       *ignored
+);
+
+/*
+ *  _Rate_monotonic_Is_active
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the_period is in the ACTIVE state,
+ *  and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Rate_monotonic_Is_active (
+  Rate_monotonic_Control *the_period
+);
+
+/*
+ *  _Rate_monotonic_Is_inactive
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the_period is in the ACTIVE state,
+ *  and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Rate_monotonic_Is_inactive (
+  Rate_monotonic_Control *the_period
+);
+
+/*
+ *  _Rate_monotonic_Is_expired
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the_period is in the EXPIRED state,
+ *  and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Rate_monotonic_Is_expired (
+  Rate_monotonic_Control *the_period
+);
+
+/*
+ *  _Rate_monotonic_Is_null
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the_period is NULL and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Rate_monotonic_Is_null (
+  Rate_monotonic_Control *the_period
+);
+
+#include <rtems/ratemon.inl>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/headers/region.h
===================================================================
--- c/src/exec/rtems/headers/region.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/region.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,311 @@
+/*  region.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Region Manager.  This manager provides facilities to dynamically
+ *  allocate memory in variable sized units which are returned as segments.
+ *
+ *  Directives provided are:
+ *
+ *     + create a region
+ *     + get an ID of a region
+ *     + delete a region
+ *     + get a segment from a region
+ *     + return a segment to a region
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_REGION_h
+#define __RTEMS_REGION_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/object.h>
+#include <rtems/threadq.h>
+#include <rtems/heap.h>
+#include <rtems/debug.h>
+
+/*
+ *  The following records define the control block used to manage
+ *  each region.
+ */
+
+typedef struct {
+  Objects_Control       Object;
+  Thread_queue_Control  Wait_queue;            /* waiting threads        */
+  void                 *starting_address;      /* physical start addr    */
+  unsigned32            length;                /* physical length(bytes) */
+  unsigned32            page_size;             /* in bytes               */
+  unsigned32            maximum_segment_size;  /* in bytes               */
+  rtems_attribute       attribute_set;
+  unsigned32            number_of_used_blocks; /* blocks allocated       */
+  Heap_Control          Memory;
+}  Region_Control;
+
+/*
+ *  The following defines the information control block used to
+ *  manage this class of objects.
+ */
+
+EXTERN Objects_Information _Region_Information;
+
+/*
+ *  _Region_Manager_initialization
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the initialization necessary for this manager.
+ */
+
+void _Region_Manager_initialization(
+  unsigned32 maximum_regions
+);
+
+/*
+ *  rtems_region_create
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_region_create directive.  The
+ *  region will have the name name.  The memory area managed by
+ *  the region is of length bytes and starts at starting_address.
+ *  The memory area will be divided into as many allocatable units of
+ *  page_size bytes as possible.   The attribute_set determines which
+ *  thread queue discipline is used by the region.  It returns the
+ *  id of the created region in ID.
+ */
+
+rtems_status_code rtems_region_create(
+  Objects_Name        name,
+  void               *starting_address,
+  unsigned32          length,
+  unsigned32          page_size,
+  rtems_attribute  attribute_set,
+  Objects_Id         *id
+);
+
+/*
+ *  rtems_region_extend
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_region_extend directive.  The
+ *  region will have the name name.  The memory area managed by
+ *  the region will be attempted to be grown by length bytes using
+ *  the memory starting at starting_address.
+ */
+
+rtems_status_code rtems_region_extend(
+  Objects_Id          id,
+  void               *starting_address,
+  unsigned32          length
+);
+
+/*
+ *  rtems_region_ident
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_region_ident directive.
+ *  This directive returns the region ID associated with name.
+ *  If more than one region is named name, then the region
+ *  to which the ID belongs is arbitrary.
+ */
+
+rtems_status_code rtems_region_ident(
+  Objects_Name  name,
+  Objects_Id   *id
+);
+
+/*
+ *  rtems_region_delete
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_region_delete directive.  The
+ *  region indicated by ID is deleted.
+ */
+
+rtems_status_code rtems_region_delete(
+  Objects_Id id
+);
+
+/*
+ *  rtems_region_get_segment
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_region_get_segment directive.  It
+ *  attempts to allocate a segment from the region associated with ID.
+ *  If a segment of the requested size can be allocated, its address
+ *  is returned in segment.  If no segment is available, then the task
+ *  may return immediately or block waiting for a segment with an optional
+ *  timeout of timeout clock ticks.  Whether the task blocks or returns
+ *  immediately is based on the no_wait option in the option_set.
+ */
+
+rtems_status_code rtems_region_get_segment(
+  Objects_Id         id,
+  unsigned32         size,
+  rtems_option    option_set,
+  rtems_interval  timeout,
+  void              **segment
+);
+
+/*
+ *  rtems_region_get_segment_size
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_region_get_segment_size directive.  It
+ *  returns the size in bytes of the specified user memory area.
+ */
+
+rtems_status_code rtems_region_get_segment_size(
+  Objects_Id         id,
+  void              *segment,
+  unsigned32        *size
+);
+
+/*
+ *  rtems_region_return_segment
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_region_return_segment directive.  It
+ *  frees the segment to the region associated with ID.  The segment must
+ *  have been previously allocated from the same region.  If freeing the
+ *  segment results in enough memory being available to satisfy the
+ *  rtems_region_get_segment of the first blocked task, then that task and as
+ *  many subsequent tasks as possible will be unblocked with their requests
+ *  satisfied.
+ */
+
+rtems_status_code rtems_region_return_segment(
+  Objects_Id  id,
+  void       *segment
+);
+
+/*
+ *  _Region_Allocate
+ *
+ *  DESCRIPTION:
+ *
+ *  This function allocates a region control block from
+ *  the inactive chain of free region control blocks.
+ */
+
+STATIC INLINE Region_Control *_Region_Allocate( void );
+
+/*
+ *  _Region_Free
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine frees a region control block to the
+ *  inactive chain of free region control blocks.
+ */
+
+STATIC INLINE void _Region_Free (
+  Region_Control *the_region
+);
+
+/*
+ *  _Region_Get
+ *
+ *  DESCRIPTION:
+ *
+ *  This function maps region IDs to region control blocks.
+ *  If ID corresponds to a local region, then it returns
+ *  the_region control pointer which maps to ID and location
+ *  is set to OBJECTS_LOCAL.  Otherwise, location is set
+ *  to OBJECTS_ERROR and the_region is undefined.
+ */
+
+STATIC INLINE Region_Control *_Region_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+);
+
+/*
+ *  _Region_Allocate_segment
+ *
+ *  DESCRIPTION:
+ *
+ *  This function attempts to allocate a segment from the_region.
+ *  If successful, it returns the address of the allocated segment.
+ *  Otherwise, it returns NULL.
+ */
+
+STATIC INLINE void *_Region_Allocate_segment (
+  Region_Control *the_region,
+  unsigned32      size
+);
+
+/*
+ *  _Region_Free_segment
+ *
+ *  DESCRIPTION:
+ *
+ *  This function frees the_segment to the_region.
+ */
+
+STATIC INLINE boolean _Region_Free_segment (
+  Region_Control *the_region,
+  void           *the_segment
+);
+
+/*
+ *  _Region_Is_null
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the_region is NULL and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Region_Is_null (
+  Region_Control *the_region
+);
+
+#include <rtems/region.inl>
+#include <rtems/regionmp.h>
+
+/*
+ *  _Region_Debug_Walk
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked to verify the integrity of a heap associated
+ *  with the_region.
+ */
+
+#ifdef RTEMS_DEBUG
+
+#define _Region_Debug_Walk( _the_region, _source ) \
+  do { \
+    if ( _Debug_Is_enabled( RTEMS_DEBUG_REGION ) ) \
+      _Heap_Walk( &(_the_region)->Memory, _source, FALSE ); \
+  } while ( 0 )
+
+#else
+
+#define _Region_Debug_Walk( _the_region, _source )
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/headers/regionmp.h
===================================================================
--- c/src/exec/rtems/headers/regionmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/regionmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,165 @@
+/*  regionmp.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Multiprocessing Support in the Region Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_REGION_MP_h
+#define __RTEMS_REGION_MP_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/mppkt.h>
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/region.h>
+#include <rtems/thread.h>
+
+/*
+ *  The following enumerated type defines the list of
+ *  remote region operations.
+ */
+
+typedef enum {
+  REGION_MP_ANNOUNCE_CREATE         =  0,
+  REGION_MP_ANNOUNCE_DELETE         =  1,
+  REGION_MP_EXTRACT_PROXY           =  2,
+  REGION_MP_GET_SEGMENT_REQUEST     =  3,
+  REGION_MP_GET_SEGMENT_RESPONSE    =  4,
+  REGION_MP_RETURN_SEGMENT_REQUEST  =  5,
+  REGION_MP_RETURN_SEGMENT_RESPONSE =  6,
+}   Region_MP_Remote_operations;
+
+/*
+ *  The following data structure defines the packet used to perform
+ *  remote region operations.
+ */
+
+typedef struct {
+  rtems_packet_prefix             Prefix;
+  Region_MP_Remote_operations  operation;
+  Objects_Name                 name;
+  rtems_option              option_set;
+  unsigned32                   size;
+  Objects_Id                   proxy_id;
+  void                        *segment;
+}   Region_MP_Packet;
+
+/*
+ *  _Region_MP_Send_process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  process operation can be performed on another node.
+ */
+
+void _Region_MP_Send_process_packet (
+  Region_MP_Remote_operations operation,
+  Objects_Id                  region_id,
+  Objects_Name                name,
+  Objects_Id                  proxy_id
+);
+
+/*
+ *  _Region_MP_Send_request_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive operation can be initiated on another node.
+ */
+
+rtems_status_code _Region_MP_Send_request_packet (
+  Region_MP_Remote_operations  operation,
+  Objects_Id                   region_id,
+  void                        *segment,
+  unsigned32                   size,
+  rtems_option              option_set,
+  rtems_interval            timeout
+);
+
+/*
+ *  _Region_MP_Send_response_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive can be performed on another node.
+ */
+
+void _Region_MP_Send_response_packet (
+  Region_MP_Remote_operations  operation,
+  Objects_Id                   region_id,
+  Thread_Control              *the_thread
+);
+
+/*
+ *
+ *  _Region_MP_Process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the actions specific to this package for
+ *  the request from another node.
+ */
+
+void _Region_MP_Process_packet (
+  rtems_packet_prefix *the_packet_prefix
+);
+
+/*
+ *  _Region_MP_Send_object_was_deleted
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked indirectly by the thread queue
+ *  when a proxy has been removed from the thread queue and
+ *  the remote node must be informed of this.
+ *
+ *  This routine is not needed by the Region since a region
+ *  cannot be deleted when segments are in use.
+ */
+
+/*
+ *  _Region_MP_Send_extract_proxy
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked when a task is deleted and it
+ *  has a proxy which must be removed from a thread queue and
+ *  the remote node must be informed of this.
+ */
+
+void _Region_MP_Send_extract_proxy (
+  Thread_Control *the_thread
+);
+
+/*
+ *  _Region_MP_Get_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This function is used to obtain a region mp packet.
+ */
+
+Region_MP_Packet *_Region_MP_Get_packet ( void );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of file */
Index: c/src/exec/rtems/headers/rtems.h
===================================================================
--- c/src/exec/rtems/headers/rtems.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/rtems.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,79 @@
+/*  rtems.h
+ *
+ *  This include file contains information about RTEMS executive that
+ *  is required by the application and is CPU independent.  It includes
+ *  two (2) CPU dependent files to tailor its data structures for a
+ *  particular processor.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_RTEMS_GENERIC_h
+#define __RTEMS_RTEMS_GENERIC_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/system.h>
+#include <rtems/init.h>
+#include <rtems/tasks.h>
+#include <rtems/intr.h>
+#include <rtems/clock.h>
+#include <rtems/extension.h>
+#include <rtems/timer.h>
+#include <rtems/sem.h>
+#include <rtems/message.h>
+#include <rtems/event.h>
+#include <rtems/signal.h>
+#include <rtems/event.h>
+#include <rtems/part.h>
+#include <rtems/region.h>
+#include <rtems/dpmem.h>
+#include <rtems/io.h>
+#include <rtems/fatal.h>
+#include <rtems/ratemon.h>
+#include <rtems/mp.h>
+
+/*
+ *  RTEMS basic type definitions
+ */
+
+typedef unsigned8       rtems_unsigned8;  /* unsigned 8-bit value  */
+typedef unsigned16      rtems_unsigned16; /* unsigned 16-bit value */
+typedef unsigned32      rtems_unsigned32; /* unsigned 32-bit value */
+typedef unsigned64      rtems_unsigned64; /* unsigned 64-bit value */
+
+typedef signed8         rtems_signed8;    /* signed 8-bit value  */
+typedef signed16        rtems_signed16;   /* signed 16-bit value */
+typedef signed32        rtems_signed32;   /* signed 32-bit value */
+typedef signed64        rtems_signed64;   /* signed 64-bit value */
+
+typedef single_precision rtems_single;    /* single precision float */
+typedef double_precision rtems_double;    /* double precision float */
+
+typedef boolean                    rtems_boolean;
+
+typedef Objects_Name               rtems_name;
+typedef Objects_Id                 rtems_id;
+
+typedef Context_Control            rtems_context;
+typedef Context_Control_fp         rtems_context_fp;
+typedef CPU_Interrupt_frame        rtems_interrupt_frame;
+
+#define RTEMS_HAS_HARDWARE_FP CPU_HARDWARE_FP
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/headers/sem.h
===================================================================
--- c/src/exec/rtems/headers/sem.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/sem.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,238 @@
+/*  semaphore.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Semaphore Manager.  This manager utilizes standard Dijkstra
+ *  counting semaphores to provide synchronization and mutual exclusion
+ *  capabilities.
+ *
+ *  Directives provided are:
+ *
+ *     + create a semaphore
+ *     + get an ID of a semaphore
+ *     + delete a semaphore
+ *     + acquire a semaphore
+ *     + release a semaphore
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_SEMAPHORE_h
+#define __RTEMS_SEMAPHORE_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/attr.h>
+#include <rtems/object.h>
+#include <rtems/threadq.h>
+
+/*
+ *  The following defines the control block used to manage each semaphore.
+ */
+
+typedef struct {
+  Objects_Control       Object;
+  Thread_queue_Control  Wait_queue;
+  rtems_attribute    attribute_set;
+  unsigned32            count;
+  unsigned32            nest_count;
+  Thread_Control       *holder;
+  Objects_Id            holder_id;
+}   Semaphore_Control;
+
+/*
+ *  The following defines the information control block used to manage
+ *  this class of objects.
+ */
+
+EXTERN Objects_Information  _Semaphore_Information;
+
+/*
+ *  _Semaphore_Manager_initialization
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the initialization necessary for this manager.
+ */
+
+void _Semaphore_Manager_initialization(
+  unsigned32 maximum_semaphores
+);
+
+/*
+ *  rtems_semaphore_create
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_semaphore_create directive.  The
+ *  semaphore will have the name name.  The starting count for
+ *  the semaphore is count.  The attribute_set determines if
+ *  the semaphore is global or local and the thread queue
+ *  discipline.  It returns the id of the created semaphore in ID.
+ */
+
+rtems_status_code rtems_semaphore_create(
+  Objects_Name        name,
+  unsigned32          count,
+  rtems_attribute  attribute_set,
+  Objects_Id         *id
+);
+
+/*
+ *  rtems_semaphore_ident
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_semaphore_ident directive.
+ *  This directive returns the semaphore ID associated with name.
+ *  If more than one semaphore is named name, then the semaphore
+ *  to which the ID belongs is arbitrary.  node indicates the
+ *  extent of the search for the ID of the semaphore named name.
+ *  The search can be limited to a particular node or allowed to
+ *  encompass all nodes.
+ */
+
+rtems_status_code rtems_semaphore_ident(
+  Objects_Name  name,
+  unsigned32    node,
+  Objects_Id   *id
+);
+
+/*
+ *  rtems_semaphore_delete
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_semaphore_delete directive.  The
+ *  semaphore indicated by ID is deleted.
+ */
+
+rtems_status_code rtems_semaphore_delete(
+  Objects_Id id
+);
+
+/*
+ *  rtems_semaphore_obtain
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_semaphore_obtain directive.  It
+ *  attempts to obtain a unit from the semaphore associated with ID.
+ *  If a unit can be allocated, the calling task will return immediately.
+ *  If no unit is available, then the task may return immediately or
+ *  block waiting for a unit with an optional timeout of timeout
+ *  clock ticks.  Whether the task blocks or returns immediately
+ *  is based on the RTEMS_NO_WAIT option in the option_set.
+ */
+
+rtems_status_code rtems_semaphore_obtain(
+  Objects_Id        id,
+  unsigned32        option_set,
+  rtems_interval timeout
+);
+
+/*
+ *  rtems_semaphore_release
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_semaphore_release directive.  It
+ *  frees a unit to the semaphore associated with ID.  If a task was
+ *  blocked waiting for a unit from this semaphore, then that task will
+ *  be readied and the unit given to that task.  Otherwise, the unit
+ *  will be returned to the semaphore.
+ */
+
+rtems_status_code rtems_semaphore_release(
+  Objects_Id id
+);
+
+/*
+ *  _Semaphore_Seize
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine attempts to receive a unit from the_semaphore.
+ *  If a unit is available or if the RTEMS_NO_WAIT option is enabled in
+ *  option_set, then the routine returns.  Otherwise, the calling task
+ *  is blocked until a unit becomes available.
+ */
+
+boolean _Semaphore_Seize(
+  Semaphore_Control *the_semaphore,
+  unsigned32         option_set
+);
+
+/*
+ *  _Semaphore_Allocate
+ *
+ *  DESCRIPTION:
+ *
+ *  This function allocates a semaphore control block from
+ *  the inactive chain of free semaphore control blocks.
+ */
+
+STATIC INLINE Semaphore_Control *_Semaphore_Allocate( void );
+
+/*
+ *  _Semaphore_Free
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine frees a semaphore control block to the
+ *  inactive chain of free semaphore control blocks.
+ */
+
+STATIC INLINE void _Semaphore_Free (
+  Semaphore_Control *the_semaphore
+);
+
+/*
+ *  _Semaphore_Get
+ *
+ *  DESCRIPTION:
+ *
+ *  This function maps semaphore IDs to semaphore control blocks.
+ *  If ID corresponds to a local semaphore, then it returns
+ *  the_semaphore control pointer which maps to ID and location
+ *  is set to OBJECTS_LOCAL.  if the semaphore ID is global and
+ *  resides on a remote node, then location is set to OBJECTS_REMOTE,
+ *  and the_semaphore is undefined.  Otherwise, location is set
+ *  to OBJECTS_ERROR and the_semaphore is undefined.
+ */
+
+STATIC INLINE Semaphore_Control *_Semaphore_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+);
+
+/*
+ *  _Semaphore_Is_null
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the_semaphore is NULL and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Semaphore_Is_null (
+  Semaphore_Control *the_semaphore
+);
+
+#include <rtems/sem.inl>
+#include <rtems/semmp.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/*  end of include file */
Index: c/src/exec/rtems/headers/semmp.h
===================================================================
--- c/src/exec/rtems/headers/semmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/semmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,163 @@
+/*  semmp.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Multiprocessing Support in the Semaphore Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_SEMAPHORE_MP_h
+#define __RTEMS_SEMAPHORE_MP_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/mppkt.h>
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/sem.h>
+#include <rtems/thread.h>
+#include <rtems/watchdog.h>
+
+/*
+ *  The following enumerated type defines the list of
+ *  remote semaphore operations.
+ */
+
+typedef enum {
+  SEMAPHORE_MP_ANNOUNCE_CREATE  =  0,
+  SEMAPHORE_MP_ANNOUNCE_DELETE  =  1,
+  SEMAPHORE_MP_EXTRACT_PROXY    =  2,
+  SEMAPHORE_MP_OBTAIN_REQUEST   =  3,
+  SEMAPHORE_MP_OBTAIN_RESPONSE  =  4,
+  SEMAPHORE_MP_RELEASE_REQUEST  =  5,
+  SEMAPHORE_MP_RELEASE_RESPONSE =  6,
+}   Semaphore_MP_Remote_operations;
+
+/*
+ *  The following data structure defines the packet used to perform
+ *  remote semaphore operations.
+ */
+
+typedef struct {
+  rtems_packet_prefix               Prefix;
+  Semaphore_MP_Remote_operations operation;
+  Objects_Name                   name;
+  rtems_option                option_set;
+  Objects_Id                     proxy_id;
+}   Semaphore_MP_Packet;
+
+/*
+ *  _Semaphore_MP_Send_process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  process operation can be performed on another node.
+ */
+
+void _Semaphore_MP_Send_process_packet (
+  Semaphore_MP_Remote_operations operation,
+  Objects_Id                     semaphore_id,
+  Objects_Name                   name,
+  Objects_Id                     proxy_id
+);
+
+/*
+ *  _Semaphore_MP_Send_request_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive operation can be initiated on another node.
+ */
+
+rtems_status_code _Semaphore_MP_Send_request_packet (
+  Semaphore_MP_Remote_operations operation,
+  Objects_Id                     semaphore_id,
+  rtems_option                option_set,
+  rtems_interval              timeout
+);
+
+/*
+ *  _Semaphore_MP_Send_response_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive can be performed on another node.
+ */
+
+void _Semaphore_MP_Send_response_packet (
+  Semaphore_MP_Remote_operations  operation,
+  Objects_Id                      semaphore_id,
+  Thread_Control                 *the_thread
+);
+
+/*
+ *
+ *  _Semaphore_MP_Process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the actions specific to this package for
+ *  the request from another node.
+ */
+
+void _Semaphore_MP_Process_packet (
+  rtems_packet_prefix *the_packet_prefix
+);
+
+/*
+ *  _Semaphore_MP_Send_object_was_deleted
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked indirectly by the thread queue
+ *  when a proxy has been removed from the thread queue and
+ *  the remote node must be informed of this.
+ */
+
+void _Semaphore_MP_Send_object_was_deleted (
+  Thread_Control *the_proxy
+);
+
+/*
+ *  _Semaphore_MP_Send_extract_proxy
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked when a task is deleted and it
+ *  has a proxy which must be removed from a thread queue and
+ *  the remote node must be informed of this.
+ */
+
+void _Semaphore_MP_Send_extract_proxy (
+  Thread_Control *the_thread
+);
+
+/*
+ *  _Semaphore_MP_Get_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This function is used to obtain a semaphore mp packet.
+ */
+
+Semaphore_MP_Packet *_Semaphore_MP_Get_packet ( void );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of file */
Index: c/src/exec/rtems/headers/signal.h
===================================================================
--- c/src/exec/rtems/headers/signal.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/signal.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,72 @@
+/*  signal.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Signal Manager.   This manager provides capabilities required
+ *  for asynchronous communication between tasks via signal sets.
+ *
+ *  Directives provided are:
+ *
+ *     + establish an asynchronous signal routine
+ *     + send a signal set to a task
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_SIGNAL_h
+#define __RTEMS_SIGNAL_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/asr.h>
+#include <rtems/modes.h>
+#include <rtems/object.h>
+#include <rtems/status.h>
+
+/*
+ *  rtems_signal_catch
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_signal_catch directive.  This directive
+ *  is used to establish asr_handler as the Asynchronous Signal Routine
+ *  (RTEMS_ASR) for the calling task.  The asr_handler will execute with a
+ *  mode of mode_set.
+ */
+
+rtems_status_code rtems_signal_catch(
+  rtems_asr_entry   asr_handler,
+  rtems_mode mode_set
+);
+
+/*
+ *  rtems_signal_send
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_signal_send directive.  This directive
+ *  sends the signal_set to the task specified by ID.
+ */
+
+rtems_status_code rtems_signal_send(
+  Objects_Id             id,
+  rtems_signal_set signal_set
+);
+
+#include <rtems/signalmp.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/headers/signalmp.h
===================================================================
--- c/src/exec/rtems/headers/signalmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/signalmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,147 @@
+/*  signalmp.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Multiprocessing Support in the Signal Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_SIGNAL_MP_h
+#define __RTEMS_SIGNAL_MP_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/asr.h>
+#include <rtems/mppkt.h>
+#include <rtems/object.h>
+#include <rtems/thread.h>
+#include <rtems/watchdog.h>
+
+/*
+ *  The following enumerated type defines the list of
+ *  remote signal operations.
+ */
+
+typedef enum {
+  SIGNAL_MP_SEND_REQUEST  = 0,
+  SIGNAL_MP_SEND_RESPONSE = 1,
+}   Signal_MP_Remote_operations;
+
+/*
+ *  The following data structure defines the packet used to perform
+ *  remote signal operations.
+ */
+
+typedef struct {
+  rtems_packet_prefix            Prefix;
+  Signal_MP_Remote_operations operation;
+  rtems_signal_set      signal_in;
+}   Signal_MP_Packet;
+
+/*
+ *  _Signal_MP_Send_process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  process operation can be performed on another node.
+ *
+ *  This routine is not needed since there are no process
+ *  packets to be sent by this manager.
+ */
+
+/*
+ *  _Signal_MP_Send_request_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive operation can be initiated on another node.
+ */
+
+rtems_status_code _Signal_MP_Send_request_packet (
+  Signal_MP_Remote_operations operation,
+  Objects_Id                  task_id,
+  rtems_signal_set      signal_in
+);
+
+/*
+ *  _Signal_MP_Send_response_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive can be performed on another node.
+ */
+
+void _Signal_MP_Send_response_packet (
+  Signal_MP_Remote_operations  operation,
+  Thread_Control              *the_thread
+);
+
+/*
+ *
+ *  _Signal_MP_Process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the actions specific to this package for
+ *  the request from another node.
+ */
+
+void _Signal_MP_Process_packet (
+  rtems_packet_prefix *the_packet_prefix
+);
+
+/*
+ *  _Signal_MP_Send_object_was_deleted
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked indirectly by the thread queue
+ *  when a proxy has been removed from the thread queue and
+ *  the remote node must be informed of this.
+ *
+ *  This routine is not needed since there are no objects
+ *  deleted by this manager.
+ */
+
+/*
+ *  _Signal_MP_Send_extract_proxy
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked when a task is deleted and it
+ *  has a proxy which must be removed from a thread queue and
+ *  the remote node must be informed of this.
+ *
+ *  This routine is not needed since there are no objects
+ *  deleted by this manager.
+ */
+
+/*
+ *  _Signal_MP_Get_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This function is used to obtain a signal mp packet.
+ */
+
+Signal_MP_Packet *_Signal_MP_Get_packet ( void );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of file */
Index: c/src/exec/rtems/headers/status.h
===================================================================
--- c/src/exec/rtems/headers/status.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/status.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,109 @@
+/*  status.h
+ *
+ *  This include file contains the status codes returned from the
+ *  executive directives.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_STATUS_h
+#define __RTEMS_STATUS_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* types */
+
+/* enumerated constants */
+
+typedef enum {
+  RTEMS_SUCCESSFUL               =  0, /* successful completion */
+  RTEMS_TASK_EXITTED             =  1, /* returned from a thread */
+  RTEMS_MP_NOT_CONFIGURED        =  2, /* multiprocessing not configured */
+  RTEMS_INVALID_NAME             =  3, /* invalid object name */
+  RTEMS_INVALID_ID               =  4, /* invalid object id */
+  RTEMS_TOO_MANY                 =  5, /* too many */
+  RTEMS_TIMEOUT                  =  6, /* timed out waiting */
+  RTEMS_OBJECT_WAS_DELETED       =  7, /* object deleted while waiting */
+  RTEMS_INVALID_SIZE             =  8, /* specified size was invalid */
+  RTEMS_INVALID_ADDRESS          =  9, /* address specified is invalid */
+  RTEMS_INVALID_NUMBER           = 10, /* number was invalid */
+  RTEMS_NOT_DEFINED              = 11, /* item has not been initialized */
+  RTEMS_RESOURCE_IN_USE          = 12, /* resources still outstanding */
+  RTEMS_UNSATISFIED              = 13, /* request not satisfied */
+  RTEMS_INCORRECT_STATE          = 14, /* thread is in wrong state */
+  RTEMS_ALREADY_SUSPENDED        = 15, /* thread already in state */
+  RTEMS_ILLEGAL_ON_SELF          = 16, /* illegal on calling thread */
+  RTEMS_ILLEGAL_ON_REMOTE_OBJECT = 17, /* illegal for remote object */
+  RTEMS_CALLED_FROM_ISR          = 18, /* called from wrong environment */
+  RTEMS_INVALID_PRIORITY         = 19, /* invalid thread priority */
+  RTEMS_INVALID_CLOCK            = 20, /* invalid date/time */
+  RTEMS_INVALID_NODE             = 21, /* invalid node id */
+  RTEMS_NOT_CONFIGURED           = 22, /* directive not configured */
+  RTEMS_NOT_OWNER_OF_RESOURCE    = 23, /* not owner of resource */
+  RTEMS_NOT_IMPLEMENTED          = 24, /* directive not implemented */
+  RTEMS_INTERNAL_ERROR           = 25, /* RTEMS inconsistency detected */
+  RTEMS_PROXY_BLOCKING           = 26, /* internal multiprocessing only */
+  RTEMS_NO_MEMORY                = 27  /* could not get enough memory */
+} rtems_status_code;
+
+#define RTEMS_STATUS_CODES_FIRST RTEMS_SUCCESSFUL
+#define RTEMS_STATUS_CODES_LAST  RTEMS_NO_MEMORY
+
+/*
+ *  rtems_is_status_successful
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the status code is equal to RTEMS_SUCCESSFUL,
+ *  and FALSE otherwise.
+ */
+
+STATIC INLINE boolean rtems_is_status_successful (
+  rtems_status_code code
+);
+
+/*
+ *  rtems_are_statuses_equal
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the status code1 is equal to code2,
+ *  and FALSE otherwise.
+ */
+
+STATIC INLINE boolean rtems_are_statuses_equal (
+  rtems_status_code code1,
+  rtems_status_code code2
+);
+
+/*
+ *  _Status_Is_proxy_blocking
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the status code is equal to the
+ *  status which indicates that a proxy is blocking, and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Status_Is_proxy_blocking (
+  rtems_status_code code
+);
+
+#include <rtems/status.inl>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/headers/taskmp.h
===================================================================
--- c/src/exec/rtems/headers/taskmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/taskmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,167 @@
+/*  taskmp.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the multiprocessing support in the task manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_RTEMS_TASKS_MP_h
+#define __RTEMS_RTEMS_TASKS_MP_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/mppkt.h>
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/priority.h>
+#include <rtems/tasks.h>
+#include <rtems/thread.h>
+
+/*
+ *  The following enumerated type defines the list of
+ *  remote task operations.
+ */
+
+typedef enum {
+  RTEMS_TASKS_MP_ANNOUNCE_CREATE       =  0,
+  RTEMS_TASKS_MP_ANNOUNCE_DELETE       =  1,
+  RTEMS_TASKS_MP_SUSPEND_REQUEST       =  2,
+  RTEMS_TASKS_MP_SUSPEND_RESPONSE      =  3,
+  RTEMS_TASKS_MP_RESUME_REQUEST        =  4,
+  RTEMS_TASKS_MP_RESUME_RESPONSE       =  5,
+  RTEMS_TASKS_MP_SET_PRIORITY_REQUEST  =  6,
+  RTEMS_TASKS_MP_SET_PRIORITY_RESPONSE =  7,
+  RTEMS_TASKS_MP_GET_NOTE_REQUEST      =  8,
+  RTEMS_TASKS_MP_GET_NOTE_RESPONSE     =  9,
+  RTEMS_TASKS_MP_SET_NOTE_REQUEST      = 10,
+  RTEMS_TASKS_MP_SET_NOTE_RESPONSE     = 11,
+}   RTEMS_tasks_MP_Remote_operations;
+
+/*
+ *  The following data structure defines the packet used to perform
+ *  remote task operations.
+ */
+
+typedef struct {
+  rtems_packet_prefix                 Prefix;
+  RTEMS_tasks_MP_Remote_operations operation;
+  Objects_Name                     name;
+  rtems_task_priority                 the_priority;
+  unsigned32                       notepad;
+  unsigned32                       note;
+}   RTEMS_tasks_MP_Packet;
+
+/*
+ *  _RTEMS_tasks_MP_Send_process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  process operation can be performed on another node.
+ */
+
+void _RTEMS_tasks_MP_Send_process_packet (
+  RTEMS_tasks_MP_Remote_operations operation,
+  Objects_Id                       task_id,
+  Objects_Name                     name
+);
+
+/*
+ *  _RTEMS_tasks_MP_Send_request_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive operation can be initiated on another node.
+ */
+
+rtems_status_code _RTEMS_tasks_MP_Send_request_packet (
+  RTEMS_tasks_MP_Remote_operations operation,
+  Objects_Id                       task_id,
+  rtems_task_priority                 the_priority,
+  unsigned32                       notepad,
+  unsigned32                       note
+);
+
+/*
+ *  _RTEMS_tasks_MP_Send_response_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive can be performed on another node.
+ */
+
+void _RTEMS_tasks_MP_Send_response_packet (
+  RTEMS_tasks_MP_Remote_operations  operation,
+  Thread_Control                   *the_thread
+);
+
+/*
+ *
+ *  _RTEMS_tasks_MP_Process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the actions specific to this package for
+ *  the request from another node.
+ */
+
+void _RTEMS_tasks_MP_Process_packet (
+  rtems_packet_prefix *the_packet_prefix
+);
+
+/*
+ *  _RTEMS_tasks_MP_Send_object_was_deleted
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked indirectly by the thread queue
+ *  when a proxy has been removed from the thread queue and
+ *  the remote node must be informed of this.
+ *
+ *  This routine is not needed by RTEMS_tasks since a task
+ *  cannot be deleted when segments are in use.
+ */
+
+/*
+ *  _RTEMS_tasks_MP_Send_extract_proxy
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked when a task is deleted and it
+ *  has a proxy which must be removed from a thread queue and
+ *  the remote node must be informed of this.
+ *
+ *  This routine is not needed since there are no objects
+ *  deleted by this manager.
+ *
+ */
+
+/*
+ *  _RTEMS_tasks_MP_Get_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This function is used to obtain a task mp packet.
+ */
+
+RTEMS_tasks_MP_Packet *_RTEMS_tasks_MP_Get_packet ( void );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of file */
Index: c/src/exec/rtems/headers/tasks.h
===================================================================
--- c/src/exec/rtems/headers/tasks.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/tasks.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,315 @@
+/*  tasks.h
+ *
+ *  This include file contains all constants and structures associated
+ *  with RTEMS tasks.  This manager provides a comprehensive set of directives
+ *  to create, delete, and administer tasks.
+ *
+ *  Directives provided are:
+ *
+ *     + create a task
+ *     + get an ID of a task
+ *     + start a task
+ *     + restart a task
+ *     + delete a task
+ *     + suspend a task
+ *     + resume a task
+ *     + set a task's priority
+ *     + change the current task's mode
+ *     + get a task notepad entry
+ *     + set a task notepad entry
+ *     + wake up after interval
+ *     + wake up when specified
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_RTEMS_TASKS_h
+#define __RTEMS_RTEMS_TASKS_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/message.h>
+#include <rtems/object.h>
+#include <rtems/part.h>
+#include <rtems/region.h>
+#include <rtems/sem.h>
+#include <rtems/states.h>
+#include <rtems/thread.h>
+#include <rtems/threadq.h>
+
+/*
+ *  Constant to be used as the ID of current task
+ */
+
+#define RTEMS_SELF                OBJECTS_ID_OF_SELF
+
+/*
+ *  This constant is passed to the rtems_task_wake_after directive as the
+ *  interval when a task wishes to yield the CPU.
+ */
+
+#define RTEMS_YIELD_PROCESSOR RTEMS_NO_TIMEOUT
+
+/*
+ *  rtems_task_create
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_task_create directive.  The task
+ *  will have the name name.  The attribute_set can be used to indicate
+ *  that the task will be globally accessible or utilize floating point.
+ *  The task's stack will be stack_size bytes.   The task will begin
+ *  execution with initial_priority and initial_modes.  It returns the
+ *  id of the created task in ID.
+ */
+
+rtems_status_code rtems_task_create(
+  Objects_Name        name,
+  rtems_task_priority    initial_priority,
+  unsigned32          stack_size,
+  rtems_mode       initial_modes,
+  rtems_attribute  attribute_set,
+  Objects_Id         *id
+);
+
+/*
+ *  rtems_task_ident
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_task_ident directive.
+ *  This directive returns the task ID associated with name.
+ *  If more than one task is named name, then the task to
+ *  which the ID belongs is arbitrary.  node indicates the
+ *  extent of the search for the ID of the task named name.
+ *  The search can be limited to a particular node or allowed to
+ *  encompass all nodes.
+ */
+
+rtems_status_code rtems_task_ident(
+  Objects_Name  name,
+  unsigned32    node,
+  Objects_Id   *id
+);
+
+/*
+ *  rtems_task_delete
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_task_delete directive.  The
+ *  task indicated by ID is deleted.
+ */
+
+rtems_status_code rtems_task_delete(
+  Objects_Id id
+);
+
+/*
+ *  rtems_task_get_note
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_task_get_note directive.  The
+ *  value of the indicated notepad for the task associated with ID
+ *  is returned in note.
+ */
+
+rtems_status_code rtems_task_get_note(
+  Objects_Id  id,
+  unsigned32  notepad,
+  unsigned32 *note
+);
+
+/*
+ *  rtems_task_set_note
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_task_set_note directive.  The
+ *  value of the indicated notepad for the task associated with ID
+ *  is returned in note.
+ */
+
+rtems_status_code rtems_task_set_note(
+  Objects_Id id,
+  unsigned32 notepad,
+  unsigned32 note
+);
+
+/*
+ *  rtems_task_mode
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_task_mode directive.  The current
+ *  values of the modes indicated by mask of the calling task are changed
+ *  to that indicated in mode_set.  The former mode of the task is
+ *  returned in mode_set.
+ */
+
+rtems_status_code rtems_task_mode(
+  rtems_mode  mode_set,
+  rtems_mode  mask,
+  rtems_mode *previous_mode_set
+);
+
+/*
+ *  rtems_task_restart
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_task_restart directive.  The
+ *  task associated with ID is restarted at its initial entry
+ *  point with the new argument.
+ */
+
+rtems_status_code rtems_task_restart(
+  Objects_Id id,
+  unsigned32 arg
+);
+
+/*
+ *  rtems_task_suspend
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_task_suspend directive.  The
+ *  SUSPENDED state is set for task associated with ID.
+ */
+
+rtems_status_code rtems_task_suspend(
+  Objects_Id id
+);
+
+/*
+ *  rtems_task_resume
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_task_resume Directive.  The
+ *  SUSPENDED state is cleared for task associated with ID.
+ */
+
+rtems_status_code rtems_task_resume(
+  Objects_Id id
+);
+
+/*
+ *  rtems_task_set_priority
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_task_set_priority directive.  The
+ *  current priority of the task associated with ID is set to
+ *  new_priority.  The former priority of that task is returned
+ *  in old_priority.
+ */
+
+rtems_status_code rtems_task_set_priority(
+  Objects_Id        id,
+  rtems_task_priority  new_priority,
+  rtems_task_priority *old_priority
+);
+
+/*
+ *  rtems_task_start
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_task_start directive.  The
+ *  starting execution point of the task associated with ID is
+ *  set to entry_point with the initial argument.
+ */
+
+rtems_status_code rtems_task_start(
+  Objects_Id   id,
+  rtems_task_entry entry_point,
+  unsigned32   argument
+);
+
+/*
+ *  rtems_task_wake_when
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_task_wake_when directive.  The
+ *  calling task is blocked until the current time of day is
+ *  equal to that indicated by time_buffer.
+ */
+
+rtems_status_code rtems_task_wake_when(
+  rtems_time_of_day *time_buffer
+);
+
+/*
+ *  rtems_task_wake_after
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_task_wake_after directive.  The
+ *  calling task is blocked until the indicated number of clock
+ *  ticks have occurred.
+ */
+
+rtems_status_code rtems_task_wake_after(
+  rtems_interval ticks
+);
+
+/*
+ *  _RTEMS_tasks_Allocate
+ *
+ *  DESCRIPTION:
+ *
+ *  This function allocates a task control block from
+ *  the inactive chain of free task control blocks.
+ */
+
+STATIC INLINE Thread_Control *_RTEMS_tasks_Allocate( void );
+
+/*
+ *  _RTEMS_tasks_Free
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine frees a task control block to the
+ *  inactive chain of free task control blocks.
+
+ */
+
+STATIC INLINE void _RTEMS_tasks_Free (
+  Thread_Control *the_task
+);
+
+/*
+ *  _RTEMS_tasks_Cancel_wait
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine unblocks the_thread and cancels any timers
+ *  which the_thread has active.
+ */
+
+STATIC INLINE void _RTEMS_tasks_Cancel_wait(
+  Thread_Control *the_thread
+);
+
+#include <rtems/tasks.inl>
+#include <rtems/taskmp.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/headers/timer.h
===================================================================
--- c/src/exec/rtems/headers/timer.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/headers/timer.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,292 @@
+/*  timer.h
+ *
+ *  This include file contains all the constants, structures, and
+ *  prototypes associated with the Timer Manager.  This manager provides
+ *  facilities to configure, initiate, cancel, and delete timers which will
+ *  fire at specified intervals of time.
+ *
+ *  Directives provided are:
+ *
+ *     + create a timer
+ *     + get an ID of a timer
+ *     + delete a timer
+ *     + set a timer to fire after a number of ticks have passed
+ *     + set a timer to fire when a specified date and time has been reached
+ *     + reset a timer
+ *     + cancel a time
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_TIMER_h
+#define __RTEMS_TIMER_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/object.h>
+#include <rtems/tod.h>
+#include <rtems/watchdog.h>
+
+/*
+ *  The following enumerated type details the classes to which a timer
+ *  may belong.
+ */
+
+typedef enum {
+  TIMER_INTERVAL,
+  TIMER_TIME_OF_DAY,
+  TIMER_DORMANT
+} Timer_Classes;
+
+/*
+ *  The following defines the type of a Timer Service Routine.
+ */
+
+typedef rtems_timer_service_routine_entry Timer_Service;
+
+/*
+ *  The following defines the information control block used to manage
+ *  this class of objects.
+ */
+
+EXTERN Objects_Information  _Timer_Information;
+
+/*
+ *  The following records define the control block used to manage
+ *  each timer.
+ */
+
+typedef struct {
+  Objects_Control  Object;
+  Watchdog_Control Ticker;
+  Timer_Classes    the_class;
+}   Timer_Control;
+
+/*
+ *  _Timer_Manager_initialization
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the initialization necessary for this manager.
+ */
+
+void _Timer_Manager_initialization(
+  unsigned32 maximum_timers
+);
+
+/*
+ *  rtems_timer_create
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_timer_create directive.  The
+ *  timer will have the name name.  It returns the id of the
+ *  created timer in ID.
+ */
+
+rtems_status_code rtems_timer_create(
+  Objects_Name  name,
+  Objects_Id   *id
+);
+
+/*
+ *  rtems_timer_ident
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_timer_ident directive.
+ *  This directive returns the timer ID associated with name.
+ *  If more than one timer is named name, then the timer
+ *  to which the ID belongs is arbitrary.
+ */
+
+rtems_status_code rtems_timer_ident(
+  Objects_Name  name,
+  Objects_Id   *id
+);
+
+/*
+ *  rtems_timer_cancel
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_timer_cancel directive.  It is used
+ *  to stop the timer associated with ID from firing.
+ */
+
+rtems_status_code rtems_timer_cancel(
+  Objects_Id id
+);
+
+/*
+ *  rtems_timer_delete
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_timer_delete directive.  The
+ *  timer indicated by ID is deleted.
+ */
+
+rtems_status_code rtems_timer_delete(
+  Objects_Id id
+);
+
+/*
+ *  rtems_timer_fire_after
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_timer_fire_after directive.  It
+ *  initiates the timer associated with ID to fire in ticks clock
+ *  ticks.  When the timer fires, the routine will be invoked.
+ */
+
+rtems_status_code rtems_timer_fire_after(
+  Objects_Id         id,
+  rtems_interval  ticks,
+  Timer_Service      routine,
+  void              *user_data
+);
+
+/*
+ *  rtems_timer_fire_when
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_timer_fire_when directive.  It
+ *  initiates the timer associated with ID to fire at wall_time
+ *  When the timer fires, the routine will be invoked.
+ */
+
+rtems_status_code rtems_timer_fire_when(
+  Objects_Id         id,
+  rtems_time_of_day       *wall_time,
+  Timer_Service      routine,
+  void              *user_data
+);
+
+/*
+ *  rtems_timer_reset
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_timer_reset directive.  It is used
+ *  to reinitialize the interval timer associated with ID just as if
+ *  rtems_timer_fire_after were re-invoked with the same arguments that
+ *  were used to initiate this timer.
+ */
+
+rtems_status_code rtems_timer_reset(
+  Objects_Id id
+);
+
+/*
+ *  _Timer_Allocate
+ *
+ *  DESCRIPTION:
+ *
+ *  This function allocates a timer control block from
+ *  the inactive chain of free timer control blocks.
+ */
+
+STATIC INLINE Timer_Control *_Timer_Allocate( void );
+
+/*
+ *  _Timer_Free
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine frees a timer control block to the
+ *  inactive chain of free timer control blocks.
+ */
+
+STATIC INLINE void _Timer_Free (
+  Timer_Control *the_timer
+);
+
+/*
+ *  _Timer_Get
+ *
+ *  DESCRIPTION:
+ *
+ *  This function maps timer IDs to timer control blocks.
+ *  If ID corresponds to a local timer, then it returns
+ *  the timer control pointer which maps to ID and location
+ *  is set to OBJECTS_LOCAL.  Otherwise, location is set
+ *  to OBJECTS_ERROR and the returned value is undefined.
+ */
+
+STATIC INLINE Timer_Control *_Timer_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+);
+
+/*
+ *  _Timer_Is_interval_class
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the class is that of an INTERVAL
+ *  timer, and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Timer_Is_interval_class (
+  Timer_Classes the_class
+);
+
+/*
+ *  _Timer_Is_time_of_day_class
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the class is that of an INTERVAL
+ *  timer, and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Timer_Is_timer_of_day_class (
+  Timer_Classes the_class
+);
+
+/*
+ *  _Timer_Is_dormant_class
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the class is that of a DORMANT
+ *  timer, and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Timer_Is_dormant_class (
+  Timer_Classes the_class
+);
+
+/*
+ *  _Timer_Is_null
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the_timer is NULL and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Timer_Is_null (
+  Timer_Control *the_timer
+);
+
+#include <rtems/timer.inl>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/include/rtems.h
===================================================================
--- c/src/exec/rtems/include/rtems.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,79 @@
+/*  rtems.h
+ *
+ *  This include file contains information about RTEMS executive that
+ *  is required by the application and is CPU independent.  It includes
+ *  two (2) CPU dependent files to tailor its data structures for a
+ *  particular processor.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_RTEMS_GENERIC_h
+#define __RTEMS_RTEMS_GENERIC_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/system.h>
+#include <rtems/init.h>
+#include <rtems/tasks.h>
+#include <rtems/intr.h>
+#include <rtems/clock.h>
+#include <rtems/extension.h>
+#include <rtems/timer.h>
+#include <rtems/sem.h>
+#include <rtems/message.h>
+#include <rtems/event.h>
+#include <rtems/signal.h>
+#include <rtems/event.h>
+#include <rtems/part.h>
+#include <rtems/region.h>
+#include <rtems/dpmem.h>
+#include <rtems/io.h>
+#include <rtems/fatal.h>
+#include <rtems/ratemon.h>
+#include <rtems/mp.h>
+
+/*
+ *  RTEMS basic type definitions
+ */
+
+typedef unsigned8       rtems_unsigned8;  /* unsigned 8-bit value  */
+typedef unsigned16      rtems_unsigned16; /* unsigned 16-bit value */
+typedef unsigned32      rtems_unsigned32; /* unsigned 32-bit value */
+typedef unsigned64      rtems_unsigned64; /* unsigned 64-bit value */
+
+typedef signed8         rtems_signed8;    /* signed 8-bit value  */
+typedef signed16        rtems_signed16;   /* signed 16-bit value */
+typedef signed32        rtems_signed32;   /* signed 32-bit value */
+typedef signed64        rtems_signed64;   /* signed 64-bit value */
+
+typedef single_precision rtems_single;    /* single precision float */
+typedef double_precision rtems_double;    /* double precision float */
+
+typedef boolean                    rtems_boolean;
+
+typedef Objects_Name               rtems_name;
+typedef Objects_Id                 rtems_id;
+
+typedef Context_Control            rtems_context;
+typedef Context_Control_fp         rtems_context_fp;
+typedef CPU_Interrupt_frame        rtems_interrupt_frame;
+
+#define RTEMS_HAS_HARDWARE_FP CPU_HARDWARE_FP
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/include/rtems/rtems/asr.h
===================================================================
--- c/src/exec/rtems/include/rtems/rtems/asr.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems/rtems/asr.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,177 @@
+/*  asr.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Asynchronous Signal Handler.  This Handler provides the low-level
+ *  support required by the Signal Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_ASR_h
+#define __RTEMS_ASR_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/modes.h>
+
+/*
+ *
+ *  The following type defines the control block used to manage
+ *  each signal set.
+ */
+
+typedef unsigned32 rtems_signal_set;
+
+/*
+ *  Return type for ASR Handler
+ */
+
+typedef void rtems_asr;
+
+/*
+ *  The following type corresponds to the applications asynchronous
+ *  signal processing routine.
+ */
+
+typedef rtems_asr ( *rtems_asr_entry )(
+                 rtems_signal_set
+             );
+
+/*
+ *
+ *  The following defines the control structure used to manage
+ *  signals.  Each thread has a copy of this record.
+ */
+
+typedef struct {
+  rtems_asr_entry            handler;          /* address of RTEMS_ASR */
+  rtems_mode          mode_set;         /* RTEMS_ASR mode */
+  rtems_signal_set signals_posted;   /* signal set */
+  rtems_signal_set signals_pending;  /* pending signal set */
+  unsigned32             nest_level;       /* nest level of RTEMS_ASR */
+}   ASR_Information;
+
+/*
+ *  The following constants define the individual signals which may
+ *  be used to compose a signal set.
+ */
+
+#define RTEMS_SIGNAL_0    0x00000001
+#define RTEMS_SIGNAL_1    0x00000002
+#define RTEMS_SIGNAL_2    0x00000004
+#define RTEMS_SIGNAL_3    0x00000008
+#define RTEMS_SIGNAL_4    0x00000010
+#define RTEMS_SIGNAL_5    0x00000020
+#define RTEMS_SIGNAL_6    0x00000040
+#define RTEMS_SIGNAL_7    0x00000080
+#define RTEMS_SIGNAL_8    0x00000100
+#define RTEMS_SIGNAL_9    0x00000200
+#define RTEMS_SIGNAL_10   0x00000400
+#define RTEMS_SIGNAL_11   0x00000800
+#define RTEMS_SIGNAL_12   0x00001000
+#define RTEMS_SIGNAL_13   0x00002000
+#define RTEMS_SIGNAL_14   0x00004000
+#define RTEMS_SIGNAL_15   0x00008000
+#define RTEMS_SIGNAL_16   0x00010000
+#define RTEMS_SIGNAL_17   0x00020000
+#define RTEMS_SIGNAL_18   0x00040000
+#define RTEMS_SIGNAL_19   0x00080000
+#define RTEMS_SIGNAL_20   0x00100000
+#define RTEMS_SIGNAL_21   0x00200000
+#define RTEMS_SIGNAL_22   0x00400000
+#define RTEMS_SIGNAL_23   0x00800000
+#define RTEMS_SIGNAL_24   0x01000000
+#define RTEMS_SIGNAL_25   0x02000000
+#define RTEMS_SIGNAL_26   0x04000000
+#define RTEMS_SIGNAL_27   0x08000000
+#define RTEMS_SIGNAL_28   0x10000000
+#define RTEMS_SIGNAL_29   0x20000000
+#define RTEMS_SIGNAL_30   0x40000000
+#define RTEMS_SIGNAL_31   0x80000000
+
+/*
+ *  _ASR_Initialize
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine initializes the given RTEMS_ASR information record.
+ */
+
+STATIC INLINE void _ASR_Initialize (
+  ASR_Information *information
+);
+
+/*
+ *  _ASR_Swap_signals
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine atomically swaps the pending and posted signal
+ *  sets.  This is done when the thread alters its mode in such a
+ *  way that the RTEMS_ASR disable/enable flag changes.
+ */
+
+STATIC INLINE void _ASR_Swap_signals (
+  ASR_Information *information
+);
+
+/*
+ *  _ASR_Is_null_handler
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the given asr_handler is NULL and
+ *  FALSE otherwise.
+ */
+
+STATIC INLINE boolean _ASR_Is_null_handler (
+  rtems_asr_entry asr_handler
+);
+
+/*
+ *  _ASR_Are_signals_pending
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if there are signals pending in the
+ *  given RTEMS_ASR information record and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _ASR_Are_signals_pending (
+  ASR_Information *information
+);
+
+/*
+ *  _ASR_Post_signals
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine posts the given signals into the signal_set
+ *  passed in.  The result is returned to the user in signal_set.
+ *
+ *  NOTE:  This must be implemented as a macro.
+ */
+
+STATIC INLINE void _ASR_Post_signals(
+  rtems_signal_set  signals,
+  rtems_signal_set *signal_set
+);
+
+#include <rtems/asr.inl>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/include/rtems/rtems/attr.h
===================================================================
--- c/src/exec/rtems/include/rtems/rtems/attr.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems/rtems/attr.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,188 @@
+/*  attr.h
+ *
+ *  This include file contains all information about the Object Attributes
+ *  Handler.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_ATTRIBUTES_h
+#define __RTEMS_ATTRIBUTES_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* types */
+
+typedef unsigned32 rtems_attribute;
+
+/* constants */
+
+#define RTEMS_DEFAULT_ATTRIBUTES            0x00000000
+
+#define RTEMS_NO_FLOATING_POINT   0x00000000 /* don't use FP HW */
+#define RTEMS_FLOATING_POINT      0x00000001 /* utilize coprocessor */
+
+#define RTEMS_LOCAL               0x00000000 /* local resource */
+#define RTEMS_GLOBAL              0x00000002 /* global resource */
+
+#define RTEMS_FIFO                0x00000000 /* process RTEMS_FIFO */
+#define RTEMS_PRIORITY            0x00000004 /* process by priority */
+
+#define RTEMS_NO_LIMIT            0x00000000 /* unlimited Q entries */
+#define RTEMS_LIMIT               0x00000008 /* limit Q entries */
+
+#define RTEMS_COUNTING_SEMAPHORE  0x00000000
+#define RTEMS_BINARY_SEMAPHORE    0x00000010
+
+#define RTEMS_NO_INHERIT_PRIORITY 0x00000000
+#define RTEMS_INHERIT_PRIORITY    0x00000020
+
+#if ( CPU_HARDWARE_FP == TRUE )
+#define ATTRIBUTES_NOT_SUPPORTED       0
+#else
+#define ATTRIBUTES_NOT_SUPPORTED       RTEMS_FLOATING_POINT
+#endif
+
+#if ( CPU_ALL_TASKS_ARE_FP == TRUE )
+#define ATTRIBUTES_REQUIRED            RTEMS_FLOATING_POINT
+#else
+#define ATTRIBUTES_REQUIRED            0
+#endif
+
+/*
+ *  _Attributes_Handler_initialization
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs initialization for this handler.
+ *
+ *  NOTE: There is no initialization required in C.  Conditional compilation
+ *        takes care of this in C.
+ */
+
+#define _Attributes_Handler_initialization()
+
+/*
+ *  _Attributes_Set
+ *
+ *  DESCRIPTION:
+ *
+ *  This function sets the requested new_attributes in the attribute_set
+ *  passed in.  The result is returned to the user.
+ */
+
+STATIC INLINE rtems_attribute _Attributes_Set (
+   rtems_attribute new_attributes,
+   rtems_attribute attribute_set
+);
+
+/*
+ *  _Attributes_Clear
+ *
+ *  DESCRIPTION:
+ *
+ *  This function clears the requested new_attributes in the attribute_set
+ *  passed in.  The result is returned to the user.
+ */
+
+STATIC INLINE rtems_attribute _Attributes_Clear (
+   rtems_attribute attribute_set,
+   rtems_attribute mask
+);
+
+/*
+ *  _Attributes_Is_floating_point
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the floating point attribute is
+ *  enabled in the attribute_set and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Attributes_Is_floating_point(
+  rtems_attribute attribute_set
+);
+
+/*
+ *  _Attributes_Is_global
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the global object attribute is
+ *  enabled in the attribute_set and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Attributes_Is_global(
+  rtems_attribute attribute_set
+);
+
+/*
+ *  _Attributes_Is_priority
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the priority attribute is
+ *  enabled in the attribute_set and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Attributes_Is_priority(
+  rtems_attribute attribute_set
+);
+
+/*
+ *  _Attributes_Is_limit
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the limited attribute is
+ *  enabled in the attribute_set and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Attributes_Is_limit(
+  rtems_attribute attribute_set
+);
+
+/*
+ *  _Attributes_Is_binary_semaphore
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the binary semaphore attribute is
+ *  enabled in the attribute_set and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Attributes_Is_binary_semaphore(
+  rtems_attribute attribute_set
+);
+
+/*
+ *  _Attributes_Is_inherit_priority
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the priority inheritance attribute
+ *  is enabled in the attribute_set and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Attributes_Is_inherit_priority(
+  rtems_attribute attribute_set
+);
+
+#include <rtems/attr.inl>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/include/rtems/rtems/clock.h
===================================================================
--- c/src/exec/rtems/include/rtems/rtems/clock.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems/rtems/clock.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,102 @@
+/*  clock.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Clock Manager.  This manager provides facilities to set, obtain,
+ *  and continually update the current date and time.
+ *
+ *  This manager provides directives to:
+ *
+ *     + set the current date and time
+ *     + obtain the current date and time
+ *     + announce a clock tick
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_CLOCK_h
+#define __RTEMS_CLOCK_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/tod.h>
+
+/*
+ *  List of things which can be returned by the rtems_clock_get directive.
+ */
+
+typedef enum {
+  RTEMS_CLOCK_GET_TOD,
+  RTEMS_CLOCK_GET_SECONDS_SINCE_EPOCH,
+  RTEMS_CLOCK_GET_TICKS_SINCE_BOOT,
+  RTEMS_CLOCK_GET_TICKS_PER_SECOND,
+  RTEMS_CLOCK_GET_TIME_VALUE
+} rtems_clock_get_options;
+
+/*
+ *  Standard flavor style to return TOD in for a rtems_clock_get option.
+ */
+
+typedef struct {
+  unsigned32  seconds;
+  unsigned32  microseconds;
+} rtems_clock_time_value;
+
+/*
+ *  rtems_clock_get
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_clock_get directive.  It returns
+ *  one of the following:
+ *    + current time of day
+ *    + seconds since epoch
+ *    + ticks since boot
+ *    + ticks per second
+ */
+
+rtems_status_code rtems_clock_get(
+  rtems_clock_get_options  option,
+  void              *time_buffer
+);
+
+/*
+ *  rtems_clock_set
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_clock_set directive.  It sets
+ *  the current time of day to that in the time_buffer record.
+ */
+
+rtems_status_code rtems_clock_set(
+  rtems_time_of_day *time_buffer
+);
+
+/*
+ *  rtems_clock_tick
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_clock_tick directive.  It is invoked
+ *  to inform RTEMS of the occurrence of a clock tick.
+ */
+
+rtems_status_code rtems_clock_tick( void );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/include/rtems/rtems/dpmem.h
===================================================================
--- c/src/exec/rtems/include/rtems/rtems/dpmem.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems/rtems/dpmem.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,210 @@
+/*  dpmem.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Dual Ported Memory Manager. This manager provides a mechanism
+ *  for converting addresses between internal and external representations
+ *  for multiple dual-ported memory areas.
+ *
+ *  Directives provided are:
+ *
+ *     + create a port
+ *     + get ID of a port
+ *     + delete a port
+ *     + convert external to internal address
+ *     + convert internal to external address
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_DUAL_PORTED_MEMORY_h
+#define __RTEMS_DUAL_PORTED_MEMORY_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/object.h>
+
+/*
+ *  The following structure defines the port control block.  Each port
+ *  has a control block associated with it.  This control block contains
+ *  all information required to support the port related operations.
+ */
+
+typedef struct {
+  Objects_Control  Object;
+  void            *internal_base; /* base internal address */
+  void            *external_base; /* base external address */
+  unsigned32       length;        /* length of dual-ported area */
+}   Dual_ported_memory_Control;
+
+/*
+ *  The following define the internal Dual Ported Memory information.
+ */
+
+EXTERN Objects_Information  _Dual_ported_memory_Information;
+
+/*
+ *  _Dual_ported_memory_Manager_initialization
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the initialization necessary for this manager.
+ */
+
+void _Dual_ported_memory_Manager_initialization(
+  unsigned32 maximum_ports
+);
+
+/*
+ *  rtems_port_create
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_port_create directive.  The port
+ *  will have the name name.  The port maps onto an area of dual ported
+ *  memory of length bytes which has internal_start and external_start
+ *  as the internal and external starting addresses, respectively.
+ *  It returns the id of the created port in ID.
+ */
+
+rtems_status_code rtems_port_create(
+  Objects_Name  name,
+  void         *internal_start,
+  void         *external_start,
+  unsigned32    length,
+  Objects_Id   *id
+);
+
+/*
+ *  rtems_port_ident
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_port_ident directive.  This directive
+ *  returns the port ID associated with name.  If more than one port is
+ *  named name, then the port to which the ID belongs is arbitrary.
+ */
+
+rtems_status_code rtems_port_ident(
+  Objects_Name  name,
+  Objects_Id   *id
+);
+
+/*
+ *  rtems_port_delete
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_port_delete directive.  It deletes
+ *  the port associated with ID.
+ */
+
+rtems_status_code rtems_port_delete(
+  Objects_Id id
+);
+
+/*
+ *  rtems_port_external_to_internal
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_port_external_to_internal directive.
+ *  It returns the internal port address which maps to the provided
+ *  external port address for the specified port ID.
+ */
+
+rtems_status_code rtems_port_external_to_internal(
+  Objects_Id   id,
+  void        *external,
+  void       **internal
+);
+
+/*
+ *  rtems_port_internal_to_external
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the Port_internal_to_external directive.
+ *  It returns the external port address which maps to the provided
+ *  internal port address for the specified port ID.
+ */
+
+rtems_status_code rtems_port_internal_to_external(
+  Objects_Id   id,
+  void        *internal,
+  void       **external
+);
+
+/*
+ *  _Dual_ported_memory_Allocate
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine allocates a port control block from the inactive chain
+ *  of free port control blocks.
+ */
+
+STATIC INLINE Dual_ported_memory_Control
+  *_Dual_ported_memory_Allocate ( void );
+
+/*
+ *  _Dual_ported_memory_Free
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine frees a port control block to the inactive chain
+ *  of free port control blocks.
+ */
+
+STATIC INLINE void _Dual_ported_memory_Free (
+   Dual_ported_memory_Control *the_port
+);
+
+/*
+ *  _Dual_ported_memory_Get
+ *
+ *  DESCRIPTION:
+ *
+ *  This function maps port IDs to port control blocks.  If ID
+ *  corresponds to a local port, then it returns the_port control
+ *  pointer which maps to ID and location is set to OBJECTS_LOCAL.
+ *  Global ports are not supported, thus if ID  does not map to a
+ *  local port, location is set to OBJECTS_ERROR and the_port is
+ *  undefined.
+ */
+
+STATIC INLINE Dual_ported_memory_Control *_Dual_ported_memory_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+);
+
+/*
+ *  _Dual_ported_memory_Is_null
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the_port is NULL and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Dual_ported_memory_Is_null(
+  Dual_ported_memory_Control *the_port
+);
+
+#include <rtems/dpmem.inl>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/include/rtems/rtems/event.h
===================================================================
--- c/src/exec/rtems/include/rtems/rtems/event.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems/rtems/event.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,158 @@
+/*  event.h
+ *
+ *  This include file contains the information pertaining to the Event
+ *  Manager.  This manager provides a high performance method of communication
+ *  and synchronization.
+ *
+ *  Directives provided are:
+ *
+ *     + send an event set to a task
+ *     + receive event condition
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_EVENT_h
+#define __RTEMS_EVENT_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/thread.h>
+#include <rtems/watchdog.h>
+#include <rtems/eventset.h>
+
+/*
+ *  This constant is passed as the event_in to the
+ *  rtems_event_receive directive to determine which events are pending.
+ */
+
+#define EVENT_CURRENT  0
+
+/*
+ *  _Event_Manager_initialization
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the initialization necessary for this manager.
+ */
+
+STATIC INLINE void _Event_Manager_initialization( void );
+
+/*
+ *  rtems_event_send
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_event_send directive.  It sends
+ *  event_in to the task specified by ID.  If the task is blocked
+ *  waiting to receive events and the posting of event_in satisfies
+ *  the task's event condition, then it is unblocked.
+ */
+
+rtems_status_code rtems_event_send (
+  Objects_Id         id,
+  rtems_event_set event_in
+);
+
+/*
+ *  rtems_event_receive
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_event_receive directive.  This
+ *  directive is invoked when the calling task wishes to receive
+ *  the event_in event condition.  One of the fields in the option_set
+ *  parameter determines whether the receive request is satisfied if
+ *  any or all of the events are pending.   If the event condition
+ *  is not satisfied immediately, then the task may block with an
+ *  optional timeout of TICKS clock ticks or return immediately.
+ *  This determination is based on another field in the option_set
+ *  parameter.  This directive returns the events received in the
+ *  event_out parameter.
+ */
+
+rtems_status_code rtems_event_receive (
+  rtems_event_set  event_in,
+  rtems_option     option_set,
+  rtems_interval   ticks,
+  rtems_event_set *event_out
+);
+
+/*
+ *  _Event_Seize
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine determines if the event condition event_in is
+ *  satisfied.  If so or if the no_wait option is enabled in option_set,
+ *  then the procedure returns immediately.  If neither of these
+ *  conditions is true, then the calling task is blocked with an
+ *  optional timeout of ticks clock ticks.
+ */
+
+void _Event_Seize (
+  rtems_event_set event_in,
+  rtems_option    option_set,
+  rtems_interval  ticks
+);
+
+/*
+ *  _Event_Surrender
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine determines if the event condition of the_thread
+ *  has been satisfied.  If so, it unblocks the_thread.
+ */
+
+void _Event_Surrender (
+  Thread_Control *the_thread
+);
+
+/*
+ *  _Event_Timeout
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked when a task's event receive request
+ *  has not been satisfied after the specified timeout interval.
+ *  The task represented by ID will be unblocked and its status
+ *  code will be set in it's control block to indicate that a timeout
+ *  has occurred.
+ */
+
+void _Event_Timeout (
+  Objects_Id  id,
+  void       *ignored
+);
+
+/*
+ *  The following defines the synchronization flag used by the
+ *  Event Manager to insure that signals sent to the currently
+ *  executing thread are received properly.
+ */
+
+EXTERN boolean _Event_Sync;    /* event manager sync flag */
+
+#include <rtems/event.inl>
+#include <rtems/eventmp.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/include/rtems/rtems/eventmp.h
===================================================================
--- c/src/exec/rtems/include/rtems/rtems/eventmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems/rtems/eventmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,147 @@
+/*  eventmp.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Multiprocessing Support in the Event Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_EVENT_MP_h
+#define __RTEMS_EVENT_MP_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/event.h>
+#include <rtems/mppkt.h>
+#include <rtems/object.h>
+#include <rtems/thread.h>
+#include <rtems/watchdog.h>
+
+/*
+ *  The following enumerated type defines the list of
+ *  remote event operations.
+ */
+
+typedef enum {
+  EVENT_MP_SEND_REQUEST  =  0,
+  EVENT_MP_SEND_RESPONSE =  1,
+}   Event_MP_Remote_operations;
+
+/*
+ *  The following data structure defines the packet used to perform
+ *  remote event operations.
+ */
+
+typedef struct {
+  rtems_packet_prefix           Prefix;
+  Event_MP_Remote_operations operation;
+  rtems_event_set         event_in;
+}   Event_MP_Packet;
+
+/*
+ *  _Event_MP_Send_process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  process operation can be performed on another node.
+ *
+ *  This routine is not needed since there are no process
+ *  packets to be sent by this manager.
+ */
+
+/*
+ *  _Event_MP_Send_request_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive operation can be initiated on another node.
+ */
+
+rtems_status_code _Event_MP_Send_request_packet (
+  Event_MP_Remote_operations operation,
+  Objects_Id                 event_id,
+  rtems_event_set         event_in
+);
+
+/*
+ *  _Event_MP_Send_response_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive can be performed on another node.
+ */
+
+void _Event_MP_Send_response_packet (
+  Event_MP_Remote_operations  operation,
+  Thread_Control             *the_thread
+);
+
+/*
+ *
+ *  _Event_MP_Process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the actions specific to this package for
+ *  the request from another node.
+ */
+
+void _Event_MP_Process_packet (
+  rtems_packet_prefix *the_packet_prefix
+);
+
+/*
+ *  _Event_MP_Send_object_was_deleted
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked indirectly by the thread queue
+ *  when a proxy has been removed from the thread queue and
+ *  the remote node must be informed of this.
+ *
+ *  This routine is not needed since there are no objects
+ *  deleted by this manager.
+ */
+
+/*
+ *  _Event_MP_Send_extract_proxy
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked when a task is deleted and it
+ *  has a proxy which must be removed from a thread queue and
+ *  the remote node must be informed of this.
+ *
+ *  This routine is not needed since there are no objects
+ *  deleted by this manager.
+ */
+
+/*
+ *  _Event_MP_Get_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This function is used to obtain a event mp packet.
+ */
+
+Event_MP_Packet *_Event_MP_Get_packet ( void );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of file */
Index: c/src/exec/rtems/include/rtems/rtems/eventset.h
===================================================================
--- c/src/exec/rtems/include/rtems/rtems/eventset.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems/rtems/eventset.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,142 @@
+/*  eventset.h
+ *
+ *  This include file contains the information pertaining to the
+ *  Event Sets Handler.  This handler provides methods for the manipulation
+ *  of event sets which will be sent and received by tasks.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_EVENT_SET_h
+#define __RTEMS_EVENT_SET_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ *  The following defines the type used to control event sets.
+ */
+
+typedef unsigned32 rtems_event_set;
+
+/*
+ *  The following constants define the individual events which may
+ *  be used to compose an event set.
+ */
+
+#define RTEMS_PENDING_EVENTS      0           /* receive pending events   */
+#define RTEMS_ALL_EVENTS  0xFFFFFFFF
+
+#define RTEMS_EVENT_0     0x00000001
+#define RTEMS_EVENT_1     0x00000002
+#define RTEMS_EVENT_2     0x00000004
+#define RTEMS_EVENT_3     0x00000008
+#define RTEMS_EVENT_4     0x00000010
+#define RTEMS_EVENT_5     0x00000020
+#define RTEMS_EVENT_6     0x00000040
+#define RTEMS_EVENT_7     0x00000080
+#define RTEMS_EVENT_8     0x00000100
+#define RTEMS_EVENT_9     0x00000200
+#define RTEMS_EVENT_10    0x00000400
+#define RTEMS_EVENT_11    0x00000800
+#define RTEMS_EVENT_12    0x00001000
+#define RTEMS_EVENT_13    0x00002000
+#define RTEMS_EVENT_14    0x00004000
+#define RTEMS_EVENT_15    0x00008000
+#define RTEMS_EVENT_16    0x00010000
+#define RTEMS_EVENT_17    0x00020000
+#define RTEMS_EVENT_18    0x00040000
+#define RTEMS_EVENT_19    0x00080000
+#define RTEMS_EVENT_20    0x00100000
+#define RTEMS_EVENT_21    0x00200000
+#define RTEMS_EVENT_22    0x00400000
+#define RTEMS_EVENT_23    0x00800000
+#define RTEMS_EVENT_24    0x01000000
+#define RTEMS_EVENT_25    0x02000000
+#define RTEMS_EVENT_26    0x04000000
+#define RTEMS_EVENT_27    0x08000000
+#define RTEMS_EVENT_28    0x10000000
+#define RTEMS_EVENT_29    0x20000000
+#define RTEMS_EVENT_30    0x40000000
+#define RTEMS_EVENT_31    0x80000000
+
+
+/*
+ *  The following constant is the value of an event set which
+ *  has no events pending.
+ */
+
+#define EVENT_SETS_NONE_PENDING 0
+
+/*
+ *  _Event_sets_Is_empty
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if on events are posted in the event_set,
+ *  and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Event_sets_Is_empty(
+  rtems_event_set the_event_set
+);
+
+/*
+ *  _Event_sets_Post
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine posts the given new_events into the event_set
+ *  passed in.  The result is returned to the user in event_set.
+ */
+
+STATIC INLINE void _Event_sets_Post(
+  rtems_event_set  the_new_events,
+  rtems_event_set *the_event_set
+);
+
+/*
+ *  _Event_sets_Get
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns the events in event_condition which are
+ *  set in event_set.
+ */
+
+STATIC INLINE rtems_event_set _Event_sets_Get(
+  rtems_event_set the_event_set,
+  rtems_event_set the_event_condition
+);
+
+/*
+ *  _Event_sets_Clear
+ *
+ *  DESCRIPTION:
+ *
+ *  This function removes the events in mask from the event_set
+ *  passed in.  The result is returned to the user in event_set.
+ */
+
+STATIC INLINE rtems_event_set _Event_sets_Clear(
+ rtems_event_set the_event_set,
+ rtems_event_set the_mask
+);
+
+#include <rtems/eventset.inl>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/include/rtems/rtems/intr.h
===================================================================
--- c/src/exec/rtems/include/rtems/rtems/intr.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems/rtems/intr.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,125 @@
+/*  intr.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Interrupt Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_INTERRUPT_h
+#define __RTEMS_INTERRUPT_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/isr.h>
+
+/*
+ *  Interrupt level type
+ */
+
+typedef ISR_Level rtems_interrupt_level;
+
+/*
+ *  _Interrupt_Manager_initialization
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine initializes the interrupt manager.
+ *
+ */
+
+void _Interrupt_Manager_initialization( void );
+
+/*
+ *  rtems_interrupt_catch
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_interrupt_catch directive.  This
+ *  directive installs new_isr_handler as the RTEMS interrupt service
+ *  routine for vector.  The previous RTEMS interrupt service
+ *  routine is returned in old_isr_handler.
+ */
+
+rtems_status_code rtems_interrupt_catch(
+  rtems_isr_entry    new_isr_handler,
+  rtems_vector_number  vector,
+  rtems_isr_entry   *old_isr_handler
+);
+
+/*
+ *  rtems_interrupt_disable
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine disables all maskable interrupts and returns the
+ *  previous level in _isr_cookie.
+ */
+
+#define rtems_interrupt_disable( _isr_cookie ) \
+    _ISR_Disable(_isr_cookie)
+        
+/*
+ *  rtems_interrupt_enable
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine enables maskable interrupts to the level indicated
+ *  _isr_cookie.
+ */
+
+#define rtems_interrupt_enable( _isr_cookie ) \
+    _ISR_Enable(_isr_cookie)
+        
+/*
+ *  rtems_interrupt_flash
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine temporarily enables maskable interrupts to the
+ *  level in _isr_cookie before redisabling them.
+ */
+
+#define rtems_interrupt_flash( _isr_cookie ) \
+    _ISR_Flash(_isr_cookie)
+
+/*
+ *  rtems_interrupt_cause
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine generates an interrupt.
+ *
+ *  NOTE:  No implementation.
+ */
+
+#define rtems_interrupt_cause( _interrupt_to_cause )
+
+/*
+ *  rtems_interrupt_cause
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine clears the specified interrupt.
+ *
+ *  NOTE:  No implementation.
+ */
+
+#define rtems_interrupt_clear( _interrupt_to_clear )
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/include/rtems/rtems/message.h
===================================================================
--- c/src/exec/rtems/include/rtems/rtems/message.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems/rtems/message.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,461 @@
+/*  message.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Message Queue Manager.  This manager provides a mechanism for
+ *  communication and synchronization between tasks using messages.
+ *
+ *  Directives provided are:
+ *
+ *     + create a queue
+ *     + get ID of a queue
+ *     + delete a queue
+ *     + put a message at the rear of a queue
+ *     + put a message at the front of a queue
+ *     + broadcast N messages to a queue
+ *     + receive message from a queue
+ *     + flush all messages on a queue
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_MESSAGE_QUEUE_h
+#define __RTEMS_MESSAGE_QUEUE_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/chain.h>
+#include <rtems/object.h>
+#include <rtems/threadq.h>
+
+/*
+ *  The following defines the data types needed to manipulate
+ *  the contents of message buffers.
+ */
+
+typedef struct {
+  unsigned32 field1;
+  unsigned32 field2;
+  unsigned32 field3;
+  unsigned32 field4;
+}  Message_queue_Buffer;
+
+/*
+ *  The following records define the organization of a message
+ *  buffer.
+ */
+
+typedef struct {
+  Chain_Node           Node;
+  Message_queue_Buffer Contents;
+}   Message_queue_Buffer_control;
+
+/*
+ *  The following records define the control block used to manage
+ *  each message queue.
+ */
+
+typedef struct {
+  Objects_Control      Object;
+  Thread_queue_Control Wait_queue;
+  rtems_attribute   attribute_set;
+  unsigned32           maximum_pending_messages;
+  unsigned32           number_of_pending_messages;
+  Chain_Control        Pending_messages;
+}   Message_queue_Control;
+
+/*
+ *  The following defines the information control block used to
+ *  manage this class of objects.
+ */
+
+EXTERN Objects_Information  _Message_queue_Information;
+
+/*
+ *  The following defines the data structures used to
+ *  manage the pool of inactive message buffers.
+ */
+
+EXTERN Chain_Control _Message_queue_Inactive_messages;
+
+/*
+ *  The following enumerated type details the modes in which a message
+ *  may be submitted to a message queue.  The message may be posted
+ *  in a send or urgent fashion.
+ */
+
+typedef enum {
+  MESSAGE_QUEUE_SEND_REQUEST   = 0,
+  MESSAGE_QUEUE_URGENT_REQUEST = 1
+}  Message_queue_Submit_types;
+
+/*
+ *  _Message_queue_Manager_initialization
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the initialization necessary for this manager.
+ */
+
+void _Message_queue_Manager_initialization(
+  unsigned32 maximum_message_queues,
+  unsigned32 maximum_messages
+);
+
+/*
+ *  rtems_message_queue_create
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_message_queue_create directive.  The
+ *  message queue will have the name name.  If the attribute_set indicates
+ *  that the message queue is to be limited in the number of messages
+ *  that can be outstanding, then count indicates the maximum number of
+ *  messages that will be held.  It returns the id of the created
+ *  message queue in ID.
+ */
+
+rtems_status_code rtems_message_queue_create(
+  Objects_Name        name,
+  unsigned32          count,
+  rtems_attribute  attribute_set,
+  Objects_Id         *id
+);
+
+/*
+ *  rtems_message_queue_ident
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_message_queue_ident directive.
+ *  This directive returns the message queue ID associated with NAME.
+ *  If more than one message queue is named name, then the message
+ *  queue to which the ID belongs is arbitrary.  node indicates the
+ *  extent of the search for the ID of the message queue named name.
+ *  The search can be limited to a particular node or allowed to
+ *  encompass all nodes.
+ */
+
+rtems_status_code rtems_message_queue_ident(
+  Objects_Name  name,
+  unsigned32    node,
+  Objects_Id   *id
+);
+
+/*
+ *  rtems_message_queue_delete
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_message_queue_delete directive.  The
+ *  message queue indicated by ID is deleted.
+ */
+
+rtems_status_code rtems_message_queue_delete(
+  Objects_Id id
+);
+
+/*
+ *  rtems_message_queue_send
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_message_queue_send directive.
+ *  This directive sends the message buffer to the message queue
+ *  indicated by ID.  If one or more tasks is blocked waiting
+ *  to receive a message from this message queue, then one will
+ *  receive the message.  The task selected to receive the
+ *  message is based on the task queue discipline algorithm in
+ *  use by this particular message queue.  If no tasks are waiting,
+ *  then the message buffer will be placed at the rear of the
+ *  chain of pending messages for this message queue.
+ */
+
+rtems_status_code rtems_message_queue_send(
+  Objects_Id            id,
+  void                 *buffer
+);
+
+/*
+ *  rtems_message_queue_urgent
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_message_queue_send directive.
+ *  This directive sends the message buffer to the message queue
+ *  indicated by ID.  If one or more tasks is blocked waiting
+ *  to receive a message from this message queue, then one will
+ *  receive the message.  The task selected to receive the
+ *  message is based on the task queue discipline algorithm in
+ *  use by this particular message queue.  If no tasks are waiting,
+ *  then the message buffer will be placed at the rear of the
+ *  chain of pending messages for this message queue.
+ */
+
+rtems_status_code rtems_message_queue_urgent(
+  Objects_Id            id,
+  void                 *buffer
+);
+
+/*
+ *  rtems_message_queue_broadcast
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_message_queue_send directive.
+ *  This directive sends the message buffer to the message queue
+ *  indicated by ID.  If one or more tasks is blocked waiting
+ *  to receive a message from this message queue, then one will
+ *  receive the message.  The task selected to receive the
+ *  message is based on the task queue discipline algorithm in
+ *  use by this particular message queue.  If no tasks are waiting,
+ *  then the message buffer will be placed at the rear of the
+ *  chain of pending messages for this message queue.
+ */
+
+rtems_status_code rtems_message_queue_broadcast(
+  Objects_Id            id,
+  void                 *buffer,
+  unsigned32           *count
+);
+
+/*
+ *  rtems_message_queue_receive
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_message_queue_receive directive.
+ *  This directive is invoked when the calling task wishes to receive
+ *  a message from the message queue indicated by ID.  The received
+ *  message is to be placed in buffer.  If no messages are outstanding
+ *  and the option_set indicates that the task is willing to block,
+ *  then the task will be blocked until a message arrives or until,
+ *  optionally, timeout clock ticks have passed.
+ */
+
+rtems_status_code rtems_message_queue_receive(
+  Objects_Id            id,
+  void                 *buffer,
+  unsigned32            option_set,
+  rtems_interval     timeout
+);
+
+/*
+ *  rtems_message_queue_flush
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_message_queue_flush directive.
+ *  This directive takes all outstanding messages for the message
+ *  queue indicated by ID and returns them to the inactive message
+ *  chain.  The number of messages flushed is returned in COUNT.
+ */
+
+rtems_status_code rtems_message_queue_flush(
+  Objects_Id  id,
+  unsigned32 *count
+);
+
+/*
+ *  _Message_queue_Copy_buffer
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine copies the contents of the source message buffer
+ *  to the destination message buffer.
+ */
+
+STATIC INLINE void _Message_queue_Copy_buffer (
+  Message_queue_Buffer *source,
+  Message_queue_Buffer *destination
+);
+
+/*
+ *  _Message_queue_Seize
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine attempts to receive a message from the_message_queue.
+ *  If a message is available or if the RTEMS_NO_WAIT option is enabled in
+ *  option_set, then the routine returns.  Otherwise, the calling task
+ *  is blocked until a message is available.  If a message is returned
+ *  to the task, then buffer will contain its contents.
+ */
+
+boolean _Message_queue_Seize(
+  Message_queue_Control *the_message_queue,
+  unsigned32             option_set,
+  Message_queue_Buffer  *buffer
+);
+
+/*
+ *  _Message_queue_Flush_support
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine flushes all outstanding messages and returns
+ *  them to the inactive message chain.
+ */
+
+unsigned32 _Message_queue_Flush_support(
+  Message_queue_Control *the_message_queue
+);
+
+/*
+ *  _Message_queue_Submit
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine provides the common foundation for the
+ *  rtems_message_queue_send and rtems_message_queue_urgent directives.
+ */
+
+rtems_status_code _Message_queue_Submit(
+  Objects_Id                  id,
+  Message_queue_Buffer       *buffer,
+  Message_queue_Submit_types  submit_type
+);
+
+/*
+ *  _Message_queue_Allocate_message_buffer
+ *
+ *  DESCRIPTION:
+ *
+ *  This function allocates a message buffer from the inactive
+ *  message buffer chain.
+ */
+
+STATIC INLINE Message_queue_Buffer_control *
+  _Message_queue_Allocate_message_buffer ( void );
+
+/*
+ *  _Message_queue_Free_message_buffer
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine frees a message buffer to the inactive
+ *  message buffer chain.
+ */
+
+STATIC INLINE void _Message_queue_Free_message_buffer (
+  Message_queue_Buffer_control *the_message
+);
+
+/*
+ *  _Message_queue_Get_pending_message
+ *
+ *  DESCRIPTION:
+ *
+ *  This function removes the first message from the_message_queue
+ *  and returns a pointer to it.
+ */
+
+STATIC INLINE
+  Message_queue_Buffer_control *_Message_queue_Get_pending_message (
+  Message_queue_Control *the_message_queue
+);
+
+/*
+ *  _Message_queue_Append
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine places the_message at the rear of the outstanding
+ *  messages on the_message_queue.
+ */
+
+STATIC INLINE void _Message_queue_Append (
+  Message_queue_Control        *the_message_queue,
+  Message_queue_Buffer_control *the_message
+);
+
+/*
+ *  _Message_queue_Prepend
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine places the_message at the rear of the outstanding
+ *  messages on the_message_queue.
+ */
+
+STATIC INLINE void _Message_queue_Prepend (
+  Message_queue_Control        *the_message_queue,
+  Message_queue_Buffer_control *the_message
+);
+
+/*
+ *  _Message_queue_Is_null
+ *
+ *  DESCRIPTION:
+ *
+ *  This function places the_message at the rear of the outstanding
+ *  messages on the_message_queue.
+ */
+
+STATIC INLINE boolean _Message_queue_Is_null (
+  Message_queue_Control *the_message_queue
+);
+
+/*
+ *  _Message_queue_Allocate
+ *
+ *  DESCRIPTION:
+ *
+ *  This function allocates a message queue control block from
+ *  the inactive chain of free message queue control blocks.
+ */
+
+STATIC INLINE Message_queue_Control *_Message_queue_Allocate ( void );
+
+/*
+ *  _Message_queue_Free
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine allocates a message queue control block from
+ *  the inactive chain of free message queue control blocks.
+ */
+
+STATIC INLINE void _Message_queue_Free (
+  Message_queue_Control *the_message_queue
+);
+
+/*
+ *  _Message_queue_Get
+ *
+ *  DESCRIPTION:
+ *
+ *  This function maps message queue IDs to message queue control
+ *  blocks.  If ID corresponds to a local message queue, then it
+ *  returns the_message_queue control pointer which maps to ID
+ *  and location is set to OBJECTS_LOCAL.  If the message queue ID is
+ *  global and resides on a remote node, then location is set
+ *  to OBJECTS_REMOTE, and the_message_queue is undefined.
+ *  Otherwise, location is set to OBJECTS_ERROR and
+ *  the_message_queue is undefined.
+ */
+
+STATIC INLINE Message_queue_Control *_Message_queue_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+);
+
+#include <rtems/message.inl>
+#include <rtems/msgmp.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/include/rtems/rtems/modes.h
===================================================================
--- c/src/exec/rtems/include/rtems/rtems/modes.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems/rtems/modes.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,183 @@
+/*  modes.h
+ *
+ *  This include file contains all constants and structures associated
+ *  with the RTEMS thread and RTEMS_ASR modes.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_MODES_h
+#define __RTEMS_MODES_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/isr.h>
+
+/*
+ *  The following type defines the control block used to manage
+ *  each a mode set.
+ */
+
+typedef unsigned32 rtems_mode;
+
+/*
+ *  The following constants define the individual modes and masks
+ *  which may be used to compose a mode set and to alter modes.
+ */
+
+#define RTEMS_ALL_MODE_MASKS     0x0000ffff
+
+#define RTEMS_DEFAULT_MODES     0x00000000
+#define RTEMS_CURRENT_MODE      0
+
+#define RTEMS_PREEMPT_MASK    0x00000100  /* preemption bit           */
+#define RTEMS_TIMESLICE_MASK  0x00000200  /* timeslice bit            */
+#define RTEMS_ASR_MASK        0x00000400  /* RTEMS_ASR enable bit           */
+#define RTEMS_INTERRUPT_MASK  CPU_MODES_INTERRUPT_MASK
+
+#define RTEMS_PREEMPT      0x00000000     /* enable preemption        */
+#define RTEMS_NO_PREEMPT   0x00000100     /* disable preemption       */
+
+#define RTEMS_NO_TIMESLICE 0x00000000     /* disable timeslicing      */
+#define RTEMS_TIMESLICE    0x00000200     /* enable timeslicing       */
+
+#define RTEMS_ASR          0x00000000     /* enable RTEMS_ASR               */
+#define RTEMS_NO_ASR       0x00000400     /* disable RTEMS_ASR              */
+
+/*
+ *  The number of bits for interrupt levels is CPU dependent.
+ *  RTEMS supports 0 to 256 levels in bits 0-7 of the mode.
+ */
+
+/*
+ *  RTEMS_INTERRUPT_LEVEL
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns the processor dependent interrupt
+ *  level which corresponds to the requested interrupt level.
+ *
+ * NOTE: RTEMS supports 256 interrupt levels using the least
+ *       significant eight bits of MODES.CONTROL.  On any
+ *       particular CPU, fewer than 256 levels may be supported.
+ */
+
+STATIC INLINE unsigned32 RTEMS_INTERRUPT_LEVEL (
+  rtems_mode mode_set
+);
+
+/*
+ *  _Modes_Mask_changed
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if any of the mode flags in mask
+ *  are set in mode_set, and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Modes_Mask_changed (
+  rtems_mode mode_set,
+  rtems_mode masks
+);
+
+/*
+ *  _Modes_Is_asr_disabled
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if mode_set indicates that Asynchronous
+ *  Signal Processing is disabled, and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Modes_Is_asr_disabled (
+  rtems_mode mode_set
+);
+
+/*
+ *  _Modes_Is_preempt
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if mode_set indicates that preemption
+ *  is enabled, and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Modes_Is_preempt (
+  rtems_mode mode_set
+);
+
+/*
+ *  _Modes_Is_timeslice
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if mode_set indicates that timeslicing
+ *  is enabled, and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Modes_Is_timeslice (
+  rtems_mode mode_set
+);
+
+/*
+ *  _Modes_Get_interrupt_level
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns the interrupt level portion of the mode_set.
+ */
+
+STATIC INLINE ISR_Level _Modes_Get_interrupt_level (
+  rtems_mode mode_set
+);
+
+/*
+ *  _Modes_Set_interrupt_level
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine sets the current interrupt level to that specified
+ *  in the mode_set.
+ */
+
+STATIC INLINE void _Modes_Set_interrupt_level (
+  rtems_mode mode_set
+);
+
+/*
+ *  _Modes_Change
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine changes the modes in old_mode_set indicated by
+ *  mask to the requested values in new_mode_set.  The resulting
+ *  mode set is returned in out_mode_set and the modes that changed
+ *  is returned in changed.
+ */
+
+STATIC INLINE void _Modes_Change (
+  rtems_mode  old_mode_set,
+  rtems_mode  new_mode_set,
+  rtems_mode  mask,
+  rtems_mode *out_mode_set,
+  rtems_mode *changed
+);
+
+#include <rtems/modes.inl>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/include/rtems/rtems/mp.h
===================================================================
--- c/src/exec/rtems/include/rtems/rtems/mp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems/rtems/mp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,67 @@
+/*  mp.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Multiprocessing Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_MP_h
+#define __RTEMS_MP_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ *
+ *  _Multiprocessing_Manager_initialization
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the initialization necessary for this manager.
+ */
+
+void _Multiprocessing_Manager_initialization ( void );
+
+/*
+ *
+ *  rtems_multiprocessing_announce
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the MULTIPROCESSING_ANNOUNCE directive.
+ *  It is invoked by the MPCI layer to indicate that an MPCI packet
+ *  has been received.
+ */
+
+void rtems_multiprocessing_announce ( void );
+
+/*
+ *
+ *  _Multiprocessing_Receive_server
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is a server thread which processes remote requests
+ *  from other nodes.
+ */
+
+Thread _Multiprocessing_Receive_server (
+  Thread_Argument ignored
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/*  end of include file */
Index: c/src/exec/rtems/include/rtems/rtems/msgmp.h
===================================================================
--- c/src/exec/rtems/include/rtems/rtems/msgmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems/rtems/msgmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,175 @@
+/*  msgmp.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Multiprocessing Support in the Message Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_MESSAGE_QUEUE_MP_h
+#define __RTEMS_MESSAGE_QUEUE_MP_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/message.h>
+#include <rtems/mppkt.h>
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/thread.h>
+#include <rtems/watchdog.h>
+
+/*
+ *  The following enumerated type defines the list of
+ *  remote message queue operations.
+ */
+
+typedef enum {
+  MESSAGE_QUEUE_MP_ANNOUNCE_CREATE     =  0,
+  MESSAGE_QUEUE_MP_ANNOUNCE_DELETE     =  1,
+  MESSAGE_QUEUE_MP_EXTRACT_PROXY       =  2,
+  MESSAGE_QUEUE_MP_RECEIVE_REQUEST     =  3,
+  MESSAGE_QUEUE_MP_RECEIVE_RESPONSE    =  4,
+  MESSAGE_QUEUE_MP_SEND_REQUEST        =  5,
+  MESSAGE_QUEUE_MP_SEND_RESPONSE       =  6,
+  MESSAGE_QUEUE_MP_URGENT_REQUEST      =  7,
+  MESSAGE_QUEUE_MP_URGENT_RESPONSE     =  8,
+  MESSAGE_QUEUE_MP_BROADCAST_REQUEST   =  9,
+  MESSAGE_QUEUE_MP_BROADCAST_RESPONSE  = 10,
+  MESSAGE_QUEUE_MP_FLUSH_REQUEST       = 11,
+  MESSAGE_QUEUE_MP_FLUSH_RESPONSE      = 12
+}   Message_queue_MP_Remote_operations;
+
+/*
+ *  The following data structure defines the packet used to perform
+ *  remote message queue operations.
+ */
+
+typedef struct {
+  rtems_packet_prefix                   Prefix;
+  Message_queue_MP_Remote_operations operation;
+  Objects_Name                       name;
+  rtems_option                    option_set;
+  Objects_Id                         proxy_id;
+  unsigned32                         count;
+  unsigned32                         pad0;
+  unsigned32                         pad1;
+  unsigned32                         pad2;
+  Message_queue_Buffer               Buffer;
+}   Message_queue_MP_Packet;
+
+/*
+ *  _Message_queue_MP_Send_process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  process operation can be performed on another node.
+ */
+
+void _Message_queue_MP_Send_process_packet (
+  Message_queue_MP_Remote_operations operation,
+  Objects_Id                         message_queue_id,
+  Objects_Name                       name,
+  Objects_Id                         proxy_id
+);
+
+/*
+ *  _Message_queue_MP_Send_request_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive operation can be initiated on another node.
+ */
+
+rtems_status_code _Message_queue_MP_Send_request_packet (
+  Message_queue_MP_Remote_operations  operation,
+  Objects_Id                          message_queue_id,
+  Message_queue_Buffer               *buffer,
+  rtems_option                     option_set,
+  rtems_interval                   timeout
+);
+
+/*
+ *  _Message_queue_MP_Send_response_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive can be performed on another node.
+ */
+
+void _Message_queue_MP_Send_response_packet (
+  Message_queue_MP_Remote_operations  operation,
+  Objects_Id                          message_queue_id,
+  Thread_Control                     *the_thread
+);
+
+/*
+ *
+ *  _Message_queue_MP_Process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the actions specific to this package for
+ *  the request from another node.
+ */
+
+void _Message_queue_MP_Process_packet (
+  rtems_packet_prefix *the_packet_prefix
+);
+
+/*
+ *  _Message_queue_MP_Send_object_was_deleted
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked indirectly by the thread queue
+ *  when a proxy has been removed from the thread queue and
+ *  the remote node must be informed of this.
+ */
+
+void _Message_queue_MP_Send_object_was_deleted (
+  Thread_Control *the_proxy
+);
+
+/*
+ *  _Message_queue_MP_Send_extract_proxy
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked when a task is deleted and it
+ *  has a proxy which must be removed from a thread queue and
+ *  the remote node must be informed of this.
+ */
+
+void _Message_queue_MP_Send_extract_proxy (
+  Thread_Control *the_thread
+);
+
+/*
+ *  _Message_queue_MP_Get_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This function is used to obtain a message queue mp packet.
+ */
+
+Message_queue_MP_Packet *_Message_queue_MP_Get_packet ( void );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of file */
Index: c/src/exec/rtems/include/rtems/rtems/options.h
===================================================================
--- c/src/exec/rtems/include/rtems/rtems/options.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems/rtems/options.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,79 @@
+/*  options.h
+ *
+ *  This include file contains information which defines the
+ *  options available on many directives.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_OPTIONS_h
+#define __RTEMS_OPTIONS_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ *  The following type defines the control block used to manage
+ *  option sets.
+ */
+
+typedef unsigned32 rtems_option;
+
+/*
+ *  The following constants define the individual options which may
+ *  be used to compose an option set.
+ */
+
+#define RTEMS_DEFAULT_OPTIONS   0x00000000
+
+#define RTEMS_WAIT      0x00000000        /* wait on resource */
+#define RTEMS_NO_WAIT   0x00000001        /* do not wait on resource */
+
+#define RTEMS_EVENT_ALL 0x00000000        /* wait for all events */
+#define RTEMS_EVENT_ANY 0x00000002        /* wait on any event */
+
+/*
+ *  _Options_Is_no_wait
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the RTEMS_NO_WAIT option is enabled in
+ *  option_set, and FALSE otherwise.
+ *
+ */
+
+STATIC INLINE boolean _Options_Is_no_wait (
+  rtems_option option_set
+);
+
+/*
+ *  _Options_Is_any
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the RTEMS_EVENT_ANY option is enabled in
+ *  OPTION_SET, and FALSE otherwise.
+ *
+ */
+
+STATIC INLINE boolean _Options_Is_any (
+  rtems_option option_set
+);
+
+#include <rtems/options.inl>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/include/rtems/rtems/part.h
===================================================================
--- c/src/exec/rtems/include/rtems/rtems/part.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems/rtems/part.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,290 @@
+/*  partition.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Partition Manager.  This manager provides facilities to
+ *  dynamically allocate memory in fixed-sized units which are returned
+ *  as buffers.
+ *
+ *  Directives provided are:
+ *
+ *     + create a partition
+ *     + get an ID of a partition
+ *     + delete a partition
+ *     + get a buffer from a partition
+ *     + return a buffer to a partition
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_PARTITION_h
+#define __RTEMS_PARTITION_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/address.h>
+#include <rtems/attr.h>
+#include <rtems/object.h>
+
+/*
+ *  The following defines the control block used to manage each partition.
+ */
+
+typedef struct {
+  Objects_Control     Object;
+  void               *starting_address;      /* physical address */
+  unsigned32          length;                /* in bytes */
+  unsigned32          buffer_size;           /* in bytes */
+  rtems_attribute  attribute_set;         /* attributes */
+  unsigned32          number_of_used_blocks; /* or allocated buffers */
+  Chain_Control       Memory;                /* buffer chain */
+}   Partition_Control;
+
+/*
+ *  The following defines the information control block used to
+ *  manage this class of objects.
+ */
+
+EXTERN Objects_Information _Partition_Information;
+
+/*
+ *  _Partition_Manager_initialization
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the initialization necessary for this manager.
+ */
+
+void _Partition_Manager_initialization(
+  unsigned32 maximum_partitions
+);
+
+/*
+ *  rtems_partition_create
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_partition_create directive.  The
+ *  partition will have the name name.  The memory area managed by
+ *  the partition is of length bytes and starts at starting_address.
+ *  The memory area will be divided into as many buffers of
+ *  buffer_size bytes as possible.   The attribute_set determines if
+ *  the partition is global or local.  It returns the id of the
+ *  created partition in ID.
+ */
+
+rtems_status_code rtems_partition_create(
+  Objects_Name        name,
+  void               *starting_address,
+  unsigned32          length,
+  unsigned32          buffer_size,
+  rtems_attribute  attribute_set,
+  Objects_Id         *id
+);
+
+/*
+ *  rtems_partition_ident
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_partition_ident directive.
+ *  This directive returns the partition ID associated with name.
+ *  If more than one partition is named name, then the partition
+ *  to which the ID belongs is arbitrary.  node indicates the
+ *  extent of the search for the ID of the partition named name.
+ *  The search can be limited to a particular node or allowed to
+ *  encompass all nodes.
+ */
+
+rtems_status_code rtems_partition_ident(
+  Objects_Name  name,
+  unsigned32    node,
+  Objects_Id   *id
+);
+
+/*
+ *  rtems_partition_delete
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_partition_delete directive.  The
+ *  partition indicated by ID is deleted.
+ */
+
+rtems_status_code rtems_partition_delete(
+  Objects_Id id
+);
+
+/*
+ *  rtems_partition_get_buffer
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_partition_get_buffer directive.  It
+ *  attempts to allocate a buffer from the partition associated with ID.
+ *  If a buffer is allocated, its address is returned in buffer.
+ */
+
+rtems_status_code rtems_partition_get_buffer(
+  Objects_Id  id,
+  void       **buffer
+);
+
+/*
+ *  rtems_partition_return_buffer
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_partition_return_buffer directive.  It
+ *  frees the buffer to the partition associated with ID.  The buffer must
+ *  have been previously allocated from the same partition.
+ */
+
+rtems_status_code rtems_partition_return_buffer(
+  Objects_Id  id,
+  void       *buffer
+);
+
+/*
+ *  _Partition_Allocate_buffer
+ *
+ *  DESCRIPTION:
+ *
+ *  This function attempts to allocate a buffer from the_partition.
+ *  If successful, it returns the address of the allocated buffer.
+ *  Otherwise, it returns NULL.
+ */
+
+STATIC INLINE void *_Partition_Allocate_buffer (
+   Partition_Control *the_partition
+);
+
+/*
+ *  _Partition_Free_buffer
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine frees the_buffer to the_partition.
+ */
+
+STATIC INLINE void _Partition_Free_buffer (
+  Partition_Control *the_partition,
+  Chain_Node        *the_buffer
+);
+
+/*
+ *  _Partition_Is_buffer_on_boundary
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the_buffer is on a valid buffer
+ *  boundary for the_partition, and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Partition_Is_buffer_on_boundary (
+  void              *the_buffer,
+  Partition_Control *the_partition
+);
+
+/*
+ *  _Partition_Is_buffer_valid
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the_buffer is a valid buffer from
+ *  the_partition, otherwise FALSE is returned.
+ */
+
+STATIC INLINE boolean _Partition_Is_buffer_valid (
+  Chain_Node        *the_buffer,
+  Partition_Control *the_partition
+);
+
+/*
+ *  _Partition_Is_buffer_size_aligned
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the use of the specified buffer_size
+ *  will result in the allocation of buffers whose first byte is
+ *  properly aligned, and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Partition_Is_buffer_size_aligned (
+  unsigned32 buffer_size
+);
+
+/*
+ *  _Partition_Allocate
+ *
+ *  DESCRIPTION:
+ *
+ *  This function allocates a partition control block from
+ *  the inactive chain of free partition control blocks.
+ */
+
+STATIC INLINE Partition_Control *_Partition_Allocate ( void );
+
+/*
+ *  _Partition_Free
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine frees a partition control block to the
+ *  inactive chain of free partition control blocks.
+ */
+
+STATIC INLINE void _Partition_Free (
+  Partition_Control *the_partition
+);
+
+/*
+ *  _Partition_Get
+ *
+ *  DESCRIPTION:
+ *
+ *  This function maps partition IDs to partition control blocks.
+ *  If ID corresponds to a local partition, then it returns
+ *  the_partition control pointer which maps to ID and location
+ *  is set to OBJECTS_LOCAL.  If the partition ID is global and
+ *  resides on a remote node, then location is set to OBJECTS_REMOTE,
+ *  and the_partition is undefined.  Otherwise, location is set
+ *  to OBJECTS_ERROR and the_partition is undefined.
+ */
+
+STATIC INLINE Partition_Control *_Partition_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+);
+
+/*
+ *  _Partition_Is_null
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the_partition is NULL
+ *  and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Partition_Is_null (
+  Partition_Control *the_partition
+);
+
+#include <rtems/part.inl>
+#include <rtems/partmp.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/include/rtems/rtems/partmp.h
===================================================================
--- c/src/exec/rtems/include/rtems/rtems/partmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems/rtems/partmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,160 @@
+/*  partmp.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Multiprocessing Support in the Partition Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_PARTITION_MP_h
+#define __RTEMS_PARTITION_MP_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/mppkt.h>
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/part.h>
+#include <rtems/thread.h>
+
+/*
+ *  The following enumerated type defines the list of
+ *  remote partition operations.
+ */
+
+typedef enum {
+  PARTITION_MP_ANNOUNCE_CREATE        =  0,
+  PARTITION_MP_ANNOUNCE_DELETE        =  1,
+  PARTITION_MP_EXTRACT_PROXY          =  2,
+  PARTITION_MP_GET_BUFFER_REQUEST     =  3,
+  PARTITION_MP_GET_BUFFER_RESPONSE    =  4,
+  PARTITION_MP_RETURN_BUFFER_REQUEST  =  5,
+  PARTITION_MP_RETURN_BUFFER_RESPONSE =  6,
+}   Partition_MP_Remote_operations;
+
+/*
+ *  The following data structure defines the packet used to perform
+ *  remote partition operations.
+ */
+
+typedef struct {
+  rtems_packet_prefix                Prefix;
+  Partition_MP_Remote_operations  operation;
+  Objects_Name                    name;
+  void                           *buffer;
+  Objects_Id                      proxy_id;
+}   Partition_MP_Packet;
+
+/*
+ *  _Partition_MP_Send_process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  process operation can be performed on another node.
+ */
+
+void _Partition_MP_Send_process_packet (
+  Partition_MP_Remote_operations operation,
+  Objects_Id                     partition_id,
+  Objects_Name                   name,
+  Objects_Id                     proxy_id
+);
+
+/*
+ *  _Partition_MP_Send_request_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive operation can be initiated on another node.
+ */
+
+rtems_status_code _Partition_MP_Send_request_packet (
+  Partition_MP_Remote_operations  operation,
+  Objects_Id                      partition_id,
+  void                           *buffer
+);
+
+/*
+ *  _Partition_MP_Send_response_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive can be performed on another node.
+ */
+
+void _Partition_MP_Send_response_packet (
+  Partition_MP_Remote_operations  operation,
+  Objects_Id                      partition_id,
+  Thread_Control                 *the_thread
+);
+
+/*
+ *
+ *  _Partition_MP_Process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the actions specific to this package for
+ *  the request from another node.
+ */
+
+void _Partition_MP_Process_packet (
+  rtems_packet_prefix *the_packet_prefix
+);
+
+/*
+ *  _Partition_MP_Send_object_was_deleted
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked indirectly by the thread queue
+ *  when a proxy has been removed from the thread queue and
+ *  the remote node must be informed of this.
+ *
+ *  This routine is not needed by the Partition since a partition
+ *  cannot be deleted when buffers are in use.
+ */
+
+/*
+ *  _Partition_MP_Send_extract_proxy
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked when a task is deleted and it
+ *  has a proxy which must be removed from a thread queue and
+ *  the remote node must be informed of this.
+ */
+
+void _Partition_MP_Send_extract_proxy (
+  Thread_Control *the_thread
+);
+
+/*
+ *  _Partition_MP_Get_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This function is used to obtain a partition mp packet.
+ */
+
+Partition_MP_Packet *_Partition_MP_Get_packet ( void );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of file */
Index: c/src/exec/rtems/include/rtems/rtems/ratemon.h
===================================================================
--- c/src/exec/rtems/include/rtems/rtems/ratemon.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems/rtems/ratemon.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,285 @@
+/*  ratemon.h
+ *
+ *  This include file contains all the constants, structures, and
+ *  prototypes associated with the Rate Monotonic Manager.  This manager
+ *  provides facilities to implement tasks which execute in a periodic fashion.
+ *
+ *  Directives provided are:
+ *
+ *     + create a rate monotonic timer
+ *     + cancel a period
+ *     + delete a rate monotonic timer
+ *     + conclude current and start the next period
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_RATE_MONOTONIC_h
+#define __RTEMS_RATE_MONOTONIC_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/object.h>
+#include <rtems/thread.h>
+#include <rtems/watchdog.h>
+
+/*
+ *  The following enumerated type defines the states in which a
+ *  period may be.
+ */
+
+typedef enum {
+  RATE_MONOTONIC_INACTIVE,  /* off chain, never initialized */
+  RATE_MONOTONIC_ACTIVE,    /* on chain, running continuously */
+  RATE_MONOTONIC_EXPIRED    /* off chain, will be reset by next rm_period */
+}   Rate_Monotonic_Period_states;
+
+/*
+ *  The following constant is the interval passed to the rate_monontonic_period
+ *  directive to obtain status information.
+ */
+
+#define RTEMS_PERIOD_STATUS       RTEMS_NO_TIMEOUT
+
+/*
+ *  The following structure defines the control block used to manage
+ *  each period.
+ */
+
+typedef struct {
+  Objects_Control               Object;
+  Watchdog_Control              Timer;
+  Rate_Monotonic_Period_states  state;
+  Thread_Control               *owner;
+}   Rate_monotonic_Control;
+
+EXTERN Objects_Information _Rate_monotonic_Information;
+
+/*
+ *  _Rate_monotonic_Manager_initialization
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the initialization necessary for this manager.
+ */
+
+void _Rate_monotonic_Manager_initialization(
+  unsigned32 maximum_periods
+);
+
+/*
+ *  rtems_rate_monotonic_create
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rate_monotonic_create directive.  The
+ *  period will have the name name.  It returns the id of the
+ *  created period in ID.
+ */
+
+rtems_status_code rtems_rate_monotonic_create(
+  Objects_Name  name,
+  Objects_Id   *id
+);
+
+/*
+ *  rtems_rate_monotonic_ident
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_rate_monotonic_ident directive.
+ *  This directive returns the period ID associated with name.
+ *  If more than one period is named name, then the period
+ *  to which the ID belongs is arbitrary.
+ */
+
+rtems_status_code rtems_rate_monotonic_ident(
+  Objects_Name  name,
+  Objects_Id   *id
+);
+
+/*
+ *  rtems_rate_monotonic_cancel
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_rate_monotonic_cancel directive.  This
+ *  directive stops the period associated with ID from continuing to
+ *  run.
+ */
+
+rtems_status_code rtems_rate_monotonic_cancel(
+  Objects_Id id
+);
+
+/*
+ *  rtems_rate_monotonic_delete
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_rate_monotonic_delete directive.  The
+ *  period indicated by ID is deleted.
+ */
+
+rtems_status_code rtems_rate_monotonic_delete(
+  Objects_Id id
+);
+
+/*
+ *  rtems_rate_monotonic_period
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_rate_monotonic_period directive.  When
+ *  length is non-zero, this directive initiates the period associated with
+ *  ID from continuing for a period of length.  If length is zero, then
+ *  result is set to indicate the current state of the period.
+ */
+
+rtems_status_code rtems_rate_monotonic_period(
+  Objects_Id        id,
+  rtems_interval length
+);
+
+/*
+ *  _Rate_monotonic_Allocate
+ *
+ *  DESCRIPTION:
+ *
+ *  This function allocates a period control block from
+ *  the inactive chain of free period control blocks.
+ */
+
+STATIC INLINE Rate_monotonic_Control *_Rate_monotonic_Allocate( void );
+
+/*
+ *  _Rate_monotonic_Free
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine allocates a period control block from
+ *  the inactive chain of free period control blocks.
+ */
+
+STATIC INLINE void _Rate_monotonic_Free (
+  Rate_monotonic_Control *the_period
+);
+
+/*
+ *  _Rate_monotonic_Get
+ *
+ *  DESCRIPTION:
+ *
+ *  This function maps period IDs to period control blocks.
+ *  If ID corresponds to a local period, then it returns
+ *  the_period control pointer which maps to ID and location
+ *  is set to OBJECTS_LOCAL.  Otherwise, location is set
+ *  to OBJECTS_ERROR and the_period is undefined.
+ */
+
+STATIC INLINE Rate_monotonic_Control *_Rate_monotonic_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+);
+
+/*
+ *  _Rate_monotonic_Set_state
+ *
+ *  DESCRIPTION:
+ *
+ *  This function blocks the calling task so that it is waiting for
+ *  a period to expire.  It returns TRUE if the task was successfully
+ *  blocked, and FALSE otherwise.
+ */
+
+boolean _Rate_monotonic_Set_state(
+  Rate_monotonic_Control *the_period
+);
+
+/*
+ *  _Rate_monotonic_Timeout
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked when the period represented
+ *  by ID expires.  If the task which owns this period is blocked
+ *  waiting for the period to expire, then it is readied and the
+ *  period is restarted.  If the owning task is not waiting for the
+ *  period to expire, then the period is placed in the EXPIRED
+ *  state and not restarted.
+ */
+
+void _Rate_monotonic_Timeout (
+  Objects_Id  id,
+  void       *ignored
+);
+
+/*
+ *  _Rate_monotonic_Is_active
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the_period is in the ACTIVE state,
+ *  and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Rate_monotonic_Is_active (
+  Rate_monotonic_Control *the_period
+);
+
+/*
+ *  _Rate_monotonic_Is_inactive
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the_period is in the ACTIVE state,
+ *  and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Rate_monotonic_Is_inactive (
+  Rate_monotonic_Control *the_period
+);
+
+/*
+ *  _Rate_monotonic_Is_expired
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the_period is in the EXPIRED state,
+ *  and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Rate_monotonic_Is_expired (
+  Rate_monotonic_Control *the_period
+);
+
+/*
+ *  _Rate_monotonic_Is_null
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the_period is NULL and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Rate_monotonic_Is_null (
+  Rate_monotonic_Control *the_period
+);
+
+#include <rtems/ratemon.inl>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/include/rtems/rtems/region.h
===================================================================
--- c/src/exec/rtems/include/rtems/rtems/region.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems/rtems/region.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,311 @@
+/*  region.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Region Manager.  This manager provides facilities to dynamically
+ *  allocate memory in variable sized units which are returned as segments.
+ *
+ *  Directives provided are:
+ *
+ *     + create a region
+ *     + get an ID of a region
+ *     + delete a region
+ *     + get a segment from a region
+ *     + return a segment to a region
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_REGION_h
+#define __RTEMS_REGION_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/object.h>
+#include <rtems/threadq.h>
+#include <rtems/heap.h>
+#include <rtems/debug.h>
+
+/*
+ *  The following records define the control block used to manage
+ *  each region.
+ */
+
+typedef struct {
+  Objects_Control       Object;
+  Thread_queue_Control  Wait_queue;            /* waiting threads        */
+  void                 *starting_address;      /* physical start addr    */
+  unsigned32            length;                /* physical length(bytes) */
+  unsigned32            page_size;             /* in bytes               */
+  unsigned32            maximum_segment_size;  /* in bytes               */
+  rtems_attribute       attribute_set;
+  unsigned32            number_of_used_blocks; /* blocks allocated       */
+  Heap_Control          Memory;
+}  Region_Control;
+
+/*
+ *  The following defines the information control block used to
+ *  manage this class of objects.
+ */
+
+EXTERN Objects_Information _Region_Information;
+
+/*
+ *  _Region_Manager_initialization
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the initialization necessary for this manager.
+ */
+
+void _Region_Manager_initialization(
+  unsigned32 maximum_regions
+);
+
+/*
+ *  rtems_region_create
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_region_create directive.  The
+ *  region will have the name name.  The memory area managed by
+ *  the region is of length bytes and starts at starting_address.
+ *  The memory area will be divided into as many allocatable units of
+ *  page_size bytes as possible.   The attribute_set determines which
+ *  thread queue discipline is used by the region.  It returns the
+ *  id of the created region in ID.
+ */
+
+rtems_status_code rtems_region_create(
+  Objects_Name        name,
+  void               *starting_address,
+  unsigned32          length,
+  unsigned32          page_size,
+  rtems_attribute  attribute_set,
+  Objects_Id         *id
+);
+
+/*
+ *  rtems_region_extend
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_region_extend directive.  The
+ *  region will have the name name.  The memory area managed by
+ *  the region will be attempted to be grown by length bytes using
+ *  the memory starting at starting_address.
+ */
+
+rtems_status_code rtems_region_extend(
+  Objects_Id          id,
+  void               *starting_address,
+  unsigned32          length
+);
+
+/*
+ *  rtems_region_ident
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_region_ident directive.
+ *  This directive returns the region ID associated with name.
+ *  If more than one region is named name, then the region
+ *  to which the ID belongs is arbitrary.
+ */
+
+rtems_status_code rtems_region_ident(
+  Objects_Name  name,
+  Objects_Id   *id
+);
+
+/*
+ *  rtems_region_delete
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_region_delete directive.  The
+ *  region indicated by ID is deleted.
+ */
+
+rtems_status_code rtems_region_delete(
+  Objects_Id id
+);
+
+/*
+ *  rtems_region_get_segment
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_region_get_segment directive.  It
+ *  attempts to allocate a segment from the region associated with ID.
+ *  If a segment of the requested size can be allocated, its address
+ *  is returned in segment.  If no segment is available, then the task
+ *  may return immediately or block waiting for a segment with an optional
+ *  timeout of timeout clock ticks.  Whether the task blocks or returns
+ *  immediately is based on the no_wait option in the option_set.
+ */
+
+rtems_status_code rtems_region_get_segment(
+  Objects_Id         id,
+  unsigned32         size,
+  rtems_option    option_set,
+  rtems_interval  timeout,
+  void              **segment
+);
+
+/*
+ *  rtems_region_get_segment_size
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_region_get_segment_size directive.  It
+ *  returns the size in bytes of the specified user memory area.
+ */
+
+rtems_status_code rtems_region_get_segment_size(
+  Objects_Id         id,
+  void              *segment,
+  unsigned32        *size
+);
+
+/*
+ *  rtems_region_return_segment
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_region_return_segment directive.  It
+ *  frees the segment to the region associated with ID.  The segment must
+ *  have been previously allocated from the same region.  If freeing the
+ *  segment results in enough memory being available to satisfy the
+ *  rtems_region_get_segment of the first blocked task, then that task and as
+ *  many subsequent tasks as possible will be unblocked with their requests
+ *  satisfied.
+ */
+
+rtems_status_code rtems_region_return_segment(
+  Objects_Id  id,
+  void       *segment
+);
+
+/*
+ *  _Region_Allocate
+ *
+ *  DESCRIPTION:
+ *
+ *  This function allocates a region control block from
+ *  the inactive chain of free region control blocks.
+ */
+
+STATIC INLINE Region_Control *_Region_Allocate( void );
+
+/*
+ *  _Region_Free
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine frees a region control block to the
+ *  inactive chain of free region control blocks.
+ */
+
+STATIC INLINE void _Region_Free (
+  Region_Control *the_region
+);
+
+/*
+ *  _Region_Get
+ *
+ *  DESCRIPTION:
+ *
+ *  This function maps region IDs to region control blocks.
+ *  If ID corresponds to a local region, then it returns
+ *  the_region control pointer which maps to ID and location
+ *  is set to OBJECTS_LOCAL.  Otherwise, location is set
+ *  to OBJECTS_ERROR and the_region is undefined.
+ */
+
+STATIC INLINE Region_Control *_Region_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+);
+
+/*
+ *  _Region_Allocate_segment
+ *
+ *  DESCRIPTION:
+ *
+ *  This function attempts to allocate a segment from the_region.
+ *  If successful, it returns the address of the allocated segment.
+ *  Otherwise, it returns NULL.
+ */
+
+STATIC INLINE void *_Region_Allocate_segment (
+  Region_Control *the_region,
+  unsigned32      size
+);
+
+/*
+ *  _Region_Free_segment
+ *
+ *  DESCRIPTION:
+ *
+ *  This function frees the_segment to the_region.
+ */
+
+STATIC INLINE boolean _Region_Free_segment (
+  Region_Control *the_region,
+  void           *the_segment
+);
+
+/*
+ *  _Region_Is_null
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the_region is NULL and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Region_Is_null (
+  Region_Control *the_region
+);
+
+#include <rtems/region.inl>
+#include <rtems/regionmp.h>
+
+/*
+ *  _Region_Debug_Walk
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked to verify the integrity of a heap associated
+ *  with the_region.
+ */
+
+#ifdef RTEMS_DEBUG
+
+#define _Region_Debug_Walk( _the_region, _source ) \
+  do { \
+    if ( _Debug_Is_enabled( RTEMS_DEBUG_REGION ) ) \
+      _Heap_Walk( &(_the_region)->Memory, _source, FALSE ); \
+  } while ( 0 )
+
+#else
+
+#define _Region_Debug_Walk( _the_region, _source )
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/include/rtems/rtems/regionmp.h
===================================================================
--- c/src/exec/rtems/include/rtems/rtems/regionmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems/rtems/regionmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,165 @@
+/*  regionmp.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Multiprocessing Support in the Region Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_REGION_MP_h
+#define __RTEMS_REGION_MP_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/mppkt.h>
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/region.h>
+#include <rtems/thread.h>
+
+/*
+ *  The following enumerated type defines the list of
+ *  remote region operations.
+ */
+
+typedef enum {
+  REGION_MP_ANNOUNCE_CREATE         =  0,
+  REGION_MP_ANNOUNCE_DELETE         =  1,
+  REGION_MP_EXTRACT_PROXY           =  2,
+  REGION_MP_GET_SEGMENT_REQUEST     =  3,
+  REGION_MP_GET_SEGMENT_RESPONSE    =  4,
+  REGION_MP_RETURN_SEGMENT_REQUEST  =  5,
+  REGION_MP_RETURN_SEGMENT_RESPONSE =  6,
+}   Region_MP_Remote_operations;
+
+/*
+ *  The following data structure defines the packet used to perform
+ *  remote region operations.
+ */
+
+typedef struct {
+  rtems_packet_prefix             Prefix;
+  Region_MP_Remote_operations  operation;
+  Objects_Name                 name;
+  rtems_option              option_set;
+  unsigned32                   size;
+  Objects_Id                   proxy_id;
+  void                        *segment;
+}   Region_MP_Packet;
+
+/*
+ *  _Region_MP_Send_process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  process operation can be performed on another node.
+ */
+
+void _Region_MP_Send_process_packet (
+  Region_MP_Remote_operations operation,
+  Objects_Id                  region_id,
+  Objects_Name                name,
+  Objects_Id                  proxy_id
+);
+
+/*
+ *  _Region_MP_Send_request_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive operation can be initiated on another node.
+ */
+
+rtems_status_code _Region_MP_Send_request_packet (
+  Region_MP_Remote_operations  operation,
+  Objects_Id                   region_id,
+  void                        *segment,
+  unsigned32                   size,
+  rtems_option              option_set,
+  rtems_interval            timeout
+);
+
+/*
+ *  _Region_MP_Send_response_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive can be performed on another node.
+ */
+
+void _Region_MP_Send_response_packet (
+  Region_MP_Remote_operations  operation,
+  Objects_Id                   region_id,
+  Thread_Control              *the_thread
+);
+
+/*
+ *
+ *  _Region_MP_Process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the actions specific to this package for
+ *  the request from another node.
+ */
+
+void _Region_MP_Process_packet (
+  rtems_packet_prefix *the_packet_prefix
+);
+
+/*
+ *  _Region_MP_Send_object_was_deleted
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked indirectly by the thread queue
+ *  when a proxy has been removed from the thread queue and
+ *  the remote node must be informed of this.
+ *
+ *  This routine is not needed by the Region since a region
+ *  cannot be deleted when segments are in use.
+ */
+
+/*
+ *  _Region_MP_Send_extract_proxy
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked when a task is deleted and it
+ *  has a proxy which must be removed from a thread queue and
+ *  the remote node must be informed of this.
+ */
+
+void _Region_MP_Send_extract_proxy (
+  Thread_Control *the_thread
+);
+
+/*
+ *  _Region_MP_Get_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This function is used to obtain a region mp packet.
+ */
+
+Region_MP_Packet *_Region_MP_Get_packet ( void );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of file */
Index: c/src/exec/rtems/include/rtems/rtems/sem.h
===================================================================
--- c/src/exec/rtems/include/rtems/rtems/sem.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems/rtems/sem.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,238 @@
+/*  semaphore.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Semaphore Manager.  This manager utilizes standard Dijkstra
+ *  counting semaphores to provide synchronization and mutual exclusion
+ *  capabilities.
+ *
+ *  Directives provided are:
+ *
+ *     + create a semaphore
+ *     + get an ID of a semaphore
+ *     + delete a semaphore
+ *     + acquire a semaphore
+ *     + release a semaphore
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_SEMAPHORE_h
+#define __RTEMS_SEMAPHORE_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/attr.h>
+#include <rtems/object.h>
+#include <rtems/threadq.h>
+
+/*
+ *  The following defines the control block used to manage each semaphore.
+ */
+
+typedef struct {
+  Objects_Control       Object;
+  Thread_queue_Control  Wait_queue;
+  rtems_attribute    attribute_set;
+  unsigned32            count;
+  unsigned32            nest_count;
+  Thread_Control       *holder;
+  Objects_Id            holder_id;
+}   Semaphore_Control;
+
+/*
+ *  The following defines the information control block used to manage
+ *  this class of objects.
+ */
+
+EXTERN Objects_Information  _Semaphore_Information;
+
+/*
+ *  _Semaphore_Manager_initialization
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the initialization necessary for this manager.
+ */
+
+void _Semaphore_Manager_initialization(
+  unsigned32 maximum_semaphores
+);
+
+/*
+ *  rtems_semaphore_create
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_semaphore_create directive.  The
+ *  semaphore will have the name name.  The starting count for
+ *  the semaphore is count.  The attribute_set determines if
+ *  the semaphore is global or local and the thread queue
+ *  discipline.  It returns the id of the created semaphore in ID.
+ */
+
+rtems_status_code rtems_semaphore_create(
+  Objects_Name        name,
+  unsigned32          count,
+  rtems_attribute  attribute_set,
+  Objects_Id         *id
+);
+
+/*
+ *  rtems_semaphore_ident
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_semaphore_ident directive.
+ *  This directive returns the semaphore ID associated with name.
+ *  If more than one semaphore is named name, then the semaphore
+ *  to which the ID belongs is arbitrary.  node indicates the
+ *  extent of the search for the ID of the semaphore named name.
+ *  The search can be limited to a particular node or allowed to
+ *  encompass all nodes.
+ */
+
+rtems_status_code rtems_semaphore_ident(
+  Objects_Name  name,
+  unsigned32    node,
+  Objects_Id   *id
+);
+
+/*
+ *  rtems_semaphore_delete
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_semaphore_delete directive.  The
+ *  semaphore indicated by ID is deleted.
+ */
+
+rtems_status_code rtems_semaphore_delete(
+  Objects_Id id
+);
+
+/*
+ *  rtems_semaphore_obtain
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_semaphore_obtain directive.  It
+ *  attempts to obtain a unit from the semaphore associated with ID.
+ *  If a unit can be allocated, the calling task will return immediately.
+ *  If no unit is available, then the task may return immediately or
+ *  block waiting for a unit with an optional timeout of timeout
+ *  clock ticks.  Whether the task blocks or returns immediately
+ *  is based on the RTEMS_NO_WAIT option in the option_set.
+ */
+
+rtems_status_code rtems_semaphore_obtain(
+  Objects_Id        id,
+  unsigned32        option_set,
+  rtems_interval timeout
+);
+
+/*
+ *  rtems_semaphore_release
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_semaphore_release directive.  It
+ *  frees a unit to the semaphore associated with ID.  If a task was
+ *  blocked waiting for a unit from this semaphore, then that task will
+ *  be readied and the unit given to that task.  Otherwise, the unit
+ *  will be returned to the semaphore.
+ */
+
+rtems_status_code rtems_semaphore_release(
+  Objects_Id id
+);
+
+/*
+ *  _Semaphore_Seize
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine attempts to receive a unit from the_semaphore.
+ *  If a unit is available or if the RTEMS_NO_WAIT option is enabled in
+ *  option_set, then the routine returns.  Otherwise, the calling task
+ *  is blocked until a unit becomes available.
+ */
+
+boolean _Semaphore_Seize(
+  Semaphore_Control *the_semaphore,
+  unsigned32         option_set
+);
+
+/*
+ *  _Semaphore_Allocate
+ *
+ *  DESCRIPTION:
+ *
+ *  This function allocates a semaphore control block from
+ *  the inactive chain of free semaphore control blocks.
+ */
+
+STATIC INLINE Semaphore_Control *_Semaphore_Allocate( void );
+
+/*
+ *  _Semaphore_Free
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine frees a semaphore control block to the
+ *  inactive chain of free semaphore control blocks.
+ */
+
+STATIC INLINE void _Semaphore_Free (
+  Semaphore_Control *the_semaphore
+);
+
+/*
+ *  _Semaphore_Get
+ *
+ *  DESCRIPTION:
+ *
+ *  This function maps semaphore IDs to semaphore control blocks.
+ *  If ID corresponds to a local semaphore, then it returns
+ *  the_semaphore control pointer which maps to ID and location
+ *  is set to OBJECTS_LOCAL.  if the semaphore ID is global and
+ *  resides on a remote node, then location is set to OBJECTS_REMOTE,
+ *  and the_semaphore is undefined.  Otherwise, location is set
+ *  to OBJECTS_ERROR and the_semaphore is undefined.
+ */
+
+STATIC INLINE Semaphore_Control *_Semaphore_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+);
+
+/*
+ *  _Semaphore_Is_null
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the_semaphore is NULL and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Semaphore_Is_null (
+  Semaphore_Control *the_semaphore
+);
+
+#include <rtems/sem.inl>
+#include <rtems/semmp.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/*  end of include file */
Index: c/src/exec/rtems/include/rtems/rtems/semmp.h
===================================================================
--- c/src/exec/rtems/include/rtems/rtems/semmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems/rtems/semmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,163 @@
+/*  semmp.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Multiprocessing Support in the Semaphore Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_SEMAPHORE_MP_h
+#define __RTEMS_SEMAPHORE_MP_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/mppkt.h>
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/sem.h>
+#include <rtems/thread.h>
+#include <rtems/watchdog.h>
+
+/*
+ *  The following enumerated type defines the list of
+ *  remote semaphore operations.
+ */
+
+typedef enum {
+  SEMAPHORE_MP_ANNOUNCE_CREATE  =  0,
+  SEMAPHORE_MP_ANNOUNCE_DELETE  =  1,
+  SEMAPHORE_MP_EXTRACT_PROXY    =  2,
+  SEMAPHORE_MP_OBTAIN_REQUEST   =  3,
+  SEMAPHORE_MP_OBTAIN_RESPONSE  =  4,
+  SEMAPHORE_MP_RELEASE_REQUEST  =  5,
+  SEMAPHORE_MP_RELEASE_RESPONSE =  6,
+}   Semaphore_MP_Remote_operations;
+
+/*
+ *  The following data structure defines the packet used to perform
+ *  remote semaphore operations.
+ */
+
+typedef struct {
+  rtems_packet_prefix               Prefix;
+  Semaphore_MP_Remote_operations operation;
+  Objects_Name                   name;
+  rtems_option                option_set;
+  Objects_Id                     proxy_id;
+}   Semaphore_MP_Packet;
+
+/*
+ *  _Semaphore_MP_Send_process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  process operation can be performed on another node.
+ */
+
+void _Semaphore_MP_Send_process_packet (
+  Semaphore_MP_Remote_operations operation,
+  Objects_Id                     semaphore_id,
+  Objects_Name                   name,
+  Objects_Id                     proxy_id
+);
+
+/*
+ *  _Semaphore_MP_Send_request_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive operation can be initiated on another node.
+ */
+
+rtems_status_code _Semaphore_MP_Send_request_packet (
+  Semaphore_MP_Remote_operations operation,
+  Objects_Id                     semaphore_id,
+  rtems_option                option_set,
+  rtems_interval              timeout
+);
+
+/*
+ *  _Semaphore_MP_Send_response_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive can be performed on another node.
+ */
+
+void _Semaphore_MP_Send_response_packet (
+  Semaphore_MP_Remote_operations  operation,
+  Objects_Id                      semaphore_id,
+  Thread_Control                 *the_thread
+);
+
+/*
+ *
+ *  _Semaphore_MP_Process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the actions specific to this package for
+ *  the request from another node.
+ */
+
+void _Semaphore_MP_Process_packet (
+  rtems_packet_prefix *the_packet_prefix
+);
+
+/*
+ *  _Semaphore_MP_Send_object_was_deleted
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked indirectly by the thread queue
+ *  when a proxy has been removed from the thread queue and
+ *  the remote node must be informed of this.
+ */
+
+void _Semaphore_MP_Send_object_was_deleted (
+  Thread_Control *the_proxy
+);
+
+/*
+ *  _Semaphore_MP_Send_extract_proxy
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked when a task is deleted and it
+ *  has a proxy which must be removed from a thread queue and
+ *  the remote node must be informed of this.
+ */
+
+void _Semaphore_MP_Send_extract_proxy (
+  Thread_Control *the_thread
+);
+
+/*
+ *  _Semaphore_MP_Get_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This function is used to obtain a semaphore mp packet.
+ */
+
+Semaphore_MP_Packet *_Semaphore_MP_Get_packet ( void );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of file */
Index: c/src/exec/rtems/include/rtems/rtems/signal.h
===================================================================
--- c/src/exec/rtems/include/rtems/rtems/signal.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems/rtems/signal.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,72 @@
+/*  signal.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Signal Manager.   This manager provides capabilities required
+ *  for asynchronous communication between tasks via signal sets.
+ *
+ *  Directives provided are:
+ *
+ *     + establish an asynchronous signal routine
+ *     + send a signal set to a task
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_SIGNAL_h
+#define __RTEMS_SIGNAL_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/asr.h>
+#include <rtems/modes.h>
+#include <rtems/object.h>
+#include <rtems/status.h>
+
+/*
+ *  rtems_signal_catch
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_signal_catch directive.  This directive
+ *  is used to establish asr_handler as the Asynchronous Signal Routine
+ *  (RTEMS_ASR) for the calling task.  The asr_handler will execute with a
+ *  mode of mode_set.
+ */
+
+rtems_status_code rtems_signal_catch(
+  rtems_asr_entry   asr_handler,
+  rtems_mode mode_set
+);
+
+/*
+ *  rtems_signal_send
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_signal_send directive.  This directive
+ *  sends the signal_set to the task specified by ID.
+ */
+
+rtems_status_code rtems_signal_send(
+  Objects_Id             id,
+  rtems_signal_set signal_set
+);
+
+#include <rtems/signalmp.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/include/rtems/rtems/signalmp.h
===================================================================
--- c/src/exec/rtems/include/rtems/rtems/signalmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems/rtems/signalmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,147 @@
+/*  signalmp.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the Multiprocessing Support in the Signal Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_SIGNAL_MP_h
+#define __RTEMS_SIGNAL_MP_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/asr.h>
+#include <rtems/mppkt.h>
+#include <rtems/object.h>
+#include <rtems/thread.h>
+#include <rtems/watchdog.h>
+
+/*
+ *  The following enumerated type defines the list of
+ *  remote signal operations.
+ */
+
+typedef enum {
+  SIGNAL_MP_SEND_REQUEST  = 0,
+  SIGNAL_MP_SEND_RESPONSE = 1,
+}   Signal_MP_Remote_operations;
+
+/*
+ *  The following data structure defines the packet used to perform
+ *  remote signal operations.
+ */
+
+typedef struct {
+  rtems_packet_prefix            Prefix;
+  Signal_MP_Remote_operations operation;
+  rtems_signal_set      signal_in;
+}   Signal_MP_Packet;
+
+/*
+ *  _Signal_MP_Send_process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  process operation can be performed on another node.
+ *
+ *  This routine is not needed since there are no process
+ *  packets to be sent by this manager.
+ */
+
+/*
+ *  _Signal_MP_Send_request_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive operation can be initiated on another node.
+ */
+
+rtems_status_code _Signal_MP_Send_request_packet (
+  Signal_MP_Remote_operations operation,
+  Objects_Id                  task_id,
+  rtems_signal_set      signal_in
+);
+
+/*
+ *  _Signal_MP_Send_response_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive can be performed on another node.
+ */
+
+void _Signal_MP_Send_response_packet (
+  Signal_MP_Remote_operations  operation,
+  Thread_Control              *the_thread
+);
+
+/*
+ *
+ *  _Signal_MP_Process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the actions specific to this package for
+ *  the request from another node.
+ */
+
+void _Signal_MP_Process_packet (
+  rtems_packet_prefix *the_packet_prefix
+);
+
+/*
+ *  _Signal_MP_Send_object_was_deleted
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked indirectly by the thread queue
+ *  when a proxy has been removed from the thread queue and
+ *  the remote node must be informed of this.
+ *
+ *  This routine is not needed since there are no objects
+ *  deleted by this manager.
+ */
+
+/*
+ *  _Signal_MP_Send_extract_proxy
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked when a task is deleted and it
+ *  has a proxy which must be removed from a thread queue and
+ *  the remote node must be informed of this.
+ *
+ *  This routine is not needed since there are no objects
+ *  deleted by this manager.
+ */
+
+/*
+ *  _Signal_MP_Get_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This function is used to obtain a signal mp packet.
+ */
+
+Signal_MP_Packet *_Signal_MP_Get_packet ( void );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of file */
Index: c/src/exec/rtems/include/rtems/rtems/status.h
===================================================================
--- c/src/exec/rtems/include/rtems/rtems/status.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems/rtems/status.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,109 @@
+/*  status.h
+ *
+ *  This include file contains the status codes returned from the
+ *  executive directives.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_STATUS_h
+#define __RTEMS_STATUS_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* types */
+
+/* enumerated constants */
+
+typedef enum {
+  RTEMS_SUCCESSFUL               =  0, /* successful completion */
+  RTEMS_TASK_EXITTED             =  1, /* returned from a thread */
+  RTEMS_MP_NOT_CONFIGURED        =  2, /* multiprocessing not configured */
+  RTEMS_INVALID_NAME             =  3, /* invalid object name */
+  RTEMS_INVALID_ID               =  4, /* invalid object id */
+  RTEMS_TOO_MANY                 =  5, /* too many */
+  RTEMS_TIMEOUT                  =  6, /* timed out waiting */
+  RTEMS_OBJECT_WAS_DELETED       =  7, /* object deleted while waiting */
+  RTEMS_INVALID_SIZE             =  8, /* specified size was invalid */
+  RTEMS_INVALID_ADDRESS          =  9, /* address specified is invalid */
+  RTEMS_INVALID_NUMBER           = 10, /* number was invalid */
+  RTEMS_NOT_DEFINED              = 11, /* item has not been initialized */
+  RTEMS_RESOURCE_IN_USE          = 12, /* resources still outstanding */
+  RTEMS_UNSATISFIED              = 13, /* request not satisfied */
+  RTEMS_INCORRECT_STATE          = 14, /* thread is in wrong state */
+  RTEMS_ALREADY_SUSPENDED        = 15, /* thread already in state */
+  RTEMS_ILLEGAL_ON_SELF          = 16, /* illegal on calling thread */
+  RTEMS_ILLEGAL_ON_REMOTE_OBJECT = 17, /* illegal for remote object */
+  RTEMS_CALLED_FROM_ISR          = 18, /* called from wrong environment */
+  RTEMS_INVALID_PRIORITY         = 19, /* invalid thread priority */
+  RTEMS_INVALID_CLOCK            = 20, /* invalid date/time */
+  RTEMS_INVALID_NODE             = 21, /* invalid node id */
+  RTEMS_NOT_CONFIGURED           = 22, /* directive not configured */
+  RTEMS_NOT_OWNER_OF_RESOURCE    = 23, /* not owner of resource */
+  RTEMS_NOT_IMPLEMENTED          = 24, /* directive not implemented */
+  RTEMS_INTERNAL_ERROR           = 25, /* RTEMS inconsistency detected */
+  RTEMS_PROXY_BLOCKING           = 26, /* internal multiprocessing only */
+  RTEMS_NO_MEMORY                = 27  /* could not get enough memory */
+} rtems_status_code;
+
+#define RTEMS_STATUS_CODES_FIRST RTEMS_SUCCESSFUL
+#define RTEMS_STATUS_CODES_LAST  RTEMS_NO_MEMORY
+
+/*
+ *  rtems_is_status_successful
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the status code is equal to RTEMS_SUCCESSFUL,
+ *  and FALSE otherwise.
+ */
+
+STATIC INLINE boolean rtems_is_status_successful (
+  rtems_status_code code
+);
+
+/*
+ *  rtems_are_statuses_equal
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the status code1 is equal to code2,
+ *  and FALSE otherwise.
+ */
+
+STATIC INLINE boolean rtems_are_statuses_equal (
+  rtems_status_code code1,
+  rtems_status_code code2
+);
+
+/*
+ *  _Status_Is_proxy_blocking
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the status code is equal to the
+ *  status which indicates that a proxy is blocking, and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Status_Is_proxy_blocking (
+  rtems_status_code code
+);
+
+#include <rtems/status.inl>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/include/rtems/rtems/taskmp.h
===================================================================
--- c/src/exec/rtems/include/rtems/rtems/taskmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems/rtems/taskmp.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,167 @@
+/*  taskmp.h
+ *
+ *  This include file contains all the constants and structures associated
+ *  with the multiprocessing support in the task manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_RTEMS_TASKS_MP_h
+#define __RTEMS_RTEMS_TASKS_MP_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/mppkt.h>
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/priority.h>
+#include <rtems/tasks.h>
+#include <rtems/thread.h>
+
+/*
+ *  The following enumerated type defines the list of
+ *  remote task operations.
+ */
+
+typedef enum {
+  RTEMS_TASKS_MP_ANNOUNCE_CREATE       =  0,
+  RTEMS_TASKS_MP_ANNOUNCE_DELETE       =  1,
+  RTEMS_TASKS_MP_SUSPEND_REQUEST       =  2,
+  RTEMS_TASKS_MP_SUSPEND_RESPONSE      =  3,
+  RTEMS_TASKS_MP_RESUME_REQUEST        =  4,
+  RTEMS_TASKS_MP_RESUME_RESPONSE       =  5,
+  RTEMS_TASKS_MP_SET_PRIORITY_REQUEST  =  6,
+  RTEMS_TASKS_MP_SET_PRIORITY_RESPONSE =  7,
+  RTEMS_TASKS_MP_GET_NOTE_REQUEST      =  8,
+  RTEMS_TASKS_MP_GET_NOTE_RESPONSE     =  9,
+  RTEMS_TASKS_MP_SET_NOTE_REQUEST      = 10,
+  RTEMS_TASKS_MP_SET_NOTE_RESPONSE     = 11,
+}   RTEMS_tasks_MP_Remote_operations;
+
+/*
+ *  The following data structure defines the packet used to perform
+ *  remote task operations.
+ */
+
+typedef struct {
+  rtems_packet_prefix                 Prefix;
+  RTEMS_tasks_MP_Remote_operations operation;
+  Objects_Name                     name;
+  rtems_task_priority                 the_priority;
+  unsigned32                       notepad;
+  unsigned32                       note;
+}   RTEMS_tasks_MP_Packet;
+
+/*
+ *  _RTEMS_tasks_MP_Send_process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  process operation can be performed on another node.
+ */
+
+void _RTEMS_tasks_MP_Send_process_packet (
+  RTEMS_tasks_MP_Remote_operations operation,
+  Objects_Id                       task_id,
+  Objects_Name                     name
+);
+
+/*
+ *  _RTEMS_tasks_MP_Send_request_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive operation can be initiated on another node.
+ */
+
+rtems_status_code _RTEMS_tasks_MP_Send_request_packet (
+  RTEMS_tasks_MP_Remote_operations operation,
+  Objects_Id                       task_id,
+  rtems_task_priority                 the_priority,
+  unsigned32                       notepad,
+  unsigned32                       note
+);
+
+/*
+ *  _RTEMS_tasks_MP_Send_response_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs a remote procedure call so that a
+ *  directive can be performed on another node.
+ */
+
+void _RTEMS_tasks_MP_Send_response_packet (
+  RTEMS_tasks_MP_Remote_operations  operation,
+  Thread_Control                   *the_thread
+);
+
+/*
+ *
+ *  _RTEMS_tasks_MP_Process_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the actions specific to this package for
+ *  the request from another node.
+ */
+
+void _RTEMS_tasks_MP_Process_packet (
+  rtems_packet_prefix *the_packet_prefix
+);
+
+/*
+ *  _RTEMS_tasks_MP_Send_object_was_deleted
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked indirectly by the thread queue
+ *  when a proxy has been removed from the thread queue and
+ *  the remote node must be informed of this.
+ *
+ *  This routine is not needed by RTEMS_tasks since a task
+ *  cannot be deleted when segments are in use.
+ */
+
+/*
+ *  _RTEMS_tasks_MP_Send_extract_proxy
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine is invoked when a task is deleted and it
+ *  has a proxy which must be removed from a thread queue and
+ *  the remote node must be informed of this.
+ *
+ *  This routine is not needed since there are no objects
+ *  deleted by this manager.
+ *
+ */
+
+/*
+ *  _RTEMS_tasks_MP_Get_packet
+ *
+ *  DESCRIPTION:
+ *
+ *  This function is used to obtain a task mp packet.
+ */
+
+RTEMS_tasks_MP_Packet *_RTEMS_tasks_MP_Get_packet ( void );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of file */
Index: c/src/exec/rtems/include/rtems/rtems/tasks.h
===================================================================
--- c/src/exec/rtems/include/rtems/rtems/tasks.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems/rtems/tasks.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,315 @@
+/*  tasks.h
+ *
+ *  This include file contains all constants and structures associated
+ *  with RTEMS tasks.  This manager provides a comprehensive set of directives
+ *  to create, delete, and administer tasks.
+ *
+ *  Directives provided are:
+ *
+ *     + create a task
+ *     + get an ID of a task
+ *     + start a task
+ *     + restart a task
+ *     + delete a task
+ *     + suspend a task
+ *     + resume a task
+ *     + set a task's priority
+ *     + change the current task's mode
+ *     + get a task notepad entry
+ *     + set a task notepad entry
+ *     + wake up after interval
+ *     + wake up when specified
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_RTEMS_TASKS_h
+#define __RTEMS_RTEMS_TASKS_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/message.h>
+#include <rtems/object.h>
+#include <rtems/part.h>
+#include <rtems/region.h>
+#include <rtems/sem.h>
+#include <rtems/states.h>
+#include <rtems/thread.h>
+#include <rtems/threadq.h>
+
+/*
+ *  Constant to be used as the ID of current task
+ */
+
+#define RTEMS_SELF                OBJECTS_ID_OF_SELF
+
+/*
+ *  This constant is passed to the rtems_task_wake_after directive as the
+ *  interval when a task wishes to yield the CPU.
+ */
+
+#define RTEMS_YIELD_PROCESSOR RTEMS_NO_TIMEOUT
+
+/*
+ *  rtems_task_create
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_task_create directive.  The task
+ *  will have the name name.  The attribute_set can be used to indicate
+ *  that the task will be globally accessible or utilize floating point.
+ *  The task's stack will be stack_size bytes.   The task will begin
+ *  execution with initial_priority and initial_modes.  It returns the
+ *  id of the created task in ID.
+ */
+
+rtems_status_code rtems_task_create(
+  Objects_Name        name,
+  rtems_task_priority    initial_priority,
+  unsigned32          stack_size,
+  rtems_mode       initial_modes,
+  rtems_attribute  attribute_set,
+  Objects_Id         *id
+);
+
+/*
+ *  rtems_task_ident
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_task_ident directive.
+ *  This directive returns the task ID associated with name.
+ *  If more than one task is named name, then the task to
+ *  which the ID belongs is arbitrary.  node indicates the
+ *  extent of the search for the ID of the task named name.
+ *  The search can be limited to a particular node or allowed to
+ *  encompass all nodes.
+ */
+
+rtems_status_code rtems_task_ident(
+  Objects_Name  name,
+  unsigned32    node,
+  Objects_Id   *id
+);
+
+/*
+ *  rtems_task_delete
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_task_delete directive.  The
+ *  task indicated by ID is deleted.
+ */
+
+rtems_status_code rtems_task_delete(
+  Objects_Id id
+);
+
+/*
+ *  rtems_task_get_note
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_task_get_note directive.  The
+ *  value of the indicated notepad for the task associated with ID
+ *  is returned in note.
+ */
+
+rtems_status_code rtems_task_get_note(
+  Objects_Id  id,
+  unsigned32  notepad,
+  unsigned32 *note
+);
+
+/*
+ *  rtems_task_set_note
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_task_set_note directive.  The
+ *  value of the indicated notepad for the task associated with ID
+ *  is returned in note.
+ */
+
+rtems_status_code rtems_task_set_note(
+  Objects_Id id,
+  unsigned32 notepad,
+  unsigned32 note
+);
+
+/*
+ *  rtems_task_mode
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_task_mode directive.  The current
+ *  values of the modes indicated by mask of the calling task are changed
+ *  to that indicated in mode_set.  The former mode of the task is
+ *  returned in mode_set.
+ */
+
+rtems_status_code rtems_task_mode(
+  rtems_mode  mode_set,
+  rtems_mode  mask,
+  rtems_mode *previous_mode_set
+);
+
+/*
+ *  rtems_task_restart
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_task_restart directive.  The
+ *  task associated with ID is restarted at its initial entry
+ *  point with the new argument.
+ */
+
+rtems_status_code rtems_task_restart(
+  Objects_Id id,
+  unsigned32 arg
+);
+
+/*
+ *  rtems_task_suspend
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_task_suspend directive.  The
+ *  SUSPENDED state is set for task associated with ID.
+ */
+
+rtems_status_code rtems_task_suspend(
+  Objects_Id id
+);
+
+/*
+ *  rtems_task_resume
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_task_resume Directive.  The
+ *  SUSPENDED state is cleared for task associated with ID.
+ */
+
+rtems_status_code rtems_task_resume(
+  Objects_Id id
+);
+
+/*
+ *  rtems_task_set_priority
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_task_set_priority directive.  The
+ *  current priority of the task associated with ID is set to
+ *  new_priority.  The former priority of that task is returned
+ *  in old_priority.
+ */
+
+rtems_status_code rtems_task_set_priority(
+  Objects_Id        id,
+  rtems_task_priority  new_priority,
+  rtems_task_priority *old_priority
+);
+
+/*
+ *  rtems_task_start
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_task_start directive.  The
+ *  starting execution point of the task associated with ID is
+ *  set to entry_point with the initial argument.
+ */
+
+rtems_status_code rtems_task_start(
+  Objects_Id   id,
+  rtems_task_entry entry_point,
+  unsigned32   argument
+);
+
+/*
+ *  rtems_task_wake_when
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_task_wake_when directive.  The
+ *  calling task is blocked until the current time of day is
+ *  equal to that indicated by time_buffer.
+ */
+
+rtems_status_code rtems_task_wake_when(
+  rtems_time_of_day *time_buffer
+);
+
+/*
+ *  rtems_task_wake_after
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_task_wake_after directive.  The
+ *  calling task is blocked until the indicated number of clock
+ *  ticks have occurred.
+ */
+
+rtems_status_code rtems_task_wake_after(
+  rtems_interval ticks
+);
+
+/*
+ *  _RTEMS_tasks_Allocate
+ *
+ *  DESCRIPTION:
+ *
+ *  This function allocates a task control block from
+ *  the inactive chain of free task control blocks.
+ */
+
+STATIC INLINE Thread_Control *_RTEMS_tasks_Allocate( void );
+
+/*
+ *  _RTEMS_tasks_Free
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine frees a task control block to the
+ *  inactive chain of free task control blocks.
+
+ */
+
+STATIC INLINE void _RTEMS_tasks_Free (
+  Thread_Control *the_task
+);
+
+/*
+ *  _RTEMS_tasks_Cancel_wait
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine unblocks the_thread and cancels any timers
+ *  which the_thread has active.
+ */
+
+STATIC INLINE void _RTEMS_tasks_Cancel_wait(
+  Thread_Control *the_thread
+);
+
+#include <rtems/tasks.inl>
+#include <rtems/taskmp.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/include/rtems/rtems/timer.h
===================================================================
--- c/src/exec/rtems/include/rtems/rtems/timer.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/include/rtems/rtems/timer.h	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,292 @@
+/*  timer.h
+ *
+ *  This include file contains all the constants, structures, and
+ *  prototypes associated with the Timer Manager.  This manager provides
+ *  facilities to configure, initiate, cancel, and delete timers which will
+ *  fire at specified intervals of time.
+ *
+ *  Directives provided are:
+ *
+ *     + create a timer
+ *     + get an ID of a timer
+ *     + delete a timer
+ *     + set a timer to fire after a number of ticks have passed
+ *     + set a timer to fire when a specified date and time has been reached
+ *     + reset a timer
+ *     + cancel a time
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_TIMER_h
+#define __RTEMS_TIMER_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtems/object.h>
+#include <rtems/tod.h>
+#include <rtems/watchdog.h>
+
+/*
+ *  The following enumerated type details the classes to which a timer
+ *  may belong.
+ */
+
+typedef enum {
+  TIMER_INTERVAL,
+  TIMER_TIME_OF_DAY,
+  TIMER_DORMANT
+} Timer_Classes;
+
+/*
+ *  The following defines the type of a Timer Service Routine.
+ */
+
+typedef rtems_timer_service_routine_entry Timer_Service;
+
+/*
+ *  The following defines the information control block used to manage
+ *  this class of objects.
+ */
+
+EXTERN Objects_Information  _Timer_Information;
+
+/*
+ *  The following records define the control block used to manage
+ *  each timer.
+ */
+
+typedef struct {
+  Objects_Control  Object;
+  Watchdog_Control Ticker;
+  Timer_Classes    the_class;
+}   Timer_Control;
+
+/*
+ *  _Timer_Manager_initialization
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine performs the initialization necessary for this manager.
+ */
+
+void _Timer_Manager_initialization(
+  unsigned32 maximum_timers
+);
+
+/*
+ *  rtems_timer_create
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_timer_create directive.  The
+ *  timer will have the name name.  It returns the id of the
+ *  created timer in ID.
+ */
+
+rtems_status_code rtems_timer_create(
+  Objects_Name  name,
+  Objects_Id   *id
+);
+
+/*
+ *  rtems_timer_ident
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_timer_ident directive.
+ *  This directive returns the timer ID associated with name.
+ *  If more than one timer is named name, then the timer
+ *  to which the ID belongs is arbitrary.
+ */
+
+rtems_status_code rtems_timer_ident(
+  Objects_Name  name,
+  Objects_Id   *id
+);
+
+/*
+ *  rtems_timer_cancel
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_timer_cancel directive.  It is used
+ *  to stop the timer associated with ID from firing.
+ */
+
+rtems_status_code rtems_timer_cancel(
+  Objects_Id id
+);
+
+/*
+ *  rtems_timer_delete
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_timer_delete directive.  The
+ *  timer indicated by ID is deleted.
+ */
+
+rtems_status_code rtems_timer_delete(
+  Objects_Id id
+);
+
+/*
+ *  rtems_timer_fire_after
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_timer_fire_after directive.  It
+ *  initiates the timer associated with ID to fire in ticks clock
+ *  ticks.  When the timer fires, the routine will be invoked.
+ */
+
+rtems_status_code rtems_timer_fire_after(
+  Objects_Id         id,
+  rtems_interval  ticks,
+  Timer_Service      routine,
+  void              *user_data
+);
+
+/*
+ *  rtems_timer_fire_when
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_timer_fire_when directive.  It
+ *  initiates the timer associated with ID to fire at wall_time
+ *  When the timer fires, the routine will be invoked.
+ */
+
+rtems_status_code rtems_timer_fire_when(
+  Objects_Id         id,
+  rtems_time_of_day       *wall_time,
+  Timer_Service      routine,
+  void              *user_data
+);
+
+/*
+ *  rtems_timer_reset
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine implements the rtems_timer_reset directive.  It is used
+ *  to reinitialize the interval timer associated with ID just as if
+ *  rtems_timer_fire_after were re-invoked with the same arguments that
+ *  were used to initiate this timer.
+ */
+
+rtems_status_code rtems_timer_reset(
+  Objects_Id id
+);
+
+/*
+ *  _Timer_Allocate
+ *
+ *  DESCRIPTION:
+ *
+ *  This function allocates a timer control block from
+ *  the inactive chain of free timer control blocks.
+ */
+
+STATIC INLINE Timer_Control *_Timer_Allocate( void );
+
+/*
+ *  _Timer_Free
+ *
+ *  DESCRIPTION:
+ *
+ *  This routine frees a timer control block to the
+ *  inactive chain of free timer control blocks.
+ */
+
+STATIC INLINE void _Timer_Free (
+  Timer_Control *the_timer
+);
+
+/*
+ *  _Timer_Get
+ *
+ *  DESCRIPTION:
+ *
+ *  This function maps timer IDs to timer control blocks.
+ *  If ID corresponds to a local timer, then it returns
+ *  the timer control pointer which maps to ID and location
+ *  is set to OBJECTS_LOCAL.  Otherwise, location is set
+ *  to OBJECTS_ERROR and the returned value is undefined.
+ */
+
+STATIC INLINE Timer_Control *_Timer_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+);
+
+/*
+ *  _Timer_Is_interval_class
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the class is that of an INTERVAL
+ *  timer, and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Timer_Is_interval_class (
+  Timer_Classes the_class
+);
+
+/*
+ *  _Timer_Is_time_of_day_class
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the class is that of an INTERVAL
+ *  timer, and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Timer_Is_timer_of_day_class (
+  Timer_Classes the_class
+);
+
+/*
+ *  _Timer_Is_dormant_class
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the class is that of a DORMANT
+ *  timer, and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Timer_Is_dormant_class (
+  Timer_Classes the_class
+);
+
+/*
+ *  _Timer_Is_null
+ *
+ *  DESCRIPTION:
+ *
+ *  This function returns TRUE if the_timer is NULL and FALSE otherwise.
+ */
+
+STATIC INLINE boolean _Timer_Is_null (
+  Timer_Control *the_timer
+);
+
+#include <rtems/timer.inl>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/asr.inl
===================================================================
--- c/src/exec/rtems/inline/asr.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/asr.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,105 @@
+/*  inline/asr.inl
+ *
+ *  This include file contains the implemenation of all routines
+ *  associated with the asynchronous signal handler which are inlined.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __INLINE_ASR_inl
+#define __INLINE_ASR_inl
+
+#include <rtems/isr.h>
+
+/*PAGE
+ *
+ *  _ASR_Initialize
+ *
+ */
+
+STATIC INLINE void _ASR_Initialize (
+  ASR_Information *information
+)
+{
+  information->handler         = NULL;
+  information->mode_set        = RTEMS_DEFAULT_MODES;
+  information->signals_posted  = 0;
+  information->signals_pending = 0;
+  information->nest_level      = 0;
+}
+
+/*PAGE
+ *
+ *  _ASR_Swap_signals
+ *
+ */
+
+STATIC INLINE void _ASR_Swap_signals (
+  ASR_Information *information
+)
+{
+  rtems_signal_set _signals;
+  ISR_Level              _level;
+
+  _ISR_Disable( _level );
+    _signals                     = information->signals_pending;
+    information->signals_pending = information->signals_posted;
+    information->signals_posted  = _signals;
+  _ISR_Enable( _level );
+}
+
+/*PAGE
+ *
+ *  _ASR_Is_null_handler
+ *
+ */
+
+STATIC INLINE boolean _ASR_Is_null_handler (
+  rtems_asr_entry asr_handler
+)
+{
+  return asr_handler == NULL;
+}
+
+/*PAGE
+ *
+ *  _ASR_Are_signals_pending
+ *
+ */
+
+STATIC INLINE boolean _ASR_Are_signals_pending (
+  ASR_Information *information
+)
+{
+  return information->signals_posted != 0;
+}
+
+/*PAGE
+ *
+ *  _ASR_Post_signals
+ *
+ */
+
+STATIC INLINE void _ASR_Post_signals(
+  rtems_signal_set  signals,
+  rtems_signal_set *signal_set
+)
+{
+  ISR_Level              _level;
+
+  _ISR_Disable( _level );
+    *signal_set |= signals;
+  _ISR_Enable( _level );
+}
+
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/attr.inl
===================================================================
--- c/src/exec/rtems/inline/attr.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/attr.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,125 @@
+/*  inline/attr.inl
+ *
+ *  This include file contains all of the inlined routines associated
+ *  with attributes.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __INLINE_ATTRIBUTES_inl
+#define __INLINE_ATTRIBUTES_inl
+
+/*PAGE
+ *
+ *  _Attributes_Set
+ */
+
+STATIC INLINE rtems_attribute _Attributes_Set (
+   rtems_attribute new_attributes,
+   rtems_attribute attribute_set
+)
+{
+  return attribute_set | new_attributes;
+}
+
+/*PAGE
+ *
+ *  _Attributes_Clear
+ */
+
+STATIC INLINE rtems_attribute _Attributes_Clear (
+   rtems_attribute attribute_set,
+   rtems_attribute mask
+)
+{
+  return attribute_set & ~mask;
+}
+
+/*PAGE
+ *
+ *  _Attributes_Is_floating_point
+ *
+ */
+
+STATIC INLINE boolean _Attributes_Is_floating_point(
+  rtems_attribute attribute_set
+)
+{
+   return ( attribute_set & RTEMS_FLOATING_POINT );
+}
+
+/*PAGE
+ *
+ *  _Attributes_Is_global
+ *
+ */
+
+STATIC INLINE boolean _Attributes_Is_global(
+  rtems_attribute attribute_set
+)
+{
+   return ( attribute_set & RTEMS_GLOBAL );
+}
+
+/*PAGE
+ *
+ *  _Attributes_Is_priority
+ *
+ */
+
+STATIC INLINE boolean _Attributes_Is_priority(
+  rtems_attribute attribute_set
+)
+{
+   return ( attribute_set & RTEMS_PRIORITY );
+}
+
+/*PAGE
+ *
+ *  _Attributes_Is_limit
+ *
+ */
+
+STATIC INLINE boolean _Attributes_Is_limit(
+  rtems_attribute attribute_set
+)
+{
+   return ( attribute_set & RTEMS_LIMIT );
+}
+
+/*PAGE
+ *
+ *  _Attributes_Is_binary_semaphore
+ *
+ */
+
+STATIC INLINE boolean _Attributes_Is_binary_semaphore(
+  rtems_attribute attribute_set
+)
+{
+  return ( attribute_set & RTEMS_BINARY_SEMAPHORE );
+}
+
+/*PAGE
+ *
+ *  _Attributes_Is_inherit_priority
+ *
+ */
+
+STATIC INLINE boolean _Attributes_Is_inherit_priority(
+  rtems_attribute attribute_set
+)
+{
+   return ( attribute_set & RTEMS_INHERIT_PRIORITY );
+}
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/dpmem.inl
===================================================================
--- c/src/exec/rtems/inline/dpmem.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/dpmem.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,75 @@
+/*  inline/dpmem.inl
+ *
+ *  This include file contains the inline routine used in conjunction
+ *  with the Dual Ported Memory Manager
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __INLINE_DPMEM_inl
+#define __INLINE_DPMEM_inl
+
+
+/*PAGE
+ *
+ *  _Dual_ported_memory_Allocate
+ *
+ */
+
+STATIC INLINE Dual_ported_memory_Control
+   *_Dual_ported_memory_Allocate ( void )
+{
+  return (Dual_ported_memory_Control *)
+     _Objects_Allocate( &_Dual_ported_memory_Information );
+}
+
+/*PAGE
+ *
+ *  _Dual_ported_memory_Free
+ *
+ */
+
+STATIC INLINE void _Dual_ported_memory_Free (
+   Dual_ported_memory_Control *the_port
+)
+{
+  _Objects_Free( &_Dual_ported_memory_Information, &the_port->Object );
+}
+
+/*PAGE
+ *
+ *  _Dual_ported_memory_Get
+ *
+ */
+
+STATIC INLINE Dual_ported_memory_Control *_Dual_ported_memory_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+)
+{
+  return (Dual_ported_memory_Control *)
+     _Objects_Get( &_Dual_ported_memory_Information, id, location );
+}
+
+/*PAGE
+ *
+ *  _Dual_ported_memory_Is_null
+ */
+
+STATIC INLINE boolean _Dual_ported_memory_Is_null(
+  Dual_ported_memory_Control *the_port
+)
+{
+  return ( the_port == NULL );
+}
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/event.inl
===================================================================
--- c/src/exec/rtems/inline/event.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/event.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,30 @@
+/*  inline/event.inl
+ *
+ *  This include file contains the static inline implementation of
+ *  macros for the Event Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __MACROS_EVENT_inl
+#define __MACROS_EVENT_inl
+
+/*
+ *  Event_Manager_initialization
+ */
+
+STATIC INLINE void _Event_Manager_initialization( void )
+{
+  _Event_Sync = FALSE;
+}
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/eventset.inl
===================================================================
--- c/src/exec/rtems/inline/eventset.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/eventset.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,71 @@
+/*  inline/eventset.inl
+ *
+ *  This include file contains the information pertaining to event sets.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __INLINE_EVENT_SET_inl
+#define __INLINE_EVENT_SET_inl
+
+/*PAGE
+ *
+ *  _Event_sets_Is_empty
+ */
+
+STATIC INLINE boolean _Event_sets_Is_empty(
+  rtems_event_set the_event_set
+)
+{
+  return ( the_event_set == 0 );
+}
+
+/*PAGE
+ *
+ *  _Event_sets_Post
+ */
+
+STATIC INLINE void _Event_sets_Post(
+  rtems_event_set  the_new_events,
+  rtems_event_set *the_event_set
+)
+{
+   *the_event_set |= the_new_events;
+}
+
+/*PAGE
+ *
+ *  _Event_sets_Get
+ */
+
+STATIC INLINE rtems_event_set _Event_sets_Get(
+  rtems_event_set the_event_set,
+  rtems_event_set the_event_condition
+)
+{
+   return ( the_event_set & the_event_condition );
+}
+
+/*PAGE
+ *
+ *  _Event_sets_Clear
+ */
+
+STATIC INLINE rtems_event_set _Event_sets_Clear(
+ rtems_event_set the_event_set,
+ rtems_event_set the_mask
+)
+{
+   return ( the_event_set & ~(the_mask) );
+}
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/message.inl
===================================================================
--- c/src/exec/rtems/inline/message.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/message.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,160 @@
+/*  message.inl
+ *
+ *  This include file contains the static inline implementation of all
+ *  inlined routines in the Message Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __MESSAGE_QUEUE_inl
+#define __MESSAGE_QUEUE_inl
+
+/*PAGE
+ *
+ *  _Message_queue_Copy_buffer
+ *
+ */
+
+STATIC INLINE void _Message_queue_Copy_buffer (
+  Message_queue_Buffer *source,
+  Message_queue_Buffer *destination
+)
+{
+  *destination = *source;
+}
+
+/*PAGE
+ *
+ *  _Message_queue_Allocate_message_buffer
+ *
+ */
+
+STATIC INLINE Message_queue_Buffer_control *
+  _Message_queue_Allocate_message_buffer ( void )
+{
+   return (Message_queue_Buffer_control *)
+     _Chain_Get( &_Message_queue_Inactive_messages );
+}
+
+/*PAGE
+ *
+ *  _Message_queue_Free_message_buffer
+ *
+ */
+
+STATIC INLINE void _Message_queue_Free_message_buffer (
+  Message_queue_Buffer_control *the_message
+)
+{
+ _Chain_Append( &_Message_queue_Inactive_messages, &the_message->Node );
+}
+
+/*PAGE
+ *
+ *  _Message_queue_Get_pending_message
+ *
+ */
+
+STATIC INLINE
+  Message_queue_Buffer_control *_Message_queue_Get_pending_message (
+  Message_queue_Control *the_message_queue
+)
+{
+  return (Message_queue_Buffer_control *)
+    _Chain_Get_unprotected( &the_message_queue->Pending_messages );
+}
+
+/*PAGE
+ *
+ *  _Message_queue_Append
+ *
+ */
+
+STATIC INLINE void _Message_queue_Append (
+  Message_queue_Control        *the_message_queue,
+  Message_queue_Buffer_control *the_message
+)
+{
+  _Chain_Append( &the_message_queue->Pending_messages, &the_message->Node );
+}
+
+/*PAGE
+ *
+ *  _Message_queue_Prepend
+ *
+ */
+
+STATIC INLINE void _Message_queue_Prepend (
+  Message_queue_Control        *the_message_queue,
+  Message_queue_Buffer_control *the_message
+)
+{
+  _Chain_Prepend(
+    &the_message_queue->Pending_messages,
+    &the_message->Node
+  );
+}
+
+/*PAGE
+ *
+ *  _Message_queue_Is_null
+ *
+ */
+
+STATIC INLINE boolean _Message_queue_Is_null (
+  Message_queue_Control *the_message_queue
+)
+{
+  return ( the_message_queue == NULL  );
+}
+
+/*PAGE
+ *
+ *  _Message_queue_Allocate
+ *
+ */
+
+STATIC INLINE Message_queue_Control *_Message_queue_Allocate ( void )
+{
+  return (Message_queue_Control *)
+     _Objects_Allocate( &_Message_queue_Information );
+}
+
+/*PAGE
+ *
+ *  _Message_queue_Free
+ *
+ */
+
+STATIC INLINE void _Message_queue_Free (
+  Message_queue_Control *the_message_queue
+)
+{
+  _Objects_Free( &_Message_queue_Information, &the_message_queue->Object );
+}
+
+/*PAGE
+ *
+ *  _Message_queue_Get
+ *
+ */
+
+STATIC INLINE Message_queue_Control *_Message_queue_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+)
+{
+  return (Message_queue_Control *)
+     _Objects_Get( &_Message_queue_Information, id, location );
+}
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/modes.inl
===================================================================
--- c/src/exec/rtems/inline/modes.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/modes.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,136 @@
+/*  modes.inl
+ *
+ *  This include file contains the static inline implementation of the
+ *  inlined routines in the Mode Handler
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __MODES_inl
+#define __MODES_inl
+
+/*PAGE
+ *
+ *  RTEMS_INTERRUPT_LEVEL
+ */
+
+STATIC INLINE unsigned32 RTEMS_INTERRUPT_LEVEL (
+  rtems_mode mode_set
+)
+{
+  return mode_set & RTEMS_INTERRUPT_MASK;
+}
+
+/*PAGE
+ *
+ *  _Modes_Mask_changed
+ *
+ */
+
+STATIC INLINE boolean _Modes_Mask_changed (
+  rtems_mode mode_set,
+  rtems_mode masks
+)
+{
+   return ( mode_set & masks );
+}
+
+/*PAGE
+ *
+ *  _Modes_Is_asr_disabled
+ *
+ */
+
+STATIC INLINE boolean _Modes_Is_asr_disabled (
+  rtems_mode mode_set
+)
+{
+   return ( mode_set & RTEMS_ASR_MASK );
+}
+
+/*PAGE
+ *
+ *  _Modes_Is_preempt
+ *
+ */
+
+STATIC INLINE boolean _Modes_Is_preempt (
+  rtems_mode mode_set
+)
+{
+   return ( ( mode_set & RTEMS_PREEMPT_MASK ) == RTEMS_PREEMPT );
+}
+
+/*PAGE
+ *
+ *  _Modes_Is_timeslice
+ *
+ */
+
+STATIC INLINE boolean _Modes_Is_timeslice (
+  rtems_mode mode_set
+)
+{
+  return ((mode_set & (RTEMS_TIMESLICE_MASK|RTEMS_PREEMPT_MASK)) ==
+                  (RTEMS_TIMESLICE|RTEMS_PREEMPT) );
+}
+
+/*PAGE
+ *
+ *  _Modes_Get_interrupt_level
+ *
+ */
+
+STATIC INLINE ISR_Level _Modes_Get_interrupt_level (
+  rtems_mode mode_set
+)
+{
+  return ( mode_set & RTEMS_INTERRUPT_MASK );
+}
+
+/*PAGE
+ *
+ *  _Modes_Set_interrupt_level
+ *
+ */
+
+STATIC INLINE void _Modes_Set_interrupt_level (
+  rtems_mode mode_set
+)
+{
+  _ISR_Set_level( _Modes_Get_interrupt_level( mode_set ) );
+}
+
+/*PAGE
+ *
+ *  _Modes_Change
+ *
+ */
+
+STATIC INLINE void _Modes_Change (
+  rtems_mode  old_mode_set,
+  rtems_mode  new_mode_set,
+  rtems_mode  mask,
+  rtems_mode *out_mode_set,
+  rtems_mode *changed
+)
+{
+  rtems_mode _out_mode;
+
+  _out_mode      =  old_mode_set;
+  _out_mode     &= ~mask;
+  _out_mode     |= new_mode_set & mask;
+  *changed       = _out_mode ^ old_mode_set;
+  *out_mode_set  = _out_mode;
+}
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/options.inl
===================================================================
--- c/src/exec/rtems/inline/options.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/options.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,47 @@
+/*  options.inl
+ *
+ *  This file contains the static inline implementation of the inlined
+ *  routines from the Options Handler.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __OPTIONS_inl
+#define __OPTIONS_inl
+
+/*PAGE
+ *
+ *  _Options_Is_no_wait
+ *
+ */
+
+STATIC INLINE boolean _Options_Is_no_wait (
+  rtems_option option_set
+)
+{
+   return (option_set & RTEMS_NO_WAIT);
+}
+
+/*PAGE
+ *
+ *  _Options_Is_any
+ *
+ */
+
+STATIC INLINE boolean _Options_Is_any (
+  rtems_option option_set
+)
+{
+   return (option_set & RTEMS_EVENT_ANY);
+}
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/part.inl
===================================================================
--- c/src/exec/rtems/inline/part.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/part.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,157 @@
+/*  part.inl
+ *
+ *  This file contains the macro implementation of all inlined routines
+ *  in the Partition Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __PARTITION_inl
+#define __PARTITION_inl
+
+/*PAGE
+ *
+ *  _Partition_Allocate_buffer
+ *
+ */
+
+STATIC INLINE void *_Partition_Allocate_buffer (
+   Partition_Control *the_partition
+)
+{
+  return _Chain_Get( &the_partition->Memory );
+}
+
+/*PAGE
+ *
+ *  _Partition_Free_buffer
+ *
+ */
+
+STATIC INLINE void _Partition_Free_buffer (
+  Partition_Control *the_partition,
+  Chain_Node        *the_buffer
+)
+{
+  _Chain_Append( &the_partition->Memory, the_buffer );
+}
+
+/*PAGE
+ *
+ *  _Partition_Is_buffer_on_boundary
+ *
+ */
+
+STATIC INLINE boolean _Partition_Is_buffer_on_boundary (
+  void              *the_buffer,
+  Partition_Control *the_partition
+)
+{
+  unsigned32   offset;
+
+  offset = (unsigned32) _Addresses_Subtract(
+    the_buffer,
+    the_partition->starting_address
+  );
+
+  return ((offset % the_partition->buffer_size) == 0);
+}
+
+/*PAGE
+ *
+ *  _Partition_Is_buffer_valid
+ *
+ */
+
+STATIC INLINE boolean _Partition_Is_buffer_valid (
+   Chain_Node        *the_buffer,
+   Partition_Control *the_partition
+)
+{
+  void *starting;
+  void *ending;
+
+  starting = the_partition->starting_address;
+  ending   = _Addresses_Add_offset( starting, the_partition->length );
+
+  return (
+    _Addresses_Is_in_range( the_buffer, starting, ending ) &&
+    _Partition_Is_buffer_on_boundary( the_buffer, the_partition )
+  );
+}
+
+/*PAGE
+ *
+ *  _Partition_Is_buffer_size_aligned
+ *
+ */
+
+STATIC INLINE boolean _Partition_Is_buffer_size_aligned (
+   unsigned32 buffer_size
+)
+{
+  return ((buffer_size % CPU_PARTITION_ALIGNMENT) == 0);
+}
+
+/*PAGE
+ *
+ *  _Partition_Allocate
+ *
+ */
+
+STATIC INLINE Partition_Control *_Partition_Allocate ( void )
+{
+  return (Partition_Control *) _Objects_Allocate( &_Partition_Information );
+}
+
+/*PAGE
+ *
+ *  _Partition_Free
+ *
+ */
+
+STATIC INLINE void _Partition_Free (
+   Partition_Control *the_partition
+)
+{
+  _Objects_Free( &_Partition_Information, &the_partition->Object );
+}
+
+/*PAGE
+ *
+ *  _Partition_Get
+ *
+ */
+
+STATIC INLINE Partition_Control *_Partition_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+)
+{
+  return (Partition_Control *)
+    _Objects_Get( &_Partition_Information, id, location );
+}
+
+/*PAGE
+ *
+ *  _Partition_Is_null
+ *
+ */
+
+STATIC INLINE boolean _Partition_Is_null (
+   Partition_Control *the_partition
+)
+{
+   return ( the_partition == NULL  );
+}
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/ratemon.inl
===================================================================
--- c/src/exec/rtems/inline/ratemon.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/ratemon.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,113 @@
+/*  ratemon.inl
+ *
+ *  This file contains the static inline  implementation of the inlined
+ *  routines in the Rate Monotonic Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RATE_MONOTONIC_inl
+#define __RATE_MONOTONIC_inl
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Allocate
+ *
+ */
+
+STATIC INLINE Rate_monotonic_Control *_Rate_monotonic_Allocate( void )
+{
+  return (Rate_monotonic_Control *)
+    _Objects_Allocate( &_Rate_monotonic_Information );
+}
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Free
+ *
+ */
+
+STATIC INLINE void _Rate_monotonic_Free (
+  Rate_monotonic_Control *the_period
+)
+{
+  _Objects_Free( &_Rate_monotonic_Information, &the_period->Object );
+}
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Get
+ *
+ */
+
+STATIC INLINE Rate_monotonic_Control *_Rate_monotonic_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+)
+{
+  return (Rate_monotonic_Control *)
+    _Objects_Get( &_Rate_monotonic_Information, id, location );
+}
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Is_active
+ *
+ */
+
+STATIC INLINE boolean _Rate_monotonic_Is_active (
+  Rate_monotonic_Control *the_period
+)
+{
+  return (the_period->state == RATE_MONOTONIC_ACTIVE);
+}
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Is_inactive
+ *
+ */
+
+STATIC INLINE boolean _Rate_monotonic_Is_inactive (
+  Rate_monotonic_Control *the_period
+)
+{
+  return (the_period->state == RATE_MONOTONIC_INACTIVE);
+}
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Is_expired
+ *
+ */
+
+STATIC INLINE boolean _Rate_monotonic_Is_expired (
+  Rate_monotonic_Control *the_period
+)
+{
+  return (the_period->state == RATE_MONOTONIC_EXPIRED);
+}
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Is_null
+ *
+ */
+
+STATIC INLINE boolean _Rate_monotonic_Is_null (
+  Rate_monotonic_Control *the_period
+)
+{
+  return (the_period == NULL);
+}
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/region.inl
===================================================================
--- c/src/exec/rtems/inline/region.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/region.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,101 @@
+/*  region.inl
+ *
+ *  This file contains the macro implementation of the inlined
+ *  routines from the Region Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __REGION_inl
+#define __REGION_inl
+
+/*PAGE
+ *
+ *  _Region_Allocate
+ *
+ */
+
+STATIC INLINE Region_Control *_Region_Allocate( void )
+{
+  return (Region_Control *) _Objects_Allocate( &_Region_Information );
+}
+
+/*PAGE
+ *
+ *  _Region_Free
+ *
+ */
+
+STATIC INLINE void _Region_Free (
+  Region_Control *the_region
+)
+{
+  _Objects_Free( &_Region_Information, &the_region->Object );
+}
+
+/*PAGE
+ *
+ *  _Region_Get
+ *
+ */
+
+STATIC INLINE Region_Control *_Region_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+)
+{
+  return (Region_Control *)
+    _Objects_Get( &_Region_Information, id, location );
+}
+
+/*PAGE
+ *
+ *  _Region_Allocate_segment
+ *
+ */
+
+STATIC INLINE void *_Region_Allocate_segment (
+  Region_Control *the_region,
+  unsigned32      size
+)
+{
+   return _Heap_Allocate( &the_region->Memory, size );
+}
+
+/*PAGE
+ *
+ *  _Region_Free_segment
+ *
+ */
+
+STATIC INLINE boolean _Region_Free_segment (
+  Region_Control *the_region,
+  void           *the_segment
+)
+{
+  return _Heap_Free( &the_region->Memory, the_segment );
+}
+
+/*PAGE
+ *
+ *  _Region_Is_null
+ *
+ */
+
+STATIC INLINE boolean _Region_Is_null (
+  Region_Control *the_region
+)
+{
+  return ( the_region == NULL  );
+}
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/rtems/rtems/asr.inl
===================================================================
--- c/src/exec/rtems/inline/rtems/rtems/asr.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/rtems/rtems/asr.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,105 @@
+/*  inline/asr.inl
+ *
+ *  This include file contains the implemenation of all routines
+ *  associated with the asynchronous signal handler which are inlined.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __INLINE_ASR_inl
+#define __INLINE_ASR_inl
+
+#include <rtems/isr.h>
+
+/*PAGE
+ *
+ *  _ASR_Initialize
+ *
+ */
+
+STATIC INLINE void _ASR_Initialize (
+  ASR_Information *information
+)
+{
+  information->handler         = NULL;
+  information->mode_set        = RTEMS_DEFAULT_MODES;
+  information->signals_posted  = 0;
+  information->signals_pending = 0;
+  information->nest_level      = 0;
+}
+
+/*PAGE
+ *
+ *  _ASR_Swap_signals
+ *
+ */
+
+STATIC INLINE void _ASR_Swap_signals (
+  ASR_Information *information
+)
+{
+  rtems_signal_set _signals;
+  ISR_Level              _level;
+
+  _ISR_Disable( _level );
+    _signals                     = information->signals_pending;
+    information->signals_pending = information->signals_posted;
+    information->signals_posted  = _signals;
+  _ISR_Enable( _level );
+}
+
+/*PAGE
+ *
+ *  _ASR_Is_null_handler
+ *
+ */
+
+STATIC INLINE boolean _ASR_Is_null_handler (
+  rtems_asr_entry asr_handler
+)
+{
+  return asr_handler == NULL;
+}
+
+/*PAGE
+ *
+ *  _ASR_Are_signals_pending
+ *
+ */
+
+STATIC INLINE boolean _ASR_Are_signals_pending (
+  ASR_Information *information
+)
+{
+  return information->signals_posted != 0;
+}
+
+/*PAGE
+ *
+ *  _ASR_Post_signals
+ *
+ */
+
+STATIC INLINE void _ASR_Post_signals(
+  rtems_signal_set  signals,
+  rtems_signal_set *signal_set
+)
+{
+  ISR_Level              _level;
+
+  _ISR_Disable( _level );
+    *signal_set |= signals;
+  _ISR_Enable( _level );
+}
+
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/rtems/rtems/attr.inl
===================================================================
--- c/src/exec/rtems/inline/rtems/rtems/attr.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/rtems/rtems/attr.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,125 @@
+/*  inline/attr.inl
+ *
+ *  This include file contains all of the inlined routines associated
+ *  with attributes.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __INLINE_ATTRIBUTES_inl
+#define __INLINE_ATTRIBUTES_inl
+
+/*PAGE
+ *
+ *  _Attributes_Set
+ */
+
+STATIC INLINE rtems_attribute _Attributes_Set (
+   rtems_attribute new_attributes,
+   rtems_attribute attribute_set
+)
+{
+  return attribute_set | new_attributes;
+}
+
+/*PAGE
+ *
+ *  _Attributes_Clear
+ */
+
+STATIC INLINE rtems_attribute _Attributes_Clear (
+   rtems_attribute attribute_set,
+   rtems_attribute mask
+)
+{
+  return attribute_set & ~mask;
+}
+
+/*PAGE
+ *
+ *  _Attributes_Is_floating_point
+ *
+ */
+
+STATIC INLINE boolean _Attributes_Is_floating_point(
+  rtems_attribute attribute_set
+)
+{
+   return ( attribute_set & RTEMS_FLOATING_POINT );
+}
+
+/*PAGE
+ *
+ *  _Attributes_Is_global
+ *
+ */
+
+STATIC INLINE boolean _Attributes_Is_global(
+  rtems_attribute attribute_set
+)
+{
+   return ( attribute_set & RTEMS_GLOBAL );
+}
+
+/*PAGE
+ *
+ *  _Attributes_Is_priority
+ *
+ */
+
+STATIC INLINE boolean _Attributes_Is_priority(
+  rtems_attribute attribute_set
+)
+{
+   return ( attribute_set & RTEMS_PRIORITY );
+}
+
+/*PAGE
+ *
+ *  _Attributes_Is_limit
+ *
+ */
+
+STATIC INLINE boolean _Attributes_Is_limit(
+  rtems_attribute attribute_set
+)
+{
+   return ( attribute_set & RTEMS_LIMIT );
+}
+
+/*PAGE
+ *
+ *  _Attributes_Is_binary_semaphore
+ *
+ */
+
+STATIC INLINE boolean _Attributes_Is_binary_semaphore(
+  rtems_attribute attribute_set
+)
+{
+  return ( attribute_set & RTEMS_BINARY_SEMAPHORE );
+}
+
+/*PAGE
+ *
+ *  _Attributes_Is_inherit_priority
+ *
+ */
+
+STATIC INLINE boolean _Attributes_Is_inherit_priority(
+  rtems_attribute attribute_set
+)
+{
+   return ( attribute_set & RTEMS_INHERIT_PRIORITY );
+}
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/rtems/rtems/dpmem.inl
===================================================================
--- c/src/exec/rtems/inline/rtems/rtems/dpmem.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/rtems/rtems/dpmem.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,75 @@
+/*  inline/dpmem.inl
+ *
+ *  This include file contains the inline routine used in conjunction
+ *  with the Dual Ported Memory Manager
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __INLINE_DPMEM_inl
+#define __INLINE_DPMEM_inl
+
+
+/*PAGE
+ *
+ *  _Dual_ported_memory_Allocate
+ *
+ */
+
+STATIC INLINE Dual_ported_memory_Control
+   *_Dual_ported_memory_Allocate ( void )
+{
+  return (Dual_ported_memory_Control *)
+     _Objects_Allocate( &_Dual_ported_memory_Information );
+}
+
+/*PAGE
+ *
+ *  _Dual_ported_memory_Free
+ *
+ */
+
+STATIC INLINE void _Dual_ported_memory_Free (
+   Dual_ported_memory_Control *the_port
+)
+{
+  _Objects_Free( &_Dual_ported_memory_Information, &the_port->Object );
+}
+
+/*PAGE
+ *
+ *  _Dual_ported_memory_Get
+ *
+ */
+
+STATIC INLINE Dual_ported_memory_Control *_Dual_ported_memory_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+)
+{
+  return (Dual_ported_memory_Control *)
+     _Objects_Get( &_Dual_ported_memory_Information, id, location );
+}
+
+/*PAGE
+ *
+ *  _Dual_ported_memory_Is_null
+ */
+
+STATIC INLINE boolean _Dual_ported_memory_Is_null(
+  Dual_ported_memory_Control *the_port
+)
+{
+  return ( the_port == NULL );
+}
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/rtems/rtems/event.inl
===================================================================
--- c/src/exec/rtems/inline/rtems/rtems/event.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/rtems/rtems/event.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,30 @@
+/*  inline/event.inl
+ *
+ *  This include file contains the static inline implementation of
+ *  macros for the Event Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __MACROS_EVENT_inl
+#define __MACROS_EVENT_inl
+
+/*
+ *  Event_Manager_initialization
+ */
+
+STATIC INLINE void _Event_Manager_initialization( void )
+{
+  _Event_Sync = FALSE;
+}
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/rtems/rtems/eventset.inl
===================================================================
--- c/src/exec/rtems/inline/rtems/rtems/eventset.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/rtems/rtems/eventset.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,71 @@
+/*  inline/eventset.inl
+ *
+ *  This include file contains the information pertaining to event sets.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __INLINE_EVENT_SET_inl
+#define __INLINE_EVENT_SET_inl
+
+/*PAGE
+ *
+ *  _Event_sets_Is_empty
+ */
+
+STATIC INLINE boolean _Event_sets_Is_empty(
+  rtems_event_set the_event_set
+)
+{
+  return ( the_event_set == 0 );
+}
+
+/*PAGE
+ *
+ *  _Event_sets_Post
+ */
+
+STATIC INLINE void _Event_sets_Post(
+  rtems_event_set  the_new_events,
+  rtems_event_set *the_event_set
+)
+{
+   *the_event_set |= the_new_events;
+}
+
+/*PAGE
+ *
+ *  _Event_sets_Get
+ */
+
+STATIC INLINE rtems_event_set _Event_sets_Get(
+  rtems_event_set the_event_set,
+  rtems_event_set the_event_condition
+)
+{
+   return ( the_event_set & the_event_condition );
+}
+
+/*PAGE
+ *
+ *  _Event_sets_Clear
+ */
+
+STATIC INLINE rtems_event_set _Event_sets_Clear(
+ rtems_event_set the_event_set,
+ rtems_event_set the_mask
+)
+{
+   return ( the_event_set & ~(the_mask) );
+}
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/rtems/rtems/message.inl
===================================================================
--- c/src/exec/rtems/inline/rtems/rtems/message.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/rtems/rtems/message.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,160 @@
+/*  message.inl
+ *
+ *  This include file contains the static inline implementation of all
+ *  inlined routines in the Message Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __MESSAGE_QUEUE_inl
+#define __MESSAGE_QUEUE_inl
+
+/*PAGE
+ *
+ *  _Message_queue_Copy_buffer
+ *
+ */
+
+STATIC INLINE void _Message_queue_Copy_buffer (
+  Message_queue_Buffer *source,
+  Message_queue_Buffer *destination
+)
+{
+  *destination = *source;
+}
+
+/*PAGE
+ *
+ *  _Message_queue_Allocate_message_buffer
+ *
+ */
+
+STATIC INLINE Message_queue_Buffer_control *
+  _Message_queue_Allocate_message_buffer ( void )
+{
+   return (Message_queue_Buffer_control *)
+     _Chain_Get( &_Message_queue_Inactive_messages );
+}
+
+/*PAGE
+ *
+ *  _Message_queue_Free_message_buffer
+ *
+ */
+
+STATIC INLINE void _Message_queue_Free_message_buffer (
+  Message_queue_Buffer_control *the_message
+)
+{
+ _Chain_Append( &_Message_queue_Inactive_messages, &the_message->Node );
+}
+
+/*PAGE
+ *
+ *  _Message_queue_Get_pending_message
+ *
+ */
+
+STATIC INLINE
+  Message_queue_Buffer_control *_Message_queue_Get_pending_message (
+  Message_queue_Control *the_message_queue
+)
+{
+  return (Message_queue_Buffer_control *)
+    _Chain_Get_unprotected( &the_message_queue->Pending_messages );
+}
+
+/*PAGE
+ *
+ *  _Message_queue_Append
+ *
+ */
+
+STATIC INLINE void _Message_queue_Append (
+  Message_queue_Control        *the_message_queue,
+  Message_queue_Buffer_control *the_message
+)
+{
+  _Chain_Append( &the_message_queue->Pending_messages, &the_message->Node );
+}
+
+/*PAGE
+ *
+ *  _Message_queue_Prepend
+ *
+ */
+
+STATIC INLINE void _Message_queue_Prepend (
+  Message_queue_Control        *the_message_queue,
+  Message_queue_Buffer_control *the_message
+)
+{
+  _Chain_Prepend(
+    &the_message_queue->Pending_messages,
+    &the_message->Node
+  );
+}
+
+/*PAGE
+ *
+ *  _Message_queue_Is_null
+ *
+ */
+
+STATIC INLINE boolean _Message_queue_Is_null (
+  Message_queue_Control *the_message_queue
+)
+{
+  return ( the_message_queue == NULL  );
+}
+
+/*PAGE
+ *
+ *  _Message_queue_Allocate
+ *
+ */
+
+STATIC INLINE Message_queue_Control *_Message_queue_Allocate ( void )
+{
+  return (Message_queue_Control *)
+     _Objects_Allocate( &_Message_queue_Information );
+}
+
+/*PAGE
+ *
+ *  _Message_queue_Free
+ *
+ */
+
+STATIC INLINE void _Message_queue_Free (
+  Message_queue_Control *the_message_queue
+)
+{
+  _Objects_Free( &_Message_queue_Information, &the_message_queue->Object );
+}
+
+/*PAGE
+ *
+ *  _Message_queue_Get
+ *
+ */
+
+STATIC INLINE Message_queue_Control *_Message_queue_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+)
+{
+  return (Message_queue_Control *)
+     _Objects_Get( &_Message_queue_Information, id, location );
+}
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/rtems/rtems/modes.inl
===================================================================
--- c/src/exec/rtems/inline/rtems/rtems/modes.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/rtems/rtems/modes.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,136 @@
+/*  modes.inl
+ *
+ *  This include file contains the static inline implementation of the
+ *  inlined routines in the Mode Handler
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __MODES_inl
+#define __MODES_inl
+
+/*PAGE
+ *
+ *  RTEMS_INTERRUPT_LEVEL
+ */
+
+STATIC INLINE unsigned32 RTEMS_INTERRUPT_LEVEL (
+  rtems_mode mode_set
+)
+{
+  return mode_set & RTEMS_INTERRUPT_MASK;
+}
+
+/*PAGE
+ *
+ *  _Modes_Mask_changed
+ *
+ */
+
+STATIC INLINE boolean _Modes_Mask_changed (
+  rtems_mode mode_set,
+  rtems_mode masks
+)
+{
+   return ( mode_set & masks );
+}
+
+/*PAGE
+ *
+ *  _Modes_Is_asr_disabled
+ *
+ */
+
+STATIC INLINE boolean _Modes_Is_asr_disabled (
+  rtems_mode mode_set
+)
+{
+   return ( mode_set & RTEMS_ASR_MASK );
+}
+
+/*PAGE
+ *
+ *  _Modes_Is_preempt
+ *
+ */
+
+STATIC INLINE boolean _Modes_Is_preempt (
+  rtems_mode mode_set
+)
+{
+   return ( ( mode_set & RTEMS_PREEMPT_MASK ) == RTEMS_PREEMPT );
+}
+
+/*PAGE
+ *
+ *  _Modes_Is_timeslice
+ *
+ */
+
+STATIC INLINE boolean _Modes_Is_timeslice (
+  rtems_mode mode_set
+)
+{
+  return ((mode_set & (RTEMS_TIMESLICE_MASK|RTEMS_PREEMPT_MASK)) ==
+                  (RTEMS_TIMESLICE|RTEMS_PREEMPT) );
+}
+
+/*PAGE
+ *
+ *  _Modes_Get_interrupt_level
+ *
+ */
+
+STATIC INLINE ISR_Level _Modes_Get_interrupt_level (
+  rtems_mode mode_set
+)
+{
+  return ( mode_set & RTEMS_INTERRUPT_MASK );
+}
+
+/*PAGE
+ *
+ *  _Modes_Set_interrupt_level
+ *
+ */
+
+STATIC INLINE void _Modes_Set_interrupt_level (
+  rtems_mode mode_set
+)
+{
+  _ISR_Set_level( _Modes_Get_interrupt_level( mode_set ) );
+}
+
+/*PAGE
+ *
+ *  _Modes_Change
+ *
+ */
+
+STATIC INLINE void _Modes_Change (
+  rtems_mode  old_mode_set,
+  rtems_mode  new_mode_set,
+  rtems_mode  mask,
+  rtems_mode *out_mode_set,
+  rtems_mode *changed
+)
+{
+  rtems_mode _out_mode;
+
+  _out_mode      =  old_mode_set;
+  _out_mode     &= ~mask;
+  _out_mode     |= new_mode_set & mask;
+  *changed       = _out_mode ^ old_mode_set;
+  *out_mode_set  = _out_mode;
+}
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/rtems/rtems/options.inl
===================================================================
--- c/src/exec/rtems/inline/rtems/rtems/options.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/rtems/rtems/options.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,47 @@
+/*  options.inl
+ *
+ *  This file contains the static inline implementation of the inlined
+ *  routines from the Options Handler.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __OPTIONS_inl
+#define __OPTIONS_inl
+
+/*PAGE
+ *
+ *  _Options_Is_no_wait
+ *
+ */
+
+STATIC INLINE boolean _Options_Is_no_wait (
+  rtems_option option_set
+)
+{
+   return (option_set & RTEMS_NO_WAIT);
+}
+
+/*PAGE
+ *
+ *  _Options_Is_any
+ *
+ */
+
+STATIC INLINE boolean _Options_Is_any (
+  rtems_option option_set
+)
+{
+   return (option_set & RTEMS_EVENT_ANY);
+}
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/rtems/rtems/part.inl
===================================================================
--- c/src/exec/rtems/inline/rtems/rtems/part.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/rtems/rtems/part.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,157 @@
+/*  part.inl
+ *
+ *  This file contains the macro implementation of all inlined routines
+ *  in the Partition Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __PARTITION_inl
+#define __PARTITION_inl
+
+/*PAGE
+ *
+ *  _Partition_Allocate_buffer
+ *
+ */
+
+STATIC INLINE void *_Partition_Allocate_buffer (
+   Partition_Control *the_partition
+)
+{
+  return _Chain_Get( &the_partition->Memory );
+}
+
+/*PAGE
+ *
+ *  _Partition_Free_buffer
+ *
+ */
+
+STATIC INLINE void _Partition_Free_buffer (
+  Partition_Control *the_partition,
+  Chain_Node        *the_buffer
+)
+{
+  _Chain_Append( &the_partition->Memory, the_buffer );
+}
+
+/*PAGE
+ *
+ *  _Partition_Is_buffer_on_boundary
+ *
+ */
+
+STATIC INLINE boolean _Partition_Is_buffer_on_boundary (
+  void              *the_buffer,
+  Partition_Control *the_partition
+)
+{
+  unsigned32   offset;
+
+  offset = (unsigned32) _Addresses_Subtract(
+    the_buffer,
+    the_partition->starting_address
+  );
+
+  return ((offset % the_partition->buffer_size) == 0);
+}
+
+/*PAGE
+ *
+ *  _Partition_Is_buffer_valid
+ *
+ */
+
+STATIC INLINE boolean _Partition_Is_buffer_valid (
+   Chain_Node        *the_buffer,
+   Partition_Control *the_partition
+)
+{
+  void *starting;
+  void *ending;
+
+  starting = the_partition->starting_address;
+  ending   = _Addresses_Add_offset( starting, the_partition->length );
+
+  return (
+    _Addresses_Is_in_range( the_buffer, starting, ending ) &&
+    _Partition_Is_buffer_on_boundary( the_buffer, the_partition )
+  );
+}
+
+/*PAGE
+ *
+ *  _Partition_Is_buffer_size_aligned
+ *
+ */
+
+STATIC INLINE boolean _Partition_Is_buffer_size_aligned (
+   unsigned32 buffer_size
+)
+{
+  return ((buffer_size % CPU_PARTITION_ALIGNMENT) == 0);
+}
+
+/*PAGE
+ *
+ *  _Partition_Allocate
+ *
+ */
+
+STATIC INLINE Partition_Control *_Partition_Allocate ( void )
+{
+  return (Partition_Control *) _Objects_Allocate( &_Partition_Information );
+}
+
+/*PAGE
+ *
+ *  _Partition_Free
+ *
+ */
+
+STATIC INLINE void _Partition_Free (
+   Partition_Control *the_partition
+)
+{
+  _Objects_Free( &_Partition_Information, &the_partition->Object );
+}
+
+/*PAGE
+ *
+ *  _Partition_Get
+ *
+ */
+
+STATIC INLINE Partition_Control *_Partition_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+)
+{
+  return (Partition_Control *)
+    _Objects_Get( &_Partition_Information, id, location );
+}
+
+/*PAGE
+ *
+ *  _Partition_Is_null
+ *
+ */
+
+STATIC INLINE boolean _Partition_Is_null (
+   Partition_Control *the_partition
+)
+{
+   return ( the_partition == NULL  );
+}
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/rtems/rtems/ratemon.inl
===================================================================
--- c/src/exec/rtems/inline/rtems/rtems/ratemon.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/rtems/rtems/ratemon.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,113 @@
+/*  ratemon.inl
+ *
+ *  This file contains the static inline  implementation of the inlined
+ *  routines in the Rate Monotonic Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RATE_MONOTONIC_inl
+#define __RATE_MONOTONIC_inl
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Allocate
+ *
+ */
+
+STATIC INLINE Rate_monotonic_Control *_Rate_monotonic_Allocate( void )
+{
+  return (Rate_monotonic_Control *)
+    _Objects_Allocate( &_Rate_monotonic_Information );
+}
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Free
+ *
+ */
+
+STATIC INLINE void _Rate_monotonic_Free (
+  Rate_monotonic_Control *the_period
+)
+{
+  _Objects_Free( &_Rate_monotonic_Information, &the_period->Object );
+}
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Get
+ *
+ */
+
+STATIC INLINE Rate_monotonic_Control *_Rate_monotonic_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+)
+{
+  return (Rate_monotonic_Control *)
+    _Objects_Get( &_Rate_monotonic_Information, id, location );
+}
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Is_active
+ *
+ */
+
+STATIC INLINE boolean _Rate_monotonic_Is_active (
+  Rate_monotonic_Control *the_period
+)
+{
+  return (the_period->state == RATE_MONOTONIC_ACTIVE);
+}
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Is_inactive
+ *
+ */
+
+STATIC INLINE boolean _Rate_monotonic_Is_inactive (
+  Rate_monotonic_Control *the_period
+)
+{
+  return (the_period->state == RATE_MONOTONIC_INACTIVE);
+}
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Is_expired
+ *
+ */
+
+STATIC INLINE boolean _Rate_monotonic_Is_expired (
+  Rate_monotonic_Control *the_period
+)
+{
+  return (the_period->state == RATE_MONOTONIC_EXPIRED);
+}
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Is_null
+ *
+ */
+
+STATIC INLINE boolean _Rate_monotonic_Is_null (
+  Rate_monotonic_Control *the_period
+)
+{
+  return (the_period == NULL);
+}
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/rtems/rtems/region.inl
===================================================================
--- c/src/exec/rtems/inline/rtems/rtems/region.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/rtems/rtems/region.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,101 @@
+/*  region.inl
+ *
+ *  This file contains the macro implementation of the inlined
+ *  routines from the Region Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __REGION_inl
+#define __REGION_inl
+
+/*PAGE
+ *
+ *  _Region_Allocate
+ *
+ */
+
+STATIC INLINE Region_Control *_Region_Allocate( void )
+{
+  return (Region_Control *) _Objects_Allocate( &_Region_Information );
+}
+
+/*PAGE
+ *
+ *  _Region_Free
+ *
+ */
+
+STATIC INLINE void _Region_Free (
+  Region_Control *the_region
+)
+{
+  _Objects_Free( &_Region_Information, &the_region->Object );
+}
+
+/*PAGE
+ *
+ *  _Region_Get
+ *
+ */
+
+STATIC INLINE Region_Control *_Region_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+)
+{
+  return (Region_Control *)
+    _Objects_Get( &_Region_Information, id, location );
+}
+
+/*PAGE
+ *
+ *  _Region_Allocate_segment
+ *
+ */
+
+STATIC INLINE void *_Region_Allocate_segment (
+  Region_Control *the_region,
+  unsigned32      size
+)
+{
+   return _Heap_Allocate( &the_region->Memory, size );
+}
+
+/*PAGE
+ *
+ *  _Region_Free_segment
+ *
+ */
+
+STATIC INLINE boolean _Region_Free_segment (
+  Region_Control *the_region,
+  void           *the_segment
+)
+{
+  return _Heap_Free( &the_region->Memory, the_segment );
+}
+
+/*PAGE
+ *
+ *  _Region_Is_null
+ *
+ */
+
+STATIC INLINE boolean _Region_Is_null (
+  Region_Control *the_region
+)
+{
+  return ( the_region == NULL  );
+}
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/rtems/rtems/sem.inl
===================================================================
--- c/src/exec/rtems/inline/rtems/rtems/sem.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/rtems/rtems/sem.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,73 @@
+/*  sem.inl
+ *
+ *  This file contains the static inlin implementation of the inlined
+ *  routines from the Semaphore Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __SEMAPHORE_inl
+#define __SEMAPHORE_inl
+
+/*PAGE
+ *
+ *  _Semaphore_Allocate
+ *
+ */
+
+STATIC INLINE Semaphore_Control *_Semaphore_Allocate( void )
+{
+  return (Semaphore_Control *) _Objects_Allocate( &_Semaphore_Information );
+}
+
+/*PAGE
+ *
+ *  _Semaphore_Free
+ *
+ */
+
+STATIC INLINE void _Semaphore_Free (
+  Semaphore_Control *the_semaphore
+)
+{
+  _Objects_Free( &_Semaphore_Information, &the_semaphore->Object );
+}
+
+/*PAGE
+ *
+ *  _Semaphore_Get
+ *
+ */
+
+STATIC INLINE Semaphore_Control *_Semaphore_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+)
+{
+  return (Semaphore_Control *)
+    _Objects_Get( &_Semaphore_Information, id, location );
+}
+
+/*PAGE
+ *
+ *  _Semaphore_Is_null
+ *
+ */
+
+STATIC INLINE boolean _Semaphore_Is_null (
+  Semaphore_Control *the_semaphore
+)
+{
+  return ( the_semaphore == NULL );
+}
+
+#endif
+/*  end of include file */
Index: c/src/exec/rtems/inline/rtems/rtems/status.inl
===================================================================
--- c/src/exec/rtems/inline/rtems/rtems/status.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/rtems/rtems/status.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,60 @@
+/*  inline/status.inl
+ *
+ *  This include file contains the implementations of the inlined
+ *  routines for the status package.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __INLINE_STATUS_inl
+#define __INLINE_STATUS_inl
+
+/*PAGE
+ *
+ *  rtems_is_status_successful
+ *
+ */
+
+STATIC INLINE boolean rtems_is_status_successful(
+  rtems_status_code code
+)
+{
+  return (code == RTEMS_SUCCESSFUL);
+}
+
+/*PAGE
+ *
+ *  rtems_are_statuses_equal
+ *
+ */
+
+STATIC INLINE boolean rtems_are_statuses_equal(
+  rtems_status_code code1,
+  rtems_status_code code2
+)
+{
+   return (code1 == code2);
+}
+
+/*
+ *  _Status_Is_proxy_blocking
+ *
+ */
+
+STATIC INLINE boolean _Status_Is_proxy_blocking (
+  rtems_status_code code
+)
+{
+  return (code == RTEMS_PROXY_BLOCKING);
+}
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/rtems/rtems/tasks.inl
===================================================================
--- c/src/exec/rtems/inline/rtems/rtems/tasks.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/rtems/rtems/tasks.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,90 @@
+/*  tasks.inl
+ *
+ *  This file contains the static inline implementation of all inlined
+ *  routines in the with RTEMS Tasks Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_TASKS_inl
+#define __RTEMS_TASKS_inl
+
+/*PAGE
+ *
+ *  _RTEMS_tasks_Allocate
+ *
+ */
+
+STATIC INLINE Thread_Control *_RTEMS_tasks_Allocate( void )
+{
+  return (Thread_Control *) _Objects_Allocate( &_Thread_Information );
+}
+
+/*PAGE
+ *
+ *  _RTEMS_tasks_Free
+ *
+ */
+
+STATIC INLINE void _RTEMS_tasks_Free (
+  Thread_Control *the_task
+)
+{
+  _Objects_Free( &_Thread_Information, &the_task->Object );
+}
+
+/*PAGE
+ *
+ *  _RTEMS_tasks_Cancel_wait
+ *
+ */
+
+STATIC INLINE void _RTEMS_tasks_Cancel_wait(
+  Thread_Control *the_thread
+)
+{
+  States_Control state;
+  States_Control remote_state;
+
+  state = the_thread->current_state;
+
+  if ( _States_Is_waiting_on_thread_queue( state ) ) {
+    if ( _States_Is_waiting_for_rpc_reply( state ) &&
+          _States_Is_locally_blocked( state ) ) {
+      remote_state = _States_Clear(
+                       STATES_WAITING_FOR_RPC_REPLY | STATES_TRANSIENT,
+                       state
+                     );
+
+      switch ( remote_state ) {
+
+        case STATES_WAITING_FOR_BUFFER:
+          _Partition_MP_Send_extract_proxy( the_thread );
+          break;
+        case STATES_WAITING_FOR_SEGMENT:
+          _Region_MP_Send_extract_proxy( the_thread );
+          break;
+        case STATES_WAITING_FOR_SEMAPHORE:
+          _Semaphore_MP_Send_extract_proxy( the_thread );
+          break;
+        case STATES_WAITING_FOR_MESSAGE:
+          _Message_queue_MP_Send_extract_proxy( the_thread );
+          break;
+      }
+    }
+    _Thread_queue_Extract( the_thread->Wait.queue, the_thread );
+  }
+  else if ( _Watchdog_Is_active( &the_thread->Timer ) )
+    (void) _Watchdog_Remove( &the_thread->Timer );
+}
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/rtems/rtems/timer.inl
===================================================================
--- c/src/exec/rtems/inline/rtems/rtems/timer.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/rtems/rtems/timer.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,112 @@
+/*  timer.inl
+ *
+ *  This file contains the static inline implementation of the inlined routines
+ *  from the Timer Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __TIMER_inl
+#define __TIMER_inl
+
+/*PAGE
+ *
+ *  _Timer_Allocate
+ *
+ */
+
+STATIC INLINE Timer_Control *_Timer_Allocate( void )
+{
+  return (Timer_Control *) _Objects_Allocate( &_Timer_Information );
+}
+
+/*PAGE
+ *
+ *  _Timer_Free
+ *
+ */
+
+STATIC INLINE void _Timer_Free (
+  Timer_Control *the_timer
+)
+{
+  _Objects_Free( &_Timer_Information, &the_timer->Object );
+}
+
+/*PAGE
+ *
+ *  _Timer_Get
+ *
+ */
+
+STATIC INLINE Timer_Control *_Timer_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+)
+{
+  return (Timer_Control *)
+    _Objects_Get( &_Timer_Information, id, location );
+}
+
+/*PAGE
+ *
+ *  _Timer_Is_interval_class
+ *
+ */
+
+STATIC INLINE boolean _Timer_Is_interval_class (
+  Timer_Classes the_class
+)
+{
+  return ( the_class == TIMER_INTERVAL );
+}
+
+/*PAGE
+ *
+ *  _Timer_Is_time_of_day_class
+ *
+ */
+
+STATIC INLINE boolean _Timer_Is_timer_of_day_class (
+  Timer_Classes the_class
+)
+{
+  return ( the_class == TIMER_TIME_OF_DAY );
+}
+
+/*PAGE
+ *
+ *  _Timer_Is_dormant_class
+ *
+ */
+
+STATIC INLINE boolean _Timer_Is_dormant_class (
+  Timer_Classes the_class
+)
+{
+  return ( the_class == TIMER_DORMANT );
+}
+
+/*PAGE
+ *
+ *  _Timer_Is_null
+ *
+ */
+
+STATIC INLINE boolean _Timer_Is_null (
+  Timer_Control *the_timer
+)
+{
+  return ( the_timer == NULL );
+}
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/sem.inl
===================================================================
--- c/src/exec/rtems/inline/sem.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/sem.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,73 @@
+/*  sem.inl
+ *
+ *  This file contains the static inlin implementation of the inlined
+ *  routines from the Semaphore Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __SEMAPHORE_inl
+#define __SEMAPHORE_inl
+
+/*PAGE
+ *
+ *  _Semaphore_Allocate
+ *
+ */
+
+STATIC INLINE Semaphore_Control *_Semaphore_Allocate( void )
+{
+  return (Semaphore_Control *) _Objects_Allocate( &_Semaphore_Information );
+}
+
+/*PAGE
+ *
+ *  _Semaphore_Free
+ *
+ */
+
+STATIC INLINE void _Semaphore_Free (
+  Semaphore_Control *the_semaphore
+)
+{
+  _Objects_Free( &_Semaphore_Information, &the_semaphore->Object );
+}
+
+/*PAGE
+ *
+ *  _Semaphore_Get
+ *
+ */
+
+STATIC INLINE Semaphore_Control *_Semaphore_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+)
+{
+  return (Semaphore_Control *)
+    _Objects_Get( &_Semaphore_Information, id, location );
+}
+
+/*PAGE
+ *
+ *  _Semaphore_Is_null
+ *
+ */
+
+STATIC INLINE boolean _Semaphore_Is_null (
+  Semaphore_Control *the_semaphore
+)
+{
+  return ( the_semaphore == NULL );
+}
+
+#endif
+/*  end of include file */
Index: c/src/exec/rtems/inline/status.inl
===================================================================
--- c/src/exec/rtems/inline/status.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/status.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,60 @@
+/*  inline/status.inl
+ *
+ *  This include file contains the implementations of the inlined
+ *  routines for the status package.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __INLINE_STATUS_inl
+#define __INLINE_STATUS_inl
+
+/*PAGE
+ *
+ *  rtems_is_status_successful
+ *
+ */
+
+STATIC INLINE boolean rtems_is_status_successful(
+  rtems_status_code code
+)
+{
+  return (code == RTEMS_SUCCESSFUL);
+}
+
+/*PAGE
+ *
+ *  rtems_are_statuses_equal
+ *
+ */
+
+STATIC INLINE boolean rtems_are_statuses_equal(
+  rtems_status_code code1,
+  rtems_status_code code2
+)
+{
+   return (code1 == code2);
+}
+
+/*
+ *  _Status_Is_proxy_blocking
+ *
+ */
+
+STATIC INLINE boolean _Status_Is_proxy_blocking (
+  rtems_status_code code
+)
+{
+  return (code == RTEMS_PROXY_BLOCKING);
+}
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/tasks.inl
===================================================================
--- c/src/exec/rtems/inline/tasks.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/tasks.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,90 @@
+/*  tasks.inl
+ *
+ *  This file contains the static inline implementation of all inlined
+ *  routines in the with RTEMS Tasks Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_TASKS_inl
+#define __RTEMS_TASKS_inl
+
+/*PAGE
+ *
+ *  _RTEMS_tasks_Allocate
+ *
+ */
+
+STATIC INLINE Thread_Control *_RTEMS_tasks_Allocate( void )
+{
+  return (Thread_Control *) _Objects_Allocate( &_Thread_Information );
+}
+
+/*PAGE
+ *
+ *  _RTEMS_tasks_Free
+ *
+ */
+
+STATIC INLINE void _RTEMS_tasks_Free (
+  Thread_Control *the_task
+)
+{
+  _Objects_Free( &_Thread_Information, &the_task->Object );
+}
+
+/*PAGE
+ *
+ *  _RTEMS_tasks_Cancel_wait
+ *
+ */
+
+STATIC INLINE void _RTEMS_tasks_Cancel_wait(
+  Thread_Control *the_thread
+)
+{
+  States_Control state;
+  States_Control remote_state;
+
+  state = the_thread->current_state;
+
+  if ( _States_Is_waiting_on_thread_queue( state ) ) {
+    if ( _States_Is_waiting_for_rpc_reply( state ) &&
+          _States_Is_locally_blocked( state ) ) {
+      remote_state = _States_Clear(
+                       STATES_WAITING_FOR_RPC_REPLY | STATES_TRANSIENT,
+                       state
+                     );
+
+      switch ( remote_state ) {
+
+        case STATES_WAITING_FOR_BUFFER:
+          _Partition_MP_Send_extract_proxy( the_thread );
+          break;
+        case STATES_WAITING_FOR_SEGMENT:
+          _Region_MP_Send_extract_proxy( the_thread );
+          break;
+        case STATES_WAITING_FOR_SEMAPHORE:
+          _Semaphore_MP_Send_extract_proxy( the_thread );
+          break;
+        case STATES_WAITING_FOR_MESSAGE:
+          _Message_queue_MP_Send_extract_proxy( the_thread );
+          break;
+      }
+    }
+    _Thread_queue_Extract( the_thread->Wait.queue, the_thread );
+  }
+  else if ( _Watchdog_Is_active( &the_thread->Timer ) )
+    (void) _Watchdog_Remove( &the_thread->Timer );
+}
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/inline/timer.inl
===================================================================
--- c/src/exec/rtems/inline/timer.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/inline/timer.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,112 @@
+/*  timer.inl
+ *
+ *  This file contains the static inline implementation of the inlined routines
+ *  from the Timer Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __TIMER_inl
+#define __TIMER_inl
+
+/*PAGE
+ *
+ *  _Timer_Allocate
+ *
+ */
+
+STATIC INLINE Timer_Control *_Timer_Allocate( void )
+{
+  return (Timer_Control *) _Objects_Allocate( &_Timer_Information );
+}
+
+/*PAGE
+ *
+ *  _Timer_Free
+ *
+ */
+
+STATIC INLINE void _Timer_Free (
+  Timer_Control *the_timer
+)
+{
+  _Objects_Free( &_Timer_Information, &the_timer->Object );
+}
+
+/*PAGE
+ *
+ *  _Timer_Get
+ *
+ */
+
+STATIC INLINE Timer_Control *_Timer_Get (
+  Objects_Id         id,
+  Objects_Locations *location
+)
+{
+  return (Timer_Control *)
+    _Objects_Get( &_Timer_Information, id, location );
+}
+
+/*PAGE
+ *
+ *  _Timer_Is_interval_class
+ *
+ */
+
+STATIC INLINE boolean _Timer_Is_interval_class (
+  Timer_Classes the_class
+)
+{
+  return ( the_class == TIMER_INTERVAL );
+}
+
+/*PAGE
+ *
+ *  _Timer_Is_time_of_day_class
+ *
+ */
+
+STATIC INLINE boolean _Timer_Is_timer_of_day_class (
+  Timer_Classes the_class
+)
+{
+  return ( the_class == TIMER_TIME_OF_DAY );
+}
+
+/*PAGE
+ *
+ *  _Timer_Is_dormant_class
+ *
+ */
+
+STATIC INLINE boolean _Timer_Is_dormant_class (
+  Timer_Classes the_class
+)
+{
+  return ( the_class == TIMER_DORMANT );
+}
+
+/*PAGE
+ *
+ *  _Timer_Is_null
+ *
+ */
+
+STATIC INLINE boolean _Timer_Is_null (
+  Timer_Control *the_timer
+)
+{
+  return ( the_timer == NULL );
+}
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/asr.inl
===================================================================
--- c/src/exec/rtems/macros/asr.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/asr.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,89 @@
+/*  macros/asr.h
+ *
+ *  This include file contains the implemenation of all routines
+ *  associated with the asynchronous signal handler which are inlined.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __INLINE_ASR_h
+#define __INLINE_ASR_h
+
+#include <rtems/isr.h>
+
+/*PAGE
+ *
+ *  _ASR_Initialize
+ *
+ */
+
+#define _ASR_Initialize( _information ) \
+{ \
+  (_information)->handler         = NULL; \
+  (_information)->mode_set        = RTEMS_DEFAULT_MODES; \
+  (_information)->signals_posted  = 0; \
+  (_information)->signals_pending = 0; \
+  (_information)->nest_level      = 0; \
+}
+
+/*PAGE
+ *
+ *  _ASR_Swap_signals
+ *
+ */
+
+#define _ASR_Swap_signals( _information ) \
+{ \
+  rtems_signal_set _signals; \
+  ISR_Level              _level; \
+   \
+  _ISR_Disable( _level ); \
+    _signals                        = (_information)->signals_pending; \
+    (_information)->signals_pending = (_information)->signals_posted; \
+    (_information)->signals_posted  = _signals; \
+  _ISR_Enable( _level ); \
+}
+
+/*PAGE
+ *
+ *  _ASR_Is_null_handler
+ *
+ */
+
+#define _ASR_Is_null_handler( _asr_handler ) \
+  ( (_asr_handler) == NULL )
+
+/*PAGE
+ *
+ *  _ASR_Are_signals_pending
+ *
+ */
+
+#define _ASR_Are_signals_pending( _information ) \
+ ( (_information)->signals_posted != 0 )
+
+/*PAGE
+ *
+ *  _ASR_Post_signals
+ *
+ */
+
+#define _ASR_Post_signals( _signals, _signal_set ) \
+  do { \
+     ISR_Level _level; \
+     \
+     _ISR_Disable( _level ); \
+       *(_signal_set) |= (_signals); \
+     _ISR_Enable( _level ); \
+  } while ( 0 )
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/attr.inl
===================================================================
--- c/src/exec/rtems/macros/attr.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/attr.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,91 @@
+/*  macros/attr.h
+ *
+ *  This include file contains all of the inlined routines associated
+ *  with attributes.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __MACROS_ATTRIBUTES_h
+#define __MACROS_ATTRIBUTES_h
+
+/*PAGE
+ *
+ *  _Attributes_Set
+ */
+
+#define _Attributes_Set( _new_attributes, _attribute_set ) \
+  ( (_attribute_set) | (_new_attributes) )
+
+/*PAGE
+ *
+ *  _Attributes_Clear
+ */
+
+#define _Attributes_Clear( _attribute_set, _mask ) \
+  ( (_attribute_set) & ~(_mask) )
+
+/*PAGE
+ *
+ *  _Attributes_Is_floating_point
+ *
+ */
+
+#define _Attributes_Is_floating_point( _attribute_set ) \
+  ( (_attribute_set) & RTEMS_FLOATING_POINT )
+
+/*PAGE
+ *
+ *  _Attributes_Is_global
+ *
+ */
+
+#define _Attributes_Is_global( _attribute_set ) \
+  ( (_attribute_set) & RTEMS_GLOBAL )
+
+/*PAGE
+ *
+ *  _Attributes_Is_priority
+ *
+ */
+
+#define _Attributes_Is_priority( _attribute_set ) \
+  ( (_attribute_set) & RTEMS_PRIORITY )
+
+/*PAGE
+ *
+ *  _Attributes_Is_limit
+ *
+ */
+
+#define _Attributes_Is_limit( _attribute_set ) \
+  ( (_attribute_set) & RTEMS_LIMIT )
+
+/*PAGE
+ *
+ *  _Attributes_Is_binary_semaphore
+ *
+ */
+
+#define _Attributes_Is_binary_semaphore( _attribute_set ) \
+  ( (_attribute_set) & RTEMS_BINARY_SEMAPHORE )
+
+/*PAGE
+ *
+ *  _Attributes_Is_inherit_priority
+ *
+ */
+
+#define _Attributes_Is_inherit_priority( _attribute_set ) \
+  ( (_attribute_set) & RTEMS_INHERIT_PRIORITY )
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/dpmem.inl
===================================================================
--- c/src/exec/rtems/macros/dpmem.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/dpmem.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,59 @@
+/*  macros/dpmem.h
+ *
+ *  This include file contains the inline routine used in conjunction
+ *  with the Dual Ported Memory Manager
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __MACROS_DPMEM_h
+#define __MACROS_DPMEM_h
+
+/*PAGE
+ *
+ *  _Dual_ported_memory_Allocate
+ *
+ */
+
+#define _Dual_ported_memory_Allocate() \
+  (Dual_ported_memory_Control *) \
+     _Objects_Allocate( &_Dual_ported_memory_Information )
+
+/*PAGE
+ *
+ *  _Dual_ported_memory_Free
+ *
+ */
+
+#define _Dual_ported_memory_Free( _the_port ) \
+  _Objects_Free( &_Dual_ported_memory_Information, &(_the_port)->Object )
+
+/*PAGE
+ *
+ *  _Dual_ported_memory_Get
+ *
+ */
+
+#define _Dual_ported_memory_Get( _id, _location ) \
+  (Dual_ported_memory_Control *) \
+     _Objects_Get( &_Dual_ported_memory_Information, (_id), (_location) )
+
+
+/*PAGE
+ *
+ *  _Dual_ported_memory_Is_null
+ */
+
+#define _Dual_ported_memory_Is_null( _the_port ) \
+  ( (_the_port) == NULL )
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/event.inl
===================================================================
--- c/src/exec/rtems/macros/event.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/event.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,28 @@
+/*  macros/event.h
+ *
+ *  This include file contains the implementation of macros for
+ *  the Event Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __MACROS_EVENT_h
+#define __MACROS_EVENT_h
+
+/*
+ *  Event_Manager_initialization
+ */
+
+#define _Event_Manager_initialization() \
+  _Event_Sync = FALSE
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/eventset.inl
===================================================================
--- c/src/exec/rtems/macros/eventset.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/eventset.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,53 @@
+/*  eventset.inl
+ *
+ *  This include file contains the macro implementation of inlined
+ *  routines in the event set object.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __EVENT_SET_inl
+#define __EVENT_SET_inl
+
+/*PAGE
+ *
+ *  _Event_sets_Is_empty
+ */
+
+#define _Event_sets_Is_empty( _the_event_set )  \
+  ((_the_event_set) == 0 )
+
+/*PAGE
+ *
+ *  _Event_sets_Is_empty
+ */
+
+#define _Event_sets_Post( _the_new_events, _the_event_set ) \
+   *(_the_event_set) |= (_the_new_events)
+
+/*PAGE
+ *
+ *  _Event_sets_Is_empty
+ */
+
+#define _Event_sets_Get( _the_event_set, _the_event_condition ) \
+   ((_the_event_set) & (_the_event_condition))
+
+/*PAGE
+ *
+ *  _Event_sets_Clear
+ */
+
+#define _Event_sets_Clear( _the_event_set, _the_mask ) \
+   ((_the_event_set) & ~(_the_mask))
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/message.inl
===================================================================
--- c/src/exec/rtems/macros/message.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/message.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,118 @@
+/*  message.inl
+ *
+ *  This include file contains the macro implementation of all
+ *  inlined routines in the Message Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __MESSAGE_QUEUE_inl
+#define __MESSAGE_QUEUE_inl
+
+/*PAGE
+ *
+ *  _Message_queue_Copy_buffer
+ */
+
+#define _Message_queue_Copy_buffer( _source, _destination ) \
+  *(Message_queue_Buffer *)(_destination) = \
+        *(Message_queue_Buffer *)(_source)
+
+/*PAGE
+ *
+ *  _Message_queue_Allocate_message_buffer
+ *
+ */
+
+#define _Message_queue_Allocate_message_buffer() \
+   (Message_queue_Buffer_control *) \
+     _Chain_Get( &_Message_queue_Inactive_messages )
+
+/*PAGE
+ *
+ *  _Message_queue_Free_message_buffer
+ *
+ */
+
+#define _Message_queue_Free_message_buffer( _the_message ) \
+   _Chain_Append( &_Message_queue_Inactive_messages, &(_the_message)->Node )
+
+/*PAGE
+ *
+ *  _Message_queue_Get_pending_message
+ *
+ */
+
+#define _Message_queue_Get_pending_message( _the_message_queue ) \
+   (Message_queue_Buffer_control *) \
+     _Chain_Get_unprotected( &(_the_message_queue)->Pending_messages )
+
+/*PAGE
+ *
+ *  _Message_queue_Append
+ *
+ */
+
+#define _Message_queue_Append( _the_message_queue, _the_message ) \
+   _Chain_Append( &(_the_message_queue)->Pending_messages, \
+                  &(_the_message)->Node )
+
+/*PAGE
+ *
+ *  _Message_queue_Prepend
+ *
+ */
+
+#define _Message_queue_Prepend( _the_message_queue, _the_message ) \
+   _Chain_Prepend( &(_the_message_queue)->Pending_messages, \
+                   &(_the_message)->Node )
+
+/*PAGE
+ *
+ *  _Message_queue_Is_null
+ *
+ */
+
+#define _Message_queue_Is_null( _the_message_queue ) \
+   ( (_the_message_queue) == NULL  )
+
+/*PAGE
+ *
+ *  _Message_queue_Allocate
+ *
+ */
+
+#define _Message_queue_Allocate() \
+  (Message_queue_Control *) \
+      _Objects_Allocate( &_Message_queue_Information )
+
+/*PAGE
+ *
+ *  _Message_queue_Free
+ *
+ */
+
+#define _Message_queue_Free( _the_message_queue ) \
+  _Objects_Free( &_Message_queue_Information, \
+                 &(_the_message_queue)->Object )
+
+/*PAGE
+ *
+ *  _Message_queue_Get
+ *
+ */
+
+#define _Message_queue_Get( _id, _location ) \
+  (Message_queue_Control *) \
+     _Objects_Get( &_Message_queue_Information, (_id), (_location) )
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/modes.inl
===================================================================
--- c/src/exec/rtems/macros/modes.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/modes.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,101 @@
+/*  modes.inl
+ *
+ *  This include file contains the macro implementation of the
+ *  inlined routines in the Mode Handler.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __MODES_inl
+#define __MODES_inl
+
+/*PAGE
+ *
+ *  RTEMS_INTERRUPT_LEVEL
+ */
+
+#define RTEMS_INTERRUPT_LEVEL( _mode_set ) \
+  ( (_mode_set) & RTEMS_INTERRUPT_MASK )
+
+/*PAGE
+ *
+ *  _Modes_Mask_changed
+ *
+ */
+
+#define _Modes_Mask_changed( _mode_set, _masks ) \
+   ( (_mode_set) & (_masks) )
+
+/*PAGE
+ *
+ *  _Modes_Is_asr_disabled
+ *
+ */
+
+#define _Modes_Is_asr_disabled( _mode_set ) \
+   ( (_mode_set) & RTEMS_ASR_MASK )
+
+/*PAGE
+ *
+ *  _Modes_Is_preempt
+ *
+ */
+
+#define _Modes_Is_preempt( _mode_set ) \
+   ( ( (_mode_set) & RTEMS_PREEMPT_MASK ) == RTEMS_PREEMPT )
+
+/*PAGE
+ *
+ *  _Modes_Is_timeslice
+ *
+ */
+
+#define _Modes_Is_timeslice( _mode_set ) \
+  (((_mode_set) & (RTEMS_TIMESLICE_MASK|RTEMS_PREEMPT_MASK)) == \
+                  (RTEMS_TIMESLICE|RTEMS_PREEMPT) )
+
+/*PAGE
+ *
+ *  _Modes_Get_interrupt_level
+ *
+ */
+
+#define _Modes_Get_interrupt_level( _mode_set ) \
+  ( (_mode_set) & RTEMS_INTERRUPT_MASK )
+
+/*PAGE
+ *
+ *  _Modes_Set_interrupt_level
+ *
+ */
+
+#define _Modes_Set_interrupt_level( _mode_set ) \
+   _ISR_Set_level( _Modes_Get_interrupt_level( (_mode_set) ) )
+
+/*PAGE
+ *
+ *  _Modes_Change
+ *
+ */
+
+#define _Modes_Change( _old_mode_set, _new_mode_set, \
+                       _mask, _out_mode_set, _changed ) \
+  { rtems_mode _out_mode; \
+    \
+    _out_mode         =  (_old_mode_set); \
+    _out_mode        &= ~(_mask); \
+    _out_mode        |= (_new_mode_set) & (_mask); \
+    *(_changed)       = _out_mode ^ (_old_mode_set); \
+    *(_out_mode_set)  = _out_mode; \
+  }
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/options.inl
===================================================================
--- c/src/exec/rtems/macros/options.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/options.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,39 @@
+/*  options.inl
+ *
+ *  This file contains the macro implementation of the inlined
+ *  routines from the Options Handler.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __OPTIONS_inl
+#define __OPTIONS_inl
+
+/*PAGE
+ *
+ *  _Options_Is_no_wait
+ *
+ */
+
+#define _Options_Is_no_wait( _option_set ) \
+   ( (_option_set) & RTEMS_NO_WAIT )
+
+/*PAGE
+ *
+ *  _Options_Is_any
+ *
+ */
+
+#define _Options_Is_any( _option_set ) \
+   ( (_option_set) & RTEMS_EVENT_ANY )
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/part.inl
===================================================================
--- c/src/exec/rtems/macros/part.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/part.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,117 @@
+/*  part.inl
+ *
+ *  This file contains the macro implementation of all inlined routines
+ *  in the Partition Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __PARTITION_inl
+#define __PARTITION_inl
+
+/*PAGE
+ *
+ *  _Partition_Allocate_buffer
+ *
+ */
+
+#define _Partition_Allocate_buffer( _the_partition ) \
+  _Chain_Get( &(_the_partition)->Memory )
+
+/*PAGE
+ *
+ *  _Partition_Free_buffer
+ *
+ */
+
+#define _Partition_Free_buffer( _the_partition, _the_buffer ) \
+  _Chain_Append( &(_the_partition)->Memory, (_the_buffer) )
+
+/*PAGE
+ *
+ *  _Partition_Is_buffer_on_boundary
+ *
+ */
+
+#define _Partition_Is_buffer_on_boundary( _the_buffer, _the_partition ) \
+  ((((unsigned32) _Addresses_Subtract( \
+                    (_the_buffer), \
+                    (_the_partition)->starting_address ) \
+                  ) % \
+                  (_the_partition)->buffer_size) == 0)
+
+/*PAGE
+ *
+ *  _Partition_Is_buffer_valid
+ *
+ */
+
+#define _Partition_Is_buffer_valid( _the_buffer, _the_partition ) \
+  ( \
+    _Addresses_Is_in_range( \
+      (_the_buffer), \
+      (_the_partition)->starting_address, \
+      _Addresses_Add_offset( \
+         (_the_partition)->starting_address, \
+         (_the_partition)->length \
+      ) \
+    ) && \
+    _Partition_Is_buffer_on_boundary( (_the_buffer), (_the_partition) ) \
+  )
+
+/*PAGE
+ *
+ *  _Partition_Is_buffer_size_aligned
+ *
+ */
+
+#define _Partition_Is_buffer_size_aligned( _buffer_size ) \
+  ((_buffer_size) % CPU_PARTITION_ALIGNMENT == 0)
+
+/*PAGE
+ *
+ *  _Partition_Allocate
+ *
+ */
+
+#define _Partition_Allocate() \
+  (Partition_Control *) _Objects_Allocate( &_Partition_Information )
+
+/*PAGE
+ *
+ *  _Partition_Free
+ *
+ */
+
+#define _Partition_Free( _the_partition ) \
+  _Objects_Free( &_Partition_Information, &(_the_partition)->Object )
+
+/*PAGE
+ *
+ *  _Partition_Get
+ *
+ */
+
+#define _Partition_Get( _id, _location ) \
+  (Partition_Control *) \
+    _Objects_Get( &_Partition_Information, (_id), (_location) )
+
+/*PAGE
+ *
+ *  _Partition_Is_null
+ *
+ */
+
+#define _Partition_Is_null( _the_partition ) \
+   ( (_the_partition) == NULL  )
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/ratemon.inl
===================================================================
--- c/src/exec/rtems/macros/ratemon.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/ratemon.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,85 @@
+/*  ratemon.inl
+ *
+ *  This file contains the macro implementation of the inlined
+ *  routines in the Rate Monotonic Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RATE_MONOTONIC_inl
+#define __RATE_MONOTONIC_inl
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Allocate
+ *
+ */
+
+#define _Rate_monotonic_Allocate() \
+  (Rate_monotonic_Control *) \
+    _Objects_Allocate( &_Rate_monotonic_Information )
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Free
+ *
+ */
+
+#define _Rate_monotonic_Free( _the_period ) \
+  _Objects_Free( &_Rate_monotonic_Information, &(_the_period)->Object )
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Get
+ *
+ */
+
+#define _Rate_monotonic_Get( _id, _location ) \
+  (Rate_monotonic_Control *) \
+    _Objects_Get( &_Rate_monotonic_Information, (_id), (_location) )
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Is_active
+ *
+ */
+
+#define _Rate_monotonic_Is_active( _the_period ) \
+    ((_the_period)->state == RATE_MONOTONIC_ACTIVE)
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Is_inactive
+ *
+ */
+
+#define _Rate_monotonic_Is_inactive( _the_period ) \
+    ((_the_period)->state == RATE_MONOTONIC_INACTIVE)
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Is_expired
+ *
+ */
+
+#define _Rate_monotonic_Is_expired( _the_period ) \
+    ((_the_period)->state == RATE_MONOTONIC_EXPIRED)
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Is_null
+ *
+ */
+
+#define _Rate_monotonic_Is_null( _the_period )   ( (_the_period) == NULL  )
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/region.inl
===================================================================
--- c/src/exec/rtems/macros/region.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/region.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,75 @@
+/*  region.inl
+ *
+ *  This file contains the macro implementation of the inlined
+ *  routines from the Region Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __REGION_inl
+#define __REGION_inl
+
+/*PAGE
+ *
+ *  _Region_Allocate
+ *
+ */
+
+#define _Region_Allocate() \
+  (Region_Control *) _Objects_Allocate( &_Region_Information )
+
+/*PAGE
+ *
+ *  _Region_Free
+ *
+ */
+
+#define _Region_Free( _the_region ) \
+  _Objects_Free( &_Region_Information, &(_the_region)->Object )
+
+/*PAGE
+ *
+ *  _Region_Get
+ *
+ */
+
+#define _Region_Get( _id, _location ) \
+  (Region_Control *) \
+   _Objects_Get( &_Region_Information, (_id), (_location) )
+
+/*PAGE
+ *
+ *  _Region_Allocate_segment
+ *
+ */
+
+#define _Region_Allocate_segment( _the_region, _size ) \
+   _Heap_Allocate( &(_the_region)->Memory, (_size) )
+
+/*PAGE
+ *
+ *  _Region_Free_segment
+ *
+ */
+
+#define _Region_Free_segment( _the_region, _the_segment ) \
+   _Heap_Free( &(_the_region)->Memory, (_the_segment) )
+
+/*PAGE
+ *
+ *  _Region_Is_null
+ *
+ */
+
+#define _Region_Is_null( _the_region )   ( (_the_region) == NULL  )
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/rtems/rtems/asr.inl
===================================================================
--- c/src/exec/rtems/macros/rtems/rtems/asr.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/rtems/rtems/asr.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,89 @@
+/*  macros/asr.h
+ *
+ *  This include file contains the implemenation of all routines
+ *  associated with the asynchronous signal handler which are inlined.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __INLINE_ASR_h
+#define __INLINE_ASR_h
+
+#include <rtems/isr.h>
+
+/*PAGE
+ *
+ *  _ASR_Initialize
+ *
+ */
+
+#define _ASR_Initialize( _information ) \
+{ \
+  (_information)->handler         = NULL; \
+  (_information)->mode_set        = RTEMS_DEFAULT_MODES; \
+  (_information)->signals_posted  = 0; \
+  (_information)->signals_pending = 0; \
+  (_information)->nest_level      = 0; \
+}
+
+/*PAGE
+ *
+ *  _ASR_Swap_signals
+ *
+ */
+
+#define _ASR_Swap_signals( _information ) \
+{ \
+  rtems_signal_set _signals; \
+  ISR_Level              _level; \
+   \
+  _ISR_Disable( _level ); \
+    _signals                        = (_information)->signals_pending; \
+    (_information)->signals_pending = (_information)->signals_posted; \
+    (_information)->signals_posted  = _signals; \
+  _ISR_Enable( _level ); \
+}
+
+/*PAGE
+ *
+ *  _ASR_Is_null_handler
+ *
+ */
+
+#define _ASR_Is_null_handler( _asr_handler ) \
+  ( (_asr_handler) == NULL )
+
+/*PAGE
+ *
+ *  _ASR_Are_signals_pending
+ *
+ */
+
+#define _ASR_Are_signals_pending( _information ) \
+ ( (_information)->signals_posted != 0 )
+
+/*PAGE
+ *
+ *  _ASR_Post_signals
+ *
+ */
+
+#define _ASR_Post_signals( _signals, _signal_set ) \
+  do { \
+     ISR_Level _level; \
+     \
+     _ISR_Disable( _level ); \
+       *(_signal_set) |= (_signals); \
+     _ISR_Enable( _level ); \
+  } while ( 0 )
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/rtems/rtems/attr.inl
===================================================================
--- c/src/exec/rtems/macros/rtems/rtems/attr.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/rtems/rtems/attr.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,91 @@
+/*  macros/attr.h
+ *
+ *  This include file contains all of the inlined routines associated
+ *  with attributes.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __MACROS_ATTRIBUTES_h
+#define __MACROS_ATTRIBUTES_h
+
+/*PAGE
+ *
+ *  _Attributes_Set
+ */
+
+#define _Attributes_Set( _new_attributes, _attribute_set ) \
+  ( (_attribute_set) | (_new_attributes) )
+
+/*PAGE
+ *
+ *  _Attributes_Clear
+ */
+
+#define _Attributes_Clear( _attribute_set, _mask ) \
+  ( (_attribute_set) & ~(_mask) )
+
+/*PAGE
+ *
+ *  _Attributes_Is_floating_point
+ *
+ */
+
+#define _Attributes_Is_floating_point( _attribute_set ) \
+  ( (_attribute_set) & RTEMS_FLOATING_POINT )
+
+/*PAGE
+ *
+ *  _Attributes_Is_global
+ *
+ */
+
+#define _Attributes_Is_global( _attribute_set ) \
+  ( (_attribute_set) & RTEMS_GLOBAL )
+
+/*PAGE
+ *
+ *  _Attributes_Is_priority
+ *
+ */
+
+#define _Attributes_Is_priority( _attribute_set ) \
+  ( (_attribute_set) & RTEMS_PRIORITY )
+
+/*PAGE
+ *
+ *  _Attributes_Is_limit
+ *
+ */
+
+#define _Attributes_Is_limit( _attribute_set ) \
+  ( (_attribute_set) & RTEMS_LIMIT )
+
+/*PAGE
+ *
+ *  _Attributes_Is_binary_semaphore
+ *
+ */
+
+#define _Attributes_Is_binary_semaphore( _attribute_set ) \
+  ( (_attribute_set) & RTEMS_BINARY_SEMAPHORE )
+
+/*PAGE
+ *
+ *  _Attributes_Is_inherit_priority
+ *
+ */
+
+#define _Attributes_Is_inherit_priority( _attribute_set ) \
+  ( (_attribute_set) & RTEMS_INHERIT_PRIORITY )
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/rtems/rtems/dpmem.inl
===================================================================
--- c/src/exec/rtems/macros/rtems/rtems/dpmem.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/rtems/rtems/dpmem.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,59 @@
+/*  macros/dpmem.h
+ *
+ *  This include file contains the inline routine used in conjunction
+ *  with the Dual Ported Memory Manager
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __MACROS_DPMEM_h
+#define __MACROS_DPMEM_h
+
+/*PAGE
+ *
+ *  _Dual_ported_memory_Allocate
+ *
+ */
+
+#define _Dual_ported_memory_Allocate() \
+  (Dual_ported_memory_Control *) \
+     _Objects_Allocate( &_Dual_ported_memory_Information )
+
+/*PAGE
+ *
+ *  _Dual_ported_memory_Free
+ *
+ */
+
+#define _Dual_ported_memory_Free( _the_port ) \
+  _Objects_Free( &_Dual_ported_memory_Information, &(_the_port)->Object )
+
+/*PAGE
+ *
+ *  _Dual_ported_memory_Get
+ *
+ */
+
+#define _Dual_ported_memory_Get( _id, _location ) \
+  (Dual_ported_memory_Control *) \
+     _Objects_Get( &_Dual_ported_memory_Information, (_id), (_location) )
+
+
+/*PAGE
+ *
+ *  _Dual_ported_memory_Is_null
+ */
+
+#define _Dual_ported_memory_Is_null( _the_port ) \
+  ( (_the_port) == NULL )
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/rtems/rtems/event.inl
===================================================================
--- c/src/exec/rtems/macros/rtems/rtems/event.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/rtems/rtems/event.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,28 @@
+/*  macros/event.h
+ *
+ *  This include file contains the implementation of macros for
+ *  the Event Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __MACROS_EVENT_h
+#define __MACROS_EVENT_h
+
+/*
+ *  Event_Manager_initialization
+ */
+
+#define _Event_Manager_initialization() \
+  _Event_Sync = FALSE
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/rtems/rtems/eventset.inl
===================================================================
--- c/src/exec/rtems/macros/rtems/rtems/eventset.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/rtems/rtems/eventset.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,53 @@
+/*  eventset.inl
+ *
+ *  This include file contains the macro implementation of inlined
+ *  routines in the event set object.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __EVENT_SET_inl
+#define __EVENT_SET_inl
+
+/*PAGE
+ *
+ *  _Event_sets_Is_empty
+ */
+
+#define _Event_sets_Is_empty( _the_event_set )  \
+  ((_the_event_set) == 0 )
+
+/*PAGE
+ *
+ *  _Event_sets_Is_empty
+ */
+
+#define _Event_sets_Post( _the_new_events, _the_event_set ) \
+   *(_the_event_set) |= (_the_new_events)
+
+/*PAGE
+ *
+ *  _Event_sets_Is_empty
+ */
+
+#define _Event_sets_Get( _the_event_set, _the_event_condition ) \
+   ((_the_event_set) & (_the_event_condition))
+
+/*PAGE
+ *
+ *  _Event_sets_Clear
+ */
+
+#define _Event_sets_Clear( _the_event_set, _the_mask ) \
+   ((_the_event_set) & ~(_the_mask))
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/rtems/rtems/message.inl
===================================================================
--- c/src/exec/rtems/macros/rtems/rtems/message.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/rtems/rtems/message.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,118 @@
+/*  message.inl
+ *
+ *  This include file contains the macro implementation of all
+ *  inlined routines in the Message Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __MESSAGE_QUEUE_inl
+#define __MESSAGE_QUEUE_inl
+
+/*PAGE
+ *
+ *  _Message_queue_Copy_buffer
+ */
+
+#define _Message_queue_Copy_buffer( _source, _destination ) \
+  *(Message_queue_Buffer *)(_destination) = \
+        *(Message_queue_Buffer *)(_source)
+
+/*PAGE
+ *
+ *  _Message_queue_Allocate_message_buffer
+ *
+ */
+
+#define _Message_queue_Allocate_message_buffer() \
+   (Message_queue_Buffer_control *) \
+     _Chain_Get( &_Message_queue_Inactive_messages )
+
+/*PAGE
+ *
+ *  _Message_queue_Free_message_buffer
+ *
+ */
+
+#define _Message_queue_Free_message_buffer( _the_message ) \
+   _Chain_Append( &_Message_queue_Inactive_messages, &(_the_message)->Node )
+
+/*PAGE
+ *
+ *  _Message_queue_Get_pending_message
+ *
+ */
+
+#define _Message_queue_Get_pending_message( _the_message_queue ) \
+   (Message_queue_Buffer_control *) \
+     _Chain_Get_unprotected( &(_the_message_queue)->Pending_messages )
+
+/*PAGE
+ *
+ *  _Message_queue_Append
+ *
+ */
+
+#define _Message_queue_Append( _the_message_queue, _the_message ) \
+   _Chain_Append( &(_the_message_queue)->Pending_messages, \
+                  &(_the_message)->Node )
+
+/*PAGE
+ *
+ *  _Message_queue_Prepend
+ *
+ */
+
+#define _Message_queue_Prepend( _the_message_queue, _the_message ) \
+   _Chain_Prepend( &(_the_message_queue)->Pending_messages, \
+                   &(_the_message)->Node )
+
+/*PAGE
+ *
+ *  _Message_queue_Is_null
+ *
+ */
+
+#define _Message_queue_Is_null( _the_message_queue ) \
+   ( (_the_message_queue) == NULL  )
+
+/*PAGE
+ *
+ *  _Message_queue_Allocate
+ *
+ */
+
+#define _Message_queue_Allocate() \
+  (Message_queue_Control *) \
+      _Objects_Allocate( &_Message_queue_Information )
+
+/*PAGE
+ *
+ *  _Message_queue_Free
+ *
+ */
+
+#define _Message_queue_Free( _the_message_queue ) \
+  _Objects_Free( &_Message_queue_Information, \
+                 &(_the_message_queue)->Object )
+
+/*PAGE
+ *
+ *  _Message_queue_Get
+ *
+ */
+
+#define _Message_queue_Get( _id, _location ) \
+  (Message_queue_Control *) \
+     _Objects_Get( &_Message_queue_Information, (_id), (_location) )
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/rtems/rtems/modes.inl
===================================================================
--- c/src/exec/rtems/macros/rtems/rtems/modes.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/rtems/rtems/modes.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,101 @@
+/*  modes.inl
+ *
+ *  This include file contains the macro implementation of the
+ *  inlined routines in the Mode Handler.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __MODES_inl
+#define __MODES_inl
+
+/*PAGE
+ *
+ *  RTEMS_INTERRUPT_LEVEL
+ */
+
+#define RTEMS_INTERRUPT_LEVEL( _mode_set ) \
+  ( (_mode_set) & RTEMS_INTERRUPT_MASK )
+
+/*PAGE
+ *
+ *  _Modes_Mask_changed
+ *
+ */
+
+#define _Modes_Mask_changed( _mode_set, _masks ) \
+   ( (_mode_set) & (_masks) )
+
+/*PAGE
+ *
+ *  _Modes_Is_asr_disabled
+ *
+ */
+
+#define _Modes_Is_asr_disabled( _mode_set ) \
+   ( (_mode_set) & RTEMS_ASR_MASK )
+
+/*PAGE
+ *
+ *  _Modes_Is_preempt
+ *
+ */
+
+#define _Modes_Is_preempt( _mode_set ) \
+   ( ( (_mode_set) & RTEMS_PREEMPT_MASK ) == RTEMS_PREEMPT )
+
+/*PAGE
+ *
+ *  _Modes_Is_timeslice
+ *
+ */
+
+#define _Modes_Is_timeslice( _mode_set ) \
+  (((_mode_set) & (RTEMS_TIMESLICE_MASK|RTEMS_PREEMPT_MASK)) == \
+                  (RTEMS_TIMESLICE|RTEMS_PREEMPT) )
+
+/*PAGE
+ *
+ *  _Modes_Get_interrupt_level
+ *
+ */
+
+#define _Modes_Get_interrupt_level( _mode_set ) \
+  ( (_mode_set) & RTEMS_INTERRUPT_MASK )
+
+/*PAGE
+ *
+ *  _Modes_Set_interrupt_level
+ *
+ */
+
+#define _Modes_Set_interrupt_level( _mode_set ) \
+   _ISR_Set_level( _Modes_Get_interrupt_level( (_mode_set) ) )
+
+/*PAGE
+ *
+ *  _Modes_Change
+ *
+ */
+
+#define _Modes_Change( _old_mode_set, _new_mode_set, \
+                       _mask, _out_mode_set, _changed ) \
+  { rtems_mode _out_mode; \
+    \
+    _out_mode         =  (_old_mode_set); \
+    _out_mode        &= ~(_mask); \
+    _out_mode        |= (_new_mode_set) & (_mask); \
+    *(_changed)       = _out_mode ^ (_old_mode_set); \
+    *(_out_mode_set)  = _out_mode; \
+  }
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/rtems/rtems/options.inl
===================================================================
--- c/src/exec/rtems/macros/rtems/rtems/options.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/rtems/rtems/options.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,39 @@
+/*  options.inl
+ *
+ *  This file contains the macro implementation of the inlined
+ *  routines from the Options Handler.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __OPTIONS_inl
+#define __OPTIONS_inl
+
+/*PAGE
+ *
+ *  _Options_Is_no_wait
+ *
+ */
+
+#define _Options_Is_no_wait( _option_set ) \
+   ( (_option_set) & RTEMS_NO_WAIT )
+
+/*PAGE
+ *
+ *  _Options_Is_any
+ *
+ */
+
+#define _Options_Is_any( _option_set ) \
+   ( (_option_set) & RTEMS_EVENT_ANY )
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/rtems/rtems/part.inl
===================================================================
--- c/src/exec/rtems/macros/rtems/rtems/part.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/rtems/rtems/part.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,117 @@
+/*  part.inl
+ *
+ *  This file contains the macro implementation of all inlined routines
+ *  in the Partition Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __PARTITION_inl
+#define __PARTITION_inl
+
+/*PAGE
+ *
+ *  _Partition_Allocate_buffer
+ *
+ */
+
+#define _Partition_Allocate_buffer( _the_partition ) \
+  _Chain_Get( &(_the_partition)->Memory )
+
+/*PAGE
+ *
+ *  _Partition_Free_buffer
+ *
+ */
+
+#define _Partition_Free_buffer( _the_partition, _the_buffer ) \
+  _Chain_Append( &(_the_partition)->Memory, (_the_buffer) )
+
+/*PAGE
+ *
+ *  _Partition_Is_buffer_on_boundary
+ *
+ */
+
+#define _Partition_Is_buffer_on_boundary( _the_buffer, _the_partition ) \
+  ((((unsigned32) _Addresses_Subtract( \
+                    (_the_buffer), \
+                    (_the_partition)->starting_address ) \
+                  ) % \
+                  (_the_partition)->buffer_size) == 0)
+
+/*PAGE
+ *
+ *  _Partition_Is_buffer_valid
+ *
+ */
+
+#define _Partition_Is_buffer_valid( _the_buffer, _the_partition ) \
+  ( \
+    _Addresses_Is_in_range( \
+      (_the_buffer), \
+      (_the_partition)->starting_address, \
+      _Addresses_Add_offset( \
+         (_the_partition)->starting_address, \
+         (_the_partition)->length \
+      ) \
+    ) && \
+    _Partition_Is_buffer_on_boundary( (_the_buffer), (_the_partition) ) \
+  )
+
+/*PAGE
+ *
+ *  _Partition_Is_buffer_size_aligned
+ *
+ */
+
+#define _Partition_Is_buffer_size_aligned( _buffer_size ) \
+  ((_buffer_size) % CPU_PARTITION_ALIGNMENT == 0)
+
+/*PAGE
+ *
+ *  _Partition_Allocate
+ *
+ */
+
+#define _Partition_Allocate() \
+  (Partition_Control *) _Objects_Allocate( &_Partition_Information )
+
+/*PAGE
+ *
+ *  _Partition_Free
+ *
+ */
+
+#define _Partition_Free( _the_partition ) \
+  _Objects_Free( &_Partition_Information, &(_the_partition)->Object )
+
+/*PAGE
+ *
+ *  _Partition_Get
+ *
+ */
+
+#define _Partition_Get( _id, _location ) \
+  (Partition_Control *) \
+    _Objects_Get( &_Partition_Information, (_id), (_location) )
+
+/*PAGE
+ *
+ *  _Partition_Is_null
+ *
+ */
+
+#define _Partition_Is_null( _the_partition ) \
+   ( (_the_partition) == NULL  )
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/rtems/rtems/ratemon.inl
===================================================================
--- c/src/exec/rtems/macros/rtems/rtems/ratemon.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/rtems/rtems/ratemon.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,85 @@
+/*  ratemon.inl
+ *
+ *  This file contains the macro implementation of the inlined
+ *  routines in the Rate Monotonic Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RATE_MONOTONIC_inl
+#define __RATE_MONOTONIC_inl
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Allocate
+ *
+ */
+
+#define _Rate_monotonic_Allocate() \
+  (Rate_monotonic_Control *) \
+    _Objects_Allocate( &_Rate_monotonic_Information )
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Free
+ *
+ */
+
+#define _Rate_monotonic_Free( _the_period ) \
+  _Objects_Free( &_Rate_monotonic_Information, &(_the_period)->Object )
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Get
+ *
+ */
+
+#define _Rate_monotonic_Get( _id, _location ) \
+  (Rate_monotonic_Control *) \
+    _Objects_Get( &_Rate_monotonic_Information, (_id), (_location) )
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Is_active
+ *
+ */
+
+#define _Rate_monotonic_Is_active( _the_period ) \
+    ((_the_period)->state == RATE_MONOTONIC_ACTIVE)
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Is_inactive
+ *
+ */
+
+#define _Rate_monotonic_Is_inactive( _the_period ) \
+    ((_the_period)->state == RATE_MONOTONIC_INACTIVE)
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Is_expired
+ *
+ */
+
+#define _Rate_monotonic_Is_expired( _the_period ) \
+    ((_the_period)->state == RATE_MONOTONIC_EXPIRED)
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Is_null
+ *
+ */
+
+#define _Rate_monotonic_Is_null( _the_period )   ( (_the_period) == NULL  )
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/rtems/rtems/region.inl
===================================================================
--- c/src/exec/rtems/macros/rtems/rtems/region.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/rtems/rtems/region.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,75 @@
+/*  region.inl
+ *
+ *  This file contains the macro implementation of the inlined
+ *  routines from the Region Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __REGION_inl
+#define __REGION_inl
+
+/*PAGE
+ *
+ *  _Region_Allocate
+ *
+ */
+
+#define _Region_Allocate() \
+  (Region_Control *) _Objects_Allocate( &_Region_Information )
+
+/*PAGE
+ *
+ *  _Region_Free
+ *
+ */
+
+#define _Region_Free( _the_region ) \
+  _Objects_Free( &_Region_Information, &(_the_region)->Object )
+
+/*PAGE
+ *
+ *  _Region_Get
+ *
+ */
+
+#define _Region_Get( _id, _location ) \
+  (Region_Control *) \
+   _Objects_Get( &_Region_Information, (_id), (_location) )
+
+/*PAGE
+ *
+ *  _Region_Allocate_segment
+ *
+ */
+
+#define _Region_Allocate_segment( _the_region, _size ) \
+   _Heap_Allocate( &(_the_region)->Memory, (_size) )
+
+/*PAGE
+ *
+ *  _Region_Free_segment
+ *
+ */
+
+#define _Region_Free_segment( _the_region, _the_segment ) \
+   _Heap_Free( &(_the_region)->Memory, (_the_segment) )
+
+/*PAGE
+ *
+ *  _Region_Is_null
+ *
+ */
+
+#define _Region_Is_null( _the_region )   ( (_the_region) == NULL  )
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/rtems/rtems/sem.inl
===================================================================
--- c/src/exec/rtems/macros/rtems/rtems/sem.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/rtems/rtems/sem.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,58 @@
+/*  sem.inl
+ *
+ *  This file contains the macro implementation of the inlined
+ *  routines from the Semaphore Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __SEMAPHORE_inl
+#define __SEMAPHORE_inl
+
+/*PAGE
+ *
+ *  _Semaphore_Allocate
+ *
+ */
+
+#define _Semaphore_Allocate() \
+  (Semaphore_Control *) _Objects_Allocate( &_Semaphore_Information )
+
+/*PAGE
+ *
+ *  _Semaphore_Free
+ *
+ */
+
+#define _Semaphore_Free( _the_semaphore ) \
+  _Objects_Free( &_Semaphore_Information, &(_the_semaphore)->Object )
+
+/*PAGE
+ *
+ *  _Semaphore_Get
+ *
+ */
+
+#define _Semaphore_Get( _id, _location ) \
+  (Semaphore_Control *) \
+  _Objects_Get( &_Semaphore_Information, (_id), (_location) )
+
+/*PAGE
+ *
+ *  _Semaphore_Is_null
+ *
+ */
+
+#define _Semaphore_Is_null( _the_semaphore ) \
+  ( (_the_semaphore) == NULL )
+
+#endif
+/*  end of include file */
Index: c/src/exec/rtems/macros/rtems/rtems/status.inl
===================================================================
--- c/src/exec/rtems/macros/rtems/rtems/status.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/rtems/rtems/status.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,47 @@
+/*  macros/status.h
+ *
+ *  This include file contains the implementations of the inlined
+ *  routines for the status package.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __MACROS_STATUS_h
+#define __MACROS_STATUS_h
+
+/*PAGE
+ *
+ *  rtems_is_status_successful
+ *
+ */
+
+#define rtems_is_status_successful( _code ) \
+  ( (_code) == RTEMS_SUCCESSFUL )
+
+/*PAGE
+ *
+ *  rtems_are_statuses_equal
+ *
+ */
+
+#define rtems_are_statuses_equal( _code1, _code2 ) \
+   ((_code1) == (_code2))
+
+/*
+ *  _Status_Is_proxy_blocking
+ *
+ */
+
+#define _Status_Is_proxy_blocking( _code ) \
+  ( (_code) == RTEMS_PROXY_BLOCKING )
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/rtems/rtems/tasks.inl
===================================================================
--- c/src/exec/rtems/macros/rtems/rtems/tasks.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/rtems/rtems/tasks.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,82 @@
+/*  tasks.inl
+ *
+ *  This file contains the macro implementation of all inlined
+ *  routines in the with RTEMS Tasks Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_TASKS_inl
+#define __RTEMS_TASKS_inl
+
+/*PAGE
+ *
+ *  _RTEMS_tasks_Allocate
+ *
+ */
+
+#define _RTEMS_tasks_Allocate() \
+  (Thread_Control *) _Objects_Allocate( &_Thread_Information )
+
+/*PAGE
+ *
+ *  _RTEMS_tasks_Free
+ *
+ */
+
+#define _RTEMS_tasks_Free( _the_task ) \
+  _Objects_Free( &_Thread_Information, &(_the_task)->Object )
+
+/*PAGE
+ *
+ *  _RTEMS_tasks_Cancel_wait
+ *
+ */
+
+#define _RTEMS_tasks_Cancel_wait( _the_thread ) \
+  { \
+    States_Control _state; \
+    States_Control _remote_state; \
+    \
+    _state = (_the_thread)->current_state; \
+    \
+    if ( _States_Is_waiting_on_thread_queue( _state ) ) { \
+      if ( _States_Is_waiting_for_rpc_reply( _state ) && \
+            _States_Is_locally_blocked( _state ) ) { \
+        _remote_state = _States_Clear( \
+                       STATES_WAITING_FOR_RPC_REPLY + STATES_TRANSIENT, \
+                       _state \
+                     ); \
+        \
+        switch ( _remote_state ) { \
+          \
+          case STATES_WAITING_FOR_BUFFER: \
+            _Partition_MP_Send_extract_proxy( (_the_thread) ); \
+            break; \
+          case STATES_WAITING_FOR_SEGMENT: \
+            _Region_MP_Send_extract_proxy( (_the_thread) ); \
+            break; \
+          case STATES_WAITING_FOR_SEMAPHORE: \
+            _Semaphore_MP_Send_extract_proxy( (_the_thread) ); \
+            break; \
+          case STATES_WAITING_FOR_MESSAGE: \
+            _Message_queue_MP_Send_extract_proxy( (_the_thread) ); \
+            break; \
+        } \
+      } \
+      _Thread_queue_Extract( (_the_thread)->Wait.queue, (_the_thread) ); \
+    } \
+    else if ( _Watchdog_Is_active( &(_the_thread)->Timer ) ) \
+      (void) _Watchdog_Remove( &(_the_thread)->Timer ); \
+  }
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/rtems/rtems/timer.inl
===================================================================
--- c/src/exec/rtems/macros/rtems/rtems/timer.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/rtems/rtems/timer.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,85 @@
+/*  timer.inl
+ *
+ *  This file contains the macro implementation of the inlined routines
+ *  from the Timer Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __TIMER_inl
+#define __TIMER_inl
+
+/*PAGE
+ *
+ *  _Timer_Allocate
+ *
+ */
+
+#define _Timer_Allocate() \
+  (Timer_Control *) _Objects_Allocate( &_Timer_Information )
+
+/*PAGE
+ *
+ *  _Timer_Free
+ *
+ */
+
+#define _Timer_Free( _the_timer ) \
+  _Objects_Free( &_Timer_Information, &(_the_timer)->Object )
+
+/*PAGE
+ *
+ *  _Timer_Get
+ *
+ */
+
+#define _Timer_Get( _id, _location ) \
+  (Timer_Control *) \
+    _Objects_Get( &_Timer_Information, (_id), (_location) )
+
+/*PAGE
+ *
+ *  _Timer_Is_interval_class
+ *
+ */
+
+#define _Timer_Is_interval_class( _the_class ) \
+  ( (_the_class) == TIMER_INTERVAL )
+
+/*PAGE
+ *
+ *  _Timer_Is_time_of_day_class
+ *
+ */
+
+#define _Timer_Is_time_of_day_class( _the_class ) \
+  ( (_the_class) == TIMER_TIME_OF_DAY )
+
+/*PAGE
+ *
+ *  _Timer_Is_dormant_class
+ *
+ */
+
+#define _Timer_Is_dormant_class( _the_class ) \
+  ( (_the_class) == TIMER_DORMANT )
+
+/*PAGE
+ *
+ *  _Timer_Is_null
+ *
+ */
+
+#define _Timer_Is_null( _the_timer ) \
+  ( (_the_timer) == NULL )
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/sem.inl
===================================================================
--- c/src/exec/rtems/macros/sem.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/sem.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,58 @@
+/*  sem.inl
+ *
+ *  This file contains the macro implementation of the inlined
+ *  routines from the Semaphore Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __SEMAPHORE_inl
+#define __SEMAPHORE_inl
+
+/*PAGE
+ *
+ *  _Semaphore_Allocate
+ *
+ */
+
+#define _Semaphore_Allocate() \
+  (Semaphore_Control *) _Objects_Allocate( &_Semaphore_Information )
+
+/*PAGE
+ *
+ *  _Semaphore_Free
+ *
+ */
+
+#define _Semaphore_Free( _the_semaphore ) \
+  _Objects_Free( &_Semaphore_Information, &(_the_semaphore)->Object )
+
+/*PAGE
+ *
+ *  _Semaphore_Get
+ *
+ */
+
+#define _Semaphore_Get( _id, _location ) \
+  (Semaphore_Control *) \
+  _Objects_Get( &_Semaphore_Information, (_id), (_location) )
+
+/*PAGE
+ *
+ *  _Semaphore_Is_null
+ *
+ */
+
+#define _Semaphore_Is_null( _the_semaphore ) \
+  ( (_the_semaphore) == NULL )
+
+#endif
+/*  end of include file */
Index: c/src/exec/rtems/macros/status.inl
===================================================================
--- c/src/exec/rtems/macros/status.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/status.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,47 @@
+/*  macros/status.h
+ *
+ *  This include file contains the implementations of the inlined
+ *  routines for the status package.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __MACROS_STATUS_h
+#define __MACROS_STATUS_h
+
+/*PAGE
+ *
+ *  rtems_is_status_successful
+ *
+ */
+
+#define rtems_is_status_successful( _code ) \
+  ( (_code) == RTEMS_SUCCESSFUL )
+
+/*PAGE
+ *
+ *  rtems_are_statuses_equal
+ *
+ */
+
+#define rtems_are_statuses_equal( _code1, _code2 ) \
+   ((_code1) == (_code2))
+
+/*
+ *  _Status_Is_proxy_blocking
+ *
+ */
+
+#define _Status_Is_proxy_blocking( _code ) \
+  ( (_code) == RTEMS_PROXY_BLOCKING )
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/tasks.inl
===================================================================
--- c/src/exec/rtems/macros/tasks.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/tasks.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,82 @@
+/*  tasks.inl
+ *
+ *  This file contains the macro implementation of all inlined
+ *  routines in the with RTEMS Tasks Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __RTEMS_TASKS_inl
+#define __RTEMS_TASKS_inl
+
+/*PAGE
+ *
+ *  _RTEMS_tasks_Allocate
+ *
+ */
+
+#define _RTEMS_tasks_Allocate() \
+  (Thread_Control *) _Objects_Allocate( &_Thread_Information )
+
+/*PAGE
+ *
+ *  _RTEMS_tasks_Free
+ *
+ */
+
+#define _RTEMS_tasks_Free( _the_task ) \
+  _Objects_Free( &_Thread_Information, &(_the_task)->Object )
+
+/*PAGE
+ *
+ *  _RTEMS_tasks_Cancel_wait
+ *
+ */
+
+#define _RTEMS_tasks_Cancel_wait( _the_thread ) \
+  { \
+    States_Control _state; \
+    States_Control _remote_state; \
+    \
+    _state = (_the_thread)->current_state; \
+    \
+    if ( _States_Is_waiting_on_thread_queue( _state ) ) { \
+      if ( _States_Is_waiting_for_rpc_reply( _state ) && \
+            _States_Is_locally_blocked( _state ) ) { \
+        _remote_state = _States_Clear( \
+                       STATES_WAITING_FOR_RPC_REPLY + STATES_TRANSIENT, \
+                       _state \
+                     ); \
+        \
+        switch ( _remote_state ) { \
+          \
+          case STATES_WAITING_FOR_BUFFER: \
+            _Partition_MP_Send_extract_proxy( (_the_thread) ); \
+            break; \
+          case STATES_WAITING_FOR_SEGMENT: \
+            _Region_MP_Send_extract_proxy( (_the_thread) ); \
+            break; \
+          case STATES_WAITING_FOR_SEMAPHORE: \
+            _Semaphore_MP_Send_extract_proxy( (_the_thread) ); \
+            break; \
+          case STATES_WAITING_FOR_MESSAGE: \
+            _Message_queue_MP_Send_extract_proxy( (_the_thread) ); \
+            break; \
+        } \
+      } \
+      _Thread_queue_Extract( (_the_thread)->Wait.queue, (_the_thread) ); \
+    } \
+    else if ( _Watchdog_Is_active( &(_the_thread)->Timer ) ) \
+      (void) _Watchdog_Remove( &(_the_thread)->Timer ); \
+  }
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/macros/timer.inl
===================================================================
--- c/src/exec/rtems/macros/timer.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/macros/timer.inl	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,85 @@
+/*  timer.inl
+ *
+ *  This file contains the macro implementation of the inlined routines
+ *  from the Timer Manager.
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#ifndef __TIMER_inl
+#define __TIMER_inl
+
+/*PAGE
+ *
+ *  _Timer_Allocate
+ *
+ */
+
+#define _Timer_Allocate() \
+  (Timer_Control *) _Objects_Allocate( &_Timer_Information )
+
+/*PAGE
+ *
+ *  _Timer_Free
+ *
+ */
+
+#define _Timer_Free( _the_timer ) \
+  _Objects_Free( &_Timer_Information, &(_the_timer)->Object )
+
+/*PAGE
+ *
+ *  _Timer_Get
+ *
+ */
+
+#define _Timer_Get( _id, _location ) \
+  (Timer_Control *) \
+    _Objects_Get( &_Timer_Information, (_id), (_location) )
+
+/*PAGE
+ *
+ *  _Timer_Is_interval_class
+ *
+ */
+
+#define _Timer_Is_interval_class( _the_class ) \
+  ( (_the_class) == TIMER_INTERVAL )
+
+/*PAGE
+ *
+ *  _Timer_Is_time_of_day_class
+ *
+ */
+
+#define _Timer_Is_time_of_day_class( _the_class ) \
+  ( (_the_class) == TIMER_TIME_OF_DAY )
+
+/*PAGE
+ *
+ *  _Timer_Is_dormant_class
+ *
+ */
+
+#define _Timer_Is_dormant_class( _the_class ) \
+  ( (_the_class) == TIMER_DORMANT )
+
+/*PAGE
+ *
+ *  _Timer_Is_null
+ *
+ */
+
+#define _Timer_Is_null( _the_timer ) \
+  ( (_the_timer) == NULL )
+
+#endif
+/* end of include file */
Index: c/src/exec/rtems/optman/no-dpmem.c
===================================================================
--- c/src/exec/rtems/optman/no-dpmem.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/optman/no-dpmem.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,69 @@
+/*
+ *  Dual Port Memory Manager
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/address.h>
+#include <rtems/dpmem.h>
+#include <rtems/object.h>
+#include <rtems/thread.h>
+
+void _Dual_ported_memory_Manager_initialization(
+  unsigned32 maximum_ports
+)
+{
+}
+
+rtems_status_code rtems_port_create(
+  Objects_Name  name,
+  void         *internal_start,
+  void         *external_start,
+  unsigned32    length,
+  Objects_Id   *id
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_port_ident(
+  Objects_Name  name,
+  Objects_Id   *id
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_port_delete(
+  Objects_Id id
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_port_internal_to_external(
+  Objects_Id   id,
+  void        *internal,
+  void       **external
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_port_external_to_internal(
+  Objects_Id   id,
+  void        *external,
+  void       **internal
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
Index: c/src/exec/rtems/optman/no-event.c
===================================================================
--- c/src/exec/rtems/optman/no-event.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/optman/no-event.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,60 @@
+/*
+ *  Event Manager
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/event.h>
+#include <rtems/isr.h>
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/states.h>
+#include <rtems/thread.h>
+
+rtems_status_code rtems_event_send(
+  Objects_Id         id,
+  rtems_event_set event_in
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_event_receive(
+  rtems_event_set  event_in,
+  rtems_option     option_set,
+  rtems_interval   ticks,
+  rtems_event_set *event_out
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+void _Event_Seize(
+  rtems_event_set event_in,
+  rtems_option    option_set,
+  rtems_interval  ticks
+)
+{
+}
+
+void _Event_Surrender(
+  Thread_Control *the_thread
+)
+{
+}
+
+void _Event_Timeout(
+  Objects_Id  id,
+  void       *ignored
+)
+{
+}
Index: c/src/exec/rtems/optman/no-mp.c
===================================================================
--- c/src/exec/rtems/optman/no-mp.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/optman/no-mp.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,101 @@
+/*
+ *  Multiprocessing Manager
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/config.h>
+#include <rtems/cpu.h>
+#include <rtems/event.h>
+#include <rtems/fatal.h>
+#include <rtems/intthrd.h>
+#include <rtems/message.h>
+#include <rtems/mp.h>
+#include <rtems/mpci.h>
+#include <rtems/mppkt.h>
+#include <rtems/part.h>
+#include <rtems/sem.h>
+#include <rtems/signal.h>
+#include <rtems/states.h>
+#include <rtems/tasks.h>
+#include <rtems/thread.h>
+#include <rtems/threadq.h>
+#include <rtems/watchdog.h>
+
+void _Multiprocessing_Manager_initialization ( void )
+{
+}
+
+void rtems_multiprocessing_announce ( void )
+{
+}
+
+Thread _Multiprocessing_Receive_server (
+  Thread_Argument ignored
+)
+{
+}
+
+void _MPCI_Handler_initialization ( void )
+{
+}
+
+void _MPCI_Initialization ( void )
+{
+}
+
+rtems_packet_prefix *_MPCI_Get_packet ( void )
+{
+  return NULL;
+}
+
+void _MPCI_Return_packet (
+  rtems_packet_prefix   *the_packet
+)
+{
+}
+
+void _MPCI_Send_process_packet (
+  unsigned32          destination,
+  rtems_packet_prefix   *the_packet
+)
+{
+}
+
+rtems_status_code _MPCI_Send_request_packet (
+  unsigned32          destination,
+  rtems_packet_prefix   *the_packet,
+  States_Control      extra_state
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+void _MPCI_Send_response_packet (
+  unsigned32          destination,
+  rtems_packet_prefix   *the_packet
+)
+{
+}
+
+rtems_packet_prefix  *_MPCI_Receive_packet ( void )
+{
+  return NULL;
+}
+
+Thread_Control *_MPCI_Process_response (
+  rtems_packet_prefix  *the_packet
+)
+{
+  return NULL;
+}
Index: c/src/exec/rtems/optman/no-msg.c
===================================================================
--- c/src/exec/rtems/optman/no-msg.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/optman/no-msg.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,128 @@
+/*
+ *  Message Queue Manager
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/attr.h>
+#include <rtems/chain.h>
+#include <rtems/config.h>
+#include <rtems/isr.h>
+#include <rtems/message.h>
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/states.h>
+#include <rtems/thread.h>
+#include <rtems/wkspace.h>
+
+void _Message_queue_Manager_initialization(
+  unsigned32 maximum_message_queues,
+  unsigned32 maximum_messages
+)
+{
+}
+
+rtems_status_code rtems_message_queue_create(
+  Objects_Name        name,
+  unsigned32          count,
+  rtems_attribute  attribute_set,
+  Objects_Id         *id
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_message_queue_ident(
+  Objects_Name  name,
+  unsigned32    node,
+  Objects_Id   *id
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_message_queue_delete(
+  Objects_Id id
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_message_queue_send(
+  Objects_Id            id,
+  void                 *buffer
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_message_queue_urgent(
+  Objects_Id            id,
+  void                 *buffer
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_message_queue_broadcast(
+  Objects_Id            id,
+  void                 *buffer,
+  unsigned32           *count
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_message_queue_receive(
+  Objects_Id            id,
+  void                 *buffer,
+  unsigned32            option_set,
+  rtems_interval     timeout
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_message_queue_flush(
+  Objects_Id  id,
+  unsigned32 *count
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+unsigned32 _Message_queue_Flush_support(
+  Message_queue_Control *the_message_queue
+)
+{
+  return 0;
+}
+
+boolean _Message_queue_Seize(
+  Message_queue_Control  *the_message_queue,
+  rtems_option         option_set,
+  Message_queue_Buffer   *buffer
+)
+{
+  _Thread_Executing->Wait.return_code = RTEMS_UNSATISFIED;
+  return TRUE;
+}
+
+rtems_status_code _Message_queue_Submit(
+  Objects_Id                  id,
+  Message_queue_Buffer       *buffer,
+  Message_queue_Submit_types  submit_type
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
Index: c/src/exec/rtems/optman/no-part.c
===================================================================
--- c/src/exec/rtems/optman/no-part.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/optman/no-part.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,71 @@
+/*
+ *  Partition Manager
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/address.h>
+#include <rtems/config.h>
+#include <rtems/object.h>
+#include <rtems/part.h>
+#include <rtems/thread.h>
+
+void _Partition_Manager_initialization(
+  unsigned32 maximum_partitions
+)
+{
+}
+
+rtems_status_code rtems_partition_create(
+  Objects_Name        name,
+  void               *starting_address,
+  unsigned32          length,
+  unsigned32          buffer_size,
+  rtems_attribute  attribute_set,
+  Objects_Id         *id
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_partition_ident(
+  Objects_Name  name,
+  unsigned32    node,
+  Objects_Id   *id
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_partition_delete(
+  Objects_Id id
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_partition_get_buffer(
+  Objects_Id   id,
+  void       **buffer
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_partition_return_buffer(
+  Objects_Id  id,
+  void       *buffer
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
Index: c/src/exec/rtems/optman/no-region.c
===================================================================
--- c/src/exec/rtems/optman/no-region.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/optman/no-region.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,83 @@
+/*
+ *  Region Manager
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/config.h>
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/region.h>
+#include <rtems/states.h>
+#include <rtems/thread.h>
+
+void _Region_Manager_initialization(
+  unsigned32 maximum_regions
+)
+{
+}
+
+rtems_status_code rtems_region_create(
+  Objects_Name        name,
+  void               *starting_address,
+  unsigned32          length,
+  unsigned32          page_size,
+  rtems_attribute  attribute_set,
+  Objects_Id         *id
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_region_ident(
+  Objects_Name  name,
+  Objects_Id   *id
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_region_delete(
+  Objects_Id id
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_region_get_segment(
+  Objects_Id         id,
+  unsigned32         size,
+  rtems_option    option_set,
+  rtems_interval  timeout,
+  void              **segment
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_region_get_segment_size(
+  Objects_Id         id,
+  void              *segment,
+  unsigned32        *size
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_region_return_segment(
+  Objects_Id  id,
+  void       *segment
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
Index: c/src/exec/rtems/optman/no-rtmon.c
===================================================================
--- c/src/exec/rtems/optman/no-rtmon.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/optman/no-rtmon.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,78 @@
+/*
+ *  Rate Monotonic Manager
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/isr.h>
+#include <rtems/object.h>
+#include <rtems/ratemon.h>
+#include <rtems/thread.h>
+
+void _Rate_monotonic_Manager_initialization(
+  unsigned32 maximum_periods
+)
+{
+}
+
+rtems_status_code rtems_rate_monotonic_create(
+  Objects_Name  name,
+  Objects_Id   *id
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_rate_monotonic_ident(
+  Objects_Name  name,
+  Objects_Id   *id
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_rate_monotonic_cancel(
+  Objects_Id id
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_rate_monotonic_delete(
+  Objects_Id id
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_rate_monotonic_period(
+  Objects_Id        id,
+  rtems_interval length
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+void _Rate_monotonic_Timeout(
+  Objects_Id  id,
+  void       *ignored
+)
+{
+}
+
+boolean _Rate_monotonic_Set_state(
+Rate_monotonic_Control *the_period
+)
+{
+  return( FALSE );
+}
Index: c/src/exec/rtems/optman/no-sem.c
===================================================================
--- c/src/exec/rtems/optman/no-sem.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/optman/no-sem.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,82 @@
+/*
+ *  Semaphore Manager
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/attr.h>
+#include <rtems/config.h>
+#include <rtems/isr.h>
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/sem.h>
+#include <rtems/states.h>
+#include <rtems/thread.h>
+#include <rtems/threadq.h>
+
+void _Semaphore_Manager_initialization(
+  unsigned32 maximum_semaphores
+)
+{
+}
+
+rtems_status_code rtems_semaphore_create(
+  Objects_Name        name,
+  unsigned32          count,
+  rtems_attribute  attribute_set,
+  Objects_Id         *id
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_semaphore_ident(
+  Objects_Name  name,
+  unsigned32    node,
+  Objects_Id   *id
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_semaphore_delete(
+  Objects_Id id
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_semaphore_obtain(
+  Objects_Id        id,
+  unsigned32        option_set,
+  rtems_interval timeout
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_semaphore_release(
+  Objects_Id id
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+boolean _Semaphore_Seize(
+  Semaphore_Control *the_semaphore,
+  rtems_option    option_set
+)
+{
+  _Thread_Executing->Wait.return_code = RTEMS_UNSATISFIED;
+  return( TRUE );
+}
Index: c/src/exec/rtems/optman/no-signal.c
===================================================================
--- c/src/exec/rtems/optman/no-signal.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/optman/no-signal.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,37 @@
+/*
+ *  Signal Manager
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/asr.h>
+#include <rtems/isr.h>
+#include <rtems/modes.h>
+#include <rtems/signal.h>
+#include <rtems/thread.h>
+
+rtems_status_code rtems_signal_catch(
+  rtems_asr_entry   handler,
+  rtems_mode mode_set
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_signal_send(
+  Objects_Id             id,
+  rtems_signal_set signal_set
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
Index: c/src/exec/rtems/optman/no-timer.c
===================================================================
--- c/src/exec/rtems/optman/no-timer.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/optman/no-timer.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,84 @@
+/*
+ *  Timer Manager
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/object.h>
+#include <rtems/thread.h>
+#include <rtems/timer.h>
+#include <rtems/tod.h>
+#include <rtems/watchdog.h>
+
+void _Timer_Manager_initialization(
+  unsigned32 maximum_timers
+)
+{
+}
+
+rtems_status_code rtems_timer_create(
+  Objects_Name  name,
+  Objects_Id   *id
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_timer_ident(
+  Objects_Name  name,
+  Objects_Id   *id
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_timer_cancel(
+  Objects_Id id
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_timer_delete(
+  Objects_Id id
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_timer_fire_after(
+  Objects_Id         id,
+  rtems_interval  ticks,
+  Timer_Service      routine,
+  void              *user_data
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_timer_fire_when(
+  Objects_Id          id,
+  rtems_time_of_day        *wall_time,
+  Timer_Service       routine,
+  void               *user_data
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
+
+rtems_status_code rtems_timer_reset(
+  Objects_Id id
+)
+{
+  return( RTEMS_NOT_CONFIGURED );
+}
Index: c/src/exec/rtems/src/clock.c
===================================================================
--- c/src/exec/rtems/src/clock.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/src/clock.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,153 @@
+/*
+ *  Clock Manager
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/clock.h>
+#include <rtems/config.h>
+#include <rtems/isr.h>
+#include <rtems/thread.h>
+#include <rtems/tod.h>
+#include <rtems/watchdog.h>
+
+/*PAGE
+ *
+ *  rtems_clock_get
+ *
+ *  This directive returns the current date and time.  If the time has
+ *  not been set by a tm_set then an error is returned.
+ *
+ *  Input parameters:
+ *    option      - which value to return
+ *    time_buffer - pointer to output buffer (a time and date structure
+ *                  or an interval)
+ *
+ *  Output parameters:
+ *    time_buffer      - output filled in
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code       - if unsuccessful
+ */
+
+rtems_status_code rtems_clock_get(
+  rtems_clock_get_options  option,
+  void                    *time_buffer
+)
+{
+  ISR_Level      level;
+  rtems_interval tmp;
+
+  switch ( option ) {
+    case RTEMS_CLOCK_GET_TOD:
+      if ( !_TOD_Is_set() )
+        return( RTEMS_NOT_DEFINED );
+
+      *(rtems_time_of_day *)time_buffer = _TOD_Current;
+      return( RTEMS_SUCCESSFUL );
+
+    case RTEMS_CLOCK_GET_SECONDS_SINCE_EPOCH:
+      if ( !_TOD_Is_set() )
+        return( RTEMS_NOT_DEFINED );
+
+      *(rtems_interval *)time_buffer = _TOD_Seconds_since_epoch;
+      return( RTEMS_SUCCESSFUL );
+
+    case RTEMS_CLOCK_GET_TICKS_SINCE_BOOT:
+      *(rtems_interval *)time_buffer = _TOD_Ticks_since_boot;
+      return( RTEMS_SUCCESSFUL );
+
+    case RTEMS_CLOCK_GET_TICKS_PER_SECOND:
+      *(rtems_interval *)time_buffer = _TOD_Ticks_per_second;
+      return( RTEMS_SUCCESSFUL );
+
+    case RTEMS_CLOCK_GET_TIME_VALUE:
+      if ( !_TOD_Is_set() )
+        return( RTEMS_NOT_DEFINED );
+
+      _ISR_Disable( level );
+        ((rtems_clock_time_value *)time_buffer)->seconds =
+          _TOD_Seconds_since_epoch;
+        tmp = _TOD_Current.ticks;
+      _ISR_Enable( level );
+
+      tmp *= _Configuration_Table->microseconds_per_tick;
+      ((rtems_clock_time_value *)time_buffer)->microseconds = tmp;
+
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  return( RTEMS_SUCCESSFUL );   /* should never get here */
+
+}
+
+/*PAGE
+ *
+ *  rtems_clock_set
+ *
+ *  This directive sets the date and time for this node.
+ *
+ *  Input parameters:
+ *    time_buffer - pointer to the time and date structure
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_clock_set(
+  rtems_time_of_day *time_buffer
+)
+{
+  rtems_status_code      local_result;
+  rtems_interval seconds;
+
+  local_result = _TOD_Validate( time_buffer );
+  if ( rtems_is_status_successful( local_result ) ) {
+    seconds = _TOD_To_seconds( time_buffer );
+    _Thread_Disable_dispatch();
+      _TOD_Set( time_buffer, seconds );
+    _Thread_Enable_dispatch();
+
+  }
+  return( local_result );
+}
+
+/*PAGE
+ *
+ *  rtems_clock_tick
+ *
+ *  This directive notifies the executve that a tick has occurred.
+ *  When the tick occurs the time manager updates and maintains
+ *  the calendar time, timeslicing, and any timeout delays.
+ *
+ *  Input parameters:  NONE
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - always succeeds
+ *
+ *  NOTE: This routine only works for leap-years through 2099.
+ */
+
+rtems_status_code rtems_clock_tick( void )
+{
+  _TOD_Tickle_ticks();
+
+  _Watchdog_Tickle_ticks();
+
+  _Thread_Tickle_timeslice();
+
+  if ( _Thread_Is_context_switch_necessary() &&
+       _Thread_Is_dispatching_enabled() )
+    _Thread_Dispatch();
+
+  return( RTEMS_SUCCESSFUL );
+}
Index: c/src/exec/rtems/src/dpmem.c
===================================================================
--- c/src/exec/rtems/src/dpmem.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/src/dpmem.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,268 @@
+/*
+ *  Dual Port Memory Manager
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/address.h>
+#include <rtems/dpmem.h>
+#include <rtems/object.h>
+#include <rtems/thread.h>
+
+/*PAGE
+ *
+ *  _Dual_ported_memory_Manager_initialization
+ *
+ *  This routine initializes all dual-ported memory manager related
+ *  data structures.
+ *
+ *  Input parameters:
+ *    maximum_ports - number of ports to initialize
+ *
+ *  Output parameters:  NONE
+ */
+
+void _Dual_ported_memory_Manager_initialization(
+  unsigned32 maximum_ports
+)
+{
+  _Objects_Initialize_information(
+     &_Dual_ported_memory_Information,
+     FALSE,
+     maximum_ports,
+     sizeof( Dual_ported_memory_Control )
+  );
+}
+
+/*PAGE
+ *
+ *  rtems_port_create
+ *
+ *  This directive creates a port into a dual-ported memory area.
+ *
+ *  Input parameters:
+ *    name           - user defined port name
+ *    internal_start - internal start address of port
+ *    external_start - external start address of port
+ *    length         - physical length in bytes
+ *    id             - address of port id to set
+ *
+ *  Output parameters:
+ *    id       - port id
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code - if unsuccessful
+ */
+
+rtems_status_code rtems_port_create(
+  Objects_Name  name,
+  void         *internal_start,
+  void         *external_start,
+  unsigned32    length,
+  Objects_Id   *id
+)
+{
+  register Dual_ported_memory_Control *the_port;
+
+  if ( !_Objects_Is_name_valid( name) )
+    return ( RTEMS_INVALID_NAME );
+
+  if ( !_Addresses_Is_aligned( internal_start ) ||
+       !_Addresses_Is_aligned( external_start ) )
+    return( RTEMS_INVALID_ADDRESS );
+
+  _Thread_Disable_dispatch();             /* to prevent deletion */
+
+  the_port = _Dual_ported_memory_Allocate();
+
+  if ( !the_port ) {
+    _Thread_Enable_dispatch();
+    return( RTEMS_TOO_MANY );
+  }
+
+  the_port->internal_base = internal_start;
+  the_port->external_base = external_start;
+  the_port->length        = length - 1;
+
+  _Objects_Open( &_Dual_ported_memory_Information,
+                 &the_port->Object, name );
+  *id = the_port->Object.id;
+  _Thread_Enable_dispatch();
+  return( RTEMS_SUCCESSFUL );
+}
+
+/*PAGE
+ *
+ *  rtems_port_ident
+ *
+ *  This directive returns the system ID associated with
+ *  the port name.
+ *
+ *  Input parameters:
+ *    name - user defined port name
+ *    id   - pointer to port id
+ *
+ *  Output parameters:
+ *    *id      - port id
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code - if unsuccessful
+ */
+
+rtems_status_code rtems_port_ident(
+  Objects_Name  name,
+  Objects_Id   *id
+)
+{
+  return(
+    _Objects_Name_to_id(
+      &_Dual_ported_memory_Information,
+      name,
+      RTEMS_SEARCH_ALL_NODES,
+      id
+    )
+  );
+}
+
+/*PAGE
+ *
+ *  rtems_port_delete
+ *
+ *  This directive allows a thread to delete a dual-ported memory area
+ *  specified by the dual-ported memory identifier.
+ *
+ *  Input parameters:
+ *    id - dual-ported memory area id
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_port_delete(
+  Objects_Id id
+)
+{
+  register Dual_ported_memory_Control *the_port;
+  Objects_Locations                    location;
+
+  the_port = _Dual_ported_memory_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:        /* this error cannot be returned */
+      return( RTEMS_INTERNAL_ERROR );
+    case OBJECTS_LOCAL:
+      _Objects_Close( &_Dual_ported_memory_Information, &the_port->Object );
+      _Dual_ported_memory_Free( the_port );
+      _Thread_Enable_dispatch();
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_port_internal_to_external
+ *
+ *  This directive converts an internal dual-ported memory address to an
+ *  external dual-ported memory address.  If the given internal address
+ *  is an invalid dual-ported address, then the external address is set
+ *  to the given internal address.
+ *
+ *  Input parameters:
+ *    id       - id of dual-ported memory object
+ *    internal - internal address to set
+ *    external - pointer to external address
+ *
+ *  Output parameters:
+ *    external          - external address
+ *    RTEMS_SUCCESSFUL - always succeeds
+ */
+
+rtems_status_code rtems_port_internal_to_external(
+  Objects_Id   id,
+  void        *internal,
+  void       **external
+)
+{
+  register Dual_ported_memory_Control *the_port;
+  Objects_Locations                    location;
+  unsigned32                           ending;
+
+  the_port = _Dual_ported_memory_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:        /* this error cannot be returned */
+      return( RTEMS_INTERNAL_ERROR );
+    case OBJECTS_LOCAL:
+      ending = _Addresses_Subtract( internal, the_port->internal_base );
+      if ( ending > the_port->length )
+        *external = internal;
+      else
+        *external = _Addresses_Add_offset( the_port->external_base,
+                                           ending );
+      _Thread_Enable_dispatch();
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_port_external_to_internal
+ *
+ *  This directive converts an external dual-ported memory address to an
+ *  internal dual-ported memory address.  If the given external address
+ *  is an invalid dual-ported address, then the internal address is set
+ *  to the given external address.
+ *
+ *  Input parameters:
+ *    id       - id of dp memory object
+ *    external - external address
+ *    internal - pointer of internal address to set
+ *
+ *  Output parameters:
+ *    internal          - internal address
+ *    RTEMS_SUCCESSFUL - always succeeds
+ */
+
+rtems_status_code rtems_port_external_to_internal(
+  Objects_Id   id,
+  void        *external,
+  void       **internal
+)
+{
+  register Dual_ported_memory_Control *the_port;
+  Objects_Locations                    location;
+  unsigned32                           ending;
+
+  the_port = _Dual_ported_memory_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:        /* this error cannot be returned */
+      return( RTEMS_INTERNAL_ERROR );
+    case OBJECTS_LOCAL:
+      ending = _Addresses_Subtract( external, the_port->external_base );
+      if ( ending > the_port->length )
+        *internal = external;
+      else
+        *internal = _Addresses_Add_offset( the_port->internal_base,
+                                           ending );
+      _Thread_Enable_dispatch();
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
Index: c/src/exec/rtems/src/event.c
===================================================================
--- c/src/exec/rtems/src/event.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/src/event.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,294 @@
+/*
+ *  Event Manager
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/event.h>
+#include <rtems/isr.h>
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/states.h>
+#include <rtems/thread.h>
+
+/*PAGE
+ *
+ *  rtems_event_send
+ *
+ *  This directive allows a thread send an event set to another thread.
+ *
+ *  Input parameters:
+ *    id    - thread id
+ *    event - event set
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code - if unsuccessful
+ */
+
+rtems_status_code rtems_event_send(
+  Objects_Id         id,
+  rtems_event_set event_in
+)
+{
+  register Thread_Control *the_thread;
+  Objects_Locations        location;
+
+  the_thread = _Thread_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:
+      return(
+        _Event_MP_Send_request_packet(
+          EVENT_MP_SEND_REQUEST,
+          id,
+          event_in
+        )
+      );
+    case OBJECTS_LOCAL:
+      _Event_sets_Post( event_in, &the_thread->pending_events );
+      _Event_Surrender( the_thread );
+      _Thread_Enable_dispatch();
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_event_receive
+ *
+ *  This directive allows a thread to receive a set of events.
+ *
+ *  Input parameters:
+ *    event_in   - input event condition
+ *    option_set - options
+ *    ticks      - number of ticks to wait (0 means wait forever)
+ *    event_out  - pointer to output event set
+ *
+ *  Output parameters:
+ *    event out         - event set
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_event_receive(
+  rtems_event_set  event_in,
+  rtems_option     option_set,
+  rtems_interval   ticks,
+  rtems_event_set *event_out
+)
+{
+  if ( _Event_sets_Is_empty( event_in ) ) {
+    *event_out = _Thread_Executing->pending_events;
+    return( RTEMS_SUCCESSFUL );
+  }
+
+  _Thread_Disable_dispatch();
+  _Event_Seize( event_in, option_set, ticks );
+  _Thread_Enable_dispatch();
+  *event_out = _Thread_Executing->events_out;
+  return( _Thread_Executing->Wait.return_code );
+}
+
+/*PAGE
+ *
+ *  _Event_Seize
+ *
+ *  This routine attempts to satisfy the requested event condition
+ *  for the running thread.
+ *
+ *  Input parameters:
+ *    event_in   - the event condition to satisfy
+ *    option_set - acquire event options
+ *    ticks      - interval to wait
+ *
+ *  Output parameters: NONE
+ *
+ *  INTERRUPT LATENCY:
+ *    available
+ *    wait
+ *    check sync
+ */
+
+void _Event_Seize(
+  rtems_event_set event_in,
+  rtems_option    option_set,
+  rtems_interval  ticks
+)
+{
+  Thread_Control   *executing;
+  rtems_event_set   seized_events;
+  rtems_event_set   pending_events;
+  ISR_Level         level;
+
+  executing = _Thread_Executing;
+  executing->Wait.return_code = RTEMS_SUCCESSFUL;
+
+  _ISR_Disable( level );
+  pending_events = executing->pending_events;
+  seized_events  = _Event_sets_Get( pending_events, event_in );
+
+  if ( !_Event_sets_Is_empty( seized_events ) &&
+       (seized_events == event_in || _Options_Is_any( option_set )) ) {
+    executing->pending_events =
+      _Event_sets_Clear( pending_events, seized_events );
+    _ISR_Enable( level );
+    executing->events_out = seized_events;
+    return;
+  }
+
+  if ( _Options_Is_no_wait( option_set ) ) {
+    _ISR_Enable( level );
+    executing->Wait.return_code = RTEMS_UNSATISFIED;
+    executing->events_out = seized_events;
+    return;
+  }
+
+  _Event_Sync = TRUE;
+  executing->Wait.option_set            = option_set;
+  executing->Wait.Extra.event_condition = event_in;
+
+  _ISR_Enable( level );
+  _Thread_Set_state( executing, STATES_WAITING_FOR_EVENT );
+
+  if ( ticks ) {
+    _Watchdog_Initialize(
+      &executing->Timer,
+      _Event_Timeout,
+      executing->Object.id,
+      NULL
+    );
+    _Watchdog_Insert_ticks(
+      &executing->Timer,
+      ticks,
+      WATCHDOG_NO_ACTIVATE
+    );
+  }
+
+  _ISR_Disable( level );
+  if ( _Event_Sync == TRUE ) {
+    _Event_Sync = FALSE;
+    if ( ticks )
+      _Watchdog_Activate( &executing->Timer );
+    _ISR_Enable( level );
+    return;
+  }
+  _ISR_Enable( level );
+  (void) _Watchdog_Remove( &executing->Timer );
+  _Thread_Unblock( executing );
+  return;
+}
+
+/*PAGE
+ *
+ *  _Event_Surrender
+ *
+ *  This routines remove a thread from the specified threadq.
+ *
+ *  Input parameters:
+ *    the_thread - pointer to thread to be dequeued
+ *
+ *  Output parameters: NONE
+ *
+ *  INTERRUPT LATENCY:
+ *    before flash
+ *    after flash
+ *    check sync
+ */
+
+void _Event_Surrender(
+  Thread_Control *the_thread
+)
+{
+  ISR_Level          level;
+  rtems_event_set pending_events;
+  rtems_event_set event_condition;
+  rtems_event_set seized_events;
+
+  _ISR_Disable( level );
+  pending_events  = the_thread->pending_events;
+  event_condition = the_thread->Wait.Extra.event_condition;
+
+  seized_events = _Event_sets_Get( pending_events, event_condition );
+
+  if ( !_Event_sets_Is_empty( seized_events ) ) {
+    if ( _States_Is_waiting_for_event( the_thread->current_state ) ) {
+      if ( seized_events == event_condition ||
+                    _Options_Is_any( the_thread->Wait.option_set ) ) {
+        the_thread->pending_events =
+           _Event_sets_Clear( pending_events, seized_events );
+        (rtems_event_set *)the_thread->events_out = seized_events;
+
+        _ISR_Flash( level );
+
+        if ( !_Watchdog_Is_active( &the_thread->Timer ) ) {
+          _ISR_Enable( level );
+          _Thread_Unblock( the_thread );
+        }
+        else {
+          _Watchdog_Deactivate( &the_thread->Timer );
+          _ISR_Enable( level );
+          (void) _Watchdog_Remove( &the_thread->Timer );
+          _Thread_Unblock( the_thread );
+        }
+        return;
+      }
+    }
+    else if ( _Thread_Is_executing( the_thread ) && _Event_Sync == TRUE ) {
+      if ( seized_events == event_condition ||
+                    _Options_Is_any( the_thread->Wait.option_set ) ) {
+        the_thread->pending_events =
+           _Event_sets_Clear( pending_events,seized_events );
+        (rtems_event_set *)the_thread->events_out = seized_events;
+        _Event_Sync = FALSE;
+      }
+    }
+  }
+  _ISR_Enable( level );
+}
+
+/*PAGE
+ *
+ *  _Event_Timeout
+ *
+ *  This routine processes a thread which timeouts while waiting to
+ *  receive an event_set. It is called by the watchdog handler.
+ *
+ *  Input parameters:
+ *    id - thread id
+ *
+ *  Output parameters: NONE
+ */
+
+void _Event_Timeout(
+  Objects_Id  id,
+  void       *ignored
+)
+{
+  Thread_Control *the_thread;
+  Objects_Locations      location;
+
+  the_thread = _Thread_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+    case OBJECTS_REMOTE:  /* impossible */
+      break;
+    case OBJECTS_LOCAL:
+      the_thread->Wait.return_code = RTEMS_TIMEOUT;
+      _Thread_Unblock( the_thread );
+      _Thread_Unnest_dispatch();
+      break;
+  }
+}
Index: c/src/exec/rtems/src/eventmp.c
===================================================================
--- c/src/exec/rtems/src/eventmp.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/src/eventmp.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,188 @@
+/*
+ *  Multiprocessing Support for the Event Manager
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/event.h>
+#include <rtems/mpci.h>
+#include <rtems/mppkt.h>
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/states.h>
+#include <rtems/thread.h>
+
+/*PAGE
+ *
+ *  _Event_MP_Send_process_packet
+ *
+ *  This subprogram is not needed since there are no process
+ *  packets to be sent by this manager.
+ *
+ */
+
+/*PAGE
+ *
+ *  _Event_MP_Send_request_packet
+ *
+ */
+
+rtems_status_code _Event_MP_Send_request_packet (
+  Event_MP_Remote_operations operation,
+  Objects_Id                 event_id,
+  rtems_event_set         event_in
+)
+{
+  Event_MP_Packet *the_packet;
+
+  switch ( operation ) {
+
+    case EVENT_MP_SEND_REQUEST:
+
+      the_packet                    = _Event_MP_Get_packet();
+      the_packet->Prefix.the_class  = RTEMS_MP_PACKET_EVENT;
+      the_packet->Prefix.length     = sizeof ( Event_MP_Packet );
+      the_packet->Prefix.to_convert = sizeof ( Event_MP_Packet );
+      the_packet->operation         = operation;
+      the_packet->Prefix.id         = event_id;
+      the_packet->event_in          = event_in;
+
+      return
+        _MPCI_Send_request_packet(
+          rtems_get_node( event_id ),
+          &the_packet->Prefix,
+          STATES_READY
+        );
+
+      break;
+
+    case EVENT_MP_SEND_RESPONSE:
+      break;
+
+  }
+  /*
+   *  The following line is included to satisfy compilers which
+   *  produce warnings when a function does not end with a return.
+   */
+  return RTEMS_SUCCESSFUL;
+}
+
+/*PAGE
+ *
+ *  _Event_MP_Send_response_packet
+ *
+ */
+
+void _Event_MP_Send_response_packet (
+  Event_MP_Remote_operations  operation,
+  Thread_Control             *the_thread
+)
+{
+  Event_MP_Packet *the_packet;
+
+  switch ( operation ) {
+
+    case EVENT_MP_SEND_RESPONSE:
+
+      the_packet = ( Event_MP_Packet *) the_thread->receive_packet;
+
+/*
+ *  The packet being returned already contains the class, length, and
+ *  to_convert fields, therefore they are not set in this routine.
+ */
+      the_packet->operation = operation;
+      the_packet->Prefix.id = the_packet->Prefix.source_tid;
+
+      _MPCI_Send_response_packet(
+        rtems_get_node( the_packet->Prefix.source_tid ),
+        &the_packet->Prefix
+      );
+      break;
+
+    case EVENT_MP_SEND_REQUEST:
+      break;
+
+  }
+}
+
+/*PAGE
+ *
+ *
+ *  _Event_MP_Process_packet
+ *
+ */
+
+void _Event_MP_Process_packet (
+  rtems_packet_prefix  *the_packet_prefix
+)
+{
+  Event_MP_Packet *the_packet;
+  Thread_Control  *the_thread;
+
+  the_packet = (Event_MP_Packet *) the_packet_prefix;
+
+  switch ( the_packet->operation ) {
+
+    case EVENT_MP_SEND_REQUEST:
+
+      the_packet->Prefix.return_code = rtems_event_send(
+        the_packet->Prefix.id,
+        the_packet->event_in
+      );
+
+      _Event_MP_Send_response_packet(
+        EVENT_MP_SEND_RESPONSE,
+        _Thread_Executing
+      );
+      break;
+
+    case EVENT_MP_SEND_RESPONSE:
+
+      the_thread = _MPCI_Process_response( the_packet_prefix );
+
+      _MPCI_Return_packet( the_packet_prefix );
+
+      break;
+
+  }
+}
+
+/*PAGE
+ *
+ *  _Event_MP_Send_object_was_deleted
+ *
+ *  This subprogram is not needed since there are no objects
+ *  deleted by this manager.
+ *
+ */
+
+/*PAGE
+ *
+ *  _Event_MP_Send_extract_proxy
+ *
+ *  This subprogram is not needed since there are no objects
+ *  deleted by this manager.
+ *
+ */
+
+/*PAGE
+ *
+ *  _Event_MP_Get_packet
+ *
+ */
+
+Event_MP_Packet *_Event_MP_Get_packet ( void )
+{
+  return ( (Event_MP_Packet *) _MPCI_Get_packet() );
+}
+
+/* end of file */
Index: c/src/exec/rtems/src/intr.c
===================================================================
--- c/src/exec/rtems/src/intr.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/src/intr.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,85 @@
+/*
+ *  Interrupt Manager
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/isr.h>
+#include <rtems/stack.h>
+#include <rtems/intr.h>
+#include <rtems/wkspace.h>
+
+/*  _Interrupt_Manager_initialization
+ *
+ *  This routine initializes the interrupt manager.
+ *
+ *  Input parameters: NONE
+ *
+ *  Output parameters: NONE
+ */
+
+void _Interrupt_Manager_initialization( void )
+{
+#if ( CPU_ALLOCATE_INTERRUPT_STACK == TRUE )
+
+  if ( _CPU_Table.interrupt_stack_size < RTEMS_MINIMUM_STACK_SIZE )
+    rtems_fatal_error_occurred( RTEMS_INVALID_SIZE );
+
+  _CPU_Interrupt_stack_low =
+    _Workspace_Allocate_or_fatal_error( _CPU_Table.interrupt_stack_size );
+
+  _CPU_Interrupt_stack_high = _Addresses_Add_offset(
+    _CPU_Interrupt_stack_low,
+    _CPU_Table.interrupt_stack_size
+  );
+
+#endif
+
+#if ( CPU_HAS_HARDWARE_INTERRUPT_STACK == TRUE )
+  _CPU_Install_interrupt_stack();
+#endif
+
+}
+
+/*  rtems_interrupt_catch
+ *
+ *  This directive allows a thread to specify what action to take when
+ *  catching signals.
+ *
+ *  Input parameters:
+ *    new_isr_handler - address of interrupt service routine (isr)
+ *    vector          - interrupt vector number
+ *    old_isr_handler - address at which to store previous ISR address
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - always succeeds
+ *    *old_isr_handler  - previous ISR address
+ */
+
+rtems_status_code rtems_interrupt_catch(
+  rtems_isr_entry      new_isr_handler,
+  rtems_vector_number  vector,
+  rtems_isr_entry     *old_isr_handler
+)
+{
+  if ( !_ISR_Is_vector_number_valid( vector ) )
+    return( RTEMS_INVALID_NUMBER );
+
+  if ( !_ISR_Is_valid_user_handler( new_isr_handler ) )
+    return( RTEMS_INVALID_ADDRESS );
+
+  _ISR_Install_vector(
+    vector, (proc_ptr)new_isr_handler, (proc_ptr *)old_isr_handler );
+
+  return( RTEMS_SUCCESSFUL );
+}
Index: c/src/exec/rtems/src/mp.c
===================================================================
--- c/src/exec/rtems/src/mp.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/src/mp.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,128 @@
+/*
+ *  Multiprocessing Manager
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/config.h>
+#include <rtems/cpu.h>
+#include <rtems/event.h>
+#include <rtems/fatal.h>
+#include <rtems/intthrd.h>
+#include <rtems/message.h>
+#include <rtems/mp.h>
+#include <rtems/mpci.h>
+#include <rtems/mppkt.h>
+#include <rtems/part.h>
+#include <rtems/sem.h>
+#include <rtems/signal.h>
+#include <rtems/states.h>
+#include <rtems/tasks.h>
+#include <rtems/thread.h>
+#include <rtems/threadq.h>
+#include <rtems/watchdog.h>
+
+/*PAGE
+ *
+ *  _Multiprocessing_Manager_initialization
+ *
+ */
+
+void _Multiprocessing_Manager_initialization ( void )
+{
+  if ( _Configuration_MP_table->node < 1 ||
+       _Configuration_MP_table->node > _Configuration_MP_table->maximum_nodes )
+     rtems_fatal_error_occurred( RTEMS_INVALID_NODE );
+
+  _Internal_threads_Set_MP_receive_server( _Multiprocessing_Receive_server );
+}
+
+/*PAGE
+ *
+ *  rtems_multiprocessing_announce
+ *
+ */
+
+void rtems_multiprocessing_announce ( void )
+{
+  _Thread_MP_Ready();
+}
+
+/*PAGE
+ *
+ *  _Multiprocessing_Receive_server
+ *
+ */
+
+Thread _Multiprocessing_Receive_server (
+  Thread_Argument ignored
+)
+{
+
+  rtems_packet_prefix *the_packet;
+
+  _Thread_Dispatch_disable_level = 1;
+
+  for ( ; ; ) {
+
+    _Internal_threads_System_initialization_thread->Notepads[ 0 ] = 1;
+
+    the_packet = _MPCI_Receive_packet();
+
+    if ( ! the_packet ) {
+      _Thread_MP_Block();
+      _Thread_Dispatch_disable_level = 1;
+    }
+    else {
+
+      _Thread_Executing->receive_packet = the_packet;
+
+      switch ( the_packet->the_class ) {
+
+        case RTEMS_MP_PACKET_INTERNAL_THREADS:
+          _Internal_threads_MP_Process_packet( the_packet );
+          break;
+
+        case RTEMS_MP_PACKET_TASKS:
+          _RTEMS_tasks_MP_Process_packet( the_packet );
+          break;
+
+        case RTEMS_MP_PACKET_MESSAGE_QUEUE:
+          _Message_queue_MP_Process_packet( the_packet );
+          break;
+
+        case RTEMS_MP_PACKET_SEMAPHORE:
+          _Semaphore_MP_Process_packet( the_packet );
+          break;
+
+        case RTEMS_MP_PACKET_PARTITION:
+          _Partition_MP_Process_packet( the_packet );
+          break;
+
+        case RTEMS_MP_PACKET_REGION:
+          /* Global regions are unsupported at this time */
+          break;
+
+        case RTEMS_MP_PACKET_EVENT:
+          _Event_MP_Process_packet( the_packet );
+          break;
+
+        case RTEMS_MP_PACKET_SIGNAL:
+          _Signal_MP_Process_packet( the_packet );
+          break;
+      }
+    }
+  }
+}
+
+/* end of file */
Index: c/src/exec/rtems/src/msg.c
===================================================================
--- c/src/exec/rtems/src/msg.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/src/msg.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,708 @@
+/*
+ *  Message Queue Manager
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/attr.h>
+#include <rtems/chain.h>
+#include <rtems/config.h>
+#include <rtems/isr.h>
+#include <rtems/message.h>
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/states.h>
+#include <rtems/thread.h>
+#include <rtems/wkspace.h>
+#include <rtems/mpci.h>
+
+/*PAGE
+ *
+ *  _Message_queue_Manager_initialization
+ *
+ *  This routine initializes all message queue manager related
+ *  data structures.
+ *
+ *  Input parameters:
+ *    maximum_message_queues - number of message queues to initialize
+ *    maximum_message        - number of messages per queue
+ *
+ *  Output parameters:  NONE
+ */
+
+void _Message_queue_Manager_initialization(
+  unsigned32 maximum_message_queues,
+  unsigned32 maximum_messages
+)
+{
+
+  _Objects_Initialize_information(
+    &_Message_queue_Information,
+    TRUE,
+    maximum_message_queues,
+    sizeof( Message_queue_Control )
+  );
+
+  if ( maximum_messages == 0 ) {
+
+    _Chain_Initialize_empty( &_Message_queue_Inactive_messages );
+
+  } else {
+
+
+    _Chain_Initialize(
+      &_Message_queue_Inactive_messages,
+      _Workspace_Allocate_or_fatal_error(
+        maximum_messages * sizeof( Message_queue_Buffer_control )
+      ),
+      maximum_messages,
+      sizeof( Message_queue_Buffer_control )
+    );
+
+  }
+}
+
+/*PAGE
+ *
+ *  rtems_message_queue_create
+ *
+ *  This directive creates a message queue by allocating and initializing
+ *  a message queue data structure.
+ *
+ *  Input parameters:
+ *    name          - user defined queue name
+ *    count         - maximum message and reserved buffer count
+ *    attribute_set - process method
+ *    id            - pointer to queue
+ *
+ *  Output parameters:
+ *    id                - queue id
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_message_queue_create(
+  Objects_Name        name,
+  unsigned32          count,
+  rtems_attribute  attribute_set,
+  Objects_Id         *id
+)
+{
+  register Message_queue_Control *the_message_queue;
+
+  if ( !_Objects_Is_name_valid( name ) )
+    return ( RTEMS_INVALID_NAME );
+
+  if ( _Attributes_Is_global( attribute_set ) &&
+       !_Configuration_Is_multiprocessing() )
+    return( RTEMS_MP_NOT_CONFIGURED );
+
+  _Thread_Disable_dispatch();              /* protects object pointer */
+
+  the_message_queue = _Message_queue_Allocate();
+
+  if ( !the_message_queue ) {
+    _Thread_Enable_dispatch();
+    return( RTEMS_TOO_MANY );
+  }
+
+  if ( _Attributes_Is_global( attribute_set ) &&
+       !( _Objects_MP_Open( &_Message_queue_Information, name,
+                            the_message_queue->Object.id, FALSE ) ) ) {
+    _Message_queue_Free( the_message_queue );
+    _Thread_Enable_dispatch();
+    return( RTEMS_TOO_MANY );
+  }
+
+  if ( _Attributes_Is_limit( attribute_set ) )
+    the_message_queue->maximum_pending_messages = count;
+  else
+    the_message_queue->maximum_pending_messages = 0xffffffff;
+
+  the_message_queue->attribute_set              = attribute_set;
+  the_message_queue->number_of_pending_messages = 0;
+
+  _Chain_Initialize_empty( &the_message_queue->Pending_messages );
+
+  _Thread_queue_Initialize( &the_message_queue->Wait_queue, attribute_set,
+                            STATES_WAITING_FOR_MESSAGE );
+
+  _Objects_Open( &_Message_queue_Information,
+                 &the_message_queue->Object, name );
+
+  *id = the_message_queue->Object.id;
+
+  if ( _Attributes_Is_global( attribute_set ) )
+    _Message_queue_MP_Send_process_packet(
+      MESSAGE_QUEUE_MP_ANNOUNCE_CREATE,
+      the_message_queue->Object.id,
+      name,
+      0
+    );
+
+  _Thread_Enable_dispatch();
+  return( RTEMS_SUCCESSFUL );
+}
+
+/*PAGE
+ *
+ *  rtems_message_queue_ident
+ *
+ *  This directive returns the system ID associated with
+ *  the message queue name.
+ *
+ *  Input parameters:
+ *    name - user defined message queue name
+ *    node - node(s) to be searched
+ *    id   - pointer to message queue id
+ *
+ *  Output parameters:
+ *    *id               - message queue id
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_message_queue_ident(
+  Objects_Name  name,
+  unsigned32    node,
+  Objects_Id   *id
+)
+{
+  return( _Objects_Name_to_id( &_Message_queue_Information, name,
+                               node, id ) );
+}
+
+/*PAGE
+ *
+ *  rtems_message_queue_delete
+ *
+ *  This directive allows a thread to delete the message queue specified
+ *  by the given queue identifier.
+ *
+ *  Input parameters:
+ *    id - queue id
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_message_queue_delete(
+  Objects_Id id
+)
+{
+  register Message_queue_Control *the_message_queue;
+  Objects_Locations               location;
+
+  the_message_queue = _Message_queue_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:
+      _Thread_Dispatch();
+      return( RTEMS_ILLEGAL_ON_REMOTE_OBJECT );
+    case OBJECTS_LOCAL:
+      _Objects_Close( &_Message_queue_Information,
+                      &the_message_queue->Object );
+
+      if ( the_message_queue->number_of_pending_messages != 0 )
+        (void) _Message_queue_Flush_support( the_message_queue );
+      else
+        _Thread_queue_Flush(
+          &the_message_queue->Wait_queue,
+          _Message_queue_MP_Send_object_was_deleted
+        );
+
+      _Message_queue_Free( the_message_queue );
+
+      if ( _Attributes_Is_global( the_message_queue->attribute_set ) ) {
+        _Objects_MP_Close(
+          &_Message_queue_Information,
+          the_message_queue->Object.id
+        );
+
+        _Message_queue_MP_Send_process_packet(
+          MESSAGE_QUEUE_MP_ANNOUNCE_DELETE,
+          the_message_queue->Object.id,
+          0,                                 /* Not used */
+          MPCI_DEFAULT_TIMEOUT
+        );
+      }
+
+      _Thread_Enable_dispatch();
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_message_queue_send
+ *
+ *  This routine implements the directives q_send.  It sends a
+ *  message to the specified message queue.
+ *
+ *  Input parameters:
+ *    id     - pointer to message queue
+ *    buffer - pointer to message buffer
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_message_queue_send(
+  Objects_Id            id,
+  void                 *buffer
+)
+{
+  return( _Message_queue_Submit(
+      id,
+      (Message_queue_Buffer *) buffer,
+      MESSAGE_QUEUE_SEND_REQUEST
+    )
+  );
+}
+
+/*PAGE
+ *
+ *  rtems_message_queue_urgent
+ *
+ *  This routine implements the directives q_urgent.  It urgents a
+ *  message to the specified message queue.
+ *
+ *  Input parameters:
+ *    id     - pointer to message queue
+ *    buffer - pointer to message buffer
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code - if unsuccessful
+ */
+
+rtems_status_code rtems_message_queue_urgent(
+  Objects_Id            id,
+  void                 *buffer
+)
+{
+  return( _Message_queue_Submit(
+      id,
+      (Message_queue_Buffer *) buffer,
+      MESSAGE_QUEUE_URGENT_REQUEST
+    )
+  );
+}
+
+/*PAGE
+ *
+ *  rtems_message_queue_broadcast
+ *
+ *  This directive sends a message for every thread waiting on the queue
+ *  designated by id.
+ *
+ *  Input parameters:
+ *    id     - pointer to message queue
+ *    buffer - pointer to message buffer
+ *    count  - pointer to area to store number of threads made ready
+ *
+ *  Output parameters:
+ *    count             - number of threads made ready
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_message_queue_broadcast(
+  Objects_Id            id,
+  void                 *buffer,
+  unsigned32           *count
+)
+{
+  register Message_queue_Control *the_message_queue;
+  Objects_Locations               location;
+  Thread_Control                 *the_thread;
+  unsigned32                      number_broadcasted;
+
+  the_message_queue = _Message_queue_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:
+      _Thread_Executing->Wait.return_argument = count;
+
+      return
+        _Message_queue_MP_Send_request_packet(
+          MESSAGE_QUEUE_MP_BROADCAST_REQUEST,
+          id,
+          (Message_queue_Buffer *) buffer,
+          0,                               /* Not used */
+          MPCI_DEFAULT_TIMEOUT
+        );
+
+    case OBJECTS_LOCAL:
+      number_broadcasted = 0;
+      while ( (the_thread =
+                 _Thread_queue_Dequeue(&the_message_queue->Wait_queue)) ) {
+        number_broadcasted += 1;
+        _Message_queue_Copy_buffer(
+          (Message_queue_Buffer *) buffer,
+          the_thread->Wait.return_argument
+        );
+
+        if ( !_Objects_Is_local_id( the_thread->Object.id ) ) {
+          the_thread->receive_packet->return_code = RTEMS_SUCCESSFUL;
+
+          _Message_queue_MP_Send_response_packet(
+            MESSAGE_QUEUE_MP_RECEIVE_RESPONSE,
+            id,
+            the_thread
+          );
+        }
+      }
+      _Thread_Enable_dispatch();
+      *count = number_broadcasted;
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_message_queue_receive
+ *
+ *  This directive dequeues a message from the designated message queue
+ *  and copies it into the requesting thread's buffer.
+ *
+ *  Input parameters:
+ *    id         - queue id
+ *    buffer     - pointer to message buffer
+ *    option_set - options on receive
+ *    timeout    - number of ticks to wait
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_message_queue_receive(
+  Objects_Id            id,
+  void                 *buffer,
+  unsigned32            option_set,
+  rtems_interval     timeout
+)
+{
+  register Message_queue_Control *the_message_queue;
+  Objects_Locations                      location;
+
+  the_message_queue = _Message_queue_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:
+      _Thread_Executing->Wait.return_argument = buffer;
+      return
+        _Message_queue_MP_Send_request_packet(
+          MESSAGE_QUEUE_MP_RECEIVE_REQUEST,
+          id,
+          buffer,
+          option_set,
+          timeout
+        );
+
+    case OBJECTS_LOCAL:
+      if ( !_Message_queue_Seize( the_message_queue, option_set, buffer ) )
+        _Thread_queue_Enqueue( &the_message_queue->Wait_queue, timeout );
+      _Thread_Enable_dispatch();
+      return( _Thread_Executing->Wait.return_code );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_message_queue_flush
+ *
+ *  This directive removes all pending messages from a queue and returns
+ *  the number of messages removed.  If no messages were present then
+ *  a count of zero is returned.
+ *
+ *  Input parameters:
+ *    id    - queue id
+ *    count - return area for count
+ *
+ *  Output parameters:
+ *    count             - number of messages removed ( 0 = empty queue )
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_message_queue_flush(
+  Objects_Id  id,
+  unsigned32 *count
+)
+{
+  register Message_queue_Control *the_message_queue;
+  Objects_Locations               location;
+
+  the_message_queue = _Message_queue_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:
+      _Thread_Executing->Wait.return_argument = count;
+
+      return
+        _Message_queue_MP_Send_request_packet(
+          MESSAGE_QUEUE_MP_FLUSH_REQUEST,
+          id,
+          0,                               /* Not used */
+          0,                               /* Not used */
+          MPCI_DEFAULT_TIMEOUT
+        );
+
+    case OBJECTS_LOCAL:
+      if ( the_message_queue->number_of_pending_messages != 0 )
+        *count = _Message_queue_Flush_support( the_message_queue );
+      else
+        *count = 0;
+      _Thread_Enable_dispatch();
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  _Message_queue_Seize
+ *
+ *  This kernel routine dequeues a message, copies the message buffer to
+ *  a given destination buffer, and frees the message buffer to the
+ *  inactive message pool.
+ *
+ *  Input parameters:
+ *    the_message_queue - pointer to message queue
+ *    option_set        - options on receive
+ *    the_buffer        - pointer to message buffer to be filled
+ *
+ *  Output parameters:
+ *    TRUE  - if message received or RTEMS_NO_WAIT and no message
+ *    FALSE - if thread is to block
+ *
+ *  NOTE: Dependent on BUFFER_LENGTH
+ *
+ *  INTERRUPT LATENCY:
+ *    available
+ *    wait
+ */
+
+boolean _Message_queue_Seize(
+  Message_queue_Control  *the_message_queue,
+  rtems_option            option_set,
+  Message_queue_Buffer   *buffer
+)
+{
+  ISR_Level                     level;
+  Message_queue_Buffer_control *the_message;
+  Thread_Control               *executing;
+
+  executing = _Thread_Executing;
+  executing->Wait.return_code = RTEMS_SUCCESSFUL;
+  _ISR_Disable( level );
+  if ( the_message_queue->number_of_pending_messages != 0 ) {
+    the_message_queue->number_of_pending_messages -= 1;
+
+    the_message = _Message_queue_Get_pending_message( the_message_queue );
+    _ISR_Enable( level );
+    _Message_queue_Copy_buffer( &the_message->Contents, buffer );
+    _Message_queue_Free_message_buffer( the_message );
+    return( TRUE );
+  }
+
+  if ( _Options_Is_no_wait( option_set ) ) {
+    _ISR_Enable( level );
+    executing->Wait.return_code = RTEMS_UNSATISFIED;
+    return( TRUE );
+  }
+
+  the_message_queue->Wait_queue.sync = TRUE;
+  executing->Wait.queue              = &the_message_queue->Wait_queue;
+  executing->Wait.id                 = the_message_queue->Object.id;
+  executing->Wait.option_set         = option_set;
+  executing->Wait.return_argument    = (unsigned32 *)buffer;
+  _ISR_Enable( level );
+  return( FALSE );
+}
+
+/*PAGE
+ *
+ *  _Message_queue_Flush_support
+ *
+ *  This message manager routine removes all messages from a message queue
+ *  and returns them to the inactive message pool.
+ *
+ *  Input parameters:
+ *    the_message_queue - pointer to message queue
+ *
+ *  Output parameters:
+ *    returns - number of messages placed on inactive chain
+ *
+ *  INTERRUPT LATENCY:
+ *    only case
+ */
+
+unsigned32 _Message_queue_Flush_support(
+  Message_queue_Control *the_message_queue
+)
+{
+  ISR_Level          level;
+  Chain_Node *inactive_first;
+  Chain_Node *message_queue_first;
+  Chain_Node *message_queue_last;
+  unsigned32         count;
+
+  _ISR_Disable( level );
+    inactive_first      = _Message_queue_Inactive_messages.first;
+    message_queue_first = the_message_queue->Pending_messages.first;
+    message_queue_last  = the_message_queue->Pending_messages.last;
+
+    _Message_queue_Inactive_messages.first = message_queue_first;
+    message_queue_last->next               = inactive_first;
+    inactive_first->previous               = message_queue_last;
+    message_queue_first->previous          =
+               _Chain_Head( &_Message_queue_Inactive_messages );
+
+    _Chain_Initialize_empty( &the_message_queue->Pending_messages );
+
+    count = the_message_queue->number_of_pending_messages;
+    the_message_queue->number_of_pending_messages = 0;
+  _ISR_Enable( level );
+  return( count );
+}
+
+/*PAGE
+ *
+ *  _Message_queue_Submit
+ *
+ *  This routine implements the directives q_send and q_urgent.  It
+ *  processes a message that is to be submitted to the designated
+ *  message queue.  The message will either be processed as a send
+ *  send message which it will be inserted at the rear of the queue
+ *  or it will be processed as an urgent message which will be inserted
+ *  at the front of the queue.
+ *
+ *  Input parameters:
+ *    id          - pointer to message queue
+ *    the_buffer  - pointer to message buffer
+ *    submit_type - send or urgent message
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code _Message_queue_Submit(
+  Objects_Id                  id,
+  Message_queue_Buffer       *buffer,
+  Message_queue_Submit_types  submit_type
+)
+{
+  register Message_queue_Control *the_message_queue;
+  Objects_Locations               location;
+  Thread_Control                 *the_thread;
+  Message_queue_Buffer_control   *the_message;
+
+  the_message_queue = _Message_queue_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:
+      switch ( submit_type ) {
+        case MESSAGE_QUEUE_SEND_REQUEST:
+          return
+            _Message_queue_MP_Send_request_packet(
+              MESSAGE_QUEUE_MP_SEND_REQUEST,
+              id,
+              buffer,
+              0,                               /* Not used */
+              MPCI_DEFAULT_TIMEOUT
+            );
+
+        case MESSAGE_QUEUE_URGENT_REQUEST:
+          return
+            _Message_queue_MP_Send_request_packet(
+              MESSAGE_QUEUE_MP_URGENT_REQUEST,
+              id,
+              buffer,
+              0,                               /* Not used */
+              MPCI_DEFAULT_TIMEOUT
+            );
+      }
+    case OBJECTS_LOCAL:
+      the_thread = _Thread_queue_Dequeue( &the_message_queue->Wait_queue );
+
+      if ( the_thread ) {
+
+        _Message_queue_Copy_buffer(
+          buffer,
+          the_thread->Wait.return_argument
+        );
+
+        if ( !_Objects_Is_local_id( the_thread->Object.id ) ) {
+          the_thread->receive_packet->return_code = RTEMS_SUCCESSFUL;
+
+          _Message_queue_MP_Send_response_packet(
+            MESSAGE_QUEUE_MP_RECEIVE_RESPONSE,
+            id,
+            the_thread
+          );
+
+        }
+        _Thread_Enable_dispatch();
+        return( RTEMS_SUCCESSFUL );
+      }
+
+      if ( the_message_queue->number_of_pending_messages ==
+           the_message_queue->maximum_pending_messages ) {
+        _Thread_Enable_dispatch();
+        return( RTEMS_TOO_MANY );
+      }
+
+      the_message = _Message_queue_Allocate_message_buffer();
+
+      if ( !the_message ) {
+        _Thread_Enable_dispatch();
+        return( RTEMS_UNSATISFIED );
+      }
+
+      _Message_queue_Copy_buffer( buffer, &the_message->Contents );
+
+      the_message_queue->number_of_pending_messages += 1;
+
+      switch ( submit_type ) {
+        case MESSAGE_QUEUE_SEND_REQUEST:
+          _Message_queue_Append( the_message_queue, the_message );
+          break;
+        case MESSAGE_QUEUE_URGENT_REQUEST:
+          _Message_queue_Prepend( the_message_queue, the_message );
+          break;
+      }
+
+      _Thread_Enable_dispatch();
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
Index: c/src/exec/rtems/src/msgmp.c
===================================================================
--- c/src/exec/rtems/src/msgmp.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/src/msgmp.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,397 @@
+/*
+ *  Multiprocessing Support for the Message Queue Manager
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/message.h>
+#include <rtems/mpci.h>
+#include <rtems/msgmp.h>
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/thread.h>
+#include <rtems/watchdog.h>
+
+/*PAGE
+ *
+ *  _Message_queue_MP_Send_process_packet
+ *
+ */
+
+void _Message_queue_MP_Send_process_packet (
+  Message_queue_MP_Remote_operations  operation,
+  Objects_Id                          message_queue_id,
+  Objects_Name                        name,
+  Objects_Id                          proxy_id
+)
+{
+  Message_queue_MP_Packet *the_packet;
+  unsigned32               node;
+
+  switch ( operation ) {
+
+    case MESSAGE_QUEUE_MP_ANNOUNCE_CREATE:
+    case MESSAGE_QUEUE_MP_ANNOUNCE_DELETE:
+    case MESSAGE_QUEUE_MP_EXTRACT_PROXY:
+
+      the_packet                    = _Message_queue_MP_Get_packet();
+      the_packet->Prefix.the_class  = RTEMS_MP_PACKET_MESSAGE_QUEUE;
+      the_packet->Prefix.length     = sizeof ( Message_queue_MP_Packet );
+      the_packet->Prefix.to_convert = sizeof ( Message_queue_MP_Packet );
+      the_packet->operation         = operation;
+      the_packet->Prefix.id         = message_queue_id;
+      the_packet->name              = name;
+      the_packet->proxy_id          = proxy_id;
+
+      if ( operation == MESSAGE_QUEUE_MP_EXTRACT_PROXY )
+         node = rtems_get_node( message_queue_id );
+      else
+         node = MPCI_ALL_NODES;
+
+      _MPCI_Send_process_packet( node, &the_packet->Prefix );
+      break;
+
+    case MESSAGE_QUEUE_MP_RECEIVE_REQUEST:
+    case MESSAGE_QUEUE_MP_RECEIVE_RESPONSE:
+    case MESSAGE_QUEUE_MP_SEND_REQUEST:
+    case MESSAGE_QUEUE_MP_SEND_RESPONSE:
+    case MESSAGE_QUEUE_MP_URGENT_REQUEST:
+    case MESSAGE_QUEUE_MP_URGENT_RESPONSE:
+    case MESSAGE_QUEUE_MP_BROADCAST_REQUEST:
+    case MESSAGE_QUEUE_MP_BROADCAST_RESPONSE:
+    case MESSAGE_QUEUE_MP_FLUSH_REQUEST:
+    case MESSAGE_QUEUE_MP_FLUSH_RESPONSE:
+      break;
+
+  }
+}
+
+/*PAGE
+ *
+ *  _Message_queue_MP_Send_request_packet
+ *
+ */
+
+rtems_status_code _Message_queue_MP_Send_request_packet (
+  Message_queue_MP_Remote_operations  operation,
+  Objects_Id                          message_queue_id,
+  Message_queue_Buffer               *buffer,
+  rtems_option                     option_set,
+  rtems_interval                   timeout
+)
+{
+  Message_queue_MP_Packet *the_packet;
+
+  switch ( operation ) {
+
+    case MESSAGE_QUEUE_MP_RECEIVE_REQUEST:
+    case MESSAGE_QUEUE_MP_SEND_REQUEST:
+    case MESSAGE_QUEUE_MP_URGENT_REQUEST:
+    case MESSAGE_QUEUE_MP_BROADCAST_REQUEST:
+    case MESSAGE_QUEUE_MP_FLUSH_REQUEST:
+
+      the_packet                    = _Message_queue_MP_Get_packet();
+      the_packet->Prefix.the_class  = RTEMS_MP_PACKET_MESSAGE_QUEUE;
+      the_packet->Prefix.length     = sizeof ( Message_queue_MP_Packet );
+      the_packet->Prefix.to_convert = sizeof ( Message_queue_MP_Packet ) -
+                         sizeof ( Message_queue_Buffer );
+      if ( ! _Options_Is_no_wait(option_set))
+          the_packet->Prefix.timeout = timeout;
+
+      the_packet->operation         = operation;
+      the_packet->Prefix.id         = message_queue_id;
+      the_packet->option_set        = option_set;
+
+      if ( buffer )
+        _Message_queue_Copy_buffer( buffer, &the_packet->Buffer );
+
+      return
+        _MPCI_Send_request_packet(
+          rtems_get_node( message_queue_id ),
+          &the_packet->Prefix,
+          STATES_WAITING_FOR_MESSAGE
+        );
+      break;
+
+    case MESSAGE_QUEUE_MP_ANNOUNCE_CREATE:
+    case MESSAGE_QUEUE_MP_ANNOUNCE_DELETE:
+    case MESSAGE_QUEUE_MP_EXTRACT_PROXY:
+    case MESSAGE_QUEUE_MP_RECEIVE_RESPONSE:
+    case MESSAGE_QUEUE_MP_SEND_RESPONSE:
+    case MESSAGE_QUEUE_MP_URGENT_RESPONSE:
+    case MESSAGE_QUEUE_MP_BROADCAST_RESPONSE:
+    case MESSAGE_QUEUE_MP_FLUSH_RESPONSE:
+      break;
+
+  }
+  /*
+   *  The following line is included to satisfy compilers which
+   *  produce warnings when a function does not end with a return.
+   */
+  return RTEMS_SUCCESSFUL;
+}
+
+/*PAGE
+ *
+ *  _Message_queue_MP_Send_response_packet
+ *
+ */
+
+void _Message_queue_MP_Send_response_packet (
+  Message_queue_MP_Remote_operations  operation,
+  Objects_Id                          message_queue_id,
+  Thread_Control                     *the_thread
+)
+{
+  Message_queue_MP_Packet *the_packet;
+
+  switch ( operation ) {
+
+    case MESSAGE_QUEUE_MP_RECEIVE_RESPONSE:
+    case MESSAGE_QUEUE_MP_SEND_RESPONSE:
+    case MESSAGE_QUEUE_MP_URGENT_RESPONSE:
+    case MESSAGE_QUEUE_MP_BROADCAST_RESPONSE:
+    case MESSAGE_QUEUE_MP_FLUSH_RESPONSE:
+
+      the_packet = ( Message_queue_MP_Packet *) the_thread->receive_packet;
+
+/*
+ *  The packet being returned already contains the class, length, and
+ *  to_convert fields, therefore they are not set in this routine.
+ */
+      the_packet->operation = operation;
+      the_packet->Prefix.id = the_packet->Prefix.source_tid;
+
+      _MPCI_Send_response_packet(
+        rtems_get_node( the_packet->Prefix.source_tid ),
+        &the_packet->Prefix
+      );
+      break;
+
+    case MESSAGE_QUEUE_MP_ANNOUNCE_CREATE:
+    case MESSAGE_QUEUE_MP_ANNOUNCE_DELETE:
+    case MESSAGE_QUEUE_MP_EXTRACT_PROXY:
+    case MESSAGE_QUEUE_MP_RECEIVE_REQUEST:
+    case MESSAGE_QUEUE_MP_SEND_REQUEST:
+    case MESSAGE_QUEUE_MP_URGENT_REQUEST:
+    case MESSAGE_QUEUE_MP_BROADCAST_REQUEST:
+    case MESSAGE_QUEUE_MP_FLUSH_REQUEST:
+      break;
+
+  }
+}
+
+/*PAGE
+ *
+ *
+ *  _Message_queue_MP_Process_packet
+ *
+ */
+
+void _Message_queue_MP_Process_packet (
+  rtems_packet_prefix   *the_packet_prefix
+)
+{
+  Message_queue_MP_Packet *the_packet;
+  Thread_Control          *the_thread;
+  boolean                  ignored;
+
+  the_packet = (Message_queue_MP_Packet *) the_packet_prefix;
+
+  switch ( the_packet->operation ) {
+
+    case MESSAGE_QUEUE_MP_ANNOUNCE_CREATE:
+
+      ignored = _Objects_MP_Open(
+                  &_Message_queue_Information,
+                  the_packet->name,
+                  the_packet->Prefix.id,
+                  TRUE
+                );
+
+      _MPCI_Return_packet( the_packet_prefix );
+      break;
+
+    case MESSAGE_QUEUE_MP_ANNOUNCE_DELETE:
+
+      _Objects_MP_Close( &_Message_queue_Information, the_packet->Prefix.id );
+
+      _MPCI_Return_packet( the_packet_prefix );
+      break;
+
+    case MESSAGE_QUEUE_MP_EXTRACT_PROXY:
+
+      the_thread = _Thread_MP_Find_proxy( the_packet->proxy_id );
+
+      if ( ! _Thread_Is_null( the_thread ) )
+         _Thread_queue_Extract( the_thread->Wait.queue, the_thread );
+
+      _MPCI_Return_packet( the_packet_prefix );
+      break;
+
+    case MESSAGE_QUEUE_MP_RECEIVE_REQUEST:
+
+      the_packet->Prefix.return_code = rtems_message_queue_receive(
+        the_packet->Prefix.id,
+        &the_packet->Buffer,
+        the_packet->option_set,
+        the_packet->Prefix.timeout
+      );
+
+      if ( ! _Status_Is_proxy_blocking( the_packet->Prefix.return_code ) )
+        _Message_queue_MP_Send_response_packet(
+          MESSAGE_QUEUE_MP_RECEIVE_RESPONSE,
+          the_packet->Prefix.id,
+          _Thread_Executing
+        );
+      break;
+
+    case MESSAGE_QUEUE_MP_RECEIVE_RESPONSE:
+
+      the_thread = _MPCI_Process_response( the_packet_prefix );
+
+      _Message_queue_Copy_buffer(
+        &the_packet->Buffer,
+        (Message_queue_Buffer *) the_thread->Wait.return_argument
+      );
+
+      _MPCI_Return_packet( the_packet_prefix );
+      break;
+
+    case MESSAGE_QUEUE_MP_SEND_REQUEST:
+
+      the_packet->Prefix.return_code = rtems_message_queue_send(
+        the_packet->Prefix.id,
+        &the_packet->Buffer
+      );
+
+      _Message_queue_MP_Send_response_packet(
+        MESSAGE_QUEUE_MP_SEND_RESPONSE,
+        the_packet->Prefix.id,
+        _Thread_Executing
+      );
+      break;
+
+    case MESSAGE_QUEUE_MP_SEND_RESPONSE:
+    case MESSAGE_QUEUE_MP_URGENT_RESPONSE:
+
+      the_thread = _MPCI_Process_response( the_packet_prefix );
+
+      _MPCI_Return_packet( the_packet_prefix );
+      break;
+
+    case MESSAGE_QUEUE_MP_URGENT_REQUEST:
+
+      the_packet->Prefix.return_code = rtems_message_queue_urgent(
+        the_packet->Prefix.id,
+        &the_packet->Buffer
+      );
+
+      _Message_queue_MP_Send_response_packet(
+        MESSAGE_QUEUE_MP_URGENT_RESPONSE,
+        the_packet->Prefix.id,
+        _Thread_Executing
+      );
+      break;
+
+    case MESSAGE_QUEUE_MP_BROADCAST_REQUEST:
+
+      the_packet->Prefix.return_code = rtems_message_queue_broadcast(
+        the_packet->Prefix.id,
+        &the_packet->Buffer,
+        &the_packet->count
+      );
+
+      _Message_queue_MP_Send_response_packet(
+        MESSAGE_QUEUE_MP_BROADCAST_RESPONSE,
+        the_packet->Prefix.id,
+        _Thread_Executing
+      );
+      break;
+
+    case MESSAGE_QUEUE_MP_BROADCAST_RESPONSE:
+    case MESSAGE_QUEUE_MP_FLUSH_RESPONSE:
+
+      the_thread = _MPCI_Process_response( the_packet_prefix );
+
+      *(unsigned32 *)the_thread->Wait.return_argument = the_packet->count;
+
+      _MPCI_Return_packet( the_packet_prefix );
+      break;
+
+    case MESSAGE_QUEUE_MP_FLUSH_REQUEST:
+
+      the_packet->Prefix.return_code = rtems_message_queue_flush(
+        the_packet->Prefix.id,
+        &the_packet->count
+      );
+
+      _Message_queue_MP_Send_response_packet(
+        MESSAGE_QUEUE_MP_FLUSH_RESPONSE,
+        the_packet->Prefix.id,
+        _Thread_Executing
+      );
+      break;
+
+  }
+}
+
+/*PAGE
+ *
+ *  _Message_queue_MP_Send_object_was_deleted
+ *
+ */
+
+void _Message_queue_MP_Send_object_was_deleted (
+  Thread_Control  *the_proxy
+)
+{
+  the_proxy->receive_packet->return_code = RTEMS_OBJECT_WAS_DELETED;
+
+  _Message_queue_MP_Send_response_packet(
+    MESSAGE_QUEUE_MP_RECEIVE_RESPONSE,
+    the_proxy->Wait.id,
+    the_proxy
+  );
+}
+
+/*PAGE
+ *
+ *  _Message_queue_MP_Send_extract_proxy
+ *
+ */
+
+void _Message_queue_MP_Send_extract_proxy (
+  Thread_Control  *the_thread
+)
+{
+  _Message_queue_MP_Send_process_packet(
+    MESSAGE_QUEUE_MP_EXTRACT_PROXY,
+    the_thread->Wait.id,
+    (Objects_Name) 0,
+    the_thread->Object.id
+  );
+}
+
+/*PAGE
+ *
+ *  _Message_queue_MP_Get_packet
+ *
+ */
+
+Message_queue_MP_Packet *_Message_queue_MP_Get_packet ( void )
+{
+  return ( (Message_queue_MP_Packet *) _MPCI_Get_packet() );
+}
+
+/* end of file */
Index: c/src/exec/rtems/src/part.c
===================================================================
--- c/src/exec/rtems/src/part.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/src/part.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,322 @@
+/*
+ *  Partition Manager
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/address.h>
+#include <rtems/config.h>
+#include <rtems/object.h>
+#include <rtems/part.h>
+#include <rtems/thread.h>
+
+/*PAGE
+ *
+ *  _Partition_Manager_initialization
+ *
+ *  This routine initializes all partition manager related
+ *  data structures.
+ *
+ *  Input parameters:
+ *    maximum_partitions - number of partitions to initialize
+ *
+ *  Output parameters:  NONE
+ */
+
+void _Partition_Manager_initialization(
+  unsigned32 maximum_partitions
+)
+{
+  _Objects_Initialize_information(
+    &_Partition_Information,
+    TRUE,
+    maximum_partitions,
+    sizeof( Partition_Control )
+  );
+
+}
+
+/*PAGE
+ *
+ *  rtems_partition_create
+ *
+ *  This directive creates a partiton of fixed sized buffers from the
+ *  given contiguous memory area.
+ *
+ *  Input parameters:
+ *    name             - user defined partition name
+ *    starting_address - physical start address of partition
+ *    length           - physical length in bytes
+ *    buffer_size      - size of buffers in bytes
+ *    attribute_set    - partition attributes
+ *    id               - pointer to partition id
+ *
+ *  Output parameters:
+ *    id                - partition id
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_partition_create(
+  Objects_Name        name,
+  void               *starting_address,
+  unsigned32          length,
+  unsigned32          buffer_size,
+  rtems_attribute  attribute_set,
+  Objects_Id         *id
+)
+{
+  register Partition_Control *the_partition;
+
+  if ( !_Objects_Is_name_valid( name ) )
+    return ( RTEMS_INVALID_NAME );
+
+  if ( length == 0 || buffer_size == 0 || length < buffer_size ||
+         !_Partition_Is_buffer_size_aligned( buffer_size ) )
+    return ( RTEMS_INVALID_SIZE );
+
+  if ( !_Addresses_Is_aligned( starting_address ) )
+     return( RTEMS_INVALID_ADDRESS );
+
+  if ( _Attributes_Is_global( attribute_set ) &&
+       !_Configuration_Is_multiprocessing() )
+    return( RTEMS_MP_NOT_CONFIGURED );
+
+  _Thread_Disable_dispatch();               /* prevents deletion */
+
+  the_partition = _Partition_Allocate();
+
+  if ( !the_partition ) {
+    _Thread_Enable_dispatch();
+    return( RTEMS_TOO_MANY );
+  }
+
+  if ( _Attributes_Is_global( attribute_set ) &&
+       !( _Objects_MP_Open( &_Partition_Information, name,
+                            the_partition->Object.id, FALSE ) ) ) {
+    _Partition_Free( the_partition );
+    _Thread_Enable_dispatch();
+    return( RTEMS_TOO_MANY );
+  }
+  the_partition->starting_address      = starting_address;
+  the_partition->length                = length;
+  the_partition->buffer_size           = buffer_size;
+  the_partition->attribute_set         = attribute_set;
+  the_partition->number_of_used_blocks = 0;
+
+  _Chain_Initialize( &the_partition->Memory, starting_address,
+                        length / buffer_size, buffer_size );
+
+  _Objects_Open( &_Partition_Information, &the_partition->Object, name );
+
+  *id = the_partition->Object.id;
+  if ( _Attributes_Is_global( attribute_set ) )
+    _Partition_MP_Send_process_packet(
+      PARTITION_MP_ANNOUNCE_CREATE,
+      the_partition->Object.id,
+      name,
+      0                  /* Not used */
+    );
+
+  _Thread_Enable_dispatch();
+  return( RTEMS_SUCCESSFUL );
+}
+
+/*PAGE
+ *
+ *  rtems_partition_ident
+ *
+ *  This directive returns the system ID associated with
+ *  the partition name.
+ *
+ *  Input parameters:
+ *    name - user defined partition name
+ *    node - node(s) to be searched
+ *    id   - pointer to partition id
+ *
+ *  Output parameters:
+ *    *id               - partition id
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_partition_ident(
+  Objects_Name  name,
+  unsigned32    node,
+  Objects_Id   *id
+)
+{
+  return( _Objects_Name_to_id( &_Partition_Information, name, node, id ) );
+}
+
+/*PAGE
+ *
+ *  rtems_partition_delete
+ *
+ *  This directive allows a thread to delete a partition specified by
+ *  the partition identifier, provided that none of its buffers are
+ *  still allocated.
+ *
+ *  Input parameters:
+ *    id - partition id
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_partition_delete(
+  Objects_Id id
+)
+{
+  register Partition_Control *the_partition;
+  Objects_Locations                  location;
+
+  the_partition = _Partition_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:
+      _Thread_Dispatch();
+      return( RTEMS_ILLEGAL_ON_REMOTE_OBJECT );
+    case OBJECTS_LOCAL:
+      if ( the_partition->number_of_used_blocks == 0 ) {
+        _Objects_Close( &_Partition_Information, &the_partition->Object );
+        _Partition_Free( the_partition );
+        if ( _Attributes_Is_global( the_partition->attribute_set ) ) {
+
+          _Objects_MP_Close(
+            &_Partition_Information,
+            the_partition->Object.id
+          );
+
+          _Partition_MP_Send_process_packet(
+            PARTITION_MP_ANNOUNCE_DELETE,
+            the_partition->Object.id,
+            0,                         /* Not used */
+            0                          /* Not used */
+          );
+        }
+
+        _Thread_Enable_dispatch();
+        return( RTEMS_SUCCESSFUL );
+      }
+      _Thread_Enable_dispatch();
+      return( RTEMS_RESOURCE_IN_USE );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_partition_get_buffer
+ *
+ *  This directive will obtain a buffer from a buffer partition.
+ *
+ *  Input parameters:
+ *    id     - partition id
+ *    buffer - pointer to buffer address
+ *
+ *  Output parameters:
+ *    buffer            - pointer to buffer address filled in
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_partition_get_buffer(
+  Objects_Id   id,
+  void       **buffer
+)
+{
+  register Partition_Control *the_partition;
+  Objects_Locations           location;
+  void                       *the_buffer;
+
+  the_partition = _Partition_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:
+      _Thread_Executing->Wait.return_argument = buffer;
+      return(
+        _Partition_MP_Send_request_packet(
+          PARTITION_MP_GET_BUFFER_REQUEST,
+          id,
+          0           /* Not used */
+        )
+      );
+    case OBJECTS_LOCAL:
+      the_buffer = _Partition_Allocate_buffer( the_partition );
+      if ( the_buffer ) {
+        the_partition->number_of_used_blocks += 1;
+        _Thread_Enable_dispatch();
+        *buffer = the_buffer;
+        return( RTEMS_SUCCESSFUL );
+      }
+      _Thread_Enable_dispatch();
+      return( RTEMS_UNSATISFIED );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_partition_return_buffer
+ *
+ *  This directive will return the given buffer to the specified
+ *  buffer partition.
+ *
+ *  Input parameters:
+ *    id     - partition id
+ *    buffer - pointer to buffer address
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code - if unsuccessful
+ */
+
+rtems_status_code rtems_partition_return_buffer(
+  Objects_Id  id,
+  void       *buffer
+)
+{
+  register Partition_Control *the_partition;
+  Objects_Locations           location;
+
+  the_partition = _Partition_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:
+      return(
+        _Partition_MP_Send_request_packet(
+          PARTITION_MP_RETURN_BUFFER_REQUEST,
+          id,
+          buffer
+        )
+      );
+    case OBJECTS_LOCAL:
+      if ( _Partition_Is_buffer_valid( buffer, the_partition ) ) {
+        _Partition_Free_buffer( the_partition, buffer );
+        the_partition->number_of_used_blocks -= 1;
+        _Thread_Enable_dispatch();
+        return( RTEMS_SUCCESSFUL );
+      }
+      _Thread_Enable_dispatch();
+      return( RTEMS_INVALID_ADDRESS );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
Index: c/src/exec/rtems/src/partmp.c
===================================================================
--- c/src/exec/rtems/src/partmp.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/src/partmp.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,300 @@
+/*
+ *  Multiprocessing Support for the Partition Manager
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/mpci.h>
+#include <rtems/mppkt.h>
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/part.h>
+#include <rtems/thread.h>
+
+/*PAGE
+ *
+ *  _Partition_MP_Send_process_packet
+ *
+ */
+
+void _Partition_MP_Send_process_packet (
+  Partition_MP_Remote_operations  operation,
+  Objects_Id                      partition_id,
+  Objects_Name                    name,
+  Objects_Id                      proxy_id
+)
+{
+  Partition_MP_Packet *the_packet;
+  unsigned32           node;
+
+  switch ( operation ) {
+
+    case PARTITION_MP_ANNOUNCE_CREATE:
+    case PARTITION_MP_ANNOUNCE_DELETE:
+    case PARTITION_MP_EXTRACT_PROXY:
+
+      the_packet                    = _Partition_MP_Get_packet();
+      the_packet->Prefix.the_class  = RTEMS_MP_PACKET_PARTITION;
+      the_packet->Prefix.length     = sizeof ( Partition_MP_Packet );
+      the_packet->Prefix.to_convert = sizeof ( Partition_MP_Packet );
+      the_packet->operation         = operation;
+      the_packet->Prefix.id         = partition_id;
+      the_packet->name              = name;
+      the_packet->proxy_id          = proxy_id;
+
+      if ( operation == PARTITION_MP_EXTRACT_PROXY )
+         node = rtems_get_node( partition_id );
+      else
+         node = MPCI_ALL_NODES;
+
+      _MPCI_Send_process_packet( node, &the_packet->Prefix );
+      break;
+
+    case PARTITION_MP_GET_BUFFER_REQUEST:
+    case PARTITION_MP_GET_BUFFER_RESPONSE:
+    case PARTITION_MP_RETURN_BUFFER_REQUEST:
+    case PARTITION_MP_RETURN_BUFFER_RESPONSE:
+      break;
+  }
+}
+
+/*PAGE
+ *
+ *  _Partition_MP_Send_request_packet
+ *
+ */
+
+rtems_status_code _Partition_MP_Send_request_packet (
+  Partition_MP_Remote_operations  operation,
+  Objects_Id                      partition_id,
+  void                           *buffer
+)
+{
+  Partition_MP_Packet *the_packet;
+
+  switch ( operation ) {
+
+    case PARTITION_MP_GET_BUFFER_REQUEST:
+    case PARTITION_MP_RETURN_BUFFER_REQUEST:
+
+      the_packet                    = _Partition_MP_Get_packet();
+      the_packet->Prefix.the_class  = RTEMS_MP_PACKET_PARTITION;
+      the_packet->Prefix.length     = sizeof ( Partition_MP_Packet );
+      the_packet->Prefix.to_convert = sizeof ( Partition_MP_Packet );
+      the_packet->operation         = operation;
+      the_packet->Prefix.id         = partition_id;
+      the_packet->buffer            = buffer;
+
+      return
+        _MPCI_Send_request_packet(
+          rtems_get_node( partition_id ),
+          &the_packet->Prefix,
+          STATES_READY      /* Not used */
+        );
+
+      break;
+
+    case PARTITION_MP_ANNOUNCE_CREATE:
+    case PARTITION_MP_ANNOUNCE_DELETE:
+    case PARTITION_MP_EXTRACT_PROXY:
+    case PARTITION_MP_GET_BUFFER_RESPONSE:
+    case PARTITION_MP_RETURN_BUFFER_RESPONSE:
+      break;
+
+  }
+  /*
+   *  The following line is included to satisfy compilers which
+   *  produce warnings when a function does not end with a return.
+   */
+  return RTEMS_SUCCESSFUL;
+}
+
+/*PAGE
+ *
+ *  _Partition_MP_Send_response_packet
+ *
+ */
+
+void _Partition_MP_Send_response_packet (
+  Partition_MP_Remote_operations  operation,
+  Objects_Id                      partition_id,
+  Thread_Control                 *the_thread
+)
+{
+  Partition_MP_Packet *the_packet;
+
+  switch ( operation ) {
+
+    case PARTITION_MP_GET_BUFFER_RESPONSE:
+    case PARTITION_MP_RETURN_BUFFER_RESPONSE:
+
+      the_packet = ( Partition_MP_Packet *) the_thread->receive_packet;
+
+/*
+ *  The packet being returned already contains the class, length, and
+ *  to_convert fields, therefore they are not set in this routine.
+ */
+      the_packet->operation = operation;
+      the_packet->Prefix.id = the_packet->Prefix.source_tid;
+
+      _MPCI_Send_response_packet(
+        rtems_get_node( the_packet->Prefix.source_tid ),
+        &the_packet->Prefix
+      );
+      break;
+
+    case PARTITION_MP_ANNOUNCE_CREATE:
+    case PARTITION_MP_ANNOUNCE_DELETE:
+    case PARTITION_MP_EXTRACT_PROXY:
+    case PARTITION_MP_GET_BUFFER_REQUEST:
+    case PARTITION_MP_RETURN_BUFFER_REQUEST:
+      break;
+
+  }
+}
+
+/*PAGE
+ *
+ *
+ *  _Partition_MP_Process_packet
+ *
+ */
+
+void _Partition_MP_Process_packet (
+  rtems_packet_prefix  *the_packet_prefix
+)
+{
+  Partition_MP_Packet *the_packet;
+  Thread_Control      *the_thread;
+  boolean              ignored;
+
+  the_packet = (Partition_MP_Packet *) the_packet_prefix;
+
+  switch ( the_packet->operation ) {
+
+    case PARTITION_MP_ANNOUNCE_CREATE:
+
+      ignored = _Objects_MP_Open(
+                  &_Partition_Information,
+                  the_packet->name,
+                  the_packet->Prefix.id,
+                  TRUE
+                );
+
+      _MPCI_Return_packet( the_packet_prefix );
+      break;
+
+    case PARTITION_MP_ANNOUNCE_DELETE:
+
+      _Objects_MP_Close( &_Partition_Information, the_packet->Prefix.id );
+
+      _MPCI_Return_packet( the_packet_prefix );
+      break;
+
+    case PARTITION_MP_EXTRACT_PROXY:
+
+      the_thread = _Thread_MP_Find_proxy( the_packet->proxy_id );
+
+      if ( ! _Thread_Is_null( the_thread ) )
+         _Thread_queue_Extract( the_thread->Wait.queue, the_thread );
+
+      _MPCI_Return_packet( the_packet_prefix );
+      break;
+
+    case PARTITION_MP_GET_BUFFER_REQUEST:
+
+      the_packet->Prefix.return_code = rtems_partition_get_buffer(
+        the_packet->Prefix.id,
+        &the_packet->buffer
+      );
+
+      _Partition_MP_Send_response_packet(
+        PARTITION_MP_GET_BUFFER_RESPONSE,
+        the_packet->Prefix.id,
+        _Thread_Executing
+      );
+      break;
+
+    case PARTITION_MP_GET_BUFFER_RESPONSE:
+
+      the_thread = _MPCI_Process_response( the_packet_prefix );
+
+      *(void **)the_thread->Wait.return_argument = the_packet->buffer;
+
+      _MPCI_Return_packet( the_packet_prefix );
+      break;
+
+    case PARTITION_MP_RETURN_BUFFER_REQUEST:
+
+      the_packet->Prefix.return_code = rtems_partition_return_buffer(
+        the_packet->Prefix.id,
+        the_packet->buffer
+      );
+
+      _Partition_MP_Send_response_packet(
+        PARTITION_MP_RETURN_BUFFER_RESPONSE,
+        the_packet->Prefix.id,
+        _Thread_Executing
+      );
+      break;
+
+    case PARTITION_MP_RETURN_BUFFER_RESPONSE:
+
+      the_thread = _MPCI_Process_response( the_packet_prefix );
+
+      _MPCI_Return_packet( the_packet_prefix );
+      break;
+
+  }
+}
+
+/*PAGE
+ *
+ *  _Partition_MP_Send_object_was_deleted
+ *
+ *  This routine is not needed by the Partition since a partition
+ *  cannot be deleted when buffers are in use.
+ *
+ */
+
+/*PAGE
+ *
+ *  _Partition_MP_Send_extract_proxy
+ *
+ */
+
+void _Partition_MP_Send_extract_proxy (
+  Thread_Control *the_thread
+)
+{
+  _Partition_MP_Send_process_packet(
+    PARTITION_MP_EXTRACT_PROXY,
+    the_thread->Wait.id,
+    (Objects_Name) 0,
+    the_thread->Object.id
+  );
+
+}
+
+/*PAGE
+ *
+ *  _Partition_MP_Get_packet
+ *
+ */
+
+Partition_MP_Packet *_Partition_MP_Get_packet ( void )
+{
+  return ( (Partition_MP_Packet *) _MPCI_Get_packet() );
+}
+
+/* end of file */
Index: c/src/exec/rtems/src/ratemon.c
===================================================================
--- c/src/exec/rtems/src/ratemon.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/src/ratemon.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,401 @@
+/*
+ *  Rate Monotonic Manager
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/isr.h>
+#include <rtems/object.h>
+#include <rtems/ratemon.h>
+#include <rtems/thread.h>
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Manager_initialization
+ *
+ *  This routine initializes all Rate Monotonic Manager related
+ *  data structures.
+ *
+ *  Input parameters:
+ *    maximum_periods - number of periods timers to initialize
+ *
+ *  Output parameters:  NONE
+ *
+ *  NOTE: The Rate Monotonic Manager is built on top of the Watchdog
+ *        Handler.
+ */
+
+void _Rate_monotonic_Manager_initialization(
+  unsigned32 maximum_periods
+)
+{
+  _Objects_Initialize_information(
+     &_Rate_monotonic_Information,
+     FALSE,
+     maximum_periods,
+     sizeof( Rate_monotonic_Control )
+  );
+}
+
+/*PAGE
+ *
+ *  rtems_rate_monotonic_create
+ *
+ *  This directive creates a rate monotonic timer and performs
+ *  some initialization.
+ *
+ *  Input parameters:
+ *    name - name of period
+ *    id   - pointer to rate monotonic id
+ *
+ *  Output parameters:
+ *    id                - rate monotonic id
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_rate_monotonic_create(
+  Objects_Name  name,
+  Objects_Id   *id
+)
+{
+  Rate_monotonic_Control *the_period;
+
+  if ( !_Objects_Is_name_valid( name ) )
+    return( RTEMS_INVALID_NAME );
+
+  _Thread_Disable_dispatch();            /* to prevent deletion */
+
+  the_period = _Rate_monotonic_Allocate();
+
+  if ( !the_period ) {
+    _Thread_Enable_dispatch();
+    return( RTEMS_TOO_MANY );
+  }
+
+  the_period->owner = _Thread_Executing;
+  the_period->state = RATE_MONOTONIC_INACTIVE;
+
+  _Objects_Open( &_Rate_monotonic_Information, &the_period->Object, name );
+
+  *id = the_period->Object.id;
+  _Thread_Enable_dispatch();
+  return( RTEMS_SUCCESSFUL );
+}
+
+/*PAGE
+ *
+ *  rtems_rate_monotonic_ident
+ *
+ *  This directive returns the system ID associated with
+ *  the rate monotonic period name.
+ *
+ *  Input parameters:
+ *    name - user defined period name
+ *    id   - pointer to period id
+ *
+ *  Output parameters:
+ *    *id               - region id
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_rate_monotonic_ident(
+  Objects_Name  name,
+  Objects_Id   *id
+)
+{
+  return _Objects_Name_to_id(
+    &_Rate_monotonic_Information,
+    name,
+    RTEMS_SEARCH_LOCAL_NODE,
+    id
+  );
+}
+
+/*PAGE
+ *
+ *  rtems_rate_monotonic_cancel
+ *
+ *  This directive allows a thread to cancel a rate monotonic timer.
+ *
+ *  Input parameters:
+ *    id - rate monotonic id
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful and caller is not the owning thread
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_rate_monotonic_cancel(
+  Objects_Id id
+)
+{
+  Rate_monotonic_Control *the_period;
+  Objects_Locations              location;
+
+  the_period = _Rate_monotonic_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:            /* should never return this */
+      return( RTEMS_INTERNAL_ERROR );
+    case OBJECTS_LOCAL:
+      if ( !_Thread_Is_executing( the_period->owner ) ) {
+        _Thread_Enable_dispatch();
+        return( RTEMS_NOT_OWNER_OF_RESOURCE );
+      }
+      (void) _Watchdog_Remove( &the_period->Timer );
+      the_period->state = RATE_MONOTONIC_INACTIVE;
+      _Thread_Enable_dispatch();
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_rate_monotonic_delete
+ *
+ *  This directive allows a thread to delete a rate monotonic timer.
+ *
+ *  Input parameters:
+ *    id - rate monotonic id
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_rate_monotonic_delete(
+  Objects_Id id
+)
+{
+  Rate_monotonic_Control *the_period;
+  Objects_Locations              location;
+
+  the_period = _Rate_monotonic_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:            /* should never return this */
+      return( RTEMS_INTERNAL_ERROR );
+    case OBJECTS_LOCAL:
+      _Objects_Close( &_Rate_monotonic_Information, &the_period->Object );
+      (void) _Watchdog_Remove( &the_period->Timer );
+      the_period->state = RATE_MONOTONIC_INACTIVE;
+      _Rate_monotonic_Free( the_period );
+      _Thread_Enable_dispatch();
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_rate_monotonic_period
+ *
+ *  This directive allows a thread to manipulate a rate monotonic timer.
+ *
+ *  Input parameters:
+ *    id     - rate monotonic id
+ *    length - length of period (in ticks)
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_rate_monotonic_period(
+  Objects_Id        id,
+  rtems_interval length
+)
+{
+  Rate_monotonic_Control *the_period;
+  Objects_Locations       location;
+  rtems_status_code            return_value;
+
+  the_period = _Rate_monotonic_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:            /* should never return this */
+      return( RTEMS_INTERNAL_ERROR );
+    case OBJECTS_LOCAL:
+      if ( !_Thread_Is_executing( the_period->owner ) ) {
+        _Thread_Enable_dispatch();
+        return( RTEMS_NOT_OWNER_OF_RESOURCE );
+      }
+
+      if ( length == RTEMS_PERIOD_STATUS ) {
+        switch ( the_period->state ) {
+          case RATE_MONOTONIC_INACTIVE:
+            return_value = RTEMS_NOT_DEFINED;
+            break;
+          case RATE_MONOTONIC_ACTIVE:
+            return_value = RTEMS_SUCCESSFUL;
+            break;
+          case RATE_MONOTONIC_EXPIRED:
+            return_value = RTEMS_TIMEOUT;
+            break;
+          default:              /* unreached -- only to remove warnings */
+            return_value = RTEMS_INTERNAL_ERROR;
+            break;
+        }
+        _Thread_Enable_dispatch();
+        return( return_value );
+      }
+
+      switch ( the_period->state ) {
+        case RATE_MONOTONIC_INACTIVE:
+          the_period->state = RATE_MONOTONIC_ACTIVE;
+          _Watchdog_Initialize(
+            &the_period->Timer,
+            _Rate_monotonic_Timeout,
+            id,
+            NULL
+          );
+          _Watchdog_Insert_ticks(
+                     &the_period->Timer, length, WATCHDOG_ACTIVATE_NOW );
+          _Thread_Enable_dispatch();
+          return( RTEMS_SUCCESSFUL );
+
+        case RATE_MONOTONIC_ACTIVE:
+/* following is and could be a critical section problem */
+          _Thread_Executing->Wait.id  = the_period->Object.id;
+          if ( _Rate_monotonic_Set_state( the_period ) ) {
+            _Thread_Enable_dispatch();
+            return( RTEMS_SUCCESSFUL );
+          }
+         /* has expired -- fall into next case */
+        case RATE_MONOTONIC_EXPIRED:
+          the_period->state = RATE_MONOTONIC_ACTIVE;
+          _Watchdog_Insert_ticks(
+                     &the_period->Timer, length, WATCHDOG_ACTIVATE_NOW );
+          _Thread_Enable_dispatch();
+          return( RTEMS_TIMEOUT );
+      }
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ * _Rate_monotonic_Set_state
+ *
+ * This kernel routine sets the STATES_WAITING_FOR_PERIOD state in
+ * the running thread's tcb if the specified period has not expired.
+ * The ready chain is adjusted if necessary.
+ *
+ * Input parameters:
+ *   the_period - pointer to period control block
+ *
+ * Output parameters:
+ *   TRUE  - if blocked successfully for period
+ *   FALSE - if period has expired
+ *
+ *  INTERRUPT LATENCY:
+ *    delete node
+ *    priority map
+ *    select heir
+ */
+
+boolean _Rate_monotonic_Set_state(
+Rate_monotonic_Control *the_period
+)
+{
+  Thread_Control *executing;
+  Chain_Control  *ready;
+  ISR_Level              level;
+  States_Control         old_state;
+
+  executing = _Thread_Executing;
+  ready     = executing->ready;
+  _ISR_Disable( level );
+
+  old_state = executing->current_state;
+
+  if ( _Rate_monotonic_Is_expired( the_period ) ) {
+    _ISR_Enable( level );
+    return( FALSE );
+  }
+
+  executing->current_state =
+             _States_Set( STATES_WAITING_FOR_PERIOD, old_state );
+
+  if ( _States_Is_ready( old_state ) ) {
+    if ( _Chain_Has_only_one_node( ready ) ) {
+      _Chain_Initialize_empty( ready );
+      _Priority_Remove_from_bit_map( &executing->Priority_map );
+      _ISR_Flash( level );
+    } else {
+      _Chain_Extract_unprotected( &executing->Object.Node );
+      _ISR_Flash( level );
+    }
+
+    if ( _Thread_Is_heir( executing ) )
+      _Thread_Calculate_heir();
+
+    _Context_Switch_necessary = TRUE;
+  }
+
+  _ISR_Enable( level );
+  return( TRUE );
+}
+
+/*PAGE
+ *
+ *  _Rate_monotonic_Timeout
+ *
+ *  This routine processes a period ending.  If the owning thread
+ *  is waiting for the period, that thread is unblocked and the
+ *  period reinitiated.  Otherwise, the period is expired.
+ *  This routine is called by the watchdog handler.
+ *
+ *  Input parameters:
+ *    id - period id
+ *
+ *  Output parameters: NONE
+ */
+
+void _Rate_monotonic_Timeout(
+  Objects_Id  id,
+  void       *ignored
+)
+{
+  Rate_monotonic_Control *the_period;
+  Objects_Locations              location;
+  Thread_Control         *the_thread;
+
+  the_period = _Rate_monotonic_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+    case OBJECTS_REMOTE:  /* impossible */
+      break;
+    case OBJECTS_LOCAL:
+      the_thread = the_period->owner;
+      if ( _States_Is_waiting_for_period( the_thread->current_state ) &&
+            the_thread->Wait.id == the_period->Object.id ) {
+        _Thread_Unblock( the_thread );
+        _Watchdog_Reset( &the_period->Timer );
+      }
+      else
+        the_period->state = RATE_MONOTONIC_EXPIRED;
+      _Thread_Unnest_dispatch();
+      break;
+  }
+}
+
Index: c/src/exec/rtems/src/region.c
===================================================================
--- c/src/exec/rtems/src/region.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/src/region.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,456 @@
+/*
+ *  Region Manager
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/config.h>
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/region.h>
+#include <rtems/states.h>
+#include <rtems/thread.h>
+
+/*PAGE
+ *
+ *  _Region_Manager_initialization
+ *
+ *  This routine initializes all region manager related data structures.
+ *
+ *  Input parameters:
+ *    maximum_regions - number of regions to initialize
+ *
+ *  Output parameters:  NONE
+ */
+
+void _Region_Manager_initialization(
+  unsigned32 maximum_regions
+)
+{
+  _Objects_Initialize_information(
+     &_Region_Information,
+     FALSE,
+     maximum_regions,
+     sizeof( Region_Control )
+   );
+}
+
+/*PAGE
+ *
+ *  rtems_region_create
+ *
+ *  This directive creates a region of physical contiguous memory area
+ *  from which variable sized segments can be allocated.
+ *
+ *  Input parameters:
+ *    name             - user defined region name
+ *    starting_address - physical start address of region
+ *    length           - physical length in bytes
+ *    page_size        - page size in bytes
+ *    attribute_set    - region attributes
+ *    id               - address of region id to set
+ *
+ *  Output parameters:
+ *    id       - region id
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code - if unsuccessful
+ */
+
+rtems_status_code rtems_region_create(
+  Objects_Name        name,
+  void               *starting_address,
+  unsigned32          length,
+  unsigned32          page_size,
+  rtems_attribute  attribute_set,
+  Objects_Id         *id
+)
+{
+  Region_Control *the_region;
+
+  if ( !_Objects_Is_name_valid( name ) )
+    return ( RTEMS_INVALID_NAME );
+
+  if ( !_Addresses_Is_aligned( starting_address ) )
+    return( RTEMS_INVALID_ADDRESS );
+
+  _Thread_Disable_dispatch();             /* to prevent deletion */
+
+  the_region = _Region_Allocate();
+
+  if ( !the_region ) {
+    _Thread_Enable_dispatch();
+    return( RTEMS_TOO_MANY );
+  }
+
+  the_region->maximum_segment_size =
+    _Heap_Initialize(&the_region->Memory, starting_address, length, page_size);
+
+  if ( !the_region->maximum_segment_size ) {
+    _Region_Free( the_region );
+    _Thread_Enable_dispatch();
+    return( RTEMS_INVALID_SIZE );
+  }
+
+  the_region->starting_address      = starting_address;
+  the_region->length                = length;
+  the_region->page_size             = page_size;
+  the_region->attribute_set         = attribute_set;
+  the_region->number_of_used_blocks = 0;
+
+  _Thread_queue_Initialize(
+     &the_region->Wait_queue, attribute_set, STATES_WAITING_FOR_SEGMENT );
+
+  _Objects_Open( &_Region_Information, &the_region->Object, name );
+
+  *id = the_region->Object.id;
+  _Thread_Enable_dispatch();
+  return( RTEMS_SUCCESSFUL );
+}
+
+/*PAGE
+ *
+ *  rtems_region_ident
+ *
+ *  This directive returns the system ID associated with
+ *  the region name.
+ *
+ *  Input parameters:
+ *    name - user defined region name
+ *    id   - pointer to region id
+ *
+ *  Output parameters:
+ *    *id      - region id
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code - if unsuccessful
+ */
+
+rtems_status_code rtems_region_ident(
+  Objects_Name  name,
+  Objects_Id   *id
+)
+{
+  return _Objects_Name_to_id(
+      &_Region_Information,
+      name,
+      RTEMS_SEARCH_LOCAL_NODE,
+      id
+    );
+}
+
+/*PAGE
+ *
+ *  rtems_region_delete
+ *
+ *  This directive allows a thread to delete a region specified by
+ *  the region identifier, provided that none of its segments are
+ *  still allocated.
+ *
+ *  Input parameters:
+ *    id - region id
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code - if unsuccessful
+ */
+
+rtems_status_code rtems_region_delete(
+  Objects_Id id
+)
+{
+  register Region_Control *the_region;
+  Objects_Locations               location;
+
+  the_region = _Region_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:        /* this error cannot be returned */
+      return( RTEMS_INTERNAL_ERROR );
+    case OBJECTS_LOCAL:
+      _Region_Debug_Walk( the_region, 5 );
+      if ( the_region->number_of_used_blocks == 0 ) {
+        _Objects_Close( &_Region_Information, &the_region->Object );
+        _Region_Free( the_region );
+        _Thread_Enable_dispatch();
+        return( RTEMS_SUCCESSFUL );
+      }
+      _Thread_Enable_dispatch();
+      return( RTEMS_RESOURCE_IN_USE );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_region_extend
+ *
+ *  This directive attempts to grow a region of physical contiguous memory area
+ *  from which variable sized segments can be allocated.
+ *
+ *  Input parameters:
+ *    id         - id of region to grow
+ *    start      - starting address of memory area for extension
+ *    length     - physical length in bytes to grow the region
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code       - if unsuccessful
+ */
+
+rtems_status_code rtems_region_extend(
+  Objects_Id          id,
+  void               *starting_address,
+  unsigned32          length
+)
+{
+  Region_Control     *the_region;
+  Objects_Locations   location;
+  unsigned32          amount_extended;
+  Heap_Extend_status  heap_status;
+  rtems_status_code   status;
+
+  status = RTEMS_SUCCESSFUL;
+
+  the_region = _Region_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:        /* this error cannot be returned */
+      return( RTEMS_INTERNAL_ERROR );
+    case OBJECTS_LOCAL:
+
+      heap_status = _Heap_Extend(
+        &the_region->Memory,
+        starting_address,
+        length,
+        &amount_extended
+      );
+
+      switch ( heap_status ) {
+        case HEAP_EXTEND_SUCCESSFUL:
+          the_region->length                += amount_extended;
+          the_region->maximum_segment_size  += amount_extended;
+          break;
+        case HEAP_EXTEND_ERROR:
+          status = RTEMS_INVALID_ADDRESS;
+          break;
+        case HEAP_EXTEND_NOT_IMPLEMENTED:
+          status = RTEMS_NOT_IMPLEMENTED;
+          break;
+      }
+      _Thread_Enable_dispatch();
+      return( status );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );
+}
+
+/*PAGE
+ *
+ *  rtems_region_get_segment
+ *
+ *  This directive will obtain a segment from the given region.
+ *
+ *  Input parameters:
+ *    id         - region id
+ *    size       - segment size in bytes
+ *    option_set - wait option
+ *    timeout    - number of ticks to wait (0 means wait forever)
+ *    segment    - pointer to segment address
+ *
+ *  Output parameters:
+ *    segment    - pointer to segment address filled in
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code - if unsuccessful
+ */
+
+rtems_status_code rtems_region_get_segment(
+  Objects_Id         id,
+  unsigned32         size,
+  rtems_option    option_set,
+  rtems_interval  timeout,
+  void              **segment
+)
+{
+  register Region_Control *the_region;
+  Objects_Locations        location;
+  Thread_Control          *executing;
+  void                    *the_segment;
+
+  if ( size == 0 )
+    return( RTEMS_INVALID_SIZE );
+
+  executing  = _Thread_Executing;
+  the_region = _Region_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:        /* this error cannot be returned */
+      return( RTEMS_INTERNAL_ERROR );
+    case OBJECTS_LOCAL:
+      if ( size > the_region->maximum_segment_size ) {
+        _Thread_Enable_dispatch();
+        return( RTEMS_INVALID_SIZE );
+      }
+
+      _Region_Debug_Walk( the_region, 1 );
+
+      the_segment = _Region_Allocate_segment( the_region, size );
+
+      _Region_Debug_Walk( the_region, 2 );
+
+      if ( the_segment ) {
+        the_region->number_of_used_blocks += 1;
+        _Thread_Enable_dispatch();
+        *segment = the_segment;
+        return( RTEMS_SUCCESSFUL );
+      }
+
+      if ( _Options_Is_no_wait( option_set ) ) {
+        _Thread_Enable_dispatch();
+        return( RTEMS_UNSATISFIED );
+      }
+
+      executing->Wait.queue              = &the_region->Wait_queue;
+      executing->Wait.id                 = id;
+      executing->Wait.Extra.segment_size = size;
+      executing->Wait.return_argument    = (unsigned32 *) segment;
+
+      the_region->Wait_queue.sync = TRUE;
+
+      _Thread_queue_Enqueue( &the_region->Wait_queue, timeout );
+
+      _Thread_Enable_dispatch();
+      return( executing->Wait.return_code );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+/*PAGE
+ *
+ *  rtems_region_get_segment_size
+ *
+ *  This directive will return the size of the segment indicated
+ *
+ *  Input parameters:
+ *    id         - region id
+ *    segment    - segment address
+ *    size       - pointer to segment size in bytes
+ *
+ *  Output parameters:
+ *    size       - segment size in bytes filled in
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code - if unsuccessful
+ */
+
+rtems_status_code rtems_region_get_segment_size(
+  Objects_Id         id,
+  void              *segment,
+  unsigned32        *size
+)
+{
+  register Region_Control *the_region;
+  Objects_Locations        location;
+  Thread_Control          *executing;
+
+  executing  = _Thread_Executing;
+  the_region = _Region_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:        /* this error cannot be returned */
+      return( RTEMS_INTERNAL_ERROR );
+    case OBJECTS_LOCAL:
+
+      if ( _Heap_Size_of_user_area( &the_region->Memory, segment, size ) ) {
+        _Thread_Enable_dispatch();
+        return( RTEMS_SUCCESSFUL );
+      }
+      _Thread_Enable_dispatch();
+      return( RTEMS_INVALID_ADDRESS );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_region_return_segment
+ *
+ *  This directive will return a segment to its region.
+ *
+ *  Input parameters:
+ *    id      - region id
+ *    segment - pointer to segment address
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_region_return_segment(
+  Objects_Id  id,
+  void       *segment
+)
+{
+  register Region_Control *the_region;
+  Thread_Control          *the_thread;
+  Objects_Locations        location;
+  void                   **the_segment;
+  int                      status;
+
+  the_region = _Region_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:        /* this error cannot be returned */
+      return( RTEMS_INTERNAL_ERROR );
+    case OBJECTS_LOCAL:
+
+      _Region_Debug_Walk( the_region, 3 );
+
+      status = _Region_Free_segment( the_region, segment );
+
+      _Region_Debug_Walk( the_region, 4 );
+
+      if ( !status ) {
+        _Thread_Enable_dispatch();
+        return( RTEMS_INVALID_ADDRESS );
+      }
+
+      the_region->number_of_used_blocks -= 1;
+      for ( ; ; ) {
+        the_thread = _Thread_queue_First( &the_region->Wait_queue );
+
+        if ( the_thread == NULL )
+           break;
+
+        the_segment = _Region_Allocate_segment(
+                        the_region, the_thread->Wait.Extra.segment_size );
+
+        if ( the_segment == NULL )
+           break;
+
+        *(void **)the_thread->Wait.return_argument = the_segment;
+        the_region->number_of_used_blocks += 1;
+        _Thread_queue_Extract( &the_region->Wait_queue, the_thread );
+        the_thread->Wait.return_code = RTEMS_SUCCESSFUL;
+      }
+
+      _Thread_Enable_dispatch();
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
Index: c/src/exec/rtems/src/regionmp.c
===================================================================
--- c/src/exec/rtems/src/regionmp.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/src/regionmp.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,308 @@
+/*
+ *  Multiprocessing Support for the Region Manager
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/mpci.h>
+#include <rtems/mppkt.h>
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/region.h>
+#include <rtems/thread.h>
+
+/*PAGE
+ *
+ *  _Region_MP_Send_process_packet
+ *
+ */
+
+void _Region_MP_Send_process_packet (
+  Region_MP_Remote_operations  operation,
+  Objects_Id                      region_id,
+  Objects_Name                    name,
+  Objects_Id                      proxy_id
+)
+{
+  Region_MP_Packet *the_packet;
+  unsigned32           node;
+
+  switch ( operation ) {
+
+    case REGION_MP_ANNOUNCE_CREATE:
+    case REGION_MP_ANNOUNCE_DELETE:
+    case REGION_MP_EXTRACT_PROXY:
+
+      the_packet                    = _Region_MP_Get_packet();
+      the_packet->Prefix.the_class  = RTEMS_MP_PACKET_REGION;
+      the_packet->Prefix.length     = sizeof ( Region_MP_Packet );
+      the_packet->Prefix.to_convert = sizeof ( Region_MP_Packet );
+      the_packet->operation         = operation;
+      the_packet->Prefix.id         = region_id;
+      the_packet->name              = name;
+      the_packet->proxy_id          = proxy_id;
+
+      if ( operation == REGION_MP_EXTRACT_PROXY )
+         node = rtems_get_node( region_id );
+      else
+         node = MPCI_ALL_NODES;
+
+      _MPCI_Send_process_packet( node, &the_packet->Prefix );
+      break;
+
+    case REGION_MP_GET_SEGMENT_REQUEST:
+    case REGION_MP_GET_SEGMENT_RESPONSE:
+    case REGION_MP_RETURN_SEGMENT_REQUEST:
+    case REGION_MP_RETURN_SEGMENT_RESPONSE:
+      break;
+  }
+}
+
+/*PAGE
+ *
+ *  _Region_MP_Send_request_packet
+ *
+ */
+
+rtems_status_code _Region_MP_Send_request_packet (
+  Region_MP_Remote_operations  operation,
+  Objects_Id                   region_id,
+  void                        *segment,
+  unsigned32                   size,
+  rtems_option              option_set,
+  rtems_interval            timeout
+)
+{
+  Region_MP_Packet *the_packet;
+
+  switch ( operation ) {
+
+    case REGION_MP_GET_SEGMENT_REQUEST:
+    case REGION_MP_RETURN_SEGMENT_REQUEST:
+
+      the_packet                    = _Region_MP_Get_packet();
+      the_packet->Prefix.the_class  = RTEMS_MP_PACKET_REGION;
+      the_packet->Prefix.length     = sizeof ( Region_MP_Packet );
+      the_packet->Prefix.to_convert = sizeof ( Region_MP_Packet );
+      if ( ! _Options_Is_no_wait(option_set))
+          the_packet->Prefix.timeout = timeout;
+
+      the_packet->operation         = operation;
+      the_packet->Prefix.id         = region_id;
+      the_packet->segment           = segment;
+      the_packet->size              = size;
+      the_packet->option_set        = option_set;
+
+      return _MPCI_Send_request_packet(
+          rtems_get_node( region_id ),
+          &the_packet->Prefix,
+          STATES_READY      /* Not used */
+        );
+      break;
+
+    case REGION_MP_ANNOUNCE_CREATE:
+    case REGION_MP_ANNOUNCE_DELETE:
+    case REGION_MP_EXTRACT_PROXY:
+    case REGION_MP_GET_SEGMENT_RESPONSE:
+    case REGION_MP_RETURN_SEGMENT_RESPONSE:
+      break;
+
+  }
+  /*
+   *  The following line is included to satisfy compilers which
+   *  produce warnings when a function does not end with a return.
+   */
+  return RTEMS_INTERNAL_ERROR;
+}
+
+/*PAGE
+ *
+ *  _Region_MP_Send_response_packet
+ *
+ */
+
+void _Region_MP_Send_response_packet (
+  Region_MP_Remote_operations  operation,
+  Objects_Id                   region_id,
+  Thread_Control              *the_thread
+)
+{
+  Region_MP_Packet *the_packet;
+
+  switch ( operation ) {
+
+    case REGION_MP_GET_SEGMENT_RESPONSE:
+    case REGION_MP_RETURN_SEGMENT_RESPONSE:
+
+      the_packet = ( Region_MP_Packet *) the_thread->receive_packet;
+
+/*
+ *  The packet being returned already contains the class, length, and
+ *  to_convert fields, therefore they are not set in this routine.
+ */
+      the_packet->operation = operation;
+      the_packet->Prefix.id = the_packet->Prefix.source_tid;
+
+      _MPCI_Send_response_packet(
+        rtems_get_node( the_packet->Prefix.source_tid ),
+        &the_packet->Prefix
+      );
+      break;
+
+    case REGION_MP_ANNOUNCE_CREATE:
+    case REGION_MP_ANNOUNCE_DELETE:
+    case REGION_MP_EXTRACT_PROXY:
+    case REGION_MP_GET_SEGMENT_REQUEST:
+    case REGION_MP_RETURN_SEGMENT_REQUEST:
+      break;
+
+  }
+}
+
+/*PAGE
+ *
+ *
+ *  _Region_MP_Process_packet
+ *
+ */
+
+void _Region_MP_Process_packet (
+  rtems_packet_prefix  *the_packet_prefix
+)
+{
+  Region_MP_Packet *the_packet;
+  Thread_Control   *the_thread;
+  boolean           ignored;
+
+  the_packet = (Region_MP_Packet *) the_packet_prefix;
+
+  switch ( the_packet->operation ) {
+
+    case REGION_MP_ANNOUNCE_CREATE:
+
+      ignored = _Objects_MP_Open(
+                  &_Region_Information,
+                  the_packet->name,
+                  the_packet->Prefix.id,
+                  TRUE
+                );
+
+      _MPCI_Return_packet( the_packet_prefix );
+      break;
+
+    case REGION_MP_ANNOUNCE_DELETE:
+
+      _Objects_MP_Close( &_Region_Information, the_packet->Prefix.id );
+
+      _MPCI_Return_packet( the_packet_prefix );
+      break;
+
+    case REGION_MP_EXTRACT_PROXY:
+
+      the_thread = _Thread_MP_Find_proxy( the_packet->proxy_id );
+
+      if ( ! _Thread_Is_null( the_thread ) )
+        _Thread_queue_Extract( the_thread->Wait.queue, the_thread );
+
+      _MPCI_Return_packet( the_packet_prefix );
+      break;
+
+    case REGION_MP_GET_SEGMENT_REQUEST:
+
+      the_packet->Prefix.return_code = rtems_region_get_segment(
+        the_packet->Prefix.id,
+        the_packet->size,
+        the_packet->option_set,
+        the_packet->Prefix.timeout,
+        &the_packet->segment
+      );
+
+      _Region_MP_Send_response_packet(
+        REGION_MP_GET_SEGMENT_RESPONSE,
+        the_packet->Prefix.id,
+        _Thread_Executing
+      );
+      break;
+
+    case REGION_MP_GET_SEGMENT_RESPONSE:
+
+      the_thread = _MPCI_Process_response( the_packet_prefix );
+
+      *(void **)the_thread->Wait.return_argument = the_packet->segment;
+
+      _MPCI_Return_packet( the_packet_prefix );
+      break;
+
+    case REGION_MP_RETURN_SEGMENT_REQUEST:
+
+      the_packet->Prefix.return_code = rtems_region_return_segment(
+        the_packet->Prefix.id,
+        the_packet->segment
+      );
+
+      _Region_MP_Send_response_packet(
+        REGION_MP_RETURN_SEGMENT_RESPONSE,
+        the_packet->Prefix.id,
+        _Thread_Executing
+      );
+      break;
+
+    case REGION_MP_RETURN_SEGMENT_RESPONSE:
+
+      the_thread = _MPCI_Process_response( the_packet_prefix );
+
+      _MPCI_Return_packet( the_packet_prefix );
+      break;
+
+  }
+}
+
+/*PAGE
+ *
+ *  _Region_MP_Send_object_was_deleted
+ *
+ *  This routine is not needed by the Region since a region
+ *  cannot be deleted when segments are in use.
+ *
+ */
+
+/*PAGE
+ *
+ *  _Region_MP_Send_extract_proxy
+ *
+ */
+
+void _Region_MP_Send_extract_proxy (
+  Thread_Control *the_thread
+)
+{
+  _Region_MP_Send_process_packet(
+    REGION_MP_EXTRACT_PROXY,
+    the_thread->Wait.id,
+    (Objects_Name) 0,
+    the_thread->Object.id
+  );
+}
+
+/*PAGE
+ *
+ *  _Region_MP_Get_packet
+ *
+ */
+
+Region_MP_Packet *_Region_MP_Get_packet ( void )
+{
+  return ( (Region_MP_Packet *) _MPCI_Get_packet() );
+}
+
+/* end of file */
Index: c/src/exec/rtems/src/rtclock.c
===================================================================
--- c/src/exec/rtems/src/rtclock.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/src/rtclock.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,153 @@
+/*
+ *  Clock Manager
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/clock.h>
+#include <rtems/config.h>
+#include <rtems/isr.h>
+#include <rtems/thread.h>
+#include <rtems/tod.h>
+#include <rtems/watchdog.h>
+
+/*PAGE
+ *
+ *  rtems_clock_get
+ *
+ *  This directive returns the current date and time.  If the time has
+ *  not been set by a tm_set then an error is returned.
+ *
+ *  Input parameters:
+ *    option      - which value to return
+ *    time_buffer - pointer to output buffer (a time and date structure
+ *                  or an interval)
+ *
+ *  Output parameters:
+ *    time_buffer      - output filled in
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code       - if unsuccessful
+ */
+
+rtems_status_code rtems_clock_get(
+  rtems_clock_get_options  option,
+  void                    *time_buffer
+)
+{
+  ISR_Level      level;
+  rtems_interval tmp;
+
+  switch ( option ) {
+    case RTEMS_CLOCK_GET_TOD:
+      if ( !_TOD_Is_set() )
+        return( RTEMS_NOT_DEFINED );
+
+      *(rtems_time_of_day *)time_buffer = _TOD_Current;
+      return( RTEMS_SUCCESSFUL );
+
+    case RTEMS_CLOCK_GET_SECONDS_SINCE_EPOCH:
+      if ( !_TOD_Is_set() )
+        return( RTEMS_NOT_DEFINED );
+
+      *(rtems_interval *)time_buffer = _TOD_Seconds_since_epoch;
+      return( RTEMS_SUCCESSFUL );
+
+    case RTEMS_CLOCK_GET_TICKS_SINCE_BOOT:
+      *(rtems_interval *)time_buffer = _TOD_Ticks_since_boot;
+      return( RTEMS_SUCCESSFUL );
+
+    case RTEMS_CLOCK_GET_TICKS_PER_SECOND:
+      *(rtems_interval *)time_buffer = _TOD_Ticks_per_second;
+      return( RTEMS_SUCCESSFUL );
+
+    case RTEMS_CLOCK_GET_TIME_VALUE:
+      if ( !_TOD_Is_set() )
+        return( RTEMS_NOT_DEFINED );
+
+      _ISR_Disable( level );
+        ((rtems_clock_time_value *)time_buffer)->seconds =
+          _TOD_Seconds_since_epoch;
+        tmp = _TOD_Current.ticks;
+      _ISR_Enable( level );
+
+      tmp *= _Configuration_Table->microseconds_per_tick;
+      ((rtems_clock_time_value *)time_buffer)->microseconds = tmp;
+
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  return( RTEMS_SUCCESSFUL );   /* should never get here */
+
+}
+
+/*PAGE
+ *
+ *  rtems_clock_set
+ *
+ *  This directive sets the date and time for this node.
+ *
+ *  Input parameters:
+ *    time_buffer - pointer to the time and date structure
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_clock_set(
+  rtems_time_of_day *time_buffer
+)
+{
+  rtems_status_code      local_result;
+  rtems_interval seconds;
+
+  local_result = _TOD_Validate( time_buffer );
+  if ( rtems_is_status_successful( local_result ) ) {
+    seconds = _TOD_To_seconds( time_buffer );
+    _Thread_Disable_dispatch();
+      _TOD_Set( time_buffer, seconds );
+    _Thread_Enable_dispatch();
+
+  }
+  return( local_result );
+}
+
+/*PAGE
+ *
+ *  rtems_clock_tick
+ *
+ *  This directive notifies the executve that a tick has occurred.
+ *  When the tick occurs the time manager updates and maintains
+ *  the calendar time, timeslicing, and any timeout delays.
+ *
+ *  Input parameters:  NONE
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - always succeeds
+ *
+ *  NOTE: This routine only works for leap-years through 2099.
+ */
+
+rtems_status_code rtems_clock_tick( void )
+{
+  _TOD_Tickle_ticks();
+
+  _Watchdog_Tickle_ticks();
+
+  _Thread_Tickle_timeslice();
+
+  if ( _Thread_Is_context_switch_necessary() &&
+       _Thread_Is_dispatching_enabled() )
+    _Thread_Dispatch();
+
+  return( RTEMS_SUCCESSFUL );
+}
Index: c/src/exec/rtems/src/rtemstimer.c
===================================================================
--- c/src/exec/rtems/src/rtemstimer.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/src/rtemstimer.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,343 @@
+/*
+ *  Timer Manager
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/object.h>
+#include <rtems/thread.h>
+#include <rtems/timer.h>
+#include <rtems/tod.h>
+#include <rtems/watchdog.h>
+
+/*PAGE
+ *
+ *  _Timer_Manager_initialization
+ *
+ *  This routine initializes all timer manager related data structures.
+ *
+ *  Input parameters:
+ *    maximum_timers - number of timers to initialize
+ *
+ *  Output parameters:  NONE
+ */
+
+void _Timer_Manager_initialization(
+  unsigned32 maximum_timers
+)
+{
+  _Objects_Initialize_information(
+     &_Timer_Information,
+     FALSE,
+     maximum_timers,
+     sizeof( Timer_Control )
+  );
+}
+
+/*PAGE
+ *
+ *  rtems_timer_create
+ *
+ *  This directive creates a timer and performs some initialization.
+ *
+ *  Input parameters:
+ *    name - timer name
+ *    id   - pointer to timer id
+ *
+ *  Output parameters:
+ *    id                - timer id
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_timer_create(
+  Objects_Name  name,
+  Objects_Id   *id
+)
+{
+  Timer_Control *the_timer;
+
+  if ( !_Objects_Is_name_valid( name ) )
+    return ( RTEMS_INVALID_NAME );
+
+  _Thread_Disable_dispatch();         /* to prevent deletion */
+
+  the_timer = _Timer_Allocate();
+
+  if ( !the_timer ) {
+    _Thread_Enable_dispatch();
+    return( RTEMS_TOO_MANY );
+  }
+
+  the_timer->the_class = TIMER_DORMANT;
+
+  _Objects_Open( &_Timer_Information, &the_timer->Object, name );
+
+  *id = the_timer->Object.id;
+  _Thread_Enable_dispatch();
+  return( RTEMS_SUCCESSFUL );
+}
+
+/*PAGE
+ *
+ *  rtems_timer_ident
+ *
+ *  This directive returns the system ID associated with
+ *  the timer name.
+ *
+ *  Input parameters:
+ *    name - user defined message queue name
+ *    id   - pointer to timer id
+ *
+ *  Output parameters:
+ *    *id               - message queue id
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_timer_ident(
+  Objects_Name  name,
+  Objects_Id   *id
+)
+{
+  return _Objects_Name_to_id(
+    &_Timer_Information,
+    name,
+    RTEMS_SEARCH_LOCAL_NODE,
+    id
+  );
+}
+
+/*PAGE
+ *
+ *  rtems_timer_cancel
+ *
+ *  This directive allows a thread to cancel a timer.
+ *
+ *  Input parameters:
+ *    id - timer id
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code - if unsuccessful
+ */
+
+rtems_status_code rtems_timer_cancel(
+  Objects_Id id
+)
+{
+  Timer_Control   *the_timer;
+  Objects_Locations       location;
+
+  the_timer = _Timer_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:            /* should never return this */
+      return( RTEMS_INTERNAL_ERROR );
+    case OBJECTS_LOCAL:
+      if ( !_Timer_Is_dormant_class( the_timer->the_class ) ) {
+        (void) _Watchdog_Remove( &the_timer->Ticker );
+        _Thread_Enable_dispatch();
+        return( RTEMS_SUCCESSFUL );
+      }
+      _Thread_Enable_dispatch();
+      return( RTEMS_INCORRECT_STATE );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_timer_delete
+ *
+ *  This directive allows a thread to delete a timer.
+ *
+ *  Input parameters:
+ *    id - timer id
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code - if unsuccessful
+ */
+
+rtems_status_code rtems_timer_delete(
+  Objects_Id id
+)
+{
+  Timer_Control   *the_timer;
+  Objects_Locations       location;
+
+  the_timer = _Timer_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:            /* should never return this */
+      return( RTEMS_INTERNAL_ERROR );
+    case OBJECTS_LOCAL:
+      _Objects_Close( &_Timer_Information, &the_timer->Object );
+      (void) _Watchdog_Remove( &the_timer->Ticker );
+      _Timer_Free( the_timer );
+      _Thread_Enable_dispatch();
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_timer_fire_after
+ *
+ *  This directive allows a thread to start a timer.
+ *
+ *  Input parameters:
+ *    id      - timer id
+ *    ticks   - interval until routine is fired
+ *    routine - routine to schedule
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_timer_fire_after(
+  Objects_Id         id,
+  rtems_interval  ticks,
+  Timer_Service      routine,
+  void              *user_data
+)
+{
+  Timer_Control   *the_timer;
+  Objects_Locations       location;
+
+  if ( ticks == 0 )
+    return( RTEMS_INVALID_NUMBER );
+
+  the_timer = _Timer_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:            /* should never return this */
+      return( RTEMS_INTERNAL_ERROR );
+    case OBJECTS_LOCAL:
+      (void) _Watchdog_Remove( &the_timer->Ticker );
+      the_timer->the_class = TIMER_INTERVAL;
+      _Watchdog_Initialize( &the_timer->Ticker, routine, id, user_data );
+      _Watchdog_Insert_ticks( &the_timer->Ticker,
+                                 ticks, WATCHDOG_ACTIVATE_NOW );
+      _Thread_Enable_dispatch();
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_timer_fire_when
+ *
+ *  This directive allows a thread to start a timer.
+ *
+ *  Input parameters:
+ *    id        - timer id
+ *    wall_time - time of day to fire timer
+ *    routine   - routine to schedule
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_timer_fire_when(
+  Objects_Id          id,
+  rtems_time_of_day        *wall_time,
+  Timer_Service       routine,
+  void               *user_data
+)
+{
+  Timer_Control   *the_timer;
+  Objects_Locations       location;
+  rtems_status_code            validate_status;
+  rtems_interval       seconds;
+
+  if ( !_TOD_Is_set() )
+    return( RTEMS_NOT_DEFINED );
+
+  validate_status = _TOD_Validate( wall_time );
+  if ( !rtems_is_status_successful( validate_status ) )
+    return( validate_status );
+
+  seconds = _TOD_To_seconds( wall_time );
+  if ( seconds <= _TOD_Seconds_since_epoch )
+    return( RTEMS_INVALID_CLOCK );
+
+  the_timer = _Timer_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:            /* should never return this */
+      return( RTEMS_INTERNAL_ERROR );
+    case OBJECTS_LOCAL:
+      (void) _Watchdog_Remove( &the_timer->Ticker );
+      the_timer->the_class = TIMER_TIME_OF_DAY;
+      _Watchdog_Initialize( &the_timer->Ticker, routine, id, user_data );
+      _Watchdog_Insert_seconds( &the_timer->Ticker,
+                seconds - _TOD_Seconds_since_epoch, WATCHDOG_ACTIVATE_NOW );
+      _Thread_Enable_dispatch();
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_timer_reset
+ *
+ *  This directive allows a thread to reset a timer.
+ *
+ *  Input parameters:
+ *    id - timer id
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_timer_reset(
+  Objects_Id id
+)
+{
+  Timer_Control *the_timer;
+  Objects_Locations     location;
+
+  the_timer = _Timer_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:            /* should never return this */
+      return( RTEMS_INTERNAL_ERROR );
+    case OBJECTS_LOCAL:
+      if ( _Timer_Is_interval_class( the_timer->the_class ) ) {
+        _Watchdog_Reset( &the_timer->Ticker );
+        _Thread_Enable_dispatch();
+        return( RTEMS_SUCCESSFUL );
+      }
+      _Thread_Enable_dispatch();
+      return( RTEMS_NOT_DEFINED );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
Index: c/src/exec/rtems/src/sem.c
===================================================================
--- c/src/exec/rtems/src/sem.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/src/sem.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,483 @@
+/*
+ *  Semaphore Manager
+ *
+ *  DESCRIPTION:
+ *
+ *  This package is the implementation of the Semaphore Manager.
+ *  This manager utilizes standard Dijkstra counting semaphores to provide
+ *  synchronization and mutual exclusion capabilities.
+ *
+ *  Directives provided are:
+ *
+ *     + create a semaphore
+ *     + get an ID of a semaphore
+ *     + delete a semaphore
+ *     + acquire a semaphore
+ *     + release a semaphore
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/attr.h>
+#include <rtems/config.h>
+#include <rtems/isr.h>
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/sem.h>
+#include <rtems/states.h>
+#include <rtems/thread.h>
+#include <rtems/threadq.h>
+#include <rtems/mpci.h>
+
+/*PAGE
+ *
+ *  _Semaphore_Manager_initialization
+ *
+ *  This routine initializes all semaphore manager related data structures.
+ *
+ *  Input parameters:
+ *    maximum_semaphores - maximum configured semaphores
+ *
+ *  Output parameters:  NONE
+ */
+
+void _Semaphore_Manager_initialization(
+  unsigned32 maximum_semaphores
+)
+{
+  _Objects_Initialize_information(
+    &_Semaphore_Information,
+    TRUE,
+    maximum_semaphores,
+    sizeof( Semaphore_Control )
+  );
+}
+
+/*PAGE
+ *
+ *  rtems_semaphore_create
+ *
+ *  This directive creates a semaphore and sets the initial value based
+ *  on the given count.  A semaphore id is returned.
+ *
+ *  Input parameters:
+ *    name          - user defined semaphore name
+ *    count         - initial count of semaphore
+ *    attribute_set - semaphore attributes
+ *    id            - pointer to semaphore id
+ *
+ *  Output parameters:
+ *    id       - semaphore id
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code - if unsuccessful
+ */
+
+rtems_status_code rtems_semaphore_create(
+  Objects_Name        name,
+  unsigned32          count,
+  rtems_attribute  attribute_set,
+  Objects_Id         *id
+)
+{
+  register Semaphore_Control *the_semaphore;
+
+  if ( !_Objects_Is_name_valid( name ) )
+    return ( RTEMS_INVALID_NAME );
+
+  if ( _Attributes_Is_global( attribute_set ) ) {
+
+    if ( !_Configuration_Is_multiprocessing() )
+      return( RTEMS_MP_NOT_CONFIGURED );
+
+    if ( _Attributes_Is_inherit_priority( attribute_set ) )
+      return( RTEMS_NOT_DEFINED );
+
+  } else if ( _Attributes_Is_inherit_priority( attribute_set ) ) {
+
+    if ( ! ( _Attributes_Is_binary_semaphore( attribute_set ) &&
+             _Attributes_Is_priority( attribute_set ) ) )
+      return( RTEMS_NOT_DEFINED );
+
+  }
+
+  if ( _Attributes_Is_binary_semaphore( attribute_set ) && ( count > 1 ) )
+    return( RTEMS_INVALID_NUMBER );
+
+  _Thread_Disable_dispatch();             /* prevents deletion */
+
+  the_semaphore = _Semaphore_Allocate();
+
+  if ( !the_semaphore ) {
+    _Thread_Enable_dispatch();
+    return( RTEMS_TOO_MANY );
+  }
+
+  if ( _Attributes_Is_global( attribute_set ) &&
+       !( _Objects_MP_Open( &_Semaphore_Information, name,
+                            the_semaphore->Object.id, FALSE ) ) ) {
+    _Semaphore_Free( the_semaphore );
+    _Thread_Enable_dispatch();
+    return( RTEMS_TOO_MANY );
+  }
+
+  the_semaphore->attribute_set = attribute_set;
+  the_semaphore->count         = count;
+
+  if ( _Attributes_Is_binary_semaphore( attribute_set ) && count == 0 ) {
+    the_semaphore->nest_count = 1;
+    the_semaphore->holder     = _Thread_Executing;
+    the_semaphore->holder_id  = _Thread_Executing->Object.id;
+    _Thread_Executing->resource_count++;
+  } else {
+    the_semaphore->nest_count = 0;
+    the_semaphore->holder     = NULL;
+    the_semaphore->holder_id  = 0;
+  }
+
+  _Thread_queue_Initialize( &the_semaphore->Wait_queue,
+                            attribute_set, STATES_WAITING_FOR_SEMAPHORE );
+
+  _Objects_Open( &_Semaphore_Information, &the_semaphore->Object, name );
+
+  *id = the_semaphore->Object.id;
+
+  if ( _Attributes_Is_global( attribute_set ) )
+    _Semaphore_MP_Send_process_packet(
+      SEMAPHORE_MP_ANNOUNCE_CREATE,
+      the_semaphore->Object.id,
+      name,
+      0                          /* Not used */
+    );
+  _Thread_Enable_dispatch();
+  return( RTEMS_SUCCESSFUL );
+}
+
+/*PAGE
+ *
+ *  rtems_semaphore_ident
+ *
+ *  This directive returns the system ID associated with
+ *  the semaphore name.
+ *
+ *  Input parameters:
+ *    name - user defined semaphore name
+ *    node - node(s) to be searched
+ *    id   - pointer to semaphore id
+ *
+ *  Output parameters:
+ *    *id      - semaphore id
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code - if unsuccessful
+ */
+
+rtems_status_code rtems_semaphore_ident(
+  Objects_Name  name,
+  unsigned32    node,
+  Objects_Id   *id
+)
+{
+  return( _Objects_Name_to_id( &_Semaphore_Information, name, node, id ) );
+}
+
+/*PAGE
+ *
+ *  rtems_semaphore_delete
+ *
+ *  This directive allows a thread to delete a semaphore specified by
+ *  the semaphore id.  The semaphore is freed back to the inactive
+ *  semaphore chain.
+ *
+ *  Input parameters:
+ *    id - semaphore id
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_semaphore_delete(
+  Objects_Id id
+)
+{
+  register Semaphore_Control *the_semaphore;
+  Objects_Locations           location;
+
+  the_semaphore = _Semaphore_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:
+      _Thread_Dispatch();
+      return( RTEMS_ILLEGAL_ON_REMOTE_OBJECT );
+    case OBJECTS_LOCAL:
+      if ( _Attributes_Is_binary_semaphore( the_semaphore->attribute_set) &&
+                       ( the_semaphore->count == 0 ) ) {
+        _Thread_Enable_dispatch();
+        return( RTEMS_RESOURCE_IN_USE );
+      }
+
+      _Objects_Close( &_Semaphore_Information, &the_semaphore->Object );
+
+      _Thread_queue_Flush(
+        &the_semaphore->Wait_queue,
+        _Semaphore_MP_Send_object_was_deleted
+      );
+
+      _Semaphore_Free( the_semaphore );
+
+      if ( _Attributes_Is_global( the_semaphore->attribute_set ) ) {
+
+        _Objects_MP_Close( &_Semaphore_Information, the_semaphore->Object.id );
+
+        _Semaphore_MP_Send_process_packet(
+          SEMAPHORE_MP_ANNOUNCE_DELETE,
+          the_semaphore->Object.id,
+          0,                         /* Not used */
+          0                          /* Not used */
+        );
+      }
+      _Thread_Enable_dispatch();
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_semaphore_obtain
+ *
+ *  This directive allows a thread to acquire a semaphore.
+ *
+ *  Input parameters:
+ *    id         - semaphore id
+ *    option_set - wait option
+ *    timeout    - number of ticks to wait (0 means wait forever)
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_semaphore_obtain(
+  Objects_Id        id,
+  unsigned32        option_set,
+  rtems_interval timeout
+)
+{
+  register Semaphore_Control *the_semaphore;
+  Objects_Locations           location;
+
+  the_semaphore = _Semaphore_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:
+      return _Semaphore_MP_Send_request_packet(
+          SEMAPHORE_MP_OBTAIN_REQUEST,
+          id,
+          option_set,
+          timeout
+      );
+    case OBJECTS_LOCAL:
+      if ( !_Semaphore_Seize( the_semaphore, option_set ) ) {
+        if ( _Attributes_Is_inherit_priority( the_semaphore->attribute_set ) &&
+             the_semaphore->holder->current_priority >
+               _Thread_Executing->current_priority ) {
+            _Thread_Change_priority(
+              the_semaphore->holder, _Thread_Executing->current_priority );
+         }
+        _Thread_queue_Enqueue( &the_semaphore->Wait_queue, timeout );
+      }
+      _Thread_Enable_dispatch();
+      return( _Thread_Executing->Wait.return_code );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_semaphore_release
+ *
+ *  This directive allows a thread to release a semaphore.
+ *
+ *  Input parameters:
+ *    id - semaphore id
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_semaphore_release(
+  Objects_Id id
+)
+{
+  register Semaphore_Control *the_semaphore;
+  Objects_Locations           location;
+  Thread_Control             *the_thread;
+
+  the_semaphore = _Semaphore_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:
+      return(
+        _Semaphore_MP_Send_request_packet(
+          SEMAPHORE_MP_RELEASE_REQUEST,
+          id,
+          0,                               /* Not used */
+          MPCI_DEFAULT_TIMEOUT
+        )
+      );
+    case OBJECTS_LOCAL:
+      if ( _Attributes_Is_binary_semaphore( the_semaphore->attribute_set)) {
+
+        if ( !_Objects_Are_ids_equal(
+               _Thread_Executing->Object.id, the_semaphore->holder_id ) ) {
+          _Thread_Enable_dispatch();
+          return( RTEMS_NOT_OWNER_OF_RESOURCE );
+        }
+
+        the_semaphore->nest_count--;
+
+        if ( the_semaphore->nest_count != 0 ) {
+          _Thread_Enable_dispatch();
+          return( RTEMS_SUCCESSFUL );
+        }
+
+        _Thread_Executing->resource_count--;
+        the_semaphore->holder    = NULL;
+        the_semaphore->holder_id = 0;
+
+        /*
+         *  Whether or not someone is waiting for the semaphore, an
+         *  inherited priority must be lowered if this is the last
+         *  semaphore (i.e. resource) this task has.
+         */
+
+        if ( _Attributes_Is_inherit_priority(the_semaphore->attribute_set) &&
+             _Thread_Executing->resource_count == 0 &&
+             _Thread_Executing->real_priority !=
+                _Thread_Executing->current_priority ) {
+           _Thread_Change_priority(
+              _Thread_Executing, _Thread_Executing->real_priority );
+        }
+
+      }
+
+      if ( (the_thread = _Thread_queue_Dequeue(&the_semaphore->Wait_queue)) ) {
+
+        if ( !_Objects_Is_local_id( the_thread->Object.id ) ) {
+          the_thread->receive_packet->return_code = RTEMS_SUCCESSFUL;
+
+          if ( _Attributes_Is_binary_semaphore(the_semaphore->attribute_set) ) {
+            the_semaphore->holder    = NULL;
+            the_semaphore->holder_id = the_thread->Object.id;
+            the_semaphore->nest_count = 1;
+          }
+
+          _Semaphore_MP_Send_response_packet(
+            SEMAPHORE_MP_OBTAIN_RESPONSE,
+            id,
+            the_thread
+          );
+        } else {
+
+          if ( _Attributes_Is_binary_semaphore(the_semaphore->attribute_set) ) {
+            the_semaphore->holder    = the_thread;
+            the_semaphore->holder_id = the_thread->Object.id;
+            the_thread->resource_count++;
+            the_semaphore->nest_count = 1;
+          }
+
+          /*
+           *  No special action for priority inheritance because the_thread
+           *  is guaranteed to be the highest priority thread waiting for
+           *  the semaphore.
+           */
+        }
+      } else
+        the_semaphore->count += 1;
+
+      _Thread_Enable_dispatch();
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  _Semaphore_Seize
+ *
+ *  This routine attempts to allocate a semaphore to the calling thread.
+ *
+ *  Input parameters:
+ *    the_semaphore - pointer to semaphore control block
+ *    option_set    - acquire semaphore options
+ *
+ *  Output parameters:
+ *    TRUE  - if semaphore allocated
+ *    FALSE - if semaphore NOT allocated
+ *
+ *  INTERRUPT LATENCY:
+ *    available
+ *    wait
+ */
+
+boolean _Semaphore_Seize(
+  Semaphore_Control *the_semaphore,
+  rtems_option    option_set
+)
+{
+  Thread_Control *executing;
+  ISR_Level       level;
+
+  executing = _Thread_Executing;
+  executing->Wait.return_code = RTEMS_SUCCESSFUL;
+  _ISR_Disable( level );
+  if ( the_semaphore->count != 0 ) {
+    the_semaphore->count -= 1;
+    if ( _Attributes_Is_binary_semaphore( the_semaphore->attribute_set ) ) {
+      the_semaphore->holder     = executing;
+      the_semaphore->holder_id  = executing->Object.id;
+      the_semaphore->nest_count = 1;
+      executing->resource_count++;
+    }
+    _ISR_Enable( level );
+    return( TRUE );
+  }
+
+  if ( _Options_Is_no_wait( option_set ) ) {
+    _ISR_Enable( level );
+    executing->Wait.return_code = RTEMS_UNSATISFIED;
+    return( TRUE );
+  }
+
+  if ( _Attributes_Is_binary_semaphore( the_semaphore->attribute_set ) ) {
+    if ( _Objects_Are_ids_equal(
+            _Thread_Executing->Object.id, the_semaphore->holder_id ) ) {
+      the_semaphore->nest_count++;
+      _ISR_Enable( level );
+      return( TRUE );
+    }
+  }
+
+  the_semaphore->Wait_queue.sync = TRUE;
+  executing->Wait.queue      = &the_semaphore->Wait_queue;
+  executing->Wait.id         = the_semaphore->Object.id;
+  executing->Wait.option_set = option_set;
+  _ISR_Enable( level );
+  return( FALSE );
+}
Index: c/src/exec/rtems/src/semmp.c
===================================================================
--- c/src/exec/rtems/src/semmp.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/src/semmp.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,306 @@
+/*
+ *  Multiprocessing Support for the Semaphore Manager
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/mpci.h>
+#include <rtems/mppkt.h>
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/sem.h>
+#include <rtems/thread.h>
+#include <rtems/watchdog.h>
+
+/*PAGE
+ *
+ *  _Semaphore_MP_Send_process_packet
+ *
+ */
+
+void _Semaphore_MP_Send_process_packet (
+  Semaphore_MP_Remote_operations  operation,
+  Objects_Id                      semaphore_id,
+  Objects_Name                    name,
+  Objects_Id                      proxy_id
+)
+{
+  Semaphore_MP_Packet *the_packet;
+  unsigned32           node;
+
+  switch ( operation ) {
+
+    case SEMAPHORE_MP_ANNOUNCE_CREATE:
+    case SEMAPHORE_MP_ANNOUNCE_DELETE:
+    case SEMAPHORE_MP_EXTRACT_PROXY:
+
+      the_packet                    = _Semaphore_MP_Get_packet();
+      the_packet->Prefix.the_class  = RTEMS_MP_PACKET_SEMAPHORE;
+      the_packet->Prefix.length     = sizeof ( Semaphore_MP_Packet );
+      the_packet->Prefix.to_convert = sizeof ( Semaphore_MP_Packet );
+      the_packet->operation         = operation;
+      the_packet->Prefix.id         = semaphore_id;
+      the_packet->name              = name;
+      the_packet->proxy_id          = proxy_id;
+
+      if ( operation == SEMAPHORE_MP_EXTRACT_PROXY )
+         node = rtems_get_node( semaphore_id );
+      else
+         node = MPCI_ALL_NODES;
+
+      _MPCI_Send_process_packet( node, &the_packet->Prefix );
+      break;
+
+    case SEMAPHORE_MP_OBTAIN_REQUEST:
+    case SEMAPHORE_MP_OBTAIN_RESPONSE:
+    case SEMAPHORE_MP_RELEASE_REQUEST:
+    case SEMAPHORE_MP_RELEASE_RESPONSE:
+      break;
+  }
+}
+
+/*PAGE
+ *
+ *  _Semaphore_MP_Send_request_packet
+ *
+ */
+
+rtems_status_code _Semaphore_MP_Send_request_packet (
+  Semaphore_MP_Remote_operations operation,
+  Objects_Id                     semaphore_id,
+  rtems_option                option_set,
+  rtems_interval              timeout
+)
+{
+  Semaphore_MP_Packet *the_packet;
+
+  switch ( operation ) {
+
+    case SEMAPHORE_MP_OBTAIN_REQUEST:
+    case SEMAPHORE_MP_RELEASE_REQUEST:
+
+      the_packet                    = _Semaphore_MP_Get_packet();
+      the_packet->Prefix.the_class  = RTEMS_MP_PACKET_SEMAPHORE;
+      the_packet->Prefix.length     = sizeof ( Semaphore_MP_Packet );
+      the_packet->Prefix.to_convert = sizeof ( Semaphore_MP_Packet );
+      if ( ! _Options_Is_no_wait(option_set))
+          the_packet->Prefix.timeout = timeout;
+
+      the_packet->operation         = operation;
+      the_packet->Prefix.id         = semaphore_id;
+      the_packet->option_set        = option_set;
+
+      return _MPCI_Send_request_packet(
+          rtems_get_node( semaphore_id ),
+          &the_packet->Prefix,
+          STATES_WAITING_FOR_SEMAPHORE
+        );
+      break;
+
+    case SEMAPHORE_MP_ANNOUNCE_CREATE:
+    case SEMAPHORE_MP_ANNOUNCE_DELETE:
+    case SEMAPHORE_MP_EXTRACT_PROXY:
+    case SEMAPHORE_MP_OBTAIN_RESPONSE:
+    case SEMAPHORE_MP_RELEASE_RESPONSE:
+      break;
+
+  }
+  /*
+   *  The following line is included to satisfy compilers which
+   *  produce warnings when a function does not end with a return.
+   */
+  return RTEMS_SUCCESSFUL;
+}
+
+/*PAGE
+ *
+ *  _Semaphore_MP_Send_response_packet
+ *
+ */
+
+void _Semaphore_MP_Send_response_packet (
+  Semaphore_MP_Remote_operations  operation,
+  Objects_Id                      semaphore_id,
+  Thread_Control                 *the_thread
+)
+{
+  Semaphore_MP_Packet *the_packet;
+
+  switch ( operation ) {
+
+    case SEMAPHORE_MP_OBTAIN_RESPONSE:
+    case SEMAPHORE_MP_RELEASE_RESPONSE:
+
+      the_packet = ( Semaphore_MP_Packet *) the_thread->receive_packet;
+
+/*
+ *  The packet being returned already contains the class, length, and
+ *  to_convert fields, therefore they are not set in this routine.
+ */
+      the_packet->operation = operation;
+      the_packet->Prefix.id = the_packet->Prefix.source_tid;
+
+      _MPCI_Send_response_packet(
+        rtems_get_node( the_packet->Prefix.source_tid ),
+        &the_packet->Prefix
+      );
+      break;
+
+    case SEMAPHORE_MP_ANNOUNCE_CREATE:
+    case SEMAPHORE_MP_ANNOUNCE_DELETE:
+    case SEMAPHORE_MP_EXTRACT_PROXY:
+    case SEMAPHORE_MP_OBTAIN_REQUEST:
+    case SEMAPHORE_MP_RELEASE_REQUEST:
+      break;
+
+  }
+}
+
+/*PAGE
+ *
+ *
+ *  _Semaphore_MP_Process_packet
+ *
+ */
+
+void _Semaphore_MP_Process_packet (
+  rtems_packet_prefix  *the_packet_prefix
+)
+{
+  Semaphore_MP_Packet *the_packet;
+  Thread_Control      *the_thread;
+  boolean              ignored;
+
+  the_packet = (Semaphore_MP_Packet *) the_packet_prefix;
+
+  switch ( the_packet->operation ) {
+
+    case SEMAPHORE_MP_ANNOUNCE_CREATE:
+
+      ignored = _Objects_MP_Open(
+                  &_Semaphore_Information,
+                  the_packet->name,
+                  the_packet->Prefix.id,
+                  TRUE
+                );
+
+      _MPCI_Return_packet( the_packet_prefix );
+      break;
+
+    case SEMAPHORE_MP_ANNOUNCE_DELETE:
+
+      _Objects_MP_Close( &_Semaphore_Information, the_packet->Prefix.id );
+
+      _MPCI_Return_packet( the_packet_prefix );
+      break;
+
+    case SEMAPHORE_MP_EXTRACT_PROXY:
+
+      the_thread = _Thread_MP_Find_proxy( the_packet->proxy_id );
+
+      if ( ! _Thread_Is_null( the_thread ) )
+        _Thread_queue_Extract( the_thread->Wait.queue, the_thread );
+
+      _MPCI_Return_packet( the_packet_prefix );
+      break;
+
+    case SEMAPHORE_MP_OBTAIN_REQUEST:
+
+      the_packet->Prefix.return_code = rtems_semaphore_obtain(
+        the_packet->Prefix.id,
+        the_packet->option_set,
+        the_packet->Prefix.timeout
+      );
+
+      if ( ! _Status_Is_proxy_blocking( the_packet->Prefix.return_code ) )
+        _Semaphore_MP_Send_response_packet(
+           SEMAPHORE_MP_OBTAIN_RESPONSE,
+           the_packet->Prefix.id,
+           _Thread_Executing
+        );
+      break;
+
+    case SEMAPHORE_MP_OBTAIN_RESPONSE:
+    case SEMAPHORE_MP_RELEASE_RESPONSE:
+
+      the_thread = _MPCI_Process_response( the_packet_prefix );
+
+      _MPCI_Return_packet( the_packet_prefix );
+      break;
+
+    case SEMAPHORE_MP_RELEASE_REQUEST:
+
+      the_packet->Prefix.return_code = rtems_semaphore_release(
+        the_packet->Prefix.id
+      );
+
+      _Semaphore_MP_Send_response_packet(
+        SEMAPHORE_MP_RELEASE_RESPONSE,
+        the_packet->Prefix.id,
+        _Thread_Executing
+      );
+      break;
+  }
+}
+
+/*PAGE
+ *
+ *  _Semaphore_MP_Send_object_was_deleted
+ *
+ */
+
+void _Semaphore_MP_Send_object_was_deleted (
+  Thread_Control *the_proxy
+)
+{
+  the_proxy->receive_packet->return_code = RTEMS_OBJECT_WAS_DELETED;
+
+  _Semaphore_MP_Send_response_packet(
+    SEMAPHORE_MP_OBTAIN_RESPONSE,
+    the_proxy->Wait.id,
+    the_proxy
+  );
+
+}
+
+/*PAGE
+ *
+ *  _Semaphore_MP_Send_extract_proxy
+ *
+ */
+
+void _Semaphore_MP_Send_extract_proxy (
+  Thread_Control *the_thread
+)
+{
+  _Semaphore_MP_Send_process_packet(
+    SEMAPHORE_MP_EXTRACT_PROXY,
+    the_thread->Wait.id,
+    (Objects_Name) 0,
+    the_thread->Object.id
+  );
+
+}
+
+/*PAGE
+ *
+ *  _Semaphore_MP_Get_packet
+ *
+ */
+
+Semaphore_MP_Packet *_Semaphore_MP_Get_packet ( void )
+{
+  return ( (Semaphore_MP_Packet *) _MPCI_Get_packet() );
+}
+
+/* end of file */
Index: c/src/exec/rtems/src/signal.c
===================================================================
--- c/src/exec/rtems/src/signal.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/src/signal.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,110 @@
+/*
+ *  Signal Manager
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/asr.h>
+#include <rtems/isr.h>
+#include <rtems/modes.h>
+#include <rtems/signal.h>
+#include <rtems/thread.h>
+
+/*PAGE
+ *
+ *  rtems_signal_catch
+ *
+ *  This directive allows a thread to specify what action to take when
+ *  catching signals.
+ *
+ *  Input parameters:
+ *    handler  - address of asynchronous signal routine (asr)
+ *              ( NULL indicates asr is invalid )
+ *    mode_set - mode value for asr
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - always succeeds
+ */
+
+rtems_status_code rtems_signal_catch(
+  rtems_asr_entry   handler,
+  rtems_mode mode_set
+)
+{
+  Thread_Control *executing;
+
+  executing = _Thread_Executing;
+  _Thread_Disable_dispatch(); /* cannot reschedule while */
+                              /*   the thread is inconsistent */
+
+  if ( ! _ASR_Is_null_handler( handler ) ) {
+    executing->Signal.mode_set = mode_set;
+    executing->Signal.handler  = handler;
+  }
+  else
+    _ASR_Initialize( &executing->Signal );
+  _Thread_Enable_dispatch();
+  return( RTEMS_SUCCESSFUL );
+}
+
+/*PAGE
+ *
+ *  rtems_signal_send
+ *
+ *  This directive allows a thread to send signals to a thread.
+ *
+ *  Input parameters:
+ *    id         - thread id
+ *    signal_set - signal set
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code - if unsuccessful
+ */
+
+rtems_status_code rtems_signal_send(
+  Objects_Id             id,
+  rtems_signal_set signal_set
+)
+{
+  register Thread_Control *the_thread;
+  Objects_Locations        location;
+
+  the_thread = _Thread_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:
+      return _Signal_MP_Send_request_packet(
+        SIGNAL_MP_SEND_REQUEST,
+        id,
+        signal_set
+      );
+    case OBJECTS_LOCAL:
+      if ( ! _ASR_Is_null_handler( the_thread->Signal.handler ) ) {
+        if ( _Modes_Is_asr_disabled( the_thread->current_modes ) )
+          _ASR_Post_signals( signal_set, &the_thread->Signal.signals_pending );
+        else {
+          _ASR_Post_signals( signal_set, &the_thread->Signal.signals_posted );
+          if ( _ISR_Is_in_progress() && _Thread_Is_executing( the_thread ) )
+            _ISR_Signals_to_thread_executing = TRUE;
+        }
+        _Thread_Enable_dispatch();
+        return( RTEMS_SUCCESSFUL );
+      }
+      _Thread_Enable_dispatch();
+      return( RTEMS_NOT_DEFINED );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
Index: c/src/exec/rtems/src/signalmp.c
===================================================================
--- c/src/exec/rtems/src/signalmp.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/src/signalmp.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,187 @@
+/*
+ *  Multiprocessing Support for the Signal Manager
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/mpci.h>
+#include <rtems/mppkt.h>
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/signal.h>
+#include <rtems/states.h>
+#include <rtems/thread.h>
+#include <rtems/watchdog.h>
+
+/*PAGE
+ *
+ *  _Signal_MP_Send_process_packet
+ *
+ *  This subprogram is not needed since there are no process
+ *  packets to be sent by this manager.
+ *
+ */
+
+/*PAGE
+ *
+ *  _Signal_MP_Send_request_packet
+ *
+ */
+
+rtems_status_code _Signal_MP_Send_request_packet (
+  Signal_MP_Remote_operations operation,
+  Objects_Id                  task_id,
+  rtems_signal_set      signal_in
+)
+{
+  Signal_MP_Packet *the_packet;
+
+  switch ( operation ) {
+
+    case SIGNAL_MP_SEND_REQUEST:
+
+      the_packet                    = _Signal_MP_Get_packet();
+      the_packet->Prefix.the_class  = RTEMS_MP_PACKET_SIGNAL;
+      the_packet->Prefix.length     = sizeof ( Signal_MP_Packet );
+      the_packet->Prefix.to_convert = sizeof ( Signal_MP_Packet );
+      the_packet->operation         = operation;
+      the_packet->Prefix.id         = task_id;
+      the_packet->signal_in         = signal_in;
+
+      return _MPCI_Send_request_packet(
+        rtems_get_node( task_id ),
+        &the_packet->Prefix,
+        STATES_READY   /* Not used */
+      );
+      break;
+
+    case SIGNAL_MP_SEND_RESPONSE:
+      break;
+
+  }
+  /*
+   *  The following line is included to satisfy compilers which
+   *  produce warnings when a function does not end with a return.
+   */
+  return RTEMS_INTERNAL_ERROR;
+}
+
+/*PAGE
+ *
+ *  _Signal_MP_Send_response_packet
+ *
+ */
+
+void _Signal_MP_Send_response_packet (
+  Signal_MP_Remote_operations  operation,
+  Thread_Control              *the_thread
+)
+{
+  Signal_MP_Packet *the_packet;
+
+  switch ( operation ) {
+
+    case SIGNAL_MP_SEND_RESPONSE:
+
+      the_packet = ( Signal_MP_Packet *) the_thread->receive_packet;
+
+/*
+ *  The packet being returned already contains the class, length, and
+ *  to_convert fields, therefore they are not set in this routine.
+ */
+      the_packet->operation = operation;
+      the_packet->Prefix.id = the_packet->Prefix.source_tid;
+
+      _MPCI_Send_response_packet(
+        rtems_get_node( the_packet->Prefix.source_tid ),
+        &the_packet->Prefix
+      );
+      break;
+
+    case SIGNAL_MP_SEND_REQUEST:
+      break;
+
+  }
+}
+
+/*PAGE
+ *
+ *
+ *  _Signal_MP_Process_packet
+ *
+ */
+
+void _Signal_MP_Process_packet (
+  rtems_packet_prefix  *the_packet_prefix
+)
+{
+  Signal_MP_Packet *the_packet;
+  Thread_Control   *the_thread;
+
+  the_packet = (Signal_MP_Packet *) the_packet_prefix;
+
+  switch ( the_packet->operation ) {
+
+    case SIGNAL_MP_SEND_REQUEST:
+
+      the_packet->Prefix.return_code = rtems_signal_send(
+        the_packet->Prefix.id,
+        the_packet->signal_in
+      );
+
+      _Signal_MP_Send_response_packet(
+        SIGNAL_MP_SEND_RESPONSE,
+        _Thread_Executing
+      );
+      break;
+
+    case SIGNAL_MP_SEND_RESPONSE:
+
+      the_thread = _MPCI_Process_response( the_packet_prefix );
+
+      _MPCI_Return_packet( the_packet_prefix );
+      break;
+
+  }
+}
+
+/*PAGE
+ *
+ *  _Signal_MP_Send_object_was_deleted
+ *
+ *  This subprogram is not needed since there are no objects
+ *  deleted by this manager.
+ *
+ */
+
+/*PAGE
+ *
+ *  _Signal_MP_Send_extract_proxy
+ *
+ *  This subprogram is not needed since there are no objects
+ *  deleted by this manager.
+ *
+ */
+
+/*PAGE
+ *
+ *  _Signal_MP_Get_packet
+ *
+ */
+
+Signal_MP_Packet *_Signal_MP_Get_packet ( void )
+{
+  return ( (Signal_MP_Packet *) _MPCI_Get_packet() );
+}
+
+/* end of file */
Index: c/src/exec/rtems/src/taskmp.c
===================================================================
--- c/src/exec/rtems/src/taskmp.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/src/taskmp.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,338 @@
+/*
+ *  Multiprocessing Support for the RTEMS Task Manager
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/mpci.h>
+#include <rtems/mppkt.h>
+#include <rtems/object.h>
+#include <rtems/options.h>
+#include <rtems/tasks.h>
+#include <rtems/thread.h>
+#include <rtems/watchdog.h>
+
+/*PAGE
+ *
+ *  _RTEMS_tasks_MP_Send_process_packet
+ *
+ */
+
+void _RTEMS_tasks_MP_Send_process_packet (
+  RTEMS_tasks_MP_Remote_operations operation,
+  Objects_Id                       task_id,
+  Objects_Name                     name
+)
+{
+  RTEMS_tasks_MP_Packet *the_packet;
+
+  switch ( operation ) {
+
+    case RTEMS_TASKS_MP_ANNOUNCE_CREATE:
+    case RTEMS_TASKS_MP_ANNOUNCE_DELETE:
+
+      the_packet                    = _RTEMS_tasks_MP_Get_packet();
+      the_packet->Prefix.the_class  = RTEMS_MP_PACKET_TASKS;
+      the_packet->Prefix.length     = sizeof ( RTEMS_tasks_MP_Packet );
+      the_packet->Prefix.to_convert = sizeof ( RTEMS_tasks_MP_Packet );
+      the_packet->operation         = operation;
+      the_packet->Prefix.id         = task_id;
+      the_packet->name              = name;
+
+      _MPCI_Send_process_packet( MPCI_ALL_NODES, &the_packet->Prefix );
+      break;
+
+    case RTEMS_TASKS_MP_SUSPEND_REQUEST:
+    case RTEMS_TASKS_MP_SUSPEND_RESPONSE:
+    case RTEMS_TASKS_MP_RESUME_REQUEST:
+    case RTEMS_TASKS_MP_RESUME_RESPONSE:
+    case RTEMS_TASKS_MP_SET_PRIORITY_REQUEST:
+    case RTEMS_TASKS_MP_SET_PRIORITY_RESPONSE:
+    case RTEMS_TASKS_MP_GET_NOTE_REQUEST:
+    case RTEMS_TASKS_MP_GET_NOTE_RESPONSE:
+    case RTEMS_TASKS_MP_SET_NOTE_REQUEST:
+    case RTEMS_TASKS_MP_SET_NOTE_RESPONSE:
+      break;
+  }
+}
+
+/*PAGE
+ *
+ *  _RTEMS_tasks_MP_Send_request_packet
+ *
+ */
+
+rtems_status_code _RTEMS_tasks_MP_Send_request_packet (
+  RTEMS_tasks_MP_Remote_operations operation,
+  Objects_Id                       task_id,
+  rtems_task_priority                 new_priority,
+  unsigned32                       notepad,
+  unsigned32                       note
+)
+{
+  RTEMS_tasks_MP_Packet *the_packet;
+
+  switch ( operation ) {
+
+    case RTEMS_TASKS_MP_SUSPEND_REQUEST:
+    case RTEMS_TASKS_MP_RESUME_REQUEST:
+    case RTEMS_TASKS_MP_SET_PRIORITY_REQUEST:
+    case RTEMS_TASKS_MP_GET_NOTE_REQUEST:
+    case RTEMS_TASKS_MP_SET_NOTE_REQUEST:
+
+      the_packet                    = _RTEMS_tasks_MP_Get_packet();
+      the_packet->Prefix.the_class  = RTEMS_MP_PACKET_TASKS;
+      the_packet->Prefix.length     = sizeof ( RTEMS_tasks_MP_Packet );
+      the_packet->Prefix.to_convert = sizeof ( RTEMS_tasks_MP_Packet );
+      the_packet->operation         = operation;
+      the_packet->Prefix.id         = task_id;
+      the_packet->the_priority      = new_priority;
+      the_packet->notepad           = notepad;
+      the_packet->note              = note;
+
+      return _MPCI_Send_request_packet(
+        rtems_get_node( task_id ),
+        &the_packet->Prefix,
+        STATES_READY     /* Not used */
+      );
+      break;
+
+    case RTEMS_TASKS_MP_ANNOUNCE_CREATE:
+    case RTEMS_TASKS_MP_ANNOUNCE_DELETE:
+    case RTEMS_TASKS_MP_SUSPEND_RESPONSE:
+    case RTEMS_TASKS_MP_RESUME_RESPONSE:
+    case RTEMS_TASKS_MP_SET_PRIORITY_RESPONSE:
+    case RTEMS_TASKS_MP_GET_NOTE_RESPONSE:
+    case RTEMS_TASKS_MP_SET_NOTE_RESPONSE:
+      break;
+
+  }
+  /*
+   *  The following line is included to satisfy compilers which
+   *  produce warnings when a function does not end with a return.
+   */
+  return RTEMS_SUCCESSFUL;
+}
+
+/*PAGE
+ *
+ *  _RTEMS_tasks_MP_Send_response_packet
+ *
+ */
+
+void _RTEMS_tasks_MP_Send_response_packet (
+  RTEMS_tasks_MP_Remote_operations  operation,
+  Thread_Control                   *the_thread
+)
+{
+  RTEMS_tasks_MP_Packet *the_packet;
+
+  switch ( operation ) {
+
+    case RTEMS_TASKS_MP_SUSPEND_RESPONSE:
+    case RTEMS_TASKS_MP_RESUME_RESPONSE:
+    case RTEMS_TASKS_MP_SET_PRIORITY_RESPONSE:
+    case RTEMS_TASKS_MP_GET_NOTE_RESPONSE:
+    case RTEMS_TASKS_MP_SET_NOTE_RESPONSE:
+
+      the_packet = (RTEMS_tasks_MP_Packet *) the_thread->receive_packet;
+
+/*
+ *  The packet being returned already contains the class, length, and
+ *  to_convert fields, therefore they are not set in this routine.
+ */
+      the_packet->operation    = operation;
+      the_packet->Prefix.id    = the_packet->Prefix.source_tid;
+
+      _MPCI_Send_response_packet(
+        rtems_get_node( the_packet->Prefix.source_tid ),
+        &the_packet->Prefix
+      );
+      break;
+
+    case RTEMS_TASKS_MP_ANNOUNCE_CREATE:
+    case RTEMS_TASKS_MP_ANNOUNCE_DELETE:
+    case RTEMS_TASKS_MP_SUSPEND_REQUEST:
+    case RTEMS_TASKS_MP_RESUME_REQUEST:
+    case RTEMS_TASKS_MP_SET_PRIORITY_REQUEST:
+    case RTEMS_TASKS_MP_GET_NOTE_REQUEST:
+    case RTEMS_TASKS_MP_SET_NOTE_REQUEST:
+      break;
+
+  }
+}
+
+/*PAGE
+ *
+ *
+ *  _RTEMS_tasks_MP_Process_packet
+ *
+ */
+
+void _RTEMS_tasks_MP_Process_packet (
+  rtems_packet_prefix  *the_packet_prefix
+)
+{
+  RTEMS_tasks_MP_Packet *the_packet;
+  Thread_Control   *the_thread;
+  boolean           ignored;
+
+  the_packet = (RTEMS_tasks_MP_Packet *) the_packet_prefix;
+
+  switch ( the_packet->operation ) {
+
+    case RTEMS_TASKS_MP_ANNOUNCE_CREATE:
+
+      ignored = _Objects_MP_Open(
+                  &_Thread_Information,
+                  the_packet->name,
+                  the_packet->Prefix.id,
+                  TRUE
+                );
+
+      _MPCI_Return_packet( the_packet_prefix );
+      break;
+
+    case RTEMS_TASKS_MP_ANNOUNCE_DELETE:
+
+      _Objects_MP_Close( &_Thread_Information, the_packet->Prefix.id );
+
+      _MPCI_Return_packet( the_packet_prefix );
+      break;
+
+    case RTEMS_TASKS_MP_SUSPEND_REQUEST:
+
+      the_packet->Prefix.return_code = rtems_task_suspend(
+        the_packet->Prefix.id
+      );
+
+      _RTEMS_tasks_MP_Send_response_packet(
+        RTEMS_TASKS_MP_SUSPEND_RESPONSE,
+        _Thread_Executing
+      );
+      break;
+
+    case RTEMS_TASKS_MP_SUSPEND_RESPONSE:
+    case RTEMS_TASKS_MP_RESUME_RESPONSE:
+    case RTEMS_TASKS_MP_SET_NOTE_RESPONSE:
+
+      the_thread = _MPCI_Process_response( the_packet_prefix );
+
+      _MPCI_Return_packet( the_packet_prefix );
+      break;
+
+    case RTEMS_TASKS_MP_RESUME_REQUEST:
+
+      the_packet->Prefix.return_code = rtems_task_resume(
+        the_packet->Prefix.id
+      );
+
+      _RTEMS_tasks_MP_Send_response_packet(
+        RTEMS_TASKS_MP_RESUME_RESPONSE,
+        _Thread_Executing
+      );
+      break;
+
+    case RTEMS_TASKS_MP_SET_PRIORITY_REQUEST:
+
+      the_packet->Prefix.return_code = rtems_task_set_priority(
+        the_packet->Prefix.id,
+        the_packet->the_priority,
+        &the_packet->the_priority
+      );
+
+      _RTEMS_tasks_MP_Send_response_packet(
+        RTEMS_TASKS_MP_SET_PRIORITY_RESPONSE,
+        _Thread_Executing
+      );
+      break;
+
+    case RTEMS_TASKS_MP_SET_PRIORITY_RESPONSE:
+
+      the_thread = _MPCI_Process_response( the_packet_prefix );
+
+      *(rtems_task_priority *)the_thread->Wait.return_argument =
+                                               the_packet->the_priority;
+
+      _MPCI_Return_packet( the_packet_prefix );
+      break;
+
+    case RTEMS_TASKS_MP_GET_NOTE_REQUEST:
+
+      the_packet->Prefix.return_code = rtems_task_get_note(
+        the_packet->Prefix.id,
+        the_packet->notepad,
+        &the_packet->note
+      );
+
+      _RTEMS_tasks_MP_Send_response_packet(
+        RTEMS_TASKS_MP_GET_NOTE_RESPONSE,
+        _Thread_Executing
+      );
+      break;
+
+    case RTEMS_TASKS_MP_GET_NOTE_RESPONSE:
+
+      the_thread = _MPCI_Process_response( the_packet_prefix );
+
+      *(unsigned32 *)the_thread->Wait.return_argument = the_packet->note;
+
+      _MPCI_Return_packet( the_packet_prefix );
+      break;
+
+    case RTEMS_TASKS_MP_SET_NOTE_REQUEST:
+
+      the_packet->Prefix.return_code = rtems_task_set_note(
+        the_packet->Prefix.id,
+        the_packet->notepad,
+        the_packet->note
+      );
+
+      _RTEMS_tasks_MP_Send_response_packet(
+        RTEMS_TASKS_MP_SET_NOTE_RESPONSE,
+        _Thread_Executing
+      );
+      break;
+  }
+}
+
+/*PAGE
+ *
+ *  _RTEMS_tasks_MP_Send_object_was_deleted
+ *
+ *  This routine is not neededby the Tasks since a task
+ *  cannot be globally deleted.
+ *
+ */
+
+/*PAGE
+ *
+ *  _RTEMS_tasks_MP_Send_extract_proxy
+ *
+ *  This routine is not neededby the Tasks since a task
+ *  cannot be globally deleted.
+ *
+ */
+
+/*PAGE
+ *
+ *  _RTEMS_tasks_MP_Get_packet
+ *
+ */
+
+RTEMS_tasks_MP_Packet *_RTEMS_tasks_MP_Get_packet ( void )
+{
+  return ( (RTEMS_tasks_MP_Packet *) _MPCI_Get_packet() );
+}
+
+/* end of file */
Index: c/src/exec/rtems/src/tasks.c
===================================================================
--- c/src/exec/rtems/src/tasks.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/src/tasks.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,816 @@
+/*
+ *  RTEMS Task Manager
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/modes.h>
+#include <rtems/object.h>
+#include <rtems/stack.h>
+#include <rtems/states.h>
+#include <rtems/tasks.h>
+#include <rtems/thread.h>
+#include <rtems/threadq.h>
+#include <rtems/tod.h>
+#include <rtems/userext.h>
+#include <rtems/wkspace.h>
+
+/*PAGE
+ *
+ *  rtems_task_create
+ *
+ *  This directive creates a thread by allocating and initializing a
+ *  thread control block and a stack.  The newly created thread is
+ *  placed in the dormant state.
+ *
+ *  Input parameters:
+ *    name             - user defined thread name
+ *    initial_priority - thread priority
+ *    stack_size       - stack size in bytes
+ *    initial_modes    - initial thread mode
+ *    attribute_set    - thread attributes
+ *    id               - pointer to thread id
+ *
+ *  Output parameters:
+ *    id                - thread id
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_task_create(
+  Objects_Name         name,
+  rtems_task_priority  initial_priority,
+  unsigned32           stack_size,
+  rtems_mode           initial_modes,
+  rtems_attribute      attribute_set,
+  Objects_Id          *id
+)
+{
+  register Thread_Control *the_thread;
+  unsigned32               actual_stack_size;
+  unsigned32               memory_needed;
+  void                    *memory;
+  rtems_attribute          the_attribute_set;
+
+  if ( !_Objects_Is_name_valid( name ) )
+    return ( RTEMS_INVALID_NAME );
+
+#if 0
+  if ( !_Stack_Is_enough( stack_size ) )
+    return( RTEMS_INVALID_SIZE );
+#endif
+
+  if ( !_Stack_Is_enough( stack_size ) )
+    actual_stack_size = RTEMS_MINIMUM_STACK_SIZE;
+  else
+    actual_stack_size = stack_size;
+
+  if ( !_Priority_Is_valid( initial_priority ) )
+    return( RTEMS_INVALID_PRIORITY );
+
+  /*
+   *  Fix the attribute set to match the attributes which
+   *  this processor (1) requires and (2) is able to support.
+   *  First add in the required flags for attribute_set
+   *  Typically this might include FP if the platform
+   *  or application required all tasks to be fp aware.
+   *  Then turn off the requested bits which are not supported.
+   */
+
+  the_attribute_set = _Attributes_Set( attribute_set, ATTRIBUTES_REQUIRED );
+  the_attribute_set =
+    _Attributes_Clear( the_attribute_set, ATTRIBUTES_NOT_SUPPORTED );
+
+  if ( _Attributes_Is_global( the_attribute_set ) &&
+       !_Configuration_Is_multiprocessing() )
+    return( RTEMS_MP_NOT_CONFIGURED );
+
+  _Thread_Disable_dispatch();          /* to prevent deletion */
+
+  the_thread = _RTEMS_tasks_Allocate();
+
+  if ( !the_thread ) {
+    _Thread_Enable_dispatch();
+    return( RTEMS_TOO_MANY );
+  }
+
+  actual_stack_size = _Stack_Adjust_size( actual_stack_size );
+  memory_needed = actual_stack_size;
+
+  if ( _Attributes_Is_floating_point( the_attribute_set ) )
+    memory_needed += CONTEXT_FP_SIZE;
+
+  memory = _Workspace_Allocate( memory_needed );
+
+  if ( !memory ) {
+    _RTEMS_tasks_Free( the_thread );
+    _Thread_Enable_dispatch();
+    return( RTEMS_UNSATISFIED );
+  }
+
+  /*
+   *  Stack is put in the lower address regions of the allocated memory.
+   *  The optional floating point context area goes into the higher part
+   *  of the allocated memory.
+   */
+
+  _Stack_Initialize(
+     &the_thread->Start.Initial_stack, memory, actual_stack_size );
+
+  if ( _Attributes_Is_floating_point( the_attribute_set ) )
+    the_thread->fp_context = _Context_Fp_start( memory, actual_stack_size );
+  else
+    the_thread->fp_context = NULL;
+
+  the_thread->Start.fp_context = the_thread->fp_context;
+
+  if ( _Attributes_Is_global( the_attribute_set ) &&
+       !( _Objects_MP_Open( &_Thread_Information, name,
+                            the_thread->Object.id, FALSE ) ) ) {
+    _RTEMS_tasks_Free( the_thread );
+    (void) _Workspace_Free( memory );
+    _Thread_Enable_dispatch();
+    return( RTEMS_TOO_MANY );
+  }
+
+  the_thread->name                   = name;
+  the_thread->attribute_set          = the_attribute_set;
+  the_thread->current_state          = STATES_DORMANT;
+  the_thread->current_modes          = initial_modes;
+  the_thread->pending_events         = EVENT_SETS_NONE_PENDING;
+  the_thread->resource_count         = 0;
+  the_thread->real_priority          = initial_priority;
+  the_thread->Start.initial_priority = initial_priority;
+  the_thread->Start.initial_modes    = initial_modes;
+
+  _Thread_Set_priority( the_thread, initial_priority );
+
+  _ASR_Initialize( &the_thread->Signal );
+
+  _Objects_Open( &_Thread_Information, &the_thread->Object, name );
+
+  *id = the_thread->Object.id;
+
+  _User_extensions_Task_create( the_thread );
+
+  if ( _Attributes_Is_global( the_attribute_set ) )
+    _RTEMS_tasks_MP_Send_process_packet(
+      RTEMS_TASKS_MP_ANNOUNCE_CREATE,
+      the_thread->Object.id,
+      name
+    );
+
+  _Thread_Enable_dispatch();
+  return( RTEMS_SUCCESSFUL );
+}
+
+/*PAGE
+ *
+ *  rtems_task_ident
+ *
+ *  This directive returns the system ID associated with
+ *  the thread name.
+ *
+ *  Input parameters:
+ *    name - user defined thread name
+ *    node - node(s) to be searched
+ *    id   - pointer to thread id
+ *
+ *  Output parameters:
+ *    *id               - thread id
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_task_ident(
+  Objects_Name  name,
+  unsigned32    node,
+  Objects_Id   *id
+)
+{
+  if ( name != OBJECTS_ID_OF_SELF )
+    return( _Objects_Name_to_id( &_Thread_Information, name, node, id ) );
+
+  *id = _Thread_Executing->Object.id;
+  return( RTEMS_SUCCESSFUL );
+}
+
+/*PAGE
+ *
+ *  rtems_task_start
+ *
+ *  This directive readies the thread identified by the "id"
+ *  based on its current priorty, to await execution.  A thread
+ *  can be started only from the dormant state.
+ *
+ *  Input parameters:
+ *    id          - thread id
+ *    entry_point - start execution address of thread
+ *    argument    - thread argument
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_task_start(
+  Objects_Id   id,
+  rtems_task_entry entry_point,
+  unsigned32   argument
+)
+{
+  register Thread_Control *the_thread;
+  Objects_Locations        location;
+
+  if ( entry_point == NULL )
+    return( RTEMS_INVALID_ADDRESS );
+
+  the_thread = _Thread_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:
+      _Thread_Dispatch();
+      return( RTEMS_ILLEGAL_ON_REMOTE_OBJECT );
+    case OBJECTS_LOCAL:
+      if ( _States_Is_dormant( the_thread->current_state ) ) {
+
+        the_thread->Start.entry_point      = entry_point;
+        the_thread->Start.initial_argument = argument;
+
+        _Thread_Load_environment( the_thread );
+
+        _Thread_Ready( the_thread );
+
+        _User_extensions_Task_start( the_thread );
+
+        _Thread_Enable_dispatch();
+        return( RTEMS_SUCCESSFUL );
+      }
+      _Thread_Enable_dispatch();
+      return( RTEMS_INCORRECT_STATE );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_task_restart
+ *
+ *  This directive readies the specified thread.  It restores
+ *  the thread environment to the original values established
+ *  at thread creation and start time.  A thread can be restarted
+ *  from any state except the dormant state.
+ *
+ *  Input parameters:
+ *    id       - thread id
+ *    argument - thread argument
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_task_restart(
+  Objects_Id id,
+  unsigned32 argument
+)
+{
+  register Thread_Control *the_thread;
+  Objects_Locations               location;
+
+  the_thread = _Thread_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:
+      _Thread_Dispatch();
+      return( RTEMS_ILLEGAL_ON_REMOTE_OBJECT );
+    case OBJECTS_LOCAL:
+      if ( !_States_Is_dormant( the_thread->current_state ) ) {
+
+        _Thread_Set_transient( the_thread );
+        _ASR_Initialize( &the_thread->Signal );
+        the_thread->pending_events = EVENT_SETS_NONE_PENDING;
+        the_thread->resource_count = 0;
+        the_thread->current_modes  = the_thread->Start.initial_modes;
+        the_thread->Start.initial_argument = argument;
+
+        _RTEMS_tasks_Cancel_wait( the_thread );
+
+        if ( the_thread->current_priority !=
+                         the_thread->Start.initial_priority ) {
+          the_thread->real_priority = the_thread->Start.initial_priority;
+          _Thread_Set_priority( the_thread,
+             the_thread->Start.initial_priority );
+        }
+
+        _Thread_Load_environment( the_thread );
+
+        _Thread_Ready( the_thread );
+
+        _User_extensions_Task_restart( the_thread );
+
+        if ( _Thread_Is_executing ( the_thread ) )
+          _Thread_Restart_self();
+
+        _Thread_Enable_dispatch();
+        return( RTEMS_SUCCESSFUL );
+      }
+      _Thread_Enable_dispatch();
+      return( RTEMS_INCORRECT_STATE );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_task_delete
+ *
+ *  This directive allows a thread to delete itself or the thread
+ *  identified in the id field.  The executive halts execution
+ *  of the thread and frees the thread control block.
+ *
+ *  Input parameters:
+ *    id - thread id
+ *
+ *  Output parameters:
+ *    nothing           - if id is the requesting thread (always succeeds)
+ *    RTEMS_SUCCESSFUL - if successful and id is
+ *                           not the requesting thread
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_task_delete(
+  Objects_Id id
+)
+{
+  register Thread_Control *the_thread;
+  Objects_Locations        location;
+
+  the_thread = _Thread_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:
+      _Thread_Dispatch();
+      return( RTEMS_ILLEGAL_ON_REMOTE_OBJECT );
+    case OBJECTS_LOCAL:
+      _Objects_Close( &_Thread_Information, &the_thread->Object );
+
+      _Thread_Set_state( the_thread, STATES_TRANSIENT );
+
+      _User_extensions_Task_delete( the_thread );
+
+#if ( CPU_USE_DEFERRED_FP_SWITCH == TRUE )
+      if ( _Thread_Is_allocated_fp( the_thread ) )
+        _Thread_Deallocate_fp();
+#endif
+      the_thread->fp_context = NULL;
+
+      _RTEMS_tasks_Cancel_wait( the_thread );
+
+      (void) _Workspace_Free( the_thread->Start.Initial_stack.area );
+
+      _RTEMS_tasks_Free( the_thread );
+
+      if ( _Attributes_Is_global( the_thread->attribute_set ) ) {
+
+        _Objects_MP_Close( &_Thread_Information, the_thread->Object.id );
+
+        _RTEMS_tasks_MP_Send_process_packet(
+          RTEMS_TASKS_MP_ANNOUNCE_DELETE,
+          the_thread->Object.id,
+          0                                /* Not used */
+        );
+      }
+
+      _Thread_Enable_dispatch();
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_task_suspend
+ *
+ *  This directive will place the specified thread in the "suspended"
+ *  state.  Note that the suspended state can be in addition to
+ *  other waiting states.
+ *
+ *  Input parameters:
+ *    id - thread id
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_task_suspend(
+  Objects_Id id
+)
+{
+  register Thread_Control *the_thread;
+  Objects_Locations               location;
+
+  the_thread = _Thread_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:
+      return(
+        _RTEMS_tasks_MP_Send_request_packet(
+          RTEMS_TASKS_MP_SUSPEND_REQUEST,
+          id,
+          0,          /* Not used */
+          0,          /* Not used */
+          0           /* Not used */
+        )
+      );
+    case OBJECTS_LOCAL:
+      if ( !_States_Is_suspended( the_thread->current_state ) ) {
+        _Thread_Set_state( the_thread, STATES_SUSPENDED );
+        _Thread_Enable_dispatch();
+        return( RTEMS_SUCCESSFUL );
+      }
+      _Thread_Enable_dispatch();
+      return( RTEMS_ALREADY_SUSPENDED );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_task_resume
+ *
+ *  This directive will remove the specified thread
+ *  from the suspended state.
+ *
+ *  Input parameters:
+ *    id - thread id
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_task_resume(
+  Objects_Id id
+)
+{
+  register Thread_Control *the_thread;
+  Objects_Locations        location;
+
+  the_thread = _Thread_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:
+      return(
+        _RTEMS_tasks_MP_Send_request_packet(
+          RTEMS_TASKS_MP_RESUME_REQUEST,
+          id,
+          0,          /* Not used */
+          0,          /* Not used */
+          0           /* Not used */
+        )
+      );
+    case OBJECTS_LOCAL:
+      if ( _States_Is_suspended( the_thread->current_state ) ) {
+        _Thread_Resume( the_thread );
+        _Thread_Enable_dispatch();
+        return( RTEMS_SUCCESSFUL );
+      }
+      _Thread_Enable_dispatch();
+      return( RTEMS_INCORRECT_STATE );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_task_set_priority
+ *
+ *  This directive changes the priority of the specified thread.
+ *  The specified thread can be any thread in the system including
+ *  the requesting thread.
+ *
+ *  Input parameters:
+ *    id           - thread id (0 indicates requesting thread)
+ *    new_priority - thread priority (0 indicates current priority)
+ *    old_priority - pointer to previous priority
+ *
+ *  Output parameters:
+ *    old_priority      - previous priority
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_task_set_priority(
+  Objects_Id        id,
+  rtems_task_priority  new_priority,
+  rtems_task_priority *old_priority
+)
+{
+  register Thread_Control *the_thread;
+  Objects_Locations               location;
+
+  if ( new_priority != RTEMS_CURRENT_PRIORITY &&
+       !_Priority_Is_valid( new_priority ) )
+    return( RTEMS_INVALID_PRIORITY );
+
+  the_thread = _Thread_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:
+      _Thread_Executing->Wait.return_argument = old_priority;
+      return(
+        _RTEMS_tasks_MP_Send_request_packet(
+          RTEMS_TASKS_MP_SET_PRIORITY_REQUEST,
+          id,
+          new_priority,
+          0,          /* Not used */
+          0           /* Not used */
+        )
+      );
+    case OBJECTS_LOCAL:
+      *old_priority = the_thread->current_priority;
+      if ( new_priority != RTEMS_CURRENT_PRIORITY ) {
+        the_thread->real_priority = new_priority;
+        if ( the_thread->resource_count == 0 ||
+             the_thread->current_priority > new_priority )
+          _Thread_Change_priority( the_thread, new_priority );
+      }
+      _Thread_Enable_dispatch();
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_task_mode
+ *
+ *  This directive enables and disables several modes of
+ *  execution for the requesting thread.
+ *
+ *  Input parameters:
+ *    mode_set          - new mode
+ *    mask              - mask
+ *    previous_mode_set - address of previous mode set
+ *
+ *  Output:
+ *    *previous_mode_set - previous mode set
+ *     always returns RTEMS_SUCCESSFUL
+ */
+
+rtems_status_code rtems_task_mode(
+  rtems_mode  mode_set,
+  rtems_mode  mask,
+  rtems_mode *previous_mode_set
+)
+{
+  if ( _Thread_Change_mode( mode_set, mask, previous_mode_set ) )
+    _Thread_Dispatch();
+  return( RTEMS_SUCCESSFUL );
+}
+
+/*PAGE
+ *
+ *  rtems_task_get_note
+ *
+ *  This directive obtains the note from the specified notepad
+ *  of the specified thread.
+ *
+ *  Input parameters:
+ *    id      - thread id
+ *    notepad - notepad number
+ *    note    - pointer to note
+ *
+ *  Output parameters:
+ *    note              - filled in if successful
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_task_get_note(
+  Objects_Id  id,
+  unsigned32  notepad,
+  unsigned32 *note
+)
+{
+  register Thread_Control *the_thread;
+  Objects_Locations        location;
+
+  /*
+   *  NOTE:  There is no check for < RTEMS_NOTEPAD_FIRST because that would
+   *         be checking an unsigned number for being negative.
+   */
+
+  if ( notepad > RTEMS_NOTEPAD_LAST )
+    return( RTEMS_INVALID_NUMBER );
+
+  /*
+   *  Optimize the most likely case to avoid the Thread_Dispatch.
+   */
+
+  if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ||
+       _Objects_Are_ids_equal( id, _Thread_Executing->Object.id ) ) {
+      *note = _Thread_Executing->Notepads[ notepad ];
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  the_thread = _Thread_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:
+      _Thread_Executing->Wait.return_argument = note;
+
+      return _RTEMS_tasks_MP_Send_request_packet(
+        RTEMS_TASKS_MP_GET_NOTE_REQUEST,
+        id,
+        0,          /* Not used */
+        notepad,
+        0           /* Not used */
+      );
+    case OBJECTS_LOCAL:
+      *note= the_thread->Notepads[ notepad ];
+      _Thread_Enable_dispatch();
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ * rtems_task_set_note
+ *
+ *  This directive sets the specified notepad contents to the given
+ *  note.
+ *
+ *  Input parameters:
+ *    id      - thread id
+ *    notepad - notepad number
+ *    note    - note value
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_task_set_note(
+  Objects_Id id,
+  unsigned32 notepad,
+  unsigned32 note
+)
+{
+  register Thread_Control *the_thread;
+  Objects_Locations        location;
+
+  /*
+   *  NOTE:  There is no check for < RTEMS_NOTEPAD_FIRST because that would
+   *         be checking an unsigned number for being negative.
+   */
+
+  if ( notepad > RTEMS_NOTEPAD_LAST )
+    return( RTEMS_INVALID_NUMBER );
+
+  /*
+   *  Optimize the most likely case to avoid the Thread_Dispatch.
+   */
+
+  if ( _Objects_Are_ids_equal( id, OBJECTS_ID_OF_SELF ) ||
+       _Objects_Are_ids_equal( id, _Thread_Executing->Object.id ) ) {
+      _Thread_Executing->Notepads[ notepad ] = note;
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  the_thread = _Thread_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:
+      return _RTEMS_tasks_MP_Send_request_packet(
+        RTEMS_TASKS_MP_SET_NOTE_REQUEST,
+        id,
+        0,          /* Not used */
+        notepad,
+        note
+      );
+
+    case OBJECTS_LOCAL:
+      the_thread->Notepads[ notepad ] = note;
+      _Thread_Enable_dispatch();
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_task_wake_after
+ *
+ *  This directive suspends the requesting thread for the given amount
+ *  of ticks.
+ *
+ *  Input parameters:
+ *    ticks - number of ticks to wait
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - always successful
+ */
+
+rtems_status_code rtems_task_wake_after(
+  rtems_interval ticks
+)
+{
+  if ( ticks == 0 ) {
+    _Thread_Yield_processor();
+    _Thread_Dispatch();
+  } else {
+    _Thread_Disable_dispatch();
+      _Thread_Set_state( _Thread_Executing, STATES_DELAYING );
+      _Watchdog_Initialize(
+        &_Thread_Executing->Timer,
+        _Thread_Delay_ended,
+        _Thread_Executing->Object.id,
+        NULL
+      );
+      _Watchdog_Insert_ticks( &_Thread_Executing->Timer,
+                              ticks, WATCHDOG_ACTIVATE_NOW );
+    _Thread_Enable_dispatch();
+  }
+  return( RTEMS_SUCCESSFUL );
+}
+
+/*PAGE
+ *
+ *  rtems_task_wake_when
+ *
+ *  This directive blocks the requesting thread until the given date and
+ *  time is reached.
+ *
+ *  Input parameters:
+ *    time_buffer - pointer to the time and date structure
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_task_wake_when(
+rtems_time_of_day *time_buffer
+)
+{
+  rtems_interval seconds;
+  rtems_status_code      local_result;
+
+  if ( !_TOD_Is_set() )
+    return( RTEMS_NOT_DEFINED );
+
+  time_buffer->ticks = 0;
+
+  local_result = _TOD_Validate( time_buffer );
+
+  if  ( !rtems_is_status_successful( local_result ) )
+    return( local_result );
+
+  seconds = _TOD_To_seconds( time_buffer );
+
+  if ( seconds <= _TOD_Seconds_since_epoch )
+    return( RTEMS_INVALID_CLOCK );
+
+  _Thread_Disable_dispatch();
+    _Thread_Set_state( _Thread_Executing, STATES_WAITING_FOR_TIME );
+    _Watchdog_Initialize(
+      &_Thread_Executing->Timer,
+      _Thread_Delay_ended,
+      _Thread_Executing->Object.id,
+      NULL
+    );
+    _Watchdog_Insert_seconds( &_Thread_Executing->Timer,
+            seconds - _TOD_Seconds_since_epoch, WATCHDOG_ACTIVATE_NOW );
+  _Thread_Enable_dispatch();
+  return( RTEMS_SUCCESSFUL );
+}
Index: c/src/exec/rtems/src/timer.c
===================================================================
--- c/src/exec/rtems/src/timer.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
+++ c/src/exec/rtems/src/timer.c	(revision ac7d5ef06a6d6e8d84abbd1f0b82162725f98326)
@@ -0,0 +1,343 @@
+/*
+ *  Timer Manager
+ *
+ *
+ *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ *  On-Line Applications Research Corporation (OAR).
+ *  All rights assigned to U.S. Government, 1994.
+ *
+ *  This material may be reproduced by or for the U.S. Government pursuant
+ *  to the copyright license under the clause at DFARS 252.227-7013.  This
+ *  notice must appear in all copies of this file and its derivatives.
+ *
+ *  $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/object.h>
+#include <rtems/thread.h>
+#include <rtems/timer.h>
+#include <rtems/tod.h>
+#include <rtems/watchdog.h>
+
+/*PAGE
+ *
+ *  _Timer_Manager_initialization
+ *
+ *  This routine initializes all timer manager related data structures.
+ *
+ *  Input parameters:
+ *    maximum_timers - number of timers to initialize
+ *
+ *  Output parameters:  NONE
+ */
+
+void _Timer_Manager_initialization(
+  unsigned32 maximum_timers
+)
+{
+  _Objects_Initialize_information(
+     &_Timer_Information,
+     FALSE,
+     maximum_timers,
+     sizeof( Timer_Control )
+  );
+}
+
+/*PAGE
+ *
+ *  rtems_timer_create
+ *
+ *  This directive creates a timer and performs some initialization.
+ *
+ *  Input parameters:
+ *    name - timer name
+ *    id   - pointer to timer id
+ *
+ *  Output parameters:
+ *    id                - timer id
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_timer_create(
+  Objects_Name  name,
+  Objects_Id   *id
+)
+{
+  Timer_Control *the_timer;
+
+  if ( !_Objects_Is_name_valid( name ) )
+    return ( RTEMS_INVALID_NAME );
+
+  _Thread_Disable_dispatch();         /* to prevent deletion */
+
+  the_timer = _Timer_Allocate();
+
+  if ( !the_timer ) {
+    _Thread_Enable_dispatch();
+    return( RTEMS_TOO_MANY );
+  }
+
+  the_timer->the_class = TIMER_DORMANT;
+
+  _Objects_Open( &_Timer_Information, &the_timer->Object, name );
+
+  *id = the_timer->Object.id;
+  _Thread_Enable_dispatch();
+  return( RTEMS_SUCCESSFUL );
+}
+
+/*PAGE
+ *
+ *  rtems_timer_ident
+ *
+ *  This directive returns the system ID associated with
+ *  the timer name.
+ *
+ *  Input parameters:
+ *    name - user defined message queue name
+ *    id   - pointer to timer id
+ *
+ *  Output parameters:
+ *    *id               - message queue id
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_timer_ident(
+  Objects_Name  name,
+  Objects_Id   *id
+)
+{
+  return _Objects_Name_to_id(
+    &_Timer_Information,
+    name,
+    RTEMS_SEARCH_LOCAL_NODE,
+    id
+  );
+}
+
+/*PAGE
+ *
+ *  rtems_timer_cancel
+ *
+ *  This directive allows a thread to cancel a timer.
+ *
+ *  Input parameters:
+ *    id - timer id
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code - if unsuccessful
+ */
+
+rtems_status_code rtems_timer_cancel(
+  Objects_Id id
+)
+{
+  Timer_Control   *the_timer;
+  Objects_Locations       location;
+
+  the_timer = _Timer_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:            /* should never return this */
+      return( RTEMS_INTERNAL_ERROR );
+    case OBJECTS_LOCAL:
+      if ( !_Timer_Is_dormant_class( the_timer->the_class ) ) {
+        (void) _Watchdog_Remove( &the_timer->Ticker );
+        _Thread_Enable_dispatch();
+        return( RTEMS_SUCCESSFUL );
+      }
+      _Thread_Enable_dispatch();
+      return( RTEMS_INCORRECT_STATE );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_timer_delete
+ *
+ *  This directive allows a thread to delete a timer.
+ *
+ *  Input parameters:
+ *    id - timer id
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code - if unsuccessful
+ */
+
+rtems_status_code rtems_timer_delete(
+  Objects_Id id
+)
+{
+  Timer_Control   *the_timer;
+  Objects_Locations       location;
+
+  the_timer = _Timer_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:            /* should never return this */
+      return( RTEMS_INTERNAL_ERROR );
+    case OBJECTS_LOCAL:
+      _Objects_Close( &_Timer_Information, &the_timer->Object );
+      (void) _Watchdog_Remove( &the_timer->Ticker );
+      _Timer_Free( the_timer );
+      _Thread_Enable_dispatch();
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_timer_fire_after
+ *
+ *  This directive allows a thread to start a timer.
+ *
+ *  Input parameters:
+ *    id      - timer id
+ *    ticks   - interval until routine is fired
+ *    routine - routine to schedule
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_timer_fire_after(
+  Objects_Id         id,
+  rtems_interval  ticks,
+  Timer_Service      routine,
+  void              *user_data
+)
+{
+  Timer_Control   *the_timer;
+  Objects_Locations       location;
+
+  if ( ticks == 0 )
+    return( RTEMS_INVALID_NUMBER );
+
+  the_timer = _Timer_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:            /* should never return this */
+      return( RTEMS_INTERNAL_ERROR );
+    case OBJECTS_LOCAL:
+      (void) _Watchdog_Remove( &the_timer->Ticker );
+      the_timer->the_class = TIMER_INTERVAL;
+      _Watchdog_Initialize( &the_timer->Ticker, routine, id, user_data );
+      _Watchdog_Insert_ticks( &the_timer->Ticker,
+                                 ticks, WATCHDOG_ACTIVATE_NOW );
+      _Thread_Enable_dispatch();
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_timer_fire_when
+ *
+ *  This directive allows a thread to start a timer.
+ *
+ *  Input parameters:
+ *    id        - timer id
+ *    wall_time - time of day to fire timer
+ *    routine   - routine to schedule
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_timer_fire_when(
+  Objects_Id          id,
+  rtems_time_of_day        *wall_time,
+  Timer_Service       routine,
+  void               *user_data
+)
+{
+  Timer_Control   *the_timer;
+  Objects_Locations       location;
+  rtems_status_code            validate_status;
+  rtems_interval       seconds;
+
+  if ( !_TOD_Is_set() )
+    return( RTEMS_NOT_DEFINED );
+
+  validate_status = _TOD_Validate( wall_time );
+  if ( !rtems_is_status_successful( validate_status ) )
+    return( validate_status );
+
+  seconds = _TOD_To_seconds( wall_time );
+  if ( seconds <= _TOD_Seconds_since_epoch )
+    return( RTEMS_INVALID_CLOCK );
+
+  the_timer = _Timer_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:            /* should never return this */
+      return( RTEMS_INTERNAL_ERROR );
+    case OBJECTS_LOCAL:
+      (void) _Watchdog_Remove( &the_timer->Ticker );
+      the_timer->the_class = TIMER_TIME_OF_DAY;
+      _Watchdog_Initialize( &the_timer->Ticker, routine, id, user_data );
+      _Watchdog_Insert_seconds( &the_timer->Ticker,
+                seconds - _TOD_Seconds_since_epoch, WATCHDOG_ACTIVATE_NOW );
+      _Thread_Enable_dispatch();
+      return( RTEMS_SUCCESSFUL );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
+
+/*PAGE
+ *
+ *  rtems_timer_reset
+ *
+ *  This directive allows a thread to reset a timer.
+ *
+ *  Input parameters:
+ *    id - timer id
+ *
+ *  Output parameters:
+ *    RTEMS_SUCCESSFUL - if successful
+ *    error code        - if unsuccessful
+ */
+
+rtems_status_code rtems_timer_reset(
+  Objects_Id id
+)
+{
+  Timer_Control *the_timer;
+  Objects_Locations     location;
+
+  the_timer = _Timer_Get( id, &location );
+  switch ( location ) {
+    case OBJECTS_ERROR:
+      return( RTEMS_INVALID_ID );
+    case OBJECTS_REMOTE:            /* should never return this */
+      return( RTEMS_INTERNAL_ERROR );
+    case OBJECTS_LOCAL:
+      if ( _Timer_Is_interval_class( the_timer->the_class ) ) {
+        _Watchdog_Reset( &the_timer->Ticker );
+        _Thread_Enable_dispatch();
+        return( RTEMS_SUCCESSFUL );
+      }
+      _Thread_Enable_dispatch();
+      return( RTEMS_NOT_DEFINED );
+  }
+
+  return( RTEMS_INTERNAL_ERROR );   /* unreached - only to remove warnings */
+}
