|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 11170 (0x2ba2)
Types: TextFile
Notes: R1k Text-file segment
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦bb88763bd⟧
└─⟦this⟧
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
--
-- VERDIX CORPORATION (C) COPYRIGHT 1988, 1989
-- 14130-A Sullyfield Circle Proprietary Information
-- Chantilly, Virginia 22021 Not to be Disclosed
--
-- FILE: V_USR_CONF_I.A
--
-- UNIT: VADS Interface for Configuring A User Program for
-- VADS_MICRO/MC68020.
--
-- PURPOSE: This package provides the interface to VADS used by the
-- the package V_USR_CONF. It contains types, objects,
-- and subprograms used to convey configuration information to and
-- from VADS.
--
-- This package consists of the following type definitions,
-- constants and subprogram interfaces:
-- 1. Small block sizes table
-- 2. Memory allocation configuration table
-- 3. Configuration table
-- 4. Misc user program variables
-- 5. Ada RTS init
-- 6. Ada exit subprogram
--
-- NOTES: Do not modify this package.
--
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
with SYSTEM; use SYSTEM;
with ada_krn_defs;
with link_block;
with v_i_types;
with v_i_cifo;
with language; use language;
with unchecked_conversion;
package V_USR_CONF_I is
pragma suppress(ALL_CHECKS);
pragma suppress(EXCEPTION_TABLES);
pragma not_elaborated;
pragma local_access;
subtype alloc_t is v_i_types.alloc_t;
------------------------ #i1: Small Block Sizes Table --------------------------
type small_block_sizes_t is array(positive range <>) of alloc_t;
----------------- #i2: Memory Allocation Configuration Table -------------------
type allocation_strategy_t is (FIRST_FIT, BEST_FIT);
type mem_alloc_conf_table_t is record
min_size : alloc_t;
-- for larger objects, gives the size at
-- which an over-large space will be broken
-- into a perfect fit and a new free
-- storage block. Should be set to
-- smallest block one ever expects to
-- allocate and should never be larger
-- than the smallest block in the
-- small_block_sizes list table
num_small_block_sizes : integer;
-- specifies the number of elements in
-- the small block sizes table.
small_block_sizes_address : address;
-- starting location of the small block
-- sizes table.
min_list_length : integer;
-- specifies the minimum list length
-- of a small blocks list to keep the
-- allocator from coalescing blocks off
-- of the list. (Used for tuning
-- performance)
intr_obj_size : alloc_t;
-- specifies fixed size of
-- blocks to be allocated when a "new" is
-- performed from an interrupt handler
initial_intr_heap : integer;
-- specifies number of blocks to be
-- pre-allocated for allocation from
-- an interrupt handler.
allocation_strategy : allocation_strategy_t;
-- specifies aa_global_new's strategy
-- to be used when choosing a block
-- from the free list.
end record;
-------------------------- #i3: Configuration Table ----------------------------
type configuration_table_t is record
main_task_stack_size : natural;
-- Size of main subprogram's stack. Stack
-- size excludes room at bottom for
-- exception handling.
default_task_stack_size : natural;
-- Default size for each task's stack
-- area. This value is overridden
-- via the "for T'STORAGE_SIZE use ###"
-- length clause.
exception_stack_size : natural;
-- Space set aside below the bottom
-- of the task stack for exception
-- unwinding.
idle_stack_size : natural;
-- Size of stack for the idle task.
signal_task_stack_size : natural;
-- Size of stack for tasks created
-- for doing rendezvous with
-- interrupt entries.
fast_rendezvous_enabled : boolean;
-- When true, if the acceptor task
-- is already waiting, then, the
-- rendzvous is executed in the context
-- of the caller task.
wait_stack_size : natural;
-- For a fast rendezvous, the acceptor
-- saves it register context, switches
-- to a wait stack and waits. Eventually,
-- the caller task restores and uses the
-- acceptor's saved register context.
-- This parameter
-- specifies how much stack is needed
-- for when the acceptor switches from
-- its normal task stack to a special
-- stack it can use to call a kernel
-- service to block itself.
--
-- If fast_rendezvous_enabled == FALSE,
-- then, not used.
heap_extend : alloc_t;
-- the minimum number of storage units
-- requested from get_heap_memory_callout
get_heap_memory_callout : address;
-- is the address of the routine
-- called when more memory is needed
-- by the underlying allocator for
-- "new" allocations
mem_alloc_conf_table_address : address;
-- starting location of the table that
-- specifies memory allocation
-- configuration and tuning parameters
-- (can be user defined)
default_task_attributes : ada_krn_defs.task_attr_t;
-- Default task attributes to be
-- passed to underlying OS at task
-- create.
main_task_attr_address : address;
-- is the address of the task attributes
-- to be used for the main task. Set
-- to NO_ADDR to use the default task
-- attributes.
signal_task_attr_address : address;
-- is the address of the task attributes
-- to be used for the tasks created to
-- rendezvous with interrupt entries.
-- Set to NO_ADDR to use the default task
-- attributes.
masters_mutex_attr_address: address;
-- is the address of the mutex attributes
-- to be used to initialize the Ada
-- kernel's master mutex.
--
-- Set to NO_ADDR to use the default
-- mutex attributes.
mem_alloc_mutex_attr_address: address;
-- is the address of the mutex attributes
-- to be used to initialize the mutex
-- used for mutual exclusion during
-- memory allocation.
--
-- Set to NO_ADDR to use the default
-- mutex attributes.
ada_io_mutex_attr_address : address;
-- is the address of the mutex attributes
-- to be used to initialize the mutex
-- used for mutual exclusion during
-- Ada I/O operations.
--
-- Set to NO_ADDR to use the default
-- mutex attributes.
old_style_max_intr_entry : address;
-- For backwards compatibility, if the
-- address in the interrupt entry
-- "for use at" clause is <=
-- OLD_STYLE_MAX_INTR_ENTRY, then, it
-- contains the interrupt vector value and
-- not a pointer to the
-- ada_krn_defs.intr_entry_t record.
-- Setting OLD_STYLE_MAX_INTR_ENTRY to 0
-- disables the old way of interpretation.
end record;
type a_configuration_table_t is access configuration_table_t;
function to_a_configuration_table_t is new unchecked_conversion(
address, a_configuration_table_t);
--------------------- #i4: Misc User Program Variables -------------------------
stack_limit: address;
pragma interface_name(stack_limit, "STACK_LIMIT");
-- Bottom of user program's stack. This location is updated by
-- the kernel for each task switch.
stop: address;
pragma interface_name(stop, "_STOP");
-- Top return address on the call stack. Used to "stop" exception
-- unwinding.
-- The user's link block is created by the linker
usr_link_block: link_block.link_block_t;
pragma interface_name(usr_link_block, "LINK_BLOCK");
---------------------------- #i5: Ada RTS Init ------------------------------
-- This routine is called explicity by startup to set up the Ada RTS
function TS_INITIALIZE(
usr_link_block : link_block.a_link_block_t;
configuration_table : v_usr_conf_i.a_configuration_table_t;
main_pragmas : v_i_cifo.a_main_pragmas_t;
startup_continue : address) return integer;
pragma interface(ADA, TS_INITIALIZE);
pragma interface_name(ts_initialize, "TS_INITIALIZE");
-- TS_INITIALIZE is called from the user startup program to
-- boot/initialize the tasking and memory allocation data structures.
-- When TS_INITIALIZE completes its processing, control is
-- transferred to startup_continue.
--
-- If TS_INITIALIZE returns, then, the program is ready to exit and
-- it returns the exit status.
-- This routine is called explicity by startup to initialize
-- the Ada "new" allocation
procedure AA_INIT(
configuration_table: v_usr_conf_i.a_configuration_table_t);
pragma interface(ADA, AA_INIT);
pragma interface_name(AA_INIT, "AA_INIT");
------------------------- #i6: Ada Exit Subprogram -----------------------------
procedure ADA_EXIT(status: integer := 0);
pragma interface(ADA, ADA_EXIT);
pragma interface_name(ADA_EXIT, "_ADA_EXIT");
-- ADA_EXIT is called when the last elaborated package (main subprogram)
-- returns. It does cleanup logic before returning back to OS.
-- These routines will not exist unless a DA runtime is used --
------------------------- #i7: DA configuration -----------------------------
procedure dt_start;
pragma interface(ADA, dt_start);
pragma interface_name(dt_start, "DT_START");
procedure dt_elaborate;
pragma interface(ADA, dt_elaborate);
pragma interface_name(dt_elaborate, "DT_ELABORATE");
end V_USR_CONF_I