diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-07-17 13:52:00 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-07-18 09:58:56 +0200 |
commit | 2bbea657ae366f6b73dd6ca5db98af7ea3c29759 (patch) | |
tree | fcbee133028ad2e37bb6c15cdfc1b9f7eb25fdf4 /cpukit/rtems/include/rtems/rtems | |
parent | libtests/gxx01: Avoid random memory read/write (diff) | |
download | rtems-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.h | 81 | ||||
-rw-r--r-- | cpukit/rtems/include/rtems/rtems/semimpl.h | 158 | ||||
-rw-r--r-- | cpukit/rtems/include/rtems/rtems/semmp.h | 11 |
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 * |