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