]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/kern/kobject_iface.cpp
update
[l4.git] / kernel / fiasco / src / kern / kobject_iface.cpp
1 INTERFACE:
2
3 #include "l4_types.h"
4
5 class Kobject;
6 class Kobject_dbg;
7 class Kobject_mappable;
8
9 class Space;
10 class Syscall_frame;
11 class Utcb;
12
13 class Kobject_common
14 {
15 public:
16   virtual char const *kobj_type() const = 0;
17   virtual Address kobject_start_addr() const = 0;
18
19   virtual bool is_local(Space *) const  = 0;
20   virtual Mword obj_id() const  = 0;
21   virtual void initiate_deletion(Kobject ***) = 0;
22
23   virtual Kobject_mappable *map_root() = 0;
24 };
25
26 class Kobject_iface : public Kobject_common
27 {
28 public:
29   virtual void invoke(L4_obj_ref self, Mword rights, Syscall_frame *, Utcb *) = 0;
30 };
31
32 IMPLEMENTATION:
33
34 PUBLIC static inline
35 L4_msg_tag
36 Kobject_iface::commit_result(Mword error,
37                              unsigned words = 0, unsigned items = 0)
38 {
39   return L4_msg_tag(words, items, 0, error);
40 }
41
42 PUBLIC static inline
43 L4_msg_tag
44 Kobject_iface::commit_error(Utcb const *utcb, L4_error const &e,
45                             L4_msg_tag const &tag = L4_msg_tag(0, 0, 0, 0))
46 {
47   const_cast<Utcb*>(utcb)->error = e;
48   return L4_msg_tag(tag, L4_msg_tag::Error);
49 }
50
51 PUBLIC virtual
52 Kobject_iface *
53 Kobject_iface::downgrade(unsigned long del_attribs)
54 { (void)del_attribs; return this; }
55
56
57 // ------------------------------------------------------------------------
58 IMPLEMENTATION [debug]:
59
60 PUBLIC virtual Kobject_dbg *Kobject_common::dbg_info() const = 0;