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