source:
rtems/cpukit/itron/inline/rtems/itron/semaphore.inl
@
e49f9e6b
Last change on this file since e49f9e6b was e49f9e6b, checked in by Joel Sherrill <joel.sherrill@…>, on 09/04/03 at 18:54:02 | |
---|---|
|
|
File size: 4.5 KB |
Rev | Line | |
---|---|---|
[352c9b2] | 1 | /* |
[9d9a3dd] | 2 | * COPYRIGHT (c) 1989-1999. |
3 | * On-Line Applications Research Corporation (OAR). | |
4 | * | |
[352c9b2] | 5 | * The license and distribution terms for this file may be |
6 | * found in the file LICENSE in this distribution or at | |
[e49f9e6b] | 7 | * http://www.rtems.com/license/LICENSE. |
[352c9b2] | 8 | * |
9 | * $Id$ | |
10 | */ | |
11 | ||
12 | #ifndef __ITRON_SEMAPHORE_inl_ | |
13 | #define __ITRON_SEMAPHORE_inl_ | |
14 | ||
15 | #ifdef __cplusplus | |
16 | extern "C" { | |
17 | #endif | |
18 | ||
19 | /* | |
20 | * _ITRON_Semaphore_Allocate | |
21 | * | |
22 | * DESCRIPTION: | |
23 | * | |
24 | * This routine allocates the semaphore associated with the specified | |
25 | * semaphore ID from the pool of inactive semaphores. | |
26 | * | |
27 | * Input parameters: | |
28 | * semid - id of semaphore to allocate | |
29 | * status - pointer to status variable | |
30 | * | |
31 | * Output parameters: | |
32 | * returns - pointer to the semaphore control block | |
33 | * *status - status | |
34 | */ | |
35 | ||
36 | RTEMS_INLINE_ROUTINE ITRON_Semaphore_Control *_ITRON_Semaphore_Allocate( | |
37 | ID semid | |
38 | ) | |
39 | { | |
40 | return (ITRON_Semaphore_Control *)_ITRON_Objects_Allocate_by_index( | |
41 | &_ITRON_Semaphore_Information, | |
42 | semid, | |
43 | sizeof(ITRON_Semaphore_Control) | |
44 | ); | |
45 | } | |
46 | ||
47 | /* | |
48 | * _ITRON_Semaphore_Clarify_allocation_id_error | |
49 | * | |
50 | * This function is invoked when an object allocation ID error | |
51 | * occurs to determine the specific ITRON error code to return. | |
52 | */ | |
53 | ||
54 | #define _ITRON_Semaphore_Clarify_allocation_id_error( _id ) \ | |
55 | _ITRON_Objects_Clarify_allocation_id_error( \ | |
56 | &_ITRON_Semaphore_Information, (_id) ) | |
57 | ||
58 | /* | |
59 | * _ITRON_Semaphore_Clarify_get_id_error | |
60 | * | |
61 | * This function is invoked when an object get ID error | |
62 | * occurs to determine the specific ITRON error code to return. | |
63 | */ | |
64 | ||
65 | #define _ITRON_Semaphore_Clarify_get_id_error( _id ) \ | |
66 | _ITRON_Objects_Clarify_get_id_error( &_ITRON_Semaphore_Information, (_id) ) | |
67 | ||
68 | /* | |
69 | * _ITRON_Semaphore_Free | |
70 | * | |
71 | * DESCRIPTION: | |
72 | * | |
73 | * This routine frees a semaphore control block to the | |
74 | * inactive chain of free semaphore control blocks. | |
75 | * | |
76 | * Input parameters: | |
77 | * the_semaphore - pointer to semaphore control block | |
78 | * | |
79 | * Output parameters: NONE | |
80 | */ | |
81 | ||
82 | RTEMS_INLINE_ROUTINE void _ITRON_Semaphore_Free ( | |
83 | ITRON_Semaphore_Control *the_semaphore | |
84 | ) | |
85 | { | |
86 | _ITRON_Objects_Free( &_ITRON_Semaphore_Information, &the_semaphore->Object ); | |
87 | } | |
88 | ||
89 | /*PAGE | |
90 | * | |
91 | * _ITRON_Semaphore_Get | |
92 | * | |
93 | * DESCRIPTION: | |
94 | * | |
95 | * This function maps semaphore IDs to semaphore control blocks. | |
96 | * If ID corresponds to a local semaphore, then it returns | |
97 | * the_semaphore control pointer which maps to ID and location | |
98 | * is set to OBJECTS_LOCAL. if the semaphore ID is global and | |
99 | * resides on a remote node, then location is set to OBJECTS_REMOTE, | |
100 | * and the_semaphore is undefined. Otherwise, location is set | |
101 | * to OBJECTS_ERROR and the_semaphore is undefined. | |
102 | * | |
103 | * Input parameters: | |
104 | * id - ITRON semaphore ID. | |
105 | * the_location - pointer to a location variable | |
106 | * | |
107 | * Output parameters: | |
108 | * *the_location - location of the object | |
109 | */ | |
110 | ||
111 | RTEMS_INLINE_ROUTINE ITRON_Semaphore_Control *_ITRON_Semaphore_Get ( | |
112 | ID id, | |
113 | Objects_Locations *location | |
114 | ) | |
115 | { | |
116 | return (ITRON_Semaphore_Control *) | |
117 | _ITRON_Objects_Get( &_ITRON_Semaphore_Information, id, location ); | |
118 | } | |
119 | ||
120 | /*PAGE | |
121 | * | |
122 | * _ITRON_Semaphore_Is_null | |
123 | * | |
124 | * This function returns TRUE if the_semaphore is NULL and FALSE otherwise. | |
125 | * | |
126 | * Input parameters: | |
127 | * the_semaphore - pointer to semaphore control block | |
128 | * | |
129 | * Output parameters: | |
130 | * TRUE - if the_semaphore is NULL | |
131 | * FALSE - otherwise | |
132 | */ | |
133 | ||
134 | RTEMS_INLINE_ROUTINE boolean _ITRON_Semaphore_Is_null ( | |
135 | ITRON_Semaphore_Control *the_semaphore | |
136 | ) | |
137 | { | |
138 | return ( the_semaphore == NULL ); | |
139 | } | |
140 | ||
141 | /* | |
142 | * _ITRON_Semaphore_Translate_core_semaphore_return_code | |
143 | * | |
144 | * This function returns a ITRON status code based on the semaphore | |
145 | * status code specified. | |
146 | * | |
147 | * Input parameters: | |
148 | * the_semaphore_status - semaphore status code to translate | |
149 | * | |
150 | * Output parameters: | |
151 | * ITRON status code - translated ITRON status code | |
152 | * | |
153 | */ | |
154 | ||
155 | RTEMS_INLINE_ROUTINE ER _ITRON_Semaphore_Translate_core_semaphore_return_code ( | |
156 | unsigned32 the_semaphore_status | |
157 | ) | |
158 | { | |
159 | /* XXX need to be able to return "E_RLWAI" */ | |
160 | switch ( the_semaphore_status ) { | |
161 | case CORE_SEMAPHORE_STATUS_SUCCESSFUL: | |
162 | return E_OK; | |
163 | case CORE_SEMAPHORE_STATUS_UNSATISFIED_NOWAIT: | |
164 | return E_TMOUT; | |
165 | case CORE_SEMAPHORE_WAS_DELETED: | |
166 | return E_DLT; | |
167 | case CORE_SEMAPHORE_TIMEOUT: | |
168 | return E_TMOUT; | |
169 | case CORE_SEMAPHORE_MAXIMUM_COUNT_EXCEEDED: | |
170 | return E_QOVR; | |
171 | case THREAD_STATUS_PROXY_BLOCKING: | |
172 | return THREAD_STATUS_PROXY_BLOCKING; | |
173 | } | |
174 | return E_OK; /* unreached - only to remove warnings */ | |
175 | } | |
176 | ||
177 | #ifdef __cplusplus | |
178 | } | |
179 | #endif | |
180 | ||
181 | #endif | |
182 | /* end of include file */ | |
183 |
Note: See TracBrowser
for help on using the repository browser.