]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/ned/server/src/remote_mem.cc
update
[l4.git] / l4 / pkg / ned / server / src / remote_mem.cc
1 /*
2  * (c) 2010 Alexander Warg <warg@os.inf.tu-dresden.de>
3  *     economic rights: Technische Universität Dresden (Germany)
4  *
5  * This file is part of TUD:OS and distributed under the terms of the
6  * GNU General Public License 2.
7  * Please see the COPYING-GPL-2 file for details.
8  */
9 #include "remote_mem.h"
10
11 #include <l4/re/env>
12 #include <l4/re/rm>
13 #include <l4/re/error_helper>
14 #include <cstdio>
15 l4_addr_t
16 Stack::add(l4_addr_t start, l4_umword_t size, L4::Cap<L4Re::Rm> rm,
17            L4::Cap<L4Re::Dataspace> m, unsigned long offs, unsigned flags,
18            unsigned char align, char const *what)
19 {
20   unsigned rh_flags = flags;
21   // printf("attaching %s %lx... @%lx\n", what, m.cap(), rm.cap());
22   if (!m.is_valid())
23     rh_flags |= L4Re::Rm::Reserved;
24
25   l4_addr_t addr = start;
26
27   L4Re::chksys(rm->attach(&addr, size, rh_flags, m, offs, align), what);
28
29   l4re_mem_area_t a;
30   a.start = addr;
31   a.size = size;
32   push(a);
33   return addr;
34 }
35
36 void
37 Stack::set_stack(L4Re::Util::Ref_cap<L4Re::Dataspace>::Cap const &ds, unsigned size)
38 {
39   L4Re::chksys(L4Re::Env::env()->rm()->attach(&_vma, size,
40                                               L4Re::Rm::Search_addr, ds.get(), 0),
41                "attaching stack vma");
42   _stack_ds = ds;
43   set_local_top((char*)(_vma.get() + size));
44 }
45