FreeCalypso > hg > ffs-editor
comparison src/nucleus/nucleus.h @ 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 /* nucleus.h Nucleus PLUS\ARM925\Code Composer 1.14.1 */ | |
17 /* */ | |
18 /* COMPONENT */ | |
19 /* */ | |
20 /* System Constants */ | |
21 /* */ | |
22 /* DESCRIPTION */ | |
23 /* */ | |
24 /* This file contains system constants common to both the */ | |
25 /* application and the actual Nucleus PLUS components. This file */ | |
26 /* also contains data structure definitions that hide internal */ | |
27 /* information from the application. */ | |
28 /* */ | |
29 /* DATA STRUCTURES */ | |
30 /* */ | |
31 /* NU_DRIVER I/O Driver control block */ | |
32 /* NU_EVENT_GROUP Event group control block */ | |
33 /* NU_HISR HISR control block */ | |
34 /* NU_MAILBOX Mailbox control block */ | |
35 /* NU_MEMORY_POOL Memory Pool control block */ | |
36 /* NU_PARTITION_POOL Partition Pool control block */ | |
37 /* NU_PIPE Pipe control block */ | |
38 /* NU_QUEUE Queue control block */ | |
39 /* NU_SEMAPHORE Semaphore control block */ | |
40 /* NU_TASK Task control block */ | |
41 /* NU_TIMER Timer control block */ | |
42 /* NU_PROTECT Protection structure */ | |
43 /* */ | |
44 /* FUNCTIONS */ | |
45 /* */ | |
46 /* None */ | |
47 /* */ | |
48 /* DEPENDENCIES */ | |
49 /* */ | |
50 /* None */ | |
51 /* */ | |
52 /* HISTORY */ | |
53 /* */ | |
54 /* NAME DATE REMARKS */ | |
55 /* */ | |
56 /* B. Ronquillo 08-28-2002 Released version 1.14.1 */ | |
57 /* */ | |
58 /* */ | |
59 /*************************************************************************/ | |
60 | |
61 /* Check to see if this file has been included already. */ | |
62 | |
63 #ifndef NUCLEUS | |
64 | |
65 #ifdef __cplusplus | |
66 extern "C" { /* C declarations in C++ */ | |
67 #endif | |
68 | |
69 #define NUCLEUS | |
70 | |
71 #define PLUS_1_11 1 | |
72 #define PLUS_1_13 2 | |
73 #define PLUS_1_14 3 | |
74 #define PLUS_VERSION_COMP PLUS_1_14 | |
75 | |
76 #ifndef NU_SUPERV_USER_MODE | |
77 #define NU_SUPERV_USER_MODE 0 | |
78 #endif | |
79 | |
80 #ifndef NU_MODULE_SUPPORT | |
81 #define NU_MODULE_SUPPORT 0 | |
82 #endif | |
83 | |
84 #ifndef NU_MMU_MODE | |
85 #define NU_MMU_MODE 0 | |
86 #endif | |
87 | |
88 /* | |
89 * The original version of this file in XVilka's code drop contained | |
90 * some definitions specific to the OMAP1510 platform targeted by that | |
91 * code drop. Nothing else in this package uses these definitions, | |
92 * though, so I have decided that the best thing to do is to simply | |
93 * eliminate them altogether. -- Spacefalcon the Outlaw | |
94 */ | |
95 | |
96 #if 0 | |
97 | |
98 /* Define the clock frequency that is used by the timer control unit (must be defined in hertz */ | |
99 #define NU_System_Clock_Frequency 84000000 | |
100 | |
101 /* Define the number of Nucleus PLUS ticks that will occur every second */ | |
102 #define NU_PLUS_Ticks_Per_Second 100 | |
103 | |
104 /* Define the number of timer ticks that will occur every second. This is | |
105 usually the frequency of the timer used by the Nucleus clock. It may | |
106 be modified by a prescalar. See the INT assembler file for more info */ | |
107 | |
108 #define NU_HW_Ticks_Per_Second (NU_System_Clock_Frequency) | |
109 | |
110 /* The number of timer ticks between Nucleus timer interrupts that increment | |
111 TMD_System_Clock. See timer initialization code for details about how to | |
112 determine this number. */ | |
113 #define NU_HW_Ticks_Per_SW_Tick (NU_HW_Ticks_Per_Second / NU_PLUS_Ticks_Per_Second) | |
114 | |
115 /* Define NU_COUNT_DOWN if the system timer counts down to 0. | |
116 This macro is used to switch between formulas to calculate | |
117 the number of ticks since the systems started in NU_Get_Clock */ | |
118 #define NU_COUNT_DOWN | |
119 | |
120 /* This macro returns the value of the Nucleus timer (not the system clock) */ | |
121 #define NU_Retrieve_Hardware_Clock(hw_tick) hw_tick = *(UINT32 *)(0xFFFEC608) | |
122 | |
123 #endif | |
124 | |
125 /* Define standard data types. These definitions allow Nucleus PLUS to | |
126 perform in the same manner on different target platforms. */ | |
127 | |
128 typedef unsigned long UNSIGNED; | |
129 typedef long SIGNED; | |
130 typedef unsigned char DATA_ELEMENT; | |
131 typedef DATA_ELEMENT OPTION; | |
132 typedef int STATUS; | |
133 typedef unsigned char UNSIGNED_CHAR; | |
134 typedef char CHAR; | |
135 typedef int INT; | |
136 typedef unsigned long * UNSIGNED_PTR; | |
137 typedef unsigned char * BYTE_PTR; | |
138 typedef unsigned int UNSIGNED_INT; | |
139 | |
140 #define VOID void | |
141 #define HUGE | |
142 #define FAR | |
143 | |
144 /* | |
145 * If general.h file has been already included, then | |
146 * do not define the following types | |
147 */ | |
148 #ifndef GENERAL_H | |
149 typedef DATA_ELEMENT BOOLEAN; | |
150 typedef signed char INT8; | |
151 typedef unsigned char UINT8; | |
152 typedef short INT16; | |
153 typedef unsigned short UINT16; | |
154 typedef int INT32; | |
155 typedef unsigned long UINT32; | |
156 #endif | |
157 | |
158 | |
159 /* Define register defines. R1, R2, R3, and R4 are used in the Nucleus PLUS | |
160 source code in front of variables that are referenced often. In some | |
161 ports, defining them as "register" will improve performance. */ | |
162 | |
163 #define R1 register | |
164 #define R2 register | |
165 #define R3 register | |
166 #define R4 register | |
167 | |
168 | |
169 /* Define the number of accesses required to read or write a pointer data | |
170 type. This value is used to make optimizations in some ports of Nucleus | |
171 PLUS. */ | |
172 | |
173 #define NU_POINTER_ACCESS 1 | |
174 | |
175 | |
176 /* Define the padding required for usage of the DATA_ELEMENT type within | |
177 Nucleus PLUS structures. These values insure proper alignment for the | |
178 next structure member. */ | |
179 | |
180 #define PAD_1 3 | |
181 #define PAD_2 2 | |
182 #define PAD_3 1 | |
183 | |
184 | |
185 | |
186 /* Define constants that are target dependent and/or are used for internal | |
187 purposes. */ | |
188 | |
189 #define NU_MIN_STACK_SIZE 240 | |
190 #define NU_MAX_NAME 8 | |
191 #define NU_MAX_VECTORS 64 | |
192 #define NU_MAX_LISRS 8 | |
193 | |
194 | |
195 /* Define constants for the number of UNSIGNED words in each of the basic | |
196 system data structures. */ | |
197 | |
198 #define NU_TASK_SIZE 42 | |
199 #define NU_HISR_SIZE 22 | |
200 #define NU_MAILBOX_SIZE 13 | |
201 #define NU_QUEUE_SIZE 18 | |
202 #define NU_PIPE_SIZE 18 | |
203 #define NU_SEMAPHORE_SIZE 10 | |
204 #define NU_EVENT_GROUP_SIZE 9 | |
205 #define NU_PARTITION_POOL_SIZE 15 | |
206 #define NU_MEMORY_POOL_SIZE 17 | |
207 #define NU_TIMER_SIZE 17 | |
208 #define NU_PROTECT_SIZE 2 | |
209 #define NU_DRIVER_SIZE 3 | |
210 | |
211 /* Define what an interrupt vector looks like on the target processor. */ | |
212 | |
213 typedef struct NU_VECTOR_STRUCT | |
214 { | |
215 VOID *pointer; | |
216 } NU_VECTOR; | |
217 | |
218 | |
219 /* Define constants for use in service parameters. */ | |
220 | |
221 #define NU_AND 2 | |
222 #define NU_AND_CONSUME 3 | |
223 #define NU_DISABLE_TIMER 4 | |
224 #define NU_ENABLE_TIMER 5 | |
225 #define NU_FALSE 0 | |
226 #define NU_FIFO 6 | |
227 #define NU_FIXED_SIZE 7 | |
228 #define NU_NO_PREEMPT 8 | |
229 #define NU_NO_START 9 | |
230 #define NU_NO_SUSPEND 0 | |
231 #define NU_NULL 0 | |
232 #define NU_OR 0 | |
233 #define NU_OR_CONSUME 1 | |
234 #define NU_PREEMPT 10 | |
235 #define NU_PRIORITY 11 | |
236 #define NU_START 12 | |
237 #define NU_SUSPEND 0xFFFFFFFFUL | |
238 #define NU_TRUE 1 | |
239 #define NU_VARIABLE_SIZE 13 | |
240 | |
241 | |
242 /* Define interrupt lockout and enable constants. */ | |
243 | |
244 #define NU_DISABLE_INTERRUPTS 0xC0 | |
245 #define NU_ENABLE_INTERRUPTS 0x00 | |
246 | |
247 | |
248 /* Define task suspension constants. */ | |
249 | |
250 #define NU_DRIVER_SUSPEND 10 | |
251 #define NU_EVENT_SUSPEND 7 | |
252 #define NU_FINISHED 11 | |
253 #define NU_MAILBOX_SUSPEND 3 | |
254 #define NU_MEMORY_SUSPEND 9 | |
255 #define NU_PARTITION_SUSPEND 8 | |
256 #define NU_PIPE_SUSPEND 5 | |
257 #define NU_PURE_SUSPEND 1 | |
258 #define NU_QUEUE_SUSPEND 4 | |
259 #define NU_READY 0 | |
260 #define NU_SEMAPHORE_SUSPEND 6 | |
261 #define NU_SLEEP_SUSPEND 2 | |
262 #define NU_TERMINATED 12 | |
263 | |
264 /* Define service completion status constants. */ | |
265 | |
266 #define NU_SUCCESS 0 | |
267 #define NU_END_OF_LOG -1 | |
268 #define NU_GROUP_DELETED -2 | |
269 #define NU_INVALID_DELETE -3 | |
270 #define NU_INVALID_DRIVER -4 | |
271 #define NU_INVALID_ENABLE -5 | |
272 #define NU_INVALID_ENTRY -6 | |
273 #define NU_INVALID_FUNCTION -7 | |
274 #define NU_INVALID_GROUP -8 | |
275 #define NU_INVALID_HISR -9 | |
276 #define NU_INVALID_MAILBOX -10 | |
277 #define NU_INVALID_MEMORY -11 | |
278 #define NU_INVALID_MESSAGE -12 | |
279 #define NU_INVALID_OPERATION -13 | |
280 #define NU_INVALID_PIPE -14 | |
281 #define NU_INVALID_POINTER -15 | |
282 #define NU_INVALID_POOL -16 | |
283 #define NU_INVALID_PREEMPT -17 | |
284 #define NU_INVALID_PRIORITY -18 | |
285 #define NU_INVALID_QUEUE -19 | |
286 #define NU_INVALID_RESUME -20 | |
287 #define NU_INVALID_SEMAPHORE -21 | |
288 #define NU_INVALID_SIZE -22 | |
289 #define NU_INVALID_START -23 | |
290 #define NU_INVALID_SUSPEND -24 | |
291 #define NU_INVALID_TASK -25 | |
292 #define NU_INVALID_TIMER -26 | |
293 #define NU_INVALID_VECTOR -27 | |
294 #define NU_MAILBOX_DELETED -28 | |
295 #define NU_MAILBOX_EMPTY -29 | |
296 #define NU_MAILBOX_FULL -30 | |
297 #define NU_MAILBOX_RESET -31 | |
298 #define NU_NO_MEMORY -32 | |
299 #define NU_NO_MORE_LISRS -33 | |
300 #define NU_NO_PARTITION -34 | |
301 #define NU_NOT_DISABLED -35 | |
302 #define NU_NOT_PRESENT -36 | |
303 #define NU_NOT_REGISTERED -37 | |
304 #define NU_NOT_TERMINATED -38 | |
305 #define NU_PIPE_DELETED -39 | |
306 #define NU_PIPE_EMPTY -40 | |
307 #define NU_PIPE_FULL -41 | |
308 #define NU_PIPE_RESET -42 | |
309 #define NU_POOL_DELETED -43 | |
310 #define NU_QUEUE_DELETED -44 | |
311 #define NU_QUEUE_EMPTY -45 | |
312 #define NU_QUEUE_FULL -46 | |
313 #define NU_QUEUE_RESET -47 | |
314 #define NU_SEMAPHORE_DELETED -48 | |
315 #define NU_SEMAPHORE_RESET -49 | |
316 #define NU_TIMEOUT -50 | |
317 #define NU_UNAVAILABLE -51 | |
318 #define NU_INVALID_DESCRIPTION -52 | |
319 #define NU_INVALID_REGION -53 | |
320 #define NU_MEMORY_CORRUPT -54 | |
321 #define NU_INVALID_DEBUG_ALLOCATION -55 | |
322 #define NU_EMPTY_DEBUG_ALLOCATION_LIST -56 | |
323 | |
324 | |
325 | |
326 /* Define system errors. */ | |
327 | |
328 #define NU_ERROR_CREATING_TIMER_HISR 1 | |
329 #define NU_ERROR_CREATING_TIMER_TASK 2 | |
330 #define NU_STACK_OVERFLOW 3 | |
331 #define NU_UNHANDLED_INTERRUPT 4 | |
332 | |
333 | |
334 /* Define I/O driver constants. */ | |
335 | |
336 #define NU_IO_ERROR -1 | |
337 #define NU_INITIALIZE 1 | |
338 #define NU_ASSIGN 2 | |
339 #define NU_RELEASE 3 | |
340 #define NU_INPUT 4 | |
341 #define NU_OUTPUT 5 | |
342 #define NU_STATUS 6 | |
343 #define NU_TERMINATE 7 | |
344 | |
345 | |
346 /* Define history entry IDs. */ | |
347 | |
348 #define NU_USER_ID 1 | |
349 #define NU_CREATE_TASK_ID 2 | |
350 #define NU_DELETE_TASK_ID 3 | |
351 #define NU_RESET_TASK_ID 4 | |
352 #define NU_TERMINATE_TASK_ID 5 | |
353 #define NU_RESUME_TASK_ID 6 | |
354 #define NU_SUSPEND_TASK_ID 7 | |
355 #define NU_RELINQUISH_ID 8 | |
356 #define NU_SLEEP_ID 9 | |
357 #define NU_CHANGE_PRIORITY_ID 10 | |
358 #define NU_CHANGE_PREEMPTION_ID 11 | |
359 #define NU_CREATE_MAILBOX_ID 12 | |
360 #define NU_DELETE_MAILBOX_ID 13 | |
361 #define NU_RESET_MAILBOX_ID 14 | |
362 #define NU_SEND_TO_MAILBOX_ID 15 | |
363 #define NU_BROADCAST_TO_MAILBOX_ID 16 | |
364 #define NU_RECEIVE_FROM_MAILBOX_ID 17 | |
365 #define NU_CREATE_QUEUE_ID 18 | |
366 #define NU_DELETE_QUEUE_ID 19 | |
367 #define NU_RESET_QUEUE_ID 20 | |
368 #define NU_SEND_TO_FRONT_OF_QUEUE_ID 21 | |
369 #define NU_SEND_TO_QUEUE_ID 22 | |
370 #define NU_BROADCAST_TO_QUEUE_ID 23 | |
371 #define NU_RECEIVE_FROM_QUEUE_ID 24 | |
372 #define NU_CREATE_PIPE_ID 25 | |
373 #define NU_DELETE_PIPE_ID 26 | |
374 #define NU_RESET_PIPE_ID 27 | |
375 #define NU_SEND_TO_FRONT_OF_PIPE_ID 28 | |
376 #define NU_SEND_TO_PIPE_ID 29 | |
377 #define NU_BROADCAST_TO_PIPE_ID 30 | |
378 #define NU_RECEIVE_FROM_PIPE_ID 31 | |
379 #define NU_CREATE_SEMAPHORE_ID 32 | |
380 #define NU_DELETE_SEMAPHORE_ID 33 | |
381 #define NU_RESET_SEMAPHORE_ID 34 | |
382 #define NU_OBTAIN_SEMAPHORE_ID 35 | |
383 #define NU_RELEASE_SEMAPHORE_ID 36 | |
384 #define NU_CREATE_EVENT_GROUP_ID 37 | |
385 #define NU_DELETE_EVENT_GROUP_ID 38 | |
386 #define NU_SET_EVENTS_ID 39 | |
387 #define NU_RETRIEVE_EVENTS_ID 40 | |
388 #define NU_CREATE_PARTITION_POOL_ID 41 | |
389 #define NU_DELETE_PARTITION_POOL_ID 42 | |
390 #define NU_ALLOCATE_PARTITION_ID 43 | |
391 #define NU_DEALLOCATE_PARTITION_ID 44 | |
392 #define NU_CREATE_MEMORY_POOL_ID 45 | |
393 #define NU_DELETE_MEMORY_POOL_ID 46 | |
394 #define NU_ALLOCATE_MEMORY_ID 47 | |
395 #define NU_DEALLOCATE_MEMORY_ID 48 | |
396 #define NU_CONTROL_SIGNALS_ID 49 | |
397 #define NU_RECEIVE_SIGNALS_ID 50 | |
398 #define NU_REGISTER_SIGNAL_HANDLER_ID 51 | |
399 #define NU_SEND_SIGNALS_ID 52 | |
400 #define NU_REGISTER_LISR_ID 53 | |
401 #define NU_CREATE_HISR_ID 54 | |
402 #define NU_DELETE_HISR_ID 55 | |
403 #define NU_CREATE_TIMER_ID 56 | |
404 #define NU_DELETE_TIMER_ID 57 | |
405 #define NU_CONTROL_TIMER_ID 58 | |
406 #define NU_RESET_TIMER_ID 59 | |
407 #define NU_CREATE_DRIVER_ID 60 | |
408 #define NU_DELETE_DRIVER_ID 61 | |
409 #define NU_REQUEST_DRIVER_ID 62 | |
410 #define NU_RESUME_DRIVER_ID 63 | |
411 #define NU_SUSPEND_DRIVER_ID 64 | |
412 #define NU_CHANGE_TIME_SLICE_ID 65 | |
413 #define NU_ASSERT_ID 66 | |
414 #define NU_ALLOCATE_ALIGNED_ID 67 | |
415 | |
416 | |
417 /* Define the basic data structure templates. If the NU_DEBUG conditional | |
418 compilation is specified, the actual structure definition is used. */ | |
419 | |
420 #ifdef NU_DEBUG | |
421 #include "cs_defs.h" | |
422 #include "tm_defs.h" | |
423 #include "tc_defs.h" | |
424 #include "mb_defs.h" | |
425 #include "qu_defs.h" | |
426 #include "pi_defs.h" | |
427 #include "sm_defs.h" | |
428 #include "ev_defs.h" | |
429 #include "pm_defs.h" | |
430 #include "dm_defs.h" | |
431 #endif | |
432 | |
433 | |
434 #ifndef NU_DEBUG | |
435 | |
436 /* Define task control data structure with all internal information | |
437 hidden. */ | |
438 typedef struct NU_TASK_STRUCT | |
439 { | |
440 UNSIGNED words[NU_TASK_SIZE]; | |
441 } NU_TASK; | |
442 #else | |
443 | |
444 /* Define task control data structure with the actual internal data | |
445 structure. */ | |
446 typedef TC_TCB NU_TASK; | |
447 #endif | |
448 | |
449 | |
450 #ifndef NU_DEBUG | |
451 | |
452 /* Define HISR control data structure with all internal information | |
453 hidden. */ | |
454 typedef struct NU_HISR_STRUCT | |
455 { | |
456 UNSIGNED words[NU_HISR_SIZE]; | |
457 } NU_HISR; | |
458 #else | |
459 | |
460 /* Define HISR control data structure with the actual internal data | |
461 structure. */ | |
462 typedef TC_HCB NU_HISR; | |
463 #endif | |
464 | |
465 | |
466 #ifndef NU_DEBUG | |
467 | |
468 /* Define mailbox control data structure with all internal information | |
469 hidden. */ | |
470 typedef struct NU_MAILBOX_STRUCT | |
471 { | |
472 UNSIGNED words[NU_MAILBOX_SIZE]; | |
473 } NU_MAILBOX; | |
474 #else | |
475 | |
476 /* Define mailbox control data structure with the actual internal data | |
477 structure. */ | |
478 typedef MB_MCB NU_MAILBOX; | |
479 #endif | |
480 | |
481 | |
482 #ifndef NU_DEBUG | |
483 | |
484 /* Define queue control data structure with all internal information | |
485 hidden. */ | |
486 typedef struct NU_QUEUE_STRUCT | |
487 { | |
488 UNSIGNED words[NU_QUEUE_SIZE]; | |
489 } NU_QUEUE; | |
490 #else | |
491 | |
492 /* Define queue control data structure with the actual internal data | |
493 structure. */ | |
494 typedef QU_QCB NU_QUEUE; | |
495 #endif | |
496 | |
497 | |
498 #ifndef NU_DEBUG | |
499 | |
500 /* Define pipe control data structure with all internal information | |
501 hidden. */ | |
502 typedef struct NU_PIPE_STRUCT | |
503 { | |
504 UNSIGNED words[NU_PIPE_SIZE]; | |
505 } NU_PIPE; | |
506 #else | |
507 | |
508 /* Define pipe control data structure with the actual internal data | |
509 structure. */ | |
510 typedef PI_PCB NU_PIPE; | |
511 #endif | |
512 | |
513 | |
514 #ifndef NU_DEBUG | |
515 | |
516 /* Define semaphore control data structure with all internal information | |
517 hidden. */ | |
518 typedef struct NU_SEMAPHORE_STRUCT | |
519 { | |
520 UNSIGNED words[NU_SEMAPHORE_SIZE]; | |
521 } NU_SEMAPHORE; | |
522 #else | |
523 | |
524 /* Define semaphore control data structure with the actual internal data | |
525 structure. */ | |
526 typedef SM_SCB NU_SEMAPHORE; | |
527 #endif | |
528 | |
529 | |
530 #ifndef NU_DEBUG | |
531 | |
532 /* Define event group control data structure with all internal information | |
533 hidden. */ | |
534 typedef struct NU_EVENT_GROUP_STRUCT | |
535 { | |
536 UNSIGNED words[NU_EVENT_GROUP_SIZE]; | |
537 } NU_EVENT_GROUP; | |
538 #else | |
539 | |
540 /* Define event group control data structure with the actual internal data | |
541 structure. */ | |
542 typedef EV_GCB NU_EVENT_GROUP; | |
543 #endif | |
544 | |
545 | |
546 #ifndef NU_DEBUG | |
547 | |
548 /* Define partition pool control data structure with all internal | |
549 information hidden. */ | |
550 typedef struct NU_PARTITION_POOL_STRUCT | |
551 { | |
552 UNSIGNED words[NU_PARTITION_POOL_SIZE]; | |
553 } NU_PARTITION_POOL; | |
554 #else | |
555 | |
556 /* Define partition pool control data structure with the actual internal | |
557 data structure. */ | |
558 typedef PM_PCB NU_PARTITION_POOL; | |
559 #endif | |
560 | |
561 | |
562 #ifndef NU_DEBUG | |
563 | |
564 /* Define memory pool control data structure with all internal information | |
565 hidden. */ | |
566 typedef struct NU_MEMORY_POOL_STRUCT | |
567 { | |
568 UNSIGNED words[NU_MEMORY_POOL_SIZE]; | |
569 } NU_MEMORY_POOL; | |
570 #else | |
571 | |
572 /* Define memory pool control data structure with the actual internal data | |
573 structure. */ | |
574 typedef DM_PCB NU_MEMORY_POOL; | |
575 #endif | |
576 | |
577 | |
578 #ifndef NU_DEBUG | |
579 | |
580 /* Define timer control data structure with all internal information | |
581 hidden. */ | |
582 typedef struct NU_TIMER_STRUCT | |
583 { | |
584 UNSIGNED words[NU_TIMER_SIZE]; | |
585 } NU_TIMER; | |
586 #else | |
587 | |
588 /* Define timer control data structure with the actual internal data | |
589 structure. */ | |
590 typedef TM_APP_TCB NU_TIMER; | |
591 #endif | |
592 | |
593 | |
594 #ifndef NU_DEBUG | |
595 | |
596 /* Define protect control data structure with all internal information | |
597 hidden. */ | |
598 typedef struct NU_PROTECT_STRUCT | |
599 { | |
600 UNSIGNED words[NU_PROTECT_SIZE]; | |
601 } NU_PROTECT; | |
602 #else | |
603 | |
604 /* Define protect control data structure with the actual internal data | |
605 structure. */ | |
606 typedef TC_PROTECT NU_PROTECT; | |
607 #endif | |
608 | |
609 | |
610 | |
611 /* Define I/O driver request structures. */ | |
612 | |
613 struct NU_INITIALIZE_STRUCT | |
614 { | |
615 VOID *nu_io_address; /* Base IO address */ | |
616 UNSIGNED nu_logical_units; /* Number of logical units */ | |
617 VOID *nu_memory; /* Generic memory pointer */ | |
618 INT nu_vector; /* Interrupt vector number */ | |
619 }; | |
620 | |
621 struct NU_ASSIGN_STRUCT | |
622 { | |
623 UNSIGNED nu_logical_unit; /* Logical unit number */ | |
624 INT nu_assign_info; /* Additional assign info */ | |
625 }; | |
626 | |
627 struct NU_RELEASE_STRUCT | |
628 { | |
629 UNSIGNED nu_logical_unit; /* Logical unit number */ | |
630 INT nu_release_info; /* Additional release info */ | |
631 }; | |
632 | |
633 struct NU_INPUT_STRUCT | |
634 { | |
635 UNSIGNED nu_logical_unit; /* Logical unit number */ | |
636 UNSIGNED nu_offset; /* Offset of input */ | |
637 UNSIGNED nu_request_size; /* Requested input size */ | |
638 UNSIGNED nu_actual_size; /* Actual input size */ | |
639 VOID *nu_buffer_ptr; /* Input buffer pointer */ | |
640 }; | |
641 | |
642 struct NU_OUTPUT_STRUCT | |
643 { | |
644 UNSIGNED nu_logical_unit; /* Logical unit number */ | |
645 UNSIGNED nu_offset; /* Offset of output */ | |
646 UNSIGNED nu_request_size; /* Requested output size */ | |
647 UNSIGNED nu_actual_size; /* Actual output size */ | |
648 VOID *nu_buffer_ptr; /* Output buffer pointer */ | |
649 }; | |
650 | |
651 struct NU_STATUS_STRUCT | |
652 { | |
653 UNSIGNED nu_logical_unit; /* Logical unit number */ | |
654 VOID *nu_extra_status; /* Additional status ptr */ | |
655 }; | |
656 | |
657 struct NU_TERMINATE_STRUCT | |
658 { | |
659 UNSIGNED nu_logical_unit; /* Logical unit number */ | |
660 }; | |
661 | |
662 | |
663 typedef union NU_REQUEST_INFO_UNION | |
664 { | |
665 struct NU_INITIALIZE_STRUCT nu_initialize; | |
666 struct NU_ASSIGN_STRUCT nu_assign; | |
667 struct NU_RELEASE_STRUCT nu_release; | |
668 struct NU_INPUT_STRUCT nu_input; | |
669 struct NU_OUTPUT_STRUCT nu_output; | |
670 struct NU_STATUS_STRUCT nu_status; | |
671 struct NU_TERMINATE_STRUCT nu_terminate; | |
672 } nu_request_info_union; | |
673 | |
674 typedef struct NU_DRIVER_REQUEST_STRUCT | |
675 { | |
676 INT nu_function; /* I/O request function */ | |
677 UNSIGNED nu_timeout; /* Timeout on request */ | |
678 STATUS nu_status; /* Status of request */ | |
679 UNSIGNED nu_supplemental; /* Supplemental information */ | |
680 VOID *nu_supplemental_ptr; /* Supplemental info pointer*/ | |
681 nu_request_info_union nu_request_info; | |
682 | |
683 } NU_DRIVER_REQUEST; | |
684 | |
685 typedef struct NU_DRIVER_STRUCT | |
686 { | |
687 UNSIGNED words[NU_DRIVER_SIZE]; /* CS_NODE_STRUCT */ | |
688 CHAR nu_driver_name[NU_MAX_NAME]; | |
689 VOID *nu_info_ptr; | |
690 UNSIGNED nu_driver_id; | |
691 VOID (*nu_driver_entry)(struct NU_DRIVER_STRUCT *, | |
692 NU_DRIVER_REQUEST *); | |
693 } NU_DRIVER; | |
694 | |
695 | |
696 /* Define Nucleus PLUS system interfaces. */ | |
697 | |
698 VOID Application_Initialize(VOID *first_available_memory); | |
699 | |
700 | |
701 /* The following area is only applicable to application files and is skipped | |
702 during compilation of Nucleus PLUS source files. */ | |
703 #ifndef NU_SOURCE_FILE | |
704 | |
705 /* Re-map task control functions depending on whether or not error checking | |
706 is specified. */ | |
707 | |
708 #ifdef NU_NO_ERROR_CHECKING | |
709 #define NU_Create_Task TCC_Create_Task | |
710 #define NU_Delete_Task TCC_Delete_Task | |
711 #define NU_Reset_Task TCC_Reset_Task | |
712 #define NU_Terminate_Task TCC_Terminate_Task | |
713 #define NU_Resume_Task TCC_Resume_Service | |
714 #define NU_Suspend_Task TCC_Suspend_Service | |
715 #define NU_Relinquish TCC_Relinquish | |
716 #define NU_Sleep TCC_Task_Sleep | |
717 #define NU_Change_Priority TCS_Change_Priority | |
718 #define NU_Change_Preemption TCS_Change_Preemption | |
719 #define NU_Change_Time_Slice TCS_Change_Time_Slice | |
720 #define NU_Check_Stack TCT_Check_Stack | |
721 #define NU_Current_Task_Pointer TCC_Current_Task_Pointer | |
722 #define NU_Established_Tasks TCF_Established_Tasks | |
723 #define NU_Task_Information TCF_Task_Information | |
724 #define NU_Task_Pointers TCF_Task_Pointers | |
725 #define NU_Create_Mailbox MBC_Create_Mailbox | |
726 #define NU_Delete_Mailbox MBC_Delete_Mailbox | |
727 #define NU_Reset_Mailbox MBS_Reset_Mailbox | |
728 #define NU_Send_To_Mailbox MBC_Send_To_Mailbox | |
729 #define NU_Broadcast_To_Mailbox MBS_Broadcast_To_Mailbox | |
730 #define NU_Receive_From_Mailbox MBC_Receive_From_Mailbox | |
731 #define NU_Established_Mailboxes MBF_Established_Mailboxes | |
732 #define NU_Mailbox_Information MBF_Mailbox_Information | |
733 #define NU_Mailbox_Pointers MBF_Mailbox_Pointers | |
734 #define NU_Create_Queue QUC_Create_Queue | |
735 #define NU_Delete_Queue QUC_Delete_Queue | |
736 #define NU_Reset_Queue QUS_Reset_Queue | |
737 #define NU_Send_To_Front_Of_Queue QUS_Send_To_Front_Of_Queue | |
738 #define NU_Send_To_Queue QUC_Send_To_Queue | |
739 #define NU_Broadcast_To_Queue QUS_Broadcast_To_Queue | |
740 #define NU_Receive_From_Queue QUC_Receive_From_Queue | |
741 #define NU_Established_Queues QUF_Established_Queues | |
742 #define NU_Queue_Information QUF_Queue_Information | |
743 #define NU_Queue_Pointers QUF_Queue_Pointers | |
744 #define NU_Create_Pipe PIC_Create_Pipe | |
745 #define NU_Delete_Pipe PIC_Delete_Pipe | |
746 #define NU_Reset_Pipe PIS_Reset_Pipe | |
747 #define NU_Send_To_Front_Of_Pipe PIS_Send_To_Front_Of_Pipe | |
748 #define NU_Send_To_Pipe PIC_Send_To_Pipe | |
749 #define NU_Broadcast_To_Pipe PIS_Broadcast_To_Pipe | |
750 #define NU_Receive_From_Pipe PIC_Receive_From_Pipe | |
751 #define NU_Established_Pipes PIF_Established_Pipes | |
752 #define NU_Pipe_Information PIF_Pipe_Information | |
753 #define NU_Pipe_Pointers PIF_Pipe_Pointers | |
754 #define NU_Create_Semaphore SMC_Create_Semaphore | |
755 #define NU_Delete_Semaphore SMC_Delete_Semaphore | |
756 #define NU_Reset_Semaphore SMS_Reset_Semaphore | |
757 #define NU_Obtain_Semaphore SMC_Obtain_Semaphore | |
758 #define NU_Release_Semaphore SMC_Release_Semaphore | |
759 #define NU_Established_Semaphores SMF_Established_Semaphores | |
760 #define NU_Semaphore_Information SMF_Semaphore_Information | |
761 #define NU_Semaphore_Pointers SMF_Semaphore_Pointers | |
762 #define NU_Create_Event_Group EVC_Create_Event_Group | |
763 #define NU_Delete_Event_Group EVC_Delete_Event_Group | |
764 #define NU_Set_Events EVC_Set_Events | |
765 #define NU_Retrieve_Events EVC_Retrieve_Events | |
766 #define NU_Established_Event_Groups EVF_Established_Event_Groups | |
767 #define NU_Event_Group_Information EVF_Event_Group_Information | |
768 #define NU_Event_Group_Pointers EVF_Event_Group_Pointers | |
769 #define NU_Create_Partition_Pool PMC_Create_Partition_Pool | |
770 #define NU_Delete_Partition_Pool PMC_Delete_Partition_Pool | |
771 #define NU_Allocate_Partition PMC_Allocate_Partition | |
772 #define NU_Deallocate_Partition PMC_Deallocate_Partition | |
773 #define NU_Established_Partition_Pools PMF_Established_Partition_Pools | |
774 #define NU_Partition_Pool_Information PMF_Partition_Pool_Information | |
775 #define NU_Partition_Pool_Pointers PMF_Partition_Pool_Pointers | |
776 #define NU_Create_Memory_Pool DMC_Create_Memory_Pool | |
777 #define NU_Delete_Memory_Pool DMC_Delete_Memory_Pool | |
778 #define NU_Allocate_Memory DMC_Allocate_Memory | |
779 #define NU_Deallocate_Memory DMC_Deallocate_Memory | |
780 #define NU_Established_Memory_Pools DMF_Established_Memory_Pools | |
781 #define NU_Memory_Pool_Information DMF_Memory_Pool_Information | |
782 #define NU_Memory_Pool_Pointers DMF_Memory_Pool_Pointers | |
783 #define NU_Control_Signals TCS_Control_Signals | |
784 #define NU_Receive_Signals TCS_Receive_Signals | |
785 #define NU_Register_Signal_Handler TCS_Register_Signal_Handler | |
786 #define NU_Send_Signals TCS_Send_Signals | |
787 #define NU_Setup_Vector INT_Setup_Vector | |
788 #define NU_Register_LISR TCC_Register_LISR | |
789 #define NU_Activate_HISR TCT_Activate_HISR | |
790 #define NU_Create_HISR TCC_Create_HISR | |
791 #define NU_Delete_HISR TCC_Delete_HISR | |
792 #define NU_Current_HISR_Pointer TCC_Current_HISR_Pointer | |
793 #define NU_Established_HISRs TCF_Established_HISRs | |
794 #define NU_HISR_Pointers TCF_HISR_Pointers | |
795 #define NU_HISR_Information TCF_HISR_Information | |
796 #define NU_Protect TCT_Protect | |
797 #define NU_Unprotect TCT_Unprotect | |
798 #define NU_Control_Interrupts TCT_Control_Interrupts | |
799 #define NU_Local_Control_Interrupts TCT_Local_Control_Interrupts | |
800 #define NU_Restore_Interrupts TCT_Restore_Interrupts | |
801 #define NU_Set_Clock TMT_Set_Clock | |
802 #define NU_Retrieve_Clock TMT_Retrieve_Clock | |
803 #define NU_Create_Timer TMS_Create_Timer | |
804 #define NU_Delete_Timer TMS_Delete_Timer | |
805 #define NU_Control_Timer TMS_Control_Timer | |
806 #define NU_Reset_Timer TMS_Reset_Timer | |
807 #define NU_Established_Timers TMF_Established_Timers | |
808 #define NU_Timer_Pointers TMF_Timer_Pointers | |
809 #define NU_Timer_Information TMF_Timer_Information | |
810 #define NU_Get_Remaining_Time TMF_Get_Remaining_Time | |
811 #define NU_Release_Information RLC_Release_Information | |
812 #define NU_License_Information LIC_License_Information | |
813 #define NU_Disable_History_Saving HIC_Disable_History_Saving | |
814 #define NU_Enable_History_Saving HIC_Enable_History_Saving | |
815 #define NU_Make_History_Entry HIC_Make_History_Entry_Service | |
816 #define NU_Retrieve_History_Entry HIC_Retrieve_History_Entry | |
817 #define NU_Create_Driver IOC_Create_Driver | |
818 #define NU_Delete_Driver IOC_Delete_Driver | |
819 #define NU_Request_Driver IOC_Request_Driver | |
820 #define NU_Resume_Driver IOC_Resume_Driver | |
821 #define NU_Suspend_Driver IOC_Suspend_Driver | |
822 #define NU_Established_Drivers IOF_Established_Drivers | |
823 #define NU_Driver_Pointers IOF_Driver_Pointers | |
824 #else | |
825 #define NU_Create_Task TCCE_Create_Task | |
826 #define NU_Delete_Task TCCE_Delete_Task | |
827 #define NU_Reset_Task TCCE_Reset_Task | |
828 #define NU_Terminate_Task TCCE_Terminate_Task | |
829 #define NU_Resume_Task TCCE_Resume_Service | |
830 #define NU_Suspend_Task TCCE_Suspend_Service | |
831 #define NU_Relinquish TCCE_Relinquish | |
832 #define NU_Sleep TCCE_Task_Sleep | |
833 #define NU_Change_Priority TCSE_Change_Priority | |
834 #define NU_Change_Preemption TCSE_Change_Preemption | |
835 #define NU_Change_Time_Slice TCSE_Change_Time_Slice | |
836 #define NU_Check_Stack TCT_Check_Stack | |
837 #define NU_Current_Task_Pointer TCC_Current_Task_Pointer | |
838 #define NU_Established_Tasks TCF_Established_Tasks | |
839 #define NU_Task_Information TCFE_Task_Information | |
840 #define NU_Task_Pointers TCF_Task_Pointers | |
841 #define NU_Create_Mailbox MBCE_Create_Mailbox | |
842 #define NU_Delete_Mailbox MBCE_Delete_Mailbox | |
843 #define NU_Reset_Mailbox MBSE_Reset_Mailbox | |
844 #define NU_Send_To_Mailbox MBCE_Send_To_Mailbox | |
845 #define NU_Broadcast_To_Mailbox MBSE_Broadcast_To_Mailbox | |
846 #define NU_Receive_From_Mailbox MBCE_Receive_From_Mailbox | |
847 #define NU_Established_Mailboxes MBF_Established_Mailboxes | |
848 #define NU_Mailbox_Information MBF_Mailbox_Information | |
849 #define NU_Mailbox_Pointers MBF_Mailbox_Pointers | |
850 #define NU_Create_Queue QUCE_Create_Queue | |
851 #define NU_Delete_Queue QUCE_Delete_Queue | |
852 #define NU_Reset_Queue QUSE_Reset_Queue | |
853 #define NU_Send_To_Queue QUCE_Send_To_Queue | |
854 #define NU_Send_To_Front_Of_Queue QUSE_Send_To_Front_Of_Queue | |
855 #define NU_Broadcast_To_Queue QUSE_Broadcast_To_Queue | |
856 #define NU_Receive_From_Queue QUCE_Receive_From_Queue | |
857 #define NU_Established_Queues QUF_Established_Queues | |
858 #define NU_Queue_Information QUF_Queue_Information | |
859 #define NU_Queue_Pointers QUF_Queue_Pointers | |
860 #define NU_Create_Pipe PICE_Create_Pipe | |
861 #define NU_Delete_Pipe PICE_Delete_Pipe | |
862 #define NU_Reset_Pipe PISE_Reset_Pipe | |
863 #define NU_Send_To_Front_Of_Pipe PISE_Send_To_Front_Of_Pipe | |
864 #define NU_Send_To_Pipe PICE_Send_To_Pipe | |
865 #define NU_Broadcast_To_Pipe PISE_Broadcast_To_Pipe | |
866 #define NU_Receive_From_Pipe PICE_Receive_From_Pipe | |
867 #define NU_Established_Pipes PIF_Established_Pipes | |
868 #define NU_Pipe_Information PIF_Pipe_Information | |
869 #define NU_Pipe_Pointers PIF_Pipe_Pointers | |
870 #define NU_Create_Semaphore SMCE_Create_Semaphore | |
871 #define NU_Delete_Semaphore SMCE_Delete_Semaphore | |
872 #define NU_Reset_Semaphore SMSE_Reset_Semaphore | |
873 #define NU_Obtain_Semaphore SMCE_Obtain_Semaphore | |
874 #define NU_Release_Semaphore SMCE_Release_Semaphore | |
875 #define NU_Established_Semaphores SMF_Established_Semaphores | |
876 #define NU_Semaphore_Information SMF_Semaphore_Information | |
877 #define NU_Semaphore_Pointers SMF_Semaphore_Pointers | |
878 #define NU_Create_Event_Group EVCE_Create_Event_Group | |
879 #define NU_Delete_Event_Group EVCE_Delete_Event_Group | |
880 #define NU_Set_Events EVCE_Set_Events | |
881 #define NU_Retrieve_Events EVCE_Retrieve_Events | |
882 #define NU_Established_Event_Groups EVF_Established_Event_Groups | |
883 #define NU_Event_Group_Information EVF_Event_Group_Information | |
884 #define NU_Event_Group_Pointers EVF_Event_Group_Pointers | |
885 #define NU_Create_Partition_Pool PMCE_Create_Partition_Pool | |
886 #define NU_Delete_Partition_Pool PMCE_Delete_Partition_Pool | |
887 #define NU_Allocate_Partition PMCE_Allocate_Partition | |
888 #define NU_Deallocate_Partition PMCE_Deallocate_Partition | |
889 #define NU_Established_Partition_Pools PMF_Established_Partition_Pools | |
890 #define NU_Partition_Pool_Information PMF_Partition_Pool_Information | |
891 #define NU_Partition_Pool_Pointers PMF_Partition_Pool_Pointers | |
892 #define NU_Create_Memory_Pool DMCE_Create_Memory_Pool | |
893 #define NU_Delete_Memory_Pool DMCE_Delete_Memory_Pool | |
894 | |
895 /* The following conditional routes memory allocation calls to functions | |
896 that help track memory leaks. */ | |
897 #ifdef NU_DEBUG_MEMORY | |
898 #define NU_Deallocate_Memory ERC_Deallocate_Memory | |
899 #else | |
900 #define NU_Deallocate_Memory DMCE_Deallocate_Memory | |
901 #endif /* NU_DEBUG_MEMORY */ | |
902 | |
903 #define NU_Established_Memory_Pools DMF_Established_Memory_Pools | |
904 #define NU_Memory_Pool_Information DMF_Memory_Pool_Information | |
905 #define NU_Memory_Pool_Pointers DMF_Memory_Pool_Pointers | |
906 #define NU_Control_Signals TCSE_Control_Signals | |
907 #define NU_Receive_Signals TCSE_Receive_Signals | |
908 #define NU_Register_Signal_Handler TCSE_Register_Signal_Handler | |
909 #define NU_Send_Signals TCSE_Send_Signals | |
910 #define NU_Setup_Vector INT_Setup_Vector | |
911 #define NU_Register_LISR TCC_Register_LISR | |
912 #define NU_Activate_HISR TCCE_Activate_HISR | |
913 #define NU_Create_HISR TCCE_Create_HISR | |
914 #define NU_Delete_HISR TCCE_Delete_HISR | |
915 #define NU_Current_HISR_Pointer TCC_Current_HISR_Pointer | |
916 #define NU_Established_HISRs TCF_Established_HISRs | |
917 #define NU_HISR_Pointers TCF_HISR_Pointers | |
918 #define NU_HISR_Information TCF_HISR_Information | |
919 #define NU_Protect TCT_Protect | |
920 #define NU_Unprotect TCT_Unprotect | |
921 #define NU_Control_Interrupts TCT_Control_Interrupts | |
922 #define NU_Local_Control_Interrupts TCT_Local_Control_Interrupts | |
923 #define NU_Restore_Interrupts TCT_Restore_Interrupts | |
924 #define NU_Set_Clock TMT_Set_Clock | |
925 #define NU_Retrieve_Clock TMT_Retrieve_Clock | |
926 #define NU_Create_Timer TMSE_Create_Timer | |
927 #define NU_Delete_Timer TMSE_Delete_Timer | |
928 #define NU_Control_Timer TMSE_Control_Timer | |
929 #define NU_Reset_Timer TMSE_Reset_Timer | |
930 #define NU_Established_Timers TMF_Established_Timers | |
931 #define NU_Timer_Pointers TMF_Timer_Pointers | |
932 #define NU_Timer_Information TMF_Timer_Information | |
933 #define NU_Get_Remaining_Time TMF_Get_Remaining_Time | |
934 #define NU_Release_Information RLC_Release_Information | |
935 #define NU_License_Information LIC_License_Information | |
936 #define NU_Disable_History_Saving HIC_Disable_History_Saving | |
937 #define NU_Enable_History_Saving HIC_Enable_History_Saving | |
938 #define NU_Make_History_Entry HIC_Make_History_Entry_Service | |
939 #define NU_Retrieve_History_Entry HIC_Retrieve_History_Entry | |
940 #define NU_Create_Driver IOCE_Create_Driver | |
941 #define NU_Delete_Driver IOCE_Delete_Driver | |
942 #define NU_Request_Driver IOCE_Request_Driver | |
943 #define NU_Resume_Driver IOCE_Resume_Driver | |
944 #define NU_Suspend_Driver IOCE_Suspend_Driver | |
945 #define NU_Established_Drivers IOF_Established_Drivers | |
946 #define NU_Driver_Pointers IOF_Driver_Pointers | |
947 #endif | |
948 | |
949 | |
950 /* Define task control functions. */ | |
951 | |
952 STATUS NU_Create_Task(NU_TASK *task, CHAR *name, | |
953 VOID (*task_entry)(UNSIGNED, VOID *), UNSIGNED argc, | |
954 VOID *argv, VOID *stack_address, UNSIGNED stack_size, | |
955 OPTION priority, UNSIGNED time_slice, | |
956 OPTION preempt, OPTION auto_start); | |
957 STATUS NU_Delete_Task(NU_TASK *task); | |
958 STATUS NU_Reset_Task(NU_TASK *task, UNSIGNED argc, VOID *argv); | |
959 STATUS NU_Terminate_Task(NU_TASK *task); | |
960 STATUS NU_Resume_Task(NU_TASK *task); | |
961 STATUS NU_Suspend_Task(NU_TASK *task); | |
962 VOID NU_Relinquish(VOID); | |
963 VOID NU_Sleep(UNSIGNED ticks); | |
964 OPTION NU_Change_Priority(NU_TASK *task, OPTION new_priority); | |
965 OPTION NU_Change_Preemption(OPTION preempt); | |
966 UNSIGNED NU_Change_Time_Slice(NU_TASK *task, UNSIGNED time_slice); | |
967 UNSIGNED NU_Check_Stack(VOID); | |
968 NU_TASK *NU_Current_Task_Pointer(VOID); | |
969 UNSIGNED NU_Established_Tasks(VOID); | |
970 STATUS NU_Task_Information(NU_TASK *task, CHAR *name, | |
971 DATA_ELEMENT *status, UNSIGNED *scheduled_count, | |
972 OPTION *priority, OPTION *preempt, | |
973 UNSIGNED *time_slice, VOID **stack_base, | |
974 UNSIGNED *stack_size, UNSIGNED *minimum_stack); | |
975 UNSIGNED NU_Task_Pointers(NU_TASK **pointer_list, | |
976 UNSIGNED maximum_pointers); | |
977 | |
978 /* Define Mailbox management functions. */ | |
979 | |
980 STATUS NU_Create_Mailbox(NU_MAILBOX *mailbox, CHAR *name, | |
981 OPTION suspend_type); | |
982 STATUS NU_Delete_Mailbox(NU_MAILBOX *mailbox); | |
983 STATUS NU_Reset_Mailbox(NU_MAILBOX *mailbox); | |
984 STATUS NU_Send_To_Mailbox(NU_MAILBOX *mailbox, VOID *message, | |
985 UNSIGNED suspend); | |
986 STATUS NU_Broadcast_To_Mailbox(NU_MAILBOX *mailbox, VOID *message, | |
987 UNSIGNED suspend); | |
988 STATUS NU_Receive_From_Mailbox(NU_MAILBOX *mailbox, VOID *message, | |
989 UNSIGNED suspend); | |
990 UNSIGNED NU_Established_Mailboxes(VOID); | |
991 STATUS NU_Mailbox_Information(NU_MAILBOX *mailbox, CHAR *name, | |
992 OPTION *suspend_type, OPTION *message_present, | |
993 UNSIGNED *tasks_waiting, NU_TASK **first_task); | |
994 UNSIGNED NU_Mailbox_Pointers(NU_MAILBOX **pointer_list, | |
995 UNSIGNED maximum_pointers); | |
996 | |
997 /* Define Queue management functions. */ | |
998 | |
999 STATUS NU_Create_Queue(NU_QUEUE *queue, CHAR *name, | |
1000 VOID *start_address, UNSIGNED queue_size, | |
1001 OPTION message_type, UNSIGNED message_size, | |
1002 OPTION suspend_type); | |
1003 STATUS NU_Delete_Queue(NU_QUEUE *queue); | |
1004 STATUS NU_Reset_Queue(NU_QUEUE *queue); | |
1005 STATUS NU_Send_To_Front_Of_Queue(NU_QUEUE *queue, VOID *message, | |
1006 UNSIGNED size, UNSIGNED suspend); | |
1007 STATUS NU_Send_To_Queue(NU_QUEUE *queue, VOID *message, | |
1008 UNSIGNED size, UNSIGNED suspend); | |
1009 STATUS NU_Broadcast_To_Queue(NU_QUEUE *queue, VOID *message, | |
1010 UNSIGNED size, UNSIGNED suspend); | |
1011 STATUS NU_Receive_From_Queue(NU_QUEUE *queue, VOID *message, | |
1012 UNSIGNED size, UNSIGNED *actual_size, UNSIGNED suspend); | |
1013 UNSIGNED NU_Established_Queues(VOID); | |
1014 STATUS NU_Queue_Information(NU_QUEUE *queue, CHAR *name, | |
1015 VOID **start_address, UNSIGNED *queue_size, | |
1016 UNSIGNED *available, UNSIGNED *messages, | |
1017 OPTION *message_type, UNSIGNED *message_size, | |
1018 OPTION *suspend_type, UNSIGNED *tasks_waiting, | |
1019 NU_TASK **first_task); | |
1020 UNSIGNED NU_Queue_Pointers(NU_QUEUE **pointer_list, | |
1021 UNSIGNED maximum_pointers); | |
1022 | |
1023 /* Define Pipe management functions. */ | |
1024 | |
1025 STATUS NU_Create_Pipe(NU_PIPE *pipe, CHAR *name, | |
1026 VOID *start_address, UNSIGNED pipe_size, | |
1027 OPTION message_type, UNSIGNED message_size, | |
1028 OPTION suspend_type); | |
1029 STATUS NU_Delete_Pipe(NU_PIPE *pipe); | |
1030 STATUS NU_Reset_Pipe(NU_PIPE *pipe); | |
1031 STATUS NU_Send_To_Front_Of_Pipe(NU_PIPE *pipe, VOID *message, | |
1032 UNSIGNED size, UNSIGNED suspend); | |
1033 STATUS NU_Send_To_Pipe(NU_PIPE *pipe, VOID *message, | |
1034 UNSIGNED size, UNSIGNED suspend); | |
1035 STATUS NU_Broadcast_To_Pipe(NU_PIPE *pipe, VOID *message, | |
1036 UNSIGNED size, UNSIGNED suspend); | |
1037 STATUS NU_Receive_From_Pipe(NU_PIPE *pipe, VOID *message, | |
1038 UNSIGNED size, UNSIGNED *actual_size, UNSIGNED suspend); | |
1039 UNSIGNED NU_Established_Pipes(VOID); | |
1040 STATUS NU_Pipe_Information(NU_PIPE *pipe, CHAR *name, | |
1041 VOID **start_address, UNSIGNED *pipe_size, | |
1042 UNSIGNED *available, UNSIGNED *messages, | |
1043 OPTION *message_type, UNSIGNED *message_size, | |
1044 OPTION *suspend_type, UNSIGNED *tasks_waiting, | |
1045 NU_TASK **first_task); | |
1046 UNSIGNED NU_Pipe_Pointers(NU_PIPE **pointer_list, | |
1047 UNSIGNED maximum_pointers); | |
1048 | |
1049 /* Define Semaphore management functions. */ | |
1050 | |
1051 STATUS NU_Create_Semaphore(NU_SEMAPHORE *semaphore, CHAR *name, | |
1052 UNSIGNED initial_count, OPTION suspend_type); | |
1053 STATUS NU_Delete_Semaphore(NU_SEMAPHORE *semaphore); | |
1054 STATUS NU_Reset_Semaphore(NU_SEMAPHORE *semaphore, | |
1055 UNSIGNED initial_count); | |
1056 STATUS NU_Obtain_Semaphore(NU_SEMAPHORE *semaphore, UNSIGNED suspend); | |
1057 STATUS NU_Release_Semaphore(NU_SEMAPHORE *semaphore); | |
1058 UNSIGNED NU_Established_Semaphores(VOID); | |
1059 STATUS NU_Semaphore_Information(NU_SEMAPHORE *semaphore, CHAR *name, | |
1060 UNSIGNED *current_count, OPTION *suspend_type, | |
1061 UNSIGNED *tasks_waiting, NU_TASK **first_task); | |
1062 UNSIGNED NU_Semaphore_Pointers(NU_SEMAPHORE **pointer_list, | |
1063 UNSIGNED maximum_pointers); | |
1064 | |
1065 /* Define Event Group management functions. */ | |
1066 | |
1067 STATUS NU_Create_Event_Group(NU_EVENT_GROUP *group, CHAR *name); | |
1068 STATUS NU_Delete_Event_Group(NU_EVENT_GROUP *group); | |
1069 STATUS NU_Set_Events(NU_EVENT_GROUP *group, UNSIGNED events, | |
1070 OPTION operation); | |
1071 STATUS NU_Retrieve_Events(NU_EVENT_GROUP *group, | |
1072 UNSIGNED requested_flags, OPTION operation, | |
1073 UNSIGNED *retrieved_flags, UNSIGNED suspend); | |
1074 UNSIGNED NU_Established_Event_Groups(VOID); | |
1075 STATUS NU_Event_Group_Information(NU_EVENT_GROUP *group, CHAR *name, | |
1076 UNSIGNED *event_flags, UNSIGNED *tasks_waiting, | |
1077 NU_TASK **first_task); | |
1078 UNSIGNED NU_Event_Group_Pointers(NU_EVENT_GROUP **pointer_list, | |
1079 UNSIGNED maximum_pointers); | |
1080 | |
1081 /* Define Signal processing functions. */ | |
1082 | |
1083 UNSIGNED NU_Control_Signals(UNSIGNED signal_enable_mask); | |
1084 UNSIGNED NU_Receive_Signals(VOID); | |
1085 STATUS NU_Register_Signal_Handler(VOID (*signal_handler)(UNSIGNED)); | |
1086 STATUS NU_Send_Signals(NU_TASK *task, UNSIGNED signals); | |
1087 | |
1088 /* Define Partition memory management functions. */ | |
1089 | |
1090 STATUS NU_Create_Partition_Pool(NU_PARTITION_POOL *pool, CHAR *name, | |
1091 VOID *start_address, UNSIGNED pool_size, | |
1092 UNSIGNED partition_size, OPTION suspend_type); | |
1093 STATUS NU_Delete_Partition_Pool(NU_PARTITION_POOL *pool); | |
1094 STATUS NU_Allocate_Partition(NU_PARTITION_POOL *pool, | |
1095 VOID **return_pointer, UNSIGNED suspend); | |
1096 STATUS NU_Deallocate_Partition(VOID *partition); | |
1097 UNSIGNED NU_Established_Partition_Pools(VOID); | |
1098 STATUS NU_Partition_Pool_Information(NU_PARTITION_POOL *pool, | |
1099 CHAR *name, | |
1100 VOID **start_address, UNSIGNED *pool_size, | |
1101 UNSIGNED *partition_size, UNSIGNED *available, | |
1102 UNSIGNED *allocated, OPTION *suspend_type, | |
1103 UNSIGNED *tasks_waiting, NU_TASK **first_task); | |
1104 UNSIGNED NU_Partition_Pool_Pointers(NU_PARTITION_POOL **pointer_list, | |
1105 UNSIGNED maximum_pointers); | |
1106 | |
1107 /* Define Dynamic memory management functions. */ | |
1108 | |
1109 STATUS NU_Create_Memory_Pool(NU_MEMORY_POOL *pool, CHAR *name, | |
1110 VOID *start_address, UNSIGNED pool_size, | |
1111 UNSIGNED min_allocation, OPTION suspend_type); | |
1112 STATUS NU_Delete_Memory_Pool(NU_MEMORY_POOL *pool); | |
1113 | |
1114 STATUS NU_Allocate_Memory(NU_MEMORY_POOL *pool, VOID **return_pointer, | |
1115 UNSIGNED size, UNSIGNED suspend); | |
1116 | |
1117 /* The following conditional routes memory allocation calls to functions | |
1118 that help track memory leaks. */ | |
1119 #ifdef NU_DEBUG_MEMORY | |
1120 #define NU_Allocate_Memory(a,b,c,d) ERC_Allocate_Memory(a,b,c,d,__LINE__,__FILE__) | |
1121 #else | |
1122 #define NU_Allocate_Memory DMCE_Allocate_Memory | |
1123 #endif /* NU_DEBUG_MEMORY */ | |
1124 | |
1125 STATUS NU_Deallocate_Memory(VOID *memory); | |
1126 UNSIGNED NU_Established_Memory_Pools(VOID); | |
1127 STATUS NU_Memory_Pool_Information(NU_MEMORY_POOL *pool, CHAR *name, | |
1128 VOID **start_address, UNSIGNED *pool_size, | |
1129 UNSIGNED *min_allocation, UNSIGNED *available, | |
1130 OPTION *suspend_type, UNSIGNED *tasks_waiting, | |
1131 NU_TASK **first_task); | |
1132 UNSIGNED NU_Memory_Pool_Pointers(NU_MEMORY_POOL **pointer_list, | |
1133 UNSIGNED maximum_pointers); | |
1134 | |
1135 /* Define Interrupt management functions. */ | |
1136 | |
1137 INT NU_Control_Interrupts(INT new_level); | |
1138 INT NU_Local_Control_Interrupts(INT new_level); | |
1139 VOID NU_Restore_Interrupts(VOID); | |
1140 VOID *NU_Setup_Vector(INT vector, VOID *new_vector); | |
1141 STATUS NU_Register_LISR(INT vector, | |
1142 VOID (*new_lisr)(INT), | |
1143 VOID (**old_lisr)(INT)); | |
1144 STATUS NU_Activate_HISR(NU_HISR *hisr); | |
1145 STATUS NU_Create_HISR(NU_HISR *hisr, CHAR *name, | |
1146 VOID (*hisr_entry)(VOID), OPTION priority, | |
1147 VOID *stack_address, UNSIGNED stack_size); | |
1148 STATUS NU_Delete_HISR(NU_HISR *hisr); | |
1149 NU_HISR *NU_Current_HISR_Pointer(VOID); | |
1150 UNSIGNED NU_Established_HISRs(VOID); | |
1151 STATUS NU_HISR_Information(NU_HISR *hisr, CHAR *name, | |
1152 UNSIGNED *scheduled_count, DATA_ELEMENT *priority, | |
1153 VOID **stack_base, UNSIGNED *stack_size, | |
1154 UNSIGNED *minimum_stack); | |
1155 UNSIGNED NU_HISR_Pointers(NU_HISR **pointer_list, | |
1156 UNSIGNED maximum_pointers); | |
1157 VOID NU_Protect(NU_PROTECT *protect_struct); | |
1158 VOID NU_Unprotect(VOID); | |
1159 | |
1160 /* Timer management functions. */ | |
1161 | |
1162 STATUS NU_Create_Timer(NU_TIMER *timer, CHAR *name, | |
1163 VOID (*expiration_routine)(UNSIGNED), UNSIGNED id, | |
1164 UNSIGNED initial_time, UNSIGNED reschedule_time, | |
1165 OPTION enable); | |
1166 STATUS NU_Delete_Timer(NU_TIMER *timer); | |
1167 STATUS NU_Reset_Timer(NU_TIMER *timer, | |
1168 VOID (*expiration_routine)(UNSIGNED), | |
1169 UNSIGNED initial_time, UNSIGNED reschedule_timer, | |
1170 OPTION enable); | |
1171 STATUS NU_Control_Timer(NU_TIMER *timer, OPTION enable); | |
1172 UNSIGNED NU_Established_Timers(VOID); | |
1173 STATUS NU_Timer_Information(NU_TIMER *timer, CHAR *name, | |
1174 OPTION *enable, UNSIGNED *expirations, UNSIGNED *id, | |
1175 UNSIGNED *initial_time, UNSIGNED *reschedule_time); | |
1176 UNSIGNED NU_Timer_Pointers(NU_TIMER **pointer_list, | |
1177 UNSIGNED maximum_pointers); | |
1178 VOID NU_Set_Clock(UNSIGNED new_value); | |
1179 UNSIGNED NU_Retrieve_Clock(VOID); | |
1180 | |
1181 /* Development support functions. */ | |
1182 | |
1183 CHAR *NU_Release_Information(VOID); | |
1184 CHAR *NU_License_Information(VOID); | |
1185 VOID NU_Disable_History_Saving(VOID); | |
1186 VOID NU_Enable_History_Saving(VOID); | |
1187 VOID NU_Make_History_Entry(UNSIGNED param1, UNSIGNED param2, | |
1188 UNSIGNED param3); | |
1189 STATUS NU_Retrieve_History_Entry(DATA_ELEMENT *id, | |
1190 UNSIGNED *param1, UNSIGNED *param2, UNSIGNED *param3, | |
1191 UNSIGNED *time, NU_TASK **task, NU_HISR **hisr); | |
1192 | |
1193 /* Input/Output Driver functions. */ | |
1194 | |
1195 STATUS NU_Create_Driver(NU_DRIVER *driver, CHAR *name, | |
1196 VOID (*driver_entry)(NU_DRIVER *, NU_DRIVER_REQUEST *)); | |
1197 STATUS NU_Delete_Driver(NU_DRIVER *driver); | |
1198 STATUS NU_Request_Driver(NU_DRIVER *driver, | |
1199 NU_DRIVER_REQUEST *request); | |
1200 STATUS NU_Resume_Driver(NU_TASK *task); | |
1201 STATUS NU_Suspend_Driver(VOID (*terminate_routine)(VOID *), | |
1202 VOID *information, UNSIGNED timeout); | |
1203 UNSIGNED NU_Established_Drivers(VOID); | |
1204 UNSIGNED NU_Driver_Pointers(NU_DRIVER **pointer_list, | |
1205 UNSIGNED maximum_pointers); | |
1206 | |
1207 #endif | |
1208 | |
1209 /* Define Supervisor and User mode functions */ | |
1210 #if (!defined(NU_SUPERV_USER_MODE)) || (NU_SUPERV_USER_MODE < 1) | |
1211 | |
1212 #define NU_IS_SUPERVISOR_MODE() (NU_TRUE) | |
1213 #define NU_SUPERVISOR_MODE() ((void) 0) | |
1214 #define NU_USER_MODE() ((void) 0) | |
1215 #define NU_SUPERV_USER_VARIABLES /* Not a Supervisor/User kernel */ | |
1216 | |
1217 #else /* NU_SUPERV_USER_MODE defined */ | |
1218 | |
1219 #include "tc_defs.h" | |
1220 #include "mmu/inc/su_extr.h" | |
1221 | |
1222 #endif /* NU_SUPERV_USER_MODE */ | |
1223 | |
1224 #ifdef __cplusplus | |
1225 } /* End of C declarations */ | |
1226 #endif | |
1227 | |
1228 #endif /* !NUCLEUS */ | |
1229 | |
1230 | |
1231 | |
1232 |