/**/ /***************************************************************************/ /** **/ /** © 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:18 by OpenVMS SDL EV3-3 */ /* Source: 14-JAN-1998 15:50:58 $1$DGA7274:[LIB_H.SRC]IRPEDEF.SDL;1 */ /********************************************************************************************************************************/ /*** MODULE $IRPEDEF ***/ #ifndef __IRPEDEF_LOADED #define __IRPEDEF_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 /*+ */ /* IRPE - I/O REQUEST PACKET EXTENSION */ /* */ /* I/O REQUEST PACKET EXTENSIONS ARE USED TO HOLD ADDITIONAL INFORMATION */ /* ABOUT I/O REQUESTS FOR DEVICES THAT REQUIRE MORE CONTEXT THAN CAN FIT INTO */ /* THE STANDARD IRP. IRPE'S ARE BUILT AND LINKED ONTO IRP'S BY DEVICE */ /* DRIVER FDT ROUTINES. ANY FIELDS THAT ARE NOT DEFINED IN THIS STRUCTURE */ /* MAY BE USED TO HOLD DRIVER DEPENDENT DATA. */ /* */ /* THE CURRENTLY DEFINED FIELDS IN THE IRPE WERE POSITIONED SO THAT THE */ /* PACKET COULD BE USED AS A FORK BLOCK. THIS SHOULD BE KEPT IN MIND IF */ /* AND WHEN NEW FIELDS ARE DEFINED. */ /* */ /* NOTE: Most of the fields of the IRPE must be at the same offsets as their */ /* corresponding fields in the IRP. The equivalency of these offsets is */ /* verified by ASSUME statements in the [LIB]VFY_IRP_A_LIKES.MAR module. */ /* These ASSUMEs may need to be altered as well whenever an IRPE or IRP field */ /* is removed or altered. */ /*- */ #include /* Define the DIOBM type; IRPE contains an embedded DIOBM type */ #define IRPE$M_FUNC 0x2 #define IRPE$M_EXTEND 0x800 #define IRPE$M_QSVD 0x8000 #define IRPE$M_QCOMPLEX 0x10000 #define IRPE$M_NORETRY 0x20000 #define IRPE$M_QBARRIER 0x40000 #ifdef __cplusplus /* Define structure prototypes */ struct _bufio; #endif /* #ifdef __cplusplus */ #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 _irpe { #pragma __nomember_alignment int irpe$l_fill_1; /* SPARE LONGWORD */ int irpe$l_fill_2; /* SPARE LONGWORD */ unsigned short int irpe$w_size; /* SIZE OF IRPE IN BYTES */ unsigned char irpe$b_type; /* STRUCTURE TYPE FOR IRPE */ unsigned char irpe$b_rmod; /* RMOD BYTE */ int irpe$l_fill_4; /* Explicit filler for quad alignment */ #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __quadword #else #pragma __nomember_alignment #endif __union { #pragma __nomember_alignment __int64 irpe$q_driver_p0; /* Available for driver-specific use */ __struct { unsigned int irpe$l_driver_p0; /* (low-order 32-bits) */ unsigned int irpe$l_driver_p1; /* (high-order 32-bits) */ } irpe$r_fill_1_; } irpe$r_fill_0_; #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __quadword #else #pragma __nomember_alignment #endif __union { #pragma __nomember_alignment __int64 irpe$q_driver_p2; /* Available for driver-specific use */ __struct { unsigned int irpe$l_driver_p2; /* (low-order 32-bits) */ unsigned int irpe$l_driver_p3; /* (high-order 32-bits) */ } irpe$r_fill_3_; } irpe$r_fill_2_; int irpe$l_fill_5 [12]; /* Filler to match IRP */ #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __quadword #else #pragma __nomember_alignment #endif __union { #pragma __nomember_alignment unsigned __int64 irpe$q_status; __struct { __union { unsigned int irpe$l_sts; /* Status bits */ __struct { unsigned irpe$v_fill_7 : 1; /* Skip over 1 bit */ unsigned irpe$v_func : 1; /* 1=>read function, 0=>write function */ unsigned irpe$v_fill_7a : 9; /* SKIP OVER 9 BITS */ unsigned irpe$v_extend : 1; /* ANOTHER IRPE IS LINKED TO THIS ONE */ unsigned irpe$v_fill_6_ : 4; } irpe$r_sts_bits; } irpe$r_sts_overlay; __union { /* Flesh out STS2 to include QIOserver bits */ unsigned int irpe$l_sts2; __struct { /* The bit field structure... */ unsigned irpe$v_fill_8 : 15; /* Skip over 15 bits */ unsigned irpe$v_qsvd : 1; /* Set if QIOserver function */ unsigned irpe$v_qcomplex : 1; /* Set if QIOserver complex function */ unsigned irpe$v_noretry : 1; /* Do not retry this operation if QIOserver path fails */ unsigned irpe$v_qbarrier : 1; /* This is a QIOserver barrier operation */ unsigned irpe$v_fill_7_ : 5; } irpe$r_sts2_bits; } irpe$r_sts2_overlay; } irpe$r_fill_5_; } irpe$r_fill_4_; #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __quadword #else #pragma __nomember_alignment #endif #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ struct _pte *irpe$pq_va_pte; /* 64-bit process virtual addr of PTE */ #else unsigned __int64 irpe$pq_va_pte; #endif #pragma __nomember_alignment __union { #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __short /* And set ptr size default to 32-bit pointers */ #endif struct _pte *irpe$l_svapte; /* 32-bit S0/S1 address of first PTE */ struct _bufio *irpe$ps_bufio_pkt; /* Pointer to buffered I/O packet */ } irpe$r_svapte_overlay; unsigned int irpe$l_bcnt; /* Byte count for locked buffer */ unsigned int irpe$l_boff; /* Byte offset in page for locked buffer */ unsigned int irpe$l_oboff; /* Original BOFF, for segmented DIO */ struct _irpe *irpe$l_extend; /* ADDRESS OF NEXT IRPE */ int irpe$l_fill_6 [1]; /* Filler to match IRP */ #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __quadword #else #pragma __nomember_alignment #endif DIOBM irpe$r_diobm; /* Embedded DIOBM to handle cross-process 32-bit PTE access */ } IRPE; #if !defined(__VAXC) #define irpe$q_driver_p0 irpe$r_fill_0_.irpe$q_driver_p0 #define irpe$l_driver_p0 irpe$r_fill_0_.irpe$r_fill_1_.irpe$l_driver_p0 #define irpe$l_driver_p1 irpe$r_fill_0_.irpe$r_fill_1_.irpe$l_driver_p1 #define irpe$q_driver_p2 irpe$r_fill_2_.irpe$q_driver_p2 #define irpe$l_driver_p2 irpe$r_fill_2_.irpe$r_fill_3_.irpe$l_driver_p2 #define irpe$l_driver_p3 irpe$r_fill_2_.irpe$r_fill_3_.irpe$l_driver_p3 #define irpe$q_status irpe$r_fill_4_.irpe$q_status #define irpe$l_sts irpe$r_fill_4_.irpe$r_fill_5_.irpe$r_sts_overlay.irpe$l_sts #define irpe$v_func irpe$r_fill_4_.irpe$r_fill_5_.irpe$r_sts_overlay.irpe$r_sts_bits.irpe$v_func #define irpe$v_extend irpe$r_fill_4_.irpe$r_fill_5_.irpe$r_sts_overlay.irpe$r_sts_bits.irpe$v_extend #define irpe$l_sts2 irpe$r_fill_4_.irpe$r_fill_5_.irpe$r_sts2_overlay.irpe$l_sts2 #define irpe$v_qsvd irpe$r_fill_4_.irpe$r_fill_5_.irpe$r_sts2_overlay.irpe$r_sts2_bits.irpe$v_qsvd #define irpe$v_qcomplex irpe$r_fill_4_.irpe$r_fill_5_.irpe$r_sts2_overlay.irpe$r_sts2_bits.irpe$v_qcomplex #define irpe$v_noretry irpe$r_fill_4_.irpe$r_fill_5_.irpe$r_sts2_overlay.irpe$r_sts2_bits.irpe$v_noretry #define irpe$v_qbarrier irpe$r_fill_4_.irpe$r_fill_5_.irpe$r_sts2_overlay.irpe$r_sts2_bits.irpe$v_qbarrier #define irpe$l_svapte irpe$r_svapte_overlay.irpe$l_svapte #define irpe$ps_bufio_pkt irpe$r_svapte_overlay.irpe$ps_bufio_pkt #endif /* #if !defined(__VAXC) */ #define IRPE$K_LENGTH 208 /* LENGTH OF IRPE */ #define IRPE$C_LENGTH 208 /* LENGTH OF IRPE */ #define IRPE$S_IRPEDEF 208 /* Old size name, synonym for IRPE$S_IRPE */ #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 /* __IRPEDEF_LOADED */