/***************************************************************************/ /** **/ /** 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:41 by OpenVMS SDL V3.7 */ /* Source: 31-MAY-2022 08:14:26 $1$DGA8345:[LIB_H.SRC]FREDDEF.SDL;1 */ /********************************************************************************************************************************/ /*** MODULE $FREDDEF ***/ #ifndef __FREDDEF_LOADED #define __FREDDEF_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 FRED$M_ASTEN 0xF #define FRED$M_ASTSR 0xF0 #define FRED$M_ASTEN_KEN 0x1 #define FRED$M_ASTEN_EEN 0x2 #define FRED$M_ASTEN_SEN 0x4 #define FRED$M_ASTEN_UEN 0x8 #define FRED$M_ASTSR_KPD 0x10 #define FRED$M_ASTSR_EPD 0x20 #define FRED$M_ASTSR_SPD 0x40 #define FRED$M_ASTSR_UPD 0x80 #define FRED$C_HWPCBLEN 216 /* Length of HWPCB */ #define FRED$K_HWPCBLEN 216 /* Length of HWPCB */ /* */ #define FRED$M_SW_FEN 0x1 #define FRED$M_BORROWED_QUANTUM 0x2 #define FRED$M_PREEMPT_AVOIDED 0x4 #define FRED$M_AST_PENDING 0x80000000 #define FRED$C_KTB_KT_ID 240 /* integer offset to this field */ #define FRED$C_KTB 240 /* integer offset to this field */ #define FRED$C_KT_ID 248 /* integer offset to this field */ #ifdef __cplusplus /* Define structure prototypes */ struct _ktb; #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 _fred { /* */ /* Hardware Privileged Context Block (HWPCB) - This structure must be aligned to */ /* a 128 byte boundary. Natural alignment prevents the structure from crossing a */ /* page boundary. */ /* */ /* NOTE WELL: There are bit symbols defined here for accessing the saved ASTEN, */ /* ASTSR, FEN and DATFX/AC values in the HWPCB. These symbols are NOT to be used when */ /* interfacing to the ASTEN, ASTSR, FEN or DATFX/AC internal processor registers directly. */ /* See the specific internal register definitions for bitmasks and constants */ /* to be used when interfacing to the IPRs directly. */ /* */ #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 */ void *fred$q_ksp; /* Kernel stack pointer */ #else unsigned __int64 fred$q_ksp; #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 *fred$q_esp; /* Executive stack pointer */ #else unsigned __int64 fred$q_esp; #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 *fred$q_ssp; /* Supervisor stack pointer */ #else unsigned __int64 fred$q_ssp; #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 *fred$q_usp; /* User stack pointer */ #else unsigned __int64 fred$q_usp; #endif unsigned __int64 fred$q_ptbr [4]; /* Page table base for each mode */ unsigned __int64 fred$q_asn; /* ASN (to be combined with mode for PCID) */ __union { unsigned __int64 fred$q_astsr_asten; /* ASTSR / ASTEN quadword */ __struct { unsigned fred$v_asten : 4; /* AST Enable Register */ unsigned fred$v_astsr : 4; /* AST Pending Summary Register */ } fred$r_ast_bits0; __struct { unsigned fred$v_asten_ken : 1; /* Kernel AST Enable = 1 */ unsigned fred$v_asten_een : 1; /* Executive AST Enable = 1 */ unsigned fred$v_asten_sen : 1; /* Supervisor AST Enable = 1 */ unsigned fred$v_asten_uen : 1; /* User AST Enable = 1 */ unsigned fred$v_astsr_kpd : 1; /* Kernel AST Pending = 1 */ unsigned fred$v_astsr_epd : 1; /* Executive AST Pending = 1 */ unsigned fred$v_astsr_spd : 1; /* Supervisor AST Pending = 1 */ unsigned fred$v_astsr_upd : 1; /* User AST Pending = 1 */ } fred$r_ast_bits1; } fred$r_ast_overlay; unsigned __int64 fred$q_perf_ctrl; /* Perfomance monitoring control */ unsigned __int64 fred$q_cc; /* Cycle Counter */ unsigned __int64 fred$q_unq; /* Thread unique value (X86_64 FSBASE, IA64 R13) */ #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 *fred$pq_alphareg [4]; /* Pointers to emulated Alpha registers for each mode */ #else unsigned __int64 fred$pq_alphareg [4]; #endif unsigned char fred$b_pmod; /* Previous mode */ unsigned char fred$b_was_scheduled; /* Process was scheduled at least once */ char fred$b_reserved_1 [6]; unsigned int fred$l_interrupt_depth; /* Intterrupt depth */ int fred$l_cur_frame_mode; /* Mode of currently active frame */ #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 *fred$pq_cur_frame; /* Currently active frame */ #else unsigned __int64 fred$pq_cur_frame; #endif unsigned __int64 fred$q_kstack_top; unsigned __int64 fred$q_kstack_bottom; __int64 fred$q_pal_rsvd [5]; /* Reserved for PAL Scratch */ /* End of Hardware Privileged Context Block (HWPCB). */ /* */ /* */ /* XSAVE area for X86 processor context */ /* */ #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 *fred$pq_xsave_area; /* Pointer to XSAVE area */ #else unsigned __int64 fred$pq_xsave_area; #endif /* */ /* Note: The Alpha architecture defines that the FEN bit in HWPCB cannot */ /* be read, so a separate software FEN bit must be kept. For performance */ /* reasons, we make this bit the low-bit. */ /* */ __union { unsigned int fred$l_flags; /* Flags longword */ __struct { unsigned fred$v_sw_fen : 1; /* Software FEN bit */ unsigned fred$v_borrowed_quantum : 1; /* The next quantum was borrowed */ unsigned fred$v_preempt_avoided : 1; /* Prio raised to avoid preempt */ unsigned fred$v_fill_flags2 : 28; unsigned fred$v_ast_pending : 1; /* AST pending optimization */ } fred$r_flags_bits; } fred$r_flags_overlay; unsigned int fred$l_fill_1; /* Pad to correctly align next */ /* quadword field and overlays */ /* PHD$L_EXTRACPU, so don't */ /* use it for anything. */ unsigned __int64 fred$q_asnseq; /* Current ASN/RID Sequence Number */ #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 _ktb *fred$q_ktb; /* kernel thread block address */ #else unsigned __int64 fred$q_ktb; #endif unsigned __int64 fred$q_kt_id; /* kernel thread id */ char fred$b_reserved [3840]; /* unused, pad to 4096 bytes */ } FRED; #if !defined(__VAXC) #define fred$q_astsr_asten fred$r_ast_overlay.fred$q_astsr_asten #define fred$v_asten fred$r_ast_overlay.fred$r_ast_bits0.fred$v_asten #define fred$v_astsr fred$r_ast_overlay.fred$r_ast_bits0.fred$v_astsr #define fred$v_asten_ken fred$r_ast_overlay.fred$r_ast_bits1.fred$v_asten_ken #define fred$v_asten_een fred$r_ast_overlay.fred$r_ast_bits1.fred$v_asten_een #define fred$v_asten_sen fred$r_ast_overlay.fred$r_ast_bits1.fred$v_asten_sen #define fred$v_asten_uen fred$r_ast_overlay.fred$r_ast_bits1.fred$v_asten_uen #define fred$v_astsr_kpd fred$r_ast_overlay.fred$r_ast_bits1.fred$v_astsr_kpd #define fred$v_astsr_epd fred$r_ast_overlay.fred$r_ast_bits1.fred$v_astsr_epd #define fred$v_astsr_spd fred$r_ast_overlay.fred$r_ast_bits1.fred$v_astsr_spd #define fred$v_astsr_upd fred$r_ast_overlay.fred$r_ast_bits1.fred$v_astsr_upd #define fred$l_flags fred$r_flags_overlay.fred$l_flags #define fred$v_sw_fen fred$r_flags_overlay.fred$r_flags_bits.fred$v_sw_fen #define fred$v_borrowed_quantum fred$r_flags_overlay.fred$r_flags_bits.fred$v_borrowed_quantum #define fred$v_preempt_avoided fred$r_flags_overlay.fred$r_flags_bits.fred$v_preempt_avoided #define fred$v_ast_pending fred$r_flags_overlay.fred$r_flags_bits.fred$v_ast_pending #endif /* #if !defined(__VAXC) */ #define FRED$C_LENGTH 4096 /* Length of Fred block */ #define FRED$K_LENGTH 4096 /* Length of Fred block */ #define FRED$S_FREDDEF 4096 /* Old size name - synonym */ #define FRED$K_SHIFT 12 /* Shift value for FRED size */ #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 /* __FREDDEF_LOADED */