source: rtems/cpukit/sapi/include/rtems/chain.h @ 69f2a07

4.11
Last change on this file since 69f2a07 was 69f2a07, checked in by Sebastian Huber <sebastian.huber@…>, on Aug 24, 2010 at 2:29:55 PM

2010-08-24 Sebastian Huber <sebastian.huber@…>

PR 1673/cpukit

  • sapi/src/chainappendnotify.c, sapi/src/chaingetnotify.c, sapi/src/chaingetwait.c, sapi/src/chainprependnotify.c: New files.
  • sapi/Makefile.am: Reflect changes above.
  • sapi/include/rtems/chain.h: Declare rtems_chain_append_with_notification(), rtems_chain_prepend_with_notification(), rtems_chain_get_with_notification(), and rtems_chain_get_with_wait().
  • sapi/inline/rtems/chain.inl: Define rtems_chain_append_with_empty_check(), rtems_chain_prepend_with_empty_check(), and rtems_chain_get_with_empty_check().
  • Property mode set to 100644
File size: 3.0 KB
Line 
1/**
2 * @file
3 *
4 * @ingroup ClassicChains
5 *
6 * @brief Chain API.
7 */
8
9/*
10 *  Copyright (c) 2010 embedded brains GmbH.
11 *
12 *  COPYRIGHT (c) 1989-2008.
13 *  On-Line Applications Research Corporation (OAR).
14 *
15 *  The license and distribution terms for this file may be
16 *  found in the file LICENSE in this distribution or at
17 *  http://www.rtems.com/license/LICENSE.
18 *
19 *  $Id$
20 */
21
22#ifndef _RTEMS_CHAIN_H
23#define _RTEMS_CHAIN_H
24
25#include <rtems/system.h>
26#include <rtems/score/chain.h>
27#include <rtems/rtems/event.h>
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
33/**
34 * @defgroup ClassicChains Chains
35 *
36 * @ingroup ClassicRTEMS
37 *
38 * @brief Chain API.
39 *
40 * @{
41 */
42
43typedef Chain_Node rtems_chain_node;
44
45typedef Chain_Control rtems_chain_control;
46
47/**
48 *  @brief Chain initializer for an empty chain with designator @a name.
49 */
50#define RTEMS_CHAIN_INITIALIZER_EMPTY(name) \
51  CHAIN_INITIALIZER_EMPTY(name)
52
53/**
54 *  @brief Chain definition for an empty chain with designator @a name.
55 */
56#define RTEMS_CHAIN_DEFINE_EMPTY(name) \
57  CHAIN_DEFINE_EMPTY(name)
58
59/** @} */
60
61#include <rtems/chain.inl>
62
63/**
64 * @addtogroup ClassicChains
65 *
66 * @{
67 */
68
69/**
70 * @brief Appends the @a node to the @a chain and sends the @a events to the
71 * @a task if the @a chain was empty before the append.
72 *
73 * @see rtems_chain_append_with_empty_check() and rtems_event_send().
74 *
75 * @retval RTEMS_SUCCESSFUL Successful operation.
76 * @retval RTEMS_INVALID_ID No such task.
77 */
78rtems_status_code rtems_chain_append_with_notification(
79  rtems_chain_control *chain,
80  rtems_chain_node *node,
81  rtems_id task,
82  rtems_event_set events
83);
84
85/**
86 * @brief Prepends the @a node to the @a chain and sends the @a events to the
87 * @a task if the @a chain was empty before the prepend.
88 *
89 * @see rtems_chain_prepend_with_empty_check() and rtems_event_send().
90 *
91 * @retval RTEMS_SUCCESSFUL Successful operation.
92 * @retval RTEMS_INVALID_ID No such task.
93 */
94rtems_status_code rtems_chain_prepend_with_notification(
95  rtems_chain_control *chain,
96  rtems_chain_node *node,
97  rtems_id task,
98  rtems_event_set events
99);
100
101/**
102 * @brief Gets the first @a node of the @a chain and sends the @a events to the
103 * @a task if the @a chain is empty after the get.
104 *
105 * @see rtems_chain_get_with_empty_check() and rtems_event_send().
106 *
107 * @retval RTEMS_SUCCESSFUL Successful operation.
108 * @retval RTEMS_INVALID_ID No such task.
109 */
110rtems_status_code rtems_chain_get_with_notification(
111  rtems_chain_control *chain,
112  rtems_id task,
113  rtems_event_set events,
114  rtems_chain_node **node
115);
116
117/**
118 * @brief Gets the first @a node of the @a chain and sends the @a events to the
119 * @a task if the @a chain is empty afterwards.
120 *
121 * @see rtems_chain_get() and rtems_event_receive().
122 *
123 * @retval RTEMS_SUCCESSFUL Successful operation.
124 * @retval RTEMS_TIMEOUT Timeout.
125 */
126rtems_status_code rtems_chain_get_with_wait(
127  rtems_chain_control *chain,
128  rtems_event_set events,
129  rtems_interval timeout,
130  rtems_chain_node **node
131);
132
133/** @} */
134
135#ifdef __cplusplus
136}
137#endif
138
139#endif
140/* end of include file */
Note: See TracBrowser for help on using the repository browser.