--******************************************************************************************************************** -- Created: 9-Nov-2023 12:07:46 by OpenVMS SDL V3.7 -- Source: 23-JUN-2022 15:11:28 $1$DGA8345:[LIB_ADA.LIS]WSLDEF.SDL;1 --******************************************************************************************************************** with SYSTEM; use SYSTEM; with STARLET; use STARLET; with CONDITION_HANDLING; use CONDITION_HANDLING; package WSLDEF is -- module $WSLDEF --+ -- WORKING SET LIST DEFINITIONS --- WSL_M_WSLE_BITS : constant := 16#000001FF#; WSL_M_VALID : constant := 16#00000001#; WSL_M_PAGTYP : constant := 16#0000000E#; WSL_M_PFNLOCK : constant := 16#00000010#; WSL_M_WSLOCK : constant := 16#00000020#; WSL_M_MODIFY : constant := 16#00000100#; WSL_C_LENGTH : constant := 8; -- Size of WS list entry -- WSL_C_PROCESS : constant := 0; -- Process page WSL_C_SYSTEM : constant := 2; -- System page WSL_C_GLOBAL : constant := 4; -- Global page (read only) WSL_C_GBLWRT : constant := 6; -- Global Writable page WSL_C_PPGTBL : constant := 8; -- Process Page Table WSL_C_GPGTBL : constant := 10; -- Global Page Table WSL_C_RESERVED : constant := 12; -- reserved WSL_C_UNKNOWN : constant := 14; -- Uninitialized db for this PFN (should never appear in WS) WSL_S_WSLDEF : constant := 8; WSL_C_SHIFT_SIZE : constant := 3; -- WSLE size as a power of 2 type WSLE_BITS_OVERLAY_TYPE is record VALID : BOOLEAN; -- WSL entry Valid PAGTYP : UNSIGNED_3; -- Page type (see $PFNDEF for values) PFNLOCK : BOOLEAN; -- Page frame lock -- THE PRECEDING 5 BITS MUST BE IN ORDER WSLOCK : BOOLEAN; -- Working set lock FILLER_1 : UNSIGNED_2; -- Spare bits MODIFY : BOOLEAN; -- Saved modify bit FILLER_2 : UNSIGNED_7; ----Component(s) below are defined as comments since they ----overlap other fields ---- ----WSLE_BITS : UNSIGNED_9; -- Mask for WSLE Bits end record; for WSLE_BITS_OVERLAY_TYPE use record VALID at 0 range 0 .. 0; PAGTYP at 0 range 1 .. 3; PFNLOCK at 0 range 4 .. 4; WSLOCK at 0 range 5 .. 5; FILLER_1 at 0 range 6 .. 7; MODIFY at 1 range 0 .. 0; FILLER_2 at 1 range 1 .. 7; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----WSLE_BITS at 0 range 0 .. 8; end record; for WSLE_BITS_OVERLAY_TYPE'SIZE use 16; WSLE_BITS_OVERLAY_TYPE_INIT : constant WSLE_BITS_OVERLAY_TYPE := (VALID => FALSE, PAGTYP => 0, PFNLOCK => FALSE, WSLOCK => FALSE, FILLER_1 => 0, MODIFY => FALSE, FILLER_2 => 0); type WSLE_OVERLAY_TYPE is record VA : UNSIGNED_QUADWORD; -- 64-bit address ----Component(s) below are defined as comments since they ----overlap other fields ---- ----WSLE_BITS_OVERLAY : WSLE_BITS_OVERLAY_TYPE; end record; for WSLE_OVERLAY_TYPE use record VA at 0 range 0 .. 63; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----WSLE_BITS_OVERLAY at 0 range 0 .. 15; end record; for WSLE_OVERLAY_TYPE'SIZE use 64; WSLE_OVERLAY_TYPE_INIT : constant WSLE_OVERLAY_TYPE := (VA => (0, 0)); type WSL_TYPE is record WSLE_OVERLAY : WSLE_OVERLAY_TYPE; -- PAGE TYPE VIELD DEFINITIONS -- -- These constants have been adjusted by left-shifting the constant by the offset to the field WSL$V_PAGTYP. -- To use these when explicitly extracting the field, the adjustment must be removed. For example: -- -- IF .wsle [wsl$v_pagtyp] EQL (wsl$c_system ^-wsl$v_pagtyp) -- end record; for WSL_TYPE use record WSLE_OVERLAY at 0 range 0 .. 63; end record; for WSL_TYPE'SIZE use 64; WSL_TYPE_INIT : constant WSL_TYPE := ( WSLE_OVERLAY => WSLE_OVERLAY_TYPE_INIT ); end WSLDEF;