[rtems commit] score: Create barrier implementation header

Sebastian Huber sebh at rtems.org
Mon Jul 22 14:51:43 UTC 2013


Module:    rtems
Branch:    master
Commit:    bb2d9f9b36fc6b5ef0bf175c3da3928a482fd58b
Changeset: http://git.rtems.org/rtems/commit/?id=bb2d9f9b36fc6b5ef0bf175c3da3928a482fd58b

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Fri Jul 19 11:00:19 2013 +0200

score: Create barrier implementation header

Move implementation specific parts of corebarrier.h and corebarrier.inl
into new header file corebarrierimpl.h.  The corebarrier.h contains now
only the application visible API.

---

 cpukit/posix/include/rtems/posix/barrierimpl.h     |    1 +
 cpukit/rtems/include/rtems/rtems/barrierimpl.h     |    1 +
 cpukit/score/Makefile.am                           |    2 +-
 cpukit/score/include/rtems/score/corebarrier.h     |  133 +-------------
 cpukit/score/include/rtems/score/corebarrierimpl.h |  184 ++++++++++++++++++++
 cpukit/score/inline/rtems/score/corebarrier.inl    |   67 -------
 cpukit/score/preinstall.am                         |    8 +-
 cpukit/score/src/corebarrier.c                     |    2 +-
 cpukit/score/src/corebarrierrelease.c              |    2 +-
 cpukit/score/src/corebarrierwait.c                 |    2 +-
 10 files changed, 201 insertions(+), 201 deletions(-)

diff --git a/cpukit/posix/include/rtems/posix/barrierimpl.h b/cpukit/posix/include/rtems/posix/barrierimpl.h
index 180c169..b9df151 100644
--- a/cpukit/posix/include/rtems/posix/barrierimpl.h
+++ b/cpukit/posix/include/rtems/posix/barrierimpl.h
@@ -20,6 +20,7 @@
 #define _RTEMS_POSIX_BARRIERIMPL_H
 
 #include <rtems/posix/barrier.h>
+#include <rtems/score/corebarrierimpl.h>
 
 #include <pthread.h>
 
diff --git a/cpukit/rtems/include/rtems/rtems/barrierimpl.h b/cpukit/rtems/include/rtems/rtems/barrierimpl.h
index 9c630fb..59f9ea2 100644
--- a/cpukit/rtems/include/rtems/rtems/barrierimpl.h
+++ b/cpukit/rtems/include/rtems/rtems/barrierimpl.h
@@ -23,6 +23,7 @@
 #define _RTEMS_RTEMS_BARRIERIMPL_H
 
 #include <rtems/rtems/barrier.h>
+#include <rtems/score/corebarrierimpl.h>
 
 #ifdef __cplusplus
 extern "C" {
diff --git a/cpukit/score/Makefile.am b/cpukit/score/Makefile.am
index 6d103fd..9ef6217 100644
--- a/cpukit/score/Makefile.am
+++ b/cpukit/score/Makefile.am
@@ -22,6 +22,7 @@ include_rtems_score_HEADERS += include/rtems/score/chain.h
 include_rtems_score_HEADERS += include/rtems/score/context.h
 include_rtems_score_HEADERS += include/rtems/score/copyrt.h
 include_rtems_score_HEADERS += include/rtems/score/corebarrier.h
+include_rtems_score_HEADERS += include/rtems/score/corebarrierimpl.h
 include_rtems_score_HEADERS += include/rtems/score/coremsg.h
 include_rtems_score_HEADERS += include/rtems/score/coremsgimpl.h
 include_rtems_score_HEADERS += include/rtems/score/coremutex.h
@@ -88,7 +89,6 @@ endif
 ## inline
 include_rtems_score_HEADERS += inline/rtems/score/address.inl
 include_rtems_score_HEADERS += inline/rtems/score/chain.inl
-include_rtems_score_HEADERS += inline/rtems/score/corebarrier.inl
 include_rtems_score_HEADERS += inline/rtems/score/heap.inl
 include_rtems_score_HEADERS += inline/rtems/score/object.inl
 include_rtems_score_HEADERS += inline/rtems/score/priority.inl
diff --git a/cpukit/score/include/rtems/score/corebarrier.h b/cpukit/score/include/rtems/score/corebarrier.h
index 1f7c826..1505efc 100644
--- a/cpukit/score/include/rtems/score/corebarrier.h
+++ b/cpukit/score/include/rtems/score/corebarrier.h
@@ -19,6 +19,12 @@
 #ifndef _RTEMS_SCORE_COREBARRIER_H
 #define _RTEMS_SCORE_COREBARRIER_H
 
+#include <rtems/score/tqdata.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /**
  *  @defgroup ScoreBarrier Barrier Handler
  *
@@ -29,24 +35,6 @@
  */
 /**@{*/
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <rtems/score/thread.h>
-#include <rtems/score/threadq.h>
-#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 barriers.
- */
-typedef void ( *CORE_barrier_API_mp_support_callout )(
-                 Thread_Control *,
-                 Objects_Id
-             );
-
 /**
  *  Flavors of barriers.
  */
@@ -62,35 +50,6 @@ typedef enum {
 }   CORE_barrier_Disciplines;
 
 /**
- *  Core Barrier handler return statuses.
- */
-typedef enum {
-  /** This status indicates that the operation completed successfully. */
-  CORE_BARRIER_STATUS_SUCCESSFUL,
-  /** This status indicates that the barrier is configured for automatic
-   *  release and the caller tripped the automatic release.  The caller
-   *  thus did not block.
-   */
-  CORE_BARRIER_STATUS_AUTOMATICALLY_RELEASED,
-  /** This status indicates that the thread was blocked waiting for an
-   *  operation to complete and the barrier was deleted.
-   */
-  CORE_BARRIER_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_BARRIER_TIMEOUT
-}   CORE_barrier_Status;
-
-/**
- *  @brief Core barrier last status value.
- *
- *  This is the last status value.
- */
-#define CORE_BARRIER_STATUS_LAST CORE_BARRIER_TIMEOUT
-
-/**
  *  The following defines the control block used to manage the
  *  attributes of each barrier.
  */
@@ -122,89 +81,11 @@ typedef struct {
   uint32_t                 number_of_waiting_threads;
 }   CORE_barrier_Control;
 
-/**
- *  @brief Initialize core barrier.
- *
- *  This routine initializes the barrier based on the parameters passed.
- *
- *  @param[in] the_barrier is the barrier to initialize
- *  @param[in] the_barrier_attributes define the behavior of this instance
- */
-void _CORE_barrier_Initialize(
-  CORE_barrier_Control       *the_barrier,
-  CORE_barrier_Attributes    *the_barrier_attributes
-);
-
-/**
- *  @brief Wait for the barrier.
- *
- *  This routine wait for the barrier to be released.  If the barrier
- *  is set to automatic and this is the appropriate thread, then it returns
- *  immediately.  Otherwise, the calling thread is blocked until the barrier
- *  is released.
- *
- *  @param[in] the_barrier is the barrier to wait for
- *  @param[in] id is the id of the object being waited upon
- *  @param[in] wait is true if the calling thread is willing to wait
- *  @param[in] timeout is the number of ticks the calling thread is willing
- *         to wait if @a wait is true.
- *  @param[in] api_barrier_mp_support is the routine to invoke if the
- *         thread unblocked is remote
- *
- * @note Status is returned via the thread control block.
- */
-void _CORE_barrier_Wait(
-  CORE_barrier_Control                *the_barrier,
-  Objects_Id                           id,
-  bool                                 wait,
-  Watchdog_Interval                    timeout,
-  CORE_barrier_API_mp_support_callout  api_barrier_mp_support
-);
-
-/**
- *  @brief Manually release the barrier.
- *
- *  This routine manually releases the barrier.  All of the threads waiting
- *  for the barrier will be readied.
- *
- *  @param[in] the_barrier is the barrier to surrender
- *  @param[in] id is the id of the object for a remote unblock
- *  @param[in] api_barrier_mp_support is the routine to invoke if the
- *         thread unblocked is remote
- *
- *  @retval the number of unblocked threads
- */
-uint32_t _CORE_barrier_Release(
-  CORE_barrier_Control                *the_barrier,
-  Objects_Id                           id,
-  CORE_barrier_API_mp_support_callout  api_barrier_mp_support
-);
-
-/**
- *  This routine assists in the deletion of a barrier by flushing the
- *  associated wait queue.
- *
- *  @param[in] _the_barrier is the barrier to flush
- *  @param[in] _remote_extract_callout is the routine to invoke if the
- *         thread unblocked is remote
- *  @param[in] _status is the status to be returned to the unblocked thread
- */
-#define _CORE_barrier_Flush( _the_barrier, _remote_extract_callout, _status) \
-  _Thread_queue_Flush( \
-    &((_the_barrier)->Wait_queue), \
-    (_remote_extract_callout), \
-    (_status) \
-  )
-
-#ifndef __RTEMS_APPLICATION__
-#include <rtems/score/corebarrier.inl>
-#endif
+/**@}*/
 
 #ifdef __cplusplus
 }
 #endif
 
-/**@}*/
-
 #endif
 /*  end of include file */
diff --git a/cpukit/score/include/rtems/score/corebarrierimpl.h b/cpukit/score/include/rtems/score/corebarrierimpl.h
new file mode 100644
index 0000000..cc22553
--- /dev/null
+++ b/cpukit/score/include/rtems/score/corebarrierimpl.h
@@ -0,0 +1,184 @@
+/**
+ * @file
+ *
+ * @brief Inlined Routines Associated with the SuperCore Barrier
+ *
+ * This include file contains all of the inlined routines associated
+ * with the SuperCore barrier.
+ */
+
+/*
+ *  COPYRIGHT (c) 1989-2006.
+ *  On-Line Applications Research Corporation (OAR).
+ *
+ *  The license and distribution terms for this file may be
+ *  found in the file LICENSE in this distribution or at
+ *  http://www.rtems.com/license/LICENSE.
+ */
+
+#ifndef _RTEMS_SCORE_COREBARRIERIMPL_H
+#define _RTEMS_SCORE_COREBARRIERIMPL_H
+
+#include <rtems/score/corebarrier.h>
+#include <rtems/score/threadq.h>
+#include <rtems/score/watchdog.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @addtogroup ScoreBarrier
+ */
+/**@{**/
+
+/**
+ *  Core Barrier handler return statuses.
+ */
+typedef enum {
+  /** This status indicates that the operation completed successfully. */
+  CORE_BARRIER_STATUS_SUCCESSFUL,
+  /** This status indicates that the barrier is configured for automatic
+   *  release and the caller tripped the automatic release.  The caller
+   *  thus did not block.
+   */
+  CORE_BARRIER_STATUS_AUTOMATICALLY_RELEASED,
+  /** This status indicates that the thread was blocked waiting for an
+   *  operation to complete and the barrier was deleted.
+   */
+  CORE_BARRIER_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_BARRIER_TIMEOUT
+}   CORE_barrier_Status;
+
+/**
+ *  @brief Core barrier last status value.
+ *
+ *  This is the last status value.
+ */
+#define CORE_BARRIER_STATUS_LAST CORE_BARRIER_TIMEOUT
+
+/**
+ *  The following type defines the callout which the API provides
+ *  to support global/multiprocessor operations on barriers.
+ */
+typedef void ( *CORE_barrier_API_mp_support_callout )(
+                 Thread_Control *,
+                 Objects_Id
+             );
+
+/**
+ *  @brief Initialize core barrier.
+ *
+ *  This routine initializes the barrier based on the parameters passed.
+ *
+ *  @param[in] the_barrier is the barrier to initialize
+ *  @param[in] the_barrier_attributes define the behavior of this instance
+ */
+void _CORE_barrier_Initialize(
+  CORE_barrier_Control       *the_barrier,
+  CORE_barrier_Attributes    *the_barrier_attributes
+);
+
+/**
+ *  @brief Wait for the barrier.
+ *
+ *  This routine wait for the barrier to be released.  If the barrier
+ *  is set to automatic and this is the appropriate thread, then it returns
+ *  immediately.  Otherwise, the calling thread is blocked until the barrier
+ *  is released.
+ *
+ *  @param[in] the_barrier is the barrier to wait for
+ *  @param[in] id is the id of the object being waited upon
+ *  @param[in] wait is true if the calling thread is willing to wait
+ *  @param[in] timeout is the number of ticks the calling thread is willing
+ *         to wait if @a wait is true.
+ *  @param[in] api_barrier_mp_support is the routine to invoke if the
+ *         thread unblocked is remote
+ *
+ * @note Status is returned via the thread control block.
+ */
+void _CORE_barrier_Wait(
+  CORE_barrier_Control                *the_barrier,
+  Objects_Id                           id,
+  bool                                 wait,
+  Watchdog_Interval                    timeout,
+  CORE_barrier_API_mp_support_callout  api_barrier_mp_support
+);
+
+/**
+ *  @brief Manually release the barrier.
+ *
+ *  This routine manually releases the barrier.  All of the threads waiting
+ *  for the barrier will be readied.
+ *
+ *  @param[in] the_barrier is the barrier to surrender
+ *  @param[in] id is the id of the object for a remote unblock
+ *  @param[in] api_barrier_mp_support is the routine to invoke if the
+ *         thread unblocked is remote
+ *
+ *  @retval the number of unblocked threads
+ */
+uint32_t _CORE_barrier_Release(
+  CORE_barrier_Control                *the_barrier,
+  Objects_Id                           id,
+  CORE_barrier_API_mp_support_callout  api_barrier_mp_support
+);
+
+/**
+ *  This routine assists in the deletion of a barrier by flushing the
+ *  associated wait queue.
+ *
+ *  @param[in] _the_barrier is the barrier to flush
+ *  @param[in] _remote_extract_callout is the routine to invoke if the
+ *         thread unblocked is remote
+ *  @param[in] _status is the status to be returned to the unblocked thread
+ */
+#define _CORE_barrier_Flush( _the_barrier, _remote_extract_callout, _status) \
+  _Thread_queue_Flush( \
+    &((_the_barrier)->Wait_queue), \
+    (_remote_extract_callout), \
+    (_status) \
+  )
+
+/**
+ * This function returns true if the automatic release attribute is
+ * enabled in the @a attribute_set and false otherwise.
+ *
+ * @param[in] the_attribute is the attribute set to test
+ *
+ * @return true if the priority attribute is enabled
+ */
+RTEMS_INLINE_ROUTINE bool _CORE_barrier_Is_automatic(
+  CORE_barrier_Attributes *the_attribute
+)
+{
+   return
+     (the_attribute->discipline == CORE_BARRIER_AUTOMATIC_RELEASE);
+}
+
+/**
+ * This routine returns the number of threads currently waiting at the barrier.
+ *
+ * @param[in] the_barrier is the barrier to obtain the number of blocked
+ *            threads for
+ * @return the current count 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
+}
+#endif
+
+#endif
+/* end of include file */
diff --git a/cpukit/score/inline/rtems/score/corebarrier.inl b/cpukit/score/inline/rtems/score/corebarrier.inl
deleted file mode 100644
index 72ad670..0000000
--- a/cpukit/score/inline/rtems/score/corebarrier.inl
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * @file
- *
- * @brief Inlined Routines Associated with the SuperCore Barrier
- *
- * This include file contains all of the inlined routines associated
- * with the SuperCore barrier.
- */
-
-/*
- *  COPYRIGHT (c) 1989-2006.
- *  On-Line Applications Research Corporation (OAR).
- *
- *  The license and distribution terms for this file may be
- *  found in the file LICENSE in this distribution or at
- *  http://www.rtems.com/license/LICENSE.
- */
-
-#ifndef _RTEMS_SCORE_COREBARRIER_H
-# error "Never use <rtems/score/corebarrier.inl> directly; include <rtems/score/corebarrier.h> instead."
-#endif
-
-#ifndef _RTEMS_SCORE_COREBARRIER_INL
-#define _RTEMS_SCORE_COREBARRIER_INL
-
-/**
- * @addtogroup ScoreBarrier
- */
-/**@{**/
-
-#include <rtems/score/thread.h>
-#include <rtems/score/threadq.h>
-
-/**
- * This function returns true if the automatic release attribute is
- * enabled in the @a attribute_set and false otherwise.
- *
- * @param[in] the_attribute is the attribute set to test
- *
- * @return true if the priority attribute is enabled
- */
-RTEMS_INLINE_ROUTINE bool _CORE_barrier_Is_automatic(
-  CORE_barrier_Attributes *the_attribute
-)
-{
-   return
-     (the_attribute->discipline == CORE_BARRIER_AUTOMATIC_RELEASE);
-}
-
-/**
- * This routine returns the number of threads currently waiting at the barrier.
- *
- * @param[in] the_barrier is the barrier to obtain the number of blocked
- *            threads for
- * @return the current count 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;
-}
-
-/** @} */
-
-#endif
-/* end of include file */
diff --git a/cpukit/score/preinstall.am b/cpukit/score/preinstall.am
index 9a92930..bd99d82 100644
--- a/cpukit/score/preinstall.am
+++ b/cpukit/score/preinstall.am
@@ -71,6 +71,10 @@ $(PROJECT_INCLUDE)/rtems/score/corebarrier.h: include/rtems/score/corebarrier.h
 	$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/corebarrier.h
 PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/corebarrier.h
 
+$(PROJECT_INCLUDE)/rtems/score/corebarrierimpl.h: include/rtems/score/corebarrierimpl.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
+	$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/corebarrierimpl.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/corebarrierimpl.h
+
 $(PROJECT_INCLUDE)/rtems/score/coremsg.h: include/rtems/score/coremsg.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
 	$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/coremsg.h
 PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/coremsg.h
@@ -283,10 +287,6 @@ $(PROJECT_INCLUDE)/rtems/score/chain.inl: inline/rtems/score/chain.inl $(PROJECT
 	$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/chain.inl
 PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/chain.inl
 
-$(PROJECT_INCLUDE)/rtems/score/corebarrier.inl: inline/rtems/score/corebarrier.inl $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
-	$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/corebarrier.inl
-PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/corebarrier.inl
-
 $(PROJECT_INCLUDE)/rtems/score/heap.inl: inline/rtems/score/heap.inl $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
 	$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/heap.inl
 PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/heap.inl
diff --git a/cpukit/score/src/corebarrier.c b/cpukit/score/src/corebarrier.c
index 5eb620a..4713207 100644
--- a/cpukit/score/src/corebarrier.c
+++ b/cpukit/score/src/corebarrier.c
@@ -19,7 +19,7 @@
 #endif
 
 #include <rtems/system.h>
-#include <rtems/score/corebarrier.h>
+#include <rtems/score/corebarrierimpl.h>
 #include <rtems/score/states.h>
 #include <rtems/score/thread.h>
 #include <rtems/score/threadq.h>
diff --git a/cpukit/score/src/corebarrierrelease.c b/cpukit/score/src/corebarrierrelease.c
index e6f7554..2a27e41 100644
--- a/cpukit/score/src/corebarrierrelease.c
+++ b/cpukit/score/src/corebarrierrelease.c
@@ -21,7 +21,7 @@
 
 #include <rtems/system.h>
 #include <rtems/score/isr.h>
-#include <rtems/score/corebarrier.h>
+#include <rtems/score/corebarrierimpl.h>
 #include <rtems/score/states.h>
 #include <rtems/score/thread.h>
 #include <rtems/score/threadq.h>
diff --git a/cpukit/score/src/corebarrierwait.c b/cpukit/score/src/corebarrierwait.c
index e8ab629..a5b685a 100644
--- a/cpukit/score/src/corebarrierwait.c
+++ b/cpukit/score/src/corebarrierwait.c
@@ -20,7 +20,7 @@
 
 #include <rtems/system.h>
 #include <rtems/score/isr.h>
-#include <rtems/score/corebarrier.h>
+#include <rtems/score/corebarrierimpl.h>
 #include <rtems/score/states.h>
 #include <rtems/score/thread.h>
 #include <rtems/score/threadq.h>




More information about the vc mailing list