]> 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   virtual ~Kobject_common() = 0;
25 };
26
27 class Kobject_iface : public Kobject_common
28 {
29 public:
30   virtual void invoke(L4_obj_ref self, L4_fpage::Rights rights, Syscall_frame *, Utcb *) = 0;
31 };
32
33 IMPLEMENTATION:
34
35 IMPLEMENT inline Kobject_common::~Kobject_common() {}
36
37 PUBLIC static inline
38 L4_msg_tag
39 Kobject_iface::commit_result(Mword error,
40                              unsigned words = 0, unsigned items = 0)
41 {
42   return L4_msg_tag(words, items, 0, error);
43 }
44
45 PUBLIC static inline
46 L4_msg_tag
47 Kobject_iface::commit_error(Utcb const *utcb, L4_error const &e,
48                             L4_msg_tag const &tag = L4_msg_tag(0, 0, 0, 0))
49 {
50   const_cast<Utcb*>(utcb)->error = e;
51   return L4_msg_tag(tag, L4_msg_tag::Error);
52 }
53
54 PUBLIC virtual
55 Kobject_iface *
56 Kobject_iface::downgrade(unsigned long del_attribs)
57 { (void)del_attribs; return this; }
58
59
60 // ------------------------------------------------------------------------
61 IMPLEMENTATION [debug]:
62
63 PUBLIC virtual Kobject_dbg *Kobject_common::dbg_info() const = 0;