1433d6423SLionel Sambuc #include "syslib.h"
2433d6423SLionel Sambuc
3433d6423SLionel Sambuc #include <sys/mman.h>
4433d6423SLionel Sambuc #include <minix/vm.h>
5433d6423SLionel Sambuc #include <stdarg.h>
6433d6423SLionel Sambuc #include <string.h>
7433d6423SLionel Sambuc
8433d6423SLionel Sambuc void *
vm_map_phys(endpoint_t who,void * phaddr,size_t len)9433d6423SLionel Sambuc vm_map_phys(endpoint_t who, void *phaddr, size_t len)
10433d6423SLionel Sambuc {
11433d6423SLionel Sambuc message m;
12433d6423SLionel Sambuc int r;
13433d6423SLionel Sambuc
14433d6423SLionel Sambuc memset(&m, 0, sizeof(m));
15433d6423SLionel Sambuc m.m_lsys_vm_map_phys.ep = who;
16685aa793SDavid van Moolenbroek m.m_lsys_vm_map_phys.phaddr = (phys_bytes)phaddr;
17433d6423SLionel Sambuc m.m_lsys_vm_map_phys.len = len;
18433d6423SLionel Sambuc
19433d6423SLionel Sambuc r = _taskcall(VM_PROC_NR, VM_MAP_PHYS, &m);
20433d6423SLionel Sambuc
21433d6423SLionel Sambuc if (r != OK) return MAP_FAILED;
22433d6423SLionel Sambuc
23*162b8995SCristiano Giuffrida r = sef_llvm_add_special_mem_region(m.m_lsys_vm_map_phys.reply,
24*162b8995SCristiano Giuffrida len, NULL);
25*162b8995SCristiano Giuffrida if(r < 0) {
26*162b8995SCristiano Giuffrida printf("vm_map_phys: add_special_mem_region failed: %d\n", r);
27*162b8995SCristiano Giuffrida }
28*162b8995SCristiano Giuffrida
29433d6423SLionel Sambuc return m.m_lsys_vm_map_phys.reply;
30433d6423SLionel Sambuc }
31433d6423SLionel Sambuc
32433d6423SLionel Sambuc int
vm_unmap_phys(endpoint_t who,void * vaddr,size_t len)33433d6423SLionel Sambuc vm_unmap_phys(endpoint_t who, void *vaddr, size_t len)
34433d6423SLionel Sambuc {
35433d6423SLionel Sambuc message m;
36*162b8995SCristiano Giuffrida int r;
37433d6423SLionel Sambuc
38433d6423SLionel Sambuc memset(&m, 0, sizeof(m));
39433d6423SLionel Sambuc m.m_lsys_vm_unmap_phys.ep = who;
40433d6423SLionel Sambuc m.m_lsys_vm_unmap_phys.vaddr = vaddr;
41433d6423SLionel Sambuc
42*162b8995SCristiano Giuffrida r = _taskcall(VM_PROC_NR, VM_UNMAP_PHYS, &m);
43*162b8995SCristiano Giuffrida
44*162b8995SCristiano Giuffrida if(r != OK) return r;
45*162b8995SCristiano Giuffrida
46*162b8995SCristiano Giuffrida r = sef_llvm_del_special_mem_region_by_addr(vaddr);
47*162b8995SCristiano Giuffrida if(r < 0) {
48*162b8995SCristiano Giuffrida printf("vm_map_phys: del_special_mem_region failed: %d\n", r);
49*162b8995SCristiano Giuffrida }
50*162b8995SCristiano Giuffrida
51*162b8995SCristiano Giuffrida return OK;
52433d6423SLionel Sambuc }
53