From fcb3e32feef1fa3b98ad01ba462c590305dc842e Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Mon, 20 Dec 2021 18:09:37 +0100 Subject: [PATCH] black_hole: provide Event service Fixes #4419 --- repos/os/recipes/pkg/black_hole/runtime | 2 + repos/os/recipes/src/black_hole/used_apis | 1 + repos/os/src/server/black_hole/README | 2 + repos/os/src/server/black_hole/event.h | 102 ++++++++++++++++++++++ repos/os/src/server/black_hole/main.cc | 6 ++ 5 files changed, 113 insertions(+) create mode 100644 repos/os/src/server/black_hole/event.h diff --git a/repos/os/recipes/pkg/black_hole/runtime b/repos/os/recipes/pkg/black_hole/runtime index e542d2d78e..f9ea659189 100644 --- a/repos/os/recipes/pkg/black_hole/runtime +++ b/repos/os/recipes/pkg/black_hole/runtime @@ -4,12 +4,14 @@ + + diff --git a/repos/os/recipes/src/black_hole/used_apis b/repos/os/recipes/src/black_hole/used_apis index 62eaff0596..74942fb292 100644 --- a/repos/os/recipes/src/black_hole/used_apis +++ b/repos/os/recipes/src/black_hole/used_apis @@ -2,4 +2,5 @@ base audio_in_session audio_out_session capture_session +event_session os diff --git a/repos/os/src/server/black_hole/README b/repos/os/src/server/black_hole/README index eab164909c..fe17834729 100644 --- a/repos/os/src/server/black_hole/README +++ b/repos/os/src/server/black_hole/README @@ -7,9 +7,11 @@ in the configuration of the component: * Audio_in * Audio_out * Capture +* Event + diff --git a/repos/os/src/server/black_hole/event.h b/repos/os/src/server/black_hole/event.h new file mode 100644 index 0000000000..bdc2e9148c --- /dev/null +++ b/repos/os/src/server/black_hole/event.h @@ -0,0 +1,102 @@ +/* + * \brief Event session component and root + * \author Martin Stein + * \date 2021-12-20 + */ + +/* + * Copyright (C) 2021 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _EVENT_H_ +#define _EVENT_H_ + +/* Genode includes */ +#include +#include + +namespace Black_hole { + + using namespace Genode; + + class Event_session; + class Event_root; +} + + +class Black_hole::Event_session +: +public Session_object +{ + private: + + Constrained_ram_allocator _ram; + + Attached_ram_dataspace _ds; + + public: + + Event_session(Env &env, + Resources const &resources, + Label const &label, + Diag const &diag) + : + Session_object(env.ep(), resources, label, diag), + _ram(env.ram(), _ram_quota_guard(), _cap_quota_guard()), + _ds(_ram, env.rm(), 4096) + { } + + ~Event_session() { } + + + /***************************** + ** Event session interface ** + *****************************/ + + Dataspace_capability dataspace() { return _ds.cap(); } + + void submit_batch(unsigned const /* count */) { } +}; + + +class Black_hole::Event_root : public Root_component +{ + private: + + Env &_env; + + protected: + + Event_session *_create_session(const char *args) override + { + return new (md_alloc()) + Event_session(_env, + session_resources_from_args(args), + session_label_from_args(args), + session_diag_from_args(args)); + } + + void _upgrade_session(Event_session *s, const char *args) override + { + s->upgrade(ram_quota_from_args(args)); + s->upgrade(cap_quota_from_args(args)); + } + + void _destroy_session(Event_session *session) override + { + Genode::destroy(md_alloc(), session); + } + + public: + + Event_root(Env &env, Allocator &md_alloc) + : + Root_component(&env.ep().rpc_ep(), &md_alloc), + _env(env) + { } +}; + +#endif /* _EVENT_H_ */ diff --git a/repos/os/src/server/black_hole/main.cc b/repos/os/src/server/black_hole/main.cc index 9f24169094..56991d459c 100644 --- a/repos/os/src/server/black_hole/main.cc +++ b/repos/os/src/server/black_hole/main.cc @@ -24,6 +24,7 @@ #include "audio_in.h" #include "audio_out.h" #include "capture.h" +#include "event.h" /*************** @@ -41,6 +42,7 @@ struct Black_hole::Main Genode::Constructible audio_in_root { }; Genode::Constructible audio_out_root { }; Genode::Constructible capture_root { }; + Genode::Constructible event_root { }; Main(Genode::Env &env) : env(env) { @@ -60,6 +62,10 @@ struct Black_hole::Main capture_root.construct(env, heap); env.parent().announce(env.ep().manage(*capture_root)); } + if (_config_rom.xml().has_sub_node("event")) { + event_root.construct(env, heap); + env.parent().announce(env.ep().manage(*event_root)); + } } };