/***************************************************************************/ /** **/ /** HPE CONFIDENTIAL. This software is confidential proprietary software **/ /** licensed by Hewlett-Packard Enterprise Development, LP, and is not **/ /** authorized to be used, duplicated OR disclosed to anyone without the **/ /** prior written permission of HPE. **/ /** © 2023 Copyright Hewlett-Packard Enterprise Development, LP **/ /** **/ /** VMS SOFTWARE, INC. CONFIDENTIAL. This software is confidential **/ /** proprietary software licensed by VMS Software, Inc., and is not **/ /** authorized to be used, duplicated or disclosed to anyone without **/ /** the prior written permission of VMS Software, Inc. **/ /** © 2023 Copyright VMS Software, Inc. **/ /** **/ /***************************************************************************/ /********************************************************************************************************************************/ /* Created: 9-Nov-2023 12:06:39 by OpenVMS SDL V3.7 */ /* Source: 08-JUL-2022 23:59:30 $1$DGA8345:[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 */ #include /* Define the IOBD type; IRP contains an embedded IOBD */ #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; /* X-18a 64-bit process virtual addr of PTE */ #else unsigned __int64 irpe$pq_va_pte; #endif #pragma __nomember_alignment __union { /* X-18b */ #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 _bufio *irpe$pq_bufio_pkt; /* */ #else unsigned __int64 irpe$pq_bufio_pkt; #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 */ void *irpe$pq_void; /* Untyped 64b pointer */ #else unsigned __int64 irpe$pq_void; #endif #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 void *irpe$ps_void; /* Untyped 32b pointer */ 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 */ char irpe$b_fill_8_ [4]; #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 */ /* X-17, X-18c */ IOBD irpe$r_iobd; /* Embedded I/O Buffer Descriptor (IOBD) */ #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 _ext *irpe$pq_extent; /* Pointer to 1st buffer extent to reference */ #else unsigned __int64 irpe$pq_extent; #endif #pragma __nomember_alignment #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 _ext *irpe$pq_orig_extent; /* Original EXTENT, for restoration after segmented I/O */ #else unsigned __int64 irpe$pq_orig_extent; #endif unsigned int irpe$l_extent_boff; /* Byte offset into 1st buffer extent */ unsigned int irpe$l_orig_extent_boff; /* Original EXTENT_BOFF, for restoration after segmented I/O */ } 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$pq_bufio_pkt irpe$r_svapte_overlay.irpe$pq_bufio_pkt #define irpe$pq_void irpe$r_svapte_overlay.irpe$pq_void #define irpe$ps_void irpe$r_svapte_overlay.irpe$ps_void #define irpe$ps_bufio_pkt irpe$r_svapte_overlay.irpe$ps_bufio_pkt #endif /* #if !defined(__VAXC) */ #define IRPE$K_LENGTH 504 /* LENGTH OF IRPE */ #define IRPE$C_LENGTH 504 /* LENGTH OF IRPE */ #define IRPE$S_IRPEDEF 504 /* 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 */