From 2612dc14c24df518befdca3b5ee3ba666170fb81 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Fri, 10 Aug 2012 19:08:54 +0200 Subject: [PATCH] Removed linux-specific 'local_interface.h' The Linux-specific mechanism has been superseded by the generic support for local capabilities in 'base/include/capability.h'. --- base-linux/include/base/local_interface.h | 90 ---------------------- base-linux/include/base/platform_env.h | 11 +-- base-linux/include/rm_session/client.h | 3 +- base-linux/src/base/env/platform_env.cc | 10 +-- base-linux/src/base/env/rm_session_mmap.cc | 13 +--- 5 files changed, 12 insertions(+), 115 deletions(-) delete mode 100644 base-linux/include/base/local_interface.h diff --git a/base-linux/include/base/local_interface.h b/base-linux/include/base/local_interface.h deleted file mode 100644 index 34e5996a75..0000000000 --- a/base-linux/include/base/local_interface.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * \brief Support for process-local pseudo capabilities - * \author Norman Feske - * \date 2011-11-21 - * - * Pseudo capabilities have a zero 'tid' and a non-zero 'local_name'. The local - * name is a pointer to the local object implementing the interface. Pseudo - * capabilties are valid only as arguments for local services that are prepared - * for it. I.e., the locally implemented RM service accepts pseudo dataspace - * capabilities that refer to managed dataspaces. Or the Linux-specific - * 'Rm_session_client' takes a pseudo capability to target RM-session - * invokations to the local implementation. - * - * Please note that this header file is not part of the official Genode API. - * It exists on no other platform than Linux and is meant for Genode-internal - * use only. - */ - -/* - * Copyright (C) 2011-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__BASE__LOCAL_INTERFACE_H_ -#define _INCLUDE__BASE__LOCAL_INTERFACE_H_ - -#include -#include - -namespace Genode { - - /** - * Common base class of local interface implementations - */ - struct Local_interface - { - virtual ~Local_interface() { } - - /** - * Exception type - */ - class Non_local_capability { }; - - /** - * Convert pseudo capability to pointer to locally implemented session - * - * \param IF interface type - * \param cap pseudo capability - * - * \throw Non_local_capability if the argument does not refer to a - * locally implemented interface - */ - template - static IF *deref(Capability cap) - { - /* check if this is a pseudo capability */ - if (cap.dst().socket != -1 || !cap.local_name()) - throw Non_local_capability(); - - /* - * For a pseudo capability, the 'local_name' points to the local - * session object of the correct type. - */ - IF *interface = dynamic_cast((Local_interface *)cap.local_name()); - if (!interface) - throw Non_local_capability(); - - return interface; - } - - /** - * Construct pseudo capability to process-local interface implementation - * - * \param IF interface type - * \param interface pointer to local interface implementation - * \return pseudo capability - * - */ - template - static Capability capability(IF *interface) - { - typedef Native_capability::Dst Dst; - return reinterpret_cap_cast(Native_capability(Dst(), (long)interface)); - }; - }; -} - -#endif /* _INCLUDE__BASE__LOCAL_INTERFACE_H_ */ diff --git a/base-linux/include/base/platform_env.h b/base-linux/include/base/platform_env.h index de5e0975f9..7cc4d367d4 100644 --- a/base-linux/include/base/platform_env.h +++ b/base-linux/include/base/platform_env.h @@ -23,7 +23,6 @@ #include #include #include -#include #include #include #include @@ -149,12 +148,10 @@ namespace Genode { /* - * On Linux, we use a local region manager session - * that attaches dataspaces via mmap to the local - * address space. + * On Linux, we use a local region manager session that attaches + * dataspaces via mmap to the local address space. */ - class Rm_session_mmap : public Local_interface, - public Rm_session, + class Rm_session_mmap : public Rm_session, public Dataspace { private: @@ -239,7 +236,7 @@ namespace Genode { */ Dataspace_capability dataspace() { - return Local_interface::capability(this); + return Dataspace_capability::local_cap(this); } }; diff --git a/base-linux/include/rm_session/client.h b/base-linux/include/rm_session/client.h index 9e44c415c5..81df0edba3 100644 --- a/base-linux/include/rm_session/client.h +++ b/base-linux/include/rm_session/client.h @@ -14,7 +14,6 @@ #ifndef _INCLUDE__RM_SESSION__CLIENT_H_ #define _INCLUDE__RM_SESSION__CLIENT_H_ -#include #include namespace Genode { @@ -28,7 +27,7 @@ namespace Genode { * * \throw Local_interface::Non_local_capability */ - Rm_session *_local() const { return Local_interface::deref(_cap); } + Rm_session *_local() const { return Rm_session_capability::deref(_cap); } explicit Rm_session_client(Rm_session_capability session) : _cap(session) { } diff --git a/base-linux/src/base/env/platform_env.cc b/base-linux/src/base/env/platform_env.cc index 54df826436..dc050de514 100644 --- a/base-linux/src/base/env/platform_env.cc +++ b/base-linux/src/base/env/platform_env.cc @@ -38,7 +38,7 @@ Platform_env::Local_parent::session(Service_name const &service_name, Rm_session_mmap *rm = new (env()->heap()) Rm_session_mmap(true, size); - return Local_interface::capability(rm); + return Session_capability::local_cap(rm); } return Parent_client::session(service_name, args); @@ -58,13 +58,9 @@ void Platform_env::Local_parent::close(Session_capability session) /* * Detect capability to local RM session */ - try { - Capability rm = - static_cap_cast(session); + Capability rm = static_cap_cast(session); - destroy(env()->heap(), Local_interface::deref(rm)); - - } catch (Local_interface::Non_local_capability) { } + destroy(env()->heap(), Capability::deref(rm)); } diff --git a/base-linux/src/base/env/rm_session_mmap.cc b/base-linux/src/base/env/rm_session_mmap.cc index af134a1b1b..956a8f1e64 100644 --- a/base-linux/src/base/env/rm_session_mmap.cc +++ b/base-linux/src/base/env/rm_session_mmap.cc @@ -24,7 +24,7 @@ static Genode::size_t dataspace_size(Dataspace_capability ds) if (ds.valid()) return Dataspace_client(ds).size(); - return Local_interface::deref(ds)->size(); + return Dataspace_capability::deref(ds)->size(); } @@ -33,12 +33,7 @@ static bool is_sub_rm_session(Dataspace_capability ds) if (ds.valid()) return false; - try { - Local_interface::deref(ds); } - catch (Local_interface::Non_local_capability) { - return false; } - - return true; + return Dataspace_capability::deref(ds) != 0; } @@ -161,7 +156,7 @@ Platform_env::Rm_session_mmap::attach(Dataspace_capability ds, if (is_sub_rm_session(ds)) { - Dataspace *ds_if = Local_interface::deref(ds); + Dataspace *ds_if = Dataspace_capability::deref(ds); Rm_session_mmap *rm = dynamic_cast(ds_if); @@ -279,7 +274,7 @@ void Platform_env::Rm_session_mmap::detach(Rm_session::Local_addr local_addr) */ if (is_sub_rm_session(region.dataspace())) { - Dataspace *ds_if = Local_interface::deref(region.dataspace()); + Dataspace *ds_if = Dataspace_capability::deref(region.dataspace()); Rm_session_mmap *rm = dynamic_cast(ds_if); if (rm) rm->_base = 0;