/* IBM_PROLOG_BEGIN_TAG */ /* This is an automatically generated prolog. */ /* */ /* bos720 src/bos/kernel/sys/vm_types.h 1.42.1.3 */ /* */ /* Licensed Materials - Property of IBM */ /* */ /* Restricted Materials of IBM */ /* */ /* COPYRIGHT International Business Machines Corp. 1999,2011 */ /* All Rights Reserved */ /* */ /* US Government Users Restricted Rights - Use, duplication or */ /* disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /* */ /* IBM_PROLOG_END_TAG */ /* @(#)47 1.42.1.3 src/bos/kernel/sys/vm_types.h, sysvmm, bos720 7/15/11 03:27:12 */ #ifndef _H_VM_TYPES #define _H_VM_TYPES #ifndef _H_STANDARDS #include #endif #ifdef __64BIT_KERNEL #if defined(__64BIT__) || defined(_LONG_LONG) typedef int64 vmid_t; /* virtual memory object ID */ typedef u_int64 vmhandle_t; /* virtual memory handle */ #endif #else /* !__64BIT_KERNEL */ #ifndef __64BIT__ typedef long vmid_t; /* virtual memory object ID */ typedef ulong_t vmhandle_t; /* virtual memory handle */ #else typedef int vmid_t; /* virtual memory object ID */ typedef uint_t vmhandle_t; /* virtual memory handle */ #endif #endif /* __64BIT_KERNEL */ typedef int vmid32_t; /* 32bit size-invariant vmid_t */ typedef uint_t vmhandle32_t; /* 32bit size invariant vmhandle_t*/ #ifndef __64BIT_KERNEL #ifdef _32KERMODE typedef uint_t kvmid_t; /* kernel's internal version */ typedef uint_t kvmhandle_t; /* kernel's internal version */ #else typedef long32int64_t kvmid_t; /* kernel's internal version */ typedef ulong32int64_t kvmhandle_t; /* kernel's internal version */ #endif #endif #ifdef __64BIT__ typedef long vmid64_t; typedef long rpn64_t; typedef long cnt64_t; /* 64-bit count */ typedef long psize_t; /* page size */ #elif defined(_LONG_LONG) typedef long long vmid64_t; typedef long long rpn64_t; typedef long long cnt64_t; /* 64-bit count */ typedef long long psize_t; /* page size */ #elif defined(_ALL_SOURCE) typedef quad vmid64_t; typedef quad rpn64_t; typedef quad cnt64_t; /* 64-bit count */ typedef quad psize_t; /* page size */ #endif typedef int32long64_t vmidx_t; /* index for vm objects */ /* VM_FULL_KEY() - */ typedef uint32long64_t vmfkey_t; /* ..combined: hkey/ppkey/noex */ /* VM_PROT_KEY() - */ typedef uint32long64_t vmprkey_t; /* ..combined: hkey/ppkey/noex */ typedef int32long64_t vmkey_t; /* key for vm objects */ typedef int32long64_t vmhwkey_t; /* hardware KsKp key */ typedef int vmhkey_t; /* hardware storage key */ typedef int32long64_t vpn_t; /* virtual page number */ typedef int32long64_t rpn_t; /* real page number */ typedef unsigned long ptex_t; /* page table entry index */ typedef unsigned long swhatx_t; /* Software HAT index */ typedef uint32long64_t esid_t; /* use this for esids */ #ifdef __64BIT_KERNEL typedef int aptx_t; /* Index into apt, ahat */ #else typedef ushort_t aptx_t; /* Index into apt, ahat */ #endif typedef int pdtx_t; /* pdt index */ typedef short psx_t; /* page size index */ typedef ushort_t pshift_t; /* page size shift */ typedef ushort_t sshift_t; /* segment size shift */ /* soft_l2ps should be in the upper half of vm_mpss_t such that typecasting a * regular l2psize to vm_mpss_t indicates it is not a soft page. */ typedef uint_t vm_mpss_t; typedef int unidx_t; /* unode index */ typedef int snidx_t; /* snode index */ typedef int vmnodeidx_t; /* generic node index (snode/unode) */ typedef int kvpn_t; /* kernel's internal view of vpn*/ #ifndef __64BIT_KERNEL typedef int krpn_t; /* kernel's internal view of rpn*/ #endif typedef int32long64_t vmsize_t; /* size param */ typedef int32long64_t vmm_lock_t; /* for vmmlock */ typedef uint_t amef_t; /* AME memory expansion factor */ typedef int vmcbpx_t; /* compress block pool index */ typedef uint32_t cnt32_t; /* 32-bit count */ typedef unsigned long ureg_t; /* unsigned register type */ #ifdef _KERNEL /* * vaddr_t : for performing arithmetic operations on pointers * Note this typedef cannot be used for 64-bit user pointers * on a 32-bit kernel. */ typedef ulong_t vaddr_t; #endif /* _KERNEL */ #if !defined(__64BIT__) && !defined(_LONG_LONG) && defined(__64BIT_KERNEL) /* vmhandle_t is undefined for 32bit apps when __64BIT_KERNEL is defined. */ #else typedef struct #ifdef _ALL_SOURCE vmaddr_t #endif /* _ALL_SOURCE */ { /* long-form virtual address */ #ifdef _ALL_SOURCE vmhandle_t srval; /* segment reg contents */ caddr_t offset; /* offset within segment */ #else /* _ALL_SOURCE */ vmhandle_t __srval; /* segment reg contents */ caddr_t __offset; /* offset within segment */ #endif /* _ALL_SOURCE */ } vmaddr_t; #endif /* !defined (__64BIT_KERNEL) && !defined(__LONG_LONG) */ typedef struct #ifdef _ALL_SOURCE adspace_t #endif /* _ALL_SOURCE */ { /* address space mapping */ #ifdef _ALL_SOURCE ulong32int64_t alloc; /* allocation flags */ vmhandle_t srval[16]; /* contents of all seg regs */ #else /* _ALL_SOURCE */ ulong32int64_t __alloc; /* allocation flags */ vmhandle_t __srval[16]; /* contents of all seg regs */ #endif /* _ALL_SOURCE */ } adspace_t; #ifdef _ALL_SOURCE #define ADSP_MASK(_x) ((1U << 31) >> (_x)) #define adsp_is_alloc(_a,_x) ((_a)->alloc & ADSP_MASK(_x)) #ifdef _KERNSYS #define adsp_set_alloc(_a,_x) ((_a)->alloc |= ADSP_MASK(_x)) #define adsp_clear_alloc(_a,_x) ((_a)->alloc &= ~ADSP_MASK(_x)) #endif /* _KERNSYS */ #endif /* _ALL_SOURCE */ #ifdef _ALL_SOURCE /* mstsave32 requires a size invariant placeholder for an adspace_t for * 32bit apps. This is ONLY a placeholder and exists for compatibility * and is not intended to be used by the kernel. However, it must be * available to userspace for 64-bit debuggers to handle 32-bit targets. */ typedef struct adspace32_t { uint_t alloc; uint_t srval[16]; } adspace32_t; #endif #if defined(_ALL_SOURCE) && defined(_LONG_LONG) /* * Memory Region Management Definitions and Structures */ typedef enum _MR_ATTR_TYPE { BadAttr = 0, VirtAddr = 1 } MR_ATTR_TYPE; typedef enum _MR_LABEL_TYPE { BadMem = 0, FreeMem = 1, IPLCB = 2, RMALLOC = 3, PM_HEAP = 4, RTAS_HEAP = 5, TCE_TABLE = 6, IO_SPACE = 7, HUGE_PAGE = 8 } MR_LABEL_TYPE; /* mr_flags values */ #define FWADUMP_DATA 0x1 /* memory region contains dump data */ typedef struct { unsigned long long mr_addr; /* memory region address */ unsigned long long mr_size; /* memory region length */ unsigned char mr_att; /* memory region attributes */ unsigned char mr_label; /* memory region label */ unsigned short mr_nodeid; /* memory region NUMA node ID */ unsigned short mr_flags; /* memory region flags */ char reserved[2]; /* padding, future use */ } iplcb_map_reg_t; #endif /* _ALL_SOURCE && _LONG_LONG */ /* structure for vm_saveatt() and vm_restatt() type services */ #ifdef _KERNEL #ifdef __64BIT_KERNEL /* runs on PPC only */ struct vmsegatt { vmhandle_t vmh0; vmhandle_t vmh1; vmhandle_t vmh2; vmhandle_t vmh3; ushort_t allocmask; }; typedef struct vmsegatt vmsratt_t; #else /* 32bit Kernel runs on PPC and Power architectures */ #define MAXSRNUM 7 typedef struct { vmhandle_t vmh[MAXSRNUM]; ulong_t allocmask; } vmsratt_t; #endif /* __64BIT_KERNEL */ #endif /* _KERNEL */ /* special large-page handle for use on 32-bit kernel */ #ifndef __64BIT_KERNEL typedef vmhandle_t vmlpghandle_t; /* large-page virtual memory handle */ #endif /* !__64BIT_KERNEL */ #endif /*_H_VM_TYPES*/