diff options
Diffstat (limited to 'cpukit')
-rw-r--r-- | cpukit/sapi/src/exinit.c | 2 | ||||
-rw-r--r-- | cpukit/score/Makefile.am | 3 | ||||
-rw-r--r-- | cpukit/score/include/rtems/score/bitfield.h | 110 | ||||
-rw-r--r-- | cpukit/score/include/rtems/score/prioritybitmap.h | 71 | ||||
-rw-r--r-- | cpukit/score/include/rtems/score/prioritybitmapimpl.h (renamed from cpukit/score/inline/rtems/score/prioritybitmap.inl) | 133 | ||||
-rw-r--r-- | cpukit/score/include/rtems/score/schedulerpriorityimpl.h | 1 | ||||
-rw-r--r-- | cpukit/score/preinstall.am | 12 | ||||
-rw-r--r-- | cpukit/score/src/schedulerpriorityupdate.c | 7 |
8 files changed, 139 insertions, 200 deletions
diff --git a/cpukit/sapi/src/exinit.c b/cpukit/sapi/src/exinit.c index a7b16611d7..91eac2aafe 100644 --- a/cpukit/sapi/src/exinit.c +++ b/cpukit/sapi/src/exinit.c @@ -48,7 +48,7 @@ #include <rtems/score/mpci.h> #endif #include <rtems/score/priority.h> -#include <rtems/score/prioritybitmap.h> +#include <rtems/score/prioritybitmapimpl.h> #include <rtems/score/schedulerimpl.h> #include <rtems/score/thread.h> #include <rtems/score/tod.h> diff --git a/cpukit/score/Makefile.am b/cpukit/score/Makefile.am index 09a11eb02b..617b99c79e 100644 --- a/cpukit/score/Makefile.am +++ b/cpukit/score/Makefile.am @@ -17,7 +17,6 @@ include_rtems_scoredir = $(includedir)/rtems/score include_rtems_score_HEADERS = include/rtems/score/address.h include_rtems_score_HEADERS += include/rtems/score/apiext.h include_rtems_score_HEADERS += include/rtems/score/apimutex.h -include_rtems_score_HEADERS += include/rtems/score/bitfield.h include_rtems_score_HEADERS += include/rtems/score/chain.h include_rtems_score_HEADERS += include/rtems/score/chainimpl.h include_rtems_score_HEADERS += include/rtems/score/context.h @@ -41,6 +40,7 @@ include_rtems_score_HEADERS += include/rtems/score/object.h include_rtems_score_HEADERS += include/rtems/score/percpu.h include_rtems_score_HEADERS += include/rtems/score/priority.h include_rtems_score_HEADERS += include/rtems/score/prioritybitmap.h +include_rtems_score_HEADERS += include/rtems/score/prioritybitmapimpl.h include_rtems_score_HEADERS += include/rtems/score/rbtree.h include_rtems_score_HEADERS += include/rtems/score/rbtreeimpl.h include_rtems_score_HEADERS += include/rtems/score/scheduler.h @@ -99,7 +99,6 @@ endif ## inline include_rtems_score_HEADERS += inline/rtems/score/object.inl -include_rtems_score_HEADERS += inline/rtems/score/prioritybitmap.inl include_rtems_score_HEADERS += inline/rtems/score/states.inl include_rtems_score_HEADERS += inline/rtems/score/thread.inl include_rtems_score_HEADERS += inline/rtems/score/threadq.inl diff --git a/cpukit/score/include/rtems/score/bitfield.h b/cpukit/score/include/rtems/score/bitfield.h deleted file mode 100644 index caa289adf0..0000000000 --- a/cpukit/score/include/rtems/score/bitfield.h +++ /dev/null @@ -1,110 +0,0 @@ -/** - * @file rtems/score/bitfield.h - * - * @brief Bit Field Manipulation Routines - * - * This include file contains all bit field manipulation routines. - */ - -/* - * COPYRIGHT (c) 1989-2006. - * 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_BITFIELD_H -#define _RTEMS_SCORE_BITFIELD_H - -/** - * @defgroup ScoreBitfield Bitfield Handler - * - * @ingroup Score - * - * This handler encapsulates functionality that is used to manipulate the - * priority bitfields used to lookup which priority has the highest - * priority ready to execute thread. - */ -/**@{*/ - -#ifdef __cplusplus -extern "C" { -#endif - -#if ( CPU_USE_GENERIC_BITFIELD_DATA == TRUE ) - -/** - * This table is used by the generic bitfield routines to perform - * a highly optimized bit scan without the use of special CPU - * instructions. - */ -#ifndef SCORE_INIT -extern const unsigned char __log2table[256]; -#else -const unsigned char __log2table[256] = { - 7, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; -#endif - -#endif - -/** - * @brief Gets the @a _bit_number of the first bit set in the specified value. - * - * This routine returns the @a _bit_number of the first bit set - * in the specified value. The correspondence between @a _bit_number - * and actual bit position is processor dependent. The search for - * the first bit set may run from most to least significant bit - * or vice-versa. - * - * @param[in] _value is the value to bit scan. - * @param[in] _bit_number is the position of the first bit set. - * - * @note This routine is used when the executing thread is removed - * from the ready state and, as a result, its performance has a - * significant impact on the performance of the executive as a whole. - * - * @note This routine must be a macro because if a CPU specific version - * is used it will most likely use inline assembly. - */ -#if ( CPU_USE_GENERIC_BITFIELD_CODE == FALSE ) -#define _Bitfield_Find_first_bit( _value, _bit_number ) \ - _CPU_Bitfield_Find_first_bit( _value, _bit_number ) -#else -#define _Bitfield_Find_first_bit( _value, _bit_number ) \ - { \ - register uint32_t __value = (uint32_t) (_value); \ - register const unsigned char *__p = __log2table; \ - \ - if ( __value < 0x100 ) \ - (_bit_number) = (Priority_bit_map_Control)( __p[ __value ] + 8 ); \ - else \ - (_bit_number) = (Priority_bit_map_Control)( __p[ __value >> 8 ] ); \ - } -#endif - -#ifdef __cplusplus -} -#endif - -/**@}*/ - -#endif -/* end of include file */ diff --git a/cpukit/score/include/rtems/score/prioritybitmap.h b/cpukit/score/include/rtems/score/prioritybitmap.h index 8e8f21ce34..cbc7151f30 100644 --- a/cpukit/score/include/rtems/score/prioritybitmap.h +++ b/cpukit/score/include/rtems/score/prioritybitmap.h @@ -19,45 +19,18 @@ #ifndef _RTEMS_SCORE_PRIORITYBITMAP_H #define _RTEMS_SCORE_PRIORITYBITMAP_H -/** - * @defgroup ScorePriorityBitmap Bitmap Priority Thread Routines - * - * @ingroup Score - */ -/**@{*/ - -/* - * Processor specific information. - */ #include <rtems/score/cpu.h> - #ifdef __cplusplus extern "C" { #endif -#include <rtems/score/priority.h> - - -/* - * The Priority_bit_map_Control variables are instantiated only - * if using the bit map handler. - */ - /** - * Each sixteen bit entry in this array is associated with one of - * the sixteen entries in the Priority Bit map. - */ -extern volatile Priority_bit_map_Control _Priority_Major_bit_map; - -/** Each bit in the Priority Bitmap indicates whether or not there are - * threads ready at a particular priority. The mapping of - * individual priority levels to particular bits is processor - * dependent as is the value of each bit used to indicate that - * threads are ready at that priority. + * @defgroup ScorePriorityBitmap Bitmap Priority Thread Routines + * + * @ingroup Score */ -extern Priority_bit_map_Control - _Priority_Bit_map[16] CPU_STRUCTURE_ALIGNMENT; +/**@{*/ /* * The definition of the Priority_bit_map_Control type is CPU dependent. @@ -81,45 +54,11 @@ typedef struct { Priority_bit_map_Control block_minor; } Priority_bit_map_Information; - -#if ( CPU_USE_GENERIC_BITFIELD_CODE == FALSE ) -/** - * This method returns the priority bit mask for the specified major - * or minor bit number. - * - * @param[in] _bit_number is the bit number for which we need a mask - * - * @retval the priority bit mask - * - * @note This may simply be a pass through to a CPU dependent implementation. - */ -#define _Priority_Mask( _bit_number ) \ - _CPU_Priority_Mask( _bit_number ) -#endif - -#if ( CPU_USE_GENERIC_BITFIELD_CODE == FALSE ) -/** - * This method returns the bit index position for the specified priority. - * - * @param[in] _priority is the priority for which we need the index. - * - * @retval This method returns the array index into the priority bit map. - * - * @note This may simply be a pass through to a CPU dependent implementation. - */ -#define _Priority_Bits_index( _priority ) \ - _CPU_Priority_bits_index( _priority ) -#endif - -#ifndef __RTEMS_APPLICATION__ -#include <rtems/score/prioritybitmap.inl> -#endif +/**@}*/ #ifdef __cplusplus } #endif -/**@}*/ - #endif /* end of include file */ diff --git a/cpukit/score/inline/rtems/score/prioritybitmap.inl b/cpukit/score/include/rtems/score/prioritybitmapimpl.h index 19196ceea2..e2db0341d1 100644 --- a/cpukit/score/inline/rtems/score/prioritybitmap.inl +++ b/cpukit/score/include/rtems/score/prioritybitmapimpl.h @@ -16,19 +16,135 @@ * http://www.rtems.com/license/LICENSE. */ -#ifndef _RTEMS_SCORE_PRIORITYBITMAP_H -# error "Never use <rtems/score/prioritybitmap.inl> directly; include <rtems/score/prioritybitmap.h> instead." -#endif +#ifndef _RTEMS_SCORE_PRIORITYBITMAPIMPL_H +#define _RTEMS_SCORE_PRIORITYBITMAPIMPL_H + +#include <rtems/score/prioritybitmap.h> -#ifndef _RTEMS_SCORE_PRIORITYBITMAP_INL -#define _RTEMS_SCORE_PRIORITYBITMAP_INL +#ifdef __cplusplus +extern "C" { +#endif /** * @addtogroup ScorePriority */ /**@{**/ -#include <rtems/score/bitfield.h> +/* + * The Priority_bit_map_Control variables are instantiated only + * if using the bit map handler. + */ + +/** + * Each sixteen bit entry in this array is associated with one of + * the sixteen entries in the Priority Bit map. + */ +extern volatile Priority_bit_map_Control _Priority_Major_bit_map; + +/** Each bit in the Priority Bitmap indicates whether or not there are + * threads ready at a particular priority. The mapping of + * individual priority levels to particular bits is processor + * dependent as is the value of each bit used to indicate that + * threads are ready at that priority. + */ +extern Priority_bit_map_Control + _Priority_Bit_map[16] CPU_STRUCTURE_ALIGNMENT; + +#if ( CPU_USE_GENERIC_BITFIELD_DATA == TRUE ) + +/** + * This table is used by the generic bitfield routines to perform + * a highly optimized bit scan without the use of special CPU + * instructions. + */ +#ifndef SCORE_INIT +extern const unsigned char __log2table[256]; +#else +const unsigned char __log2table[256] = { + 7, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; +#endif + +#endif + +/** + * @brief Gets the @a _bit_number of the first bit set in the specified value. + * + * This routine returns the @a _bit_number of the first bit set + * in the specified value. The correspondence between @a _bit_number + * and actual bit position is processor dependent. The search for + * the first bit set may run from most to least significant bit + * or vice-versa. + * + * @param[in] _value is the value to bit scan. + * @param[in] _bit_number is the position of the first bit set. + * + * @note This routine is used when the executing thread is removed + * from the ready state and, as a result, its performance has a + * significant impact on the performance of the executive as a whole. + * + * @note This routine must be a macro because if a CPU specific version + * is used it will most likely use inline assembly. + */ +#if ( CPU_USE_GENERIC_BITFIELD_CODE == FALSE ) +#define _Bitfield_Find_first_bit( _value, _bit_number ) \ + _CPU_Bitfield_Find_first_bit( _value, _bit_number ) +#else +#define _Bitfield_Find_first_bit( _value, _bit_number ) \ + { \ + register uint32_t __value = (uint32_t) (_value); \ + register const unsigned char *__p = __log2table; \ + \ + if ( __value < 0x100 ) \ + (_bit_number) = (Priority_bit_map_Control)( __p[ __value ] + 8 ); \ + else \ + (_bit_number) = (Priority_bit_map_Control)( __p[ __value >> 8 ] ); \ + } +#endif + +#if ( CPU_USE_GENERIC_BITFIELD_CODE == FALSE ) +/** + * This method returns the priority bit mask for the specified major + * or minor bit number. + * + * @param[in] _bit_number is the bit number for which we need a mask + * + * @retval the priority bit mask + * + * @note This may simply be a pass through to a CPU dependent implementation. + */ +#define _Priority_Mask( _bit_number ) \ + _CPU_Priority_Mask( _bit_number ) +#endif + +#if ( CPU_USE_GENERIC_BITFIELD_CODE == FALSE ) +/** + * This method returns the bit index position for the specified priority. + * + * @param[in] _priority is the priority for which we need the index. + * + * @retval This method returns the array index into the priority bit map. + * + * @note This may simply be a pass through to a CPU dependent implementation. + */ +#define _Priority_Bits_index( _priority ) \ + _CPU_Priority_bits_index( _priority ) +#endif /** * This function returns the major portion of the_priority. @@ -77,7 +193,6 @@ RTEMS_INLINE_ROUTINE Priority_bit_map_Control _Priority_Mask_invert ( return (Priority_bit_map_Control)(~mask); } - /** * This function translates the bit numbers returned by the bit scan * of a priority bit field into something suitable for use as @@ -194,5 +309,9 @@ RTEMS_INLINE_ROUTINE void _Priority_bit_map_Initialize_information( /** @} */ +#ifdef __cplusplus +} +#endif + #endif /* end of include file */ diff --git a/cpukit/score/include/rtems/score/schedulerpriorityimpl.h b/cpukit/score/include/rtems/score/schedulerpriorityimpl.h index 03568ed141..6215015102 100644 --- a/cpukit/score/include/rtems/score/schedulerpriorityimpl.h +++ b/cpukit/score/include/rtems/score/schedulerpriorityimpl.h @@ -22,6 +22,7 @@ #include <rtems/score/schedulerpriority.h> #include <rtems/score/chainimpl.h> +#include <rtems/score/prioritybitmapimpl.h> #include <rtems/score/wkspace.h> #ifdef __cplusplus diff --git a/cpukit/score/preinstall.am b/cpukit/score/preinstall.am index 9c28a2d7c4..c8625fba43 100644 --- a/cpukit/score/preinstall.am +++ b/cpukit/score/preinstall.am @@ -51,10 +51,6 @@ $(PROJECT_INCLUDE)/rtems/score/apimutex.h: include/rtems/score/apimutex.h $(PROJ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/apimutex.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/apimutex.h -$(PROJECT_INCLUDE)/rtems/score/bitfield.h: include/rtems/score/bitfield.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp) - $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/bitfield.h -PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/bitfield.h - $(PROJECT_INCLUDE)/rtems/score/chain.h: include/rtems/score/chain.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp) $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/chain.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/chain.h @@ -147,6 +143,10 @@ $(PROJECT_INCLUDE)/rtems/score/prioritybitmap.h: include/rtems/score/prioritybit $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/prioritybitmap.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/prioritybitmap.h +$(PROJECT_INCLUDE)/rtems/score/prioritybitmapimpl.h: include/rtems/score/prioritybitmapimpl.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp) + $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/prioritybitmapimpl.h +PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/prioritybitmapimpl.h + $(PROJECT_INCLUDE)/rtems/score/rbtree.h: include/rtems/score/rbtree.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp) $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/rbtree.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/rbtree.h @@ -327,10 +327,6 @@ $(PROJECT_INCLUDE)/rtems/score/object.inl: inline/rtems/score/object.inl $(PROJE $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/object.inl PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/object.inl -$(PROJECT_INCLUDE)/rtems/score/prioritybitmap.inl: inline/rtems/score/prioritybitmap.inl $(PROJECT_INCLUDE)/rtems/score/$(dirstamp) - $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/prioritybitmap.inl -PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/prioritybitmap.inl - $(PROJECT_INCLUDE)/rtems/score/states.inl: inline/rtems/score/states.inl $(PROJECT_INCLUDE)/rtems/score/$(dirstamp) $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/states.inl PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/states.inl diff --git a/cpukit/score/src/schedulerpriorityupdate.c b/cpukit/score/src/schedulerpriorityupdate.c index c269414af7..aa54d31ccd 100644 --- a/cpukit/score/src/schedulerpriorityupdate.c +++ b/cpukit/score/src/schedulerpriorityupdate.c @@ -18,12 +18,7 @@ #include "config.h" #endif -#include <rtems/system.h> -#include <rtems/config.h> -#include <rtems/score/priority.h> -#include <rtems/score/prioritybitmap.h> -#include <rtems/score/scheduler.h> -#include <rtems/score/schedulerpriority.h> +#include <rtems/score/schedulerpriorityimpl.h> #include <rtems/score/thread.h> void _Scheduler_priority_Update( |