1 2 #ifndef _REGION_H 3 #define _REGION_H 1 4 5 #include <minix/callnr.h> 6 #include <minix/com.h> 7 #include <minix/config.h> 8 #include <minix/const.h> 9 #include <minix/ds.h> 10 #include <minix/endpoint.h> 11 #include <minix/minlib.h> 12 #include <minix/type.h> 13 #include <minix/ipc.h> 14 #include <minix/sysutil.h> 15 #include <minix/syslib.h> 16 #include <minix/const.h> 17 18 #include "phys_region.h" 19 #include "memtype.h" 20 #include "vm.h" 21 #include "fdref.h" 22 23 struct phys_block { 24 #if SANITYCHECKS 25 u32_t seencount; 26 #endif 27 phys_bytes phys; /* physical memory */ 28 29 /* first in list of phys_regions that reference this block */ 30 struct phys_region *firstregion; 31 u8_t refcount; /* Refcount of these pages */ 32 u8_t flags; 33 }; 34 35 #define PBF_INCACHE 0x01 36 37 typedef struct vir_region { 38 vir_bytes vaddr; /* virtual address, offset from pagetable */ 39 vir_bytes length; /* length in bytes */ 40 struct phys_region **physblocks; 41 u16_t flags; 42 struct vmproc *parent; /* Process that owns this vir_region. */ 43 mem_type_t *def_memtype; /* Default instantiated memory type. */ 44 int remaps; 45 int id; /* unique id */ 46 47 union { 48 phys_bytes phys; /* VR_DIRECT */ 49 struct { 50 endpoint_t ep; 51 vir_bytes vaddr; 52 int id; 53 } shared; 54 struct phys_block *pb_cache; 55 struct { 56 int inited; 57 struct fdref *fdref; 58 u64_t offset; 59 u16_t clearend; 60 } file; 61 } param; 62 63 /* AVL fields */ 64 struct vir_region *lower, *higher; 65 int factor; 66 } region_t; 67 68 /* Mapping flags: */ 69 #define VR_WRITABLE 0x001 /* Process may write here. */ 70 #define VR_PHYS64K 0x004 /* Physical memory must be 64k aligned. */ 71 #define VR_LOWER16MB 0x008 72 #define VR_LOWER1MB 0x010 73 #define VR_SHARED 0x040 74 #define VR_UNINITIALIZED 0x080 /* Do not clear after allocation */ 75 76 /* Mapping type: */ 77 #define VR_ANON 0x100 /* Memory to be cleared and allocated */ 78 #define VR_DIRECT 0x200 /* Mapped, but not managed by VM */ 79 80 /* map_page_region flags */ 81 #define MF_PREALLOC 0x01 82 83 #endif 84 85