summaryrefslogtreecommitdiffstats
path: root/cpukit/include/rtems/score
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-02-21 10:21:26 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-02-24 09:22:36 +0100
commit3cbdf19eacf45a8e9faad284b71775a9d56872dd (patch)
tree1fe6c02e117ac4a09379da1403724d66fc97a58c /cpukit/include/rtems/score
parentscore: Remove _Objects_Open() (diff)
downloadrtems-3cbdf19eacf45a8e9faad284b71775a9d56872dd.tar.bz2
score: Simplify core barrier
Use the number of threads which must arrive at the barrier to trip the automatic release also to indicate if the barrier is a manual release barrier.
Diffstat (limited to 'cpukit/include/rtems/score')
-rw-r--r--cpukit/include/rtems/score/corebarrier.h56
-rw-r--r--cpukit/include/rtems/score/corebarrierimpl.h56
2 files changed, 32 insertions, 80 deletions
diff --git a/cpukit/include/rtems/score/corebarrier.h b/cpukit/include/rtems/score/corebarrier.h
index 60abbd6f8f..7cfaeddca7 100644
--- a/cpukit/include/rtems/score/corebarrier.h
+++ b/cpukit/include/rtems/score/corebarrier.h
@@ -40,50 +40,30 @@ extern "C" {
*/
/**
- * Flavors of barriers.
- */
-typedef enum {
- /** This specifies that the barrier will automatically release when
- * the user specified number of threads have arrived at the barrier.
- */
- CORE_BARRIER_AUTOMATIC_RELEASE,
- /** This specifies that the user will have to manually release the barrier
- * in order to release the waiting threads.
- */
- CORE_BARRIER_MANUAL_RELEASE
-} CORE_barrier_Disciplines;
-
-/**
- * The following defines the control block used to manage the
- * attributes of each barrier.
+ * @brief This control block is used to manage a barrier.
*/
typedef struct {
- /** This field indicates whether the barrier is automatic or manual.
+ /**
+ * @brief This member is used to manage the set of tasks which are
+ * blocked waiting for the barrier to be released.
*/
- CORE_barrier_Disciplines discipline;
- /** This element indicates the number of threads which must arrive at the
- * barrier to trip the automatic release.
- */
- uint32_t maximum_count;
-} CORE_barrier_Attributes;
+ Thread_queue_Control Wait_queue;
-/**
- * The following defines the control block used to manage each
- * barrier.
- */
-typedef struct {
- /** This field is the Waiting Queue used to manage the set of tasks
- * which are blocked waiting for the barrier to be released.
+ /**
+ * @brief This member contains the current number of thread waiting at the
+ * barrier to be released.
*/
- Thread_queue_Control Wait_queue;
- /** This element is the set of attributes which define this instance's
- * behavior.
+ uint32_t number_of_waiting_threads;
+
+ /**
+ * @brief This member indicates the number of threads which must arrive at
+ * the barrier to trip the automatic release.
+ *
+ * Use ::CORE_BARRIER_MANUAL_RELEASE_MAXIMUM_COUNT to indicate a manual
+ * release barrier.
*/
- CORE_barrier_Attributes Attributes;
- /** This element contains the current number of thread waiting for this
- * barrier to be released. */
- uint32_t number_of_waiting_threads;
-} CORE_barrier_Control;
+ uint32_t maximum_count;
+} CORE_barrier_Control;
/** @} */
diff --git a/cpukit/include/rtems/score/corebarrierimpl.h b/cpukit/include/rtems/score/corebarrierimpl.h
index 922eb5d28f..86a3e956dc 100644
--- a/cpukit/include/rtems/score/corebarrierimpl.h
+++ b/cpukit/include/rtems/score/corebarrierimpl.h
@@ -34,6 +34,12 @@ extern "C" {
*/
/**
+ * @brief This maximum thread count constant indicates that the barrier is a
+ * manual release barrier.
+ */
+#define CORE_BARRIER_MANUAL_RELEASE_MAXIMUM_COUNT 0
+
+/**
* @brief These thread queue operations are used for core barriers.
*
* They are a specialization of ::_Thread_queue_Operations_FIFO. The only
@@ -43,16 +49,18 @@ extern "C" {
extern const Thread_queue_Operations _CORE_barrier_Thread_queue_operations;
/**
- * @brief Initializes the core barrier.
+ * @brief Initializes the core barrier.
*
- * This routine initializes the barrier based on the parameters passed.
+ * @param[out] the_barrier is the barrier to initialize.
*
- * @param[out] the_barrier The barrier to initialize.
- * @param[out] the_barrier_attributes The attributes which define the behavior of this instance.
+ * @param maximum_count is the number of threads which must arrive at the
+ * barrier to trip the automatic release or
+ * ::CORE_BARRIER_MANUAL_RELEASE_MAXIMUM_COUNT to indicate a manual release
+ * barrier.
*/
void _CORE_barrier_Initialize(
- CORE_barrier_Control *the_barrier,
- CORE_barrier_Attributes *the_barrier_attributes
+ CORE_barrier_Control *the_barrier,
+ uint32_t maximum_count
);
/**
@@ -173,42 +181,6 @@ RTEMS_INLINE_ROUTINE void _CORE_barrier_Flush(
);
}
-/**
- * @brief Checks if the barrier is automatic.
- *
- * This function returns true if the automatic release attribute is
- * enabled in the @a attribute_set and false otherwise.
- *
- * @param the_attribute The attribute set to test.
- *
- * @retval true The automatic release attribute is enabled.
- * @retval false The automatic release attribute is not enabled.
- */
-RTEMS_INLINE_ROUTINE bool _CORE_barrier_Is_automatic(
- CORE_barrier_Attributes *the_attribute
-)
-{
- return
- (the_attribute->discipline == CORE_BARRIER_AUTOMATIC_RELEASE);
-}
-
-/**
- * @brief Returns the number of currently waiting threads.
- *
- * This routine returns the number of threads currently waiting at the barrier.
- *
- * @param[in] the_barrier The barrier to obtain the number of blocked
- * threads of.
- *
- * @return the current count of waiting threads of this barrier.
- */
-RTEMS_INLINE_ROUTINE uint32_t _CORE_barrier_Get_number_of_waiting_threads(
- CORE_barrier_Control *the_barrier
-)
-{
- return the_barrier->number_of_waiting_threads;
-}
-
/** @} */
#ifdef __cplusplus