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/include/rtems/score/processormask.h | 90 ++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 cpukit/score/include/rtems/score/processormask.h (limited to 'cpukit/score/include/rtems/score/processormask.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 */ -- cgit v1.2.3