1/* 2 * Copyright (c) 2007 Apple Inc. All rights reserved. 3 */ 4/* 5 * FILE_ID: vm_param.h 6 */ 7 8/* 9 * ARM machine dependent virtual memory parameters. 10 */ 11 12#ifndef _MACH_ARM_VM_PARAM_H_ 13#define _MACH_ARM_VM_PARAM_H_ 14 15#define BYTE_SIZE 8 /* byte size in bits */ 16 17#define KB (1024ULL) 18#define MB (1024 * KB) 19#define GB (1024 * GB) 20 21#define ARM_PGBYTES 4096 /* bytes per ARM small page */ 22#define ARM_PGSHIFT 12 /* number of bits to shift for pages */ 23 24#define KERNEL_IMAGE_TO_PHYS(x) (x) 25#define LINEAR_KERNEL_ADDRESS ((vm_offset_t)0x0) 26 27#if defined (KERNEL) || !defined (__arm64__) 28 29#define PAGE_SIZE ARM_PGBYTES 30#define PAGE_SHIFT ARM_PGSHIFT 31#define PAGE_MASK (PAGE_SIZE-1) 32#define VM_PAGE_SIZE ARM_PGBYTES 33#define machine_ptob(x) ((x) << ARM_PGSHIFT) 34 35#else 36 37/* ARM64 userland gets a 16k pagesize */ 38#define PAGE_SIZE (0x4000) 39#define PAGE_SHIFT (14) 40#define PAGE_MASK (PAGE_SIZE-1) 41 42#define VM_PAGE_SIZE PAGE_SIZE 43 44#define machine_ptob(x) ((x) << 14) 45 46#endif 47 48#define KERNEL_STACK_SIZE (4*ARM_PGBYTES) 49#define INTSTACK_SIZE (4*ARM_PGBYTES) 50 /* interrupt stack size */ 51 52#ifndef __ASSEMBLER__ 53/* 54 * Round off or truncate to the nearest page. These will work 55 * for either addresses or counts. (i.e. 1 byte rounds to 1 page 56 * bytes. 57 */ 58 59 60#if defined (__arm__) 61 62#define VM_MIN_ADDRESS ((vm_address_t) 0x00000000) 63#define VM_MAX_ADDRESS ((vm_address_t) 0x80000000) 64 65#define HIGH_EXC_VECTORS ((vm_address_t) 0xFFFF0000) 66 67#define VM_MIN_KERNEL_ADDRESS ((vm_address_t) 0x80000000) 68#define VM_MIN_KERNEL_AND_KEXT_ADDRESS VM_MIN_KERNEL_ADDRESS 69#define VM_HIGH_KERNEL_WINDOW ((vm_address_t) 0xFFFE0000) 70#define VM_MAX_KERNEL_ADDRESS ((vm_address_t) 0xFFFEFFFF) 71 72#define VM_KERNEL_ADDRESS(va) ((((vm_address_t)(va))>=VM_MIN_KERNEL_ADDRESS) && \ 73 (((vm_address_t)(va))<=VM_MAX_KERNEL_ADDRESS)) 74 75/* system-wide values */ 76#define MACH_VM_MIN_ADDRESS ((mach_vm_offset_t) 0) 77#define MACH_VM_MAX_ADDRESS ((mach_vm_offset_t) VM_MAX_ADDRESS) 78 79#elif defined (__arm64__) 80 81#define VM_MIN_ADDRESS ((vm_address_t) 0x0000000000000000ULL) 82#define VM_MAX_ADDRESS ((vm_address_t) 0x0000000040000000ULL) 83 84#define VM_MIN_KERNEL_ADDRESS ((vm_address_t) 0xffffff8000000000ULL) 85#define VM_MIN_KERNEL_AND_KEXT_ADDRESS VM_MIN_KERNEL_ADDRESS 86#define VM_MAX_KERNEL_ADDRESS ((vm_address_t) 0xffffff80ffffffffULL) 87 88#define VM_KERNEL_ADDRESS(va) ((((vm_address_t)(va))>=VM_MIN_KERNEL_ADDRESS) && \ 89 (((vm_address_t)(va))<=VM_MAX_KERNEL_ADDRESS)) 90 91/* system-wide values */ 92#define MACH_VM_MIN_ADDRESS ((mach_vm_offset_t) 0x0ULL) 93#define MACH_VM_MAX_ADDRESS ((mach_vm_offset_t) 0x00000001A0000000ULL) 94 95#else 96#error architecture not supported 97#endif 98 99/* 100 * Physical memory is mapped linearly at an offset virtual memory. 101 */ 102extern unsigned long gVirtBase, gPhysBase, gPhysSize; 103#define isphysmem(a) (((vm_address_t)(a) - gPhysBase) < gPhysSize) 104#define phystokv(a) ((vm_address_t)(a) - gPhysBase + gVirtBase) 105#endif 106 107#define VM_MAX_PAGE_ADDRESS VM_MAX_ADDRESS 108#define VM32_SUPPORT 1 109#define VM32_MIN_ADDRESS ((vm32_offset_t)0) 110#define VM32_MAX_ADDRESS ((vm32_offset_t)(VM_MAX_PAGE_ADDRESS & 0xFFFFFFFF)) 111 112#define SWI_SYSCALL 0x80 113 114#define KALLOC_LOG2_MINALIGN 4 115#define KALLOC_MINSIZE 16 116 117#endif /* _MACH_ARM_VM_PARAM_H_ */ 118 119