diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-07-23 15:30:16 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-07-23 17:19:07 +0200 |
commit | f26f5fc12446e8e35bdcf0da30d271896a62a946 (patch) | |
tree | c2ef72f76b8a9234257226d87606263972298f8a | |
parent | rtems: Include missing header (diff) | |
download | rtems-f26f5fc12446e8e35bdcf0da30d271896a62a946.tar.bz2 |
score: Merge address API into one file
-rw-r--r-- | cpukit/score/Makefile.am | 1 | ||||
-rw-r--r-- | cpukit/score/include/rtems/score/address.h | 165 | ||||
-rw-r--r-- | cpukit/score/inline/rtems/score/address.inl | 192 | ||||
-rw-r--r-- | cpukit/score/preinstall.am | 4 |
4 files changed, 160 insertions, 202 deletions
diff --git a/cpukit/score/Makefile.am b/cpukit/score/Makefile.am index c2ea6bf3f0..eee4ce3331 100644 --- a/cpukit/score/Makefile.am +++ b/cpukit/score/Makefile.am @@ -92,7 +92,6 @@ include_rtems_score_HEADERS += include/rtems/score/schedulersimplesmp.h endif ## inline -include_rtems_score_HEADERS += inline/rtems/score/address.inl include_rtems_score_HEADERS += inline/rtems/score/heap.inl include_rtems_score_HEADERS += inline/rtems/score/object.inl include_rtems_score_HEADERS += inline/rtems/score/priority.inl diff --git a/cpukit/score/include/rtems/score/address.h b/cpukit/score/include/rtems/score/address.h index 85658b55b0..9b22b3c72a 100644 --- a/cpukit/score/include/rtems/score/address.h +++ b/cpukit/score/include/rtems/score/address.h @@ -19,6 +19,12 @@ #ifndef _RTEMS_SCORE_ADDRESS_H #define _RTEMS_SCORE_ADDRESS_H +#include <rtems/score/basedefs.h> + +#ifdef __cplusplus +extern "C" { +#endif + /** * @defgroup ScoreAddress Address Handler * @@ -29,17 +35,166 @@ */ /**@{*/ -#ifdef __cplusplus -extern "C" { -#endif +/** + * @brief Add offset to an address. + * + * This function is used to add an @a offset to a @a base address. + * It returns the resulting address. This address is typically + * converted to an access type before being used further. + * + * @param[in] base is the base address. + * @param[in] offset is the offset to add to @a base. + * + * @return This method returns the resulting address. + */ +RTEMS_INLINE_ROUTINE void *_Addresses_Add_offset ( + const void *base, + uintptr_t offset +) +{ + return (void *)((uintptr_t)base + offset); +} + +/** + * @brief Subtract offset from offset. + * + * This function is used to subtract an @a offset from a @a base + * address. It returns the resulting address. This address is + * typically converted to an access type before being used further. + * + * @param[in] base is the base address. + * @param[in] offset is the offset to subtract to @a base. + * + * @return This method returns the resulting address. + */ -#include <rtems/score/address.inl> +RTEMS_INLINE_ROUTINE void *_Addresses_Subtract_offset ( + const void *base, + uintptr_t offset +) +{ + return (void *)((uintptr_t)base - offset); +} -#ifdef __cplusplus +/** + * @brief Subtract two offsets. + * + * This function is used to subtract two addresses. It returns the + * resulting offset. + * + * @param[in] left is the address on the left hand side of the subtraction. + * @param[in] right is the address on the right hand side of the subtraction. + * + * @return This method returns the resulting address. + * + * @note The cast of an address to an uint32_t makes this code + * dependent on an addresses being thirty two bits. + */ +RTEMS_INLINE_ROUTINE int32_t _Addresses_Subtract ( + const void *left, + const void *right +) +{ + return (int32_t) ((const char *) left - (const char *) right); } + +/** + * @brief Is address aligned. + * + * This function returns true if the given address is correctly + * aligned for this processor and false otherwise. Proper alignment + * is based on correctness and efficiency. + * + * @param[in] address is the address being checked for alignment. + * + * @retval true The @a address is aligned. + * @retval false The @a address is not aligned. + */ +RTEMS_INLINE_ROUTINE bool _Addresses_Is_aligned ( + const void *address +) +{ +#if (CPU_ALIGNMENT == 0) + return true; +#else + return (((uintptr_t)address % CPU_ALIGNMENT) == 0); #endif +} + +/** + * @brief Is address in range. + * + * This function returns true if the given address is within the + * memory range specified and false otherwise. base is the address + * of the first byte in the memory range and limit is the address + * of the last byte in the memory range. The base address is + * assumed to be lower than the limit address. + * + * @param[in] address is the address to check. + * @param[in] base is the lowest address of the range to check against. + * @param[in] limit is the highest address of the range to check against. + * + * @retval true The @a address is within the memory range specified + * @retval false The @a address is not within the memory range specified. + */ +RTEMS_INLINE_ROUTINE bool _Addresses_Is_in_range ( + const void *address, + const void *base, + const void *limit +) +{ + return (address >= base && address <= limit); +} + +/** + * @brief Align address to nearest multiple of alignment, rounding up. + * + * This function returns the given address aligned to the given alignment. + * If the address already is aligned, or if alignment is 0, the address is + * returned as is. The returned address is greater than or equal to the + * given address. + * + * @param[in] address is the address to align. + * @param[in] alignment is the boundary for alignment and must be a power of 2 + * + * @return Returns the aligned address. + */ +RTEMS_INLINE_ROUTINE void *_Addresses_Align_up( + void *address, + size_t alignment +) +{ + uintptr_t mask = alignment - (uintptr_t)1; + return (void*)(((uintptr_t)address + mask) & ~mask); +} + +/** + * @brief Align address to nearest multiple of alignment, truncating. + * + * This function returns the given address aligned to the given alignment. + * If the address already is aligned, or if alignment is 0, the address is + * returned as is. The returned address is less than or equal to the + * given address. + * + * @param[in] address is the address to align. + * @param[in] alignment is the boundary for alignment and must be a power of 2. + * + * @return Returns the aligned address. + */ +RTEMS_INLINE_ROUTINE void *_Addresses_Align_down( + void *address, + size_t alignment +) +{ + uintptr_t mask = alignment - (uintptr_t)1; + return (void*)((uintptr_t)address & ~mask); +} /**@}*/ +#ifdef __cplusplus +} +#endif + #endif /* end of include file */ diff --git a/cpukit/score/inline/rtems/score/address.inl b/cpukit/score/inline/rtems/score/address.inl deleted file mode 100644 index 590a80f4a7..0000000000 --- a/cpukit/score/inline/rtems/score/address.inl +++ /dev/null @@ -1,192 +0,0 @@ -/** - * @file - * - * @brief Inlined Routines Associated with Addresses - * - * This include file contains the bodies of the routines - * about addresses which are inlined. - */ - -/* - * 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_SCORE_ADDRESS_H -# error "Never use <rtems/score/address.inl> directly; include <rtems/score/address.h> instead." -#endif - -#ifndef _RTEMS_SCORE_ADDRESS_INL -#define _RTEMS_SCORE_ADDRESS_INL - -#include <rtems/score/basedefs.h> - -/** - * @addtogroup ScoreAddress - */ -/**@{**/ - -/** - * @brief Add offset to an address. - * - * This function is used to add an @a offset to a @a base address. - * It returns the resulting address. This address is typically - * converted to an access type before being used further. - * - * @param[in] base is the base address. - * @param[in] offset is the offset to add to @a base. - * - * @return This method returns the resulting address. - */ -#include <rtems/bspIo.h> -RTEMS_INLINE_ROUTINE void *_Addresses_Add_offset ( - const void *base, - uintptr_t offset -) -{ - return (void *)((uintptr_t)base + offset); -} - -/** - * @brief Subtract offset from offset. - * - * This function is used to subtract an @a offset from a @a base - * address. It returns the resulting address. This address is - * typically converted to an access type before being used further. - * - * @param[in] base is the base address. - * @param[in] offset is the offset to subtract to @a base. - * - * @return This method returns the resulting address. - */ - -RTEMS_INLINE_ROUTINE void *_Addresses_Subtract_offset ( - const void *base, - uintptr_t offset -) -{ - return (void *)((uintptr_t)base - offset); -} - -/** - * @brief Subtract two offsets. - * - * This function is used to subtract two addresses. It returns the - * resulting offset. - * - * @param[in] left is the address on the left hand side of the subtraction. - * @param[in] right is the address on the right hand side of the subtraction. - * - * @return This method returns the resulting address. - * - * @note The cast of an address to an uint32_t makes this code - * dependent on an addresses being thirty two bits. - */ -RTEMS_INLINE_ROUTINE int32_t _Addresses_Subtract ( - const void *left, - const void *right -) -{ - return (int32_t) ((const char *) left - (const char *) right); -} - -/** - * @brief Is address aligned. - * - * This function returns true if the given address is correctly - * aligned for this processor and false otherwise. Proper alignment - * is based on correctness and efficiency. - * - * @param[in] address is the address being checked for alignment. - * - * @retval true The @a address is aligned. - * @retval false The @a address is not aligned. - */ -RTEMS_INLINE_ROUTINE bool _Addresses_Is_aligned ( - const void *address -) -{ -#if (CPU_ALIGNMENT == 0) - return true; -#else - return (((uintptr_t)address % CPU_ALIGNMENT) == 0); -#endif -} - -/** - * @brief Is address in range. - * - * This function returns true if the given address is within the - * memory range specified and false otherwise. base is the address - * of the first byte in the memory range and limit is the address - * of the last byte in the memory range. The base address is - * assumed to be lower than the limit address. - * - * @param[in] address is the address to check. - * @param[in] base is the lowest address of the range to check against. - * @param[in] limit is the highest address of the range to check against. - * - * @retval true The @a address is within the memory range specified - * @retval false The @a address is not within the memory range specified. - */ -RTEMS_INLINE_ROUTINE bool _Addresses_Is_in_range ( - const void *address, - const void *base, - const void *limit -) -{ - return (address >= base && address <= limit); -} - -/** - * @brief Align address to nearest multiple of alignment, rounding up. - * - * This function returns the given address aligned to the given alignment. - * If the address already is aligned, or if alignment is 0, the address is - * returned as is. The returned address is greater than or equal to the - * given address. - * - * @param[in] address is the address to align. - * @param[in] alignment is the boundary for alignment and must be a power of 2 - * - * @return Returns the aligned address. - */ -RTEMS_INLINE_ROUTINE void *_Addresses_Align_up( - void *address, - size_t alignment -) -{ - uintptr_t mask = alignment - (uintptr_t)1; - return (void*)(((uintptr_t)address + mask) & ~mask); -} - -/** - * @brief Align address to nearest multiple of alignment, truncating. - * - * This function returns the given address aligned to the given alignment. - * If the address already is aligned, or if alignment is 0, the address is - * returned as is. The returned address is less than or equal to the - * given address. - * - * @param[in] address is the address to align. - * @param[in] alignment is the boundary for alignment and must be a power of 2. - * - * @return Returns the aligned address. - */ -RTEMS_INLINE_ROUTINE void *_Addresses_Align_down( - void *address, - size_t alignment -) -{ - uintptr_t mask = alignment - (uintptr_t)1; - return (void*)((uintptr_t)address & ~mask); -} - -/** @} */ - -#endif -/* end of include file */ diff --git a/cpukit/score/preinstall.am b/cpukit/score/preinstall.am index edf4e3ef10..cb21cbd1db 100644 --- a/cpukit/score/preinstall.am +++ b/cpukit/score/preinstall.am @@ -299,10 +299,6 @@ $(PROJECT_INCLUDE)/rtems/score/schedulersimplesmp.h: include/rtems/score/schedul $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/schedulersimplesmp.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/schedulersimplesmp.h endif -$(PROJECT_INCLUDE)/rtems/score/address.inl: inline/rtems/score/address.inl $(PROJECT_INCLUDE)/rtems/score/$(dirstamp) - $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/address.inl -PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/address.inl - $(PROJECT_INCLUDE)/rtems/score/heap.inl: inline/rtems/score/heap.inl $(PROJECT_INCLUDE)/rtems/score/$(dirstamp) $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/heap.inl PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/heap.inl |