/********************************************************************************************************************************/ /* Created: 30-Mar-2010 17:29:56 by OpenVMS SDL EV3-3 */ /* Source: 30-MAR-2010 17:29:22 $1$DGA7274:[STARLET_H.SRC]STARDEFQZ.SDI;1 */ /********************************************************************************************************************************/ /*** MODULE $WWIDDEF IDENT X-4 ***/ #ifndef __WWIDDEF_LOADED #define __WWIDDEF_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 /* */ /* Longword header prefixed to the World-Wide Identifier used in fibre channel. */ /* A WWID can be in any one of the eleven formats specified here. At this time */ /* though, only seven of these formats (WWID types 1-4, 9-11) are implemented */ /* in OpenVMS. */ /* */ /* Note that this is a common header, used by OpenVMS, Digital UNIX, and the */ /* Console. Any changes to this structure should be made in cooperation with */ /* these other groups. */ /* */ #define WWIDHDR$M_WWID_LENGTH 0xFFFFF #define WWIDHDR$M_ASCII_DATA 0x100000 #define WWIDHDR$M_WWID_TYPE 0xFF000000 #define WWIDHDR$K_IEEE_REGEXT 1 /* 1: Page83, ID type 3, NAA 0110 */ #define WWIDHDR$K_IEEE_REG 2 /* 2: Page83, ID type 3, NAA 0101 */ #define WWIDHDR$K_PG83TY1_VID 3 /* 3: PID+Page83, ID type 1 */ #define WWIDHDR$K_PG80_SERIALNO 4 /* 4: VID+PID+Ser_No from Page80 */ #define WWIDHDR$K_INQ_SERIALNO 5 /* 5: VID+PID+Ser_No from std. inq. data */ #define WWIDHDR$K_TGT_IDENT 6 /* 6: VID+PID+Persistent_Tgt_ID */ #define WWIDHDR$K_BTL 7 /* 7: VID+PID+Bus_No+Tgt_ID+LUN */ #define WWIDHDR$K_DEC_UNIQUE 8 /* 8: HSZ-specific serial no's. */ #define WWIDHDR$K_HSZ_THISOTHER 9 /* 9: THIS/OTHER ser. no. (older HSZs) */ #define WWIDHDR$K_IEEE48_VEXT 10 /* 10: Page83, ID type 3, NAA 0010 */ #define WWIDHDR$K_IEEE48_0EXT 11 /* 11: Page83, ID type 3, NAA 0001 */ #define WWIDHDR$K_IEEE_EUI64 12 /* 12: Page83, ID type 2 */ #define WWIDHDR$K_ISCSI_NAME 13 /* 13: X-4 iSCSI Name */ #ifdef __NEW_STARLET #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 _wwidhdr { #pragma __nomember_alignment __struct { unsigned wwidhdr$v_wwid_length : 20; /* Length of WWID data */ unsigned wwidhdr$v_ascii_data : 1; /* Data is in ASCII format */ unsigned wwidhdr$v_reserved1 : 3; /* Reserved */ unsigned wwidhdr$v_wwid_type : 8; /* WWID format type */ } wwidhdr$r_header_fields; } WWIDHDR; #if !defined(__VAXC) #define wwidhdr$v_wwid_length wwidhdr$r_header_fields.wwidhdr$v_wwid_length #define wwidhdr$v_ascii_data wwidhdr$r_header_fields.wwidhdr$v_ascii_data #define wwidhdr$v_reserved1 wwidhdr$r_header_fields.wwidhdr$v_reserved1 #define wwidhdr$v_wwid_type wwidhdr$r_header_fields.wwidhdr$v_wwid_type #endif /* #if !defined(__VAXC) */ #else /* __OLD_STARLET */ #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 _wwidhdr { #pragma __nomember_alignment __struct { unsigned wwidhdr$v_wwid_length : 20; /* Length of WWID data */ unsigned wwidhdr$v_ascii_data : 1; /* Data is in ASCII format */ unsigned wwidhdr$v_reserved1 : 3; /* Reserved */ unsigned wwidhdr$v_wwid_type : 8; /* WWID format type */ } wwidhdr$r_header_fields; } wwidhdr; #if !defined(__VAXC) #define wwidhdr$v_wwid_length wwidhdr$r_header_fields.wwidhdr$v_wwid_length #define wwidhdr$v_ascii_data wwidhdr$r_header_fields.wwidhdr$v_ascii_data #define wwidhdr$v_reserved1 wwidhdr$r_header_fields.wwidhdr$v_reserved1 #define wwidhdr$v_wwid_type wwidhdr$r_header_fields.wwidhdr$v_wwid_type #endif /* #if !defined(__VAXC) */ #endif /* #ifdef __NEW_STARLET */ /* */ /* World-Wide Identifier */ /* */ /* Includes the 4-byte header defined above and the body of the WWID. The */ /* largest WWID is currently the type that includes Vendor ID (8 bytes), */ /* Product ID (16 bytes), and Serial Number (up to 251 bytes). Rounding up */ /* to the nearest quadword boundary, this comes out to 276 bytes. */ /* */ #ifdef __NEW_STARLET #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 _wwid { #pragma __nomember_alignment WWIDHDR wwid$r_header; char wwid$b_data [276]; } WWID; #else /* __OLD_STARLET */ #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 _wwid { #pragma __nomember_alignment wwidhdr wwid$r_header; char wwid$b_data [276]; } wwid; #endif /* #ifdef __NEW_STARLET */ #define WWID$K_LENGTH 280 /* */ /* Serial Number WWID */ /* */ /* This is the WWID that gets put together from both standard and Page 80 */ /* inquiry data. The Product ID and Vendor ID come from standard inquiry data. */ /* The Serial Number comes from Vital Product Data Page 80. The Header is the */ /* standard WWID header defined above. */ /* */ #ifdef __NEW_STARLET #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 _sn_wwid { #pragma __nomember_alignment WWIDHDR sn_wwid$r_header; unsigned char sn_wwid$b_vendor_id [8]; unsigned char sn_wwid$b_product_id [16]; unsigned char sn_wwid$b_serial_no [252]; } SN_WWID; #else /* __OLD_STARLET */ #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 _sn_wwid { #pragma __nomember_alignment wwidhdr sn_wwid$r_header; unsigned char sn_wwid$b_vendor_id [8]; unsigned char sn_wwid$b_product_id [16]; unsigned char sn_wwid$b_serial_no [252]; } sn_wwid; #endif /* #ifdef __NEW_STARLET */ #define SN_WWID$K_LENGTH 280 /* */ /* The longest WWID is one that is made from the device's serial number, */ /* product ID, and vendor ID. */ /* 4 8 16 <= 252 */ /* +------+------------+-------------------+-----------------------------------+ */ /* |Header| Vendor | Product | Serial Number | */ /* +------+------------+-------------------+-----------------------------------+ */ /* */ /* Maximum WWID length comes out to 4+8+16+252 = 280 bytes. */ /* */ #define WWID$K_MAX_LENGTH 280 /* */ /* WWID Table Entry */ /* */ /* The WWID table is created during boot by EXEC_INIT and is used by both */ /* EXEC_INIT and, later on in the boot, STACONFIG. The table stores informa- */ /* tion about all devices that have been registered by the user at the console. */ /* */ #ifdef __NEW_STARLET #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 _wwident { #pragma __nomember_alignment int wwident$l_unit_no; int wwident$l_dnp; unsigned int wwident$l_wwidlen; __struct { WWIDHDR wwident$r_header; char wwident$b_fcwwid [112]; } wwident$r_wwid; } WWIDENT; #if !defined(__VAXC) #define wwident$r_header wwident$r_wwid.wwident$r_header #define wwident$b_fcwwid wwident$r_wwid.wwident$b_fcwwid #endif /* #if !defined(__VAXC) */ #else /* __OLD_STARLET */ #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 _wwident { #pragma __nomember_alignment int wwident$l_unit_no; int wwident$l_dnp; unsigned int wwident$l_wwidlen; __struct { wwidhdr wwident$r_header; char wwident$b_fcwwid [112]; } wwident$r_wwid; } wwident; #if !defined(__VAXC) #define wwident$r_header wwident$r_wwid.wwident$r_header #define wwident$b_fcwwid wwident$r_wwid.wwident$b_fcwwid #endif /* #if !defined(__VAXC) */ #endif /* #ifdef __NEW_STARLET */ #define WWIDENT$K_LENGTH 128 #define WWIDTBL$K_MAX_ENTRIES 1000 /* Max. entries in a WWID Table */ /* */ /* This structure points to a Fibre Channel adapter ID. This WWID differs */ /* from the other WWIDs in this file in that it is obtained directly from */ /* the adapter rather than the SCSI Device Identification page. Consequently, */ /* there is no header, vendor, and product information associated with */ /* this 64 bit identifier. The format of this 64 bit WWID is an IEEE 48 bit */ /* address with additional information as defined in the FC-PH. But we */ /* don't really care about the FC-PH format since all we want to do is display */ /* the 64 bits using the asci hex format of XXXX-XXXX-XXXX-XXXX, which is the */ /* widely accepted format used to display this information. */ /* */ #ifdef __NEW_STARLET #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 _fc_wwid_64b { #pragma __nomember_alignment unsigned char fc_wwidb_name [8]; } FC_WWID_64B; #else /* __OLD_STARLET */ #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 _fc_wwid_64b { #pragma __nomember_alignment unsigned char fc_wwidb_name [8]; } fc_wwid_64b; #endif /* #ifdef __NEW_STARLET */ #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 /* __WWIDDEF_LOADED */