summaryrefslogtreecommitdiffstats
path: root/cpukit/score/include/rtems/score/processormask.h
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 /cpukit/score/include/rtems/score/processormask.h
parentscore: Add CPU_MAXIMUM_PROCESSORS (diff)
downloadrtems-a38d1fe41250de907e7d03edd3d7a113f37bba55.tar.bz2
score: Add Processor_mask, etc.
Diffstat (limited to 'cpukit/score/include/rtems/score/processormask.h')
-rw-r--r--cpukit/score/include/rtems/score/processormask.h90
1 files changed, 90 insertions, 0 deletions
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 */