#include <lib.h>
#define mmap _mmap
#define munmap _munmap
+#define munmap_text _munmap_text
+#define vm_remap _vm_remap
+#define vm_unmap _vm_unmap
+#define vm_getphys _vm_getphys
+#define vm_getrefcount _vm_getrefcount
#include <sys/mman.h>
#include <stdarg.h>
#include <string.h>
m.VMUM_ADDR = addr;
m.VMUM_LEN = len;
- return _syscall(VM_PROC_NR, VM_UNMAP, &m);
+ return _syscall(VM_PROC_NR, VM_MUNMAP, &m);
}
+
+
+PUBLIC int munmap_text(void *addr, size_t len)
+{
+ message m;
+
+ m.VMUM_ADDR = addr;
+ m.VMUM_LEN = len;
+
+ return _syscall(VM_PROC_NR, VM_MUNMAP_TEXT, &m);
+}
+
+PUBLIC void *vm_remap(int d, int s, void *da, void *sa, size_t size)
+{
+ message m;
+ int r;
+
+ m.VMRE_D = d;
+ m.VMRE_S = s;
+ m.VMRE_DA = (char *) da;
+ m.VMRE_SA = (char *) sa;
+ m.VMRE_SIZE = size;
+
+ r = _syscall(VM_PROC_NR, VM_REMAP, &m);
+ if (r != OK)
+ return MAP_FAILED;
+ return (void *) m.VMRE_RETA;
+}
+
+PUBLIC int vm_unmap(int endpt, void *addr)
+{
+ message m;
+
+ m.VMUN_ENDPT = endpt;
+ m.VMUN_ADDR = (long) addr;
+
+ return _syscall(VM_PROC_NR, VM_SHM_UNMAP, &m);
+}
+
+PUBLIC unsigned long vm_getphys(int endpt, void *addr)
+{
+ message m;
+ unsigned long ret;
+ int r;
+
+ m.VMPHYS_ENDPT = endpt;
+ m.VMPHYS_ADDR = (long) addr;
+
+ r = _syscall(VM_PROC_NR, VM_GETPHYS, &m);
+ if (r != OK)
+ return 0;
+ return m.VMPHYS_RETA;
+}
+
+PUBLIC u8_t vm_getrefcount(int endpt, void *addr)
+{
+ message m;
+ u8_t ret;
+ int r;
+
+ m.VMREFCNT_ENDPT = endpt;
+ m.VMREFCNT_ADDR = (long) addr;
+
+ r = _syscall(VM_PROC_NR, VM_GETREF, &m);
+ if (r != OK)
+ return (u8_t) -1;
+ return (u8_t) m.VMREFCNT_RETC;
+}
+