[PATCH 19/25] score: Create semaphore implementation header

Sebastian Huber sebastian.huber at embedded-brains.de
Thu Jul 18 14:26:07 UTC 2013


Move implementation specific parts of coresem.h and coresem.inl into new
header file coresemimpl.h.  The coresem.h contains now only the
application visible API.
---
 cpukit/posix/include/rtems/posix/semaphoreimpl.h |    1 +
 cpukit/rtems/include/rtems/rtems/semimpl.h       |    1 +
 cpukit/rtems/src/sem.c                           |    2 +-
 cpukit/rtems/src/semcreate.c                     |    2 +-
 cpukit/rtems/src/semdelete.c                     |    2 +-
 cpukit/rtems/src/semflush.c                      |    2 +-
 cpukit/rtems/src/semident.c                      |    2 +-
 cpukit/rtems/src/semobtain.c                     |    2 +-
 cpukit/rtems/src/semrelease.c                    |    2 +-
 cpukit/score/Makefile.am                         |    2 +-
 cpukit/score/include/rtems/score/coresem.h       |  153 +------------
 cpukit/score/include/rtems/score/coresemimpl.h   |  255 ++++++++++++++++++++++
 cpukit/score/inline/rtems/score/coresem.inl      |  118 ----------
 cpukit/score/preinstall.am                       |    8 +-
 cpukit/score/src/coresem.c                       |    2 +-
 cpukit/score/src/coresemflush.c                  |    2 +-
 cpukit/score/src/coresemseize.c                  |    2 +-
 cpukit/score/src/coresemsurrender.c              |    2 +-
 cpukit/score/src/mpci.c                          |    2 +-
 19 files changed, 281 insertions(+), 281 deletions(-)
 create mode 100644 cpukit/score/include/rtems/score/coresemimpl.h
 delete mode 100644 cpukit/score/inline/rtems/score/coresem.inl

diff --git a/cpukit/posix/include/rtems/posix/semaphoreimpl.h b/cpukit/posix/include/rtems/posix/semaphoreimpl.h
index 43b0e2b..34ac6f8 100644
--- a/cpukit/posix/include/rtems/posix/semaphoreimpl.h
+++ b/cpukit/posix/include/rtems/posix/semaphoreimpl.h
@@ -21,6 +21,7 @@
 
 #include <rtems/posix/semaphore.h>
 #include <rtems/posix/posixapi.h>
+#include <rtems/score/coresemimpl.h>
 
 #include <errno.h>
 
diff --git a/cpukit/rtems/include/rtems/rtems/semimpl.h b/cpukit/rtems/include/rtems/rtems/semimpl.h
index 8bd762b..047a198 100644
--- a/cpukit/rtems/include/rtems/rtems/semimpl.h
+++ b/cpukit/rtems/include/rtems/rtems/semimpl.h
@@ -19,6 +19,7 @@
 
 #include <rtems/rtems/sem.h>
 #include <rtems/score/coremuteximpl.h>
+#include <rtems/score/coresemimpl.h>
 
 #ifdef __cplusplus
 extern "C" {
diff --git a/cpukit/rtems/src/sem.c b/cpukit/rtems/src/sem.c
index 41bb763..90404b7 100644
--- a/cpukit/rtems/src/sem.c
+++ b/cpukit/rtems/src/sem.c
@@ -28,7 +28,7 @@
 #include <rtems/rtems/options.h>
 #include <rtems/rtems/semimpl.h>
 #include <rtems/score/coremuteximpl.h>
-#include <rtems/score/coresem.h>
+#include <rtems/score/coresemimpl.h>
 #include <rtems/score/states.h>
 #include <rtems/score/thread.h>
 #include <rtems/score/threadq.h>
diff --git a/cpukit/rtems/src/semcreate.c b/cpukit/rtems/src/semcreate.c
index 01d2450..0b0e4fb 100644
--- a/cpukit/rtems/src/semcreate.c
+++ b/cpukit/rtems/src/semcreate.c
@@ -27,7 +27,7 @@
 #include <rtems/rtems/options.h>
 #include <rtems/rtems/semimpl.h>
 #include <rtems/score/coremuteximpl.h>
-#include <rtems/score/coresem.h>
+#include <rtems/score/coresemimpl.h>
 #include <rtems/score/states.h>
 #include <rtems/score/thread.h>
 #include <rtems/score/threadq.h>
diff --git a/cpukit/rtems/src/semdelete.c b/cpukit/rtems/src/semdelete.c
index 0b9d298..96b4bd7 100644
--- a/cpukit/rtems/src/semdelete.c
+++ b/cpukit/rtems/src/semdelete.c
@@ -27,7 +27,7 @@
 #include <rtems/rtems/options.h>
 #include <rtems/rtems/semimpl.h>
 #include <rtems/score/coremuteximpl.h>
-#include <rtems/score/coresem.h>
+#include <rtems/score/coresemimpl.h>
 #include <rtems/score/states.h>
 #include <rtems/score/thread.h>
 #include <rtems/score/threadq.h>
diff --git a/cpukit/rtems/src/semflush.c b/cpukit/rtems/src/semflush.c
index 10c3882..de82973 100644
--- a/cpukit/rtems/src/semflush.c
+++ b/cpukit/rtems/src/semflush.c
@@ -27,7 +27,7 @@
 #include <rtems/rtems/options.h>
 #include <rtems/rtems/semimpl.h>
 #include <rtems/score/coremuteximpl.h>
-#include <rtems/score/coresem.h>
+#include <rtems/score/coresemimpl.h>
 #include <rtems/score/states.h>
 #include <rtems/score/thread.h>
 #include <rtems/score/threadq.h>
diff --git a/cpukit/rtems/src/semident.c b/cpukit/rtems/src/semident.c
index 02edd7f..b26e1f1 100644
--- a/cpukit/rtems/src/semident.c
+++ b/cpukit/rtems/src/semident.c
@@ -27,7 +27,7 @@
 #include <rtems/rtems/options.h>
 #include <rtems/rtems/semimpl.h>
 #include <rtems/score/coremuteximpl.h>
-#include <rtems/score/coresem.h>
+#include <rtems/score/coresemimpl.h>
 #include <rtems/score/states.h>
 #include <rtems/score/thread.h>
 #include <rtems/score/threadq.h>
diff --git a/cpukit/rtems/src/semobtain.c b/cpukit/rtems/src/semobtain.c
index 08ccb80..89e7bb6 100644
--- a/cpukit/rtems/src/semobtain.c
+++ b/cpukit/rtems/src/semobtain.c
@@ -27,7 +27,7 @@
 #include <rtems/rtems/options.h>
 #include <rtems/rtems/semimpl.h>
 #include <rtems/score/coremuteximpl.h>
-#include <rtems/score/coresem.h>
+#include <rtems/score/coresemimpl.h>
 #include <rtems/score/states.h>
 #include <rtems/score/thread.h>
 #include <rtems/score/threadq.h>
diff --git a/cpukit/rtems/src/semrelease.c b/cpukit/rtems/src/semrelease.c
index 760f4d4..3af1ff9 100644
--- a/cpukit/rtems/src/semrelease.c
+++ b/cpukit/rtems/src/semrelease.c
@@ -42,7 +42,7 @@
 #include <rtems/rtems/options.h>
 #include <rtems/rtems/semimpl.h>
 #include <rtems/score/coremuteximpl.h>
-#include <rtems/score/coresem.h>
+#include <rtems/score/coresemimpl.h>
 #include <rtems/score/states.h>
 #include <rtems/score/thread.h>
 #include <rtems/score/threadq.h>
diff --git a/cpukit/score/Makefile.am b/cpukit/score/Makefile.am
index 09a87d8..d51b163 100644
--- a/cpukit/score/Makefile.am
+++ b/cpukit/score/Makefile.am
@@ -26,6 +26,7 @@ include_rtems_score_HEADERS += include/rtems/score/coremsg.h
 include_rtems_score_HEADERS += include/rtems/score/coremutex.h
 include_rtems_score_HEADERS += include/rtems/score/coremuteximpl.h
 include_rtems_score_HEADERS += include/rtems/score/coresem.h
+include_rtems_score_HEADERS += include/rtems/score/coresemimpl.h
 include_rtems_score_HEADERS += include/rtems/score/heap.h
 include_rtems_score_HEADERS += include/rtems/score/protectedheap.h
 include_rtems_score_HEADERS += include/rtems/score/interr.h
@@ -88,7 +89,6 @@ 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/coremsg.inl
-include_rtems_score_HEADERS += inline/rtems/score/coresem.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/coresem.h b/cpukit/score/include/rtems/score/coresem.h
index 3bb8773..7a20408 100644
--- a/cpukit/score/include/rtems/score/coresem.h
+++ b/cpukit/score/include/rtems/score/coresem.h
@@ -21,6 +21,12 @@
 #ifndef _RTEMS_SCORE_CORESEM_H
 #define _RTEMS_SCORE_CORESEM_H
 
+#include <rtems/score/tqdata.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /**
  *  @defgroup ScoreSemaphore Semaphore Handler
  *
@@ -31,28 +37,6 @@
  */
 /**@{*/
 
-#include <rtems/score/thread.h>
-#include <rtems/score/threadq.h>
-#include <rtems/score/priority.h>
-#include <rtems/score/watchdog.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if defined(RTEMS_POSIX_API) || defined(RTEMS_MULTIPROCESSING)
-  #define RTEMS_SCORE_CORESEM_ENABLE_SEIZE_BODY
-#endif
-
-/**
- *  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.
  */
@@ -66,39 +50,6 @@ typedef enum {
 }   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;
-
-/**
- *  @brief Core semaphore last status value.
- *
- *  This is the last status value.
- */
-#define CORE_SEMAPHORE_STATUS_LAST CORE_SEMAPHORE_MAXIMUM_COUNT_EXCEEDED
-
-/**
  *  The following defines the control block used to manage the
  *  attributes of each semaphore.
  */
@@ -128,101 +79,11 @@ typedef struct {
   uint32_t                    count;
 }   CORE_semaphore_Control;
 
-/**
- *  @brief Initialize the semaphore based on the parameters passed.
- *
- *  DESCRIPTION:
- *
- *  This package is the implementation of the CORE Semaphore Handler.
- *  This core object utilizes standard Dijkstra counting semaphores to provide
- *  synchronization and mutual exclusion capabilities.
- *
- *  This routine initializes the semaphore based on the parameters passed.
- *
- *  @param[in] the_semaphore is the semaphore to initialize
- *  @param[in] the_semaphore_attributes define the behavior of this instance
- *  @param[in] initial_value 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
-);
-
-#if defined(RTEMS_SCORE_CORESEM_ENABLE_SEIZE_BODY)
-  /**
-   *  This routine attempts to receive a unit from @a 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[in] the_semaphore is the semaphore to seize
-   *  @param[in] id is the Id of the API level Semaphore object associated
-   *         with this instance of a SuperCore Semaphore
-   *  @param[in] wait indicates if the caller is willing to block
-   *  @param[in] timeout 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,
-    bool                     wait,
-    Watchdog_Interval        timeout
-  );
-#endif
-
-/**
- *  @brief Surrender a unit to a semaphore.
- *
- *  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[in] the_semaphore is the semaphore to surrender
- *  @param[in] id is the Id of the API level Semaphore object associated
- *         with this instance of a SuperCore Semaphore
- *  @param[in] api_semaphore_mp_support is the routine to invoke if the
- *         thread unblocked is remote
- *
- *  @retval 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
-);
-
-/**
- *  @brief Core semaphore flush.
- *
- *  DESCRIPTION:
- *  This package is the implementation of the CORE Semaphore Handler.
- *  This core object utilizes standard Dijkstra counting semaphores to provide
- *  synchronization and mutual exclusion capabilities.
- *
- *  This routine assists in the deletion of a semaphore by flushing the
- *  associated wait queue.
- *
- *  @param[in] the_semaphore is the semaphore 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
- */
-void _CORE_semaphore_Flush(
-  CORE_semaphore_Control         *the_semaphore,
-  Thread_queue_Flush_callout      remote_extract_callout,
-  uint32_t                        status
-);
-
-#ifndef __RTEMS_APPLICATION__
-#include <rtems/score/coresem.inl>
-#endif
+/**@}*/
 
 #ifdef __cplusplus
 }
 #endif
 
-/**@}*/
-
 #endif
 /*  end of include file */
diff --git a/cpukit/score/include/rtems/score/coresemimpl.h b/cpukit/score/include/rtems/score/coresemimpl.h
new file mode 100644
index 0000000..241ca41
--- /dev/null
+++ b/cpukit/score/include/rtems/score/coresemimpl.h
@@ -0,0 +1,255 @@
+/**
+ * @file
+ *
+ * @brief Inlined Routines Associated with the SuperCore Semaphore
+ *
+ * This include file contains all of the inlined routines associated
+ * with the SuperCore semaphore.
+ */
+
+/*
+ *  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_CORESEMIMPL_H
+#define _RTEMS_SCORE_CORESEMIMPL_H
+
+#include <rtems/score/coresem.h>
+#include <rtems/score/thread.h>
+#include <rtems/score/threaddispatch.h>
+#include <rtems/score/threadq.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @addtogroup ScoreSemaphore
+ */
+/**@{**/
+
+#if defined(RTEMS_POSIX_API) || defined(RTEMS_MULTIPROCESSING)
+  #define RTEMS_SCORE_CORESEM_ENABLE_SEIZE_BODY
+#endif
+
+/**
+ *  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;
+
+/**
+ *  @brief Core semaphore last status value.
+ *
+ *  This is the last status value.
+ */
+#define CORE_SEMAPHORE_STATUS_LAST CORE_SEMAPHORE_MAXIMUM_COUNT_EXCEEDED
+
+/**
+ *  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
+             );
+
+/**
+ *  @brief Initialize the semaphore based on the parameters passed.
+ *
+ *  DESCRIPTION:
+ *
+ *  This package is the implementation of the CORE Semaphore Handler.
+ *  This core object utilizes standard Dijkstra counting semaphores to provide
+ *  synchronization and mutual exclusion capabilities.
+ *
+ *  This routine initializes the semaphore based on the parameters passed.
+ *
+ *  @param[in] the_semaphore is the semaphore to initialize
+ *  @param[in] the_semaphore_attributes define the behavior of this instance
+ *  @param[in] initial_value 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
+);
+
+#if defined(RTEMS_SCORE_CORESEM_ENABLE_SEIZE_BODY)
+  /**
+   *  This routine attempts to receive a unit from @a 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[in] the_semaphore is the semaphore to seize
+   *  @param[in] id is the Id of the API level Semaphore object associated
+   *         with this instance of a SuperCore Semaphore
+   *  @param[in] wait indicates if the caller is willing to block
+   *  @param[in] timeout 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,
+    bool                     wait,
+    Watchdog_Interval        timeout
+  );
+#endif
+
+/**
+ *  @brief Surrender a unit to a semaphore.
+ *
+ *  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[in] the_semaphore is the semaphore to surrender
+ *  @param[in] id is the Id of the API level Semaphore object associated
+ *         with this instance of a SuperCore Semaphore
+ *  @param[in] api_semaphore_mp_support is the routine to invoke if the
+ *         thread unblocked is remote
+ *
+ *  @retval 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
+);
+
+/**
+ *  @brief Core semaphore flush.
+ *
+ *  DESCRIPTION:
+ *  This package is the implementation of the CORE Semaphore Handler.
+ *  This core object utilizes standard Dijkstra counting semaphores to provide
+ *  synchronization and mutual exclusion capabilities.
+ *
+ *  This routine assists in the deletion of a semaphore by flushing the
+ *  associated wait queue.
+ *
+ *  @param[in] the_semaphore is the semaphore 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
+ */
+void _CORE_semaphore_Flush(
+  CORE_semaphore_Control         *the_semaphore,
+  Thread_queue_Flush_callout      remote_extract_callout,
+  uint32_t                        status
+);
+
+/**
+ * This function returns true if the priority 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_semaphore_Is_priority(
+  CORE_semaphore_Attributes *the_attribute
+)
+{
+   return ( the_attribute->discipline == CORE_SEMAPHORE_DISCIPLINES_PRIORITY );
+}
+
+/**
+ * This routine returns the current count associated with the semaphore.
+ *
+ * @param[in] the_semaphore is the semaphore to obtain the count of
+ *
+ * @return the current count of this semaphore
+ */
+RTEMS_INLINE_ROUTINE uint32_t  _CORE_semaphore_Get_count(
+  CORE_semaphore_Control  *the_semaphore
+)
+{
+  return the_semaphore->count;
+}
+
+/**
+ * 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[in] the_semaphore is the semaphore to obtain
+ * @param[in] id is the Id of the owning API level Semaphore object
+ * @param[in] wait is true if the thread is willing to wait
+ * @param[in] timeout is the maximum number of ticks to block
+ * @param[in] level is a temporary variable used to contain the ISR
+ *        disable level cookie
+ *
+ * @note There is currently no MACRO version of this routine.
+ */
+RTEMS_INLINE_ROUTINE void _CORE_semaphore_Seize_isr_disable(
+  CORE_semaphore_Control  *the_semaphore,
+  Objects_Id               id,
+  bool                     wait,
+  Watchdog_Interval        timeout,
+  ISR_Level                level
+)
+{
+  Thread_Control *executing;
+
+  /* disabled when you get here */
+
+  executing = _Thread_Executing;
+  executing->Wait.return_code = CORE_SEMAPHORE_STATUS_SUCCESSFUL;
+  if ( the_semaphore->count != 0 ) {
+    the_semaphore->count -= 1;
+    _ISR_Enable( level );
+    return;
+  }
+
+  if ( !wait ) {
+    _ISR_Enable( level );
+    executing->Wait.return_code = CORE_SEMAPHORE_STATUS_UNSATISFIED_NOWAIT;
+    return;
+  }
+
+  _Thread_Disable_dispatch();
+  _Thread_queue_Enter_critical_section( &the_semaphore->Wait_queue );
+  executing->Wait.queue          = &the_semaphore->Wait_queue;
+  executing->Wait.id             = id;
+  _ISR_Enable( level );
+
+  _Thread_queue_Enqueue( &the_semaphore->Wait_queue, timeout );
+  _Thread_Enable_dispatch();
+}
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */
diff --git a/cpukit/score/inline/rtems/score/coresem.inl b/cpukit/score/inline/rtems/score/coresem.inl
deleted file mode 100644
index 0ae3b33..0000000
--- a/cpukit/score/inline/rtems/score/coresem.inl
+++ /dev/null
@@ -1,118 +0,0 @@
-/**
- * @file
- *
- * @brief Inlined Routines Associated with the SuperCore Semaphore
- *
- * This include file contains all of the inlined routines associated
- * with the SuperCore semaphore.
- */
-
-/*
- *  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_CORESEM_H
-# error "Never use <rtems/score/coresem.inl> directly; include <rtems/score/coresem.h> instead."
-#endif
-
-#ifndef _RTEMS_SCORE_CORESEM_INL
-#define _RTEMS_SCORE_CORESEM_INL
-
-/**
- * @addtogroup ScoreSemaphore
- */
-/**@{**/
-
-#include <rtems/score/thread.h>
-#include <rtems/score/threaddispatch.h>
-#include <rtems/score/threadq.h>
-
-/**
- * This function returns true if the priority 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_semaphore_Is_priority(
-  CORE_semaphore_Attributes *the_attribute
-)
-{
-   return ( the_attribute->discipline == CORE_SEMAPHORE_DISCIPLINES_PRIORITY );
-}
-
-/**
- * This routine returns the current count associated with the semaphore.
- *
- * @param[in] the_semaphore is the semaphore to obtain the count of
- *
- * @return the current count of this semaphore
- */
-RTEMS_INLINE_ROUTINE uint32_t  _CORE_semaphore_Get_count(
-  CORE_semaphore_Control  *the_semaphore
-)
-{
-  return the_semaphore->count;
-}
-
-/**
- * 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[in] the_semaphore is the semaphore to obtain
- * @param[in] id is the Id of the owning API level Semaphore object
- * @param[in] wait is true if the thread is willing to wait
- * @param[in] timeout is the maximum number of ticks to block
- * @param[in] level is a temporary variable used to contain the ISR
- *        disable level cookie
- *
- * @note There is currently no MACRO version of this routine.
- */
-RTEMS_INLINE_ROUTINE void _CORE_semaphore_Seize_isr_disable(
-  CORE_semaphore_Control  *the_semaphore,
-  Objects_Id               id,
-  bool                     wait,
-  Watchdog_Interval        timeout,
-  ISR_Level                level
-)
-{
-  Thread_Control *executing;
-
-  /* disabled when you get here */
-
-  executing = _Thread_Executing;
-  executing->Wait.return_code = CORE_SEMAPHORE_STATUS_SUCCESSFUL;
-  if ( the_semaphore->count != 0 ) {
-    the_semaphore->count -= 1;
-    _ISR_Enable( level );
-    return;
-  }
-
-  if ( !wait ) {
-    _ISR_Enable( level );
-    executing->Wait.return_code = CORE_SEMAPHORE_STATUS_UNSATISFIED_NOWAIT;
-    return;
-  }
-
-  _Thread_Disable_dispatch();
-  _Thread_queue_Enter_critical_section( &the_semaphore->Wait_queue );
-  executing->Wait.queue          = &the_semaphore->Wait_queue;
-  executing->Wait.id             = id;
-  _ISR_Enable( level );
-
-  _Thread_queue_Enqueue( &the_semaphore->Wait_queue, timeout );
-  _Thread_Enable_dispatch();
-}
-
-/** @} */
-
-#endif
-/* end of include file */
diff --git a/cpukit/score/preinstall.am b/cpukit/score/preinstall.am
index 0bbb879..eee9720 100644
--- a/cpukit/score/preinstall.am
+++ b/cpukit/score/preinstall.am
@@ -87,6 +87,10 @@ $(PROJECT_INCLUDE)/rtems/score/coresem.h: include/rtems/score/coresem.h $(PROJEC
 	$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/coresem.h
 PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/coresem.h
 
+$(PROJECT_INCLUDE)/rtems/score/coresemimpl.h: include/rtems/score/coresemimpl.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
+	$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/coresemimpl.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/coresemimpl.h
+
 $(PROJECT_INCLUDE)/rtems/score/heap.h: include/rtems/score/heap.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
 	$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/heap.h
 PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/heap.h
@@ -283,10 +287,6 @@ $(PROJECT_INCLUDE)/rtems/score/coremsg.inl: inline/rtems/score/coremsg.inl $(PRO
 	$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/coremsg.inl
 PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/coremsg.inl
 
-$(PROJECT_INCLUDE)/rtems/score/coresem.inl: inline/rtems/score/coresem.inl $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
-	$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/coresem.inl
-PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/coresem.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/coresem.c b/cpukit/score/src/coresem.c
index 03b9c5e..14c706a 100644
--- a/cpukit/score/src/coresem.c
+++ b/cpukit/score/src/coresem.c
@@ -20,7 +20,7 @@
 
 #include <rtems/system.h>
 #include <rtems/score/isr.h>
-#include <rtems/score/coresem.h>
+#include <rtems/score/coresemimpl.h>
 #include <rtems/score/states.h>
 #include <rtems/score/thread.h>
 #include <rtems/score/threadq.h>
diff --git a/cpukit/score/src/coresemflush.c b/cpukit/score/src/coresemflush.c
index f0f819d..c1b68a7 100644
--- a/cpukit/score/src/coresemflush.c
+++ b/cpukit/score/src/coresemflush.c
@@ -20,7 +20,7 @@
 
 #include <rtems/system.h>
 #include <rtems/score/isr.h>
-#include <rtems/score/coresem.h>
+#include <rtems/score/coresemimpl.h>
 #include <rtems/score/states.h>
 #include <rtems/score/thread.h>
 #include <rtems/score/threadq.h>
diff --git a/cpukit/score/src/coresemseize.c b/cpukit/score/src/coresemseize.c
index 5ceaea7..7ad2317 100644
--- a/cpukit/score/src/coresemseize.c
+++ b/cpukit/score/src/coresemseize.c
@@ -21,7 +21,7 @@
 
 #include <rtems/system.h>
 #include <rtems/score/isr.h>
-#include <rtems/score/coresem.h>
+#include <rtems/score/coresemimpl.h>
 #include <rtems/score/states.h>
 #include <rtems/score/thread.h>
 #include <rtems/score/threadq.h>
diff --git a/cpukit/score/src/coresemsurrender.c b/cpukit/score/src/coresemsurrender.c
index 3d306f8..2a8d208 100644
--- a/cpukit/score/src/coresemsurrender.c
+++ b/cpukit/score/src/coresemsurrender.c
@@ -21,7 +21,7 @@
 
 #include <rtems/system.h>
 #include <rtems/score/isr.h>
-#include <rtems/score/coresem.h>
+#include <rtems/score/coresemimpl.h>
 #include <rtems/score/states.h>
 #include <rtems/score/thread.h>
 #include <rtems/score/threadq.h>
diff --git a/cpukit/score/src/mpci.c b/cpukit/score/src/mpci.c
index 97910d5..e4c43b7 100644
--- a/cpukit/score/src/mpci.c
+++ b/cpukit/score/src/mpci.c
@@ -33,7 +33,7 @@
 #include <rtems/score/watchdog.h>
 #include <rtems/score/sysstate.h>
 
-#include <rtems/score/coresem.h>
+#include <rtems/score/coresemimpl.h>
 #include <rtems/config.h>
 
 RTEMS_STATIC_ASSERT(
-- 
1.7.7




More information about the devel mailing list