/**/ /***************************************************************************/ /** **/ /** © 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:52 by OpenVMS SDL EV3-3 */ /* Source: 12-NOV-2007 11:50:03 $1$DGA7274:[LIB_H.SRC]MMGDEF.SDL;1 */ /********************************************************************************************************************************/ /*** MODULE $MMGDEF ***/ #ifndef __MMGDEF_LOADED #define __MMGDEF_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 MMG$M_NO_MPL_FLUSH 4 /* Don't flush MPL on SVAPTE requests */ #define MMG$V_NO_MPL_FLUSH 2 /* (MMG$GL_FREWFLGS) */ #define MMG$M_NOWAIT 2 /* Don't allow FREWSLE to resource wait */ #define MMG$V_NOWAIT 1 /* on modified list back pressure */ #define MMG$M_NOLASTUPD 1 /* Don't allow FREWSLE to update WSLAST */ #define MMG$V_NOLASTUPD 0 /* (prevent WSLAST/WSSIZE interactions) */ #define MMG$M_TICK_ENABLE 1 /* TICKING enable bit */ #define MMG$V_TICK_ENABLE 0 /* (MMG$GB_CTLFLAGS) */ #define MMG$M_TROLL_ENABLE 2 /* TROLLING enable bit */ #define MMG$V_TROLL_ENABLE 1 /* (MMG$GB_CTLFLAGS) */ #define MMG$M_BOOTIME_MEMTEST 4 /* Test all memory at boot time flag */ #define MMG$V_BOOTIME_MEMTEST 2 /* (MMG$GB_CTLFLAGS) */ #define MMG$M_NO_MB 8 /* Set NO_MB bit in PTE */ #define MMG$V_NO_MB 3 /* (MMG$GB_CTLFLAGS) */ #define MMG$M_GH_LIMITED 16 /* If set, GH regions cannot span page */ #define MMG$V_GH_LIMITED 4 /* table pages (MMG$GB_CTLFLAGS) */ #define MMG$M_NO_PTCG 32 /* If set, IA64 TBI invalidates will not use */ #define MMG$V_NO_PTCG 5 /* ptc.g instructions (MMG$GB_CTLFLAGS) */ #define MMG$M_TICK_ACT 1 /* TICKING activate bit */ #define MMG$V_TICK_ACT 0 /* (MMG$GL_RECLAIM_FLAGS) */ /* Define the limit beyond which an MPL flush must not be delayed. This MUST */ /* be less than MPW$C_MAXREQCNT (32), which is defined in WRTMFYPAG. */ #define MMG$C_MPL_FLUSH_LIM 16 /* Define the maximum size of an object name string for a global section: */ /* []$ */ /* 1 + 5 + 1 + 23 + 1 + 43 bytes = 74; round to quad */ #define MMG$C_SECOBJNAM_SIZE 80 /* -F ,B,0 /* ending address of negated structure */ /* (needed to obtain length definition) */ #define MMG$K_LENGTH -40 /* size of scratch area */ #define MMG$C_LENGTH -40 /* size of scratch area */ #define MMG$M_DELGBLDON 0x1 #define MMG$M_RWAST_AT_IPL0_OCCURRED_PP 0x2 #define MMG$M_CHGPAGFIL 0x1 #define MMG$M_NOWAIT_IPL0 0x2 #define MMG$M_NO_OVERMAP 0x4 #define MMG$M_PARTIAL_FIRST 0x8 #define MMG$M_PARTIAL_LAST 0x10 #define MMG$M_NO_IRP_DELETE 0x20 #define MMG$M_DELPAG_NOP 0x40 #define MMG$M_CLUSTER_DEL 0x80 #define MMG$M_WINDOW 0x100 #define MMG$M_SHARED_L3PTS 0x200 #define MMG$M_RWAST_AT_IPL0_ALLOWED 0x400 #define MMG$M_RWAST_AT_IPL0_OCCURRED 0x800 #define MMG$S_MMGDEF 41 /* Old size name - synonym */ typedef struct _mmg { /* WARNING: aggregate has origin of -40 */ /* WARNING: aggregate element "mmg$l_pgflcnt" ignored */ /* WARNING: aggregate element "mmg$r_bufobj_overlay" ignored */ /* WARNING: aggregate element "mmg$l_vfyflags" ignored */ /* WARNING: aggregate element "" ignored */ /* WARNING: aggregate element "mmg$l_svstartva" ignored */ /* WARNING: aggregate element "mmg$l_pagesubr" ignored */ /* WARNING: aggregate element "mmg$l_savretadr" ignored */ /* WARNING: aggregate element "mmg$l_calledipl" ignored */ /* WARNING: aggregate element "mmg$r_per_page_overlay" ignored */ /* WARNING: aggregate element "mmg$l_access_mode" ignored */ /* WARNING: aggregate element "mmg$r_mmg_flags_overlay" ignored */ char mmgdef$$_fill_2; } MMG; #if !defined(__VAXC) #define mmg$l_pagcnt mmg$r_bufobj_overlay.mmg$l_pagcnt #define mmg$l_efblk mmg$r_bufobj_overlay.mmg$l_efblk #define mmg$l_per_page mmg$r_per_page_overlay.mmg$l_per_page #define mmg$v_delgbldon mmg$r_per_page_overlay.mmg$r_per_page_bits.mmg$v_delgbldon #define mmg$v_rwast_at_ipl0_occurred_pp mmg$r_per_page_overlay.mmg$r_per_page_bits.mmg$v_rwast_at_ipl0_occurred_pp #define mmg$l_mmg_flags mmg$r_mmg_flags_overlay.mmg$l_mmg_flags #define mmg$v_chgpagfil mmg$r_mmg_flags_overlay.mmg$r_mmg_flags_bits.mmg$v_chgpagfil #define mmg$v_nowait_ipl0 mmg$r_mmg_flags_overlay.mmg$r_mmg_flags_bits.mmg$v_nowait_ipl0 #define mmg$v_no_overmap mmg$r_mmg_flags_overlay.mmg$r_mmg_flags_bits.mmg$v_no_overmap #define mmg$v_partial_first mmg$r_mmg_flags_overlay.mmg$r_mmg_flags_bits.mmg$v_partial_first #define mmg$v_partial_last mmg$r_mmg_flags_overlay.mmg$r_mmg_flags_bits.mmg$v_partial_last #define mmg$v_no_irp_delete mmg$r_mmg_flags_overlay.mmg$r_mmg_flags_bits.mmg$v_no_irp_delete #define mmg$v_delpag_nop mmg$r_mmg_flags_overlay.mmg$r_mmg_flags_bits.mmg$v_delpag_nop #define mmg$v_cluster_del mmg$r_mmg_flags_overlay.mmg$r_mmg_flags_bits.mmg$v_cluster_del #define mmg$v_window mmg$r_mmg_flags_overlay.mmg$r_mmg_flags_bits.mmg$v_window #define mmg$v_shared_l3pts mmg$r_mmg_flags_overlay.mmg$r_mmg_flags_bits.mmg$v_shared_l3pts #define mmg$v_rwast_at_ipl0_allowed mmg$r_mmg_flags_overlay.mmg$r_mmg_flags_bits.mmg$v_rwast_at_ipl0_allowed #define mmg$v_rwast_at_ipl0_occurred mmg$r_mmg_flags_overlay.mmg$r_mmg_flags_bits.mmg$v_rwast_at_ipl0_occurred #endif /* #if !defined(__VAXC) */ #define MMG$M_RES_MEM_ZERO 0x1 #define MMG$M_RES_MEM_GROUP 0x2 #define MMG$M_RES_MEM_PTS 0x4 #define MMG$M_RES_MEM_GBLSEC 0x8 typedef struct _res_mem { __union { unsigned int mmg$l_res_mem_flags; /* Reserved memory flags */ __struct { unsigned mmg$v_res_mem_zero : 1; /* Pages need to be zeroed */ unsigned mmg$v_res_mem_group : 1; /* Group number match required */ unsigned mmg$v_res_mem_pts : 1; /* Reserved memory is for page tables */ unsigned mmg$v_res_mem_gblsec : 1; /* Reserved memory is for (group or system) global section. */ unsigned mmg$v_fill_2_ : 4; } mmg$r_res_mem_bits; } mmg$r_res_mem_overlay; } RES_MEM; #if !defined(__VAXC) #define mmg$l_res_mem_flags mmg$r_res_mem_overlay.mmg$l_res_mem_flags #define mmg$v_res_mem_zero mmg$r_res_mem_overlay.mmg$r_res_mem_bits.mmg$v_res_mem_zero #define mmg$v_res_mem_group mmg$r_res_mem_overlay.mmg$r_res_mem_bits.mmg$v_res_mem_group #define mmg$v_res_mem_pts mmg$r_res_mem_overlay.mmg$r_res_mem_bits.mmg$v_res_mem_pts #define mmg$v_res_mem_gblsec mmg$r_res_mem_overlay.mmg$r_res_mem_bits.mmg$v_res_mem_gblsec #endif /* #if !defined(__VAXC) */ #define MMG$M_COLOR_MUST 0x1 #define MMG$M_COLOR_RANDOM 0x2 #define MMG$M_ZEROED 0x4 #define MMG$M_CONTIG 0x8 #define MMG$K_NO_VPN -1 /* No VPN specified (-1) */ #define MMG$K_NO_RAD -1 /* No RAD specified (-1) */ #define MMG$K_BASE_RAD -2 /* Use the OS base RAD (-2) */ typedef struct _allocpfn_flags { __union { unsigned int mmg$l_allocpfn_flags; /* Page flags */ __struct { unsigned mmg$v_color_must : 1; /* Must return color specified */ unsigned mmg$v_color_random : 1; /* Return a random color */ unsigned mmg$v_zeroed : 1; /* Allocate zeroed page */ unsigned mmg$v_contig : 1; /* Allocate contiguous PFNs for mapping */ unsigned mmg$v_fill_3_ : 4; } mmg$r_allocpfn_flag_bits; } mmg$r_allocpfn_flags_overlay; } ALLOCPFN_FLAGS; #if !defined(__VAXC) #define mmg$l_allocpfn_flags mmg$r_allocpfn_flags_overlay.mmg$l_allocpfn_flags #define mmg$v_color_must mmg$r_allocpfn_flags_overlay.mmg$r_allocpfn_flag_bits.mmg$v_color_must #define mmg$v_color_random mmg$r_allocpfn_flags_overlay.mmg$r_allocpfn_flag_bits.mmg$v_color_random #define mmg$v_zeroed mmg$r_allocpfn_flags_overlay.mmg$r_allocpfn_flag_bits.mmg$v_zeroed #define mmg$v_contig mmg$r_allocpfn_flags_overlay.mmg$r_allocpfn_flag_bits.mmg$v_contig #endif /* #if !defined(__VAXC) */ /* */ /* values for "which list" constants returned by PTE/PFN checking routines */ /* */ #define MMG$C_PRIVATE 1 #define MMG$C_SHARED 2 #define MMG$C_IO 3 #if defined(__DoNotDefineThisQQ_) /* For C we will use the ENUM below rather than these defines*/ #define MMG$K_POOLTYPE_NPP 0 #define MMG$K_POOLTYPE_BAP 1 #define MMG$K_POOLTYPE_MAXIMUM 2 #endif /*__DoNotDefineThisQQ_*/ typedef enum { MMG$K_POOLTYPE_NPP=0,MMG$K_POOLTYPE_BAP, MMG$K_POOLTYPE_MAXIMUM } MMG$POOL_TYPE; /* */ /* The following constants are only used by SDA: */ /* */ /* MMG$K_POOLTYPE_PAGED is the same as MMG$K_POOLTYPE_MAXIMUM */ /* MMG$K_POOLTYPE_P0 is MMG$K_POOLTYPE_PAGED + 1 */ /* MMG$K_POOLTYPE_P1 is MMG$K_POOLTYPE_P0 + 1 */ /* MMG$K_POOLTYPE_IMAGE is MMG$K_POOLTYPE_P1 + 1 */ /* */ /* If new pool types are added within MMG$K_POOLTYPE_MAXIMUM, these */ /* constants should be moved down and a corresponding change made to */ /* [SDA]EVAX_SDADEF.SDL */ /* */ #define MMG$K_POOLTYPE_PAGED 2 #define MMG$K_POOLTYPE_P0 3 #define MMG$K_POOLTYPE_P1 4 #define MMG$K_POOLTYPE_IMAGE 5 /* */ /* Return bitmask definitions for mmg$check_va_access */ /* */ #define MMG$M_VA_VALID 0x1 #define MMG$M_PTE_VALID 0x2 #define MMG$M_K_READ 0x4 #define MMG$M_K_WRITE 0x8 #define MMG$M_K_EXEC 0x10 #define MMG$M_PHYS_MEM 0x20 #define MMG$M_IO_MEM 0x40 #define MMG$M_UNK_MEM 0x80 #if !defined(__NOBASEALIGN_SUPPORT) && !defined(__cplusplus) /* If using pre DECC V4.0 or C++ */ #pragma __nomember_alignment __longword #else #pragma __nomember_alignment #endif typedef struct _check_va { #pragma __nomember_alignment __union { unsigned int mmg$l_check_va_flags; /* Flags longword */ __struct { unsigned mmg$v_va_valid : 1; /* VA is valid (not in any gaps) */ unsigned mmg$v_pte_valid : 1; /* VA's PTE is valid */ unsigned mmg$v_k_read : 1; /* VA is kernel readable */ unsigned mmg$v_k_write : 1; /* VA is kernel writable */ unsigned mmg$v_k_exec : 1; /* VA is kernel executable */ unsigned mmg$v_phys_mem : 1; /* VA maps real physical mem */ unsigned mmg$v_io_mem : 1; /* VA maps I/O space */ unsigned mmg$v_unk_mem : 1; /* VA map unkonwn memory. If set, there is no */ /* I/O space data, so the VA could map I/O space. */ } mmg$r_check_va_bits; } mmg$r_check_va_overlay; } CHECK_VA; #if !defined(__VAXC) #define mmg$l_check_va_flags mmg$r_check_va_overlay.mmg$l_check_va_flags #define mmg$v_va_valid mmg$r_check_va_overlay.mmg$r_check_va_bits.mmg$v_va_valid #define mmg$v_pte_valid mmg$r_check_va_overlay.mmg$r_check_va_bits.mmg$v_pte_valid #define mmg$v_k_read mmg$r_check_va_overlay.mmg$r_check_va_bits.mmg$v_k_read #define mmg$v_k_write mmg$r_check_va_overlay.mmg$r_check_va_bits.mmg$v_k_write #define mmg$v_k_exec mmg$r_check_va_overlay.mmg$r_check_va_bits.mmg$v_k_exec #define mmg$v_phys_mem mmg$r_check_va_overlay.mmg$r_check_va_bits.mmg$v_phys_mem #define mmg$v_io_mem mmg$r_check_va_overlay.mmg$r_check_va_bits.mmg$v_io_mem #define mmg$v_unk_mem mmg$r_check_va_overlay.mmg$r_check_va_bits.mmg$v_unk_mem #endif /* #if !defined(__VAXC) */ #define MMG$C_STACK_PROCESS 0 /* Process default stack */ #define MMG$C_STACK_KP 1 /* KP stack */ #define MMG$C_STACK_KTHREAD 2 /* Kernel thread stack */ #define MMG$C_JUST_I 1 /* Just instruction */ #define MMG$C_JUST_D 2 /* Just data */ #define MMG$C_BOTH_I_AND_D 3 /* Both instruction and data */ /* */ /* This structure is used by MMG$DELPAG_64 in SYSCREDEL to throttle the */ /* number of processes that are tearing down virtual address space. */ /* */ /* It is recommended that this structure be allocated on a cache line */ /* boundary - 64 bytes for Alpha and 128 for IPF. */ /* */ typedef struct _delpag_mem { int mmg_del$l_throttle; /* Number of processes in the throttle */ int mmg_del$l_filler0; unsigned short int mmg_del$w_size; /* STRUCTURE SIZE IN BYTES */ unsigned char mmg_del$b_type; /* STRUCTURE TYPE CODE */ unsigned char mmg_del$b_subtype; /* STRUCTURE SUB-TYPE CODE */ char mmg_del$b_fill_4_ [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 mmg_del$q_delpag_iterations; #pragma __nomember_alignment unsigned __int64 mmg_del$q_drop_avoided; /* MMG Drop Avoided */ unsigned __int64 mmg_del$q_timedout; /* Delpag MMG Hold Time Exceeded */ unsigned __int64 mmg_del$q_last_entered; /* Time (abstim_tics) of last entry */ unsigned __int64 mmg_del$q_throttled; /* Throttled entries to DELPAG */ unsigned __int64 mmg_del$q_nonthrottled; /* Non-Throttled entries to DELPAG */ /* Offset to next cache line */ char mmg_del$b_filler1 [64]; int mmg_del$l_waiters; /* Number of processes in the RW state */ char mmg_del$b_fill_5_ [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 mmg_del$q_total_waits; /* Total resource waits */ #pragma __nomember_alignment unsigned __int64 mmg_del$q_last_stall; /* Time (abstim_tics) of last stall */ int mmg_del$l_max_waiters; /* largest number of stalled processes */ /* offset to next cache line */ char mmg_del$b_filler2 [100]; int mmg_del$l_mmg_hold; /* MMG Hold time in 10 microsecond units */ int mmg_del$l_throttle_limit; /* Max allowed into DELPAG */ /* offset to next cache line */ char mmg_del$b_filler3 [120]; } DELPAG_MEM; #define MMG_DEL$C_THROTTLE_VAS 256 /* VA count needed for throttling */ #define MMG_DEL$C_HOLD_MAX 100 /* Max MMG hold in 10us Units */ #define MMG_DEL$C_THROTTLE_DFLT 4 /* Default Throttle count */ #define MMG_DEL$C_HOLD_DFLT 7 /* Default MMG hold in 10us Units */ #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 /* __MMGDEF_LOADED */