From cb859a478518c85cf029869547135ad802866c5d Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Wed, 8 Aug 2012 13:20:20 +0200 Subject: [PATCH] NOVA: extend cap session for base-nova --- base-nova/include/cap_session/cap_session.h | 62 +++++++++++++++++++ base-nova/include/cap_session/client.h | 38 ++++++++++++ .../src/core/include/cap_session_component.h | 8 ++- 3 files changed, 105 insertions(+), 3 deletions(-) create mode 100644 base-nova/include/cap_session/cap_session.h create mode 100644 base-nova/include/cap_session/client.h diff --git a/base-nova/include/cap_session/cap_session.h b/base-nova/include/cap_session/cap_session.h new file mode 100644 index 000000000..69737096a --- /dev/null +++ b/base-nova/include/cap_session/cap_session.h @@ -0,0 +1,62 @@ +/* + * \brief CAP-session interface + * \author Norman Feske + * \date 2006-06-23 + * + * A 'Cap_session' is an allocator of user-level capabilities. + * User-level capabilities are used to reference server objects + * across address spaces. + */ + +/* + * Copyright (C) 2006-2012 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU General Public License version 2. + */ + +#ifndef _INCLUDE__CAP_SESSION__CAP_SESSION_H_ +#define _INCLUDE__CAP_SESSION__CAP_SESSION_H_ + +#include +#include + +namespace Genode { + + struct Cap_session : Session + { + static const char *service_name() { return "CAP"; } + + virtual ~Cap_session() { } + + /** + * Allocate new unique userland capability + * + * \param ep entry point that will use this capability + * + * \return new userland capability + */ + virtual Native_capability alloc(Native_capability ep, + addr_t entry = 0, + addr_t flags = 0) = 0; + + /** + * Free userland capability + * + * \param cap userland capability to free + */ + virtual void free(Native_capability cap) = 0; + + + /********************* + ** RPC declaration ** + *********************/ + + GENODE_RPC(Rpc_alloc, Native_capability, alloc, + Native_capability, addr_t, addr_t); + GENODE_RPC(Rpc_free, void, free, Native_capability); + GENODE_RPC_INTERFACE(Rpc_alloc, Rpc_free); + }; +} + +#endif /* _INCLUDE__CAP_SESSION__CAP_SESSION_H_ */ diff --git a/base-nova/include/cap_session/client.h b/base-nova/include/cap_session/client.h new file mode 100644 index 000000000..028ead46b --- /dev/null +++ b/base-nova/include/cap_session/client.h @@ -0,0 +1,38 @@ +/* + * \brief Client-side CAP session interface + * \author Norman Feske + * \date 2006-07-10 + */ + +/* + * Copyright (C) 2006-2012 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU General Public License version 2. + */ + +#ifndef _INCLUDE__CAP_SESSION__CLIENT_H_ +#define _INCLUDE__CAP_SESSION__CLIENT_H_ + +#include +#include +#include + +namespace Genode { + + struct Cap_session_client : Rpc_client + { + explicit Cap_session_client(Cap_session_capability session) + : Rpc_client(session) { } + + Native_capability alloc(Native_capability ep, addr_t entry = 0, + addr_t flags = 0) + { + return call(ep, entry, flags); + } + + void free(Native_capability cap) { call(cap); } + }; +} + +#endif /* _INCLUDE__CAP_SESSION__CLIENT_H_ */ diff --git a/base-nova/src/core/include/cap_session_component.h b/base-nova/src/core/include/cap_session_component.h index a9a56f802..e7e0de7fc 100644 --- a/base-nova/src/core/include/cap_session_component.h +++ b/base-nova/src/core/include/cap_session_component.h @@ -1,7 +1,7 @@ /* * \brief Capability allocation service - * \author Norman Feske - * \date 2006-06-26 + * \author Alexander Boettcher + * \date 2012-07-27 */ /* @@ -34,7 +34,9 @@ namespace Genode { public: - Native_capability alloc(Native_capability ep) + Native_capability alloc(Native_capability ep, + addr_t entry, + addr_t mtd) { Lock::Guard lock_guard(_lock());