DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400 Tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400 Tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ T V

⟦83b63f12e⟧ TextFile

    Length: 5200 (0x1450)
    Types: TextFile
    Names: »V«

Derivation

└─⟦516dceb10⟧ Bits:30000751 8mm tape, Rational 1000, RCI_VADS
    └─ ⟦9a14c9417⟧ »DATA« 
        └─⟦this⟧ 

TextFile

-- 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;