summaryrefslogtreecommitdiffstats
path: root/cpukit/rtems/include/rtems/rtems
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2013-07-17 13:52:00 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2013-07-18 09:58:56 +0200
commit2bbea657ae366f6b73dd6ca5db98af7ea3c29759 (patch)
treefcbee133028ad2e37bb6c15cdfc1b9f7eb25fdf4 /cpukit/rtems/include/rtems/rtems
parentlibtests/gxx01: Avoid random memory read/write (diff)
downloadrtems-2bbea657ae366f6b73dd6ca5db98af7ea3c29759.tar.bz2
rtems: Create semaphore implementation header
Move implementation specific parts of sem.h and sem.inl into new header file semimpl.h. The sem.h contains now only the application visible API.
Diffstat (limited to 'cpukit/rtems/include/rtems/rtems')
-rw-r--r--cpukit/rtems/include/rtems/rtems/sem.h81
-rw-r--r--cpukit/rtems/include/rtems/rtems/semimpl.h158
-rw-r--r--cpukit/rtems/include/rtems/rtems/semmp.h11
3 files changed, 170 insertions, 80 deletions
diff --git a/cpukit/rtems/include/rtems/rtems/sem.h b/cpukit/rtems/include/rtems/rtems/sem.h
index 046c0f2de8..fbe5590cfd 100644
--- a/cpukit/rtems/include/rtems/rtems/sem.h
+++ b/cpukit/rtems/include/rtems/rtems/sem.h
@@ -1,11 +1,9 @@
/**
- * @file rtems/rtems/sem.h
+ * @file
*
- * @brief Semaphore Manager
+ * @ingroup ClassicSem
*
- * @defgroup ClassicSem Semaphores
- *
- * @ingroup ClassicRTEMS
+ * @brief Classic Semaphores API
*
* This include file contains all the constants and structures associated
* with the Semaphore Manager. This manager utilizes standard Dijkstra
@@ -32,25 +30,6 @@
#ifndef _RTEMS_RTEMS_SEM_H
#define _RTEMS_RTEMS_SEM_H
-/**
- * @brief Instantiate Semaphore Data
- *
- * Semaphore Manager -- Data Instantiation
- *
- * This constant is defined to extern most of the time when using
- * this header file. However by defining it to nothing, the data
- * declared in this header file can be instantiated. This is done
- * in a single per manager file.
- *
- */
-#ifndef RTEMS_SEM_EXTERN
-#define RTEMS_SEM_EXTERN extern
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
#include <rtems/rtems/types.h>
#include <rtems/rtems/options.h>
#include <rtems/rtems/support.h>
@@ -60,6 +39,10 @@ extern "C" {
#include <rtems/score/object.h>
#include <rtems/score/coresem.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/**
* @defgroup ClassicSem Semaphores
*
@@ -109,19 +92,6 @@ typedef struct {
} Semaphore_Control;
/**
- * The following defines the information control block used to manage
- * this class of objects.
- */
-RTEMS_SEM_EXTERN Objects_Information _Semaphore_Information;
-
-/**
- * @brief Semaphore Manager Initialization
- *
- * This routine performs the initialization necessary for this manager.
- */
-void _Semaphore_Manager_initialization(void);
-
-/**
* @brief rtems_semaphore_create
*
* This routine implements the rtems_semaphore_create directive. The
@@ -238,46 +208,11 @@ rtems_status_code rtems_semaphore_flush(
rtems_id id
);
-/**
- * @brief Semaphore Translate Core Mutex Return Code
- *
- * This function returns a RTEMS status code based on the mutex
- * status code specified.
- *
- * @param[in] the_mutex_status is the mutex status code to translate
- *
- * @retval translated RTEMS status code
- */
-rtems_status_code _Semaphore_Translate_core_mutex_return_code (
- uint32_t the_mutex_status
-);
-
-/**
- * @brief Semaphore Translate Core Semaphore Return Code
- *
- * This function returns a RTEMS status code based on the semaphore
- * status code specified.
- *
- * @param[in] the_mutex_status is the semaphore status code to translate
- *
- * @retval translated RTEMS status code
- */
-rtems_status_code _Semaphore_Translate_core_semaphore_return_code (
- uint32_t the_mutex_status
-);
-
-#ifndef __RTEMS_APPLICATION__
-#include <rtems/rtems/sem.inl>
-#endif
-#if defined(RTEMS_MULTIPROCESSING)
-#include <rtems/rtems/semmp.h>
-#endif
+/**@}*/
#ifdef __cplusplus
}
#endif
-/**@}*/
-
#endif
/* end of include file */
diff --git a/cpukit/rtems/include/rtems/rtems/semimpl.h b/cpukit/rtems/include/rtems/rtems/semimpl.h
new file mode 100644
index 0000000000..5a433e2789
--- /dev/null
+++ b/cpukit/rtems/include/rtems/rtems/semimpl.h
@@ -0,0 +1,158 @@
+/**
+ * @file
+ *
+ * @ingroup ClassicSem
+ *
+ * @brief Classic Semaphores Implementation
+ */
+
+/* COPYRIGHT (c) 1989-2008.
+ * 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_RTEMS_SEMIMPL_H
+#define _RTEMS_RTEMS_SEMIMPL_H
+
+#include <rtems/rtems/sem.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @brief Instantiate Semaphore Data
+ *
+ * Semaphore Manager -- Data Instantiation
+ *
+ * This constant is defined to extern most of the time when using
+ * this header file. However by defining it to nothing, the data
+ * declared in this header file can be instantiated. This is done
+ * in a single per manager file.
+ *
+ */
+#ifndef RTEMS_SEM_EXTERN
+#define RTEMS_SEM_EXTERN extern
+#endif
+
+/**
+ * The following defines the information control block used to manage
+ * this class of objects.
+ */
+RTEMS_SEM_EXTERN Objects_Information _Semaphore_Information;
+
+/**
+ * @brief Semaphore Manager Initialization
+ *
+ * This routine performs the initialization necessary for this manager.
+ */
+void _Semaphore_Manager_initialization(void);
+
+/**
+ * @brief Semaphore Translate Core Mutex Return Code
+ *
+ * This function returns a RTEMS status code based on the mutex
+ * status code specified.
+ *
+ * @param[in] the_mutex_status is the mutex status code to translate
+ *
+ * @retval translated RTEMS status code
+ */
+rtems_status_code _Semaphore_Translate_core_mutex_return_code (
+ uint32_t the_mutex_status
+);
+
+/**
+ * @brief Semaphore Translate Core Semaphore Return Code
+ *
+ * This function returns a RTEMS status code based on the semaphore
+ * status code specified.
+ *
+ * @param[in] the_mutex_status is the semaphore status code to translate
+ *
+ * @retval translated RTEMS status code
+ */
+rtems_status_code _Semaphore_Translate_core_semaphore_return_code (
+ uint32_t the_mutex_status
+);
+
+/**
+ * @brief Allocates a semaphore control block from
+ * the inactive chain of free semaphore control blocks.
+ *
+ * This function allocates a semaphore control block from
+ * the inactive chain of free semaphore control blocks.
+ */
+RTEMS_INLINE_ROUTINE Semaphore_Control *_Semaphore_Allocate( void )
+{
+ return (Semaphore_Control *) _Objects_Allocate( &_Semaphore_Information );
+}
+
+/**
+ * @brief Frees a semaphore control block to the
+ * inactive chain of free semaphore control blocks.
+ *
+ * This routine frees a semaphore control block to the
+ * inactive chain of free semaphore control blocks.
+ */
+RTEMS_INLINE_ROUTINE void _Semaphore_Free (
+ Semaphore_Control *the_semaphore
+)
+{
+ _Objects_Free( &_Semaphore_Information, &the_semaphore->Object );
+}
+
+/**
+ * @brief Maps semaphore IDs to semaphore control blocks.
+ *
+ * This function maps semaphore IDs to semaphore control blocks.
+ * If ID corresponds to a local semaphore, then it returns
+ * the_semaphore control pointer which maps to ID and location
+ * is set to OBJECTS_LOCAL. if the semaphore ID is global and
+ * resides on a remote node, then location is set to OBJECTS_REMOTE,
+ * and the_semaphore is undefined. Otherwise, location is set
+ * to OBJECTS_ERROR and the_semaphore is undefined.
+ */
+RTEMS_INLINE_ROUTINE Semaphore_Control *_Semaphore_Get (
+ Objects_Id id,
+ Objects_Locations *location
+)
+{
+ return (Semaphore_Control *)
+ _Objects_Get( &_Semaphore_Information, id, location );
+}
+
+/**
+ * @brief Maps semaphore IDs to semaphore control blocks.
+ *
+ * This function maps semaphore IDs to semaphore control blocks.
+ * If ID corresponds to a local semaphore, then it returns
+ * the_semaphore control pointer which maps to ID and location
+ * is set to OBJECTS_LOCAL. if the semaphore ID is global and
+ * resides on a remote node, then location is set to OBJECTS_REMOTE,
+ * and the_semaphore is undefined. Otherwise, location is set
+ * to OBJECTS_ERROR and the_semaphore is undefined.
+ */
+RTEMS_INLINE_ROUTINE Semaphore_Control *_Semaphore_Get_interrupt_disable (
+ Objects_Id id,
+ Objects_Locations *location,
+ ISR_Level *level
+)
+{
+ return (Semaphore_Control *)
+ _Objects_Get_isr_disable( &_Semaphore_Information, id, location, level );
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifdef RTEMS_MULTIPROCESSING
+#include <rtems/rtems/semmp.h>
+#endif
+
+#endif
+/* end of include file */
diff --git a/cpukit/rtems/include/rtems/rtems/semmp.h b/cpukit/rtems/include/rtems/rtems/semmp.h
index d52176de7d..a3fd2d9b2e 100644
--- a/cpukit/rtems/include/rtems/rtems/semmp.h
+++ b/cpukit/rtems/include/rtems/rtems/semmp.h
@@ -21,17 +21,14 @@
#ifndef _RTEMS_RTEMS_SEMMP_H
#define _RTEMS_RTEMS_SEMMP_H
+#ifndef _RTEMS_RTEMS_SEMIMPL_H
+# error "Never use <rtems/rtems/semmp.h> directly; include <rtems/rtems/semimpl.h> instead."
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
-#include <rtems/score/mppkt.h>
-#include <rtems/score/object.h>
-#include <rtems/rtems/options.h>
-#include <rtems/rtems/sem.h>
-#include <rtems/score/thread.h>
-#include <rtems/score/watchdog.h>
-
/**
* @defgroup ClassicSEM Semaphore MP Support
*