/***************************************************************************/ /** **/ /** 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:54 by OpenVMS SDL V3.7 */ /* Source: 18-JUN-2005 15:16:57 $1$DGA8345:[LIB_H.SRC]DIDTDEF.SDL;1 */ /********************************************************************************************************************************/ /*** MODULE didtdef ***/ #ifndef __DIDTDEF_LOADED #define __DIDTDEF_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 #define DIDT$K_SPURIOUS_IRQ 15 #define DIDT$K_MAX_ENTRIES 256 #define DIDT$K_MIN_DEV_VEC 32 #define DIDT$K_MAX_DEV_VEC 223 /* Historically, the first quad in an SCB entry was a pointer to the entry */ /* point of IOC$INTDISP() in [SYS]IOCINDISP.MAR. The second quad consisted */ /* of a 32-bit pointer to a VEC struct in the low longword and the SCB */ /* offset in the high longword. In the Alpha, PAL code would jump to the */ /* entry point stored int the first quadword, IOC$INTDISP(), and that routine */ /* would unpackage the VEC structure to get the procedure descriptor for the */ /* ISR of the interrupts. */ /* */ /* For IA64, though we retain the historical names of these fields, the */ /* first quadword is vacant. The second quadword still has the VEC in the */ /* low longword and the SCB vector in the high longword. */ /* */ /* In IA64, the irq$$dispatcher() routine called by SWIS when there is a device */ /* interrupt will unpackage the VEC structure to find the function descriptor */ /* of the ISR for the interrupting device. It will then call the ISR through */ /* its function descriptor. */ /* */ /* */ #define DIDT$K_SIZE 16 #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __octaword #else #pragma __nomember_alignment #endif typedef struct _didt { #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 didt$q_isr; /* historical SCB name of this quad */ #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __quadword #else #pragma __nomember_alignment #endif __struct { #pragma __nomember_alignment int didt$l_crb_sqfl; /* Shr Intr queue FLINK */ int didt$l_crb_sqbl; /* Shr Intr queue BLINK */ } didt$r_qhdr; } didt$r_qw0; #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 didt$q_arg; /* historical SCB name of this quad */ __struct { int didt$l_vec; /* must be cast as (VEC*) in C */ int didt$l_scb_offset; /* SCB offset of this entry */ } didt$r_fields; } didt$r_qw1; } DIDT; #if !defined(__VAXC) #define didt$q_isr didt$r_qw0.didt$q_isr #define didt$l_crb_sqfl didt$r_qw0.didt$r_qhdr.didt$l_crb_sqfl #define didt$l_crb_sqbl didt$r_qw0.didt$r_qhdr.didt$l_crb_sqbl #define didt$q_arg didt$r_qw1.didt$q_arg #define didt$r_fields didt$r_qw1.didt$r_fields #define didt$l_vec didt$r_fields.didt$l_vec #define didt$l_scb_offset didt$r_fields.didt$l_scb_offset #endif /* #if !defined(__VAXC) */ /* */ /* */ /* These constants enumerate the Interrupt Delievery Technologies considered */ /* by the routines that handle interrupt configuration and dispatch. */ /* */ #define INTDEL$K_IOSAPIC 0 #define INTDEL$K_MSI 1 #define INTDEL$K_MSIX 2 #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 /* __DIDTDEF_LOADED */