summaryrefslogtreecommitdiffstats
path: root/cpukit/rtems/include/rtems/rtems/attr.h
blob: 0206ad5cc62bee618d61f439281abaa2efc93159 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
/**
 * @file rtems/rtems/attr.h
 *
 *  This include file contains all information about the Object Attributes
 *  Handler.
 */

/*  COPYRIGHT (c) 1989-2008.
 *  On-Line Applications Research Corporation (OAR).
 *
 *  The license and distribution terms for this file may be
 *  found in the file LICENSE in this distribution or at
 *  http://www.rtems.com/license/LICENSE.
 *
 *  $Id$
 */

#ifndef _RTEMS_RTEMS_ATTR_H
#define _RTEMS_RTEMS_ATTR_H

#ifdef __cplusplus
extern "C" {
#endif

/**
 *  @defgroup ClassicAttributes Attributes
 *
 *  @ingroup ClassicRTEMS
 *
 *  This encapsulates functionality which defines and manages the
 *  set of Classic API object attributes.
 */
/**@{*/

/**
 *  This defines the type used to contain Classic API attributes.  These
 *  are primarily used when creating objects.
 */
typedef uint32_t   rtems_attribute;

/** This is the default value for an attribute set. */

#define RTEMS_DEFAULT_ATTRIBUTES  0x00000000

/**
 *  This is the attribute constant to indicate local resource.
 */
#define RTEMS_LOCAL               0x00000000

/**
 *  This is the attribute constant to indicate global resource.
 */
#define RTEMS_GLOBAL              0x00000002

/**
 *  This is the attribute constant which reflects that blocking
 *  tasks will be managed using FIFO discipline.
 */
#define RTEMS_FIFO                0x00000000

/**
 *  This is the attribute constant which reflects that blocking
 *  tasks will be managed using task priority discipline.
 */
#define RTEMS_PRIORITY            0x00000004

/******************** RTEMS Task Specific Attributes *********************/

/**
 *  This attribute constant indicates that the task will not use the
 *  floating point hardware.  If the architecture permits it, then
 *  the FPU will be disabled when the task is executing.
 */
#define RTEMS_NO_FLOATING_POINT   0x00000000

/**
 *  This attribute constant indicates that the task will use the
 *  floating point hardware.  There will be a floating point
 *  context associated with this task.
 */
#define RTEMS_FLOATING_POINT      0x00000001

/***************** RTEMS Semaphore Specific Attributes ********************/

/**
 *  This is the mask for the attribute bits associated with the
 *  Classic API Semaphore Manager.
 */
#define RTEMS_SEMAPHORE_CLASS         0x00000030

/**
 *  This attribute constant indicates that the Classic API Semaphore
 *  instance created will be a counting semaphore.
 */
#define RTEMS_COUNTING_SEMAPHORE      0x00000000

/**
 *  This attribute constant indicates that the Classic API Semaphore
 *  instance created will be a proper binary semaphore or mutex.
 */
#define RTEMS_BINARY_SEMAPHORE        0x00000010

/**
 *  This attribute constant indicates that the Classic API Semaphore
 *  instance created will be a simple binary semaphore.
 */
#define RTEMS_SIMPLE_BINARY_SEMAPHORE 0x00000020

/**
 *  This attribute constant indicates that the Classic API Semaphore
 *  instance created will NOT use the Priority Inheritance Protocol.
 */
#define RTEMS_NO_INHERIT_PRIORITY     0x00000000

/**
 *  This attribute constant indicates that the Classic API Semaphore
 *  instance created will use the Priority Inheritance Protocol.
 *
 *  @note The semaphore instance must be a binary semaphore.
 */
#define RTEMS_INHERIT_PRIORITY        0x00000040

/**
 *  This attribute constant indicates that the Classic API Semaphore
 *  instance created will NOT use the Priority Ceiling Protocol.
 */
#define RTEMS_NO_PRIORITY_CEILING     0x00000000

/**
 *  This attribute constant indicates that the Classic API Semaphore
 *  instance created will use the Priority Ceiling Protocol.
 *
 *  @note The semaphore instance must be a binary semaphore.
 */
#define RTEMS_PRIORITY_CEILING        0x00000080

/******************** RTEMS Barrier Specific Attributes ********************/

/**
 *  This attribute constant indicates that the Classic API Barrier
 *  instance created will use an automatic release protocol.
 */
#define RTEMS_BARRIER_AUTOMATIC_RELEASE 0x00000010

/**
 *  This attribute constant indicates that the Classic API Barrier
 *  instance created will use the manual release protocol.
 */
#define RTEMS_BARRIER_MANUAL_RELEASE    0x00000000

/**************** RTEMS Internal Task Specific Attributes ****************/

/**
 *  This attribute constant indicates that the task was created
 *  by the application using normal Classic API methods.
 */
#define RTEMS_APPLICATION_TASK        0x00000000

/**
 *  This attribute constant indicates that the task was created
 *  by RTEMS as a support task.
 */
#define RTEMS_SYSTEM_TASK             0x00008000

/****************** Forced Attributes in Configuration ****************/

/**
 *  This attribute constant indicates the attributes that are not
 *  supportable given the hardware configuration.
 */
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
#define ATTRIBUTES_NOT_SUPPORTED       0
#else
#define ATTRIBUTES_NOT_SUPPORTED       RTEMS_FLOATING_POINT
#endif

/**
 *  This attribute constant indicates the attributes that are
 *  required given the hardware configuration.
 */
#if ( CPU_ALL_TASKS_ARE_FP == TRUE )
#define ATTRIBUTES_REQUIRED            RTEMS_FLOATING_POINT
#else
#define ATTRIBUTES_REQUIRED            0
#endif

#ifndef __RTEMS_APPLICATION__
#include <rtems/rtems/attr.inl>
#endif

#ifdef __cplusplus
}
#endif

/**@}*/

#endif
/* end of include file */