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);
    }
}
Example #2
0
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);
 }