summaryrefslogtreecommitdiffstats
path: root/cpukit/rtems/include/rtems/rtems/ratemon.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/rtems/include/rtems/rtems/ratemon.h')
-rw-r--r--cpukit/rtems/include/rtems/rtems/ratemon.h285
1 files changed, 285 insertions, 0 deletions
diff --git a/cpukit/rtems/include/rtems/rtems/ratemon.h b/cpukit/rtems/include/rtems/rtems/ratemon.h
new file mode 100644
index 0000000000..86acfb9a38
--- /dev/null
+++ b/cpukit/rtems/include/rtems/rtems/ratemon.h
@@ -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 */