mirror of
https://github.com/genodelabs/genode.git
synced 2025-04-08 11:55:24 +00:00
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'.
This commit is contained in:
parent
de69ee2e66
commit
2612dc14c2
@ -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 <base/capability.h>
|
||||
#include <base/printf.h>
|
||||
|
||||
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 <typename IF>
|
||||
static IF *deref(Capability<IF> 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<IF *>((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 <typename IF>
|
||||
static Capability<IF> capability(IF *interface)
|
||||
{
|
||||
typedef Native_capability::Dst Dst;
|
||||
return reinterpret_cap_cast<IF>(Native_capability(Dst(), (long)interface));
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
#endif /* _INCLUDE__BASE__LOCAL_INTERFACE_H_ */
|
@ -23,7 +23,6 @@
|
||||
#include <base/env.h>
|
||||
#include <base/printf.h>
|
||||
#include <util/misc_math.h>
|
||||
#include <base/local_interface.h>
|
||||
#include <base/heap.h>
|
||||
#include <parent/client.h>
|
||||
#include <ram_session/client.h>
|
||||
@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -14,7 +14,6 @@
|
||||
#ifndef _INCLUDE__RM_SESSION__CLIENT_H_
|
||||
#define _INCLUDE__RM_SESSION__CLIENT_H_
|
||||
|
||||
#include <base/local_interface.h>
|
||||
#include <rm_session/capability.h>
|
||||
|
||||
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) { }
|
||||
|
10
base-linux/src/base/env/platform_env.cc
vendored
10
base-linux/src/base/env/platform_env.cc
vendored
@ -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_session_mmap> rm =
|
||||
static_cap_cast<Rm_session_mmap>(session);
|
||||
Capability<Rm_session_mmap> rm = static_cap_cast<Rm_session_mmap>(session);
|
||||
|
||||
destroy(env()->heap(), Local_interface::deref(rm));
|
||||
|
||||
} catch (Local_interface::Non_local_capability) { }
|
||||
destroy(env()->heap(), Capability<Rm_session_mmap>::deref(rm));
|
||||
}
|
||||
|
||||
|
||||
|
13
base-linux/src/base/env/rm_session_mmap.cc
vendored
13
base-linux/src/base/env/rm_session_mmap.cc
vendored
@ -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<Dataspace>(ds);
|
||||
Dataspace *ds_if = Dataspace_capability::deref(ds);
|
||||
|
||||
Rm_session_mmap *rm = dynamic_cast<Rm_session_mmap *>(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<Dataspace>(region.dataspace());
|
||||
Dataspace *ds_if = Dataspace_capability::deref(region.dataspace());
|
||||
Rm_session_mmap *rm = dynamic_cast<Rm_session_mmap *>(ds_if);
|
||||
if (rm)
|
||||
rm->_base = 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user