--******************************************************************************************************************** -- Created: 9-Mar-2021 22:28:18 by OpenVMS SDL EV3-3 -- Source: 24-OCT-1994 14:54:28 $1$DGA8085:[LIB_ADA.LIS]CCBDEF.SDL;1 --******************************************************************************************************************** with SYSTEM; use SYSTEM; with STARLET; use STARLET; with CONDITION_HANDLING; use CONDITION_HANDLING; package CCBDEF is -- module $CCBDEF --+ -- CCB - CHANNEL CONTROL BLOCK -- -- THERE IS ONE CHANNEL CONTROL BLOCK FOR EACH SOFTWARE CHANNEL THAT A -- PROCESS MAY INITIATE I/O REQUESTS ON. THE NUMBER OF SUCH I/O CHANNELS -- IS DETERMINED BY THE FIXED NUMBER ASSIGNED TO A PROCESS PLUS ANY -- ADDITIONAL CHANNELS REQUIRED BY THE IMAGE CURRENTLY BEING EXECUTED -- BY THE PROCESS. -- --- CCB_M_AMB : constant := 16#00000001#; CCB_M_IMGTMP : constant := 16#00000002#; CCB_M_RDCHKDON : constant := 16#00000004#; CCB_M_WRTCHKDON : constant := 16#00000008#; CCB_M_LOGCHKDON : constant := 16#00000010#; CCB_M_PHYCHKDON : constant := 16#00000020#; CCB_M_NOREADACC : constant := 16#00000040#; CCB_M_NOWRITEACC : constant := 16#00000080#; CCB_M_CLONE : constant := 16#00000100#; type CCB_STS_TYPE is -- CHANNEL STATUS record AMB : BOOLEAN; -- MAILBOX ASSOCIATED WITH CHANNEL IMGTMP : BOOLEAN; -- IMAGE TEMPORARY RDCHKDON : BOOLEAN; -- READ PROTECTION CHECK COMPLETED WRTCHKDON : BOOLEAN; -- WRITE PROTECTION CHECK COMPLETED LOGCHKDON : BOOLEAN; -- LOGICAL I/O ACCESS CHECK DONE PHYCHKDON : BOOLEAN; -- PHYSICAL I/O ACCESS CHECK DONE NOREADACC : BOOLEAN; -- READ ACCESS TO DEVICE DISABLED NOWRITEACC : BOOLEAN; -- WRITE ACCESS TO DEVICE DISABLED CLONE : BOOLEAN; -- Clone channel after Posix fork() FILLER_1 : UNSIGNED_23; end record; for CCB_STS_TYPE use record AMB at 0 range 0 .. 0; IMGTMP at 0 range 1 .. 1; RDCHKDON at 0 range 2 .. 2; WRTCHKDON at 0 range 3 .. 3; LOGCHKDON at 0 range 4 .. 4; PHYCHKDON at 0 range 5 .. 5; NOREADACC at 0 range 6 .. 6; NOWRITEACC at 0 range 7 .. 7; CLONE at 1 range 0 .. 0; FILLER_1 at 1 range 1 .. 23; end record; for CCB_STS_TYPE'SIZE use 32; CCB_STS_TYPE_INIT : constant CCB_STS_TYPE := (AMB => FALSE, IMGTMP => FALSE, RDCHKDON => FALSE, WRTCHKDON => FALSE, LOGCHKDON => FALSE, PHYCHKDON => FALSE, NOREADACC => FALSE, NOWRITEACC => FALSE, CLONE => FALSE, FILLER_1 => 0); type CCB_TYPE is record UCB : ADDRESS; -- ADDRESS OF ASSIGNED DEVICE UCB STS : CCB_STS_TYPE; -- CHANNEL STATUS IOC : UNSIGNED_LONGWORD; -- Number of outstanding I/O requests on channel DIRP : ADDRESS; -- DEACCESS I/O REQUEST PACKET ADDRESS AMOD : INTEGER_8; -- ACCESS MODE THAT ASSIGNED CHANNEL FILLER_1 : UNSIGNED_BYTE; FILLER_2 : UNSIGNED_WORD; WIND : ADDRESS; -- Address of Window Control Block CHAN : INTEGER_32; -- associated channel number ----Component(s) below are defined as comments since they ----overlap other fields ---- ----CHAN : UNSIGNED_WORD; FILLER_3 : UNSIGNED_LONGWORD; end record; for CCB_TYPE use record UCB at 0 range 0 .. 31; STS at 4 range 0 .. 31; IOC at 8 range 0 .. 31; DIRP at 12 range 0 .. 31; AMOD at 16 range 0 .. 7; FILLER_1 at 17 range 0 .. 7; FILLER_2 at 18 range 0 .. 15; WIND at 20 range 0 .. 31; CHAN at 24 range 0 .. 31; ----Component representation spec(s) below are defined as ----comments since they overlap other fields ---- ----CHAN at 24 range 0 .. 15; FILLER_3 at 28 range 0 .. 31; end record; for CCB_TYPE'SIZE use 256; CCB_TYPE_INIT : constant CCB_TYPE := (UCB => ADDRESS_ZERO, STS => CCB_STS_TYPE_INIT, IOC => 0, DIRP => ADDRESS_ZERO, AMOD => 0, FILLER_1 => 0, FILLER_2 => 0, WIND => ADDRESS_ZERO, CHAN => 0, FILLER_3 => 0); CCB_K_LENGTH : constant := 32; -- LENGTH OF CCB CCB_S_CCBDEF : constant := 32; -- OLD SIZE NAME, SYNONYM FOR CCB$S_CCB end CCBDEF;