[20f02c6] | 1 | /** |
---|
[1dbbc0c] | 2 | * @file rtems/score/corebarrier.h |
---|
| 3 | * |
---|
| 4 | * @brief Constants and Structures Associated with the Barrier Handler |
---|
[9c191ee] | 5 | * |
---|
| 6 | * This include file contains all the constants and structures associated |
---|
| 7 | * with the Barrier Handler. |
---|
| 8 | */ |
---|
| 9 | |
---|
| 10 | /* |
---|
[860c34e] | 11 | * COPYRIGHT (c) 1989-2007. |
---|
[9c191ee] | 12 | * On-Line Applications Research Corporation (OAR). |
---|
| 13 | * |
---|
| 14 | * The license and distribution terms for this file may be |
---|
| 15 | * found in the file LICENSE in this distribution or at |
---|
[c499856] | 16 | * http://www.rtems.org/license/LICENSE. |
---|
[9c191ee] | 17 | */ |
---|
| 18 | |
---|
| 19 | #ifndef _RTEMS_SCORE_COREBARRIER_H |
---|
| 20 | #define _RTEMS_SCORE_COREBARRIER_H |
---|
| 21 | |
---|
[a112364] | 22 | #include <rtems/score/threadq.h> |
---|
[bb2d9f9] | 23 | |
---|
| 24 | #ifdef __cplusplus |
---|
| 25 | extern "C" { |
---|
| 26 | #endif |
---|
| 27 | |
---|
[9c191ee] | 28 | /** |
---|
| 29 | * @defgroup ScoreBarrier Barrier Handler |
---|
| 30 | * |
---|
[d8cd045c] | 31 | * @ingroup Score |
---|
| 32 | * |
---|
[9c191ee] | 33 | * This handler encapsulates functionality which provides the foundation |
---|
| 34 | * Barrier services used in all of the APIs supported by RTEMS. |
---|
| 35 | */ |
---|
| 36 | /**@{*/ |
---|
| 37 | |
---|
| 38 | /** |
---|
| 39 | * Flavors of barriers. |
---|
| 40 | */ |
---|
| 41 | typedef enum { |
---|
| 42 | /** This specifies that the barrier will automatically release when |
---|
| 43 | * the user specified number of threads have arrived at the barrier. |
---|
| 44 | */ |
---|
| 45 | CORE_BARRIER_AUTOMATIC_RELEASE, |
---|
| 46 | /** This specifies that the user will have to manually release the barrier |
---|
| 47 | * in order to release the waiting threads. |
---|
| 48 | */ |
---|
| 49 | CORE_BARRIER_MANUAL_RELEASE |
---|
| 50 | } CORE_barrier_Disciplines; |
---|
| 51 | |
---|
| 52 | /** |
---|
| 53 | * The following defines the control block used to manage the |
---|
| 54 | * attributes of each barrier. |
---|
| 55 | */ |
---|
| 56 | typedef struct { |
---|
| 57 | /** This field indicates whether the barrier is automatic or manual. |
---|
| 58 | */ |
---|
| 59 | CORE_barrier_Disciplines discipline; |
---|
| 60 | /** This element indicates the number of threads which must arrive at the |
---|
| 61 | * barrier to trip the automatic release. |
---|
| 62 | */ |
---|
| 63 | uint32_t maximum_count; |
---|
| 64 | } CORE_barrier_Attributes; |
---|
| 65 | |
---|
| 66 | /** |
---|
| 67 | * The following defines the control block used to manage each |
---|
| 68 | * barrier. |
---|
| 69 | */ |
---|
| 70 | typedef struct { |
---|
| 71 | /** This field is the Waiting Queue used to manage the set of tasks |
---|
| 72 | * which are blocked waiting for the barrier to be released. |
---|
| 73 | */ |
---|
| 74 | Thread_queue_Control Wait_queue; |
---|
| 75 | /** This element is the set of attributes which define this instance's |
---|
| 76 | * behavior. |
---|
| 77 | */ |
---|
| 78 | CORE_barrier_Attributes Attributes; |
---|
| 79 | /** This element contains the current number of thread waiting for this |
---|
| 80 | * barrier to be released. */ |
---|
| 81 | uint32_t number_of_waiting_threads; |
---|
| 82 | } CORE_barrier_Control; |
---|
| 83 | |
---|
[bb2d9f9] | 84 | /**@}*/ |
---|
[9c191ee] | 85 | |
---|
| 86 | #ifdef __cplusplus |
---|
| 87 | } |
---|
| 88 | #endif |
---|
| 89 | |
---|
| 90 | #endif |
---|
[b10825c] | 91 | /* end of include file */ |
---|