diff --git a/repos/base/include/session/session.h b/repos/base/include/session/session.h index c60deb965c..e69f50a59e 100644 --- a/repos/base/include/session/session.h +++ b/repos/base/include/session/session.h @@ -14,6 +14,10 @@ #ifndef _INCLUDE__SESSION__SESSION_H_ #define _INCLUDE__SESSION__SESSION_H_ +#include +#include +#include + /* * Each session interface declares an RPC interface and, therefore, relies on * the RPC framework. By including 'base/rpc.h' here, we relieve the interfaces @@ -21,7 +25,16 @@ */ #include -namespace Genode { struct Session; } +namespace Genode { + + struct Session; + + /* + * Exceptions that may occur during the session creation + */ + struct Insufficient_ram_quota : Exception { }; + struct Insufficient_cap_quota : Exception { }; +} /** @@ -29,6 +42,16 @@ namespace Genode { struct Session; } */ struct Genode::Session { + struct Resources + { + Ram_quota ram_quota; + Cap_quota cap_quota; + }; + + struct Diag { bool enabled; }; + + typedef Session_label Label; + /* * Each session interface must implement the class function 'service_name' * ! static const char *service_name(); @@ -39,4 +62,33 @@ struct Genode::Session virtual ~Session() { } }; + +namespace Genode { + + static inline Ram_quota ram_quota_from_args(char const *args) + { + return { Arg_string::find_arg(args, "ram_quota").ulong_value(0) }; + } + + static inline Cap_quota cap_quota_from_args(char const *args) + { + return { Arg_string::find_arg(args, "cap_quota").ulong_value(0) }; + } + + static inline Session::Label session_label_from_args(char const *args) + { + return label_from_args(args); + } + + static inline Session::Resources session_resources_from_args(char const *args) + { + return { ram_quota_from_args(args), cap_quota_from_args(args) }; + } + + static inline Session::Diag session_diag_from_args(char const *args) + { + return { Arg_string::find_arg(args, "diag").bool_value(false) }; + } +} + #endif /* _INCLUDE__SESSION__SESSION_H_ */ diff --git a/repos/os/src/init/types.h b/repos/os/src/init/types.h index 418723899a..b39915ae97 100644 --- a/repos/os/src/init/types.h +++ b/repos/os/src/init/types.h @@ -25,8 +25,6 @@ namespace Init { using Genode::size_t; using Genode::strlen; - struct Ram_quota { size_t value; }; - struct Prio_levels { long value; }; typedef List > Child_list;