! *** PREDECLARED TYPES %IF %DECLARED ( %BASIC$QUADWORD_DECLARED ) = 0 %THEN RECORD BASIC$QUADWORD LONG FILL ( 2 ) END RECORD %LET %BASIC$QUADWORD_DECLARED = 1 %END %IF %IF %DECLARED ( %BASIC$OCTAWORD_DECLARED ) = 0 %THEN RECORD BASIC$OCTAWORD LONG FILL ( 4 ) END RECORD %LET %BASIC$OCTAWORD_DECLARED = 1 %END %IF %IF %DECLARED ( %BASIC$HFLOAT_AXP_DECLARED ) = 0 %THEN RECORD BASIC$HFLOAT_AXP LONG FILL ( 4 ) END RECORD %LET %BASIC$HFLOAT_AXP_DECLARED = 1 %END %IF %IF %DECLARED ( %BASIC$F_FLOATING_COMPLEX_DECL ) = 0 %THEN RECORD BASIC$F_FLOATING_COMPLEX SINGLE REAL_PART SINGLE IMAGINARY_PART END RECORD %LET %BASIC$F_FLOATING_COMPLEX_DECL = 1 %END %IF %IF %DECLARED ( %BASIC$D_FLOATING_COMPLEX_DECL ) = 0 %THEN RECORD BASIC$D_FLOATING_COMPLEX DOUBLE REAL_PART DOUBLE IMAGINARY_PART END RECORD %LET %BASIC$D_FLOATING_COMPLEX_DECL = 1 %END %IF %IF %DECLARED ( %BASIC$G_FLOATING_COMPLEX_DECL ) = 0 %THEN RECORD BASIC$G_FLOATING_COMPLEX GFLOAT REAL_PART GFLOAT IMAGINARY_PART END RECORD %LET %BASIC$G_FLOATING_COMPLEX_DECL = 1 %END %IF %IF %DECLARED ( %BASIC$H_FLOAT_AXP_CMPLX_DCL ) = 0 %THEN RECORD BASIC$H_FLOATING_COMPLEX_AXP BASIC$HFLOAT_AXP REAL_PART BASIC$HFLOAT_AXP IMAGINARY_PART END RECORD %LET %BASIC$H_FLOAT_AXP_CMPLX_DCL = 1 %END %IF DECLARE LONG CONSTANT S2DGB$K_OP_XCDB32 = 1 ! Diagnose opcode for 32-bit buffers DECLARE LONG CONSTANT S2DGB$K_OP_XCDB64 = 2 ! Diagnose opcode for 64-bit buffers DECLARE LONG CONSTANT S2DGB$M_READ = x'00000001' DECLARE LONG CONSTANT S2DGB$M_DISCPRIV = x'00000002' DECLARE LONG CONSTANT S2DGB$M_SYNCHRONOUS = x'00000004' DECLARE LONG CONSTANT S2DGB$M_OBSOLETE1 = x'00000008' DECLARE LONG CONSTANT S2DGB$M_TAGGED_REQ = x'00000010' DECLARE LONG CONSTANT S2DGB$M_TAG = x'000000E0' DECLARE LONG CONSTANT S2DGB$K_TAG_POSITION = 5 ! Bit offset of TAG bitfield DECLARE LONG CONSTANT S2DGB$K_SIMPLE = 0 ! Simple queue tag DECLARE LONG CONSTANT S2DGB$K_ORDERED = 1 ! Ordered queue tag DECLARE LONG CONSTANT S2DGB$K_EXPRESS = 2 ! Head of Queue queue tag DECLARE LONG CONSTANT S2DGB$M_AUTOSENSE = x'00000100' DECLARE LONG CONSTANT S2DGB$M_EXT_LUN = x'00000200' DECLARE LONG CONSTANT S2DGB$K_XCDB32_LENGTH = 60 ! Diagnose buffer length, 32-bit buffers DECLARE LONG CONSTANT S2DGB$K_XCDB64_LENGTH = 60 ! Diagnose buffer length, 64-bit buffers DECLARE LONG CONSTANT S2DGB$K_XCDB_MIN_LENGTH = 60 ! Minimum s2gdb length DECLARE LONG CONSTANT S2DGB$K_EXT_XCDB_MIN_LENGTH = 68 ! Length w/external LUN DECLARE LONG CONSTANT S2DGB$S_S2DGB = 72 record S2DGB LONG S2DGB$L_OPCODE ! Diagnose opcode group S2DGB$R_FLAGS_OVERLAY variant case group S2DGB$R_FILL_13_ variant case LONG S2DGB$L_FLAGS case group S2DGB$R_FILL_14_ ! Read operation ! DiscPriv val in Identigy msg ! Synchronous xfers permitted ! (Ignored) ! Use TCQ ! Queue tag value type ! Return Autosense data ! Use externally-supplied LUN WORD READ_bits ! COMMENT ADDED BY SDL - READ_bits contains bits READ through FILL_15_ end group S2DGB$R_FILL_14_ end variant end group S2DGB$R_FILL_13_ end variant end group S2DGB$R_FLAGS_OVERLAY group S2DGB$R_REMAINING_OVERLAY variant case group S2DGB$R_LAYOUT_32BIT ! Fields in this structure are valid if and ! only if s2dgb$l_opcode = S2DGB$K_OP_XCDB32 LONG S2DGB$L_32CDBADDR ! 32-bit addr of Cmd Desc Blk LONG S2DGB$L_32CDBLEN ! Length of CDB in bytes LONG S2DGB$L_32DATADDR ! 32-bit addr of DATAIN or DATAOUT address LONG S2DGB$L_32DATLEN ! Length of DATAIN or DATAOUT buffer in bytes LONG S2DGB$L_32PADCNT ! Number of pad bytes required. LONG S2DGB$L_32PHSTMO ! Phase timeout value in seconds LONG S2DGB$L_32DSCTMO ! Disconnect timeout value in seconds LONG S2DGB$L_32SENSEADDR ! 32-bit addr of Autosense buffer LONG S2DGB$L_32SENSELEN ! Length of Autosense buffer in bytes LONG S2DGB$L_RESERVED1 ! Reserved field LONG S2DGB$L_RESERVED2 ! Reserved field LONG S2DGB$L_RESERVED3 ! Reserved field LONG S2DGB$L_RESERVED4 ! Reserved field end group S2DGB$R_LAYOUT_32BIT case group S2DGB$R_LAYOUT_64BIT ! Fields in this structure are valid if and ! only if s2dgb$l_opcode = S2DGB$K_OP_XCDB64 BASIC$QUADWORD S2DGB$PQ_64CDBADDR ! 64-bit addr of Cmd Desc Blk BASIC$QUADWORD S2DGB$PQ_64DATADDR ! 64-bit addr of DATAIN or DATAOUT address BASIC$QUADWORD S2DGB$PQ_64SENSEADDR ! 64-bit addr of Autosense buffer LONG S2DGB$L_64CDBLEN ! Length of CDB in bytes LONG S2DGB$L_64DATLEN ! Length of DATAIN or DATAOUT buffer in bytes LONG S2DGB$L_64SENSELEN ! Length of Autosense buffer in bytes LONG S2DGB$L_64PADCNT ! Number of pad bytes required. LONG S2DGB$L_64PHSTMO ! Phase timeout value in seconds LONG S2DGB$L_64DSCTMO ! Disconnect timeout value in seconds LONG S2DGB$L_RESERVED_1 ! Reserved field end group S2DGB$R_LAYOUT_64BIT end variant end group S2DGB$R_REMAINING_OVERLAY BASIC$QUADWORD S2DGB$Q_EXT_LUN ! External LUN BYTE S2DGB$B_FILL_16_ ( 3 ) end record S2DGB