xref: /minix3/minix/lib/libsys/vm_memctl.c (revision 63483e02e6a5924979f1c177070e18c56323a45c)
1433d6423SLionel Sambuc #include "syslib.h"
2433d6423SLionel Sambuc #include <unistd.h>
3433d6423SLionel Sambuc #include <string.h>
4433d6423SLionel Sambuc 
5433d6423SLionel Sambuc int
vm_memctl(endpoint_t ep,int req,void ** addr,size_t * len)648f446ecSCristiano Giuffrida vm_memctl(endpoint_t ep, int req, void** addr, size_t *len)
7433d6423SLionel Sambuc {
8433d6423SLionel Sambuc 	message m;
948f446ecSCristiano Giuffrida 	int r;
10433d6423SLionel Sambuc 
11433d6423SLionel Sambuc 	memset(&m, 0, sizeof(m));
12433d6423SLionel Sambuc 	m.VM_RS_CTL_ENDPT = ep;
13433d6423SLionel Sambuc 	m.VM_RS_CTL_REQ = req;
1448f446ecSCristiano Giuffrida 	m.VM_RS_CTL_ADDR = addr ? *addr : 0;
1548f446ecSCristiano Giuffrida 	m.VM_RS_CTL_LEN = len ? *len : 0;
16433d6423SLionel Sambuc 
1748f446ecSCristiano Giuffrida 	r = _taskcall(VM_PROC_NR, VM_RS_MEMCTL, &m);
1848f446ecSCristiano Giuffrida 	if(r != OK) {
1948f446ecSCristiano Giuffrida 		return r;
2048f446ecSCristiano Giuffrida 	}
2148f446ecSCristiano Giuffrida 	if(addr) {
2248f446ecSCristiano Giuffrida 		*addr = m.VM_RS_CTL_ADDR;
2348f446ecSCristiano Giuffrida 	}
24*63483e02SCristiano Giuffrida 	if(len) {
2548f446ecSCristiano Giuffrida 		*len = m.VM_RS_CTL_LEN;
2648f446ecSCristiano Giuffrida 	}
2748f446ecSCristiano Giuffrida 
2848f446ecSCristiano Giuffrida 	return OK;
29433d6423SLionel Sambuc }
30