summaryrefslogtreecommitdiffstats
path: root/cpukit/posix/include
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2013-07-18 13:50:25 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2013-07-22 16:56:57 +0200
commit9c743e8e72b602319bf5a4a35a2fea4d60e7dc2e (patch)
treed01b078a0a32dc95513f34102611ebd448f7acf3 /cpukit/posix/include
parentscore: Error for non-preemptible tasks on SMP (diff)
downloadrtems-9c743e8e72b602319bf5a4a35a2fea4d60e7dc2e.tar.bz2
posix: Create semaphore implementation header
Move implementation specific parts of semaphore.h and semaphore.inl into new header file semaphoreimpl.h. The semaphore.h contains now only the application visible API.
Diffstat (limited to 'cpukit/posix/include')
-rw-r--r--cpukit/posix/include/rtems/posix/semaphore.h134
-rw-r--r--cpukit/posix/include/rtems/posix/semaphoreimpl.h207
2 files changed, 216 insertions, 125 deletions
diff --git a/cpukit/posix/include/rtems/posix/semaphore.h b/cpukit/posix/include/rtems/posix/semaphore.h
index 92be580c0f..81fee49cce 100644
--- a/cpukit/posix/include/rtems/posix/semaphore.h
+++ b/cpukit/posix/include/rtems/posix/semaphore.h
@@ -19,6 +19,14 @@
#ifndef _RTEMS_POSIX_SEMAPHORE_H
#define _RTEMS_POSIX_SEMAPHORE_H
+#include <semaphore.h>
+#include <rtems/score/object.h>
+#include <rtems/score/coresem.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/**
* @defgroup POSIXSemaphorePrivate POSIX Semaphore Private Support
*
@@ -28,14 +36,6 @@
*/
/**@{*/
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <semaphore.h>
-#include <rtems/score/coresem.h>
-#include <rtems/posix/posixapi.h>
-
/*
* Data Structure used to manage a POSIX semaphore
*/
@@ -57,127 +57,11 @@ typedef struct {
#endif
} POSIX_Semaphore_Control;
-/*
- * The following defines the information control block used to manage
- * this class of objects.
- */
-
-POSIX_EXTERN Objects_Information _POSIX_Semaphore_Information;
-
-/*
- * _POSIX_Semaphore_Manager_initialization
- *
- * DESCRIPTION:
- *
- * This routine performs the initialization necessary for this manager.
- */
-
-void _POSIX_Semaphore_Manager_initialization(void);
-
-/*
- * _POSIX_Semaphore_Allocate
- *
- * DESCRIPTION:
- *
- * This function allocates a semaphore control block from
- * the inactive chain of free semaphore control blocks.
- */
-
-RTEMS_INLINE_ROUTINE POSIX_Semaphore_Control *_POSIX_Semaphore_Allocate( void );
-
-/*
- * _POSIX_Semaphore_Free
- *
- * DESCRIPTION:
- *
- * This routine frees a semaphore control block to the
- * inactive chain of free semaphore control blocks.
- */
-
-RTEMS_INLINE_ROUTINE void _POSIX_Semaphore_Free (
- POSIX_Semaphore_Control *the_semaphore
-);
-
-/*
- * _POSIX_Semaphore_Get
- *
- * DESCRIPTION:
- *
- * 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 POSIX_Semaphore_Control *_POSIX_Semaphore_Get (
- sem_t *id,
- Objects_Locations *location
-);
-
-/*
- * _POSIX_Semaphore_Create_support
- *
- * DESCRIPTION:
- *
- * This routine supports the sem_init and sem_open routines.
- */
-
-int _POSIX_Semaphore_Create_support(
- const char *name,
- size_t name_len,
- int pshared,
- unsigned int value,
- POSIX_Semaphore_Control **the_sem
-);
-
-/**
- * @brief POSIX delete a semaphore.
- *
- * DESCRIPTION:
- *
- * This routine supports the sem_close and sem_unlink routines.
- */
-void _POSIX_Semaphore_Delete(
- POSIX_Semaphore_Control *the_semaphore
-);
-
-/**
- * @brief POSIX semaphore wait support.
- *
- * DESCRIPTION:
- *
- * This routine supports the sem_wait, sem_trywait, and sem_timedwait
- * services.
- */
-int _POSIX_Semaphore_Wait_support(
- sem_t *sem,
- bool blocking,
- Watchdog_Interval timeout
-);
-
-/*
- * _POSIX_Semaphore_Translate_core_semaphore_return_code
- *
- * DESCRIPTION:
- *
- * A support routine which converts core semaphore status codes into the
- * appropriate POSIX status values.
- */
-
-int _POSIX_Semaphore_Translate_core_semaphore_return_code(
- CORE_semaphore_Status the_semaphore_status
-);
-
-#include <rtems/posix/semaphore.inl>
+/** @} */
#ifdef __cplusplus
}
#endif
-/** @} */
-
#endif
/* end of include file */
diff --git a/cpukit/posix/include/rtems/posix/semaphoreimpl.h b/cpukit/posix/include/rtems/posix/semaphoreimpl.h
new file mode 100644
index 0000000000..6d1939fe43
--- /dev/null
+++ b/cpukit/posix/include/rtems/posix/semaphoreimpl.h
@@ -0,0 +1,207 @@
+/**
+ * @file
+ *
+ * @brief Private Inlined Routines for POSIX Semaphores
+ *
+ * This include file contains the static inline implementation of the private
+ * inlined routines for POSIX Semaphores.
+ */
+
+/*
+ * COPYRIGHT (c) 1989-2011.
+ * 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_POSIX_SEMAPHOREIMPL_H
+#define _RTEMS_POSIX_SEMAPHOREIMPL_H
+
+#include <rtems/posix/semaphore.h>
+#include <rtems/posix/posixapi.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The following defines the information control block used to manage
+ * this class of objects.
+ */
+
+POSIX_EXTERN Objects_Information _POSIX_Semaphore_Information;
+
+/*
+ * _POSIX_Semaphore_Manager_initialization
+ *
+ * DESCRIPTION:
+ *
+ * This routine performs the initialization necessary for this manager.
+ */
+
+void _POSIX_Semaphore_Manager_initialization(void);
+
+/*
+ * _POSIX_Semaphore_Allocate
+ *
+ * DESCRIPTION:
+ *
+ * This function allocates a semaphore control block from
+ * the inactive chain of free semaphore control blocks.
+ */
+
+RTEMS_INLINE_ROUTINE POSIX_Semaphore_Control *_POSIX_Semaphore_Allocate( void );
+
+/*
+ * _POSIX_Semaphore_Free
+ *
+ * DESCRIPTION:
+ *
+ * This routine frees a semaphore control block to the
+ * inactive chain of free semaphore control blocks.
+ */
+
+RTEMS_INLINE_ROUTINE void _POSIX_Semaphore_Free (
+ POSIX_Semaphore_Control *the_semaphore
+);
+
+/*
+ * _POSIX_Semaphore_Get
+ *
+ * DESCRIPTION:
+ *
+ * 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 POSIX_Semaphore_Control *_POSIX_Semaphore_Get (
+ sem_t *id,
+ Objects_Locations *location
+);
+
+/*
+ * _POSIX_Semaphore_Create_support
+ *
+ * DESCRIPTION:
+ *
+ * This routine supports the sem_init and sem_open routines.
+ */
+
+int _POSIX_Semaphore_Create_support(
+ const char *name,
+ size_t name_len,
+ int pshared,
+ unsigned int value,
+ POSIX_Semaphore_Control **the_sem
+);
+
+/**
+ * @brief POSIX delete a semaphore.
+ *
+ * DESCRIPTION:
+ *
+ * This routine supports the sem_close and sem_unlink routines.
+ */
+void _POSIX_Semaphore_Delete(
+ POSIX_Semaphore_Control *the_semaphore
+);
+
+/**
+ * @brief POSIX semaphore wait support.
+ *
+ * DESCRIPTION:
+ *
+ * This routine supports the sem_wait, sem_trywait, and sem_timedwait
+ * services.
+ */
+int _POSIX_Semaphore_Wait_support(
+ sem_t *sem,
+ bool blocking,
+ Watchdog_Interval timeout
+);
+
+/*
+ * _POSIX_Semaphore_Translate_core_semaphore_return_code
+ *
+ * DESCRIPTION:
+ *
+ * A support routine which converts core semaphore status codes into the
+ * appropriate POSIX status values.
+ */
+
+int _POSIX_Semaphore_Translate_core_semaphore_return_code(
+ CORE_semaphore_Status the_semaphore_status
+);
+
+/*
+ * _POSIX_Semaphore_Allocate
+ */
+
+RTEMS_INLINE_ROUTINE POSIX_Semaphore_Control *_POSIX_Semaphore_Allocate( void )
+{
+ return (POSIX_Semaphore_Control *)
+ _Objects_Allocate( &_POSIX_Semaphore_Information );
+}
+
+/*
+ * _POSIX_Semaphore_Free
+ */
+
+RTEMS_INLINE_ROUTINE void _POSIX_Semaphore_Free (
+ POSIX_Semaphore_Control *the_semaphore
+)
+{
+ _Objects_Free( &_POSIX_Semaphore_Information, &the_semaphore->Object );
+}
+
+/*
+ * _POSIX_Semaphore_Namespace_remove
+ */
+
+RTEMS_INLINE_ROUTINE void _POSIX_Semaphore_Namespace_remove (
+ POSIX_Semaphore_Control *the_semaphore
+)
+{
+ _Objects_Namespace_remove(
+ &_POSIX_Semaphore_Information, &the_semaphore->Object );
+}
+
+
+
+/*
+ * _POSIX_Semaphore_Get
+ */
+RTEMS_INLINE_ROUTINE POSIX_Semaphore_Control *_POSIX_Semaphore_Get (
+ sem_t *id,
+ Objects_Locations *location
+)
+{
+ return (POSIX_Semaphore_Control *)
+ _Objects_Get( &_POSIX_Semaphore_Information, (Objects_Id)*id, location );
+}
+
+/**
+ * @see _POSIX_Name_to_id().
+ */
+RTEMS_INLINE_ROUTINE int _POSIX_Semaphore_Name_to_id(
+ const char *name,
+ Objects_Id *id,
+ size_t *len
+)
+{
+ return _POSIX_Name_to_id( &_POSIX_Semaphore_Information, name, id, len );
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+/* end of include file */