comparison src/nucleus/nucleus.h @ 7:0f80e1e4dce4

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