xref: /minix/minix/servers/vm/region.h (revision 83133719)
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