--******************************************************************************************************************** -- Created: 9-Mar-2021 22:28:16 by OpenVMS SDL EV3-3 -- Source: 13-OCT-1999 12:43:08 $1$DGA8085:[LIB_ADA.LIS]BODDEF.SDL;1 --******************************************************************************************************************** with SYSTEM; use SYSTEM; with STARLET; use STARLET; with CONDITION_HANDLING; use CONDITION_HANDLING; package BODDEF is -- module $BODDEF --+ -- BOD - Buffer Object Descriptor -- -- A buffer object descriptor defines a buffer object used -- by the I/O subsystem. --- BOD_M_DELPEN : constant := 16#00000001#; BOD_M_NOQUOTA : constant := 16#00000002#; BOD_M_S2_WINDOW : constant := 16#00000004#; BOD_M_NOSVA : constant := 16#00000008#; BOD_M_SYSBUFOBJ : constant := 16#00000010#; type BOD_FLAGS_TYPE is -- Flags longword record DELPEN : BOOLEAN; -- Delete pending NOQUOTA : BOOLEAN; -- No quota charge for S0 window S2_WINDOW : BOOLEAN; -- Buffer object mapped into S2 space NOSVA : BOOLEAN; -- BO without associated system space SYSBUFOBJ : BOOLEAN; -- System buffer object (no process space ties) FILLER_1 : UNSIGNED_27; end record; for BOD_FLAGS_TYPE use record DELPEN at 0 range 0 .. 0; NOQUOTA at 0 range 1 .. 1; S2_WINDOW at 0 range 2 .. 2; NOSVA at 0 range 3 .. 3; SYSBUFOBJ at 0 range 4 .. 4; FILLER_1 at 0 range 5 .. 31; end record; for BOD_FLAGS_TYPE'SIZE use 32; BOD_FLAGS_TYPE_INIT : constant BOD_FLAGS_TYPE := (DELPEN => FALSE, NOQUOTA => FALSE, S2_WINDOW => FALSE, NOSVA => FALSE, SYSBUFOBJ => FALSE, FILLER_1 => 0); type BOD_TYPE is record FLINK : ADDRESS; -- FLINK into PCB list BLINK : ADDRESS; -- BLINK into PCB list SIZE : UNSIGNED_WORD; -- Size of fixed portion of BOOTCB TYP : UNSIGNED_BYTE; -- Type of control block FILLER_1 : UNSIGNED_BYTE; ACMODE : UNSIGNED_LONGWORD; -- Owner access mode SEQNUM : UNSIGNED_LONGWORD; -- Sequence # at object creation REFCNT : UNSIGNED_LONGWORD; -- No. of references to this BOD FLAGS : BOD_FLAGS_TYPE; -- Flags longword PID : UNSIGNED_LONGWORD; -- PID of creating process BASEPVA : UNSIGNED_QUADWORD; -- Base process address of buffer object BASESVA : UNSIGNED_QUADWORD; -- Base S2 address (valid iff BOD$V_S2_WINDOW) ----Component(s) below are defined as comments since they ----overlap other fields ---- ----BASESVA : ADDRESS; -- Base system address of buffer object VA_PTE : UNSIGNED_QUADWORD; -- S2 VA_PTE (valid iff BOD$V_S2_WINDOW) ----Component(s) below are defined as comments since they ----overlap other fields ---- ----SVAPTE : ADDRESS; -- SVAPTE of first system page of buffer object PAGCNT : UNSIGNED_LONGWORD; -- No. of pages in buffer object FILLER_2 : UNSIGNED_BYTE_ARRAY (0 .. 3); end record; for BOD_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; FILLER_1 at 11 range 0 .. 7; ACMODE at 12 range 0 .. 31; SEQNUM at 16 range 0 .. 31; REFCNT at 20 range 0 .. 31; FLAGS at 24 range 0 .. 31; PID at 28 range 0 .. 31; BASEPVA at 32 range 0 .. 63; BASESVA at 40 range 0 .. 63; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----BASESVA at 40 range 0 .. 31; VA_PTE at 48 range 0 .. 63; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----SVAPTE at 48 range 0 .. 31; PAGCNT at 56 range 0 .. 31; FILLER_2 at 60 range 0 .. 31; end record; for BOD_TYPE'SIZE use 512; BOD_TYPE_INIT : constant BOD_TYPE := (FLINK => ADDRESS_ZERO, BLINK => ADDRESS_ZERO, SIZE => 0, TYP => 0, FILLER_1 => 0, ACMODE => 0, SEQNUM => 0, REFCNT => 0, FLAGS => BOD_FLAGS_TYPE_INIT, PID => 0, BASEPVA => (0, 0), BASESVA => (0, 0), VA_PTE => (0, 0), PAGCNT => 0, FILLER_2 => (others => 0)); BOD_K_LENGTH : constant := 64; -- LENGTH OF STRUCTURE BOD_C_LENGTH : constant := 64; -- LENGTH OF STRUCTURE BOD_S_BODDEF : constant := 64; end BODDEF;