--******************************************************************************************************************** -- Created: 9-Mar-2021 22:28:37 by OpenVMS SDL EV3-3 -- Source: 26-SEP-2003 11:39:54 $1$DGA8085:[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_VALID : constant := 16#00000001#; WSL_M_PAGTYP : constant := 16#0000000E#; WSL_M_PFNLOCK : constant := 16#00000010#; WSL_M_WSLOCK : constant := 16#00000020#; WSL_M_GOODPAGE : constant := 16#00000040#; 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 WSL_VA_TYPE is -- 64-bit address record -- THE FOLLOWING 5 BITS MUST BE IN ORDER 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 GOODPAGE : BOOLEAN; -- This page should remain in WS one more pass FILLER_1 : BOOLEAN; -- Spare bit MODIFY : BOOLEAN; -- Saved modify bit FILLER_2 : BIT_ARRAY (0 .. 54); end record; for WSL_VA_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; GOODPAGE at 0 range 6 .. 6; FILLER_1 at 0 range 7 .. 7; MODIFY at 1 range 0 .. 0; FILLER_2 at 1 range 1 .. 55; end record; for WSL_VA_TYPE'SIZE use 64; WSL_VA_TYPE_INIT : constant WSL_VA_TYPE := (VALID => FALSE, PAGTYP => 0, PFNLOCK => FALSE, WSLOCK => FALSE, GOODPAGE => FALSE, FILLER_1 => FALSE, MODIFY => FALSE, FILLER_2 => (others => FALSE)); type WSL_TYPE is record VA : WSL_VA_TYPE; -- 64-bit address -- 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 VA at 0 range 0 .. 63; end record; for WSL_TYPE'SIZE use 64; WSL_TYPE_INIT : constant WSL_TYPE := ( VA => WSL_VA_TYPE_INIT ); end WSLDEF;