/**/ /***************************************************************************/ /** **/ /** © 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:25:43 by OpenVMS SDL EV3-3 */ /* Source: 26-MAY-2006 14:45:38 $1$DGA7274:[LIB_H.SRC]FCP_QIODEF.SDL;1 */ /********************************************************************************************************************************/ /*** MODULE $FCP_QIODEF IDENT X-5 ***/ #ifndef __FCP_QIODEF_LOADED #define __FCP_QIODEF_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 #ifndef _FCP_QIODEF_LOADED #define _FCP_QIODEF_LOADED /* IO$ACCESS command codes for FibreChannel drivers */ /* Maximum number of filter parameters allowed */ /* (maximum value of the counts defined below) */ /* Make SDL-local constant public */ #define FC$K_EV_FLTR_MAXIMUM_CNT 32 /* Maximum number of FCP status filter bytes */ #define FC$K_EV_FLTR_FCP_STAT_CNT 8 /* Maximum number of extended status filter bytes */ #define FC$K_EV_FLTR_ESTAT_CNT 8 /* Maximum number of SCSI command filter bytes */ #define FC$K_EV_FLTR_SCSI_COMM_CNT 8 /* Maximum number of ASC filter bytes */ #define FC$K_EV_FLTR_ASC_CNT 8 /* Maximum number of WWID filter bytes */ #define FC$K_EV_FLTR_WWID_CNT 32 /* */ /* QIO Function Codes */ /* */ #define FC$C_QIO_QFULL 0 #define FC$C_QIO_FC_LA_DATA 1 #define FC$C_QIO_FLTR_WRITE 2 #define FC$C_QIO_FLTR_READ 3 #define FC$C_QIO_FCP_RING_SIZE 4 #define FC$C_QIO_SET_WTID 5 #define FC$C_QIO_IC 6 #define FC$C_QIO_RING_SIZE 7 #define FC$C_QIO_FASTPATH_RING_SIZE 8 #define FC$C_QIO_SLOW_RING_SIZE 9 #define FC$C_QIO_ERROR_RING_SIZE 10 #define FC$C_QIO_INTERRUPTS_RING_SIZE 11 #define FC$C_QIO_MBX_RING_SIZE 12 #define FC$C_QIO_IOCB_RING_SIZE 13 #define FC$C_QIO_PM_CLEAR 14 #define FC$C_QIO_PM_READ_ALL 15 #define FC$C_QIO_PM_RSCC 16 #define FC$C_QIO_PM_SYSTIME 17 #define FC$C_QIO_SET_ERL_ENTRY 18 #define FC$C_QIO_PM_READ_COUNTERS 19 #define FC$C_QIO_SNIA_REQUEST 20 #define FC$C_QIO_NS_GID_PT 21 /* Get Port IDs using the port type */ #define FC$C_QIO_NS_GPN_ID 22 /* Get Port Name */ #define FC$C_QIO_NS_GSPN_ID 23 /* Get Symbolic Port Name */ #define FC$C_QIO_PM_ALLOC 24 /* X-8a Allocate performance data */ #define FC$C_QIO_PM_DEALLOC 26 /* X-8a Deallocate performance data */ #define FC$C_QIO_GET_WWIDS 27 /* X-9a Select WWIDs by wildcard */ #define FC$C_QIO_GET_WTID 28 /* X-9a Read a WWID_TID structure */ #define FC$C_QIO_SET_WTIDS 29 /* X-9a Modify selected WWID_TID characteristics */ #define FC$C_QIO_SUB_FLTR_SCSI_COMM 0 #define FC$C_QIO_SUB_FLTR_FCP_STATUS 1 #define FC$C_QIO_SUB_FLTR_ESTATUS 2 #define FC$C_QIO_SUB_FLTR_ASC 3 #define FC$C_QIO_SUB_FLTR_WWID 4 #define FC$C_QIO_SUB_FLTR_MATCH 5 #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 _qfull { #pragma __nomember_alignment __int64 qfull$q_command_code; /* FC$C_QFULL */ __int64 qfull$q_qw_count; /* QW parameters (not counting this one) */ __int64 qfull$q_fc_la; /* FibreChannel Logical Address */ __int64 qfull$q_step_divisor; /* Step size based on Queue Full depth */ __int64 qfull$q_drain_multiplier; /* Drain count based on step size */ __int64 qfull$q_probation_factor; /* Probation period based on Queue Full depth */ } QFULL; #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 _fc_la_data { #pragma __nomember_alignment __int64 fc_la_data$q_command_code; /* FC$C_FC_LA_DATA */ __int64 fc_la_data$q_qw_count; /* QW parameters (not counting this one) */ __int64 fc_la_data$q_fc_la; /* FibreChannel Logical Address */ __int64 fc_la_data$q_fc_address; /* Current FibreChannel address */ __int64 fc_la_data$q_port_name; /* FC-LA's port name */ __int64 fc_la_data$q_node_name; /* FC-LA's node name */ __int64 fc_la_data$q_state; /* FC-LA's state as ELS code */ } FC_LA_DATA; #define FC$C_NO_APPEND 0 #define FC$C_APPEND 1 #define FC$C_OR 0 #define FC$C_AND 1 #define FC$C_NOR 2 #define FC$C_NO_CHANGE 3 #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 _filter_data_write { #pragma __nomember_alignment __int64 filter_data_write$q_command_code; /* FC$C_QIO_FLTR_WRITE */ __int64 filter_data_write$q_qw_count; /* QW parameters (not counting this one) */ __int64 filter_data_write$q_sub_command; /* Sub-command FC$C_QIO_SUB_FLTR_* */ __int64 filter_data_write$q_append; /* Append flag (0=no, 1=yes) */ __int64 filter_data_write$q_match; /* Match flag (0=or, 1=and, 2=no change) */ __int64 filter_data_write$q_data [32]; /* Data for specified filter function */ } FILTER_DATA_WRITE; #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 _filter_data_read { #pragma __nomember_alignment __int64 filter_data_read$q_command_code; /* FC$C_QIO_FLTR_READ */ __int64 filter_data_read$q_qw_count; /* QW parameters (not counting this one) */ __int64 filter_data_read$q_sub_command; /* Sub-command FC$C_QIO_SUB_FLTR_* */ } FILTER_DATA_READ; #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 _filter_data_rsp { #pragma __nomember_alignment __int64 filter_data_rsp$q_qw_count; /* QW parameters (not counting this one) */ __int64 filter_data_rsp$q_data [32]; /* Data for specified filter function */ } FILTER_DATA_RSP; #define FLTR_IOSB$M_ALREADY_EXISTS 0x1 #define FLTR_IOSB$M_TOO_MANY_VALUES 0x2 #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 _fltr_iosb { #pragma __nomember_alignment unsigned short int fltr_iosb$w_status; short int fltr_iosb$w_reserved0; short int fltr_iosb$w_reserved1; /* Error word */ __union { unsigned short int fltr_iosb$w_error_word; __struct { unsigned fltr_iosb$v_already_exists : 1; unsigned fltr_iosb$v_too_many_values : 1; unsigned fltr_iosb$v_reserved0 : 14; } fltr_iosb$r_error_word_bits; } fltr_iosb$r_error_word_overlay; } FLTR_IOSB; #if !defined(__VAXC) #define fltr_iosb$w_error_word fltr_iosb$r_error_word_overlay.fltr_iosb$w_error_word #define fltr_iosb$v_already_exists fltr_iosb$r_error_word_overlay.fltr_iosb$r_error_word_bits.fltr_iosb$v_already_exists #define fltr_iosb$v_too_many_values fltr_iosb$r_error_word_overlay.fltr_iosb$r_error_word_bits.fltr_iosb$v_too_many_values #endif /* #if !defined(__VAXC) */ #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 _ring_size_data { #pragma __nomember_alignment __int64 ring_size_data$q_command_code; /* FC$C_QIO_RING_SIZE */ __int64 ring_size_data$q_qw_count; /* QW parameters (not counting this one) */ __int64 ring_size_data$q_ring_size; /* Number of ring entries requested */ } RING_SIZE_DATA; #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 _ic { #pragma __nomember_alignment __int64 ic$q_command_code; /* FC$C_QIO_IC */ __int64 ic$q_qw_count; /* QW parameters (not counting this one) */ __int64 ic$q_rsp_int; __int64 ic$q_delay_ms; __int64 ic$q_rsp_cnt; } IC; #define FC$C_MAX_QFULL_WAIT 1 /* Minimum allowed user-specified IO cap */ #define FC$C_USER_IO_CAP_MIN 8 /* Minimum allowed user-specified IO cap */ #define FC$C_USER_IO_CAP_MAX 65535 /* Queue Full processing types */ #define FC$C_QFULL_LOAD 0 #define FC$C_QFULL_TIMED 1 /* Default Queue Full delay time (for Timed processing) */ #define FC$C_QFULL_TIMED_DELAY_DEF 500 /* Minimum Queue Full delay time (for Timed processing) */ #define FC$C_QFULL_TIMED_DELAY_MIN 1 /* Maximum Queue Full delay time (for Timed processing) */ #define FC$C_QFULL_TIMED_DELAY_MAX 6000 #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 _set_wtid { #pragma __nomember_alignment __int64 set_wtid$q_command_code; /* FC$C_QIO_SET_WTID */ __int64 set_wtid$q_byte_count; /* Number of bytes following this quadword */ __int64 set_wtid$q_io_cap; /* IO cap value */ __int64 set_wtid$q_qfull_wait; /* Initiate cap after queue full seen */ __int64 set_wtid$q_qfull_type; /* Queue-full processing type */ __int64 set_wtid$q_qfull_time; /* Queue-full delay time (for time-based processing) */ __int64 set_wtid$q_wwid; /* WWID */ } SET_WTID; #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 _set_erl_entry { #pragma __nomember_alignment __int64 set_erl_entry$q_command_code; /* FC$C_SET_ERL_ENTRY */ __int64 set_erl_entry$q_qw_count; /* QW parameters (not counting this one) */ unsigned __int64 set_erl_entry$q_entry_count; /* Number of error log entries requested */ } SET_ERL_ENTRY; #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 _pm_qio { #pragma __nomember_alignment __int64 pm_qio$q_command_code; /* FC$C_PM_* commands */ __int64 pm_qio$q_device_class; /* X-7 DC$_TAPE, DC$_DISK, etc. */ __int64 pm_qio$q_device_id; /* X-7 Unit number, or 0 for all devices */ } PM_QIO; #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 _pm_counters { #pragma __nomember_alignment unsigned __int64 pm_counters$q_read_time_acc; /* Accumulated read time */ unsigned __int64 pm_counters$q_write_time_acc; /* Accumulated write time */ unsigned int pm_counters$l_reads; /* Number of reads */ unsigned int pm_counters$l_writes; /* Number of writes */ unsigned int pm_counters$l_blocks_read; /* Accumulated number of blocks read */ unsigned int pm_counters$l_blocks_written; /* Accumulated number of blocks written */ } PM_COUNTERS; /* Nameserver Support */ #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 _ns_qio { #pragma __nomember_alignment __int64 ns_qio$q_command_code; /* FC$C_NS_* commands */ __int64 ns_qio$q_port; /* Port ID */ } NS_QIO; /* SNIA support */ #define FC$C_QIO_SUB_SNIA_ADP_ATTR 0 #define FC$C_QIO_SUB_SNIA_PORT_ATTR 1 #define FC$C_QIO_SUB_SNIA_PORTSTAT 2 #define FC$C_QIO_SUB_SNIA_DISCPORTATTR 3 #define FC$C_QIO_SUB_SNIA_RNIDMGMT 4 #define FC$C_QIO_SUB_SNIA_DISCWWPNATTR 5 #define FC$C_QIO_SUB_SNIA_FCPSTAT 6 /* Put this header on a specific SNIA 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 _snia_request_header { #pragma __nomember_alignment __int64 snia_rq_hdr$q_command_code; /* FGE$C_QIO_SNIA_REQUEST */ __int64 snia_rq_hdr$q_qw_count; /* QW parameters (not counting this one) */ __int64 snia_rq_hdr$q_sub_command; /* Specific SNIA command */ __int64 snia_rq_hdr$q_port_id; /* Specific PORT identifier WWID or index */ __int64 snia_rq_hdr$q_data; /* Parameter for command */ } SNIA_REQUEST_HEADER; #define SNIA$K_MAX_CDB_SIZE 12 #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 _path_cdb { #pragma __nomember_alignment __int64 snia_path$q_lun; /* LUN */ int snia_path$is_target; /* Target FC_LA */ unsigned int snia_path$l_length; /* True length of CDB. */ unsigned char snia_path$b_cdb [12]; /* CDB bytes */ char snia_path$b_fill_0_ [4]; } PATH_CDB; /* X-10 */ /* */ /* X-9b Set characteristics for a potentially wildcarded WWID */ /* */ #define SET_WTIDS$M_NODE 1 /* Constant for use outside of structure */ #define SET_WTIDS$M_NODE 0x1 #define SET_WTIDS$M_OR 2 /* Constant for use outside of structure */ #define SET_WTIDS$M_OR 0x2 #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 _set_wtids { #pragma __nomember_alignment __int64 set_wtids$q_command_code; /* FC$C_QIO_SET_WTID */ __int64 set_wtids$q_byte_count; /* Number of bytes following this quadword */ __int64 set_wtids$q_wwid; /* WWID - port WWID by default, node WWID if SET_WTID$V_NODE is set */ __int64 set_wtids$q_match; /* Wildcarded nibbles are 0'd in this mask */ char set_wtids$b_product_id [16]; /* ASCIZ product ID string to match */ __union { unsigned __int64 set_wtids$q_flags; /* Control flags */ __struct { unsigned set_wtids$v_node : 1; /* WWID is a node WWID (else port) */ unsigned set_wtids$v_or : 1; /* Match either WWID or Product ID (else AND) */ unsigned set_wtids$v_fill_3_ : 6; } set_wtids$r_fill_2_; } set_wtids$r_fill_1_; /* End control flags */ __int64 set_wtids$q_io_cap; /* IO cap value */ __int64 set_wtids$q_qfull_wait; /* Initiate cap after queue full seen */ __int64 set_wtids$q_qfull_type; /* Queue-full processing type */ __int64 set_wtids$q_qfull_time; /* Queue-full delay time (for time-based processing) */ } SET_WTIDS; #if !defined(__VAXC) #define set_wtids$q_flags set_wtids$r_fill_1_.set_wtids$q_flags #define set_wtids$v_node set_wtids$r_fill_1_.set_wtids$r_fill_2_.set_wtids$v_node #define set_wtids$v_or set_wtids$r_fill_1_.set_wtids$r_fill_2_.set_wtids$v_or #endif /* #if !defined(__VAXC) */ /* */ /* X-9c Get the port WWIDs selected by a wildcarded WWID and/or a partial product ID */ /* */ #define GET_WWIDS$M_NODE 1 /* Constant for use outside of structure */ #define GET_WWIDS$M_NODE 0x1 #define GET_WWIDS$M_OR 2 /* Constant for use outside of structure */ #define GET_WWIDS$M_OR 0x2 #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 _get_wwids { #pragma __nomember_alignment __int64 get_wwids$q_command_code; /* FC$C_QIO_GET_WWID */ __int64 get_wwids$q_byte_count; /* Number of bytes following this quadword */ __union { unsigned __int64 get_wwids$q_flags; /* Control flags */ __struct { unsigned get_wwids$v_node : 1; /* WWID is a node WWID (else port) */ unsigned get_wwids$v_or : 1; /* Match either WWID or Product ID (else AND) */ unsigned get_wwids$v_fill_6_ : 6; } get_wwids$r_fill_5_; } get_wwids$r_fill_4_; /* End control flags */ __int64 get_wwids$q_wwid; /* Base WWID to match */ char get_wwids$b_product_id [16]; /* ASCIZ product ID string to match */ __int64 get_wwids$q_match; /* Wildcarded nibbles are 0'd in this mask */ } GET_WWIDS; #if !defined(__VAXC) #define get_wwids$q_flags get_wwids$r_fill_4_.get_wwids$q_flags #define get_wwids$v_node get_wwids$r_fill_4_.get_wwids$r_fill_5_.get_wwids$v_node #define get_wwids$v_or get_wwids$r_fill_4_.get_wwids$r_fill_5_.get_wwids$v_or #endif /* #if !defined(__VAXC) */ /* */ /* X-9d Structure returned by a successful FC$C_QIO_GET_WWID */ /* */ #define WWIDS$M_NODE 1 /* Constant for use outside of structure */ #define WWIDS$M_NODE 0x1 #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 _wwids { #pragma __nomember_alignment __int64 wwids$q_matched; /* Number of WWIDs which matched */ __int64 wwids$q_count; /* Number of WWIDs which follow */ __union { unsigned __int64 wwids$q_flags; /* Control flags */ __struct { unsigned wwids$v_node : 1; /* WWIDs are node WWIDs (else port) */ unsigned wwids$v_fill_9_ : 7; } wwids$r_fill_8_; } wwids$r_fill_7_; /* End control flags */ __int64 wwids$q_wwids [1]; /* Port or node WWIDS (keep as last field) */ } WWIDS; #if !defined(__VAXC) #define wwids$q_flags wwids$r_fill_7_.wwids$q_flags #define wwids$v_node wwids$r_fill_7_.wwids$r_fill_8_.wwids$v_node #endif /* #if !defined(__VAXC) */ /* */ /* X-9e Return the WWID_TID selected by the specified port WWID */ /* */ #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 _get_wtid { #pragma __nomember_alignment __int64 get_wtid$q_command_code; /* FC$C_QIO_GET_WTID */ __int64 get_wtid$q_byte_count; /* Number of bytes following this quadword */ __int64 get_wtid$q_wwid; /* Port WWID */ } GET_WTID; /* X-10 */ #endif #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 /* __FCP_QIODEF_LOADED */