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