summaryrefslogtreecommitdiffstats
path: root/cpukit/score/include/rtems/score/coresem.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--cpukit/score/include/rtems/score/coresem.h115
1 files changed, 78 insertions, 37 deletions
diff --git a/cpukit/score/include/rtems/score/coresem.h b/cpukit/score/include/rtems/score/coresem.h
index e9be0036ab..333cd1874f 100644
--- a/cpukit/score/include/rtems/score/coresem.h
+++ b/cpukit/score/include/rtems/score/coresem.h
@@ -1,11 +1,14 @@
-/* core_sem.h
+/**
+ * @file coresem.h
*
* This include file contains all the constants and structures associated
* with the Counting Semaphore Handler. A counting semaphore is the
* standard Dijkstra binary semaphore used to provide synchronization
* and mutual exclusion capabilities.
- *
- * COPYRIGHT (c) 1989-1999.
+ */
+
+/*
+ * COPYRIGHT (c) 1989-2004.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
@@ -18,6 +21,14 @@
#ifndef __RTEMS_CORE_COUNTING_SEMAPHORE_h
#define __RTEMS_CORE_COUNTING_SEMAPHORE_h
+/**
+ * @defgroup ScoreSemaphore Semaphore Handler
+ *
+ * This group contains functionality which provides the foundation
+ * Semaphore services used in all of the APIs supported by RTEMS.
+ */
+/**@{*/
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -27,83 +38,108 @@ extern "C" {
#include <rtems/score/priority.h>
#include <rtems/score/watchdog.h>
-/*
+/**
* The following type defines the callout which the API provides
* to support global/multiprocessor operations on semaphores.
*/
-
typedef void ( *CORE_semaphore_API_mp_support_callout )(
Thread_Control *,
Objects_Id
);
-/*
+/**
* Blocking disciplines for a semaphore.
*/
-
typedef enum {
+ /** This specifies that threads will wait for the semaphore in FIFO order. */
CORE_SEMAPHORE_DISCIPLINES_FIFO,
+ /** This specifies that threads will wait for the semaphore in
+ * priority order.
+ */
CORE_SEMAPHORE_DISCIPLINES_PRIORITY
} CORE_semaphore_Disciplines;
-/*
+/**
* Core Semaphore handler return statuses.
*/
-
typedef enum {
+ /** This status indicates that the operation completed successfully. */
CORE_SEMAPHORE_STATUS_SUCCESSFUL,
+ /** This status indicates that the calling task did not want to block
+ * and the operation was unable to complete immediately because the
+ * resource was unavailable.
+ */
CORE_SEMAPHORE_STATUS_UNSATISFIED_NOWAIT,
+ /** This status indicates that the thread was blocked waiting for an
+ * operation to complete and the semaphore was deleted.
+ */
CORE_SEMAPHORE_WAS_DELETED,
+ /** This status indicates that the calling task was willing to block
+ * but the operation was unable to complete within the time allotted
+ * because the resource never became available.
+ */
CORE_SEMAPHORE_TIMEOUT,
+ /** This status indicates that an attempt was made to unlock the semaphore
+ * and this would have made its count greater than that allowed.
CORE_SEMAPHORE_MAXIMUM_COUNT_EXCEEDED
} CORE_semaphore_Status;
-/*
+/**
* The following defines the control block used to manage the
* attributes of each semaphore.
*/
-
typedef struct {
+ /** This element indicates the maximum count this semaphore may have. */
uint32_t maximum_count;
+ /** This field indicates whether threads waiting on the semaphore block in
+ * FIFO or priority order.
+ */
CORE_semaphore_Disciplines discipline;
} CORE_semaphore_Attributes;
-/*
+/**
* The following defines the control block used to manage each
* counting semaphore.
*/
-
typedef struct {
+ /** This field is the Waiting Queue used to manage the set of tasks
+ * which are blocked waiting to obtain the semaphore.
+ */
Thread_queue_Control Wait_queue;
+ /** This element is the set of attributes which define this instance's
+ * behavior.
+ */
CORE_semaphore_Attributes Attributes;
+ /** This element contains the current count of this semaphore. */
uint32_t count;
} CORE_semaphore_Control;
-/*
- * _CORE_semaphore_Initialize
- *
- * DESCRIPTION:
- *
+/**
* This routine initializes the semaphore based on the parameters passed.
+ *
+ * @param the_semaphore (in) is the semaphore to initialize
+ * @param the_semaphore_attributes (in) define the behavior of this instance
+ * @param initial_value (in) is the initial count of the semaphore
*/
-
void _CORE_semaphore_Initialize(
CORE_semaphore_Control *the_semaphore,
CORE_semaphore_Attributes *the_semaphore_attributes,
uint32_t initial_value
);
-/*
- * _CORE_semaphore_Seize
- *
- * DESCRIPTION:
- *
+/**
* This routine attempts to receive a unit from the_semaphore.
* If a unit is available or if the wait flag is FALSE, then the routine
* returns. Otherwise, the calling task is blocked until a unit becomes
* available.
+ *
+ * @param the_semaphore (in) is the semaphore to seize
+ * @param id (in) is the Id of the API level Semaphore object associated
+ * with this instance of a SuperCore Semaphore
+ * @param wait (in) is TRUE if the calling thread is willing to wait
+ * @param timeout (in) is the number of ticks the calling thread is willing
+ * to wait if @a wait is TRUE.
*/
-
void _CORE_semaphore_Seize(
CORE_semaphore_Control *the_semaphore,
Objects_Id id,
@@ -111,31 +147,34 @@ void _CORE_semaphore_Seize(
Watchdog_Interval timeout
);
-/*
- * _CORE_semaphore_Surrender
- *
- * DESCRIPTION:
- *
+/**
* This routine frees a unit to the semaphore. 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.
+ *
+ * @param the_semaphore (in) is the semaphore to surrender
+ * @param id (in) is the Id of the API level Semaphore object associated
+ * with this instance of a SuperCore Semaphore
+ * @param api_semaphore_mp_support (in) is the routine to invoke if the
+ * thread unblocked is remote
+ *
+ * @return an indication of whether the routine succeeded or failed
*/
-
CORE_semaphore_Status _CORE_semaphore_Surrender(
CORE_semaphore_Control *the_semaphore,
Objects_Id id,
CORE_semaphore_API_mp_support_callout api_semaphore_mp_support
);
-/*
- * _CORE_semaphore_Flush
- *
- * DESCRIPTION:
- *
+/**
* This routine assists in the deletion of a semaphore by flushing the
* associated wait queue.
+ *
+ * @param the_semaphore (in) is the semaphore to flush
+ * @param remote_extract_callout (in) is the routine to invoke if the
+ * thread unblocked is remote
+ * @param status (in) is the status to be returned to the unblocked thread
*/
-
void _CORE_semaphore_Flush(
CORE_semaphore_Control *the_semaphore,
Thread_queue_Flush_callout remote_extract_callout,
@@ -150,5 +189,7 @@ void _CORE_semaphore_Flush(
}
#endif
+/**@}*/
+
#endif
/* end of include file */