/***************************************************************************/ /** **/ /** 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:33 by OpenVMS SDL V3.7 */ /* Source: 18-MAY-2022 12:05:25 $1$DGA8345:[LIB_H.SRC]NPOOL_DATA.SDL;1 */ /********************************************************************************************************************************/ /*** MODULE NPOOL_DATA ***/ #ifndef __NPOOL_DATA_LOADED #define __NPOOL_DATA_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 /*+ */ /* DEFINITION OF SYSTEM PRIMITIVES LOCAL NON-PAGED POOL DATA */ /*- */ #define IOC_C_INVALID_ADDRESS -8388608 /* 4G - 8M */ #define IOC_C_NUMLISTS 160 /* No. of lookaside lists for all system pools */ /* *** See warning above *** */ #define IOC_C_NPAGGRNMSK 63 /* Mask for rounding */ #define IOC_C_NPAGGRNBITS 6 /* Granularity = 2^6 */ #define IOC_C_MAXLISTPKT 10240 /* Max. lookaside list size */ #define IOC_C_PAGGRNMSK 15 /* Mask for rounding */ #define IOC_C_PAGGRNBITS 4 /* Granularity = 2^4 */ #define IOC_C_PAGMAXLISIZ 2560 /* Max. lookaside list size */ /* X86 only S2 NONPAGED POOL LOOKASIDE list related constants */ #define IOC_C_NUMLISTS_S2 40 /* No. of lookaside lists S2 nonpaged pool */ #define IOC_C_NPAGGRNMSK_S2 255 /* Mask for rounding granularity at 256 */ #define IOC_C_NPAGGRNBITS_S2 8 /* Granularity = 2^8 or 256 and is used for shifting */ #define IOC_C_MAXLISTPKT_S2 10240 /* Max. lookaside list siz */ #ifdef __cplusplus /* Define structure prototypes */ struct _npool_data; #endif /* #ifdef __cplusplus */ typedef struct _lsthds { unsigned int lsthds$l_filler0; /* Formerly IRPLIST */ unsigned int lsthds$l_varallocbytes; /* How many bytes allocated from variable list */ unsigned int lsthds$l_variablelist_unused; /* Historically important: What EXE$GL_NONPAGED points to */ void *lsthds$ps_variablelist; /* Pointer to next packet on variable list */ unsigned int lsthds$l_variablelist_high; /* For future use if we have 64-bit lists */ unsigned int lsthds$l_expansions; /* How many times this pool has been expanded */ unsigned int lsthds$l_filler2; /* Formerly SRPLIST */ unsigned int *lsthds$ar_listattempts; /* Ptr to array of lookaside list tries */ unsigned int *lsthds$ar_listfails; /* Ptr to array of lookaside list failures */ unsigned int *lsthds$ar_listdeallocs; /* Ptr to array of lookaside list deallocations */ unsigned int lsthds$l_rad; unsigned int lsthds$l_pooltype; struct _npool_data *lsthds$ps_npool_data; /* Pointer to the NPOOL data structure for this pool */ unsigned int lsthds$l_disable_pool_exp_msg; __int64 lsthds$q_listheads [161]; /*The actual lookaside lists. Must be 56 bytes from beginning. */ unsigned __int64 lsthds$q_filler4; /* Don't change offset to LISTCOUNTERS till major VMS version change */ unsigned __int64 lsthds$q_filler5; unsigned __int64 lsthds$q_listcounters [161]; } LSTHDS; #define LSTHDS$K_LENGTH 2648 #define LSTHDS$C_LENGTH 2648 #ifdef __INITIAL_POINTER_SIZE #pragma __required_pointer_size __save /* Save current pointer size */ #pragma __required_pointer_size __long /* Pointers are 64-bit */ typedef struct _lsthds * LSTHDS_PQ; /* Long pointer to a LSTHDS structure. */ typedef struct _lsthds ** LSTHDS_PPQ; /* Long pointer to a pointer to a LSTHDS structure. */ #pragma __required_pointer_size __restore /* Return to previous pointer size */ #else typedef unsigned __int64 LSTHDS_PQ; typedef unsigned __int64 LSTHDS_PPQ; #endif /* __INITIAL_POINTER_SIZE */ typedef struct _pool_map { #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 *pool_map$pq_segment_address; #else unsigned __int64 pool_map$pq_segment_address; #endif unsigned __int64 pool_map$q_segment_length; #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 *pool_map$pq_segment_end_address; #else unsigned __int64 pool_map$pq_segment_end_address; #endif unsigned int pool_map$l_rad; int pool_map$l_filler1; } POOL_MAP; #define POOL_MAP$K_LENGTH 32 #define NPOOL$M_NOT_NPP 0x1 #define NPOOL$M_POOL_SEPARATE 0x2 #define NPOOL$M_POOL_WITHIN_NPP 0x4 #define NPOOL$M_MINIMUM_MODE 0x8 #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 _npool_data { #pragma __nomember_alignment unsigned int npool$l_on_rad_dealloc; /* Count deallocs from same RAD as alloc */ unsigned int npool$l_total_dealloc; /* Count total deallocs to get % */ unsigned __int64 npool$q_per_pool_diag; /* Use for diagnostic info */ /* The following are only used in the NPP NPOOL structure for now. */ /* Some other time, we could have one for each pool and sequence tag each entry. */ #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 *npool$ps_ringbuf; /* Pointer to the ring buffer */ void *npool$ps_nextnph; /* Pointer to next element to write to in ring buffer */ unsigned int npool$l_ringbufcnt; /* How many entries in ring buffer? */ char npool_da$$b_fill_0_ [4]; #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __quadword #else #pragma __nomember_alignment #endif unsigned __int64 npool$q_ringbuflock; /* Lock access to the ringbuffer */ /* The filler forces mostly-read stuff beyond a 128-byte */ /* boundary and hopefully into a different cache block from the frequently-written list heads */ #pragma __nomember_alignment char filler6 [88]; /* After this point, we have read-mostly information. */ #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 _lsthds (*(*npool$ar_lsthds)); /*Pointer to the array of pool list heads */ #else unsigned __int64 npool$ar_lsthds; #endif unsigned int npool$l_max_lsthds; /* Number of Rads */ unsigned int npool$l_gran_mask; /*Granularity of the pool in bytes */ unsigned int npool$l_num_lookaside; /*How many lookaside lists in LSTHDS? */ #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 *npool$ps_variable_list; /* Pointer to the pool's variable list (compatibility) */ struct _pool_map *npool$ps_pool_map; unsigned int npool$l_pool_map_size; /*Number of bytes allcoated for POOL_MAP */ unsigned int npool$l_pool_map_segments; /*Number of segments in POOL_MAP actually used */ __union { __struct { /*This part used for non-paged pool's npool_data */ __union { #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 _npool_data *npool$ar_pool_data [2]; #else unsigned __int64 npool$ar_pool_data [2]; #endif /*Dimension should be MMG$K_POOLTYPE_MAXIMUM; */ __struct { /*This are mainly for SDA format. Most uses should index using POOL_TYPE. */ #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 *npool$ar_npp_pool_data; #else unsigned __int64 npool$ar_npp_pool_data; #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 *npool$ar_bap_pool_data; #else unsigned __int64 npool$ar_bap_pool_data; #endif } npool$r_sda_pool_data; } pool_data_overlay; } non_paged; __struct { /*This part used for new pool types beyond non-paged pool */ __union { unsigned int npool$l_pool_flags; __struct { unsigned npool$v_not_npp : 1; /* Note: If this NPOOL *does* represent non-paged pool, there is an */ /* address here, which will not have bit 0 set. Thus, this flag is */ /* valid in all cases */ unsigned npool$v_pool_separate : 1; unsigned npool$v_pool_within_npp : 1; unsigned npool$v_minimum_mode : 1; unsigned npool$v_fill_1_ : 4; } npool$r_pool_flag_bits; } npool$r_pool_flags_overlay; unsigned int npool$l_filler3; unsigned __int64 npool$q_filler4; } new_pools; } npool_overlay; char npool_da$$b_fill_2_ [4]; } NPOOL_DATA; #if !defined(__VAXC) #define npool$ar_pool_data npool_overlay.non_paged.pool_data_overlay.npool$ar_pool_data #define npool$ar_npp_pool_data npool_overlay.non_paged.pool_data_overlay.npool$r_sda_pool_data.npool$ar_npp_pool_data #define npool$ar_bap_pool_data npool_overlay.non_paged.pool_data_overlay.npool$r_sda_pool_data.npool$ar_bap_pool_data #define npool$l_pool_flags npool_overlay.new_pools.npool$r_pool_flags_overlay.npool$l_pool_flags #define npool$v_not_npp npool_overlay.new_pools.npool$r_pool_flags_overlay.npool$r_pool_flag_bits.npool$v_not_npp #define npool$v_pool_separate npool_overlay.new_pools.npool$r_pool_flags_overlay.npool$r_pool_flag_bits.npool$v_pool_separate #define npool$v_pool_within_npp npool_overlay.new_pools.npool$r_pool_flags_overlay.npool$r_pool_flag_bits.npool$v_pool_within_npp #define npool$v_minimum_mode npool_overlay.new_pools.npool$r_pool_flags_overlay.npool$r_pool_flag_bits.npool$v_minimum_mode #endif /* #if !defined(__VAXC) */ #define NPOOL$K_LENGTH 184 #define NPOOL$C_LENGTH 184 /* */ /* X86 only - S2 nonpaged support */ /* The LISTHEAD_S2 combines the forward link and the sequence number */ /* This pair is used for synchronization for allocation/deallocation */ /* for the look aside list. See the code that implements */ /* lookaside list for more information. */ /* */ /* listhead must be 16 byte aligned as per cmpxchg16b instructions */ #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 _listhead_s2 { #pragma __nomember_alignment unsigned __int64 listhead_s2$q_flink; unsigned __int64 listhead_s2$q_seq_num; } LISTHEAD_S2; #define LISTHEAD_S2$K_LENGTH 16 #define LISTHEAD_S2$C_LENGTH 16 /* */ /* Listhead data structure for S2 nonpaged pool */ /* Listhead gets its pool allocation when variable pool within */ /* IOC_C_MAXLISTPKT_S2 is deallocated. */ /* The LISTHEADS is a pointer to a list of IOC_C_NUMLISTS_S2 +1 */ /* lists with pool size incrementally starting at 256 */ /* Listhead starts index 1 - this aids with calculations. */ /* */ #ifdef __cplusplus /* Define structure prototypes */ struct _npool_data_s2; #endif /* #ifdef __cplusplus */ #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 _lsthds_s2 { #pragma __nomember_alignment unsigned int lsthds_s2$l_rad; /* rad number */ unsigned int lsthds_s2$l_pooltype; /* pool type from mmgdef */ unsigned int lsthds_s2$l_exp_count; /* Number of times pool is expanded */ unsigned int lsthds_s2$l_filler; /* Alignment filler */ unsigned __int64 lsthds_s2$q_varallocbytes; /* Number of bytes allocated from variable list */ #ifdef __INITIAL_POINTER_SIZE /* Defined whenever ptr size pragmas supported */ #pragma __required_pointer_size __long /* And set ptr size default to 64-bit pointers */ unsigned int *lsthds_s2$ar_listattempts; /* Ptr to array of lookaside list tries */ #else unsigned __int64 lsthds_s2$ar_listattempts; #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 */ unsigned int *lsthds_s2$ar_listfails; /* Ptr to array of lookaside list failures */ #else unsigned __int64 lsthds_s2$ar_listfails; #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 */ unsigned int *lsthds_s2$ar_listdeallocs; /* Ptr to array of lookaside list deallocs */ #else unsigned __int64 lsthds_s2$ar_listdeallocs; #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 *lsthds_s2$pq_varlistnxt; /* Pointer to the next packet on the variable list */ #else unsigned __int64 lsthds_s2$pq_varlistnxt; #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 _npool_data_s2 *lsthds_s2$pq_npool_data; #else unsigned __int64 lsthds_s2$pq_npool_data; #endif LISTHEAD_S2 lsthds_s2$r_listheads [41]; /* address/sequence number pair */ unsigned __int64 lsthds_s2$q_listcounters [41]; /* cnt of packets on the corresponding list */ unsigned __int64 lsthds_s2$q_filler2; /* octaword alignment filler */ unsigned __int64 lsthds_s2$q_filler3; /* octaword alignment filler */ unsigned __int64 lsthds_s2$q_filler4; /* filler cushion */ } LSTHDS_S2; #define LSTHDS_S2$K_LENGTH 1072 #define LSTHDS_S2$C_LENGTH 1072 #ifdef __INITIAL_POINTER_SIZE #pragma __required_pointer_size __save /* Save current pointer size */ #pragma __required_pointer_size 64 typedef struct _lsthds_s2 * LSTHDS_PQ_S2; typedef struct _lsthds_s2 ** LSTHDS_PPQ_S2; #pragma __required_pointer_size __restore /* Return to previous pointer size */ #else typedef unsigned __int64 LSTHDS_PQ_S2; typedef unsigned __int64 LSTHDS_PPQ_S2; #endif /* */ /* X86 only S2 nonpaged pool for NPOOL data structure */ /* NPOOL data structures has both history ring buffer and RAD related data */ /* */ #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 _npool_data_s2 { #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 *npool_s2$pq_rb_start; /* Pointer to the ring buffer */ #else unsigned __int64 npool_s2$pq_rb_start; #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 *npool_s2$pq_nextnph; /* Pointer to next element in the ringbuffer */ #else unsigned __int64 npool_s2$pq_nextnph; #endif unsigned int npool_s2$l_filler; unsigned int npool_s2$l_total_dealloc; /* count total deallocs to get % */ unsigned int npool_s2$l_filler1; /* filler for aligment */ unsigned int npool_s2$l_ringbufcnt; /* How many entries in ring buffer */ unsigned __int64 npool_s2$q_ringbuflock; /* Lock access to the ringbuffer */ unsigned __int64 npool_s2$q_on_rad_dealloc; /* Count deallocs from same RAD as alloc */ unsigned __int64 npool_s2$q_per_pool_diag; /* Use for diagnostic info */ /* after this point, we have mostly read only data */ #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 *npool_s2$pq_variable_list; /* variable list */ #else unsigned __int64 npool_s2$pq_variable_list; #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 _pool_map *npool_s2$pq_pool_map; /* pointer to pool's variable list */ #else unsigned __int64 npool_s2$pq_pool_map; #endif unsigned __int64 npool_s2$q_filler2; /* filler for aligment */ /* Change fixed array once rads are implemented */ #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 _lsthds_s2 (*(*npool_s2$ar_lsthds)); /* Rad usage and needed for sda */ #else unsigned __int64 npool_s2$ar_lsthds; #endif unsigned __int64 npool_s2$q_max_lsthds; /* Number of Rads. */ unsigned int npool_s2$l_num_lookaside; /* Number in lookaside list == IOC_C_NUMLISTS_S2 */ unsigned int npool_s2$l_gran_mask; /* granularity mask == IOC_C_NPAGGRNMSK_S2 */ unsigned int npool_s2$l_pool_map_size; /* number of bytes allocated for POOL_MAP for SDA */ unsigned int npool_s2$l_pool_map_segments; /* number of segments in POOL_MAP actually used for SDA */ #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 _npool_data_s2 *npool_s2$pq_npool_data; /* required for SDA */ #else unsigned __int64 npool_s2$pq_npool_data; #endif unsigned __int64 npool_s2$q_filler3; /* octaword alignment filler */ } NPOOL_DATA_S2; #define NPOOL_DATA_S2$C_LENGTH 128 #define NPOOL_DATA_S2$K_LENGTH 128 #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 /* __NPOOL_DATA_LOADED */