diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-07-23 13:00:31 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-07-23 15:12:54 +0200 |
commit | 562815cf0bae82467311becd5cf670ba35cd94b8 (patch) | |
tree | 674af72b4b378e5ffdfd7ba54a7eea679f4de968 /cpukit/rtems/include | |
parent | rtems: Create event implementation header (diff) | |
download | rtems-562815cf0bae82467311becd5cf670ba35cd94b8.tar.bz2 |
rtems: Create dpmem implementation header
Move implementation specific parts of dpmem.h and dpmem.inl into new
header file dpmemimpl.h. The dpmem.h contains now only the application
visible API.
Diffstat (limited to 'cpukit/rtems/include')
-rw-r--r-- | cpukit/rtems/include/rtems/rtems/dpmem.h | 34 | ||||
-rw-r--r-- | cpukit/rtems/include/rtems/rtems/dpmemimpl.h | 119 |
2 files changed, 122 insertions, 31 deletions
diff --git a/cpukit/rtems/include/rtems/rtems/dpmem.h b/cpukit/rtems/include/rtems/rtems/dpmem.h index aea8aea6a4..fd931c3f33 100644 --- a/cpukit/rtems/include/rtems/rtems/dpmem.h +++ b/cpukit/rtems/include/rtems/rtems/dpmem.h @@ -32,24 +32,13 @@ #ifndef _RTEMS_RTEMS_DPMEM_H #define _RTEMS_RTEMS_DPMEM_H -/** - * 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_DPMEM_EXTERN -#define RTEMS_DPMEM_EXTERN extern -#endif +#include <rtems/rtems/types.h> +#include <rtems/rtems/status.h> #ifdef __cplusplus extern "C" { #endif -#include <rtems/score/object.h> -#include <rtems/rtems/support.h> -#include <rtems/rtems/status.h> - /** * @defgroup ClassicDPMEM Dual Ported Memory * @@ -77,19 +66,6 @@ typedef struct { } Dual_ported_memory_Control; /** - * @brief Define the internal Dual Ported Memory information - * The following define the internal Dual Ported Memory information. - */ -RTEMS_DPMEM_EXTERN Objects_Information _Dual_ported_memory_Information; - -/** - * @brief Dual Ported Memory Manager Initialization - * - * This routine performs the initialization necessary for this manager. - */ -void _Dual_ported_memory_Manager_initialization(void); - -/** * @brief Creates a port into a dual-ported memory area. * * This routine implements the rtems_port_create directive. The port @@ -193,15 +169,11 @@ rtems_status_code rtems_port_internal_to_external( void **external ); -#ifndef __RTEMS_APPLICATION__ -#include <rtems/rtems/dpmem.inl> -#endif +/**@}*/ #ifdef __cplusplus } #endif -/**@}*/ - #endif /* end of include file */ diff --git a/cpukit/rtems/include/rtems/rtems/dpmemimpl.h b/cpukit/rtems/include/rtems/rtems/dpmemimpl.h new file mode 100644 index 0000000000..1fa636dc35 --- /dev/null +++ b/cpukit/rtems/include/rtems/rtems/dpmemimpl.h @@ -0,0 +1,119 @@ +/** + * @file + * + * @ingroup ClassicDPMEMImpl + * + * @brief Dual Ported Memory Manager 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_DPMEM_INL +#define _RTEMS_RTEMS_DPMEM_INL + +#include <rtems/rtems/dpmem.h> + +/** + * @defgroup ClassicDPMEMImpl Dual Ported Memory Manager Implementation + * + * @ingroup ClassicDPMEM + * + * @{ + */ + +/** + * 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_DPMEM_EXTERN +#define RTEMS_DPMEM_EXTERN extern +#endif + +/** + * @brief Define the internal Dual Ported Memory information + * The following define the internal Dual Ported Memory information. + */ +RTEMS_DPMEM_EXTERN Objects_Information _Dual_ported_memory_Information; + +/** + * @brief Dual Ported Memory Manager Initialization + * + * This routine performs the initialization necessary for this manager. + */ +void _Dual_ported_memory_Manager_initialization(void); + +/** + * @brief Allocates a port control block from the inactive chain + * of free port control blocks. + * + * This routine allocates a port control block from the inactive chain + * of free port control blocks. + */ +RTEMS_INLINE_ROUTINE Dual_ported_memory_Control + *_Dual_ported_memory_Allocate ( void ) +{ + return (Dual_ported_memory_Control *) + _Objects_Allocate( &_Dual_ported_memory_Information ); +} + +/** + * @brief Frees a port control block to the inactive chain + * of free port control blocks. + * + * This routine frees a port control block to the inactive chain + * of free port control blocks. + */ +RTEMS_INLINE_ROUTINE void _Dual_ported_memory_Free ( + Dual_ported_memory_Control *the_port +) +{ + _Objects_Free( &_Dual_ported_memory_Information, &the_port->Object ); +} + +/** + * @brief Maps port IDs to port control blocks. + * + * This function maps port IDs to port control blocks. If ID + * corresponds to a local port, then it returns the_port control + * pointer which maps to ID and location is set to OBJECTS_LOCAL. + * Global ports are not supported, thus if ID does not map to a + * local port, location is set to OBJECTS_ERROR and the_port is + * undefined. + */ +RTEMS_INLINE_ROUTINE Dual_ported_memory_Control *_Dual_ported_memory_Get ( + Objects_Id id, + Objects_Locations *location +) +{ + return (Dual_ported_memory_Control *) + _Objects_Get( &_Dual_ported_memory_Information, id, location ); +} + +/** + * @brief Checks if the_port is NULL. + * + * This function returns true if the_port is NULL and false otherwise. + */ +RTEMS_INLINE_ROUTINE bool _Dual_ported_memory_Is_null( + Dual_ported_memory_Control *the_port +) +{ + return ( the_port == NULL ); +} + +/**@}*/ + +#ifdef __cplusplus +} +#endif + +#endif +/* end of include file */ |