diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-07-17 15:01:03 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-07-18 09:58:57 +0200 |
commit | 15462a6f1c7c838533dde2289c51f436975410ff (patch) | |
tree | b00cdef0a0a2344a8f051a9119312296da8a92a6 /cpukit/rtems/include/rtems/rtems/semimpl.h | |
parent | score: Create mutex implementation header (diff) | |
download | rtems-15462a6f1c7c838533dde2289c51f436975410ff.tar.bz2 |
rtems: Convert to inline functions
Diffstat (limited to 'cpukit/rtems/include/rtems/rtems/semimpl.h')
-rw-r--r-- | cpukit/rtems/include/rtems/rtems/semimpl.h | 53 |
1 files changed, 47 insertions, 6 deletions
diff --git a/cpukit/rtems/include/rtems/rtems/semimpl.h b/cpukit/rtems/include/rtems/rtems/semimpl.h index 5a433e2789..8bd762b4bd 100644 --- a/cpukit/rtems/include/rtems/rtems/semimpl.h +++ b/cpukit/rtems/include/rtems/rtems/semimpl.h @@ -18,6 +18,7 @@ #define _RTEMS_RTEMS_SEMIMPL_H #include <rtems/rtems/sem.h> +#include <rtems/score/coremuteximpl.h> #ifdef __cplusplus extern "C" { @@ -44,6 +45,12 @@ extern "C" { */ RTEMS_SEM_EXTERN Objects_Information _Semaphore_Information; +extern const rtems_status_code + _Semaphore_Translate_core_mutex_return_code_[]; + +extern const rtems_status_code + _Semaphore_Translate_core_semaphore_return_code_[]; + /** * @brief Semaphore Manager Initialization * @@ -61,9 +68,28 @@ void _Semaphore_Manager_initialization(void); * * @retval translated RTEMS status code */ -rtems_status_code _Semaphore_Translate_core_mutex_return_code ( - uint32_t the_mutex_status -); +RTEMS_INLINE_ROUTINE rtems_status_code +_Semaphore_Translate_core_mutex_return_code( + uint32_t status +) +{ + /* + * If this thread is blocking waiting for a result on a remote operation. + */ + #if defined(RTEMS_MULTIPROCESSING) + if ( _Thread_Is_proxy_blocking(status) ) + return RTEMS_PROXY_BLOCKING; + #endif + + /* + * Internal consistency check for bad status from SuperCore + */ + #if defined(RTEMS_DEBUG) + if ( status > CORE_MUTEX_STATUS_LAST ) + return RTEMS_INTERNAL_ERROR; + #endif + return _Semaphore_Translate_core_mutex_return_code_[status]; +} /** * @brief Semaphore Translate Core Semaphore Return Code @@ -75,9 +101,24 @@ rtems_status_code _Semaphore_Translate_core_mutex_return_code ( * * @retval translated RTEMS status code */ -rtems_status_code _Semaphore_Translate_core_semaphore_return_code ( - uint32_t the_mutex_status -); +RTEMS_INLINE_ROUTINE rtems_status_code +_Semaphore_Translate_core_semaphore_return_code( + uint32_t status +) +{ + #if defined(RTEMS_MULTIPROCESSING) + if ( _Thread_Is_proxy_blocking(status) ) + return RTEMS_PROXY_BLOCKING; + #endif + /* + * Internal consistency check for bad status from SuperCore + */ + #if defined(RTEMS_DEBUG) + if ( status > CORE_SEMAPHORE_STATUS_LAST ) + return RTEMS_INTERNAL_ERROR; + #endif + return _Semaphore_Translate_core_semaphore_return_code_[status]; +} /** * @brief Allocates a semaphore control block from |