]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/l4re_kernel/server/src/mem.cc
65922f6219208ff07d393ba44108ebbe1cbad899
[l4.git] / l4 / pkg / l4re_kernel / server / src / mem.cc
1 /*
2  * (c) 2008-2009 Technische Universität Dresden
3  * This file is part of TUD:OS and distributed under the terms of the
4  * GNU General Public License 2.
5  * Please see the COPYING-GPL-2 file for details.
6  */
7 #include <sys/mman.h>
8 #include <errno.h>
9
10 #include "page_alloc.h"
11
12 #include <l4/cxx/iostream>
13
14 void * mmap(void * /*start*/, size_t length, int /*prot*/,
15             int flags, int /*fd*/, off_t offset) throw()
16 {
17   char *addr;
18
19   // some checks
20   if (offset < 0)
21     {
22       errno = -EINVAL;
23       return MAP_FAILED;
24     }
25   if (! (flags & MAP_ANON))
26     {
27       L4::cerr << "mmap() called without MAP_ANON flag, not supported!\n";
28       errno = -EINVAL;
29       return MAP_FAILED;
30     }
31
32   length = (length + (L4_PAGESIZE -1)) & ~(L4_PAGESIZE-1);
33   if (length != L4_PAGESIZE)
34     {
35       errno = ENOMEM;
36       return MAP_FAILED;
37     }
38
39   addr = Single_page_alloc<char>().alloc();
40
41   if (!addr)
42     {
43       errno = ENOMEM;
44       return MAP_FAILED;
45     }
46
47   return addr;
48 }
49
50 int munmap(void * /*start*/, size_t /*length*/) throw()
51 {
52   L4::cout << "munmap() called: unimplemented!\n";
53   errno = EINVAL;
54   return -1;
55 }
56
57 void * mremap(void * /*old_address*/, size_t /*old_size*/, size_t /*new_size*/,
58               int /*may_move*/) throw()
59 {
60   L4::cout << "mremap() called: unimplemented!\n";
61   errno = EINVAL;
62   return MAP_FAILED;
63 }