From a38d1fe41250de907e7d03edd3d7a113f37bba55 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 17 Feb 2016 15:25:10 +0100 Subject: score: Add Processor_mask, etc. --- cpukit/score/Makefile.am | 1 + cpukit/score/include/rtems/score/processormask.h | 90 ++++++++++++++++++++++++ cpukit/score/preinstall.am | 4 ++ 3 files changed, 95 insertions(+) create mode 100644 cpukit/score/include/rtems/score/processormask.h (limited to 'cpukit/score') 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 + * + * + * 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 + +#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 -- cgit v1.2.3