xref: /minix3/minix/lib/libsys/vm_map_phys.c (revision 162b8995bb575e8affba67dd6f9ec04263df832e)
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