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;