source: rtems/cpukit/rtems/include/rtems/rtems/barrierimpl.h @ e41308ea

5
Last change on this file since e41308ea was e41308ea, checked in by Sebastian Huber <sebastian.huber@…>, on 08/22/16 at 08:58:34

score: Introduce Thread_queue_Lock_context

Introduce Thread_queue_Lock_context to contain the context necessary for
thread queue lock and thread wait lock acquire/release operations to
reduce the Thread_Control size.

  • Property mode set to 100644
File size: 2.0 KB
Line 
1/**
2 * @file rtems/rtems/barrier.inl
3 *
4 * @defgroup ClassicBarrier Barriers
5 *
6 * @ingroup ClassicRTEMS
7 * @brief Inline Implementation from Barrier Manager
8 *
9 * This file contains the static inlin implementation of the inlined
10 * routines from the Barrier Manager.
11 */
12
13/*
14 * COPYRIGHT (c) 1989-2008.
15 * On-Line Applications Research Corporation (OAR).
16 *
17 * The license and distribution terms for this file may be
18 * found in the file LICENSE in this distribution or at
19 * http://www.rtems.org/license/LICENSE.
20 */
21
22#ifndef _RTEMS_RTEMS_BARRIERIMPL_H
23#define _RTEMS_RTEMS_BARRIERIMPL_H
24
25#include <rtems/rtems/barrier.h>
26#include <rtems/score/corebarrierimpl.h>
27#include <rtems/score/objectimpl.h>
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
33/**
34 *  @defgroup ClassicBarrierImpl Classic Barrier Implementation
35 *
36 *  @ingroup ClassicBarrier
37 *
38 *  @{
39 */
40
41/**
42 *  The following defines the information control block used to manage
43 *  this class of objects.
44 */
45extern Objects_Information _Barrier_Information;
46
47/**
48 *  @brief _Barrier_Allocate
49 *
50 *  This function allocates a barrier control block from
51 *  the inactive chain of free barrier control blocks.
52 */
53RTEMS_INLINE_ROUTINE Barrier_Control *_Barrier_Allocate( void )
54{
55  return (Barrier_Control *) _Objects_Allocate( &_Barrier_Information );
56}
57
58/**
59 *  @brief _Barrier_Free
60 *
61 *  This routine frees a barrier control block to the
62 *  inactive chain of free barrier control blocks.
63 */
64RTEMS_INLINE_ROUTINE void _Barrier_Free (
65  Barrier_Control *the_barrier
66)
67{
68  _CORE_barrier_Destroy( &the_barrier->Barrier );
69  _Objects_Free( &_Barrier_Information, &the_barrier->Object );
70}
71
72RTEMS_INLINE_ROUTINE Barrier_Control *_Barrier_Get(
73  Objects_Id            id,
74  Thread_queue_Context *queue_context
75)
76{
77  _Thread_queue_Context_initialize( queue_context );
78  return (Barrier_Control *) _Objects_Get(
79    id,
80    &queue_context->Lock_context.Lock_context,
81    &_Barrier_Information
82  );
83}
84
85/**@}*/
86
87#ifdef __cplusplus
88}
89#endif
90
91#endif
92/*  end of include file */
Note: See TracBrowser for help on using the repository browser.