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