--******************************************************************************************************************** -- Created: 9-Mar-2021 22:28:20 by OpenVMS SDL EV3-3 -- Source: 03-MAR-2005 16:07:07 $1$DGA8085:[LIB_ADA.LIS]DDBDEF.SDL;1 --******************************************************************************************************************** with SYSTEM; use SYSTEM; with STARLET; use STARLET; with CONDITION_HANDLING; use CONDITION_HANDLING; package DDBDEF is -- module $DDBDEF --+ -- DDB - DEVICE DATA BLOCK -- -- THERE IS ONE DEVICE DATA BLOCK FOR EACH CONTROLLER IN A SYSTEM. --+ DDB_M_NO_TIMEOUT : constant := 16#00000001#; DDB_M_PAC : constant := 16#00000002#; DDB_K_PACK : constant := 1; -- LARGE DISK PACKS DDB_K_CART : constant := 2; -- DISK CARTRIDGES DDB_K_SLOW : constant := 3; -- SLOW (CHEAP) DISKS (E.G., FLOPPY) DDB_K_TAPE : constant := 4; -- BLOCK STRUCTURED TAPE (E.G., TU58) type DDB_LINK_TYPE is -- ADDRESS OF NEXT DDB IN LIST (0=LAST) record LINK : ADDRESS; -- ADDRESS OF NEXT DDB IN LIST (0=LAST) end record; for DDB_LINK_TYPE use record LINK at 0 range 0 .. 31; end record; for DDB_LINK_TYPE'SIZE use 32; DDB_LINK_TYPE_INIT : constant DDB_LINK_TYPE := (LINK => ADDRESS_ZERO); type DDB_UCB_TYPE is -- ADDRESS OF FIRST UCB FOR THIS DDB record UCB : ADDRESS; -- ADDRESS OF FIRST UCB FOR THIS DDB end record; for DDB_UCB_TYPE use record UCB at 0 range 0 .. 31; end record; for DDB_UCB_TYPE'SIZE use 32; DDB_UCB_TYPE_INIT : constant DDB_UCB_TYPE := (UCB => ADDRESS_ZERO); type DDB_SIZE_TYPE is -- SIZE OF DDB IN BYTES record SIZE : UNSIGNED_WORD; -- SIZE OF DDB IN BYTES end record; for DDB_SIZE_TYPE use record SIZE at 0 range 0 .. 15; end record; for DDB_SIZE_TYPE'SIZE use 16; DDB_SIZE_TYPE_INIT : constant DDB_SIZE_TYPE := (SIZE => 0); type DDB_TYP_TYPE is -- TYPE OF DATA STRUCTURE FOR DDB record TYP : UNSIGNED_BYTE; -- TYPE OF DATA STRUCTURE FOR DDB end record; for DDB_TYP_TYPE use record TYP at 0 range 0 .. 7; end record; for DDB_TYP_TYPE'SIZE use 8; DDB_TYP_TYPE_INIT : constant DDB_TYP_TYPE := (TYP => 0); type DDB_FLAGS_TYPE is record NO_TIMEOUT : BOOLEAN; -- No TIMEOUT handling PAC : BOOLEAN; -- Using port allocation class FILLER_1 : UNSIGNED_6; end record; for DDB_FLAGS_TYPE use record NO_TIMEOUT at 0 range 0 .. 0; PAC at 0 range 1 .. 1; FILLER_1 at 0 range 2 .. 7; end record; for DDB_FLAGS_TYPE'SIZE use 8; DDB_FLAGS_TYPE_INIT : constant DDB_FLAGS_TYPE := (NO_TIMEOUT => FALSE, PAC => FALSE, FILLER_1 => 0); type DDB_DDT_TYPE is -- ADDRESS OF THE DRIVER DISPATCH TABLE record DDT : ADDRESS; -- ADDRESS OF THE DRIVER DISPATCH TABLE end record; for DDB_DDT_TYPE use record DDT at 0 range 0 .. 31; end record; for DDB_DDT_TYPE'SIZE use 32; DDB_DDT_TYPE_INIT : constant DDB_DDT_TYPE := (DDT => ADDRESS_ZERO); type DDB_ACPCLASS_TYPE is -- CLASS CODE OF DEFAULT ACP record ACPCLASS : UNSIGNED_BYTE; -- CLASS CODE OF DEFAULT ACP end record; for DDB_ACPCLASS_TYPE use record ACPCLASS at 0 range 0 .. 7; end record; for DDB_ACPCLASS_TYPE'SIZE use 8; DDB_ACPCLASS_TYPE_INIT : constant DDB_ACPCLASS_TYPE := (ACPCLASS => 0); type DDB_ACPD_FIELDS_TYPE is record FILLER_1 : UNSIGNED_BYTE_ARRAY (1 .. 3); ACPCLASS : DDB_ACPCLASS_TYPE; -- CLASS CODE OF DEFAULT ACP end record; for DDB_ACPD_FIELDS_TYPE use record FILLER_1 at 0 range 0 .. 23; ACPCLASS at 3 range 0 .. 7; end record; for DDB_ACPD_FIELDS_TYPE'SIZE use 32; DDB_ACPD_FIELDS_TYPE_INIT : constant DDB_ACPD_FIELDS_TYPE := (FILLER_1 => (others => 0), ACPCLASS => DDB_ACPCLASS_TYPE_INIT ); type DDB_NAME_LEN_TYPE is -- CHARACTER COUNT record NAME_LEN : UNSIGNED_BYTE; -- CHARACTER COUNT end record; for DDB_NAME_LEN_TYPE use record NAME_LEN at 0 range 0 .. 7; end record; for DDB_NAME_LEN_TYPE'SIZE use 8; DDB_NAME_LEN_TYPE_INIT : constant DDB_NAME_LEN_TYPE := (NAME_LEN => 0); type DDB_NAME_TYPE is -- GENERIC PATH NAME OF DEVICE record NAME_LEN : DDB_NAME_LEN_TYPE; -- CHARACTER COUNT NAME_STR : STRING(1 .. 15); -- CHARACTER STRING end record; for DDB_NAME_TYPE use record NAME_LEN at 0 range 0 .. 7; NAME_STR at 1 range 0 .. 119; end record; for DDB_NAME_TYPE'SIZE use 128; DDB_NAME_TYPE_INIT : constant DDB_NAME_TYPE := ( NAME_LEN => DDB_NAME_LEN_TYPE_INIT, NAME_STR => (others => ASCII.NUL)); type DDB_SB_TYPE is -- ADDR OF SYSTEMBLOCK record SB : ADDRESS; -- ADDR OF SYSTEMBLOCK end record; for DDB_SB_TYPE use record SB at 0 range 0 .. 31; end record; for DDB_SB_TYPE'SIZE use 32; DDB_SB_TYPE_INIT : constant DDB_SB_TYPE := (SB => ADDRESS_ZERO); type DDB_CONLINK_TYPE is -- NEXT DDB IN CONNECTION SUB-CHAIN record CONLINK : ADDRESS; -- NEXT DDB IN CONNECTION SUB-CHAIN end record; for DDB_CONLINK_TYPE use record CONLINK at 0 range 0 .. 31; end record; for DDB_CONLINK_TYPE'SIZE use 32; DDB_CONLINK_TYPE_INIT : constant DDB_CONLINK_TYPE := (CONLINK => ADDRESS_ZERO); type DDB_ALLOCLS_TYPE is -- DEVICE ALLOCATION CLASS record ALLOCLS : UNSIGNED_LONGWORD; -- DEVICE ALLOCATION CLASS end record; for DDB_ALLOCLS_TYPE use record ALLOCLS at 0 range 0 .. 31; end record; for DDB_ALLOCLS_TYPE'SIZE use 32; DDB_ALLOCLS_TYPE_INIT : constant DDB_ALLOCLS_TYPE := (ALLOCLS => 0); type DDB_FILL_21_TYPE is record PORT_ID : STRING(1 .. 1); -- Reserved end record; for DDB_FILL_21_TYPE use record PORT_ID at 0 range 0 .. 7; end record; for DDB_FILL_21_TYPE'SIZE use 8; DDB_FILL_21_TYPE_INIT : constant DDB_FILL_21_TYPE := (PORT_ID => (others => ASCII.NUL)); type DDB_TYPE is record LINK : DDB_LINK_TYPE; -- ADDRESS OF NEXT DDB IN LIST (0=LAST) UCB : DDB_UCB_TYPE; -- ADDRESS OF FIRST UCB FOR THIS DDB SIZE : DDB_SIZE_TYPE; -- SIZE OF DDB IN BYTES TYP : DDB_TYP_TYPE; -- TYPE OF DATA STRUCTURE FOR DDB FLAGS : DDB_FLAGS_TYPE; DDT : DDB_DDT_TYPE; -- ADDRESS OF THE DRIVER DISPATCH TABLE ACPD : UNSIGNED_LONGWORD; -- NAME OF DEFAULT ACP FOR DEVICE UNITS ----Component(s) below are defined as comments since they ----overlap other fields ---- ----ACPD : UNSIGNED_LONGWORD; -- NAME OF DEFAULT ACP FOR DEVICE UNITS ----ACPD_FIELDS : DDB_ACPD_FIELDS_TYPE; NAME : DDB_NAME_TYPE; -- GENERIC PATH NAME OF DEVICE DPT : ADDRESS; -- ADDR OF DRIVER DPT DRVLINK : ADDRESS; -- ADDR OF NEXT DDB FOR THIS DRIVER SB : DDB_SB_TYPE; -- ADDR OF SYSTEMBLOCK CONLINK : DDB_CONLINK_TYPE; -- NEXT DDB IN CONNECTION SUB-CHAIN ALLOCLS : DDB_ALLOCLS_TYPE; -- DEVICE ALLOCATION CLASS DDB_2P_UCB : ADDRESS; -- ADDRESS OF FIRST UCB ON SECONDARY PATH ----Component(s) below are defined as comments since they ----overlap other fields ---- ----DDB_2P_UCB : ADDRESS; -- ADDRESS OF FIRST UCB ON SECONDARY PATH ----DP_UCB : ADDRESS; -- OLD STYLE SYNONYM FOR ABOVE PORT_ID : UNSIGNED_LONGWORD; -- Reserved ----Component(s) below are defined as comments since they ----overlap other fields ---- ----FILL_21 : DDB_FILL_21_TYPE; CLASS_LKID : UNSIGNED_LONGWORD; -- Reserved DDB_2P_DDB : ADDRESS; -- Reserved SEED_UNIT : UNSIGNED_LONGWORD; -- Seed unit SEED_PTR : ADDRESS; -- Seed pointer FILLER_1 : UNSIGNED_LONGWORD_ARRAY (1 .. 8); -- Reserved end record; for DDB_TYPE use record LINK at 0 range 0 .. 31; UCB at 4 range 0 .. 31; SIZE at 8 range 0 .. 15; TYP at 10 range 0 .. 7; FLAGS at 11 range 0 .. 7; DDT at 12 range 0 .. 31; ACPD at 16 range 0 .. 31; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----ACPD at 16 range 0 .. 31; ----ACPD_FIELDS at 16 range 0 .. 31; NAME at 20 range 0 .. 127; DPT at 36 range 0 .. 31; DRVLINK at 40 range 0 .. 31; SB at 44 range 0 .. 31; CONLINK at 48 range 0 .. 31; ALLOCLS at 52 range 0 .. 31; DDB_2P_UCB at 56 range 0 .. 31; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----DDB_2P_UCB at 56 range 0 .. 31; ----DP_UCB at 56 range 0 .. 31; PORT_ID at 60 range 0 .. 31; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----FILL_21 at 60 range 0 .. 7; CLASS_LKID at 64 range 0 .. 31; DDB_2P_DDB at 68 range 0 .. 31; SEED_UNIT at 72 range 0 .. 31; SEED_PTR at 76 range 0 .. 31; FILLER_1 at 80 range 0 .. 255; end record; for DDB_TYPE'SIZE use 896; DDB_TYPE_INIT : constant DDB_TYPE := ( LINK => DDB_LINK_TYPE_INIT, UCB => DDB_UCB_TYPE_INIT, SIZE => DDB_SIZE_TYPE_INIT, TYP => DDB_TYP_TYPE_INIT, FLAGS => DDB_FLAGS_TYPE_INIT, DDT => DDB_DDT_TYPE_INIT, ACPD => 0, NAME => DDB_NAME_TYPE_INIT, DPT => ADDRESS_ZERO, DRVLINK => ADDRESS_ZERO, SB => DDB_SB_TYPE_INIT, CONLINK => DDB_CONLINK_TYPE_INIT, ALLOCLS => DDB_ALLOCLS_TYPE_INIT, DDB_2P_UCB => ADDRESS_ZERO, PORT_ID => 0, CLASS_LKID => 0, DDB_2P_DDB => ADDRESS_ZERO, SEED_UNIT => 0, SEED_PTR => ADDRESS_ZERO, FILLER_1 => (others => 0)); DDB_K_LENGTH : constant := 112; -- LENGTH OF STANDARD DDB DDB_C_LENGTH : constant := 112; -- LENGTH OF STANDARD DDB DDB_S_DDBDEF : constant := 112; -- OLD DDB SIZE FOR COMPATIBILITY end DDBDEF;