From 562815cf0bae82467311becd5cf670ba35cd94b8 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 23 Jul 2013 13:00:31 +0200 Subject: 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. --- cpukit/rtems/include/rtems/rtems/dpmem.h | 34 +------- cpukit/rtems/include/rtems/rtems/dpmemimpl.h | 119 +++++++++++++++++++++++++++ 2 files changed, 122 insertions(+), 31 deletions(-) create mode 100644 cpukit/rtems/include/rtems/rtems/dpmemimpl.h (limited to 'cpukit/rtems/include/rtems/rtems') 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 +#include #ifdef __cplusplus extern "C" { #endif -#include -#include -#include - /** * @defgroup ClassicDPMEM Dual Ported Memory * @@ -76,19 +65,6 @@ typedef struct { uint32_t length; } 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. * @@ -193,15 +169,11 @@ rtems_status_code rtems_port_internal_to_external( void **external ); -#ifndef __RTEMS_APPLICATION__ -#include -#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 + +/** + * @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 */ -- cgit v1.2.3