/**/ /***************************************************************************/ /** **/ /** © Copyright 2010, Hewlett-Packard Development Company, L.P. **/ /** **/ /** Confidential computer software. Valid license from HP and/or **/ /** its subsidiaries required for possession, use, or copying. **/ /** **/ /** Consistent with FAR 12.211 and 12.212, Commercial Computer Software, **/ /** Computer Software Documentation, and Technical Data for Commercial **/ /** Items are licensed to the U.S. Government under vendor's standard **/ /** commercial license. **/ /** **/ /** Neither HP nor any of its subsidiaries shall be liable for technical **/ /** or editorial errors or omissions contained herein. The information **/ /** in this document is provided "as is" without warranty of any kind and **/ /** is subject to change without notice. The warranties for HP products **/ /** are set forth in the express limited warranty statements accompanying **/ /** such products. Nothing herein should be construed as constituting an **/ /** additional warranty. **/ /** **/ /***************************************************************************/ /********************************************************************************************************************************/ /* Created: 30-Mar-2010 17:26:28 by OpenVMS SDL EV3-3 */ /* Source: 06-JUN-2008 07:01:05 $1$DGA7274:[LIB_H.SRC]SCSIDEF.SDL;1 */ /********************************************************************************************************************************/ /*** MODULE $SCSIDEF IDENT X-34 ***/ #ifndef __SCSIDEF_LOADED #define __SCSIDEF_LOADED 1 #pragma __nostandard /* This file uses non-ANSI-Standard features */ #pragma __member_alignment __save #pragma __nomember_alignment #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __save /* Save the previously-defined required ptr size */ #pragma __required_pointer_size __short /* And set ptr size default to 32-bit pointers */ #endif #ifdef __cplusplus extern "C" { #define __unknown_params ... #define __optional_params ... #else #define __unknown_params #define __optional_params ... #endif #ifndef __struct #if !defined(__VAXC) #define __struct struct #else #define __struct variant_struct #endif #endif #ifndef __union #if !defined(__VAXC) #define __union union #else #define __union variant_union #endif #endif /* */ /* Bit definitions for FIBRE_SCSI_RSV1 */ /* */ #define SCSI$M_DK_BOOT_LOG 0x1 #define SCSI$M_VERBOSE 0x2 #define SCSI$M_DIS_PER_RES_UNK 0x4 #define SCSI$M_DIS_PER_RES_HSG 0x8 #define SCSI$M_DIS_PER_RES_HSV 0x10 #define SCSI$M_DIS_PER_RES_MSA 0x20 #define SCSI$M_DIS_PER_RES_VERS 0x40 #define SCSI$M_DIS_PER_RES_HPXP 0x80 #define SCSI$M_DIS_PER_RES_BIT8 0x100 #define SCSI$M_DIS_PER_RES_BIT9 0x200 #define SCSI$M_DIS_PER_RES_BITA 0x400 #define SCSI$M_DIS_PER_RES_BITB 0x800 #define SCSI$M_DIS_PER_RES_BITC 0x1000 #define SCSI$M_DIS_PER_RES_BITD 0x2000 #define SCSI$M_DIS_PER_RES_BITE 0x4000 #define SCSI$M_DIS_PER_RES_BITF 0x8000 #define SCSI$V_RWH 16 /* Base bit offset of Read/Write History bits */ #define SCSI$M_RWH_SCSI 0x10000 #define SCSI$M_RWH_FC 0x20000 #define SCSI$M_RWH_SW_ISCSI 0x40000 #define SCSI$M_RWH_HW_ISCSI 0x80000 #define SCSI$M_RWH_SAS 0x100000 #define SCSI$M_RWH_ALL 2031616 /* Define all-transport constant mask */ #define SCSI$M_FIX_OS_MODE 0x200000 #define SCSI$M_CRASH_ON_RESET_FAIL 0x40000000 #define SCSI$M_ENABLE_PKR_RESET 0x80000000 #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __quadword #else #pragma __nomember_alignment #endif typedef struct _fibre_scsi_rsv1 { #pragma __nomember_alignment unsigned scsi$v_dk_boot_log : 1; /* Enable DKLOG for boot device */ unsigned scsi$v_verbose : 1; /* Driver is verbose on boot */ unsigned scsi$v_dis_per_res_unk : 1; /* Selective disables for Persistent Reservations */ unsigned scsi$v_dis_per_res_hsg : 1; unsigned scsi$v_dis_per_res_hsv : 1; unsigned scsi$v_dis_per_res_msa : 1; unsigned scsi$v_dis_per_res_vers : 1; unsigned scsi$v_dis_per_res_hpxp : 1; unsigned scsi$v_dis_per_res_bit8 : 1; /* Reserved for future devices */ unsigned scsi$v_dis_per_res_bit9 : 1; unsigned scsi$v_dis_per_res_bita : 1; unsigned scsi$v_dis_per_res_bitb : 1; unsigned scsi$v_dis_per_res_bitc : 1; unsigned scsi$v_dis_per_res_bitd : 1; unsigned scsi$v_dis_per_res_bite : 1; unsigned scsi$v_dis_per_res_bitf : 1; /* X-33 */ /* Initialize all-transport RWH mask */ /* Add SCSI to mask */ unsigned scsi$v_rwh_scsi : 1; /* Enable SCSI R/W History */ /* Add FibreChannel to mask */ unsigned scsi$v_rwh_fc : 1; /* Enable FibreChannel R/W History */ /* Add SW iSCSI to mask */ unsigned scsi$v_rwh_sw_iscsi : 1; /* Enable SW iSCSI R/W History */ /* Add HW iSCSI to mask */ unsigned scsi$v_rwh_hw_iscsi : 1; /* Enable HW iSCSI R/W History */ /* Add SAS to mask */ unsigned scsi$v_rwh_sas : 1; /* Enable SAS R/W History */ unsigned scsi$v_fix_os_mode : 1; /* X-34 Allow OS mode bit update (QLogic) */ unsigned scsi$v_reserved : 8; unsigned scsi$v_crash_on_reset_fail : 1; unsigned scsi$v_enable_pkr_reset : 1; char scsi$b_fill_0_ [4]; } FIBRE_SCSI_RSV1; /* */ /* INQUIRY command */ /* */ /* The Inquiry command is also defined in the class drivers and in SCSI2AUTO. */ /* It is defined here for use by IOGEN$FIBRE_CONFIG and any other module that */ /* might need it. */ /* */ #define INQ_CMD$K_INQ_OPCODE 18 #define INQ_CMD$M_ENABLE_VPD 0x1 #define INQ_CMD$M_COMMAND_DATA 0x2 #define INQ_CMD$K_LENGTH 6 #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __longword #else #pragma __nomember_alignment #endif typedef struct _inq_cmd { #pragma __nomember_alignment unsigned char inq_cmd$b_opcode; /* Operation code */ __union { unsigned char inq_cmd$b_flags; __struct { unsigned inq_cmd$v_enable_vpd : 1; /* Enable return of Vital Product Data */ unsigned inq_cmd$v_command_data : 1; /* Enable return of Command Support Data */ unsigned inq_cmd$v_reserved1 : 6; /* reserved */ } inq_cmd$r_flags_bits; } inq_cmd$r_flags_overlay; unsigned char inq_cmd$b_vpd_page; /* VPD page or command support query opcode */ unsigned char inq_cmd$b_reserved2; /* reserved */ unsigned char inq_cmd$b_alloc_length; /* Allocation length */ unsigned char inq_cmd$b_control; /* Control byte */ char inq_cmd$b_fill_1_ [2]; } INQ_CMD; #if !defined(__VAXC) #define inq_cmd$b_flags inq_cmd$r_flags_overlay.inq_cmd$b_flags #define inq_cmd$v_enable_vpd inq_cmd$r_flags_overlay.inq_cmd$r_flags_bits.inq_cmd$v_enable_vpd #define inq_cmd$v_command_data inq_cmd$r_flags_overlay.inq_cmd$r_flags_bits.inq_cmd$v_command_data #endif /* #if !defined(__VAXC) */ /* */ /* Standard INQUIRY data */ /* */ /* The standard inquiry data contains 36 bytes, followed by a variable number of */ /* vendor specific parameters. */ /* */ #define SCSI$INQ$M_DEVICE_TYPE 0x1F #define SCSI$C_DISK 0 /* 00: Direct-access device (e.g., magnetic disk) */ #define SCSI$C_TAPE 1 /* 01: Sequential-access device (e.g., magnetic tape) */ #define SCSI$C_PRINTER 2 /* 02: Printer device */ #define SCSI$C_CPU 3 /* 03: Processor device */ #define SCSI$C_WORM 4 /* 04: Write-once device */ #define SCSI$C_CDROM 5 /* 05: CD-ROM device */ #define SCSI$C_SCANNER 6 /* 06: Scanner device */ #define SCSI$C_OPTICAL 7 /* 07: Optical memory device (e.g., some optical disks) */ #define SCSI$C_JUKEBOX 8 /* 08: Medium Changer device (e.g., jukeboxes) */ #define SCSI$C_INTERCONNECT 9 /* 09: Communications device */ /* 0A: Reserved */ /* 0B: Reserved */ #define SCSI$C_SCC 12 /* 0C: Storage array controller (RAID) */ #define SCSI$C_ENC_SVCS 13 /* 0D: Enclosure services */ #define SCSI$C_RBC 14 /* 0E: Simplified direct-access */ /* 0F-16: Reserved */ /* 17-1E: Reserved */ #define SCSI$C_UNKNOWN 31 /* 1F: Unknown or no device type */ #define SCSI$INQ$M_QUALIFIER 0xE0 #define SCSI$C_LUN_CONNECTED 0 /* Peripheral device is connected to LUN */ #define SCSI$C_LUN_NOCONNECT 1 /* Peripheral device is not connected to LUN */ #define SCSI$C_LUN_UNAVAILABLE 3 /* Peripheral device does not support LUNs */ #define SCSI$INQ$M_MODIFIER 0x7F #define SCSI$INQ$M_RMB 0x80 #define SCSI$INQ$M_ANSI_VERSION 0x7 #define SCSI$C_ANSI_UNKNOWN 0 /* 0: The device ANSI version is unknown */ #define SCSI$C_ANSI_SCSI_1 1 /* 1: The device complies to SCSI-1 (ANSI X3.131-1986) */ #define SCSI$C_ANSI_SCSI_2 2 /* 2: The device complies to SCSI-2 (revision ?) */ #define SCSI$C_ANSI_SCSI_3_SPC1 3 /* 3: The device complies to SCSI-3 SPC-1 */ #define SCSI$C_ANSI_SCSI_3_SPC2 4 /* 4: The device complies to SCSI-3 SPC-2 */ #define SCSI$C_ANSI_SCSI_3_SPC3 5 /* 5: The device complies to SCSI-3 SPC-3 */ #define SCSI$C_ANSI_SCSI_3 3 /* 3: The device complies to SCSI_3 */ #define SCSI$INQ$M_ECMA_VERSION 0x38 #define SCSI$INQ$M_ISO_VERSION 0xC0 #define SCSI$INQ$M_RESP_DATA_FORMAT 0xF #define SCSI$C_SCSI_1 0 /* INQUIRY data in SCSI-1 format */ #define SCSI$C_OTHER 1 /* INQUIRY data in pre-SCSI-2 format */ #define SCSI$C_SCSI_2 2 /* INQUIRY data in SCSI-2 format */ #define SCSI$INQ$M_HIERARCH_SUPPORT 0x10 #define SCSI$INQ$M_NORMAL_ACA 0x20 #define SCSI$INQ$M_TRMIOP 0x40 #define SCSI$INQ$M_AENC 0x80 #define SCSI$INQ$M_PROTECT 0x1 #define SCSI$INQ$M_3PC 0x8 #define SCSI$INQ$M_TPGS 0x30 #define SCSI$INQ$C_NO_ASYM 0 /* No asymmetric logical unit access */ #define SCSI$INQ$C_IMPLICIT_ASYM_ONLY 1 /* Implicit asymmetric access only */ #define SCSI$INQ$C_EXPLICIT_ASYM_ONLY 2 /* Explicit asymmetric access only */ #define SCSI$INQ$C_IMPL_EXPL_ASYM 3 /* Both implicit and explicit asymmetric access supported */ #define SCSI$INQ$M_ACC 0x40 #define SCSI$INQ$M_SSC_SUPPORT 0x80 #define SCSI$INQ$M_ADDRESS_16BIT 0x1 #define SCSI$INQ$M_ADDRESS_32BIT 0x2 #define SCSI$INQ$M_REQ_ACK_XFERS 0x4 #define SCSI$INQ$M_MEDIUM_CHANGER 0x8 #define SCSI$INQ$M_MULTI_PORT 0x10 #define SCSI$INQ$M_VENDOR_SPEC1 0x20 #define SCSI$INQ$M_ENCLOSURE_SVCS 0x40 #define SCSI$INQ$M_BASIC_QUEUING 0x80 #define SCSI$INQ$M_SFTRE 0x1 #define SCSI$INQ$M_CMDQUE 0x2 #define SCSI$INQ$M_XFER_DISABLE 0x4 #define SCSI$INQ$M_LINKED 0x8 #define SCSI$INQ$M_SYNC 0x10 #define SCSI$INQ$M_WBUS16 0x20 #define SCSI$INQ$M_WBUS32 0x40 #define SCSI$INQ$M_RELADR 0x80 #define INQ_DATA$K_STANDARD_LENGTH 36 #define SCSI$INQ$M_IUS 0x1 #define SCSI$INQ$M_QAS 0x2 #define SCSI$INQ$M_CLOCKING 0xC #define SCSI$C_ST_ONLY 0 /* Device server supports only ST */ #define SCSI$C_DT_ONLY 1 /* Device server supports only DT */ #define SCSI$C_ST_AND_DT 3 /* Device server supports ST and DT */ #define SCSI$INQ$M_RESERVED3 0xF #define SCSI$INQ$M_OTHER_STATUS 0x10 #define SCSI$INQ$M_MULTIBUS 0x20 #define SCSI$INQ$M_BOOT_PREFERENCE 0x40 #define SCSI$INQ$M_EXT_LUN_SUPPORT 0x80 #define INQ_DATA$K_LENGTH 255 #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __longword #else #pragma __nomember_alignment #endif typedef struct _inquiry_data { #pragma __nomember_alignment __struct { /* Peripheral device types & qualifiers */ unsigned scsi$inq$v_device_type : 5; /* Peripheral device type */ unsigned scsi$inq$v_qualifier : 3; /* Peripheral qualifer */ } scsi$inq$r_peripheral; __struct { /* Device Type Modifiers */ unsigned scsi$inq$v_modifier : 7; /* SCSI-2: Device Type Modifiers */ unsigned scsi$inq$v_rmb : 1; /* Removalable media bit */ } scsi$inq$r_device_type_mod; __struct { /* SCSI Versions */ unsigned scsi$inq$v_ansi_version : 3; /* ANSI Approved Version */ unsigned scsi$inq$v_ecma_version : 3; /* ECMA version number */ unsigned scsi$inq$v_iso_version : 2; /* ISO version number */ } scsi$inq$r_version; __struct { /* SCSI INQUIRY Flags */ unsigned scsi$inq$v_resp_data_format : 4; /* Response data (INQUIRY) format */ unsigned scsi$inq$v_hierarch_support : 1; /* SCSI-3: Hierarchical addressing model used */ unsigned scsi$inq$v_normal_aca : 1; /* SCSI-3: CDB NACA bit supported */ unsigned scsi$inq$v_trmiop : 1; /* Device supports terminate I/O process */ unsigned scsi$inq$v_aenc : 1; /* Device supports Asych. Event Notification */ } scsi$inq$r_flags_1; unsigned char scsi$inq$b_add_length; /* Additional length in bytes of parameters */ __struct { unsigned scsi$inq$v_protect : 1; /* Logical unit supports protection information */ unsigned scsi$inq$v_reserved2 : 2; /* reserved */ unsigned scsi$inq$v_3pc : 1; /* Third-party Copy support */ unsigned scsi$inq$v_tpgs : 2; /* Target port group support */ unsigned scsi$inq$v_acc : 1; /* Device contains an access controls coordinator */ unsigned scsi$inq$v_ssc_support : 1; /* SCSI-3: Device has embedded storage array controller */ } scsi$inq$r_sscs; __struct { /* SCSI-3 Flags */ unsigned scsi$inq$v_address_16bit : 1; /* 16 bit SCSI addresses supported */ unsigned scsi$inq$v_address_32bit : 1; /* 32 bit SCSI addresses supported */ unsigned scsi$inq$v_req_ack_xfers : 1; /* Request/Acknowledge transfer supported */ unsigned scsi$inq$v_medium_changer : 1; /* Device has medium transport element */ unsigned scsi$inq$v_multi_port : 1; /* Device has 2 or more ports */ unsigned scsi$inq$v_vendor_spec1 : 1; /* Defined by vendor */ unsigned scsi$inq$v_enclosure_svcs : 1; /* Device has embedded enclosure services component */ unsigned scsi$inq$v_basic_queuing : 1; /* Basic task management (SAM) model supported */ } scsi$inq$r_flags_2; __struct { /* SCSI INQUIRY Flags */ unsigned scsi$inq$v_sftre : 1; /* SCSI-2: Device supports soft resets. (SCSI-3: vendor-specific). */ unsigned scsi$inq$v_cmdque : 1; /* Device supports tagged command queueing */ unsigned scsi$inq$v_xfer_disable : 1; /* SCSI-3: Supports continue task, target transfer disable */ unsigned scsi$inq$v_linked : 1; /* Device supports linked commands */ unsigned scsi$inq$v_sync : 1; /* Device supports synchronous data xfer */ unsigned scsi$inq$v_wbus16 : 1; /* Device supports 16-bit data xfers */ unsigned scsi$inq$v_wbus32 : 1; /* Device supports 32-bit data xfers */ unsigned scsi$inq$v_reladr : 1; /* Device supports relative address for linked cmds */ } scsi$inq$r_flags; char scsi$inq$b_vendor_id [8]; /* Vendor Identification field */ char scsi$inq$b_product_id [16]; /* Product Identification field */ char scsi$inq$b_product_revision [4]; /* Vendor Product Revision level */ unsigned char scsi$inq$b_this_serial_no [10]; /* This controller's serial number */ unsigned char scsi$inq$b_other_serial_no [10]; /* Other controller's serial number */ __struct { /* Additional SCSI INQUIRY Flags from SPC-3 */ unsigned scsi$inq$v_ius : 1; /* Indicates Information Units support */ unsigned scsi$inq$v_qas : 1; /* Indicates Quick Arbitration and Selection support */ unsigned scsi$inq$v_clocking : 2; /* Indicates ST and DT synchronous transfer support */ unsigned scsi$inq$v_reserved7 : 4; /* reserved */ } scsi$inq$r_flags_4; unsigned char scsi$inq$b_reserved2 [39]; /* reserved */ __struct { /* SCSI-3 Flags */ unsigned scsi$inq$v_reserved3 : 4; /* reserved */ unsigned scsi$inq$v_other_status : 1; /* Other controller is up */ unsigned scsi$inq$v_multibus : 1; /* In multi-bus failover mode (HCCF) */ unsigned scsi$inq$v_boot_preference : 1; /* Owned by this controller at controller boot */ unsigned scsi$inq$v_ext_lun_support : 1; /* 32 LUNs per target support */ } scsi$inq$r_flags_3; unsigned char scsi$inq$b_preferred_luns [32]; /* LUNs preferred to this controller */ unsigned char scsi$inq$b_reserved4; /* reserved */ unsigned char scsi$inq$b_node_id [8]; /* Alternate location for node's WWID */ unsigned __int64 scsi$inq$q_reserved5 [13]; /* reserved */ unsigned char scsi$inq$b_allocation_class [4]; /* Allocation class */ unsigned char scsi$inq$b_reserved6 [9]; /* reserved */ unsigned char scsi$inq$b_fill1; /* Fill for alignment */ } INQUIRY_DATA; #if !defined(__VAXC) #define scsi$inq$v_device_type scsi$inq$r_peripheral.scsi$inq$v_device_type #define scsi$inq$v_qualifier scsi$inq$r_peripheral.scsi$inq$v_qualifier #define scsi$inq$v_modifier scsi$inq$r_device_type_mod.scsi$inq$v_modifier #define scsi$inq$v_rmb scsi$inq$r_device_type_mod.scsi$inq$v_rmb #define scsi$inq$v_ansi_version scsi$inq$r_version.scsi$inq$v_ansi_version #define scsi$inq$v_ecma_version scsi$inq$r_version.scsi$inq$v_ecma_version #define scsi$inq$v_iso_version scsi$inq$r_version.scsi$inq$v_iso_version #define scsi$inq$v_resp_data_format scsi$inq$r_flags_1.scsi$inq$v_resp_data_format #define scsi$inq$v_hierarch_support scsi$inq$r_flags_1.scsi$inq$v_hierarch_support #define scsi$inq$v_normal_aca scsi$inq$r_flags_1.scsi$inq$v_normal_aca #define scsi$inq$v_trmiop scsi$inq$r_flags_1.scsi$inq$v_trmiop #define scsi$inq$v_aenc scsi$inq$r_flags_1.scsi$inq$v_aenc #define scsi$inq$v_protect scsi$inq$r_sscs.scsi$inq$v_protect #define scsi$inq$v_3pc scsi$inq$r_sscs.scsi$inq$v_3pc #define scsi$inq$v_tpgs scsi$inq$r_sscs.scsi$inq$v_tpgs #define scsi$inq$v_acc scsi$inq$r_sscs.scsi$inq$v_acc #define scsi$inq$v_ssc_support scsi$inq$r_sscs.scsi$inq$v_ssc_support #define scsi$inq$v_address_16bit scsi$inq$r_flags_2.scsi$inq$v_address_16bit #define scsi$inq$v_address_32bit scsi$inq$r_flags_2.scsi$inq$v_address_32bit #define scsi$inq$v_req_ack_xfers scsi$inq$r_flags_2.scsi$inq$v_req_ack_xfers #define scsi$inq$v_medium_changer scsi$inq$r_flags_2.scsi$inq$v_medium_changer #define scsi$inq$v_multi_port scsi$inq$r_flags_2.scsi$inq$v_multi_port #define scsi$inq$v_vendor_spec1 scsi$inq$r_flags_2.scsi$inq$v_vendor_spec1 #define scsi$inq$v_enclosure_svcs scsi$inq$r_flags_2.scsi$inq$v_enclosure_svcs #define scsi$inq$v_basic_queuing scsi$inq$r_flags_2.scsi$inq$v_basic_queuing #define scsi$inq$v_sftre scsi$inq$r_flags.scsi$inq$v_sftre #define scsi$inq$v_cmdque scsi$inq$r_flags.scsi$inq$v_cmdque #define scsi$inq$v_xfer_disable scsi$inq$r_flags.scsi$inq$v_xfer_disable #define scsi$inq$v_linked scsi$inq$r_flags.scsi$inq$v_linked #define scsi$inq$v_sync scsi$inq$r_flags.scsi$inq$v_sync #define scsi$inq$v_wbus16 scsi$inq$r_flags.scsi$inq$v_wbus16 #define scsi$inq$v_wbus32 scsi$inq$r_flags.scsi$inq$v_wbus32 #define scsi$inq$v_reladr scsi$inq$r_flags.scsi$inq$v_reladr #define scsi$inq$v_ius scsi$inq$r_flags_4.scsi$inq$v_ius #define scsi$inq$v_qas scsi$inq$r_flags_4.scsi$inq$v_qas #define scsi$inq$v_clocking scsi$inq$r_flags_4.scsi$inq$v_clocking #define scsi$inq$v_reserved3 scsi$inq$r_flags_3.scsi$inq$v_reserved3 #define scsi$inq$v_other_status scsi$inq$r_flags_3.scsi$inq$v_other_status #define scsi$inq$v_multibus scsi$inq$r_flags_3.scsi$inq$v_multibus #define scsi$inq$v_boot_preference scsi$inq$r_flags_3.scsi$inq$v_boot_preference #define scsi$inq$v_ext_lun_support scsi$inq$r_flags_3.scsi$inq$v_ext_lun_support #endif /* #if !defined(__VAXC) */ #define inquiry_data _inquiry_data /* Make compatible with former inquiry_data definition /* */ /* Mode Parameter Header (six byte) */ /* */ struct mode_param_hdr_6 { unsigned char scsi$mph6$b_data_length; /* Mode data Length */ unsigned char scsi$mph6$b_medium_type; /* Medium type */ unsigned char scsi$mph6$b_device_param; /* Device-specific parameter */ unsigned char scsi$mph6$b_block_length; /* Block descriptor length */ } ; /* */ /* Mode Parameter Header (ten byte) */ /* */ struct mode_param_hdr_10 { unsigned short int scsi$mph10$w_data_length; /* Mode data Length */ unsigned char scsi$mph10$b_medium_type; /* Medium type */ unsigned char scsi$mph10$b_device_param; /* Device-specific parameter */ unsigned char scsi$mph10$b_reserved1 [2]; /* Reserved */ unsigned short int scsi$mph10$w_block_length; /* Block descriptor length */ } ; /* */ /* Mode Parameters used with direct access devices (DK) */ /* */ #define SCSI$DK$C_DEFAULT 0 /* Default medium type (currently mounted medium type) */ #define SCSI$DK$C_SS 1 /* Flexible disk, single-sided; unspecified medium */ #define SCSI$DK$C_DS 2 /* Flexible disk, double-sided; unspecified medium */ #define SCSI$DK$C_DD 3 /* Flexible disk, double-sided; double-density */ /* */ /* Direct-Access params */ /* */ #define SCSI$DK$M_DPOFUA 0x10 #define SCSI$DK$M_WP 0x80 struct disk_specific_param { unsigned scsi$dk$v_reserved1 : 4; /* Reserved */ unsigned scsi$dk$v_dpofua : 1; /* Disable Page Out/Force Unit Access */ unsigned scsi$dk$v_reserved2 : 2; /* Reserved */ unsigned scsi$dk$v_wp : 1; /* Write Protect */ } ; /* */ /* CD-ROM specific parameter */ /* */ #define SCSI$CD$M_EBC 0x1 #define SCSI$CD$M_CACHE 0x10 struct cdrom_specific_param { unsigned scsi$cd$v_ebc : 1; /* Enable Blank Check */ unsigned scsi$cd$v_reserved1 : 3; /* Reserved */ unsigned scsi$cd$v_cache : 1; /* Device supports cache memory */ unsigned scsi$cd$v_reserved2 : 3; /* Reserved */ } ; /* */ /* Mode Parameter Block Descriptor */ /* */ struct mode_parameter { unsigned char scsi$mpbd$b_density; /* Device specific density code */ unsigned char scsi$mpbd$b_block [3]; /* # of logical blocks density applies */ char scsi$mpbd$b_reserved1; /* Reserved */ unsigned char scsi$mpbd$b_length [3]; /* # of bytes in each logical block */ } ; /* */ /* Identify Message */ /* */ #define SCSI$IDENT$M_LUNTRN 0x7 #define SCSI$IDENT$M_LUNTAR 0x20 #define SCSI$IDENT$M_DISC_PRIV 0x40 #define SCSI$IDENT$M_IDENTIFY 0x80 struct identify_message { __struct { unsigned scsi$ident$v_luntrn : 3; /* Logical Unit Target Routine # */ unsigned scsi$ident$v_reserved_1 : 1; unsigned scsi$ident$v_reserved_2 : 1; unsigned scsi$ident$v_luntar : 1; /* Logical Unit Target direction */ unsigned scsi$ident$v_disc_priv : 1; /* Grant target privilege of disconnecting */ unsigned scsi$ident$v_identify : 1; /* Message is an IDENTIFY message */ } scsi$ident$r_flags; } ; #if !defined(__VAXC) #define scsi$ident$v_luntrn scsi$ident$r_flags.scsi$ident$v_luntrn #define scsi$ident$v_luntar scsi$ident$r_flags.scsi$ident$v_luntar #define scsi$ident$v_disc_priv scsi$ident$r_flags.scsi$ident$v_disc_priv #define scsi$ident$v_identify scsi$ident$r_flags.scsi$ident$v_identify #endif /* #if !defined(__VAXC) */ /* */ /* Define SCSI status codes */ /* */ #define SCSI$C_GOOD 0 /* Sucessfull completion of command */ #define SCSI$C_CHECK_CONDITION 2 /* Contingent allegiance condition */ #define SCSI$C_CONDITION_MET 4 /* Requested operation satisfied */ #define SCSI$C_BUSY 8 /* Target busy */ #define SCSI$C_INTERMEDIATE 16 /* Completed linked command in series */ #define SCSI$C_INTERMEDIATE_COND_MET 20 /* INTERMEDIATE and CONDITION_MET */ #define SCSI$C_RESERVATION_CONFLICT 24 /* Conflicting reservation conflict */ #define SCSI$C_COMMAND_TERMINATED 34 /* Target terminates current I/O */ #define SCSI$C_QUEUE_FULL 40 /* Command queue is full */ #define SCSI$M_STATUS_BYTE_RESERVED 193 /* Status byte reserved bits */ /* */ /* Define SCSI Message Codes */ /* */ #define SCSI$C_COMMAND_COMPLETE 0 /* I/O completed */ #define SCSI$C_EXTENDED_MESSAGE 1 /* Start multi-byte extended message */ #define SCSI$C_SAVE_DATA_POINTERS 2 /* Save active pointers */ #define SCSI$C_RESTORE_POINTERS 3 /* Restore saved pointers */ #define SCSI$C_DISCONNECT 4 /* Connection will disconnect */ #define SCSI$C_INITIATOR_DETECT_ERROR 5 /* Inform target that error have occured */ #define SCSI$C_ABORT 6 /* Clear active I/O, plus queued I/O */ #define SCSI$C_MESSAGE_REJECT 7 /* Last message was inappropriate */ #define SCSI$C_NO_OPERATION 8 /* Reponse when no current command */ #define SCSI$C_MESSAGE_PARITY_ERROR 9 /* Last message byte had parity error */ #define SCSI$C_LINKED_COMMAND 10 /* Linked command is complete */ #define SCSI$C_LINKED_COMMAND_FLAGED 11 /* Linked command is complete (with flag) */ #define SCSI$C_BUS_DEVICE_RESET 12 /* Reset device, go to bus free */ #define SCSI$C_ABORT_TAG 13 /* Clear tagged command */ #define SCSI$C_CLEAR_QUEUE 14 /* Clear all queued commands */ #define SCSI$C_INITIATE_RECOVERY 15 /* Start ECA processing */ #define SCSI$C_RELEASE_RECOVERY 16 /* Finish ECA processing */ #define SCSI$C_TERMINATE_IO_PROCESS 17 /* Terminate I/O process */ #define SCSI$C_CLEAR_ACA 22 #define SCSI$C_SIMPLE_QUEUE_TAG 32 /* Queue I/O to queue */ #define SCSI$C_HEAD_OF_QUEUE_TAG 33 /* Queue I/O to head of queue */ #define SCSI$C_ORDERED_QUEUE_TAG 34 /* Queue I/O in order to queue */ #define SCSI$C_IGNORE_WIDE_RESIDUE 35 /* Ignore residual bytes */ /* */ /* Define SCSI Message Codes */ /* */ #define SCSI$C_MODIFY_DATA_POINTER 0 /* Modify data pointers */ #define SCSI$C_SYNCH_DATA_TRANSFER 1 /* Synchronous Data Transfer Request */ #define SCSI$C_WIDE_DATA_TRANSFER 3 /* Wide Data Transfer Request */ /* */ /* Sense Data Format */ /* */ #define SCSI$SNS$M_ERROR_CODE 0x7F #define SCSI$SC1$C_CURRENT 112 /* Current error codes */ #define SCSI$SC1$C_DEFERRED 113 /* Current error codes */ #define SCSI$SNS$M_VALID 0x80 #define SCSI$SNS$M_SENSE_KEY 0xF #define SCSI$SNS$M_ILI 0x20 #define SCSI$SNS$M_EOM 0x40 #define SCSI$SNS$M_FILEMARK 0x80 #define SCSI$SNS$R_ADD_INFORMATION_OS 8 /* */ #define SCSI$C_RECOVERED_DATA 23 /* Recovered data... */ /* ^X00 - with no error correction applied */ #define SCSI$C_INVALID_CDB_FIELD 36 /* Invalid field in CDB */ /* ^X00 - invalid field in CDB */ #define SCSI$SNS$M_BIT_POINTER 0x7 #define SCSI$SNS$M_BPV 0x8 #define SCSI$SNS$M_C_D 0x40 #define SCSI$SNS$M_SKSV 0x80 #define SCSI$SNS$R_ADD_SENSE_OS 18 /* */ struct sense_data { __struct { unsigned scsi$sns$v_error_code : 7; /* Sense data error codes */ unsigned scsi$sns$v_valid : 1; /* Information Field Valid */ } scsi$sns$r_error_code_field; unsigned char scsi$sns$b_segement; /* # of current segement desc. */ __struct { unsigned scsi$sns$v_sense_key : 4; /* Information field */ unsigned scsi$sns$v_reserved1 : 1; /* Reserved */ unsigned scsi$sns$v_ili : 1; /* Incorrect Length Indicator */ unsigned scsi$sns$v_eom : 1; /* End of Medium Indicator */ unsigned scsi$sns$v_filemark : 1; /* Filemark or Setmark seen */ } scsi$sns$r_flags; __union { /* Device/Command specific info. */ unsigned int scsi$sns$l_lba_address; /* Logical Block Address (Dev. Type 0,4,5,7) */ unsigned int scsi$sns$l_residual_length; /* (requested - actual) length (Dev. Type 1,2,3) */ unsigned int scsi$sns$l_residual_blocks; /* (requested - actual) blocks (COPY, VERIFY, COMPARE) */ unsigned int scsi$sns$l_data_blocks; /* Count of Data Blocks */ unsigned int scsi$sns$l_file_marks; /* Count of File Marks */ unsigned int scsi$sns$l_set_marks; /* Count of Set Marks */ } scsi$sns$r_information; unsigned char scsi$sns$b_add_sense_len; /* Additional Sense Length */ __union { /* Command specific info. */ unsigned char scsi$sns$b_sense_information [4]; /* Sense information */ } scsi$sns$r_add_information; unsigned char scsi$sns$b_add_sense_code; /* Additional Sense Code */ /* ^X01 - with retries */ /* ^X02 - with positive head offset */ /* ^X03 - with negative head offset */ /* ^X04 - with retries and/or circ applied */ /* ^X05 - using previous sector id */ /* ^X06 - without ecc - data auto-reallocated */ /* ^X07 - without ecc - recommend reassignment */ unsigned char scsi$sns$b_add_sense_qual; /* Additional Sense Qualifier */ unsigned char scsi$sns$b_fru_code; /* Field Replaceable Unit Code */ __struct { unsigned scsi$sns$v_bit_pointer : 3; /* Bitfield pointer to error byte */ unsigned scsi$sns$v_bpv : 1; /* Bit Pointer Valid */ unsigned scsi$sns$v_reserved2 : 2; /* Reserved */ unsigned scsi$sns$v_c_d : 1; /* Command_Data error indicator */ unsigned scsi$sns$v_sksv : 1; /* Sense Key Specific - Valid */ unsigned short int scsi$sns$w_field_pointer; /* Command or Data byte error pointer */ } scsi$sns$r_sense_key_specific; __struct { /* Additional Sense data0 */ unsigned char scsi$sns$b_add_sense_bytes [1]; /* Additional Sense Bytes */ } scsi$sns$r_add_sense; } ; #if !defined(__VAXC) #define scsi$sns$v_error_code scsi$sns$r_error_code_field.scsi$sns$v_error_code #define scsi$sns$v_valid scsi$sns$r_error_code_field.scsi$sns$v_valid #define scsi$sns$v_sense_key scsi$sns$r_flags.scsi$sns$v_sense_key #define scsi$sns$v_ili scsi$sns$r_flags.scsi$sns$v_ili #define scsi$sns$v_eom scsi$sns$r_flags.scsi$sns$v_eom #define scsi$sns$v_filemark scsi$sns$r_flags.scsi$sns$v_filemark #define scsi$sns$l_lba_address scsi$sns$r_information.scsi$sns$l_lba_address #define scsi$sns$l_residual_length scsi$sns$r_information.scsi$sns$l_residual_length #define scsi$sns$l_residual_blocks scsi$sns$r_information.scsi$sns$l_residual_blocks #define scsi$sns$l_data_blocks scsi$sns$r_information.scsi$sns$l_data_blocks #define scsi$sns$l_file_marks scsi$sns$r_information.scsi$sns$l_file_marks #define scsi$sns$l_set_marks scsi$sns$r_information.scsi$sns$l_set_marks #define scsi$sns$b_sense_information scsi$sns$r_add_information.scsi$sns$b_sense_information #define scsi$sns$v_bit_pointer scsi$sns$r_sense_key_specific.scsi$sns$v_bit_pointer #define scsi$sns$v_bpv scsi$sns$r_sense_key_specific.scsi$sns$v_bpv #define scsi$sns$v_c_d scsi$sns$r_sense_key_specific.scsi$sns$v_c_d #define scsi$sns$v_sksv scsi$sns$r_sense_key_specific.scsi$sns$v_sksv #define scsi$sns$w_field_pointer scsi$sns$r_sense_key_specific.scsi$sns$w_field_pointer #define scsi$sns$b_add_sense_bytes scsi$sns$r_add_sense.scsi$sns$b_add_sense_bytes #endif /* #if !defined(__VAXC) */ /* */ /* Define SCSI sense key codes. */ /* */ #define SCSI$C_NO_SENSE 0 /* No sense key information returned */ #define SCSI$C_RECOVERED_ERROR 1 /* Command completed with some recovery action */ #define SCSI$C_NOT_READY 2 /* Logical unit cannot be accessed */ #define SCSI$C_MEDIUM_ERROR 3 /* Command failed with non-recovered medium error */ #define SCSI$C_HARDWARE_ERROR 4 /* Command failed with non-recovered hardware error */ #define SCSI$C_ILLEGAL_REQUEST 5 /* Illegal parameter in the command descriptor block */ #define SCSI$C_UNIT_ATTENTION 6 /* Removable medium change or target has been reset */ #define SCSI$C_DATA_PROTECT 7 /* Read/Write of medium failed due to protection */ #define SCSI$C_BLANK_CHECK 8 /* Read/Write found blank medium, end-of-data, etc. */ #define SCSI$C_VENDOR_SPECIFIC 9 /* Vendor specific conditions reported */ #define SCSI$C_COPY_ABORTED 10 /* Copy, compare or Copy/Verify aborted due to error */ #define SCSI$C_ABORTED_COMMAND 11 /* Targeted aborted current command */ #define SCSI$C_EQUAL 12 /* Search Data command has equal comparison */ #define SCSI$C_VOLUME_OVERFLOW 13 /* Buffered device has reach end of parition */ #define SCSI$C_MISCOMPARE 14 /* Source data command has unequal comparison */ #define SCSI$C_RESERVED 15 /* Reserved */ /* */ /* Selected SCSI Mode Page Codes */ /* */ #define SCSI$C_AUDIO_CONTROL_PAGE 14 /* CD-ROM Audio Control Page */ #define SCSI$C_MEDIA_CHANGE 40 /* Medium change */ /* ^X00 - Not ready to ready transition (medium change) */ #define SCSI$C_MODE_CHANGE 42 /* Mode change */ /* ^X00 - Parameters changed */ /* ^X01 - Mode parameters changed */ /* ^X02 - Log parameters changed */ #define SCSI$C_INCOMPATIBLE_MEDIA 48 /* Unformatted media */ /* ^X00 - Incompatible medium installed */ /* ^X01 - Cannot read medium - unknown format */ /* ^X02 - Cannot read medium - incompatible format */ /* ^X03 - Cleaning cartridge installed */ #define SCSI$C_DRIVE_NOT_READY 4 /* Logical unit... */ /* ^X00 - not ready, cause not reportable */ /* ^X01 - is in process of becoming ready */ /* ^X02 - not ready, initializing command required */ /* ^X03 - not ready, manual intervention required */ /* ^X04 - not ready, format in progress */ #define SCSI$C_MEDIUM_NOT_PRESENT 58 /* Medium not present */ /* ^X00 - Medium not present ? */ /* */ /* Type codes for Optical Memory Medium-Type Codes */ /* */ #define SCSI$OPT$C_MEDIA_DEFAULT 0 /* Default (only one medium type supported) */ #define SCSI$OPT$C_MEDIA_RO 1 /* Optical Read Only medium */ #define SCSI$OPT$C_MEDIA_WORM 2 /* Optical Write Once medium */ #define SCSI$OPT$C_MEDIA_ERASE 3 /* Optical Reversible or Erasable medium */ #define SCSI$OPT$C_MEDIA_RO_WORM 4 /* Combination of Read only and Write Once medium */ #define SCSI$OPT$C_MEDIA_RO_ERASE 5 /* Combination of Read only and Reversible or Erasable medium */ #define SCSI$OPT$C_MEDIA_WORM_ERASE 6 /* Combination of Write Once and Reversible or Erasable medium */ /* */ /* Mode sense page code paramaters */ /* */ #define SCSI$PGCD$C_VENDOR_SPECIFIC 0 /* Vendor-Specific (does not require page format) */ #define SCSI$PGCD$C_READ_WRITE_ERR 1 /* Read-Write Error Recovery Page */ #define SCSI$PGCD$C_DISCONNECT_REC 2 /* Disconnect-Reconnect Page */ #define SCSI$PGCD$C_FORMAT_DEVICE 3 /* Format Device Page */ #define SCSI$PGCD$C_RIGID_DISK 4 /* Rigid Disk Geometry Page */ #define SCSI$PGCD$C_FLEXIBLE_DISK 5 /* Flexible Disk Page */ #define SCSI$PGCD$C_RESERVED 6 /* Reserved */ #define SCSI$PGCD$C_VERIFY_ERROR 7 /* Verify Error Recovery Page */ #define SCSI$PGCD$C_CACHING 8 /* Caching Page */ #define SCSI$PGCD$C_PERIPHERAL 9 /* Peripheral Device Page */ #define SCSI$PGCD$C_CONTROL_MODE 10 /* Control Mode Page */ #define SCSI$PGCD$C_MEDIUM_TYPES 11 /* Medium Types Supported Page */ #define SCSI$PGCD$C_NOTCH_PARTION 12 /* Notch and Partition Page */ #define SCSI$PGCD$C_ALL_PAGES 63 /* Return all pages */ #define SCSI$PGCD$C_MAX_PAGE_CODE 63 /* Maximum Page Code */ #define SCSI$PGCD$M_CURRENT 0 /* Current Values */ #define SCSI$PGCD$M_CHANGEABLE 64 /* Changeable Values */ #define SCSI$PGCD$M_DEFAULT 128 /* Default Values */ #define SCSI$PGCD$M_SAVED 192 /* Saved Values */ #define SCSI$PGCD$C_PAGE_SIZE 512 /* Initial Page Size */ /* */ /* Audio Control Parameters Page */ /* */ #define SCSI$ACP$M_PAGE_CODE 0x3F #define SCSI$ACP$C_PAGE_CODE 14 #define SCSI$ACP$M_PS 0x80 #define SCSI$S_HEADER 2 /* SCSI Page header size (PAGE_CODE+PAGE_LENGTH) */ #define SCSI$ACP$C_PAGE_LENGTH 14 #define SCSI$ACP$M_SOTC 0x2 #define SCSI$ACP$M_IMMED 0x4 #define SCSI$ACP$M_LBA_FORMAT 0xF000000 #define SCSI$ACP$M_CHANNEL_0 0x1 #define SCSI$ACP$M_CHANNEL_1 0x2 #define SCSI$ACP$M_CHANNEL_2 0x4 #define SCSI$ACP$M_CHANNEL_3 0x8 struct audio_control { __struct { /* Page code & save bits */ unsigned scsi$acp$v_page_code : 6; /* Page code */ unsigned scsi$acp$v_reserved1 : 1; unsigned scsi$acp$v_ps : 1; /* PS - Parameters Saveable bit in non-VM */ } scsi$acp$r_page_code_field; unsigned char scsi$acp$b_page_length; /* Page length */ __struct { /* Audio Control Flags */ unsigned scsi$acp$v_reserved2 : 1; unsigned scsi$acp$v_sotc : 1; /* Stop On Track Crossing */ unsigned scsi$acp$v_immed : 1; /* Send completion status immediately */ unsigned scsi$acp$v_reserved3 : 21; unsigned scsi$acp$v_lba_format : 4; /* Format of LBSa / Second */ unsigned scsi$acp$v_fill_4_ : 4; } scsi$acp$r_audio_control_flags; unsigned short int scsi$acp$w_lbs_per_sec; /* Logical blocks per sec. of audio playback */ __union { unsigned short int scsi$acp$w_channel_volume [4]; __struct { unsigned scsi$acp$v_channel_0 : 1; /* Connect audio channel 0 to this port */ unsigned scsi$acp$v_channel_1 : 1; /* Connect audio channel 1 to this port */ unsigned scsi$acp$v_channel_2 : 1; /* Connect audio channel 2 to this port */ unsigned scsi$acp$v_channel_3 : 1; /* Connect audio channel 3 to this port */ unsigned scsi$acp$v_reserved4 : 4; unsigned char scsi$acp$b_volume; /* Channel volume from %X00(muted) to %XFF(full) */ } scsi$acp$r_fill_3_; } scsi$acp$r_fill_2_; } ; #if !defined(__VAXC) #define scsi$acp$v_page_code scsi$acp$r_page_code_field.scsi$acp$v_page_code #define scsi$acp$v_ps scsi$acp$r_page_code_field.scsi$acp$v_ps #define scsi$acp$v_sotc scsi$acp$r_audio_control_flags.scsi$acp$v_sotc #define scsi$acp$v_immed scsi$acp$r_audio_control_flags.scsi$acp$v_immed #define scsi$acp$v_lba_format scsi$acp$r_audio_control_flags.scsi$acp$v_lba_format #define scsi$acp$w_channel_volume scsi$acp$r_fill_2_.scsi$acp$w_channel_volume #define scsi$acp$v_channel_0 scsi$acp$r_fill_2_.scsi$acp$r_fill_3_.scsi$acp$v_channel_0 #define scsi$acp$v_channel_1 scsi$acp$r_fill_2_.scsi$acp$r_fill_3_.scsi$acp$v_channel_1 #define scsi$acp$v_channel_2 scsi$acp$r_fill_2_.scsi$acp$r_fill_3_.scsi$acp$v_channel_2 #define scsi$acp$v_channel_3 scsi$acp$r_fill_2_.scsi$acp$r_fill_3_.scsi$acp$v_channel_3 #define scsi$acp$b_volume scsi$acp$r_fill_2_.scsi$acp$r_fill_3_.scsi$acp$b_volume #endif /* #if !defined(__VAXC) */ /* */ /* Control Mode Page */ /* */ #define SCSI$CMP$M_PAGE_CODE 0x3F #define SCSI$CMP$C_PAGE_CODE 10 #define SCSI$CMP$M_PS 0x80 #define SCSI$CMP$C_PAGE_LENGTH 6 #define SCSI$CMP$M_RLEC 0x1 #define SCSI$CMP$M_DQUE 0x100 #define SCSI$CMP$M_QERR 0x200 #define SCSI$CMP$M_QAM 0x7000 #define SCSI$QAM$C_RESTRICTED 0 /* Restricted Re-ordering */ #define SCSI$QAM$C_UNRESTRICTED 1 /* Unrestricted Re-ordering */ #define SCSI$CMP$M_EAENP 0x8000 #define SCSI$CMP$M_UAAENP 0x10000 #define SCSI$CMP$M_RAENP 0x20000 #define SCSI$CMP$M_EECA 0x400000 #define SCSI$CMP$C_LENGTH 8 /* Length of the SCSI Control Mode page */ #define SCSI$CMP$K_LENGTH 8 /* Length of the SCSI Control Mode page */ struct control_mode { __struct { /* Page code & save bits */ unsigned scsi$cmp$v_page_code : 6; /* Page code */ unsigned scsi$cmp$v_reserved1 : 1; unsigned scsi$cmp$v_ps : 1; /* PS - Parameters Saveable bit in non-VM */ } scsi$cmp$r_page_code_field; unsigned char scsi$cmp$b_page_length; /* Page length */ __struct { /* Control Mode Flags */ unsigned scsi$cmp$v_rlec : 1; /* Targer reports log exception conditions */ unsigned scsi$cmp$v_reserved2 : 7; unsigned scsi$cmp$v_dque : 1; /* Disable tagged queuing */ unsigned scsi$cmp$v_qerr : 1; /* Abort queue processing on CA or ACA */ unsigned scsi$cmp$v_reserved3 : 2; unsigned scsi$cmp$v_qam : 3; /* Queue Algorithm Modifier Field */ unsigned scsi$cmp$v_eaenp : 1; /* Error - AEN */ unsigned scsi$cmp$v_uaaenp : 1; /* Unit Attention - AEN */ unsigned scsi$cmp$v_raenp : 1; /* Ready - AEN */ unsigned scsi$cmp$v_reserved4 : 4; unsigned scsi$cmp$v_eeca : 1; /* Enable Extended Contingent Allegiance */ unsigned scsi$cmp$v_fill_5_ : 1; } scsi$cmp$r_control_mode_flags; char scsi$cmp$b_reserved5; unsigned short int scsi$cmp$w_ready_aen; /* Ready AEN holdoff period */ } ; #if !defined(__VAXC) #define scsi$cmp$v_page_code scsi$cmp$r_page_code_field.scsi$cmp$v_page_code #define scsi$cmp$v_ps scsi$cmp$r_page_code_field.scsi$cmp$v_ps #define scsi$cmp$v_rlec scsi$cmp$r_control_mode_flags.scsi$cmp$v_rlec #define scsi$cmp$v_dque scsi$cmp$r_control_mode_flags.scsi$cmp$v_dque #define scsi$cmp$v_qerr scsi$cmp$r_control_mode_flags.scsi$cmp$v_qerr #define scsi$cmp$v_qam scsi$cmp$r_control_mode_flags.scsi$cmp$v_qam #define scsi$cmp$v_eaenp scsi$cmp$r_control_mode_flags.scsi$cmp$v_eaenp #define scsi$cmp$v_uaaenp scsi$cmp$r_control_mode_flags.scsi$cmp$v_uaaenp #define scsi$cmp$v_raenp scsi$cmp$r_control_mode_flags.scsi$cmp$v_raenp #define scsi$cmp$v_eeca scsi$cmp$r_control_mode_flags.scsi$cmp$v_eeca #endif /* #if !defined(__VAXC) */ /* */ /* Read-Write Error Recovery Page */ /* */ /* Define the error recover parameters that the target shall use during any command */ /* that performs a read-write operation. */ /* */ #define SCSI$ERP$M_PAGE_CODE 0x3F #define SCSI$ERP$C_PAGE_CODE 1 #define SCSI$ERP$M_PS 0x80 #define SCSI$ERP$C_PAGE_LENGTH 10 #define SCSI$ERP$M_DCR 0x1 #define SCSI$ERP$M_DTE 0x2 #define SCSI$ERP$M_PER 0x4 #define SCSI$ERP$M_EER 0x8 #define SCSI$ERP$M_RC 0x10 #define SCSI$ERP$M_TB 0x20 #define SCSI$ERP$M_ARRE 0x40 #define SCSI$ERP$M_AWRE 0x80 #define SCSI$ERP$C_LENGTH 16 /* Length of the SCSI Error Recovery page */ #define SCSI$ERP$K_LENGTH 16 /* Length of the SCSI Error Recovery page */ struct error_recovery { __struct { /* Page code & save bits */ unsigned scsi$erp$v_page_code : 6; /* Page code */ unsigned scsi$erp$v_reserved1 : 1; unsigned scsi$erp$v_ps : 1; /* PS - Parameters Saveable bit in non-VM */ } scsi$erp$r_page_code_field; unsigned char scsi$erp$b_page_length; /* Page length */ __struct { /* Read-Write Error Recovery Page flags */ unsigned scsi$erp$v_dcr : 1; /* Disable error correction */ unsigned scsi$erp$v_dte : 1; /* Disable transfer on error */ unsigned scsi$erp$v_per : 1; /* Post error */ unsigned scsi$erp$v_eer : 1; /* Enable early correction */ unsigned scsi$erp$v_rc : 1; /* Read continuous */ unsigned scsi$erp$v_tb : 1; /* Transfer block */ unsigned scsi$erp$v_arre : 1; /* Automatic read relocation of blocks */ unsigned scsi$erp$v_awre : 1; /* Automatic write relocation of blocks */ } scsi$erp$r_recovery_flags; unsigned char scsi$erp$b_read_rerty_count; /* Read count of retry attempts */ unsigned char scsi$erp$b_correction_span; /* Bit size of largest data error attempt */ unsigned char scsi$erp$b_head_offset_count; /* 2's complement of head offset from track */ unsigned char scsi$erp$b_data_strobe_offset; /* 2's complement of data strobe offset */ unsigned char scsi$erp$b_reserved2; unsigned char scsi$erp$b_write_retry_count; /* Write count of retry attempts */ unsigned char scsi$erp$b_reserved3; unsigned short int scsi$erp$w_recovery_time_limit; /* ms max. time for error recovery */ char scsi$erp$b_lenfill [4]; /* Fill to a quadword to match basealign */ } ; #if !defined(__VAXC) #define scsi$erp$v_page_code scsi$erp$r_page_code_field.scsi$erp$v_page_code #define scsi$erp$v_ps scsi$erp$r_page_code_field.scsi$erp$v_ps #define scsi$erp$v_dcr scsi$erp$r_recovery_flags.scsi$erp$v_dcr #define scsi$erp$v_dte scsi$erp$r_recovery_flags.scsi$erp$v_dte #define scsi$erp$v_per scsi$erp$r_recovery_flags.scsi$erp$v_per #define scsi$erp$v_eer scsi$erp$r_recovery_flags.scsi$erp$v_eer #define scsi$erp$v_rc scsi$erp$r_recovery_flags.scsi$erp$v_rc #define scsi$erp$v_tb scsi$erp$r_recovery_flags.scsi$erp$v_tb #define scsi$erp$v_arre scsi$erp$r_recovery_flags.scsi$erp$v_arre #define scsi$erp$v_awre scsi$erp$r_recovery_flags.scsi$erp$v_awre #endif /* #if !defined(__VAXC) */ /* */ /* Format Device Page */ /* */ #define SCSI$FMT$M_PAGE_CODE 0x3F #define SCSI$FMT$C_PAGE_CODE 3 #define SCSI$FMT$M_PS 0x80 #define SCSI$FMT$C_PAGE_LENGTH 22 #define SCSI$FMT$M_SURF 0x10 #define SCSI$FMT$M_RMB 0x20 #define SCSI$FMT$M_HSEC 0x40 #define SCSI$FMT$M_SSEC 0x80 struct format_device { __struct { /* Page code & save bits */ unsigned scsi$fmt$v_page_code : 6; /* Page code */ unsigned scsi$fmt$v_reserved1 : 1; unsigned scsi$fmt$v_ps : 1; /* PS - Parameters Saveable bit in non-VM */ } scsi$fmt$r_page_code_field; unsigned char scsi$fmt$b_page_length; /* Page length */ unsigned short int scsi$fmt$w_tracks; /* Tracks per Zone */ unsigned short int scsi$fmt$w_alt_sectors; /* Alternate Sectors per Zone */ unsigned short int scsi$fmt$w_alt_tracks; /* Alternate Tracks per Zone */ unsigned short int scsi$fmt$w_alt_tracks_unit; /* Alternate Tracks per Logical Unit */ unsigned short int scsi$fmt$w_sectors; /* Sectors per Track */ unsigned short int scsi$fmt$w_sector_size; /* Data Bytes per Physical Sector */ unsigned short int scsi$fmt$w_interleave; /* Interleave */ unsigned short int scsi$fmt$w_track_skew; /* Track Skew Factor */ unsigned short int scsi$fmt$w_cyl_skew; /* Cylinder Skew Factor */ __struct { unsigned scsi$fmt$v_reserved2 : 4; /* Reserved */ unsigned scsi$fmt$v_surf : 1; /* Sector .vs. Cylindar allocation */ unsigned scsi$fmt$v_rmb : 1; /* Removeable */ unsigned scsi$fmt$v_hsec : 1; /* Hard Sector Formatting */ unsigned scsi$fmt$v_ssec : 1; /* Soft Sector Formatting */ } scsi$fmt$r_flags; char scsi$fmt$b_reserved3 [3]; /* Reserved */ } ; #if !defined(__VAXC) #define scsi$fmt$v_page_code scsi$fmt$r_page_code_field.scsi$fmt$v_page_code #define scsi$fmt$v_ps scsi$fmt$r_page_code_field.scsi$fmt$v_ps #define scsi$fmt$v_surf scsi$fmt$r_flags.scsi$fmt$v_surf #define scsi$fmt$v_rmb scsi$fmt$r_flags.scsi$fmt$v_rmb #define scsi$fmt$v_hsec scsi$fmt$r_flags.scsi$fmt$v_hsec #define scsi$fmt$v_ssec scsi$fmt$r_flags.scsi$fmt$v_ssec #endif /* #if !defined(__VAXC) */ /* */ /* Rigid Disk Driver Page */ /* */ /* The rigid disk drive geometry page specifies parameters for direct-access */ /* devices employing a rigid disk drive. */ /* */ #define SCSI$RGD$M_PAGE_CODE 0x3F #define SCSI$RGD$C_PAGE_CODE 4 #define SCSI$RGD$M_PS 0x80 #define SCSI$RGD$C_PAGE_LENGTH 22 #define SCSI$RGD$M_RPL 0x3 #define SCSI$RGD$C_DISABLED 0 /* Spindle Synchronization is disabled */ #define SCSI$RGD$C_SLAVE 1 /* Synchronized-Spindle Slave */ #define SCSI$RGD$C_MASTER 2 /* Synchronized-Spindle Master. */ #define SCSI$RGD$C_CONTROL 3 /* Synchronized-Spindle Master Control */ struct rigid_disk { __struct { /* Page code & save bits */ unsigned scsi$rgd$v_page_code : 6; /* Page code */ unsigned scsi$rgd$v_reserved1 : 1; unsigned scsi$rgd$v_ps : 1; /* PS - Parameters Saveable bit in non-VM */ } scsi$rgd$r_page_code_field; unsigned char scsi$rgd$b_page_length; /* Page length */ char scsi$rgd$b_cylinders [3]; /* Number of cylinders */ unsigned char scsi$rgd$b_heads; /* Number of heads */ unsigned short int scsi$rgd$w_cylinder_write; /* Starting Cylinder-Write Precompensation */ unsigned short int scsi$rgd$w_cylinder_reduced; /* Starting Cylinder-Reduced Write Current */ unsigned short int scsi$rgd$w_step_rate; /* Drive Step Rate */ unsigned short int scsi$rgd$w_landing_zone; /* Landing Zone Cylinder */ __struct { /* SCSI FLEXIBLE PAGE Flags */ unsigned scsi$rgd$v_rpl : 2; /* Rotational Position Locking */ unsigned scsi$rgd$v_reserved2 : 6; /* Reserved */ } scsi$rgd$r_flags; unsigned char scsi$rgd$b_rotational_offset; /* Rotational Offset */ unsigned char scsi$rgd$b_reserved3; /* Reserved */ unsigned short int scsi$rgd$w_medium_rotation; /* Medium Rotation Rate */ unsigned short int scsi$rgd$w_rotational_offset; /* Rotational Offset */ } ; #if !defined(__VAXC) #define scsi$rgd$v_page_code scsi$rgd$r_page_code_field.scsi$rgd$v_page_code #define scsi$rgd$v_ps scsi$rgd$r_page_code_field.scsi$rgd$v_ps #define scsi$rgd$v_rpl scsi$rgd$r_flags.scsi$rgd$v_rpl #endif /* #if !defined(__VAXC) */ /* */ /* Flexible Disk Page */ /* */ /* The flexible disk page contains parameters for control and reporting of */ /* flexible disk drive parameters */ /* */ #define SCSI$FLX$M_PAGE_CODE 0x3F #define SCSI$FLX$C_PAGE_CODE 5 #define SCSI$FLX$M_PS 0x80 #define SCSI$FLX$C_PAGE_LENGTH 30 #define SCSI$FLX$C_XFR_250KHZ 64000 /* 250 kbit/second transfer rate */ #define SCSI$FLX$C_XFR_300KHZ 11265 /* 300 kbit/second transfer rate */ #define SCSI$FLX$C_XFR_500KHZ 62465 /* 500 kbit/second transfer rate */ #define SCSI$FLX$C_XFR_1MHZ 59395 /* 1 megabit/second transfer rate */ #define SCSI$FLX$C_XFR_2MHZ 53255 /* 2 megabit/second transfer rate */ #define SCSI$FLX$C_XFR_5MHZ 34835 /* 5 megabit/second transfer rate */ #define SCSI$FLX$M_MO 0x20 #define SCSI$FLX$M_SSN 0x40 #define SCSI$FLX$M_TRDY 0x80 #define SCSI$FLX$M_SPC 0xF00 #define SCSI$FLX$M_PIN2 0x1 #define SCSI$FLX$M_PIN34 0x2 #define SCSI$FLX$M_PIN1 0x4 #define SCSI$FLX$M_PIN4 0x8 struct flexible_disk { __struct { /* Page code & save bits */ unsigned scsi$flx$v_page_code : 6; /* Page code */ unsigned scsi$flx$v_reserved1 : 1; unsigned scsi$flx$v_ps : 1; /* PS - Parameters Saveable bit in non-VM */ } scsi$flx$r_page_code_field; unsigned char scsi$flx$b_page_length; /* Page length */ unsigned short int scsi$flx$w_transfer_rate; /* Transfer rate KHZ */ /* (Note: Definitions are SCSI Endian) */ unsigned char scsi$flx$b_heads; /* Number of heads */ unsigned char scsi$flx$b_sectors_track; /* Sectors per track */ unsigned short int scsi$flx$w_sector_size; /* Data bytes per sector */ unsigned short int scsi$flx$w_cylinders; /* Number of cylinders */ unsigned short int scsi$flx$w_cylinder_write; /* Starting Cylinder-Write Precompensation */ unsigned short int scsi$flx$w_cylinder_reduced; /* Starting Cylinder-Reduced Write Current */ unsigned short int scsi$flx$w_step_rate; /* Drive Step Rate */ unsigned char scsi$flx$b_step_pulse; /* Drive Step Pulse Width */ unsigned short int scsi$flx$w_head_settle; /* Head Settle Delay */ unsigned char scsi$flx$b_motor_on; /* Motor on Delay */ unsigned char scsi$flx$b_motor_off; /* Motor off Delay */ __struct { /* SCSI FLEXIBLE PAGE Flags */ unsigned scsi$flx$v_reserved2 : 5; /* Reserved */ unsigned scsi$flx$v_mo : 1; /* Motor on */ unsigned scsi$flx$v_ssn : 1; /* Starting Sector Number */ unsigned scsi$flx$v_trdy : 1; /* True-Ready, media is accessable */ unsigned scsi$flx$v_spc : 4; /* Step pulse/cylinder */ unsigned scsi$flx$v_reserved3 : 4; /* Reserved */ } scsi$flx$r_flags; unsigned char scsi$flx$b_write_comp; /* Write Compensation */ unsigned char scsi$flx$b_head_load; /* Head Load Delay */ unsigned char scsi$flx$b_head_unload; /* Head Unload delay */ __struct { unsigned scsi$flx$v_pin2 : 1; /* Pin 2 of drive interface */ unsigned scsi$flx$v_pin34 : 1; /* Pin 34 of drive interface */ unsigned scsi$flx$v_pin1 : 1; /* Pin 1 of drive interface */ unsigned scsi$flx$v_pin4 : 1; /* Pin 4 of drive interface */ unsigned scsi$flx$v_fill_6_ : 4; } scsi$flx$r_pins; unsigned short int scsi$flx$w_rotation; /* Medium Rotation Rate */ unsigned short int scsi$flx$w_reserved4; /* Reserved */ } ; #if !defined(__VAXC) #define scsi$flx$v_page_code scsi$flx$r_page_code_field.scsi$flx$v_page_code #define scsi$flx$v_ps scsi$flx$r_page_code_field.scsi$flx$v_ps #define scsi$flx$v_mo scsi$flx$r_flags.scsi$flx$v_mo #define scsi$flx$v_ssn scsi$flx$r_flags.scsi$flx$v_ssn #define scsi$flx$v_trdy scsi$flx$r_flags.scsi$flx$v_trdy #define scsi$flx$v_spc scsi$flx$r_flags.scsi$flx$v_spc #define scsi$flx$v_pin2 scsi$flx$r_pins.scsi$flx$v_pin2 #define scsi$flx$v_pin34 scsi$flx$r_pins.scsi$flx$v_pin34 #define scsi$flx$v_pin1 scsi$flx$r_pins.scsi$flx$v_pin1 #define scsi$flx$v_pin4 scsi$flx$r_pins.scsi$flx$v_pin4 #endif /* #if !defined(__VAXC) */ /* */ /* Subchannel Data Format Codes */ /* */ #define SCSI$SUB$C_SUBQ_CHANNEL_DATA 0 /* Sub-Q Channel data */ #define SCSI$SUB$C_CD_ROM_POSITION 1 /* CD-ROM Current Position */ #define SCSI$SUB$C_MCN 2 /* Media Catalog Number (UPC/Bar Code) */ #define SCSI$SUB$C_ISRC 3 /* Track International-Standard-Recording-Code */ /* */ /* Sub-Q Channel Data Format */ /* */ #define SCSI$SUBQ$C_NOT_VALID 0 /* Audio status byte not supported or not valid */ #define SCSI$SUBQ$C_PLAY 1 /* Audio play operation in progress. */ #define SCSI$SUBQ$C_PAUSED 2 /* Audio play operation paused. */ #define SCSI$SUBQ$C_COMPLETE 3 /* Audio play operation successfully completed. */ #define SCSI$SUBQ$C_ERROR 4 /* Audio play operation stopped due to error. */ #define SCSI$SUBQ$C_ACTIVE 5 /* No current audio status to return */ #define SCSI$SUBQ$M_CONTROL 0xF #define SCSI$SUBQ$C_PRE_EMPHASIS 0 /* Audio with pre-emphasis */ #define SCSI$SUBQ$C_COPY_PERMITTED 1 /* Digital copy permitted */ #define SCSI$SUBQ$C_DATA_TRACK 2 /* Data verses audio track */ #define SCSI$SUBQ$C_FOUR_CHANNEL 3 /* Four verses two channel audio */ #define SCSI$SUBQ$M_ADR 0xF0 #define SCSI$SUBQ$C_UNKNOWN 0 /* mode information not supplied */ #define SCSI$SUBQ$C_CURRENT_POS 1 /* Current position data (track,index,abs-addr,rel-addr) */ #define SCSI$SUBQ$C_MCN 2 /* encodes media catalog number */ #define SCSI$SUBQ$C_ISRC 3 /* encodes ISRC */ #define SCSI$SUBQ$M_MC_VAL 0x80 #define SCSI$SUBQ$C_MCN_LENGTH 32 /* Length of Subq MCN data */ #define SCSI$SUBQ$M_TC_VAL 0x80 struct subq_channel { char scsi$subq$b_reserved1; /* Reserved */ unsigned char scsi$subq$b_audio_status; /* Audio Status */ unsigned short int scsi$subq$w_data_length; /* Sub-channel Data Length */ unsigned char scsi$subq$b_format_code; /* Sub-channel data format code */ __struct { unsigned scsi$subq$v_control : 4; /* Control */ unsigned scsi$subq$v_adr : 4; /* Audio Data Recorded Format */ } scsi$subq$r_field0; unsigned char scsi$subq$b_track; /* Current Track number */ unsigned char scsi$subq$b_index; /* Current Index number */ unsigned int scsi$subq$l_abs_address; /* Absolute CD-ROM Address */ unsigned int scsi$subq$l_rel_address; /* Track Relative CD-ROM Address */ __struct { unsigned scsi$subq$v_reserved2 : 7; /* Reserved */ unsigned scsi$subq$v_mc_val : 1; /* Media Catalog Valid bit */ } scsi$subq$r_field1; unsigned char scsi$subq$b_mcn [15]; /* Media Catalog Number (UPC/Bar Code) */ __struct { unsigned scsi$subq$v_reserved3 : 7; /* Reserved */ unsigned scsi$subq$v_tc_val : 1; /* Track ISRC Valid */ } scsi$subq$r_field2; unsigned char scsi$subq$b_irrc [15]; /* Track International-Standard-Recording-Code */ } ; #if !defined(__VAXC) #define scsi$subq$v_control scsi$subq$r_field0.scsi$subq$v_control #define scsi$subq$v_adr scsi$subq$r_field0.scsi$subq$v_adr #define scsi$subq$v_mc_val scsi$subq$r_field1.scsi$subq$v_mc_val #define scsi$subq$v_tc_val scsi$subq$r_field2.scsi$subq$v_tc_val #endif /* #if !defined(__VAXC) */ /* */ /* SCSIPATH structure used in sending IOGEN$_DEVPATH information to */ /* SYS$LOAD_DRIVER. Note that TARGET_ID and LUN fields may be assigned a */ /* -1 value so they cannot be unsigned. These two fields should also remain */ /* quadword aligned in this structure. */ /* */ #define SCSIPATH$K_VMS 1 /* VMS path identifiers (e.g. FC-LA) */ #define SCSIPATH$K_CONSOLE 2 /* Console path identifiers (e.g. AL-PA) */ #define SCSIPATH$K_QIOSERVER 3 /* QIOServer path identifier */ #define SCSIPATH$C_LENGTH 24 /* Length of the SCSIPATH structure */ #define SCSIPATH$K_LENGTH 24 /* Length of the SCSIPATH structure */ #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __quadword #else #pragma __nomember_alignment #endif typedef struct _scsipath { #pragma __nomember_alignment unsigned char scsipath$b_type; /* SCSIPATH type */ unsigned char scsipath$b_reserved1 [3]; /* reserved */ void *scsipath$ps_port_ucb; /* Pointer to port's UCB address */ #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __quadword #else #pragma __nomember_alignment #endif __int64 scsipath$q_target_id; /* Target ID */ __int64 scsipath$q_lun; /* Logical Unit Number */ } SCSIPATH; /* */ /* SCSI-3 Report Changeable Device Identifier command. */ /* */ #define DEVID_CMD$K_WR_DEVID_OPCODE 235 /* Write Changeable Device ID */ #define DEVID_CMD$K_RD_DEVID_OPCODE 236 /* Read Changeable Device ID */ #define DEVID_CMD$K_LENGTH 10 #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __longword #else #pragma __nomember_alignment #endif typedef struct _devid_cmd { #pragma __nomember_alignment unsigned char devid_cmd$b_opcode; /* Operation code */ unsigned char devid_cmd$b_reserved1 [6]; /* reserved */ unsigned char devid_cmd$b_alloc_length [2]; /* Allocation length */ unsigned char devid_cmd$b_control; /* Control byte */ char devid_cmd$b_fill_7_ [2]; } DEVID_CMD; /* */ /* SCSI-3 Report Changeable Device Identifier data. */ /* */ #define DEVID_HDR$K_LENGTH 4 #define DEVID$K_LENGTH 255 #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __longword #else #pragma __nomember_alignment #endif typedef struct _devid { #pragma __nomember_alignment unsigned char devid$b_reserved1; /* reserved */ unsigned char devid$b_reserved2; /* reserved */ __struct { unsigned devid$v_valid : 1; /* Identifier is valid */ unsigned devid$v_reserved3 : 7; /* reserved */ } devid$r_valid_field; unsigned char devid$b_ident_len; /* No. of bytes following this one */ unsigned char devid$b_ident [251]; /* Device identifier */ char devid$b_fill1; /* For alignment */ } DEVID; #if !defined(__VAXC) #define devid$v_valid devid$r_valid_field.devid$v_valid #define devid$v_reserved3 devid$r_valid_field.devid$v_reserved3 #endif /* #if !defined(__VAXC) */ /* */ /* SCSI-3 Report_LUNs command. */ /* */ #define RPTLUN_CMD$K_RPTLUN_OPCODE 160 #define RPTLUN_CMD$K_LENGTH 12 #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __longword #else #pragma __nomember_alignment #endif typedef struct _rptlun_cmd { #pragma __nomember_alignment unsigned char rptlun_cmd$b_opcode; /* Operation code */ unsigned char rptlun_cmd$b_reserved1 [5]; /* reserved */ unsigned char rptlun_cmd$b_alloc_length [4]; /* Allocation length */ unsigned char rptlun_cmd$b_reserved2; /* reserved */ unsigned char rptlun_cmd$b_control; /* Control byte */ } RPTLUN_CMD; /* */ /* The next two structures hold SCSI-3 Report_LUNs return data. There is a */ /* quadword header, RPTLUN_DATAHDR, followed by n quadwords, each holding a LUN. */ /* Each LUN resides in a quadword LUNLIST_ENTRY structure. The number of these */ /* entires for an instance of Report_LUNs return data is specified by */ /* LIST_LENGTH. */ /* */ #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __quadword #else #pragma __nomember_alignment #endif typedef struct _lunlist_entry { #pragma __nomember_alignment unsigned __int64 lunlist_entry$q_lun [1]; /* Entry in the LUN list */ } LUNLIST_ENTRY; #define RPTLUN_HDR$K_LENGTH 8 #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __quadword #else #pragma __nomember_alignment #endif typedef struct _rptlun_data { #pragma __nomember_alignment unsigned int rptlun_data$l_list_length; /* No. of LUNs * 8 bytes/LUN */ unsigned int rptlun_data$l_reserved1; /* reserved */ LUNLIST_ENTRY rptlun_data$r_lun_list; /* Start of the LUN list */ } RPTLUN_DATA; /* */ /* Identification Descriptor contained in Inquiry Page 83 data - Device */ /* Identification Page. */ /* */ #define PG83_IDENT$K_RESERVED 0 /* 0:Reserved */ #define PG83_IDENT$K_BINARY 1 /* 1:Identifier is in binary */ #define PG83_IDENT$K_ASCII 2 /* 2:Identifier is in ASCII */ #define PG83_IDENT$K_FIBRECHANNEL 0 /* 0:Protocol - Fibre Channel */ #define PG83_IDENT$K_PARALLELSCSI 1 /* 1:Protocol - Parallel SCSI */ #define PG83_IDENT$K_SSA 2 /* 2:Protocol - SSA */ #define PG83_IDENT$K_IEEE1394 3 /* 3:Protocol - Firewire */ #define PG83_IDENT$K_RDMA 4 /* 4:Protocol - Remote Direct Memory Access */ #define PG83_IDENT$K_ISCSI 5 /* 5:Protocol - Internet SCSI */ #define PG83_IDENT$K_SAS 6 /* 6:Protocol - Serial Attached SCSI */ #define PG83_IDENT$K_ADT 7 /* 7:Protocol - Automation/Drive Interface */ #define PG83_IDENT$K_ATAPI 8 /* 8:Protocol - ATA Packet Interface */ #define PG83_IDENT$K_VENDOR_SPEC 0 /* 0:Vendor-specific */ #define PG83_IDENT$K_VENDOR_ID 1 /* 1:Based on an 8-byte Vendor ID */ #define PG83_IDENT$K_IEEE_EUI64 2 /* 2:IEEE Extended Unique ID */ #define PG83_IDENT$K_FCPH_NAME_ID 3 /* 3:FC-PH Name ID */ #define PG83_IDENT$K_USER_SUPPLIED 4 /* 4:User-supplied Device ID (UDID) - Relative Target Port */ #define PG83_IDENT$K_TP_GROUP 5 /* 5:Target Port Group */ #define PG83_IDENT$K_LU_GROUP 6 /* 6:Logical Unit Group */ #define PG83_IDENT$K_MD5_STRING 7 /* 7:MD5 Logical Unit Identifier */ #define PG83_IDENT$K_SCSI_NAME 8 /* 8:SCSI Name String */ #define PG83_IDENT$K_DEVICE_ASSOC 0 /* 0:Identifier assoc. with device */ #define PG83_IDENT$K_PORT_ASSOC 1 /* 1:Identifier assoc. with port */ #define PG83_IDENT$K_LUN_ASSOC 2 /* 2:Identifier assoc. contains addressed Logical unit */ #define IDENT_HDR$K_LENGTH 4 #define FCPH$C_STD_ID 1 /* Standard IEEE format */ #define FCPH$C_EXT_ID 2 /* IEEE Extended format */ #define FCPH$C_REG_ID 5 /* IEEE Registered Name format */ #define FCPH$C_REGEXT_ID 6 /* IEEE Registered Extended format */ typedef struct _pg83_ident { __struct { unsigned pg83_ident$v_codeset : 4; /* Identifier is in ASCII vs. binary */ unsigned pg83_ident$v_protocol_id : 4; /* Protocol Identifier */ } pg83_ident$r_codeset_field; __struct { unsigned pg83_ident$v_id_type : 4; /* Identifier format */ unsigned pg83_ident$v_assoc : 2; /* Entity with which IDENTIFIER is associated */ unsigned pg83_ident$v_reserved2 : 1; /* reserved */ unsigned pg83_ident$v_piv : 1; /* Protocol Identifier Value */ } pg83_ident$r_idtype_field; unsigned char pg83_ident$b_reserved3; /* reserved */ unsigned char pg83_ident$b_ident_len; /* No. of bytes following this one */ __union { unsigned char pg83_ident$b_ident; /* Device identifier (255 - 8 bytes of header) */ __struct { /* FCPH_ID applies only if ID_TYPE = FCPH_NAME_ID */ unsigned pg83_ident$v_unused : 4; /* Meaning depends on what type of FC-PH identifier this is */ unsigned pg83_ident$v_naa : 4; /* FC-PH Name Address Authority */ } pg83_ident$r_fcph_id; } pg83_ident$r_ident_overlay; } PG83_IDENT; #if !defined(__VAXC) #define pg83_ident$v_codeset pg83_ident$r_codeset_field.pg83_ident$v_codeset #define pg83_ident$v_protocol_id pg83_ident$r_codeset_field.pg83_ident$v_protocol_id #define pg83_ident$v_id_type pg83_ident$r_idtype_field.pg83_ident$v_id_type #define pg83_ident$v_assoc pg83_ident$r_idtype_field.pg83_ident$v_assoc #define pg83_ident$v_reserved2 pg83_ident$r_idtype_field.pg83_ident$v_reserved2 #define pg83_ident$v_piv pg83_ident$r_idtype_field.pg83_ident$v_piv #define pg83_ident$b_ident pg83_ident$r_ident_overlay.pg83_ident$b_ident #define pg83_ident$v_unused pg83_ident$r_ident_overlay.pg83_ident$r_fcph_id.pg83_ident$v_unused #define pg83_ident$v_naa pg83_ident$r_ident_overlay.pg83_ident$r_fcph_id.pg83_ident$v_naa #endif /* #if !defined(__VAXC) */ /* */ /* Page 83 Inquiry data - Device Identification Page. Contains Identification */ /* Descriptor list starting at offset 'IDENT_LIST'. */ /* */ #define PAGE83_HDR$K_LENGTH 4 #define PAGE83$K_LENGTH 255 #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __longword #else #pragma __nomember_alignment #endif typedef struct _page83 { #pragma __nomember_alignment __struct { unsigned page83$v_device_type : 5; /* Peripheral device type */ unsigned page83$v_qualifier : 3; /* Peripheral qualifer */ } page83$r_peripheral; unsigned char page83$b_page_code; /* Identifies page as Page 83 */ unsigned char page83$b_reserved1; /* reserved */ unsigned char page83$b_page_len; /* No. of bytes following this one */ unsigned char page83$b_ident_list [251]; /* Start of the Ident list. */ char page83$b_fill1; /* For alignment */ } PAGE83; #if !defined(__VAXC) #define page83$v_device_type page83$r_peripheral.page83$v_device_type #define page83$v_qualifier page83$r_peripheral.page83$v_qualifier #endif /* #if !defined(__VAXC) */ /* */ /* Page 00 Inquiry data - Supported VPD Page */ /* */ #define PAGE00_HDR$K_LENGTH 4 #define PAGE00$K_LENGTH 80 #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __longword #else #pragma __nomember_alignment #endif typedef struct _page00 { #pragma __nomember_alignment __struct { unsigned page00$v_device_type : 5; /* Peripheral device type */ unsigned page00$v_qualifier : 3; /* Peripheral qualifer */ } page00$r_peripheral; unsigned char page00$b_page_code; /* Identifies page as Page 0 */ unsigned char page00$b_reserved1; /* reserved */ unsigned char page00$b_page_len; /* No. of bytes in page list */ unsigned char page00$b_supported_page [76]; /* List of up to 76 pages */ } PAGE00; #if !defined(__VAXC) #define page00$v_device_type page00$r_peripheral.page00$v_device_type #define page00$v_qualifier page00$r_peripheral.page00$v_qualifier #endif /* #if !defined(__VAXC) */ /* */ /* Page 80 Inquiry data - Unit Serial Number Page. */ /* */ #define PAGE80_HDR$K_LENGTH 4 #define PAGE80$K_LENGTH 255 #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __longword #else #pragma __nomember_alignment #endif typedef struct _page80 { #pragma __nomember_alignment __struct { unsigned page80$v_device_type : 5; /* Peripheral device type */ unsigned page80$v_qualifier : 3; /* Peripheral qualifer */ } page80$r_peripheral; unsigned char page80$b_page_code; /* Identifies page as Page 80 */ unsigned char page80$b_reserved1; /* reserved */ unsigned char page80$b_page_len; /* No. of bytes in serial number */ unsigned char page80$b_serial_no [251]; /* Product serial number (255 - 4 bytes of header) */ char page80$b_fill1; /* For alignment */ } PAGE80; #if !defined(__VAXC) #define page80$v_device_type page80$r_peripheral.page80$v_device_type #define page80$v_qualifier page80$r_peripheral.page80$v_qualifier #endif /* #if !defined(__VAXC) */ /* */ /* SCSI Poll Thread Block used by IOGEN$SCSI_CONFIG */ /* */ #define SPTB$K_LENGTH 299 struct sptbdef { unsigned int sptb$l_size; /* actual size allocated */ unsigned int sptb$l_lkid; /* thread's SCSIPOLL lock id */ unsigned int sptb$l_channel; /* thread's channel to the SCSI port */ int sptb$l_retries; /* number of retries left on this port */ __union { __int64 sptb$q_iosb; /* IOSB for polling operation */ __struct { unsigned short int sptb$w_status; /* completion status */ unsigned short int sptb$w_retlen; /* bytes read from port */ } sptb$r_iosb_fields; } sptb$r_iosb_overlay; unsigned int sptb$l_scsi_id; /* current SCSI ID to poll in thread */ unsigned int sptb$l_lun; /* current LUN to poll in thread */ void *sptb$ps_busarray; /* address of CRB's busarray entry list */ unsigned int sptb$l_handle; /* autoconfiguration handle */ unsigned int sptb$l_allocls; /* port allocation class */ char sptb$t_inquirybuf [255]; /* buffer for SCSI INQUIRY command */ } ; #if !defined(__VAXC) #define sptb$q_iosb sptb$r_iosb_overlay.sptb$q_iosb #define sptb$w_status sptb$r_iosb_overlay.sptb$r_iosb_fields.sptb$w_status #define sptb$w_retlen sptb$r_iosb_overlay.sptb$r_iosb_fields.sptb$w_retlen #endif /* #if !defined(__VAXC) */ /* */ /* SCSI-3 REPORT DENSITY command. */ /* */ #define RPTDENS_CMD$K_RPTDENS_OPCODE 68 #define RPTDENS_CMD$K_LENGTH 10 #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __longword #else #pragma __nomember_alignment #endif typedef struct _rptdens_cmd { #pragma __nomember_alignment unsigned char rptdens_cmd$b_opcode; /* Operation code */ unsigned char rptdens_cmd$b_reserved1 [6]; /* reserved */ unsigned char rptdens_cmd$b_alloc_length [2]; /* Allocation length */ unsigned char rptdens_cmd$b_control; /* Control byte */ char rptdens_cmd$b_fill_8_ [2]; } RPTDENS_CMD; /* */ /* The next two structures describe SCSI-3 tapes REPORT DENSITY return data. */ /* Each instance of the REPORT DENSITY command returns one RPTDENS_DATA */ /* structure. RPTDENS_DATA contains a quadword header, followed by */ /* n 52-byte entries, each holding a density support data block descriptor */ /* (one for each different density supported by the tape drive). */ /* The actual number of descriptors is specified by LIST_LENGTH_MSB/LSB. */ /* */ #define DENS_DESC$M_RESERVED1 0x1 #define DENS_DESC$M_DEFLT 0x20 #define DENS_DESC$M_DUP 0x40 #define DENS_DESC$M_WRTOK 0x80 #define DENS_DESC$K_LENGTH 52 /* Length per descriptor */ #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __longword #else #pragma __nomember_alignment #endif typedef struct _dens_descriptor { #pragma __nomember_alignment unsigned char dens_desc$b_primary_dens_code; unsigned char dens_desc$b_secondary_dens_code; __struct { unsigned dens_desc$v_reserved1 : 5 /** WARNING: bitfield array has been reduced to a string **/ ; unsigned dens_desc$v_deflt : 1; unsigned dens_desc$v_dup : 1; unsigned dens_desc$v_wrtok : 1; } dens_desc$r_flags; unsigned char dens_desc$b_reserved2; unsigned char dens_desc$b_reserved3; unsigned char dens_desc$b_bits_per_mm [3]; unsigned char dens_desc$b_media_width [2]; unsigned char dens_desc$b_tracks [2]; unsigned char dens_desc$b_capacity [4]; unsigned char dens_desc$b_assigning_org [8]; unsigned char dens_desc$b_density_name [8]; unsigned char dens_desc$b_description [20]; } DENS_DESCRIPTOR; #if !defined(__VAXC) #define dens_desc$v_reserved1 dens_desc$r_flags.dens_desc$v_reserved1 #define dens_desc$v_deflt dens_desc$r_flags.dens_desc$v_deflt #define dens_desc$v_dup dens_desc$r_flags.dens_desc$v_dup #define dens_desc$v_wrtok dens_desc$r_flags.dens_desc$v_wrtok #endif /* #if !defined(__VAXC) */ #define RPTDENS_HDR$K_LENGTH 4 #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __quadword #else #pragma __nomember_alignment #endif typedef struct _rptdens_data { #pragma __nomember_alignment unsigned char rptdens$b_list_length_msb; /* 2 + (# of desc * 52 bytes/desc) */ unsigned char rptdens$b_list_length_lsb; /* 2 + (# of desc * 52 bytes/desc) */ unsigned char rptdens$b_reserved1 [2]; /* Reserved */ DENS_DESCRIPTOR rptdens$r_first_desc; /* Start of the descriptor list */ } RPTDENS_DATA; /* */ /* Page x0F -- Data Compression Page. */ /* */ #define PAGE_0F$K_PAGE_CODE 15 #define PAGE_0F$K_PAGE_LENGTH 14 #define PAGE_0F$M_DCC 0x40 #define PAGE_0F$M_DCE 0x80 #define PAGE_0F$M_RED 0x60 #define PAGE_0F$M_DDE 0x80 #define PAGE_0F$K_NOCOMP 0 #define PAGE_0F$K_DEFAULT 1 #define PAGE_0F$K_IBM_ALDC_512 3 #define PAGE_0F$K_IBM_ALDC_1024 4 #define PAGE_0F$K_IBM_ALDC_2048 5 #define PAGE_0F$K_IBM_IDRC 16 #define PAGE_0F$K_DCLZ 32 #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __longword #else #pragma __nomember_alignment #endif typedef struct _datcomp_pg { #pragma __nomember_alignment __struct { /* Page code field */ unsigned page_0f$v_pagecode : 6; unsigned page_0f$v_rsvd1 : 1; /* Reserved */ unsigned page_0f$v_ps : 1; /* Parameters savable (Mode sense only) */ } page_0f$r_pagecode_field; unsigned char page_0f$b_page_len; /* No. of bytes following this one */ __struct { unsigned page_0f$v_rsvd2 : 6; /* Reserved */ unsigned page_0f$v_dcc : 1; /* Data compression capable */ unsigned page_0f$v_dce : 1; /* Data compression enable */ } page_0f$r_flags; __struct { unsigned page_0f$v_rsvd3 : 5; /* Reserved */ unsigned page_0f$v_red : 2; /* Report exception on decompression */ unsigned page_0f$v_dde : 1; /* Data decompression enable */ } page_0f$r_flags2; __union { /* Compression algorithm */ unsigned int page_0f$l_comp_algorithm; unsigned char page_0f$b_comp_bytes [4]; } page_0f$r_comp_algorithm_overlay; __union { /* Decompression algorithm */ unsigned int page_0f$l_decomp_algorithm; unsigned char page_0f$b_decomp_bytes [4]; } page_0f$r_decomp_algorithm_overlay; unsigned char page_0f$b_rsvd4 [4]; } DATCOMP_PG; #if !defined(__VAXC) #define page_0f$v_pagecode page_0f$r_pagecode_field.page_0f$v_pagecode #define page_0f$v_rsvd1 page_0f$r_pagecode_field.page_0f$v_rsvd1 #define page_0f$v_ps page_0f$r_pagecode_field.page_0f$v_ps #define page_0f$v_rsvd2 page_0f$r_flags.page_0f$v_rsvd2 #define page_0f$v_dcc page_0f$r_flags.page_0f$v_dcc #define page_0f$v_dce page_0f$r_flags.page_0f$v_dce #define page_0f$v_rsvd3 page_0f$r_flags2.page_0f$v_rsvd3 #define page_0f$v_red page_0f$r_flags2.page_0f$v_red #define page_0f$v_dde page_0f$r_flags2.page_0f$v_dde #define page_0f$l_comp_algorithm page_0f$r_comp_algorithm_overlay.page_0f$l_comp_algorithm #define page_0f$b_comp_bytes page_0f$r_comp_algorithm_overlay.page_0f$b_comp_bytes #define page_0f$l_decomp_algorithm page_0f$r_decomp_algorithm_overlay.page_0f$l_decomp_algorithm #define page_0f$b_decomp_bytes page_0f$r_decomp_algorithm_overlay.page_0f$b_decomp_bytes #endif /* #if !defined(__VAXC) */ /* */ /* Reading wwiddef.sdi is necessary because the DEV_WWID_DUPLE */ /* structure contains an embedded WWID type. */ /* */ /* It is assumed that wwiddef.sdi has already been created by the build. */ /* */ #ifndef __NEW_STARLET /* If __NEW_STARLET not currently defined */ #define __NEW_STARLET /* Needed to define uppercase WWID typedef */ #define __NEW_STARLET_LOCALDEF /* __NEW_STARLET now locally defined */ #endif #include /* Define WWID type; DEV_WWID_DUPLE contains an embedded WWID */ #ifdef __NEW_STARLET_LOCALDEF /* If __NEW_STARLET was locally defined above */ #undef __NEW_STARLET /* Restore original context */ #undef __NEW_STARLET_LOCALDEF #endif /* */ /* DEV_WWID_DUPLE used in device naming of (initially) Fibre Channel tapes. */ /* */ #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __quadword #else #pragma __nomember_alignment #endif typedef struct _dev_wwid_duple { #pragma __nomember_alignment struct _dev_wwid_duple *dev_wwid_duple$ps_flink; /* Forward link */ struct _dev_wwid_duple *dev_wwid_duple$ps_blink; /* Backward link */ unsigned short int dev_wwid_duple$w_size; /* Size */ unsigned char dev_wwid_duple$b_type; /* Type */ unsigned char dev_wwid_duple$b_subtype; /* Subtype */ unsigned int dev_wwid_duple$l_flags; /* Flags (future use) */ char dev_wwid_duple$t_device [16]; /* Device name */ WWID dev_wwid_duple$r_wwid; /* WWID */ } DEV_WWID_DUPLE; #define DEV_WWID_DUPLE$K_LENGTH 312 #define DEV_WWID_DUPLE$C_LENGTH 312 /* */ /* PERSISTENT RESERVE OUT command. */ /* */ #define SCSI$K_PER_RES_SUPPORT 1 #define PROUT_CMD$K_PROUT_OPCODE 95 #define PROUT_CMD$M_SERVICE_ACTION 0x1F00 #define PROUT_CMD$C_REGISTER 0 /* 00: Register */ #define PROUT_CMD$C_RESERVE 1 /* 01: Reserve */ #define PROUT_CMD$C_RELEASE 2 /* 02: Release */ #define PROUT_CMD$C_CLEAR 3 /* 03: Clear */ #define PROUT_CMD$C_PREEMPT 4 /* 04: Preempt */ #define PROUT_CMD$C_PREEMPT_ABORT 5 /* 05: Preempt & Abort */ #define PROUT_CMD$C_REGISTER_IGNORE 6 /* 06: Register and Ignore Existing Key */ #define PROUT_CMD$M_RESERVED1 0xE000 #define PROUT_CMD$M_TYPE 0xF0000 #define PROUT_CMD$C_OBSELETE1 0 /* 00: Obselete */ #define PROUT_CMD$C_WRITE_EX 1 /* 01: Write Exclusive */ #define PROUT_CMD$C_OBSELETE2 2 /* 02: Obselete */ #define PROUT_CMD$C_EXCLUSIVE 3 /* 03: Exclusive Access */ #define PROUT_CMD$C_OBSELETE3 4 /* 04: Obselete */ #define PROUT_CMD$C_WRITE_EX_RO 5 /* 05: Write Exclusive Registrants Only */ #define PROUT_CMD$C_EXCLUSIVE_RO 6 /* 06: Exclusive Registrants Only */ #define PROUT_CMD$M_SCOPE 0xF00000 #define PROUT_CMD$C_LOGICAL_UNIT 0 /* 00: Logical Unit */ #define PROUT_CMD$C_OBSELETE4 1 /* 01: Obselete */ #define PROUT_CMD$C_ELEMENT 2 /* 02: Element */ #define PROUT_CMD$K_PROUT_PLL 24 /* Fixed length of x18 */ #define PROUT_CMD$K_LENGTH 10 typedef struct _prout_cmd { unsigned char prout_cmd$b_opcode; /* Operation code */ unsigned prout_cmd$v_service_action : 5; /* Service Action field */ unsigned prout_cmd$v_reserved1 : 3; /* Reserved bits */ unsigned prout_cmd$v_type : 4; /* Reservation Type field */ unsigned prout_cmd$v_scope : 4; /* Scope field */ unsigned int prout_cmd$l_reserved2; /* Reserved */ unsigned char prout_cmd$b_param_list_len_msb; /* Parameter List Length MSB */ unsigned char prout_cmd$b_param_list_len_lsb; /* Parameter List Length LSB */ unsigned char prout_cmd$b_control; /* Control byte */ } PROUT_CMD; /* */ /* PERSISTENT RESERVE OUT parameter list. */ /* */ #define PROUT_PL$M_APTPL 0x0 #define PROUT_PL$M_RESERVED 0x0 #define PROUT_PL$K_LENGTH 24 typedef struct _prout_pl { unsigned __int64 prout_pl$q_reservation_key; /* Reservation Key */ unsigned __int64 prout_pl$q_sa_reservation_key; /* Service action key */ unsigned int prout_pl$l_scope_address; /* Scope address */ unsigned prout_pl$v_aptpl : 1; /* APTPL bit */ unsigned prout_pl$v_reserved : 15; /* Reserved bits */ unsigned short int prout_pl$w_obselete; /* Obselete */ } PROUT_PL; /* */ /* PERSISTENT RESERVE IN command. */ /* */ #define PRIN_CMD$K_PRIN_OPCODE 94 #define PRIN_CMD$M_SERVICE_ACTION 0x1F00 #define PRIN_CMD$C_READ_KEYS 0 /* 00: Read Keys */ #define PRIN_CMD$C_READ_RESERVATION 1 /* 01: Read Reservation */ #define PRIN_CMD$M_RESERVED1 0xE000 #define PRIN_CMD$K_LENGTH 10 typedef struct _prin_cmd { unsigned char prin_cmd$b_opcode; /* Operation code */ unsigned prin_cmd$v_service_action : 5; /* Service Action field */ unsigned prin_cmd$v_reserved1 : 3; /* Reserved bits */ unsigned int prin_cmd$l_reserved2; /* Reserved */ unsigned char prin_cmd$b_reserved3; /* Reserved */ unsigned short int prin_cmd$w_allocation_len; /* Allocation Length */ unsigned char prin_cmd$b_control; /* Control */ } PRIN_CMD; /* */ /* PERSISTENT RESERVE IN keys parameter list. */ /* */ #define PRIN_KEYS$K_LENGTH 16 typedef struct _prin_keys { unsigned int prin_keys$l_generation; /* Generation # */ unsigned int prin_keys$l_additional_len; /* Additional Length */ unsigned __int64 prin_keys$q_key; /* First Key */ } PRIN_KEYS; /* */ /* PERSISTENT RESERVE IN reservations parameter list. */ /* */ #define PRIN_RES$M_TYPE 0x0 #define PRIN_RES$C_OBSELETE1 0 /* 00: Obselete */ #define PRIN_RES$C_WRITE_EX 1 /* 01: Write Exclusive */ #define PRIN_RES$C_OBSELETE2 2 /* 02: Obselete */ #define PRIN_RES$C_EXCLUSIVE 3 /* 03: Exclusive Access */ #define PRIN_RES$C_OBSELETE3 4 /* 04: Obselete */ #define PRIN_RES$C_WRITE_EX_RO 5 /* 05: Write Exclusive Registrants Only */ #define PRIN_RES$C_EXCLUSIVE_RO 6 /* 06: Exclusive Registrants Only */ #define PRIN_RES$M_SCOPE 0x0 #define PRIN_RES$C_LOGICAL_UNIT 0 /* 00: Logical Unit */ #define PRIN_RES$C_OBSELETE4 1 /* 01: Obselete */ #define PRIN_RES$C_ELEMENT 2 /* 02: Element */ #define PRIN_RES$K_LENGTH 24 typedef struct _prin_res { unsigned int prin_res$l_generation; /* Generation # */ unsigned int prin_res$l_additional_len; /* Additional Length */ unsigned __int64 prin_res$q_key; /* First Key */ unsigned int prin_res$l_scope_address; /* Scope address */ unsigned char prin_res$b_reserved1; /* Reserved byte */ unsigned prin_res$v_type : 4; /* Reservation Type field */ unsigned prin_res$v_scope : 4; /* Scope field */ unsigned short int prin_res$w_obselete; /* Obselete word */ } PRIN_RES; /* */ /* 10-byte Read & Write CDBs have same format, differ only in opcode */ /* */ #define SCSI$K_READ_10_OPCODE 40 #define SCSI$K_WRITE_10_OPCODE 42 #define RW_10_CMD$M_RELADR 0x1 #define RW_10_CMD$M_FUA 0x8 #define RW_10_CMD$M_DPO 0x10 #define RW_10_CMD$M_LUN 0xE0 #define RW_10_CMD$K_LENGTH 10 #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __longword #else #pragma __nomember_alignment #endif typedef struct _rw_10_cmd { #pragma __nomember_alignment unsigned char rw_10_cmd$b_opcode; /* Operation code */ __union { unsigned char rw_10_cmd$b_flags; __struct { unsigned rw_10_cmd$v_reladr : 1; /* Relative addressing */ unsigned rw_10_cmd$v_reserved1 : 2; /* Reserved bits MBZ */ unsigned rw_10_cmd$v_fua : 1; /* Force Unit Access */ unsigned rw_10_cmd$v_dpo : 1; /* Disable Page Out */ unsigned rw_10_cmd$v_lun : 3; /* Logical Unit Number */ } rw_10_cmd$r_flags_bits; } rw_10_cmd$r_flags_overlay; unsigned int rw_10_cmd$l_lba; /* Logical Block Address */ unsigned char rw_10_cmd$b_reserved2; /* Reserved byte MBZ */ unsigned short int rw_10_cmd$w_blkcnt; /* Block count */ unsigned char rw_10_cmd$b_control; /* Control byte */ char rw_10_cmd$b_fill_9_ [2]; } RW_10_CMD; #if !defined(__VAXC) #define rw_10_cmd$b_flags rw_10_cmd$r_flags_overlay.rw_10_cmd$b_flags #define rw_10_cmd$v_reladr rw_10_cmd$r_flags_overlay.rw_10_cmd$r_flags_bits.rw_10_cmd$v_reladr #define rw_10_cmd$v_fua rw_10_cmd$r_flags_overlay.rw_10_cmd$r_flags_bits.rw_10_cmd$v_fua #define rw_10_cmd$v_dpo rw_10_cmd$r_flags_overlay.rw_10_cmd$r_flags_bits.rw_10_cmd$v_dpo #define rw_10_cmd$v_lun rw_10_cmd$r_flags_overlay.rw_10_cmd$r_flags_bits.rw_10_cmd$v_lun #endif /* #if !defined(__VAXC) */ /* */ /* MAINTENANCE IN/OUT command. */ /* */ #define MAINT_CMD$K_IN_OPCODE 163 #define MAINT_CMD$K_OUT_OPCODE 164 #define MAINT_CMD$M_SERVICE_ACTION 0x1F00 #define MAINT_CMD$C_RPT_P_EXTENT 0 /* 00: Report assigned/unassigned P_EXTENT */ #define MAINT_CMD$C_RPT_CMPNT 1 /* 01: Report Component Device */ #define MAINT_CMD$C_RPT_CMPNT_ATT 2 /* 02: Report Component Device attachments */ #define MAINT_CMD$C_RPT_PRPHRL 3 /* 03: Report Peripheral Device */ #define MAINT_CMD$C_RPT_PRPHRL_ASS 4 /* 04: Report Peripheral Device Associations */ #define MAINT_CMD$C_RPT_PERCMP_ID 5 /* 05: Report Peripheral Device / Component Identifier */ #define MAINT_CMD$C_RPT_STATES 6 /* 06: Report States */ #define MAINT_CMD$C_RPT_DEV_ID 7 /* 07: Report Device Identification */ #define MAINT_CMD$C_RPT_UNCFG_CAP 8 /* 08: Report Unconfigured Capacity */ #define MAINT_CMD$C_RPT_SUPPORT_CFG 9 /* 09: Report Supported Configuration Method */ #define MAINT_CMD$C_RPT_TGT_PORT_GRPS 10 /* 0A: Report Target Port Groups */ /* Service Actions for MAINTENANCE OUT */ #define MAINT_CMD$C_ADD_PERCMP 0 /* 00: Add Peripheral / Component Device */ #define MAINT_CMD$C_ATT_CMPNT 1 /* 01: Attach to Component Device */ #define MAINT_CMD$C_EXG_P_EXTENT 2 /* 02: Exchange P_EXTENT */ #define MAINT_CMD$C_EXG_PERCMP 3 /* 03: Exchange Peripheral / Component Device */ #define MAINT_CMD$C_INSTRT_CMPNT 4 /* 04: Instruct Component Device */ #define MAINT_CMD$C_REM_PERCMP 5 /* 05: Remove Peripheral Device / Component Device */ #define MAINT_CMD$C_SET_PERCMP_ID 6 /* 06: Set Peripheral Component Identifier */ #define MAINT_CMD$C_BRK_PERCMP 7 /* 07: Break Peripheral Component Device */ #define MAINT_CMD$C_RESERVE8 8 /* 08: Restricted */ #define MAINT_CMD$C_RESERVE9 9 /* 09: Restricted */ #define MAINT_CMD$C_SET_TGT_PORT_GRPS 10 /* 0A: Set Target Port Groups */ #define MAINT_CMD$M_RESERVED1 0xE000 #define MAINT_CMD$M_LUN_TYPE 0xF000000 #define MAINT_CMD$M_RESERVED2 0xF0000000 #define MAINT_CMD$M_SELECT_RPT 0x3 #define MAINT_CMD$SR$C_RPT_ALL 0 /* 00: Report All Peripheral Devices */ #define MAINT_CMD$SR$C_RPT_LUN 1 /* 01: Report only specified */ #define MAINT_CMD$SR$C_RPT_ALL_UNAVAIL 2 /* 02: Report All Unavailable Devices */ #define MAINT_CMD$M_ASSIGN 0x4 #define MAINT_CMD$M_RPTMBUS 0x8 #define MAINT_CMD$M_RPT_STATES 0x30 #define MAINT_CMD$RS$C_RPT_ALL 0 /* 00: Report All states for all LUNS */ #define MAINT_CMD$RS$C_RPT_LUN_TYPE 1 /* 01: Report All states for specified LUN TYPE */ #define MAINT_CMD$RS$C_RPT_LUN 2 /* 02: Report All stated for specified LUN */ #define MAINT_CMD$M_SETLUN 0x40 #define MAINT_CMD$M_RESERVED4 0x80 #define MAINT_CMD$M_RPTSEL 0x1 #define MAINT_CMD$M_PORC 0x2 #define MAINT_CMD$M_RESERVED5 0xFC #define MAINT_CMD$M_IMMED 0x1 #define MAINT_CMD$M_RESERVED6 0xFE #define MAINT_CMD$K_LENGTH 12 typedef struct _maint_cmd { unsigned char maint_cmd$b_opcode; /* Operation code */ unsigned maint_cmd$v_service_action : 5; /* Service Action field */ /* Service Actions for MAINTENANCE IN */ unsigned maint_cmd$v_reserved1 : 3; /* Reserved bits */ __union { unsigned char maint_cmd$b_device_type; /* Device Type */ unsigned char maint_cmd$b_cmpnt_instr; /* Component Device Instruction */ } maint_cmd$r_b2_overlay; unsigned maint_cmd$v_lun_type : 4; /* LUN Type field */ unsigned maint_cmd$v_reserved2 : 4; /* Reserved bits */ __union { unsigned short int maint_cmd$w_lun; __struct { unsigned char maint_cmd$b_lun_msb; /* Logical Unit Number MSB */ unsigned char maint_cmd$b_lun_lsb; /* Logical Unit Number LSB */ } maint_cmd$r_lun_bytes; } maint_cmd$r_lun_overlay; __union { unsigned char maint_cmd$b_alloc_length [4]; /* Allocation/Parameter list length */ __struct { unsigned short int maint_cmd$w_reserved3; __union { unsigned short int maint_cmd$w_new_lun; __struct { unsigned char maint_cmd$b_new_lun_msb; /* New Logical Unit Number MSB */ unsigned char maint_cmd$b_new_lun_lsb; /* New Logical Unit Number LSB */ } maint_cmd$r_new_lun_bytes; } maint_cmd$r_new_lun_overlay; } maint_cmd$r_new_lun_st; } maint_cmd$r_param_overlay; __union { unsigned char maint_cmd$b_cmd_flags; /* Command specific flags */ __struct { unsigned maint_cmd$v_select_rpt : 2; /* Select report code */ unsigned maint_cmd$v_assign : 1; /* Report Assigned p_extents bit */ unsigned maint_cmd$v_rptmbus : 1; /* Report Multiple Bus bit */ unsigned maint_cmd$v_rpt_states : 2; /* Report States */ unsigned maint_cmd$v_setlun : 1; /* SETLUN bit */ unsigned maint_cmd$v_reserved4 : 1; } maint_cmd$r_cmd_bits1; __struct { unsigned maint_cmd$v_rptsel : 1; /* Report Select bit */ unsigned maint_cmd$v_porc : 1; /* Peripheral or Component bit */ unsigned maint_cmd$v_reserved5 : 6; } maint_cmd$r_cmd_bits2; __struct { unsigned maint_cmd$v_immed : 1; /* Immediate bit */ unsigned maint_cmd$v_reserved6 : 7; } maint_cmd$r_cmd_bits3; } maint_cmd$r_cmd_flags_overlay; unsigned char maint_cmd$b_control; /* Control byte */ } MAINT_CMD; #if !defined(__VAXC) #define maint_cmd$b_device_type maint_cmd$r_b2_overlay.maint_cmd$b_device_type #define maint_cmd$b_cmpnt_instr maint_cmd$r_b2_overlay.maint_cmd$b_cmpnt_instr #define maint_cmd$w_lun maint_cmd$r_lun_overlay.maint_cmd$w_lun #define maint_cmd$r_lun_bytes maint_cmd$r_lun_overlay.maint_cmd$r_lun_bytes #define maint_cmd$b_lun_msb maint_cmd$r_lun_bytes.maint_cmd$b_lun_msb #define maint_cmd$b_lun_lsb maint_cmd$r_lun_bytes.maint_cmd$b_lun_lsb #define maint_cmd$b_alloc_length maint_cmd$r_param_overlay.maint_cmd$b_alloc_length #define maint_cmd$r_new_lun_st maint_cmd$r_param_overlay.maint_cmd$r_new_lun_st #define maint_cmd$r_new_lun_overlay maint_cmd$r_new_lun_st.maint_cmd$r_new_lun_overlay #define maint_cmd$w_new_lun maint_cmd$r_new_lun_overlay.maint_cmd$w_new_lun #define maint_cmd$r_new_lun_bytes maint_cmd$r_new_lun_overlay.maint_cmd$r_new_lun_bytes #define maint_cmd$b_new_lun_msb maint_cmd$r_new_lun_bytes.maint_cmd$b_new_lun_msb #define maint_cmd$b_new_lun_lsb maint_cmd$r_new_lun_bytes.maint_cmd$b_new_lun_lsb #define maint_cmd$b_cmd_flags maint_cmd$r_cmd_flags_overlay.maint_cmd$b_cmd_flags #define maint_cmd$r_cmd_bits1 maint_cmd$r_cmd_flags_overlay.maint_cmd$r_cmd_bits1 #define maint_cmd$v_select_rpt maint_cmd$r_cmd_bits1.maint_cmd$v_select_rpt #define maint_cmd$v_assign maint_cmd$r_cmd_bits1.maint_cmd$v_assign #define maint_cmd$v_rptmbus maint_cmd$r_cmd_bits1.maint_cmd$v_rptmbus #define maint_cmd$v_rpt_states maint_cmd$r_cmd_bits1.maint_cmd$v_rpt_states #define maint_cmd$v_setlun maint_cmd$r_cmd_bits1.maint_cmd$v_setlun #define maint_cmd$r_cmd_bits2 maint_cmd$r_cmd_flags_overlay.maint_cmd$r_cmd_bits2 #define maint_cmd$v_rptsel maint_cmd$r_cmd_bits2.maint_cmd$v_rptsel #define maint_cmd$v_porc maint_cmd$r_cmd_bits2.maint_cmd$v_porc #define maint_cmd$r_cmd_bits3 maint_cmd$r_cmd_flags_overlay.maint_cmd$r_cmd_bits3 #define maint_cmd$v_immed maint_cmd$r_cmd_bits3.maint_cmd$v_immed #endif /* #if !defined(__VAXC) */ /* p_extent descriptor */ #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __longword #else #pragma __nomember_alignment #endif typedef struct _p_extent { #pragma __nomember_alignment __union { __struct { unsigned char scsi$pxt$b_lun_msb; /* Logical Unit Number MSB */ unsigned char scsi$pxt$b_lun_lsb; /* Logical Unit Number LSB */ } scsi$pxt$r_lun_bytes; unsigned short int scsi$pxt$w_lun; } scsi$pxt$r_lun_overlay; unsigned int scsi$pxt$l_start_lba_p; /* First Addressable Block of the p_extent. */ unsigned int scsi$pxt$l_number_lba_p; /* Number of blocks in the p_extent */ unsigned short int scsi$pxt$w_bytes_lba_p; /* Number of bytes in each block */ } P_EXTENT; #if !defined(__VAXC) #define scsi$pxt$r_lun_bytes scsi$pxt$r_lun_overlay.scsi$pxt$r_lun_bytes #define scsi$pxt$b_lun_msb scsi$pxt$r_lun_bytes.scsi$pxt$b_lun_msb #define scsi$pxt$b_lun_lsb scsi$pxt$r_lun_bytes.scsi$pxt$b_lun_lsb #define scsi$pxt$w_lun scsi$pxt$r_lun_overlay.scsi$pxt$w_lun #endif /* #if !defined(__VAXC) */ /* Assign / Deassign p_extent Descriptor */ #define SCSI$APXT$M_STATE 0x7F #define SCSI$APXT$C_AVAILABLE 0 /* 00: The accessed device / p_extent is operational */ #define SCSI$APXT$C_BROKEN 1 /* 01: Is capable of being supported but has failed */ #define SCSI$APXT$C_NOT_AVAIL 2 /* 02: Is capable of being supported but not connected */ #define SCSI$APXT$C_NOT_SUPPORT 3 /* 03: Target can not support addressed device / p_extent */ #define SCSI$APXT$C_PRESENT 4 /* 04: Device / p_extent is present, no other status available */ #define SCSI$APXT$C_READYING 5 /* 05: The device / p_extent is being initialized, access is limited */ #define SCSI$APXT$C_REBUILD 6 /* 06: The device / p_extent is being rebuilt */ #define SCSI$APXT$M_RESERVED3 0x80 #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __longword #else #pragma __nomember_alignment #endif typedef struct _assgn_p_extent { #pragma __nomember_alignment P_EXTENT scsi$apxt$r_extent; /* P_EXTENT structure */ unsigned char scsi$apxt$b_reserved1; unsigned char scsi$apxt$b_reserved2; unsigned char scsi$apxt$b_dev_type; /* Peripheral Device Type */ __struct { unsigned scsi$apxt$v_state : 7; unsigned scsi$apxt$v_reserved3 : 1; } scsi$apxt$r_p_ext_state; } ASSGN_P_EXTENT; #if !defined(__VAXC) #define scsi$apxt$v_state scsi$apxt$r_p_ext_state.scsi$apxt$v_state #endif /* #if !defined(__VAXC) */ /* Component and Peripheral Device Descriptors */ #define SCSI$DEV$C_SACL 0 /* 00: Controller electronics that contain a SACL */ #define SCSI$DEV$C_NON_VOL_CACHE 1 /* 01: Non-volatile cache */ #define SCSI$DEV$C_POWER 2 /* 02: Power supply */ #define SCSI$DEV$C_UPS 3 /* 03: Uninterruptable power supply */ #define SCSI$DEV$C_DISPLAY 4 /* 04: Display */ #define SCSI$DEV$C_KEY_PAD 5 /* 05: Key pad entry */ #define SCSI$DEV$C_FAN 6 /* 06: Fan */ #define SCSI$DEV$M_DEV_STATE 0x7F #define SCSI$SPARE$C_AVAILABLE 0 /* 00: The addressed spare is operational */ #define SCSI$SPARE$C_BROKEN 1 /* 01: The spare is supported but has failed */ #define SCSI$SPARE$C_NOT_AVAIL 2 /* 02: The spare is supported but not configured */ #define SCSI$SPARE$C_NOT_SUPPORT 3 /* 03: The spare is not capable of configuration */ #define SCSI$SPARE$C_PRESENT 4 /* 04: The spare is present, no other status known */ #define SCSI$SPARE$C_SPARE_USED 5 /* 05: The spare has been exchanged with a failed object */ #define SCSI$DEV$C_AVAILABLE 0 /* 00: The addressed component device is operational */ #define SCSI$DEV$C_BROKEN 1 /* 01: The device is supported but has failed */ #define SCSI$DEV$C_ITTU 3 /* 03: The addressed device is the reporting component device */ #define SCSI$DEV$C_NOT_AVAIL 4 /* 04: The component device is supported but not present */ #define SCSI$DEV$C_NOT_SUPPORT 5 /* 05: Target can not support a component at given address */ #define SCSI$DEV$C_PRESENT 6 /* 06: The component device is present, no other status known */ #define SCSI$DEV$C_READYING 7 /* 07: The component device is being initialized, access is limited */ #define SCSI$DEV$M_REPLACE 0x80 #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __longword #else #pragma __nomember_alignment #endif typedef struct _dev_desc { #pragma __nomember_alignment unsigned char scsi$dev$b_dev_type; __struct { unsigned scsi$dev$v_dev_state : 7; unsigned scsi$dev$v_replace : 1; } scsi$dev$r_dev_status; __union { __struct { unsigned char scsi$dev$b_lun_msb; /* Logical Unit Number MSB */ unsigned char scsi$dev$b_lun_lsb; /* Logical Unit Number LSB */ } scsi$dev$r_lun_bytes; unsigned short int scsi$dev$w_lun; } scsi$dev$r_lun_overlay; } DEV_DESC; #if !defined(__VAXC) #define scsi$dev$v_dev_state scsi$dev$r_dev_status.scsi$dev$v_dev_state #define scsi$dev$v_replace scsi$dev$r_dev_status.scsi$dev$v_replace #define scsi$dev$r_lun_bytes scsi$dev$r_lun_overlay.scsi$dev$r_lun_bytes #define scsi$dev$b_lun_msb scsi$dev$r_lun_bytes.scsi$dev$b_lun_msb #define scsi$dev$b_lun_lsb scsi$dev$r_lun_bytes.scsi$dev$b_lun_lsb #define scsi$dev$w_lun scsi$dev$r_lun_overlay.scsi$dev$w_lun #endif /* #if !defined(__VAXC) */ #define SCSI$CMPT$M_DEV_TYPE 0xF #define SCSI$CMPT$M_RESERVED2 0xF0 #define SCSI$CMPT$C_PHYS_LUN 0 /* 00: Physical Logical Unit */ #define SCSI$CMPT$C_VOL_SET 1 /* 01: Volume set */ /* 02: Reserved */ /* 03: Reserved */ #define SCSI$CMPT$C_CMPT_LUN 4 /* 04: Component logical unit (component device) */ #define SCSI$CMPT$C_REDUND_GRP 5 /* 05: Redundancy Group */ #define SCSI$CMPT$C_SPARE 6 /* 06: Spare */ #define SCSI$CMPT$C_LUN_Z 7 /* 07: LUN_Z */ #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __longword #else #pragma __nomember_alignment #endif typedef struct _lun_desc { #pragma __nomember_alignment unsigned char scsi$cmpt$b_reserved1; __struct { unsigned scsi$cmpt$v_dev_type : 4; unsigned scsi$cmpt$v_reserved2 : 4; } scsi$cmpt$r_dtype; __union { __struct { unsigned char scsi$cmpt$b_lun_msb; /* Logical Unit Number MSB */ unsigned char scsi$cmpt$b_lun_lsb; /* Logical Unit Number LSB */ } scsi$cmpt$r_lun_bytes; unsigned short int scsi$cmpt$w_lun; } scsi$cmpt$r_lun_overlay; } LUN_DESC; #if !defined(__VAXC) #define scsi$cmpt$v_dev_type scsi$cmpt$r_dtype.scsi$cmpt$v_dev_type #define scsi$cmpt$r_lun_bytes scsi$cmpt$r_lun_overlay.scsi$cmpt$r_lun_bytes #define scsi$cmpt$b_lun_msb scsi$cmpt$r_lun_bytes.scsi$cmpt$b_lun_msb #define scsi$cmpt$b_lun_lsb scsi$cmpt$r_lun_bytes.scsi$cmpt$b_lun_lsb #define scsi$cmpt$w_lun scsi$cmpt$r_lun_overlay.scsi$cmpt$w_lun #endif /* #if !defined(__VAXC) */ #define SCSI$LUNZ$M_READYING 0x1 #define SCSI$LUNZ$M_NONAFAIL 0x2 #define SCSI$LUNZ$M_ABNORMAL 0x4 #define SCSI$LUNZ$M_RESERVED1 0x38 #define SCSI$LUNZ$M_VS 0x40 #define SCSI$LUNZ$M_RESERVED2 0x80 typedef struct _lun_z_states { unsigned scsi$lunz$v_readying : 1; /* At least one LUN is still readying */ unsigned scsi$lunz$v_nonafail : 1; /* Non Addressable part has failed */ unsigned scsi$lunz$v_abnormal : 1; /* One or more target units is unavailable */ unsigned scsi$lunz$v_reserved1 : 3; unsigned scsi$lunz$v_vs : 1; /* Vendor Specific */ unsigned scsi$lunz$v_reserved2 : 1; } LUN_Z_STATES; /* */ /* Report Supported Configuration Method parameter list */ /* */ #define SCSI$RSCM$C_NOSUPPORT 0 /* 00: Target does not support */ #define SCSI$RSCM$C_MIN_RPT 1 /* 01: Mandatory reporting service actions */ #define SCSI$RSCM$C_SUPPORT 3 /* 03: Mandatory reporting and configuration */ #define SCSI$RSCM$M_SIMPLE 0x3 #define SCSI$RSCM$M_RESERVED1 0xC #define SCSI$RSCM$M_BASIC 0x30 #define SCSI$RSCM$M_RESERVED2 0xC0 #define SCSI$RSCM$M_GENERAL 0x300 #define SCSI$RSCM$M_RESERVED3 0xFC00 #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __longword #else #pragma __nomember_alignment #endif typedef struct _rpt_config_method { #pragma __nomember_alignment unsigned scsi$rscm$v_simple : 2; /* Simple Configuration Method */ unsigned scsi$rscm$v_reserved1 : 2; unsigned scsi$rscm$v_basic : 2; /* Basic Configuration */ unsigned scsi$rscm$v_reserved2 : 2; unsigned scsi$rscm$v_general : 2; unsigned scsi$rscm$v_reserved3 : 6; unsigned char scsi$rscm$b_reserved4; unsigned char scsi$rscm$b_reserved5; } RPT_CONFIG_METHOD; /* */ /* Report Unconfigured Capacity parameter list */ /* */ #define SCSI$RUC$M_MOREP 0x1 #define SCSI$RUC$M_MOREPS 0x2 #define SCSI$RUC$M_RESERVED1 0xFC #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __longword #else #pragma __nomember_alignment #endif typedef struct _rpt_uncfg_cap { #pragma __nomember_alignment unsigned int scsi$ruc$l_p_extent_cap; /* Unassigned P_EXTENT Capacity */ unsigned int scsi$ruc$l_ps_extent_cap; /* Unassigned PS_EXTENT Capacity */ __struct { unsigned scsi$ruc$v_morep : 1; /* Can not configure all p_extents in single volume */ unsigned scsi$ruc$v_moreps : 1; /* Can not configure all ps_extents in single volume */ unsigned scsi$ruc$v_reserved1 : 6; } scsi$ruc$r_flags; unsigned char scsi$ruc$b_reserved2; unsigned short int scsi$ruc$w_blocksize; /* Bytes per block */ } RPT_UNCFG_CAP; #if !defined(__VAXC) #define scsi$ruc$v_morep scsi$ruc$r_flags.scsi$ruc$v_morep #define scsi$ruc$v_moreps scsi$ruc$r_flags.scsi$ruc$v_moreps #endif /* #if !defined(__VAXC) */ /* */ /* Volume set states */ /* */ #define SCSI$VSS$C_AVAILABLE 0 /* 00: The addressed volume set is operational */ #define SCSI$VSS$C_BROKEN 1 /* 01: The addressed volume set is broken */ #define SCSI$VSS$C_DATA_LOST 2 /* 02: User data has been lost in volume set */ #define SCSI$VSS$C_EXPOSED 3 /* 03: User data is valid but not protected */ #define SCSI$VSS$C_PART_EXPOSED 4 /* 04: One or more units have failed, data still protected */ #define SCSI$VSS$C_PROT_REBUILD 5 /* 05: One or more Redundancy Units are being rebuilt, data protected */ #define SCSI$VSS$C_NOT_AVAIL 6 /* 06: The volume set is capable of support but not configured */ #define SCSI$VSS$C_NOT_SUPPORT 7 /* 07: The volume set is not capable of being configured */ #define SCSI$VSS$C_READYING 8 /* 08: The volume set is being initialized */ #define SCSI$VSS$C_REBUILD 9 /* 09: One or more Redundancy Units are being rebuilt, data not protected */ #define SCSI$VSS$C_RECALC 10 /* 0A: The volume set is doing a recalculate */ #define SCSI$VSS$C_SPARE_USED 11 /* 0B: The Spare is in use for the addressed Volume set */ #define SCSI$VSS$C_PROT_DISABLED 12 /* 0C: Protection of User Data disabled */ #define SCSI$VSS$C_VERIFY 13 /* 0D: The addressed data set is doing a VERIFY */ #define SCSI$VSS$C_FRACT_EXPOSED 14 /* 0E: Part of the user data is not protected */ #define SCSI$VSS$C_DYN_RECONFIG 15 /* 0F: The address volume set is being reconfigured, data protected */ /* */ /* Redundancy group states */ /* */ #define SCSI$RGS$C_AVAILABLE 0 /* 00: The addressed redundancy group is configured */ #define SCSI$RGS$C_EXPOSED 1 /* 01: User data is intact, but not protected */ #define SCSI$RGS$C_INV_PROT_SPACE 2 /* 02: User data has been lost */ #define SCSI$RGS$C_NOT_AVAIL 3 /* 03: Group can be supported, has not been configured */ #define SCSI$RGS$C_NOT_SUPPORT 4 /* 04: Group is not capable of being configured */ #define SCSI$RGS$C_PART_EXPOSED 5 /* 05: One or more units have failed, data still protected */ #define SCSI$RGS$C_PRESENT 6 /* 06: The group is present, other status unknown */ #define SCSI$RGS$C_PROT_REBUILD 7 /* 07: The group is being rebuilt, data protected */ #define SCSI$RGS$C_REBUILD 8 /* 08: The group is being rebuilt, data is not protected */ #define SCSI$RGS$C_RECALC 9 /* 09: The redundancy group is in the process of recalulate operation */ #define SCSI$RGS$C_PROT_DISABLED 10 /* 0A: Protection of User Data is disabled */ #define SCSI$RGS$C_VERIFY 11 /* 0B: The redundancy group is doing a verify. */ #define SCSI$RGS$C_DYN_RECONFIG 12 /* 0C: The redundancy group is being reconfigured, data protected */ /* */ /* Component Device Instruction field */ /* */ #define SCSI$CDI$C_DEVICE_OFF 0 /* 00: Turn selected component device off */ #define SCSI$CDI$C_DEVICE_ON 1 /* 01: Turn selected component device on */ /* */ /* Target port descriptor format, as defined by SPC-3. */ /* */ /* Note: This structure is used to define data returned by the REPORT */ /* TARGET PORT GROUPS command. */ /* */ #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __longword #else #pragma __nomember_alignment #endif typedef struct _tp { #pragma __nomember_alignment unsigned short int scsi$tp$w_obsolete; /* Obsolete */ __union { /* Target Port Group */ __struct { unsigned char scsi$tp$b_rel_tp_msb; /* Relative Target Port ID MSB */ unsigned char scsi$tp$b_rel_tp_lsb; /* Relative Target Port ID LSB */ } scsi$tp$r_tp_bytes; unsigned short int scsi$tp$w_rel_tp; } scsi$tp$r_tp_overlay; } TP; #if !defined(__VAXC) #define scsi$tp$r_tp_bytes scsi$tp$r_tp_overlay.scsi$tp$r_tp_bytes #define scsi$tp$b_rel_tp_msb scsi$tp$r_tp_bytes.scsi$tp$b_rel_tp_msb #define scsi$tp$b_rel_tp_lsb scsi$tp$r_tp_bytes.scsi$tp$b_rel_tp_lsb #define scsi$tp$w_rel_tp scsi$tp$r_tp_overlay.scsi$tp$w_rel_tp #endif /* #if !defined(__VAXC) */ /* */ /* TARGET PORT GROUP descriptor format, as defined by SPC-3. */ /* */ /* Note: This structure is used to define data returned by the REPORT */ /* TARGET PORT GROUPS command. */ /* */ #define SCSI$RPT_TPG$M_ASYM_ACC_STATE 0xF #define SCSI$RPT_TPG$C_AO 0 /* 0: Active/optimized */ #define SCSI$RPT_TPG$C_ANO 1 /* 1: Active/non-optimized */ #define SCSI$RPT_TPG$C_STANDBY 2 /* 2: Standby */ #define SCSI$RPT_TPG$C_UNAVAILABLE 3 /* 3: Unavailable */ #define SCSI$RPT_TPG$C_TRANSIT 15 /* F: Transitioning between states */ #define SCSI$RPT_TPG$M_RSVD1 0x70 #define SCSI$RPT_TPG$M_PREF 0x80 #define SCSI$RPT_TPG$M_AO_SUP 0x1 #define SCSI$RPT_TPG$M_AN_SUP 0x2 #define SCSI$RPT_TPG$M_S_SUP 0x4 #define SCSI$RPT_TPG$M_U_SUP 0x8 #define SCSI$RPT_TPG$M_RSVD2 0x70 #define SCSI$RPT_TPG$M_T_SUP 0x80 #define SCSI$RPT_TPG$C_NO_STATUS 0 /* 0: No status available */ #define SCSI$RPT_TPG$C_CMD 1 /* 1: Asymm state altered via SET TPG command */ #define SCSI$RPT_TPG$C_IMPLICIT 2 /* 2: Asymm state altered by implicit behavior */ #define SCSI$RPT_TPG$C_HDR_LENGTH 8 /* Size of RTPG header info */ #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __longword #else #pragma __nomember_alignment #endif typedef struct _rpt_tpg { #pragma __nomember_alignment __struct { unsigned scsi$rpt_tpg$v_asym_acc_state : 4; /* Asymmetric access state */ unsigned scsi$rpt_tpg$v_rsvd1 : 3; /* Reserved */ unsigned scsi$rpt_tpg$v_pref : 1; /* Preferred target port */ } scsi$rpt_tpg$r_flags_1; __struct { unsigned scsi$rpt_tpg$v_ao_sup : 1; /* Active/optimized supported */ unsigned scsi$rpt_tpg$v_an_sup : 1; /* Active/non-optimized supported */ unsigned scsi$rpt_tpg$v_s_sup : 1; /* Standby supported */ unsigned scsi$rpt_tpg$v_u_sup : 1; /* Unavailable supported */ unsigned scsi$rpt_tpg$v_rsvd2 : 3; /* Reserved */ unsigned scsi$rpt_tpg$v_t_sup : 1; /* Transitioning supported */ } scsi$rpt_tpg$r_flags_2; __union { /* Target Port Group */ __struct { unsigned char scsi$rpt_tpg$b_tpg_msb; /* Target Port Group MSB */ unsigned char scsi$rpt_tpg$b_tpg_lsb; /* Target Port Group LSB */ } scsi$rpt_tpg$r_tpg_bytes; unsigned short int scsi$rpt_tpg$w_tpg; } scsi$rpt_tpg$r_tpg_overlay; unsigned char scsi$rpt_tpg$b_rsvd3; /* Reserved */ unsigned char scsi$rpt_tpg$b_status_code; /* Status code */ unsigned char scsi$rpt_tpg$b_vendor_spec; /* Vendor specific */ unsigned char scsi$rpt_tpg$b_tp_cnt; /* Target port count */ TP scsi$rpt_tpg$r_tp_lst; /* Start of TP list (variable length) */ } RPT_TPG; #if !defined(__VAXC) #define scsi$rpt_tpg$v_asym_acc_state scsi$rpt_tpg$r_flags_1.scsi$rpt_tpg$v_asym_acc_state #define scsi$rpt_tpg$v_rsvd1 scsi$rpt_tpg$r_flags_1.scsi$rpt_tpg$v_rsvd1 #define scsi$rpt_tpg$v_pref scsi$rpt_tpg$r_flags_1.scsi$rpt_tpg$v_pref #define scsi$rpt_tpg$v_ao_sup scsi$rpt_tpg$r_flags_2.scsi$rpt_tpg$v_ao_sup #define scsi$rpt_tpg$v_an_sup scsi$rpt_tpg$r_flags_2.scsi$rpt_tpg$v_an_sup #define scsi$rpt_tpg$v_s_sup scsi$rpt_tpg$r_flags_2.scsi$rpt_tpg$v_s_sup #define scsi$rpt_tpg$v_u_sup scsi$rpt_tpg$r_flags_2.scsi$rpt_tpg$v_u_sup #define scsi$rpt_tpg$v_rsvd2 scsi$rpt_tpg$r_flags_2.scsi$rpt_tpg$v_rsvd2 #define scsi$rpt_tpg$v_t_sup scsi$rpt_tpg$r_flags_2.scsi$rpt_tpg$v_t_sup #define scsi$rpt_tpg$r_tpg_bytes scsi$rpt_tpg$r_tpg_overlay.scsi$rpt_tpg$r_tpg_bytes #define scsi$rpt_tpg$b_tpg_msb scsi$rpt_tpg$r_tpg_bytes.scsi$rpt_tpg$b_tpg_msb #define scsi$rpt_tpg$b_tpg_lsb scsi$rpt_tpg$r_tpg_bytes.scsi$rpt_tpg$b_tpg_lsb #define scsi$rpt_tpg$w_tpg scsi$rpt_tpg$r_tpg_overlay.scsi$rpt_tpg$w_tpg #endif /* #if !defined(__VAXC) */ /* */ /* REPORT TARGET PORT GROUPS parameter data format, as defined by SPC-3. */ /* */ /* Note: This structure is used to define data returned by the REPORT */ /* TARGET PORT GROUPS command. */ /* */ #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __longword #else #pragma __nomember_alignment #endif typedef struct _rpt_tpg_dat { #pragma __nomember_alignment unsigned int scsi$rpt_tpg_dat$l_return_len; /* Return data length */ RPT_TPG scsi$rpt_tpg_dat$r_tpg_lst; /* Start of TPG list (variable length) */ } RPT_TPG_DAT; /* */ /* Parameter list for SET TARGET PORT GROUP descriptor, as defined by SPC-3. */ /* */ /* Note: This structure is used to define data sent by the SET */ /* TARGET PORT GROUPS command. */ /* */ #define SCSI$SET_TPG$M_ASYM_ACC_STATE 0xF #define SCSI$SET_TPG$C_AO 0 /* 0: Active/optimized */ #define SCSI$SET_TPG$C_ANO 1 /* 1: Active/non-optimized */ #define SCSI$SET_TPG$C_STANDBY 2 /* 2: Standby */ #define SCSI$SET_TPG$C_UNAVAILABLE 3 /* 3: Unavailable */ #define SCSI$SET_TPG$C_ILLEGAL 15 /* F: Illegal Request */ #define SCSI$SET_TPG$M_RSVD1 0xF0 #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __longword #else #pragma __nomember_alignment #endif typedef struct _set_tpg { #pragma __nomember_alignment __struct { unsigned scsi$set_tpg$v_asym_acc_state : 4; /* Asymmetric access state */ unsigned scsi$set_tpg$v_rsvd1 : 4; /* Reserved */ } scsi$set_tpg$r_flags; unsigned char scsi$set_tpg$b_rsvd2; /* Reserved */ __union { /* Target Port Group */ __struct { unsigned char scsi$set_tpg$b_tpg_msb; /* Target Port Group MSB */ unsigned char scsi$set_tpg$b_tpg_lsb; /* Target Port Group LSB */ } scsi$set_tpg$r_tpg_bytes; unsigned short int scsi$set_tpg$w_tpg; } scsi$set_tpg$r_tpg_overlay; } SET_TPG; #if !defined(__VAXC) #define scsi$set_tpg$v_asym_acc_state scsi$set_tpg$r_flags.scsi$set_tpg$v_asym_acc_state #define scsi$set_tpg$v_rsvd1 scsi$set_tpg$r_flags.scsi$set_tpg$v_rsvd1 #define scsi$set_tpg$r_tpg_bytes scsi$set_tpg$r_tpg_overlay.scsi$set_tpg$r_tpg_bytes #define scsi$set_tpg$b_tpg_msb scsi$set_tpg$r_tpg_bytes.scsi$set_tpg$b_tpg_msb #define scsi$set_tpg$b_tpg_lsb scsi$set_tpg$r_tpg_bytes.scsi$set_tpg$b_tpg_lsb #define scsi$set_tpg$w_tpg scsi$set_tpg$r_tpg_overlay.scsi$set_tpg$w_tpg #endif /* #if !defined(__VAXC) */ /* */ /* Parameter list for SET TARGET PORT GROUPS, as defined by SPC-3. */ /* */ /* Note: This structure is used to define data sent by the SET */ /* TARGET PORT GROUPS command. Exactly one SET_TPG structure is */ /* represented in the TPG_LST since that is the most common */ /* usage, but additional SET_TPG's are allowed. */ /* */ #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __longword #else #pragma __nomember_alignment #endif typedef struct _set_tpg_dat { #pragma __nomember_alignment unsigned int scsi$set_tpg_dat$l_rsvd1; /* Reserved */ SET_TPG scsi$set_tpg_dat$r_tpg_lst; /* Start of TPG list (varaible length) */ } SET_TPG_DAT; #pragma __member_alignment __restore #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __restore /* Restore the previously-defined required ptr size */ #endif #ifdef __cplusplus } #endif #pragma __standard #endif /* __SCSIDEF_LOADED */