summaryrefslogtreecommitdiffstats
path: root/cpukit
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit')
-rw-r--r--cpukit/sapi/src/exinit.c2
-rw-r--r--cpukit/score/Makefile.am3
-rw-r--r--cpukit/score/include/rtems/score/bitfield.h110
-rw-r--r--cpukit/score/include/rtems/score/prioritybitmap.h71
-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.h1
-rw-r--r--cpukit/score/preinstall.am12
-rw-r--r--cpukit/score/src/schedulerpriorityupdate.c7
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(