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