--******************************************************************************************************************** -- Created: 9-Mar-2021 22:28:33 by OpenVMS SDL EV3-3 -- Source: 20-MAY-1993 13:12:48 $1$DGA8085:[LIB_ADA.LIS]PMBDEF.SDL;1 --******************************************************************************************************************** with SYSTEM; use SYSTEM; with STARLET; use STARLET; with CONDITION_HANDLING; use CONDITION_HANDLING; package PMBDEF is -- module $PMBDEF --+ -- PAGE FAULT MONITOR CONTROL BLOCK --- PMB_M_MODE : constant := 16#00000001#; PMB_K_SUBPROC : constant := 0; -- Subprocess mode PMB_K_IMAGE : constant := 1; -- Image mode PMB_M_ASTIP : constant := 16#00000002#; PMB_M_QAST : constant := 16#00000004#; PMB_K_LENGTH : constant := 76; -- Length of PMB PMB_C_LENGTH : constant := 76; -- Length of PMB PMB_S_PMBDEF : constant := 76; -- Old size name - synonym type PMB_FLAGS_TYPE is -- Processing flags record MODE : BOOLEAN; -- Mode of operation ASTIP : BOOLEAN; -- AST in progress flag QAST : BOOLEAN; -- Imbedded ACB is enqueued on the PCB FILLER_1 : UNSIGNED_5; end record; for PMB_FLAGS_TYPE use record MODE at 0 range 0 .. 0; ASTIP at 0 range 1 .. 1; QAST at 0 range 2 .. 2; FILLER_1 at 0 range 3 .. 7; end record; for PMB_FLAGS_TYPE'SIZE use 8; PMB_FLAGS_TYPE_INIT : constant PMB_FLAGS_TYPE := (MODE => FALSE, ASTIP => FALSE, QAST => FALSE, FILLER_1 => 0); type PMB_SUBP_BLOCK_TYPE is -- Utility storage in subprocess mode record FILLER_1 : UNSIGNED_LONGWORD_ARRAY (1 .. 2); -- SPARE MBXCHN : UNSIGNED_WORD; -- Subprocess mailbox channel OACMODE : UNSIGNED_BYTE; -- Owner access mode (Synonym for ACMODE) FILLER_2 : UNSIGNED_BYTE_ARRAY (1 .. 1); -- SPARE IPID : UNSIGNED_LONGWORD; -- IPID of subprocess (Synonym for PID) EPID : UNSIGNED_LONGWORD; -- EPID of subprocess FILLER_3 : UNSIGNED_LONGWORD_ARRAY (1 .. 2); -- SPARE end record; for PMB_SUBP_BLOCK_TYPE use record FILLER_1 at 0 range 0 .. 63; MBXCHN at 8 range 0 .. 15; OACMODE at 10 range 0 .. 7; FILLER_2 at 11 range 0 .. 7; IPID at 12 range 0 .. 31; EPID at 16 range 0 .. 31; FILLER_3 at 20 range 0 .. 63; end record; for PMB_SUBP_BLOCK_TYPE'SIZE use 224; PMB_SUBP_BLOCK_TYPE_INIT : constant PMB_SUBP_BLOCK_TYPE := (FILLER_1 => (others => 0), MBXCHN => 0, OACMODE => 0, FILLER_2 => (others => 0), IPID => 0, EPID => 0, FILLER_3 => (others => 0)); type PMB_ACB_OVERLAY_TYPE is record ASTQFL : ADDRESS; -- ACB flink ASTQBL : ADDRESS; -- ACB blink FILLER_1 : UNSIGNED_BYTE_ARRAY (1 .. 2); -- SPARE ACMODE : UNSIGNED_BYTE; -- Owner access mode RMOD : UNSIGNED_BYTE; -- AST delivery mode/flags PID : UNSIGNED_LONGWORD; -- PID for AST delivery AST : ADDRESS; -- AST routine address ASTPRM : UNSIGNED_LONGWORD; -- AST parameter FILLER_2 : UNSIGNED_LONGWORD_ARRAY (1 .. 2); -- fill to allow overlay of fork block KAST : ADDRESS; -- Address of piggy-back kernel AST routine ----Component(s) below are defined as comments since they ----overlap other fields ---- ----SUBP_BLOCK : PMB_SUBP_BLOCK_TYPE; -- Utility storage in subprocess mode end record; for PMB_ACB_OVERLAY_TYPE use record ASTQFL at 0 range 0 .. 31; ASTQBL at 4 range 0 .. 31; FILLER_1 at 8 range 0 .. 15; ACMODE at 10 range 0 .. 7; RMOD at 11 range 0 .. 7; PID at 12 range 0 .. 31; AST at 16 range 0 .. 31; ASTPRM at 20 range 0 .. 31; FILLER_2 at 24 range 0 .. 63; KAST at 32 range 0 .. 31; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----SUBP_BLOCK at 0 range 0 .. 223; end record; for PMB_ACB_OVERLAY_TYPE'SIZE use 288; PMB_ACB_OVERLAY_TYPE_INIT : constant PMB_ACB_OVERLAY_TYPE := (ASTQFL => ADDRESS_ZERO, ASTQBL => ADDRESS_ZERO, FILLER_1 => (others => 0), ACMODE => 0, RMOD => 0, PID => 0, AST => ADDRESS_ZERO, ASTPRM => 0, FILLER_2 => (others => 0), KAST => ADDRESS_ZERO); type PMB_TYPE is record CURBUF : ADDRESS; -- Current buffer pointer BUFBASE : ADDRESS; -- Current buffer base address SIZE : UNSIGNED_WORD; -- Block size field TYP : UNSIGNED_BYTE; -- Dynamic structure type (PMB) FLAGS : PMB_FLAGS_TYPE; -- Processing flags LASTCPU : UNSIGNED_LONGWORD; -- Last recorded CPU time OVERFLOW : UNSIGNED_LONGWORD; -- Buffer overflow counter (both modes) FILLER_1 : UNSIGNED_LONGWORD; HDR : UNSIGNED_QUADWORD; -- Free buffer queue header SBPHDR : UNSIGNED_QUADWORD; -- Filled buffer queue header ACB_OVERLAY : PMB_ACB_OVERLAY_TYPE; end record; for PMB_TYPE use record CURBUF at 0 range 0 .. 31; BUFBASE at 4 range 0 .. 31; SIZE at 8 range 0 .. 15; TYP at 10 range 0 .. 7; FLAGS at 11 range 0 .. 7; LASTCPU at 12 range 0 .. 31; OVERFLOW at 16 range 0 .. 31; FILLER_1 at 20 range 0 .. 31; HDR at 24 range 0 .. 63; SBPHDR at 32 range 0 .. 63; ACB_OVERLAY at 40 range 0 .. 287; end record; for PMB_TYPE'SIZE use 608; PMB_TYPE_INIT : constant PMB_TYPE := (CURBUF => ADDRESS_ZERO, BUFBASE => ADDRESS_ZERO, SIZE => 0, TYP => 0, FLAGS => PMB_FLAGS_TYPE_INIT, LASTCPU => 0, OVERFLOW => 0, FILLER_1 => 0, HDR => (0, 0), SBPHDR => (0, 0), ACB_OVERLAY => PMB_ACB_OVERLAY_TYPE_INIT ); end PMBDEF;