PUBLIC L4_msg_tag Irq_muxer::kinvoke(L4_obj_ref, L4_fpage::Rights /*rights*/, Syscall_frame *f, Utcb const *utcb, Utcb *) { register Context *const c_thread = ::current(); assert_opt (c_thread); register Space *const c_space = c_thread->space(); assert_opt (c_space); L4_msg_tag tag = f->tag(); if (EXPECT_FALSE(tag.proto() != L4_msg_tag::Label_irq)) return commit_result(-L4_err::EBadproto); if (EXPECT_FALSE(tag.words() < 1)) return commit_result(-L4_err::EInval); switch ((utcb->values[0] & 0xffff)) { case Op_chain: return sys_attach(tag, utcb, f, c_space); case Op_trigger: log(); hit(0); return no_reply(); default: return commit_result(-L4_err::EInval); } }
inline Mword v_delete(M &m, Mword flush_rights, bool full_flush) { SPACE* child_space = m->space(); assert_opt (child_space); Mword res = child_space->v_delete(m.page(), m.size(), flush_rights); (void) full_flush; assert_kdb (full_flush != child_space->v_lookup(m.page())); return res; }
Ram_quota *ram_quota() const { assert_opt (this); return SPACE::ram_quota(this); }