[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