FreeCalypso > hg > ffs-editor
comparison src/nucleus/mbce.c @ 0:92470e5d0b9e
src: partial import from FC Selenite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 15 May 2020 01:28:16 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:92470e5d0b9e |
---|---|
1 /*************************************************************************/ | |
2 /* */ | |
3 /* Copyright Mentor Graphics Corporation 2002 */ | |
4 /* All Rights Reserved. */ | |
5 /* */ | |
6 /* THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION WHICH IS */ | |
7 /* THE PROPERTY OF MENTOR GRAPHICS CORPORATION OR ITS LICENSORS AND IS */ | |
8 /* SUBJECT TO LICENSE TERMS. */ | |
9 /* */ | |
10 /*************************************************************************/ | |
11 | |
12 /*************************************************************************/ | |
13 /* */ | |
14 /* FILE NAME VERSION */ | |
15 /* */ | |
16 /* mbce.c Nucleus PLUS 1.14 */ | |
17 /* */ | |
18 /* COMPONENT */ | |
19 /* */ | |
20 /* MB - Mailbox Management */ | |
21 /* */ | |
22 /* DESCRIPTION */ | |
23 /* */ | |
24 /* This file contains the error checking routines for the core */ | |
25 /* functions in the Mailbox component. This permits easy removal */ | |
26 /* of error checking logic when it is not needed. */ | |
27 /* */ | |
28 /* DATA STRUCTURES */ | |
29 /* */ | |
30 /* None */ | |
31 /* */ | |
32 /* FUNCTIONS */ | |
33 /* */ | |
34 /* MBCE_Create_Mailbox Create a mailbox */ | |
35 /* MBCE_Delete_Mailbox Delete a mailbox */ | |
36 /* MBCE_Send_To_Mailbox Send a mailbox message */ | |
37 /* MBCE_Receive_From_Mailbox Receive a mailbox message */ | |
38 /* */ | |
39 /* DEPENDENCIES */ | |
40 /* */ | |
41 /* cs_extr.h Common Service functions */ | |
42 /* tc_extr.h Thread Control functions */ | |
43 /* mb_extr.h Mailbox functions */ | |
44 /* */ | |
45 /* HISTORY */ | |
46 /* */ | |
47 /* DATE REMARKS */ | |
48 /* */ | |
49 /* 03-01-1993 Created initial version 1.0 */ | |
50 /* 04-19-1993 Verified version 1.0 */ | |
51 /* 03-01-1994 Created new file that contains */ | |
52 /* error checking shells for core */ | |
53 /* mailbox functions, also */ | |
54 /* changed interface to exactly */ | |
55 /* match prototype, resulting in */ | |
56 /* version 1.1 */ | |
57 /* */ | |
58 /* 03-18-1994 Verified version 1.1 */ | |
59 /* 04-17-1996 updated to version 1.2 */ | |
60 /* 03-24-1998 Released version 1.3 */ | |
61 /* 04-17-2002 Released version 1.13m */ | |
62 /* 11-07-2002 Released version 1.14 */ | |
63 /*************************************************************************/ | |
64 #define NU_SOURCE_FILE | |
65 | |
66 | |
67 #include "cs_extr.h" /* Common service functions */ | |
68 #include "tc_extr.h" /* Thread control functions */ | |
69 #include "mb_extr.h" /* Mailbox functions */ | |
70 | |
71 | |
72 /*************************************************************************/ | |
73 /* */ | |
74 /* FUNCTION */ | |
75 /* */ | |
76 /* MBCE_Create_Mailbox */ | |
77 /* */ | |
78 /* DESCRIPTION */ | |
79 /* */ | |
80 /* This function performs error checking on the parameters supplied */ | |
81 /* to the mailbox create function. */ | |
82 /* */ | |
83 /* CALLED BY */ | |
84 /* */ | |
85 /* Application */ | |
86 /* */ | |
87 /* CALLS */ | |
88 /* */ | |
89 /* MBC_Create_Mailbox Actual create mailbox funct. */ | |
90 /* */ | |
91 /* INPUTS */ | |
92 /* */ | |
93 /* mailbox_ptr Mailbox control block pointer*/ | |
94 /* name Mailbox name */ | |
95 /* suspend_type Suspension type */ | |
96 /* */ | |
97 /* OUTPUTS */ | |
98 /* */ | |
99 /* NU_INVALID_MAILBOX Mailbox pointer is NULL */ | |
100 /* NU_INVALID_SUSPEND Suspension type is invalid */ | |
101 /* */ | |
102 /* HISTORY */ | |
103 /* */ | |
104 /* DATE REMARKS */ | |
105 /* */ | |
106 /* 03-01-1993 Created initial version 1.0 */ | |
107 /* 04-19-1993 Verified version 1.0 */ | |
108 /* 03-01-1994 Modified interface to exactly */ | |
109 /* match prototype, resulting in */ | |
110 /* version 1.1 */ | |
111 /* */ | |
112 /* 03-18-1994 Verified version 1.1 */ | |
113 /* */ | |
114 /*************************************************************************/ | |
115 STATUS MBCE_Create_Mailbox(NU_MAILBOX *mailbox_ptr, CHAR *name, | |
116 OPTION suspend_type) | |
117 { | |
118 | |
119 MB_MCB *mailbox; /* Mailbox control block ptr */ | |
120 STATUS status; /* Completion status */ | |
121 | |
122 | |
123 /* Move input mailbox pointer into internal pointer. */ | |
124 mailbox = (MB_MCB *) mailbox_ptr; | |
125 | |
126 /* Check for a NULL mailbox pointer or an already created mailbox. */ | |
127 if ((mailbox == NU_NULL) || (mailbox -> mb_id == MB_MAILBOX_ID)) | |
128 | |
129 /* Invalid mailbox control block pointer. */ | |
130 status = NU_INVALID_MAILBOX; | |
131 | |
132 else if ((suspend_type != NU_FIFO) && (suspend_type != NU_PRIORITY)) | |
133 | |
134 /* Invalid suspension type. */ | |
135 status = NU_INVALID_SUSPEND; | |
136 | |
137 else | |
138 | |
139 /* Call the actual service to create the mailbox. */ | |
140 status = MBC_Create_Mailbox(mailbox_ptr, name, suspend_type); | |
141 | |
142 /* Return completion status. */ | |
143 return(status); | |
144 } | |
145 | |
146 | |
147 /*************************************************************************/ | |
148 /* */ | |
149 /* FUNCTION */ | |
150 /* */ | |
151 /* MBCE_Delete_Mailbox */ | |
152 /* */ | |
153 /* DESCRIPTION */ | |
154 /* */ | |
155 /* This function performs error checking on the parameters supplied */ | |
156 /* to the actual delete mailbox function. */ | |
157 /* */ | |
158 /* CALLED BY */ | |
159 /* */ | |
160 /* Application */ | |
161 /* */ | |
162 /* CALLS */ | |
163 /* */ | |
164 /* MBC_Delete_Mailbox Actual delete mailbox funct. */ | |
165 /* */ | |
166 /* INPUTS */ | |
167 /* */ | |
168 /* mailbox_ptr Mailbox control block pointer*/ | |
169 /* */ | |
170 /* OUTPUTS */ | |
171 /* */ | |
172 /* NU_INVALID_MAILBOX Invalid mailbox supplied */ | |
173 /* */ | |
174 /* HISTORY */ | |
175 /* */ | |
176 /* DATE REMARKS */ | |
177 /* */ | |
178 /* 03-01-1993 Created initial version 1.0 */ | |
179 /* 04-19-1993 Verified version 1.0 */ | |
180 /* 03-01-1994 Modified interface to exactly */ | |
181 /* match prototype, resulting in */ | |
182 /* version 1.1 */ | |
183 /* */ | |
184 /* 03-18-1994 Verified version 1.1 */ | |
185 /* */ | |
186 /*************************************************************************/ | |
187 STATUS MBCE_Delete_Mailbox(NU_MAILBOX *mailbox_ptr) | |
188 { | |
189 | |
190 MB_MCB *mailbox; /* Mailbox control block ptr */ | |
191 STATUS status; /* Completion status */ | |
192 | |
193 | |
194 /* Move input mailbox pointer into internal pointer. */ | |
195 mailbox = (MB_MCB *) mailbox_ptr; | |
196 | |
197 /* Determine if the mailbox pointer is valid. */ | |
198 if ((mailbox) && (mailbox -> mb_id == MB_MAILBOX_ID)) | |
199 | |
200 /* Mailbox pointer is valid, call function to delete it. */ | |
201 status = MBC_Delete_Mailbox(mailbox_ptr); | |
202 | |
203 else | |
204 | |
205 /* Mailbox pointer is invalid, indicate in completion status. */ | |
206 status = NU_INVALID_MAILBOX; | |
207 | |
208 /* Return completion status. */ | |
209 return(status); | |
210 } | |
211 | |
212 | |
213 /*************************************************************************/ | |
214 /* */ | |
215 /* FUNCTION */ | |
216 /* */ | |
217 /* MBCE_Send_To_Mailbox */ | |
218 /* */ | |
219 /* DESCRIPTION */ | |
220 /* */ | |
221 /* This function performs error checking on the parameters supplied */ | |
222 /* to the send-to-mailbox function. */ | |
223 /* */ | |
224 /* CALLED BY */ | |
225 /* */ | |
226 /* Application */ | |
227 /* */ | |
228 /* CALLS */ | |
229 /* */ | |
230 /* MBC_Sent_To_Mailbox Actual mailbox send function */ | |
231 /* TCCE_Suspend_Error Check suspend validity */ | |
232 /* */ | |
233 /* INPUTS */ | |
234 /* */ | |
235 /* mailbox_ptr Mailbox control block pointer*/ | |
236 /* message Pointer to message to send */ | |
237 /* suspend Suspension option if full */ | |
238 /* */ | |
239 /* OUTPUTS */ | |
240 /* */ | |
241 /* NU_INVALID_MAILBOX Mailbox pointer is invalid */ | |
242 /* NU_INVALID_POINTER Message pointer is invalid */ | |
243 /* NU_INVALID_SUSPEND Invalid suspend request */ | |
244 /* */ | |
245 /* HISTORY */ | |
246 /* */ | |
247 /* DATE REMARKS */ | |
248 /* */ | |
249 /* 03-01-1993 Created initial version 1.0 */ | |
250 /* 04-19-1993 Verified version 1.0 */ | |
251 /* 03-01-1994 Modified interface to exactly */ | |
252 /* match prototype, resulting in */ | |
253 /* version 1.1 */ | |
254 /* */ | |
255 /* 03-18-1994 Verified version 1.1 */ | |
256 /* */ | |
257 /*************************************************************************/ | |
258 STATUS MBCE_Send_To_Mailbox(NU_MAILBOX *mailbox_ptr, VOID *message, | |
259 UNSIGNED suspend) | |
260 { | |
261 | |
262 MB_MCB *mailbox; /* Mailbox control block ptr */ | |
263 STATUS status; /* Completion status */ | |
264 | |
265 | |
266 /* Move input mailbox pointer into internal pointer. */ | |
267 mailbox = (MB_MCB *) mailbox_ptr; | |
268 | |
269 /* Determine if mailbox pointer is invalid. */ | |
270 if (mailbox == NU_NULL) | |
271 | |
272 /* Mailbox pointer is invalid, indicate in completion status. */ | |
273 status = NU_INVALID_MAILBOX; | |
274 | |
275 else if (mailbox -> mb_id != MB_MAILBOX_ID) | |
276 | |
277 /* Mailbox pointer is invalid, indicate in completion status. */ | |
278 status = NU_INVALID_MAILBOX; | |
279 | |
280 else if (message == NU_NULL) | |
281 | |
282 /* Message pointer is invalid, indicate in completion status. */ | |
283 status = NU_INVALID_POINTER; | |
284 | |
285 else if ((suspend) && (TCCE_Suspend_Error())) | |
286 | |
287 /* Indicate that suspension is only valid from a task thread. */ | |
288 status = NU_INVALID_SUSPEND; | |
289 | |
290 else | |
291 | |
292 /* Parameters are valid, call actual function. */ | |
293 status = MBC_Send_To_Mailbox(mailbox_ptr, message, suspend); | |
294 | |
295 /* Return the completion status. */ | |
296 return(status); | |
297 } | |
298 | |
299 | |
300 /*************************************************************************/ | |
301 /* */ | |
302 /* FUNCTION */ | |
303 /* */ | |
304 /* MBCE_Receive_From_Mailbox */ | |
305 /* */ | |
306 /* DESCRIPTION */ | |
307 /* */ | |
308 /* This function performs error checking on the parameters supplied */ | |
309 /* to the receive message from mailbox function. */ | |
310 /* */ | |
311 /* CALLED BY */ | |
312 /* */ | |
313 /* Application */ | |
314 /* */ | |
315 /* CALLS */ | |
316 /* */ | |
317 /* MBC_Receive_From_Mailbox Actual receive function */ | |
318 /* TCCE_Suspend_Error Check suspend validity */ | |
319 /* */ | |
320 /* INPUTS */ | |
321 /* */ | |
322 /* mailbox_ptr Mailbox control block pointer*/ | |
323 /* message Pointer to message to send */ | |
324 /* suspend Suspension option if empty */ | |
325 /* */ | |
326 /* OUTPUTS */ | |
327 /* */ | |
328 /* NU_INVALID_MAILBOX Mailbox pointer is invalid */ | |
329 /* NU_INVALID_POINTER Message pointer is invalid */ | |
330 /* NU_INVALID_SUSPEND Invalid suspend request */ | |
331 /* */ | |
332 /* HISTORY */ | |
333 /* */ | |
334 /* DATE REMARKS */ | |
335 /* */ | |
336 /* 03-01-1993 Created initial version 1.0 */ | |
337 /* 04-19-1993 Verified version 1.0 */ | |
338 /* 03-01-1994 Modified interface to exactly */ | |
339 /* match prototype, resulting in */ | |
340 /* version 1.1 */ | |
341 /* */ | |
342 /* 03-18-1994 Verified version 1.1 */ | |
343 /* */ | |
344 /*************************************************************************/ | |
345 STATUS MBCE_Receive_From_Mailbox(NU_MAILBOX *mailbox_ptr, VOID *message, | |
346 UNSIGNED suspend) | |
347 { | |
348 | |
349 MB_MCB *mailbox; /* Mailbox control block ptr */ | |
350 STATUS status; /* Completion status */ | |
351 | |
352 | |
353 /* Move input mailbox pointer into internal pointer. */ | |
354 mailbox = (MB_MCB *) mailbox_ptr; | |
355 | |
356 /* Determine if mailbox pointer is invalid. */ | |
357 if (mailbox == NU_NULL) | |
358 | |
359 /* Mailbox pointer is invalid, indicate in completion status. */ | |
360 status = NU_INVALID_MAILBOX; | |
361 | |
362 else if (mailbox -> mb_id != MB_MAILBOX_ID) | |
363 | |
364 /* Mailbox pointer is invalid, indicate in completion status. */ | |
365 status = NU_INVALID_MAILBOX; | |
366 | |
367 else if (message == NU_NULL) | |
368 | |
369 /* Message pointer is invalid, indicate in completion status. */ | |
370 status = NU_INVALID_POINTER; | |
371 | |
372 else if ((suspend) && (TCCE_Suspend_Error())) | |
373 | |
374 /* Indicate that suspension is only valid from a task thread. */ | |
375 status = NU_INVALID_SUSPEND; | |
376 | |
377 else | |
378 | |
379 /* Parameters are valid, call actual function. */ | |
380 status = MBC_Receive_From_Mailbox(mailbox_ptr, message, suspend); | |
381 | |
382 /* Return the completion status. */ | |
383 return(status); | |
384 } | |
385 | |
386 | |
387 | |
388 | |
389 | |
390 |