1 1.21 christos /* $NetBSD: vmparam.h,v 1.21 2019/03/27 16:16:43 christos Exp $ */ 2 1.1 ws 3 1.15 matt #ifndef _POWERPC_VMPARAM_H_ 4 1.15 matt #define _POWERPC_VMPARAM_H_ 5 1.15 matt 6 1.14 matt #ifdef _KERNEL_OPT 7 1.15 matt #include "opt_modular.h" 8 1.14 matt #include "opt_ppcarch.h" 9 1.15 matt #include "opt_uvm.h" 10 1.1 ws #endif 11 1.1 ws 12 1.15 matt /* 13 1.15 matt * These are common for BOOKE, IBM4XX, and OEA 14 1.15 matt */ 15 1.15 matt #define VM_FREELIST_DEFAULT 0 16 1.15 matt #define VM_FREELIST_FIRST256 1 17 1.15 matt #define VM_FREELIST_FIRST16 2 18 1.15 matt #define VM_NFREELIST 3 19 1.15 matt 20 1.15 matt #define VM_PHYSSEG_MAX 16 21 1.15 matt 22 1.15 matt /* 23 1.15 matt * The address to which unspecified mapping requests default 24 1.19 snj * Put the stack in its own segment and start mmaping at the 25 1.15 matt * top of the next lower segment. 26 1.15 matt */ 27 1.15 matt #define __USE_TOPDOWN_VM 28 1.18 christos #define VM_DEFAULT_ADDRESS_BOTTOMUP(da, sz) \ 29 1.18 christos round_page((vaddr_t)(da) + (vsize_t)maxdmap) 30 1.15 matt 31 1.15 matt /* 32 1.17 matt * If we are a module or a modular kernel, then we need to defined the range 33 1.17 matt * of our varible page sizes since BOOKE and OEA use 4KB pages while IBM4XX 34 1.17 matt * use 16KB pages. 35 1.15 matt */ 36 1.21 christos #define MIN_PAGE_SHIFT 12 /* BOOKE/OEA */ 37 1.21 christos #define MAX_PAGE_SHIFT 14 /* IBM4XX */ 38 1.21 christos #define MIN_PAGE_SIZE (1 << MIN_PAGE_SHIFT) 39 1.21 christos #define MAX_PAGE_SIZE (1 << MAX_PAGE_SHIFT) 40 1.15 matt 41 1.17 matt #if defined(_MODULE) 42 1.16 matt #if defined(_RUMPKERNEL) 43 1.16 matt /* 44 1.16 matt * Safe definitions for RUMP kernels 45 1.16 matt */ 46 1.16 matt #define VM_MAXUSER_ADDRESS 0x7fff8000 47 1.16 matt #define VM_MIN_ADDRESS 0x00000000 48 1.16 matt #define VM_MAX_ADDRESS VM_MAXUSER_ADDRESS 49 1.16 matt #define MAXDSIZ (1024*1024*1024) 50 1.16 matt #define MAXSSIZ (32*1024*1024) 51 1.16 matt #define MAXTSIZ (256*1024*1024) 52 1.16 matt #else /* !_RUMPKERNEL */ 53 1.15 matt /* 54 1.15 matt * Some modules need some of the constants but those vary between the variants 55 1.15 matt * so those constants are exported as linker symbols so they don't take up any 56 1.15 matt * space but also avoid an extra load to put into a register. 57 1.15 matt */ 58 1.15 matt extern const char __USRSTACK; /* let the linker resolve it */ 59 1.15 matt 60 1.15 matt #define USRSTACK ((vaddr_t)(uintptr_t)&__USRSTACK) 61 1.16 matt #endif /* !_RUMPKERNEL */ 62 1.15 matt 63 1.15 matt #else /* !_MODULE */ 64 1.15 matt 65 1.14 matt #if defined(PPC_BOOKE) 66 1.14 matt #include <powerpc/booke/vmparam.h> 67 1.14 matt #elif defined(PPC_IBM4XX) 68 1.14 matt #include <powerpc/ibm4xx/vmparam.h> 69 1.14 matt #elif defined(PPC_OEA) || defined (PPC_OEA64) || defined (PPC_OEA64_BRIDGE) 70 1.14 matt #include <powerpc/oea/vmparam.h> 71 1.16 matt #elif defined(_KERNEL) 72 1.14 matt #error unknown PPC variant 73 1.21 christos #else 74 1.21 christos #define PAGE_SHIFT MAX_PAGE_SHIFT 75 1.21 christos #define PAGE_SIZE (1 << PAGE_SHIFT) 76 1.21 christos #define PAGE_MASK (PAGE_SIZE - 1) 77 1.1 ws #endif 78 1.15 matt 79 1.15 matt #endif /* !_MODULE */ 80 1.15 matt 81 1.15 matt #if defined(MODULAR) || defined(_MODULAR) 82 1.15 matt /* 83 1.15 matt * If we are a module or support modules, we need to define a compatible 84 1.15 matt * pmap_physseg since IBM4XX uses one. This will waste a tiny of space 85 1.15 matt * but is needed for compatibility. 86 1.15 matt */ 87 1.15 matt #ifndef __HAVE_PMAP_PHYSSEG 88 1.15 matt #define __HAVE_PMAP_PHYSSEG 89 1.15 matt struct pmap_physseg { 90 1.15 matt uintptr_t pmseg_dummy[2]; 91 1.15 matt }; 92 1.15 matt #endif 93 1.15 matt 94 1.15 matt __CTASSERT(sizeof(struct pmap_physseg) == sizeof(uintptr_t) * 2); 95 1.15 matt #endif /* MODULAR || _MODULE */ 96 1.15 matt 97 1.15 matt #endif /* !_POWERPC_VMPARAM_H_ */ 98