|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T V
Length: 5200 (0x1450)
Types: TextFile
Names: »V«
└─⟦516dceb10⟧ Bits:30000751 8mm tape, Rational 1000, RCI_VADS
└─⟦9a14c9417⟧ »DATA«
└─⟦this⟧
-- Copyright 1988 Verdix Corporation
------------------------------------------------------------------------------
-- Interface to the passive task data structure and subprograms.
--
-- The compiler emits calls to these subprograms when
-- "pragma passive" is present in task specification.
------------------------------------------------------------------------------
WITH System;
USE System;
WITH V_I_Types;
WITH V_I_Sema;
PACKAGE V_I_Pass IS
PRAGMA Suppress (All_Checks);
PRAGMA Suppress (Exception_Tables);
PRAGMA Not_Elaborated;
--------------------------------------------------------------------------
-- Passive task header record built by the compiler
--------------------------------------------------------------------------
TYPE Entry_Array IS ARRAY (1 .. 8) OF System.Address;
TYPE Task_Header IS
RECORD
State : Integer;
Region : Integer;
Static_Priority : Priority;
Intr_Flag : Integer;
Intr_Status : V_I_Types.Intr_Status_T;
Sema4 : V_I_Sema.Semaphore_Rec;
Queue : V_I_Sema.Semaphore_Rec;
Entries : Entry_Array;
END RECORD;
--
-- Offsets for these fields must agree with those used in il_task.c
--
FOR Task_Header USE
RECORD
State AT 0 RANGE 0 .. 4 * Storage_Unit - 1;
Region AT 4 RANGE 0 .. 4 * Storage_Unit - 1;
Static_Priority AT 8 RANGE 0 .. 4 * Storage_Unit - 1;
Intr_Flag AT 12 RANGE 0 .. 4 * Storage_Unit - 1;
Intr_Status AT 16 RANGE 0 .. 4 * Storage_Unit - 1;
Sema4 AT 20 RANGE 0 .. 20 * Storage_Unit - 1;
Queue AT 40 RANGE 0 .. 20 * Storage_Unit - 1;
Entries AT 60 RANGE 0 .. 32 * Storage_Unit - 1;
END RECORD;
TYPE Task_Header_Ref IS ACCESS Task_Header;
--------------------------------------------------------------------------
-- Interrupt entry's ISR header record built by the compiler
--------------------------------------------------------------------------
TYPE Isr_Header IS
RECORD
Vector_Num : Integer;
Entry_Num : Integer;
T : Task_Header_Ref;
Finish_Accept_A : Address;
END RECORD;
--
-- Offsets for these fields must agree with those used in il_task.c
--
FOR Isr_Header USE
RECORD
Vector_Num AT 0 RANGE 0 .. 4 * Storage_Unit - 1;
Entry_Num AT 4 RANGE 0 .. 4 * Storage_Unit - 1;
T AT 8 RANGE 0 .. 4 * Storage_Unit - 1;
Finish_Accept_A AT 12 RANGE 0 .. 4 * Storage_Unit - 1;
END RECORD;
Pt_Isr_Vector_Num_Off : CONSTANT := 0;
Pt_Isr_Entry_Num_Off : CONSTANT := 4;
Pt_Isr_T_Off : CONSTANT := 8;
Pt_Isr_Finish_Accept_A_Off : CONSTANT := 12;
TYPE Isr_Header_Ref IS ACCESS Isr_Header;
--------------------------------------------------------------------------
-- Subprograms to call/enter a passive task's entry
--------------------------------------------------------------------------
FUNCTION Pt_Enter (Entry_Num : Integer; T : Task_Header_Ref) RETURN Address;
FUNCTION Pt_Cond_Enter
(Entry_Num : Integer; T : Task_Header_Ref) RETURN Address;
FUNCTION Pt_Timed_Enter
(Timeout : Duration; Entry_Num : Integer; T : Task_Header_Ref)
RETURN Address;
--------------------------------------------------------------------------
-- Subprogam to call/enter a passive task's entry from an ISR
--------------------------------------------------------------------------
FUNCTION Pt_Isr_Enter
(Entry_Num : Integer; T : Task_Header_Ref) RETURN Address;
--------------------------------------------------------------------------
-- Subprogram to leave a passive task
--------------------------------------------------------------------------
PROCEDURE Pt_Leave (T : Task_Header_Ref);
--------------------------------------------------------------------------
-- Subprogram to initialize a passive task
--------------------------------------------------------------------------
PROCEDURE Pt_Init (T : Task_Header_Ref);
--------------------------------------------------------------------------
-- Interrupt entry's ISR
--------------------------------------------------------------------------
PROCEDURE Pt_Isr (I : Isr_Header_Ref);
PRIVATE
PRAGMA Interface (Ada, Pt_Enter);
PRAGMA Interface_Name (Pt_Enter, "PT_ENTER");
PRAGMA Interface (Ada, Pt_Cond_Enter);
PRAGMA Interface_Name (Pt_Cond_Enter, "PT_COND_ENTER");
PRAGMA Interface (Ada, Pt_Timed_Enter);
PRAGMA Interface_Name (Pt_Timed_Enter, "PT_TIMED_ENTER");
PRAGMA Interface (Ada, Pt_Isr_Enter);
PRAGMA Interface_Name (Pt_Isr_Enter, "PT_ISR_ENTER");
PRAGMA Interface (Ada, Pt_Leave);
PRAGMA Interface_Name (Pt_Leave, "PT_LEAVE");
PRAGMA Interface (Ada, Pt_Init);
PRAGMA Interface_Name (Pt_Init, "PT_INIT");
PRAGMA Interface (Ada, Pt_Isr);
PRAGMA Interface_Name (Pt_Isr, "PT_ISR");
END V_I_Pass;