/* * \brief Root interface to timer service * \author Norman Feske * \author Martin Stein * \date 2006-08-15 */ /* * Copyright (C) 2006-2017 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 _ROOT_COMPONENT_H_ #define _ROOT_COMPONENT_H_ /* Genode includes */ #include /* local includes */ #include #include namespace Timer { class Root_component; } class Timer::Root_component : public Genode::Root_component { private: enum { MIN_TIMEOUT_US = 1000 }; Time_source _time_source; Genode::Alarm_timeout_scheduler _timeout_scheduler; /******************** ** Root_component ** ********************/ Session_component *_create_session(const char *args) override { using namespace Genode; size_t const ram_quota = Arg_string::find_arg(args, "ram_quota").ulong_value(0); if (ram_quota < sizeof(Session_component)) { throw Insufficient_ram_quota(); } return new (md_alloc()) Session_component(_timeout_scheduler); } public: Root_component(Genode::Env &env, Genode::Allocator &md_alloc) : Genode::Root_component(&env.ep().rpc_ep(), &md_alloc), _time_source(env), _timeout_scheduler(_time_source, Microseconds(MIN_TIMEOUT_US)) { _timeout_scheduler._enable(); } }; #endif /* _ROOT_COMPONENT_H_ */