summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-02-17 15:25:10 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-03-04 13:36:09 +0100
commita38d1fe41250de907e7d03edd3d7a113f37bba55 (patch)
treeab636a83476727550395053bb05e4ee677f610dc
parentscore: Add CPU_MAXIMUM_PROCESSORS (diff)
downloadrtems-a38d1fe41250de907e7d03edd3d7a113f37bba55.tar.bz2
score: Add Processor_mask, etc.
-rw-r--r--cpukit/score/Makefile.am1
-rw-r--r--cpukit/score/include/rtems/score/processormask.h90
-rw-r--r--cpukit/score/preinstall.am4
3 files changed, 95 insertions, 0 deletions
diff --git a/cpukit/score/Makefile.am b/cpukit/score/Makefile.am
index 8506f226c8..3d3f1c1532 100644
--- a/cpukit/score/Makefile.am
+++ b/cpukit/score/Makefile.am
@@ -61,6 +61,7 @@ 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/profiling.h
+include_rtems_score_HEADERS += include/rtems/score/processormask.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/resource.h
diff --git a/cpukit/score/include/rtems/score/processormask.h b/cpukit/score/include/rtems/score/processormask.h
new file mode 100644
index 0000000000..5a78dd33c6
--- /dev/null
+++ b/cpukit/score/include/rtems/score/processormask.h
@@ -0,0 +1,90 @@
+/**
+ * @file
+ *
+ * @brief Processor Mask API
+ *
+ * @ingroup ScoreProcessorMask
+ */
+
+/*
+ * Copyright (c) 2016 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Dornierstr. 4
+ * 82178 Puchheim
+ * Germany
+ * <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#ifndef _RTEMS_SCORE_PROCESSORMASK_H
+#define _RTEMS_SCORE_PROCESSORMASK_H
+
+#include <rtems/score/cpu.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup ScoreProcessorMask Processor Mask
+ *
+ * @ingroup Score
+ *
+ * The processor mask provides a bit map large enough to provide one bit for
+ * each processor in the system. It is a fixed size internal data type
+ * provided for efficiency in addition to the API level cpu_set_t.
+ *
+ * @{
+ */
+
+#define PROCESSOR_MASK_BITS_PER_FIELD 32
+
+#define PROCESSOR_MASK_FIELD_COUNT \
+ ( ( CPU_MAXIMUM_PROCESSORS + PROCESSOR_MASK_BITS_PER_FIELD - 1 ) \
+ / PROCESSOR_MASK_BITS_PER_FIELD )
+
+#define PROCESSOR_MASK_BIT( index ) \
+ (1UL << ( ( index ) % PROCESSOR_MASK_BITS_PER_FIELD ) )
+
+#define PROCESSOR_MASK_FIELD( index ) \
+ ( ( index ) / PROCESSOR_MASK_BITS_PER_FIELD )
+
+/**
+ * @brief A bit map consisting of 32-bit integer fields which is large enough
+ * to provide one bit for each processor in the system.
+ *
+ * Processor 0 corresponds to the bit 0 (least-significant) of the field 0 in
+ * the array, and so on.
+ */
+typedef uint32_t Processor_mask[ PROCESSOR_MASK_FIELD_COUNT ];
+
+RTEMS_INLINE_ROUTINE void _Processor_mask_Set( Processor_mask mask, uint32_t index )
+{
+ mask[ PROCESSOR_MASK_FIELD( index ) ] |= PROCESSOR_MASK_BIT( index );
+}
+
+RTEMS_INLINE_ROUTINE void _Processor_mask_Clear( Processor_mask mask, uint32_t index )
+{
+ mask[ PROCESSOR_MASK_FIELD( index ) ] &= ~PROCESSOR_MASK_BIT( index );
+}
+
+RTEMS_INLINE_ROUTINE bool _Processor_mask_Is_set(
+ const Processor_mask mask,
+ uint32_t index
+)
+{
+ return ( mask[ PROCESSOR_MASK_FIELD( index ) ]
+ & PROCESSOR_MASK_BIT( index ) ) != 0;
+}
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _RTEMS_SCORE_PROCESSORMASK_H */
diff --git a/cpukit/score/preinstall.am b/cpukit/score/preinstall.am
index 0d9cadee72..3a70bfa54b 100644
--- a/cpukit/score/preinstall.am
+++ b/cpukit/score/preinstall.am
@@ -212,6 +212,10 @@ $(PROJECT_INCLUDE)/rtems/score/profiling.h: include/rtems/score/profiling.h $(PR
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/profiling.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/profiling.h
+$(PROJECT_INCLUDE)/rtems/score/processormask.h: include/rtems/score/processormask.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
+ $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/processormask.h
+PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/processormask.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