secondary cache feature in vm.
[minix.git] / lib / libc / posix / _mmap.c
bloba0160201548b06617d9d804bc302d8199ba3adba
1 #define _SYSTEM 1
2 #include <lib.h>
3 #define mmap _mmap
4 #define munmap _munmap
5 #define munmap_text _munmap_text
6 #define vm_remap _vm_remap
7 #define vm_unmap _vm_unmap
8 #define vm_getphys _vm_getphys
9 #define vm_getrefcount _vm_getrefcount
10 #include <sys/mman.h>
11 #include <stdarg.h>
12 #include <string.h>
13 #include <errno.h>
15 PUBLIC void *mmap(void *addr, size_t len, int prot, int flags,
16 int fd, off_t offset)
18 message m;
19 int r;
21 m.VMM_ADDR = (vir_bytes) addr;
22 m.VMM_LEN = len;
23 m.VMM_PROT = prot;
24 m.VMM_FLAGS = flags;
25 m.VMM_FD = fd;
26 m.VMM_OFFSET = offset;
28 r = _syscall(VM_PROC_NR, VM_MMAP, &m);
30 if(r != OK) {
31 return MAP_FAILED;
34 return (void *) m.VMM_RETADDR;
37 PUBLIC int munmap(void *addr, size_t len)
39 message m;
41 m.VMUM_ADDR = addr;
42 m.VMUM_LEN = len;
44 return _syscall(VM_PROC_NR, VM_MUNMAP, &m);
48 PUBLIC int munmap_text(void *addr, size_t len)
50 message m;
52 m.VMUM_ADDR = addr;
53 m.VMUM_LEN = len;
55 return _syscall(VM_PROC_NR, VM_MUNMAP_TEXT, &m);
58 PUBLIC void *vm_remap(int d, int s, void *da, void *sa, size_t size)
60 message m;
61 int r;
63 m.VMRE_D = d;
64 m.VMRE_S = s;
65 m.VMRE_DA = (char *) da;
66 m.VMRE_SA = (char *) sa;
67 m.VMRE_SIZE = size;
69 r = _syscall(VM_PROC_NR, VM_REMAP, &m);
70 if (r != OK)
71 return MAP_FAILED;
72 return (void *) m.VMRE_RETA;
75 PUBLIC int vm_unmap(int endpt, void *addr)
77 message m;
79 m.VMUN_ENDPT = endpt;
80 m.VMUN_ADDR = (long) addr;
82 return _syscall(VM_PROC_NR, VM_SHM_UNMAP, &m);
85 PUBLIC unsigned long vm_getphys(int endpt, void *addr)
87 message m;
88 int r;
90 m.VMPHYS_ENDPT = endpt;
91 m.VMPHYS_ADDR = (long) addr;
93 r = _syscall(VM_PROC_NR, VM_GETPHYS, &m);
94 if (r != OK)
95 return 0;
96 return m.VMPHYS_RETA;
99 PUBLIC u8_t vm_getrefcount(int endpt, void *addr)
101 message m;
102 int r;
104 m.VMREFCNT_ENDPT = endpt;
105 m.VMREFCNT_ADDR = (long) addr;
107 r = _syscall(VM_PROC_NR, VM_GETREF, &m);
108 if (r != OK)
109 return (u8_t) -1;
110 return (u8_t) m.VMREFCNT_RETC;