source: rtems/c/src/ada/rtems.ads @ f3f06f79

4.104.114.84.95
Last change on this file since f3f06f79 was f3f06f79, checked in by Joel Sherrill <joel.sherrill@…>, on 06/02/97 at 20:52:48

added new files from test area.

This code has successfully been used to run sp01.

  • Property mode set to 100644
File size: 38.6 KB
Line 
1--
2--  RTEMS / Specification
3--
4--  DESCRIPTION:
5--
6--  This package provides the interface to the RTEMS API.
7--
8--  DEPENDENCIES:
9--
10--
11--
12--  COPYRIGHT (c) 1989 - 1997.
13--  On-Line Applications Research Corporation (OAR).
14--
15
16with System;
17with Interfaces;
18with Interfaces.C;
19
20package RTEMS is
21
22   --
23   --  RTEMS Base Types
24   --
25
26   subtype Unsigned8  is Interfaces.Unsigned_8;
27   subtype Unsigned16 is Interfaces.Unsigned_16;
28   subtype Unsigned32 is Interfaces.Unsigned_32;
29
30   type Unsigned32_Pointer     is access all RTEMS.Unsigned32;
31   type Unsigned16_Pointer     is access all RTEMS.Unsigned16;
32   type Unsigned8_Pointer      is access all RTEMS.Unsigned8;
33
34   subtype Boolean             is RTEMS.Unsigned32;
35   subtype Address             is System.Address;
36   subtype Single              is Interfaces.C.C_float;
37   subtype Double              is Interfaces.C.Double;
38
39   --
40   --  The following define the size of each of the base types in
41   --  both bits and system units.
42   --
43
44   Unsigned8_Bits   : constant := 7;
45   Unsigned16_Bits  : constant := 15;
46   Unsigned32_Bits  : constant := 31;
47   Boolean_Bits     : constant := 31;
48   Address_Bits     : constant := 31;
49   Single_Bits      : constant := 31;
50   Double_Bits      : constant := 63;
51
52   Unsigned8_Units  : constant := 1;
53   Unsigned16_Units : constant := 2;
54   Unsigned32_Units : constant := 4;
55   Boolean_Units    : constant := 4;
56   Address_Units    : constant := 4;
57   Single_Units     : constant := 4;
58   Double_Units     : constant := 8;
59
60   --
61   --  More Types
62   --
63
64   subtype Name                is RTEMS.Unsigned32;
65   subtype ID                  is RTEMS.Unsigned32;
66   subtype Interval            is RTEMS.Unsigned32;
67   subtype Attribute           is RTEMS.Unsigned32;
68   subtype Mode                is RTEMS.Unsigned32;
69   subtype Option              is RTEMS.Unsigned32;
70   subtype Task_Priority       is RTEMS.Unsigned32;
71   subtype Notepad_Index       is RTEMS.Unsigned32;
72
73   subtype Event_Set           is RTEMS.Unsigned32;
74   subtype Signal_Set          is RTEMS.Unsigned32;
75   subtype Debug_Set           is RTEMS.Unsigned32;
76   subtype Device_Major_Number is RTEMS.Unsigned32;
77   subtype Device_Minor_Number is RTEMS.Unsigned32;
78   subtype Vector_Number       is RTEMS.Unsigned32;
79   subtype ISR_Level           is RTEMS.Unsigned32;
80
81   subtype Node                is RTEMS.Unsigned32;
82
83   --
84   --  Task Related Types
85   --  XXXX fix this
86   subtype Task_Argument       is RTEMS.Unsigned32;
87   type Task_Argument_PTR      is access all Task_Argument;
88
89   -- XXXX fix this
90   subtype TCB                 is RTEMS.Unsigned32;
91   type    TCB_Pointer         is access all RTEMS.TCB;
92
93   subtype Task_States         is RTEMS.Unsigned32;
94
95   type Task_Entry is access procedure (
96      Argument : RTEMS.Unsigned32
97   );
98
99   --
100   --  Clock and Time of Day Types
101   --
102
103   type Time_Of_Day is
104      record
105         Year    : RTEMS.Unsigned32; -- year, A.D.
106         Month   : RTEMS.Unsigned32; -- month, 1 .. 12
107         Day     : RTEMS.Unsigned32; -- day, 1 .. 31
108         Hour    : RTEMS.Unsigned32; -- hour, 0 .. 23
109         Minute  : RTEMS.Unsigned32; -- minute, 0 .. 59
110         Second  : RTEMS.Unsigned32; -- second, 0 .. 59
111         Ticks   : RTEMS.Unsigned32; -- elapsed ticks between seconds
112      end record;
113
114   type Clock_Time_Value is
115      record
116         Seconds      : RTEMS.Unsigned32;
117         Microseconds : RTEMS.Unsigned32;
118      end record;
119
120   type Clock_Get_Options is (
121      Clock_Get_TOD,
122      Clock_Get_Seconds_Since_Epoch,
123      Clock_Get_Ticks_Since_Boot,
124      Clock_Get_Ticks_Per_Seconds,
125      Clock_Get_Time_Value
126   );
127
128   --
129   --  Device Driver Entry Prototype
130   --
131
132   type Device_Driver_Entry is access function (
133      Major    : in     RTEMS.Device_Major_Number;
134      Minor    : in     RTEMS.Device_Major_Number;
135      Argument : in     RTEMS.Unsigned32;
136      ID       : in     RTEMS.Unsigned32
137   ) return RTEMS.Unsigned32;
138
139   type Driver_Address_Table_Entry is
140      record
141         Initialization : RTEMS.Device_Driver_Entry;
142         Open           : RTEMS.Device_Driver_Entry;
143         Close          : RTEMS.Device_Driver_Entry;
144         Read           : RTEMS.Device_Driver_Entry;
145         Write          : RTEMS.Device_Driver_Entry;
146         Control        : RTEMS.Device_Driver_Entry;
147      end record;
148
149   type Driver_Address_Table is array ( RTEMS.Unsigned32
150     range 1 .. RTEMS.Unsigned32'Last ) of RTEMS.Driver_Address_Table_Entry;
151
152   type Driver_Address_Table_Pointer is access all Driver_Address_Table;
153
154   type Driver_Name_t is
155      record
156         Device_Name        : RTEMS.Address;
157         Device_Name_Length : RTEMS.Unsigned32;
158         Major              : RTEMS.Device_Major_Number;
159         Minor              : RTEMS.Device_Minor_Number;
160         
161      end record;
162
163   --
164   --  Ident Options
165   --
166
167   Search_All_Nodes : constant RTEMS.Node := 0;
168
169   --
170   --  Options
171   --
172
173   Default_Options    : constant RTEMS.Option    := 16#0000#;
174
175   Wait      : constant RTEMS.Option := 16#0000#;
176   No_Wait   : constant RTEMS.Option := 16#0001#;
177
178   Event_All : constant RTEMS.Option := 16#0000#;
179   Event_Any : constant RTEMS.Option := 16#0002#;
180
181   --
182   --  Mode constants
183   --
184
185   Default_Modes      : constant RTEMS.Mode      := 16#0000#;
186
187   --
188   --  Attribute constants
189   --
190
191   Default_Attributes : constant RTEMS.Attribute := 16#0000#;
192
193   --Floating_Point :
194   --No_Floating_Point :
195
196   function Interrupt_Level (
197      Level : in     RTEMS.Unsigned32
198   ) return RTEMS.Attribute;
199   
200   --
201   --  Notepad index constants
202   --
203
204   Notepad_0  : constant RTEMS.Unsigned32 := 0;
205   Notepad_1  : constant RTEMS.Unsigned32 := 1;
206   Notepad_2  : constant RTEMS.Unsigned32 := 2;
207   Notepad_3  : constant RTEMS.Unsigned32 := 3;
208   Notepad_4  : constant RTEMS.Unsigned32 := 4;
209   Notepad_5  : constant RTEMS.Unsigned32 := 5;
210   Notepad_6  : constant RTEMS.Unsigned32 := 6;
211   Notepad_7  : constant RTEMS.Unsigned32 := 7;
212   Notepad_8  : constant RTEMS.Unsigned32 := 8;
213   Notepad_9  : constant RTEMS.Unsigned32 := 9;
214   Notepad_10 : constant RTEMS.Unsigned32 := 10;
215   Notepad_11 : constant RTEMS.Unsigned32 := 11;
216   Notepad_12 : constant RTEMS.Unsigned32 := 12;
217   Notepad_13 : constant RTEMS.Unsigned32 := 13;
218   Notepad_14 : constant RTEMS.Unsigned32 := 14;
219   Notepad_15 : constant RTEMS.Unsigned32 := 15;
220
221   --
222   --  Miscellaneous
223   --
224
225   No_Timeout       : constant RTEMS.Interval := 0;
226   Self             : constant RTEMS.ID       := 0;
227   Period_Status    : constant RTEMS.Interval := 0;
228   Yield_Processor  : constant RTEMS.Interval := 0;
229   Current_Priority : constant RTEMS.Task_Priority := 0;
230
231
232   --
233   --  Extension Callouts and Table
234   --
235
236   type Thread_Create_Extension is access procedure (
237      Current_Task : in     RTEMS.TCB_Pointer;
238      New_Task     : in     RTEMS.TCB_Pointer
239   );
240
241   type Thread_Start_Extension is access procedure (
242      Current_Task : in     RTEMS.TCB_Pointer;
243      Started_Task : in     RTEMS.TCB_Pointer
244   );
245
246   type Thread_Restart_Extension is access procedure (
247      Current_Task   : in     RTEMS.TCB_Pointer;
248      Restarted_Task : in     RTEMS.TCB_Pointer
249   );
250
251   type Thread_Delete_Extension is access procedure (
252      Current_Task : in     RTEMS.TCB_Pointer;
253      Deleted_Task : in     RTEMS.TCB_Pointer
254   );
255
256   type Thread_Switch_Extension is access procedure (
257      Current_Task : in     RTEMS.TCB_Pointer;
258      Heir_Task    : in     RTEMS.TCB_Pointer
259   );
260
261   type Thread_Post_Switch_Extension is access procedure (
262      Current_Task : in     RTEMS.TCB_Pointer
263   );
264
265   type Thread_Begin_Extension is access procedure (
266      Current_Task : in     RTEMS.TCB_Pointer
267   );
268
269   type Thread_Exitted_Extension is access procedure (
270      Current_Task : in     RTEMS.TCB_Pointer
271   );
272
273   type Fatal_Error_Extension is access procedure (
274      Error : in     RTEMS.Unsigned32
275   );
276
277   type Extensions_Table_Entry is
278      record
279         Thread_Create      : RTEMS.Thread_Create_Extension;
280         Thread_Start       : RTEMS.Thread_Start_Extension;
281         Thread_Restart     : RTEMS.Thread_Restart_Extension;
282         Thread_Delete      : RTEMS.Thread_Delete_Extension;
283         Thread_Switch      : RTEMS.Thread_Switch_Extension;
284         Thread_Post_Switch : RTEMS.Thread_Post_Switch_Extension;
285         Thread_Begin       : RTEMS.Thread_Begin_Extension;
286         Thread_Exitted     : RTEMS.Thread_Exitted_Extension;
287         Fatal              : RTEMS.Fatal_Error_Extension;
288      end record;
289
290   type Extensions_Table is array ( RTEMS.Unsigned32
291     range 1 .. RTEMS.Unsigned32'Last ) of RTEMS.Extensions_Table_Entry;
292
293   type Extensions_Table_Pointer is access all Extensions_Table;
294
295   --
296   --  The following type define a pointer to a watchdog/timer service routine.
297   --
298
299   type Timer_Service_Routine is access procedure (
300      ID          : in     RTEMS.ID;
301      User_Data   : in     RTEMS.Address
302   );
303
304   --
305   --  The following type define a pointer to a signal service routine.
306   --
307
308   type ASR_Handler is access procedure (
309      Signals : in     RTEMS.Signal_Set
310   );
311
312   --
313   --  The following type defines the status information returned
314   --  about a period.
315   --
316
317   type Rate_Monotonic_Period_States is (
318     Inactive,               -- off chain, never initialized
319     Owner_Is_Blocking,      -- on chain, owner is blocking on it
320     Active,                 -- on chain, running continuously
321     Expired_While_Blocking, -- on chain, expired while owner was was blocking
322     Expired                 -- off chain, will be reset by next
323                             --   rtems_rate_monotonic_period
324   );
325
326   for Rate_Monotonic_Period_States'Size use 32;
327
328   for Rate_Monotonic_Period_States use (
329     Inactive                => 0,
330     Owner_Is_Blocking       => 1,
331     Active                  => 2,
332     Expired_While_Blocking  => 3,
333     Expired                 => 4
334   );
335 
336   type Rate_Monotonic_Period_Status is
337      record
338         State                            : RTEMS.Rate_Monotonic_Period_States;
339         Ticks_Since_Last_Period          : RTEMS.Unsigned32;
340         Ticks_Executed_Since_Last_Period : RTEMS.Unsigned32;
341      end record;
342
343   --
344   --  Method Completions Status Codes
345   --
346
347   type Status_Codes is (
348      Successful,               -- successful completion
349      Task_Exitted,             -- returned from a task
350      MP_Not_Configured,        -- multiprocessing not configured
351      Invalid_Name,             -- invalid object name
352      Invalid_ID,               -- invalid object id
353      Too_Many,                 -- too many
354      Timeout,                  -- timed out waiting
355      Object_Was_Deleted,       -- object deleted while waiting
356      Invalid_Size,             -- specified size was invalid
357      Invalid_Address,          -- address specified is invalid
358      Invalid_Number,           -- number was invalid
359      Not_Defined,              -- item has not been initialized
360      Resource_In_Use,          -- resources still outstanding
361      Unsatisfied,              -- request not satisfied
362      Incorrect_State,          -- task is in wrong state
363      Already_Suspended,        -- task already in state
364      Illegal_On_Self,          -- illegal on calling task
365      Illegal_On_Remote_Object, -- illegal for remote object
366      Called_From_ISR,          -- called from wrong environment
367      Invalid_Priority,         -- invalid task priority
368      Invalid_Clock,            -- invalid date/time
369      Invalid_Node,             -- invalid node id
370      Not_Configured,           -- directive not configured
371      Not_Owner_Of_Resource,    -- not owner of resource
372      Not_Implemented,          -- directive not implemented
373      Internal_Error,           -- RTEMS inconsistency detected
374      Proxy_Blocking,           -- internal multiprocessing only
375      No_Memory                 -- no memory left in heap
376   );
377
378   for Status_Codes'Size use 32;
379
380   for Status_Codes use (
381      Successful                  =>  0,
382      Task_Exitted                =>  1,
383      MP_Not_Configured           =>  2,
384      Invalid_Name                =>  3,
385      Invalid_ID                  =>  4,
386      Too_Many                    =>  5,
387      Timeout                     =>  6,
388      Object_Was_Deleted          =>  7,
389      Invalid_Size                =>  8,
390      Invalid_Address             =>  9,
391      Invalid_NumbeR              => 10,
392      Not_Defined                 => 11,
393      Resource_In_Use             => 12,
394      Unsatisfied                 => 13,
395      Incorrect_State             => 14,
396      Already_Suspended           => 15,
397      Illegal_On_Self             => 16,
398      Illegal_On_Remote_Object    => 17,
399      Called_From_ISR             => 18,
400      Invalid_Priority            => 19,
401      Invalid_Clock               => 20,
402      Invalid_Node                => 21,
403      Not_Configured              => 22,
404      Not_Owner_Of_Resource       => 23,
405      Not_ImplementeD             => 24,
406      Internal_Error              => 25,
407      Proxy_Blocking              => 26,
408      No_Memory                   => 27
409   );
410
411   --
412   --  RTEMS Events
413   --
414
415   All_Events : constant RTEMS.Event_Set := 16#7FFFFFFF#;
416   Event_0    : constant RTEMS.Event_Set := 16#00000001#;
417   Event_1    : constant RTEMS.Event_Set := 16#00000002#;
418   Event_2    : constant RTEMS.Event_Set := 16#00000004#;
419   Event_3    : constant RTEMS.Event_Set := 16#00000008#;
420   Event_4    : constant RTEMS.Event_Set := 16#00000010#;
421   Event_5    : constant RTEMS.Event_Set := 16#00000020#;
422   Event_6    : constant RTEMS.Event_Set := 16#00000040#;
423   Event_7    : constant RTEMS.Event_Set := 16#00000080#;
424   Event_8    : constant RTEMS.Event_Set := 16#00000100#;
425   Event_9    : constant RTEMS.Event_Set := 16#00000200#;
426   Event_10   : constant RTEMS.Event_Set := 16#00000400#;
427   Event_11   : constant RTEMS.Event_Set := 16#00000800#;
428   Event_12   : constant RTEMS.Event_Set := 16#00001000#;
429   Event_13   : constant RTEMS.Event_Set := 16#00002000#;
430   Event_14   : constant RTEMS.Event_Set := 16#00004000#;
431   Event_15   : constant RTEMS.Event_Set := 16#00008000#;
432   Event_16   : constant RTEMS.Event_Set := 16#00010000#;
433   Event_17   : constant RTEMS.Event_Set := 16#00020000#;
434   Event_18   : constant RTEMS.Event_Set := 16#00040000#;
435   Event_19   : constant RTEMS.Event_Set := 16#00080000#;
436   Event_20   : constant RTEMS.Event_Set := 16#00100000#;
437   Event_21   : constant RTEMS.Event_Set := 16#00200000#;
438   Event_22   : constant RTEMS.Event_Set := 16#00400000#;
439   Event_23   : constant RTEMS.Event_Set := 16#00800000#;
440   Event_24   : constant RTEMS.Event_Set := 16#01000000#;
441   Event_25   : constant RTEMS.Event_Set := 16#02000000#;
442   Event_26   : constant RTEMS.Event_Set := 16#04000000#;
443   Event_27   : constant RTEMS.Event_Set := 16#08000000#;
444   Event_28   : constant RTEMS.Event_Set := 16#10000000#;
445   Event_29   : constant RTEMS.Event_Set := 16#20000000#;
446   Event_30   : constant RTEMS.Event_Set := 16#40000000#;
447   Event_31   : constant RTEMS.Event_Set := 16#80000000#;
448
449   --
450   --  RTEMS API Configuration Information
451   --
452
453   type Initialization_Tasks_Table_Entry is
454      record
455         Name             : RTEMS.Name;          -- task name
456         Stack_Size       : RTEMS.Unsigned32;    -- task stack size
457         Initial_Priority : RTEMS.Task_priority; -- task priority
458         Attribute_Set    : RTEMS.Attribute;     -- task attributes
459         Entry_Point      : RTEMS.Task_Entry;    -- task entry point
460         Mode_Set         : RTEMS.Mode;          -- task initial mode
461         Argument         : RTEMS.Unsigned32;    -- task argument
462      end record;
463
464   type Initialization_Tasks_Table is array ( RTEMS.Unsigned32 range <> ) of
465     RTEMS.Initialization_Tasks_Table_Entry;
466
467   type Initialization_Tasks_Table_Pointer is access all
468        Initialization_Tasks_Table;
469
470   type API_Configuration_Table is
471      record
472         Maximum_Tasks                   : RTEMS.Unsigned32;
473         Maximum_Timers                  : RTEMS.Unsigned32;
474         Maximum_Semaphores              : RTEMS.Unsigned32;
475         Maximum_Message_queues          : RTEMS.Unsigned32;
476         Maximum_Partitions              : RTEMS.Unsigned32;
477         Maximum_Regions                 : RTEMS.Unsigned32;
478         Maximum_Ports                   : RTEMS.Unsigned32;
479         Maximum_Periods                 : RTEMS.Unsigned32;
480         Number_Of_Initialization_Tasks  : RTEMS.Unsigned32;
481         User_Initialization_Tasks_Table :
482                                   RTEMS.Initialization_Tasks_Table_Pointer;
483      end record;
484
485   type API_Configuration_Table_Pointer is access all API_Configuration_Table;
486
487   --
488   --  RTEMS POSIX API Configuration Information
489   --
490
491   type POSIX_Thread_Entry is access procedure (
492      Argument : in     RTEMS.Address
493   );
494
495   type POSIX_Initialization_Threads_Table_Entry is
496   record
497      Thread_Entry : RTEMS.POSIX_Thread_Entry;
498   end record;
499
500   type POSIX_Initialization_Threads_Table is array
501       ( RTEMS.Unsigned32 range <> ) of
502       RTEMS.POSIX_Initialization_Threads_Table_Entry;
503
504   type POSIX_Initialization_Threads_Table_Pointer is access all
505       POSIX_Initialization_Threads_Table;
506   
507   type POSIX_API_Configuration_Table_Entry is
508      record
509         Maximum_Threads                 : Interfaces.C.Int;
510         Maximum_Mutexes                 : Interfaces.C.Int;
511         Maximum_Condition_Variables     : Interfaces.C.Int;
512         Maximum_Keys                    : Interfaces.C.Int;
513         Maximum_Queued_Signals          : Interfaces.C.Int;
514         Number_Of_Initialization_Tasks  : Interfaces.C.Int;
515         User_Initialization_Tasks_Table :
516            RTEMS.POSIX_Initialization_Threads_Table_Pointer;
517      end record;
518
519   type POSIX_API_Configuration_Table is array ( RTEMS.Unsigned32 range <> ) of
520      RTEMS.POSIX_API_Configuration_Table_Entry;
521
522   type POSIX_API_Configuration_Table_Pointer is access all
523          RTEMS.POSIX_API_Configuration_Table;
524
525   --
526   --  MPCI Information include MPCI Configuration
527   --
528
529   type Configuration_Table_Pointer;
530
531   type MP_Packet_Classes is (
532      MP_PACKET_MPCI_INTERNAL,
533      MP_PACKET_TASKS,
534      MP_PACKET_MESSAGE_QUEUE,
535      MP_PACKET_SEMAPHORE,
536      MP_PACKET_PARTITION,
537      MP_PACKET_REGION,
538      MP_PACKET_EVENT,
539      MP_PACKET_SIGNAL
540   );
541
542   for MP_Packet_Classes use (
543      MP_PACKET_MPCI_INTERNAL    => 0,
544      MP_PACKET_TASKS            => 1,
545      MP_PACKET_MESSAGE_QUEUE    => 2,
546      MP_PACKET_SEMAPHORE        => 3,
547      MP_PACKET_PARTITION        => 4,
548      MP_PACKET_REGION           => 5,
549      MP_PACKET_EVENT            => 6,
550      MP_PACKET_SIGNAL           => 7
551   );
552
553   type Packet_Prefix is
554      record
555         The_Class       : RTEMS.MP_Packet_Classes;
556         ID              : RTEMS.ID;
557         Source_TID      : RTEMS.ID;
558         Source_Priority : RTEMS.Task_Priority;
559         Return_Code     : RTEMS.Unsigned32;
560         Length          : RTEMS.Unsigned32;
561         To_Convert      : RTEMS.Unsigned32;
562         Timeout         : RTEMS.Interval;
563      end record;
564
565   type Packet_Prefix_Pointer is access all Packet_Prefix;
566
567   type MPCI_Initialization_Entry is access procedure (
568      Configuration : in     RTEMS.Configuration_Table_Pointer
569   );
570
571   type MPCI_Get_Packet_Entry is access procedure (
572      Packet : access RTEMS.Packet_Prefix_Pointer
573   );
574
575   type MPCI_Return_Packet_Entry is access procedure (
576      Packet : in     RTEMS.Packet_Prefix_Pointer
577   );
578
579   type MPCI_Send_Entry is access procedure (
580      Packet : in     RTEMS.Packet_Prefix_Pointer
581   );
582
583   type MPCI_Receive_Entry is access procedure (
584      Packet : access RTEMS.Packet_Prefix_Pointer
585   );
586
587   type MPCI_Table is
588      record
589         Default_Timeout     : RTEMS.Unsigned32; -- in ticks
590         Maximum_Packet_Size : RTEMS.Unsigned32;
591         Initialization      : RTEMS.MPCI_Initialization_Entry;
592         Get_Packet          : RTEMS.MPCI_Get_Packet_Entry;
593         Return_Packet       : RTEMS.MPCI_Return_Packet_Entry;
594         Send                : RTEMS.MPCI_Send_Entry;
595         Receive             : RTEMS.MPCI_Receive_Entry;
596      end record;
597
598   type MPCI_Table_Pointer is access all MPCI_Table;
599
600   --
601   --  Configuration Information
602   --
603
604   type Multiprocessing_Table is
605      record
606         Node                   : RTEMS.Unsigned32;
607         Maximum_Nodes          : RTEMS.Unsigned32;
608         Maximum_Global_Objects : RTEMS.Unsigned32;
609         Maximum_Proxies        : RTEMS.Unsigned32;
610         User_MPCI_Table        : RTEMS.MPCI_Table_Pointer;
611      end record;
612
613   type Multiprocessing_Table_Pointer is access all Multiprocessing_Table;
614
615   type Configuration_Table is
616      record
617          Work_Space_Start           : RTEMS.Address;
618          Work_Space_Size            : RTEMS.Unsigned32;
619          Maximum_Extensions         : RTEMS.Unsigned32;
620          Microseconds_Per_Tick      : RTEMS.Unsigned32;
621          Ticks_Per_Timeslice        : RTEMS.Unsigned32;
622          Maximum_Devices            : RTEMS.Unsigned32;
623          Number_Of_Device_Drivers   : RTEMS.Unsigned32;
624          Device_Driver_Table        : RTEMS.Driver_Address_Table_Pointer;
625          User_Extension_Table       : RTEMS.Extensions_Table_Pointer;
626          User_Multiprocessing_Table : RTEMS.Multiprocessing_Table_Pointer;
627          RTEMS_API_Configuration    : RTEMS.API_Configuration_Table_Pointer;
628          POSIX_API_Configuration    : RTEMS.POSIX_API_Configuration_Table_Pointer;
629      end record;
630
631   type Configuration_Table_Pointer is access all Configuration_Table;
632
633   --
634   --  For now, do not provide access to the CPU Table from Ada.
635   --  When this type is provided, a CPU dependent file must
636   --  define it.
637   --
638
639   subtype CPU_Table is RTEMS.Address;
640   type CPU_Table_Pointer is access all CPU_Table;
641
642   --
643   --  Utility Functions
644   --
645
646   function From_Ada_Boolean (
647      Ada_Boolean : Standard.Boolean
648   ) return RTEMS.Boolean;
649
650   function To_Ada_Boolean (
651      RTEMS_Boolean : RTEMS.Boolean
652   ) return Standard.Boolean;
653
654   function Milliseconds_To_Microseconds (
655      Milliseconds : RTEMS.Unsigned32
656   ) return RTEMS.Unsigned32;
657
658   function Milliseconds_To_Ticks (
659      Milliseconds : RTEMS.Unsigned32
660   ) return RTEMS.Interval;
661
662   function Microseconds_To_Ticks (
663      Microseconds : RTEMS.Unsigned32
664   ) return RTEMS.Interval;
665
666   function Build_Name (
667      C1 : in     Character;
668      C2 : in     Character;
669      C3 : in     Character;
670      C4 : in     Character
671   ) return RTEMS.Name;
672
673   procedure Name_To_Characters (
674      Name : in     RTEMS.Name;
675      C1   :    out Character;
676      C2   :    out Character;
677      C3   :    out Character;
678      C4   :    out Character
679   );
680
681   function Get_Node (
682      ID : in     RTEMS.ID
683   ) return RTEMS.Unsigned32;
684
685   function Get_Index (
686      ID : in     RTEMS.ID
687   ) return RTEMS.Unsigned32;
688
689   function Are_Statuses_Equal (
690      Status  : in     RTEMS.Status_Codes;
691      Desired : in     RTEMS.Status_Codes
692   ) return Standard.Boolean;
693
694   --
695   --  RTEMS API
696   --
697
698   --
699   --  Initialization Manager
700   --
701
702   procedure Initialize_Executive (
703      Configuration_Table   : in     RTEMS.Configuration_Table_Pointer;
704      CPU_Table             : in     RTEMS.CPU_Table_Pointer
705   );
706
707   procedure Initialize_Executive_Early (
708      Configuration_Table : in     RTEMS.Configuration_Table_Pointer;
709      CPU_Table           : in     RTEMS.CPU_Table_Pointer;
710      Level               :    out RTEMS.ISR_Level
711   );
712
713   procedure Initialize_Executive_Late (
714      BSP_Level : in    RTEMS.ISR_Level
715   );
716
717   procedure Shutdown_Executive (
718      Result : in     RTEMS.Unsigned32
719   );
720
721   --
722   --  Task Manager
723   --
724
725   procedure Task_Create (
726      Name             : in     RTEMS.Name;
727      Initial_Priority : in     RTEMS.Task_Priority;
728      Stack_Size       : in     Unsigned32;
729      Initial_Modes    : in     RTEMS.Mode;
730      Attribute_Set    : in     RTEMS.Attribute;
731      ID               :    out RTEMS.ID;
732      Result           :    out RTEMS.Status_Codes
733   );
734
735   procedure Task_Ident (
736      Name   : in     RTEMS.Name;
737      Node   : in     RTEMS.Node;
738      ID     :    out RTEMS.ID;
739      Result :    out RTEMS.Status_Codes
740   );
741
742   procedure Task_Start (
743      ID          : in     RTEMS.ID;
744      Entry_Point : in     RTEMS.Task_Entry;
745      Argument    : in     RTEMS.Task_Argument;
746      Result      :    out RTEMS.Status_Codes
747   );
748
749   procedure Task_Restart (
750      ID       : in     RTEMS.ID;
751      Argument : in     RTEMS.Task_Argument;
752      Result   :    out RTEMS.Status_Codes
753   );
754
755   procedure Task_Delete (
756      ID     : in     RTEMS.ID;
757      Result :    out RTEMS.Status_Codes
758   );
759
760   procedure Task_Suspend (
761      ID     : in     RTEMS.ID;
762      Result :    out RTEMS.Status_Codes
763   );
764
765   procedure Task_Resume (
766      ID     : in     RTEMS.ID;
767      Result :    out RTEMS.Status_Codes
768   );
769
770   procedure Task_Set_Priority (
771      ID           : in     RTEMS.ID;
772      New_Priority : in     RTEMS.Task_Priority;
773      Old_Priority :    out RTEMS.Task_Priority;
774      Result       :    out RTEMS.Status_Codes
775   );
776
777   procedure Task_Mode (
778      Mode_Set          : in     RTEMS.Mode;
779      Mask              : in     RTEMS.Mode;
780      Previous_Mode_Set :    out RTEMS.Mode;
781      Result            :    out RTEMS.Status_Codes
782   );
783
784   procedure Task_Get_Note (
785      ID      : in     RTEMS.ID;
786      Notepad : in     RTEMS.Notepad_Index;
787      Note    :    out RTEMS.Unsigned32;
788      Result  :    out RTEMS.Status_Codes
789   );
790
791   procedure Task_Set_Note (
792      ID      : in     RTEMS.ID;
793      Notepad : in     RTEMS.Notepad_Index;
794      Note    : in     RTEMS.Unsigned32;
795      Result  :    out RTEMS.Status_Codes
796   );
797
798   procedure Task_Wake_When (
799      Time_Buffer : in     RTEMS.Time_Of_Day;
800      Result      :    out RTEMS.Status_Codes
801   );
802
803   procedure Task_Wake_After (
804      Ticks  : in     RTEMS.Interval;
805      Result :    out RTEMS.Status_Codes
806   );
807
808   --
809   --  Interrupt Manager
810   --
811
812   procedure Interrupt_Catch (
813      New_ISR_Handler : in     RTEMS.Address;
814      Vector          : in     RTEMS.Vector_Number;
815      Old_ISR_Handler :    out RTEMS.Address;
816      Result          :    out RTEMS.Status_Codes
817   );
818
819   function Interrupt_Disable
820   return RTEMS.ISR_Level;
821
822   procedure Interrupt_Enable (
823      Level : in     RTEMS.ISR_Level
824   );
825
826   procedure Interrupt_Flash (
827      Level : in     RTEMS.ISR_Level
828   );
829
830   function Interrupt_Is_In_Progress
831   return RTEMS.Boolean;
832
833   --
834   --  Clock Manager
835   --
836
837   procedure Clock_Get (
838      Option      : in     RTEMS.Clock_Get_Options;
839      Time_Buffer : in     RTEMS.Address;
840      Result      :    out RTEMS.Status_Codes
841   );
842
843   procedure Clock_Set (
844      Time_Buffer : in     RTEMS.Time_Of_Day;
845      Result      :    out RTEMS.Status_Codes
846   );
847
848   procedure Clock_Tick (
849      Result :    out RTEMS.Status_Codes
850   );
851
852   --
853   --  Extension Manager
854   --
855
856   procedure Extension_Create (
857      Name   : in     RTEMS.Name;
858      Table  : in     RTEMS.Extensions_Table_Pointer;
859      ID     :    out RTEMS.ID;
860      Result :    out RTEMS.Status_Codes
861   );
862
863   procedure Extension_Ident (
864      Name   : in     RTEMS.Name;
865      ID     :    out RTEMS.ID;
866      Result :    out RTEMS.Status_Codes
867   );
868
869   procedure Extension_Delete (
870      ID     : in     RTEMS.ID;
871      Result :    out RTEMS.Status_Codes
872   );
873
874
875   --
876   --  Timer Manager
877   --
878
879   procedure Timer_Create (
880      Name   : in     RTEMS.Name;
881      ID     :    out RTEMS.ID;
882      Result :    out RTEMS.Status_Codes
883   );
884
885   procedure Timer_Ident (
886      Name   : in     RTEMS.Name;
887      ID     :    out RTEMS.ID;
888      Result :    out RTEMS.Status_Codes
889   );
890
891   procedure Timer_Delete (
892      ID     : in     RTEMS.ID;
893      Result :    out RTEMS.Status_Codes
894   );
895
896   procedure Timer_Fire_After (
897      ID        : in     RTEMS.ID;
898      Ticks     : in     RTEMS.Interval;
899      Routine   : in     RTEMS.Timer_Service_Routine;
900      User_Data : in     RTEMS.Address;
901      Result    :    out RTEMS.Status_Codes
902   );
903
904   procedure Timer_Fire_When (
905      ID        : in     RTEMS.ID;
906      Wall_Time : in     RTEMS.Time_Of_Day;
907      Routine   : in     RTEMS.Timer_Service_Routine;
908      User_Data : in     RTEMS.Address;
909      Result    :    out RTEMS.Status_Codes
910   );
911
912   procedure Timer_Reset (
913      ID     : in     RTEMS.ID;
914      Result :    out RTEMS.Status_Codes
915   );
916
917   procedure Timer_Cancel (
918      ID     : in     RTEMS.ID;
919      Result :    out RTEMS.Status_Codes
920   );
921
922   --
923   --  Semaphore Manager
924   --
925
926   procedure Semaphore_Create (
927      Name          : in     RTEMS.Name;
928      Count         : in     RTEMS.Unsigned32;
929      Attribute_Set : in     RTEMS.Attribute;
930      ID            :    out RTEMS.ID;
931      Result        :    out RTEMS.Status_Codes
932   );
933
934   procedure Semaphore_Delete (
935      ID     : in     RTEMS.ID;
936      Result :    out RTEMS.Status_Codes
937   );
938
939   procedure Semaphore_Ident (
940      Name   : in     RTEMS.Name;
941      Node   : in     RTEMS.Unsigned32;
942      ID     :    out RTEMS.ID;
943      Result :    out RTEMS.Status_Codes
944   );
945
946   procedure Semaphore_Obtain (
947      ID         : in     RTEMS.ID;
948      Option_Set : in     RTEMS.Option;
949      Timeout    : in     RTEMS.Interval;
950      Result     :    out RTEMS.Status_Codes
951   );
952
953   procedure Semaphore_Release (
954      ID     : in     RTEMS.ID;
955      Result :    out RTEMS.Status_Codes
956   );
957
958
959   --
960   --  Message Queue Manager
961   --
962
963   procedure Message_Queue_Create (
964      Name             : in     RTEMS.Name;
965      Count            : in     RTEMS.Unsigned32;
966      Max_Message_Size : in     RTEMS.Unsigned32;
967      Attribute_Set    : in     RTEMS.Attribute;
968      ID               :    out RTEMS.ID;
969      Result           :    out RTEMS.Status_Codes
970   );
971
972   procedure Message_Queue_Ident (
973      Name   : in     RTEMS.Name;
974      Node   : in     RTEMS.Unsigned32;
975      ID     :    out RTEMS.ID;
976      Result :    out RTEMS.Status_Codes
977   );
978
979   procedure Message_Queue_Delete (
980      ID     : in     RTEMS.ID;
981      Result :    out RTEMS.Status_Codes
982   );
983
984   procedure Message_Queue_Send (
985      ID     : in     RTEMS.ID;
986      Buffer : in     RTEMS.Address;
987      Size   : in     RTEMS.Unsigned32;
988      Result :    out RTEMS.Status_Codes
989   );
990
991   procedure Message_Queue_Urgent (
992      ID     : in     RTEMS.ID;
993      Buffer : in     RTEMS.Address;
994      Size   : in     RTEMS.Unsigned32;
995      Result :    out RTEMS.Status_Codes
996   );
997
998   procedure Message_Queue_Broadcast (
999      ID     : in     RTEMS.ID;
1000      Buffer : in     RTEMS.Address;
1001      Size   : in     RTEMS.Unsigned32;
1002      Count  :    out RTEMS.Unsigned32;
1003      Result :    out RTEMS.Status_Codes
1004   );
1005
1006   procedure Message_Queue_Receive (
1007      ID         : in     RTEMS.ID;
1008      Buffer     : in     RTEMS.Address;
1009      Option_Set : in     RTEMS.Option;
1010      Timeout    : in     RTEMS.Interval;
1011      Size       :    out RTEMS.Unsigned32;
1012      Result     :    out RTEMS.Status_Codes
1013   );
1014
1015   procedure Message_Queue_Flush (
1016      ID     : in     RTEMS.ID;
1017      Count  :    out RTEMS.Unsigned32;
1018      Result :    out RTEMS.Status_Codes
1019   );
1020
1021
1022   --
1023   --  Event Manager
1024   --
1025
1026   procedure Event_Send (
1027      ID       : in     RTEMS.ID;
1028      Event_In : in     RTEMS.Event_Set;
1029      Result   :    out RTEMS.Status_Codes
1030   );
1031
1032   procedure Event_Receive (
1033      Event_In   : in     RTEMS.Event_Set;
1034      Option_Set : in     RTEMS.Option;
1035      Ticks      : in     RTEMS.Interval;
1036      Event_Out  :    out RTEMS.Event_Set;
1037      Result     :    out RTEMS.Status_Codes
1038   );
1039
1040   --
1041   --  Signal Manager
1042   --
1043
1044   procedure Signal_Catch (
1045      ASR_Handler : in     RTEMS.ASR_Handler;
1046      Mode_Set    : in     RTEMS.Mode;
1047      Result      :    out RTEMS.Status_Codes
1048   );
1049
1050   procedure Signal_Send (
1051      ID         : in     RTEMS.ID;
1052      Signal_Set : in     RTEMS.Signal_Set;
1053      Result     :    out RTEMS.Status_Codes
1054   );
1055
1056
1057   --
1058   --  Partition Manager
1059   --
1060
1061   procedure Partition_Create (
1062      Name             : in     RTEMS.Name;
1063      Starting_Address : in     RTEMS.Address;
1064      Length           : in     RTEMS.Unsigned32;
1065      Buffer_Size      : in     RTEMS.Unsigned32;
1066      Attribute_Set    : in     RTEMS.Attribute;
1067      ID               :    out RTEMS.ID;
1068      Result           :    out RTEMS.Status_Codes
1069   );
1070
1071   procedure Partition_Ident (
1072      Name   : in     RTEMS.Name;
1073      Node   : in     RTEMS.Unsigned32;
1074      ID     :    out RTEMS.ID;
1075      Result :    out RTEMS.Status_Codes
1076   );
1077
1078   procedure Partition_Delete (
1079      ID     : in     RTEMS.ID;
1080      Result :    out RTEMS.Status_Codes
1081   );
1082
1083   procedure Partition_Get_Buffer (
1084      ID     : in     RTEMS.ID;
1085      Buffer :    out RTEMS.Address;
1086      Result :    out RTEMS.Status_Codes
1087   );
1088
1089   procedure Partition_Return_Buffer (
1090      ID     : in     RTEMS.ID;
1091      Buffer : in     RTEMS.Address;
1092      Result :    out RTEMS.Status_Codes
1093   );
1094
1095
1096   --
1097   --  Region Manager
1098   --
1099
1100   procedure Region_Create (
1101      Name             : in     RTEMS.Name;
1102      Starting_Address : in     RTEMS.Address;
1103      Length           : in     RTEMS.Unsigned32;
1104      Page_Size        : in     RTEMS.Unsigned32;
1105      Attribute_Set    : in     RTEMS.Attribute;
1106      ID               :    out RTEMS.ID;
1107      Result           :    out RTEMS.Status_Codes
1108   );
1109
1110   procedure Region_Ident (
1111      Name   : in     RTEMS.Name;
1112      ID     :    out RTEMS.ID;
1113      Result :    out RTEMS.Status_Codes
1114   );
1115
1116   procedure Region_Delete (
1117      ID     : in     RTEMS.ID;
1118      Result :    out RTEMS.Status_Codes
1119   );
1120
1121   procedure Region_Extend (
1122      ID               : in     RTEMS.ID;
1123      Starting_Address : in     RTEMS.Address;
1124      Length           : in     RTEMS.Unsigned32;
1125      Result           :    out RTEMS.Status_Codes
1126   );
1127
1128   procedure Region_Get_Segment (
1129      ID         : in     RTEMS.ID;
1130      Size       : in     RTEMS.Unsigned32;
1131      Option_Set : in     RTEMS.Option;
1132      Timeout    : in     RTEMS.Interval;
1133      Segment    :    out RTEMS.Address;
1134      Result     :    out RTEMS.Status_Codes
1135   );
1136
1137   procedure Region_Get_Segment_Size (
1138      ID         : in     RTEMS.ID;
1139      Segment    : in     RTEMS.Address;
1140      Size       :    out RTEMS.Unsigned32;
1141      Result     :    out RTEMS.Status_Codes
1142   );
1143
1144   procedure Region_Return_Segment (
1145      ID      : in     RTEMS.ID;
1146      Segment : in     RTEMS.Address;
1147      Result  :    out RTEMS.Status_Codes
1148   );
1149
1150
1151   --
1152   --  Dual Ported Memory Manager
1153   --
1154
1155   procedure Port_Create (
1156      Name           : in     RTEMS.Name;
1157      Internal_Start : in     RTEMS.Address;
1158      External_Start : in     RTEMS.Address;
1159      Length         : in     RTEMS.Unsigned32;
1160      ID             :    out RTEMS.ID;
1161      Result         :    out RTEMS.Status_Codes
1162   );
1163
1164   procedure Port_Ident (
1165      Name   : in     RTEMS.Name;
1166      ID     :    out RTEMS.ID;
1167      Result :    out RTEMS.Status_Codes
1168   );
1169
1170   procedure Port_Delete (
1171      ID     : in     RTEMS.ID;
1172      Result :    out RTEMS.Status_Codes
1173   );
1174
1175   procedure Port_External_To_Internal (
1176      ID       : in     RTEMS.ID;
1177      External : in     RTEMS.Address;
1178      Internal :    out RTEMS.Address;
1179      Result   :    out RTEMS.Status_Codes
1180   );
1181
1182   procedure Port_Internal_To_External (
1183      ID       : in     RTEMS.ID;
1184      Internal : in     RTEMS.Address;
1185      External :    out RTEMS.Address;
1186      Result   :    out RTEMS.Status_Codes
1187   );
1188
1189   --
1190   --  Input/Output Manager
1191   --
1192
1193   procedure IO_Initialize (
1194      Major        : in     RTEMS.Device_Major_Number;
1195      Minor        : in     RTEMS.Device_Minor_Number;
1196      Argument     : in     RTEMS.Address;
1197      Return_Value :    out RTEMS.Unsigned32;
1198      Result       :    out RTEMS.Status_Codes
1199   );
1200
1201   procedure IO_Register_Name (
1202      Name   : in     String;
1203      Major  : in     RTEMS.Device_Major_Number;
1204      Minor  : in     RTEMS.Device_Minor_Number;
1205      Result :    out RTEMS.Status_Codes
1206   );
1207
1208   procedure IO_Lookup_Name (
1209      Name         : in     String;
1210      Device_Info  :    out RTEMS.Driver_Name_t;
1211      Result       :    out RTEMS.Status_Codes
1212   );
1213
1214   procedure IO_Open (
1215      Major        : in     RTEMS.Device_Major_Number;
1216      Minor        : in     RTEMS.Device_Minor_Number;
1217      Argument     : in     RTEMS.Address;
1218      Return_Value :    out RTEMS.Unsigned32;
1219      Result       :    out RTEMS.Status_Codes
1220   );
1221
1222   procedure IO_Close (
1223      Major        : in     RTEMS.Device_Major_Number;
1224      Minor        : in     RTEMS.Device_Minor_Number;
1225      Argument     : in     RTEMS.Address;
1226      Return_Value :    out RTEMS.Unsigned32;
1227      Result       :    out RTEMS.Status_Codes
1228   );
1229
1230   procedure IO_Read (
1231      Major        : in     RTEMS.Device_Major_Number;
1232      Minor        : in     RTEMS.Device_Minor_Number;
1233      Argument     : in     RTEMS.Address;
1234      Return_Value :    out RTEMS.Unsigned32;
1235      Result       :    out RTEMS.Status_Codes
1236   );
1237
1238   procedure IO_Write (
1239      Major        : in     RTEMS.Device_Major_Number;
1240      Minor        : in     RTEMS.Device_Minor_Number;
1241      Argument     : in     RTEMS.Address;
1242      Return_Value :    out RTEMS.Unsigned32;
1243      Result       :    out RTEMS.Status_Codes
1244   );
1245
1246   procedure IO_Control (
1247      Major        : in     RTEMS.Device_Major_Number;
1248      Minor        : in     RTEMS.Device_Minor_Number;
1249      Argument     : in     RTEMS.Address;
1250      Return_Value :    out RTEMS.Unsigned32;
1251      Result       :    out RTEMS.Status_Codes
1252   );
1253
1254
1255   --
1256   --  Fatal Error Manager
1257   --
1258
1259   procedure Fatal_Error_Occurred (
1260      The_Error : in     RTEMS.Unsigned32
1261   );
1262
1263
1264   --
1265   --  Rate Monotonic Manager
1266   --
1267
1268   procedure Rate_Monotonic_Create (
1269      Name   : in     RTEMS.Name;
1270      ID     :    out RTEMS.ID;
1271      Result :    out RTEMS.Status_Codes
1272   );
1273
1274   procedure Rate_Monotonic_Ident (
1275      Name   : in     RTEMS.Name;
1276      ID     :    out RTEMS.ID;
1277      Result :    out RTEMS.Status_Codes
1278   );
1279
1280   procedure Rate_Monotonic_Delete (
1281      ID     : in     RTEMS.ID;
1282      Result :    out RTEMS.Status_Codes
1283   );
1284
1285   procedure Rate_Monotonic_Cancel (
1286      ID     : in     RTEMS.ID;
1287      Result :    out RTEMS.Status_Codes
1288   );
1289
1290   procedure Rate_Monotonic_Period (
1291      ID      : in     RTEMS.ID;
1292      Length  : in     RTEMS.Interval;
1293      Result  :    out RTEMS.Status_Codes
1294   );
1295
1296   procedure Rate_Monotonic_Get_Status (
1297      ID      : in     RTEMS.ID;
1298      Status  :    out RTEMS.Rate_Monotonic_Period_Status;
1299      Result  :    out RTEMS.Status_Codes
1300   );
1301
1302   --
1303   --  Multiprocessing Manager
1304   --
1305
1306   procedure Multiprocessing_Announce;
1307
1308
1309   --
1310   --  Debug Manager
1311   --
1312
1313   procedure Debug_Enable (
1314      To_Be_Enabled : in     RTEMS.Debug_Set
1315   );
1316
1317   procedure Debug_Disable (
1318      To_Be_Disabled : in     RTEMS.Debug_Set
1319   );
1320
1321   function Debug_Is_Enabled (
1322      Level : in     RTEMS.Debug_Set
1323   ) return RTEMS.Boolean;
1324
1325  --
1326  --  Some Useful Data Items
1327  --
1328
1329  Configuration : RTEMS.Configuration_Table_Pointer;
1330  pragma Import (C, Configuration, "_Configuration_Table");
1331  -- function Configuration
1332  -- return RTEMS.Configuration_Table_Pointer;
1333
1334 
1335private
1336end RTEMS;
Note: See TracBrowser for help on using the repository browser.