--******************************************************************************************************************** -- Created: 9-Mar-2021 22:28:34 by OpenVMS SDL EV3-3 -- Source: 24-AUG-1999 10:10:05 $1$DGA8085:[LIB_ADA.LIS]PSCANCTXDEF.SDL;1 --******************************************************************************************************************** with SYSTEM; use SYSTEM; with STARLET; use STARLET; with CONDITION_HANDLING; use CONDITION_HANDLING; package PSCANCTXDEF is -- module $PSCANCTXDEF -- -- The PSCANCTX$ structure is exchanged with remote nodes. Any updates to this -- structure must take mixed-version operation into account. -- PSCANCTX_M_SUPER : constant := 16#00000001#; PSCANCTX_M_CSID_VEC : constant := 16#00000002#; PSCANCTX_M_LOCKED : constant := 16#00000004#; PSCANCTX_M_MULTI_NODE : constant := 16#00000008#; PSCANCTX_M_BUSY : constant := 16#00000010#; PSCANCTX_M_RELOCK : constant := 16#00000020#; PSCANCTX_M_THREAD : constant := 16#00000040#; PSCANCTX_M_NEED_THREAD_CAP : constant := 16#00000080#; PSCANCTX_M_SCHED_CLASS_CAP : constant := 16#00000100#; PSCANCTX_K_LENGTH : constant := 64; -- length of data structure PSCANCTX_M_THREAD_ITEM : constant := 1073741824; -- item code references a node PSCANCTX_V_THREAD_ITEM : constant := 30; -- item code references a node PSCANCTX_M_NODE_ITEM : constant := -2147483648; -- item code references a node PSCANCTX_V_NODE_ITEM : constant := 31; -- item code references a node PSCANCTX_S_PSCANCTXDEF : constant := 64; -- Old size name - synonym type PSCANCTX_FLAGS_TYPE is record SUPER : BOOLEAN; -- allocated from supervisor mode CSID_VEC : BOOLEAN; -- csid vector is present LOCKED : BOOLEAN; -- cell is locked in memory MULTI_NODE : BOOLEAN; -- scan is for more than one node BUSY : BOOLEAN; -- scan in progress on this block RELOCK : BOOLEAN; -- ignore BUSY flag, allow a "lock" THREAD : BOOLEAN; -- PSCAN$M_THREAD specified - include threads NEED_THREAD_CAP : BOOLEAN; -- remote node needs kernel thread support SCHED_CLASS_CAP : BOOLEAN; -- remote node needs class scheduling support FILLER_1 : UNSIGNED_23; end record; for PSCANCTX_FLAGS_TYPE use record SUPER at 0 range 0 .. 0; CSID_VEC at 0 range 1 .. 1; LOCKED at 0 range 2 .. 2; MULTI_NODE at 0 range 3 .. 3; BUSY at 0 range 4 .. 4; RELOCK at 0 range 5 .. 5; THREAD at 0 range 6 .. 6; NEED_THREAD_CAP at 0 range 7 .. 7; SCHED_CLASS_CAP at 1 range 0 .. 0; FILLER_1 at 1 range 1 .. 23; end record; for PSCANCTX_FLAGS_TYPE'SIZE use 32; PSCANCTX_FLAGS_TYPE_INIT : constant PSCANCTX_FLAGS_TYPE := (SUPER => FALSE, CSID_VEC => FALSE, LOCKED => FALSE, MULTI_NODE => FALSE, BUSY => FALSE, RELOCK => FALSE, THREAD => FALSE, NEED_THREAD_CAP => FALSE, SCHED_CLASS_CAP => FALSE, FILLER_1 => 0); type PSCANCTX_TYPE is record FLINK : ADDRESS; -- forward link BLINK : ADDRESS; -- back link SIZE : UNSIGNED_WORD; -- size of structure TYP : UNSIGNED_BYTE; -- structure type code SUBTYP : UNSIGNED_BYTE; -- structure subtype MAJ_VERS : UNSIGNED_WORD; -- incompatible level MIN_VERS : UNSIGNED_WORD; -- upwards-compatible level FLAGS : PSCANCTX_FLAGS_TYPE; CUR_CSID : UNSIGNED_LONGWORD; -- CSID for scan in progress CUR_IPID : UNSIGNED_LONGWORD; -- initial IPID for scan in progress NEXT_IPID : UNSIGNED_LONGWORD; -- updated IPID for scan in progress CUR_EPID : UNSIGNED_LONGWORD; -- EPID for scan in progress ITMLSTOFF : UNSIGNED_WORD; -- offset to item list BUFFEROFF : UNSIGNED_WORD; -- offset to buffer area CSIDOFF : UNSIGNED_WORD; -- offset to csid vector CSIDIDX : UNSIGNED_WORD; -- index of current csid SVAPTE : UNSIGNED_LONGWORD; -- sva of pte for this block CWPSSRV : ADDRESS; -- address of CWPSSRV structure JPIBUFADR : ADDRESS; -- address of $GETJPI buffer SEQNUM : UNSIGNED_WORD; -- sequence number ACMODE : UNSIGNED_BYTE; -- access mode of original call SPARE0 : UNSIGNED_BYTE; -- just a little extra SPARE1 : UNSIGNED_LONGWORD; -- just a little extra end record; for PSCANCTX_TYPE use record FLINK at 0 range 0 .. 31; BLINK at 4 range 0 .. 31; SIZE at 8 range 0 .. 15; TYP at 10 range 0 .. 7; SUBTYP at 11 range 0 .. 7; MAJ_VERS at 12 range 0 .. 15; MIN_VERS at 14 range 0 .. 15; FLAGS at 16 range 0 .. 31; CUR_CSID at 20 range 0 .. 31; CUR_IPID at 24 range 0 .. 31; NEXT_IPID at 28 range 0 .. 31; CUR_EPID at 32 range 0 .. 31; ITMLSTOFF at 36 range 0 .. 15; BUFFEROFF at 38 range 0 .. 15; CSIDOFF at 40 range 0 .. 15; CSIDIDX at 42 range 0 .. 15; SVAPTE at 44 range 0 .. 31; CWPSSRV at 48 range 0 .. 31; JPIBUFADR at 52 range 0 .. 31; SEQNUM at 56 range 0 .. 15; ACMODE at 58 range 0 .. 7; SPARE0 at 59 range 0 .. 7; SPARE1 at 60 range 0 .. 31; end record; for PSCANCTX_TYPE'SIZE use 512; PSCANCTX_TYPE_INIT : constant PSCANCTX_TYPE := (FLINK => ADDRESS_ZERO, BLINK => ADDRESS_ZERO, SIZE => 0, TYP => 0, SUBTYP => 0, MAJ_VERS => 0, MIN_VERS => 0, FLAGS => PSCANCTX_FLAGS_TYPE_INIT, CUR_CSID => 0, CUR_IPID => 0, NEXT_IPID => 0, CUR_EPID => 0, ITMLSTOFF => 0, BUFFEROFF => 0, CSIDOFF => 0, CSIDIDX => 0, SVAPTE => 0, CWPSSRV => ADDRESS_ZERO, JPIBUFADR => ADDRESS_ZERO, SEQNUM => 0, ACMODE => 0, SPARE0 => 0, SPARE1 => 0); -- -- The PSCANBUF$ structure is exchanged with remote nodes. Any updates to this -- structure must take mixed-version operation into account. -- PSCANBUF_M_SPARE0 : constant := 16#00000001#; PSCANBUF_K_LENGTH : constant := 32; -- length of data structure PSCANBUF_S_PSCANBUFDEF : constant := 32; -- Old size name - synonym type PSCANBUF_FLAGS_TYPE is record SPARE0 : BOOLEAN; -- filler FILLER_1 : UNSIGNED_31; end record; for PSCANBUF_FLAGS_TYPE use record SPARE0 at 0 range 0 .. 0; FILLER_1 at 0 range 1 .. 31; end record; for PSCANBUF_FLAGS_TYPE'SIZE use 32; PSCANBUF_FLAGS_TYPE_INIT : constant PSCANBUF_FLAGS_TYPE := (SPARE0 => FALSE, FILLER_1 => 0); type PSCANBUF_TYPE is record BUFLEN : UNSIGNED_LONGWORD; -- length of data area SPARE0 : UNSIGNED_LONGWORD; -- spare0 SIZE : UNSIGNED_WORD; -- size of structure TYP : UNSIGNED_BYTE; -- structure type code SUBTYP : UNSIGNED_BYTE; -- structure subtype MAJ_VERS : UNSIGNED_WORD; -- incompatible level MIN_VERS : UNSIGNED_WORD; -- upwards-compatible level FLAGS : PSCANBUF_FLAGS_TYPE; ITMLSTADR : ADDRESS; -- address of copy of JPI item list BUFFER_OFFSET : UNSIGNED_LONGWORD; -- offset to start of buffer FREE_OFFSET : UNSIGNED_LONGWORD; -- offset to next free byte end record; for PSCANBUF_TYPE use record BUFLEN at 0 range 0 .. 31; SPARE0 at 4 range 0 .. 31; SIZE at 8 range 0 .. 15; TYP at 10 range 0 .. 7; SUBTYP at 11 range 0 .. 7; MAJ_VERS at 12 range 0 .. 15; MIN_VERS at 14 range 0 .. 15; FLAGS at 16 range 0 .. 31; ITMLSTADR at 20 range 0 .. 31; BUFFER_OFFSET at 24 range 0 .. 31; FREE_OFFSET at 28 range 0 .. 31; end record; for PSCANBUF_TYPE'SIZE use 256; PSCANBUF_TYPE_INIT : constant PSCANBUF_TYPE := (BUFLEN => 0, SPARE0 => 0, SIZE => 0, TYP => 0, SUBTYP => 0, MAJ_VERS => 0, MIN_VERS => 0, FLAGS => PSCANBUF_FLAGS_TYPE_INIT, ITMLSTADR => ADDRESS_ZERO, BUFFER_OFFSET => 0, FREE_OFFSET => 0); -- -- The PSCANITM$ structure is a local structure. If modified, you do not need -- to take mixed-version operation into account, however you must be sure that -- all modules and images which reference the structure are updated together. -- PSCANITM_K_LENGTH : constant := 12; -- length of data structure PSCANITM_S_PSCANITMDEF : constant := 13; -- Old size name - synonym type PSCANITM_TYPE is record ALLOC_LENGTH : UNSIGNED_LONGWORD; -- allocated length ITMLEN : UNSIGNED_LONGWORD; -- length of item list SIZE : UNSIGNED_WORD; -- size of header TYP : UNSIGNED_BYTE; -- structure type code SUBTYP : UNSIGNED_BYTE; -- structure subtype ITMLST : UNSIGNED_BYTE; -- start of the item list end record; for PSCANITM_TYPE use record ALLOC_LENGTH at 0 range 0 .. 31; ITMLEN at 4 range 0 .. 31; SIZE at 8 range 0 .. 15; TYP at 10 range 0 .. 7; SUBTYP at 11 range 0 .. 7; ITMLST at 12 range 0 .. 7; end record; for PSCANITM_TYPE'SIZE use 104; PSCANITM_TYPE_INIT : constant PSCANITM_TYPE := (ALLOC_LENGTH => 0, ITMLEN => 0, SIZE => 0, TYP => 0, SUBTYP => 0, ITMLST => 0); end PSCANCTXDEF;