arm: protect state after signal handler
[minix.git] / lib / libsys / sys_vmctl.c
blobf7472ece0db522ac3523ef18d2467cbb2dc612c3
1 #include "syslib.h"
3 int sys_vmctl(endpoint_t who, int param, u32_t value)
5 message m;
6 int r;
8 m.SVMCTL_WHO = who;
9 m.SVMCTL_PARAM = param;
10 m.SVMCTL_VALUE = value;
11 r = _kernel_call(SYS_VMCTL, &m);
12 return(r);
15 /* Get page directory base register */
16 int sys_vmctl_get_pdbr(endpoint_t who, u32_t *pdbr)
18 message m;
19 int r;
21 m.SVMCTL_WHO = who;
22 m.SVMCTL_PARAM = VMCTL_GET_PDBR;
23 r = _kernel_call(SYS_VMCTL, &m);
24 if(r == OK) {
25 *pdbr = m.SVMCTL_VALUE;
27 return(r);
30 int sys_vmctl_set_addrspace(endpoint_t who,
31 phys_bytes ptroot, void *ptroot_v)
33 message m;
34 int r;
36 m.SVMCTL_WHO = who;
37 m.SVMCTL_PARAM = VMCTL_SETADDRSPACE;
38 m.SVMCTL_PTROOT = ptroot;
39 m.SVMCTL_PTROOT_V = ptroot_v;
40 r = _kernel_call(SYS_VMCTL, &m);
42 return(r);
45 int sys_vmctl_get_memreq(endpoint_t *who, vir_bytes *mem,
46 vir_bytes *len, int *wrflag, endpoint_t *who_s, vir_bytes *mem_s,
47 endpoint_t *requestor)
49 message m;
50 int r;
52 m.SVMCTL_WHO = SELF;
53 m.SVMCTL_PARAM = VMCTL_MEMREQ_GET;
54 r = _kernel_call(SYS_VMCTL, &m);
55 if(r >= 0) {
56 *who = m.SVMCTL_MRG_TARGET;
57 *mem = m.SVMCTL_MRG_ADDR;
58 *len = m.SVMCTL_MRG_LENGTH;
59 *wrflag = m.SVMCTL_MRG_FLAG;
60 *who_s = m.SVMCTL_MRG_EP2;
61 *mem_s = m.SVMCTL_MRG_ADDR2;
62 *requestor = (endpoint_t) m.SVMCTL_MRG_REQUESTOR;
64 return r;
67 int sys_vmctl_get_mapping(int index,
68 phys_bytes *addr, phys_bytes *len, int *flags)
70 int r;
71 message m;
73 m.SVMCTL_WHO = SELF;
74 m.SVMCTL_PARAM = VMCTL_KERN_PHYSMAP;
75 m.SVMCTL_VALUE = (int) index;
77 r = _kernel_call(SYS_VMCTL, &m);
79 if(r != OK)
80 return r;
82 *addr = m.SVMCTL_MAP_PHYS_ADDR;
83 *len = m.SVMCTL_MAP_PHYS_LEN;
84 *flags = m.SVMCTL_MAP_FLAGS;
86 return OK;
89 int sys_vmctl_reply_mapping(int index, vir_bytes addr)
91 message m;
93 m.SVMCTL_WHO = SELF;
94 m.SVMCTL_PARAM = VMCTL_KERN_MAP_REPLY;
95 m.SVMCTL_VALUE = index;
96 m.SVMCTL_MAP_VIR_ADDR = (char *) addr;
98 return _kernel_call(SYS_VMCTL, &m);