mirror of
https://github.com/genodelabs/genode.git
synced 2025-06-19 15:43:56 +00:00
@ -20,6 +20,7 @@
|
||||
/* base-internal includes */
|
||||
#include <base/internal/platform_env.h>
|
||||
#include <base/internal/native_thread.h>
|
||||
#include <base/internal/globals.h>
|
||||
|
||||
using namespace Genode;
|
||||
|
||||
@ -28,8 +29,7 @@ using namespace Genode;
|
||||
** Support for Platform_env_base::Rm_session_mmap **
|
||||
****************************************************/
|
||||
|
||||
Genode::size_t
|
||||
Platform_env_base::Region_map_mmap::_dataspace_size(Dataspace_capability ds)
|
||||
size_t Region_map_mmap::_dataspace_size(Dataspace_capability ds)
|
||||
{
|
||||
if (ds.valid())
|
||||
return Dataspace_client(ds).size();
|
||||
@ -38,31 +38,26 @@ Platform_env_base::Region_map_mmap::_dataspace_size(Dataspace_capability ds)
|
||||
}
|
||||
|
||||
|
||||
int Platform_env_base::Region_map_mmap::_dataspace_fd(Dataspace_capability ds)
|
||||
int Region_map_mmap::_dataspace_fd(Dataspace_capability ds)
|
||||
{
|
||||
return Linux_dataspace_client(ds).fd().dst().socket;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
Platform_env_base::Region_map_mmap::_dataspace_writable(Dataspace_capability ds)
|
||||
bool Region_map_mmap::_dataspace_writable(Dataspace_capability ds)
|
||||
{
|
||||
return Dataspace_client(ds).writable();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/********************************
|
||||
** Platform_env::Local_parent **
|
||||
********************************/
|
||||
/******************
|
||||
** Local_parent **
|
||||
******************/
|
||||
|
||||
static inline size_t get_page_size_log2() { return 12; }
|
||||
|
||||
|
||||
Session_capability
|
||||
Platform_env::Local_parent::session(Service_name const &service_name,
|
||||
Session_args const &args,
|
||||
Affinity const &affinity)
|
||||
Session_capability Local_parent::session(Service_name const &service_name,
|
||||
Session_args const &args,
|
||||
Affinity const &affinity)
|
||||
{
|
||||
if (strcmp(service_name.string(), Rm_session::service_name()) == 0)
|
||||
{
|
||||
@ -75,7 +70,7 @@ Platform_env::Local_parent::session(Service_name const &service_name,
|
||||
}
|
||||
|
||||
|
||||
void Platform_env::Local_parent::close(Session_capability session)
|
||||
void Local_parent::close(Session_capability session)
|
||||
{
|
||||
/*
|
||||
* Handle non-local capabilities
|
||||
@ -94,9 +89,9 @@ void Platform_env::Local_parent::close(Session_capability session)
|
||||
}
|
||||
|
||||
|
||||
Platform_env::Local_parent::Local_parent(Parent_capability parent_cap,
|
||||
Emergency_ram_reserve &reserve,
|
||||
Allocator &alloc)
|
||||
Local_parent::Local_parent(Parent_capability parent_cap,
|
||||
Emergency_ram_reserve &reserve,
|
||||
Allocator &alloc)
|
||||
:
|
||||
Expanding_parent_client(parent_cap, reserve), _alloc(alloc)
|
||||
{ }
|
||||
@ -139,7 +134,7 @@ static Parent_capability obtain_parent_cap()
|
||||
}
|
||||
|
||||
|
||||
Platform_env::Local_parent &Platform_env::_parent()
|
||||
Local_parent &Platform_env::_parent()
|
||||
{
|
||||
static Local_parent local_parent(obtain_parent_cap(), *this, _heap);
|
||||
return local_parent;
|
||||
|
@ -32,6 +32,12 @@
|
||||
* under the terms of the GNU General Public License version 2.
|
||||
*/
|
||||
|
||||
/* Linux includes */
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/mman.h>
|
||||
|
||||
/* Genode includes */
|
||||
#include <base/thread.h>
|
||||
#include <linux_dataspace/client.h>
|
||||
@ -39,7 +45,7 @@
|
||||
|
||||
/* base-internal includes */
|
||||
#include <base/internal/local_capability.h>
|
||||
#include <base/internal/platform_env.h>
|
||||
#include <base/internal/region_map_mmap.h>
|
||||
#include <base/internal/stack_area.h>
|
||||
|
||||
using namespace Genode;
|
||||
@ -54,9 +60,9 @@ static bool is_sub_rm_session(Dataspace_capability ds)
|
||||
}
|
||||
|
||||
|
||||
addr_t Platform_env_base::Region_map_mmap::_reserve_local(bool use_local_addr,
|
||||
addr_t local_addr,
|
||||
Genode::size_t size)
|
||||
addr_t Region_map_mmap::_reserve_local(bool use_local_addr,
|
||||
addr_t local_addr,
|
||||
Genode::size_t size)
|
||||
{
|
||||
/* special handling for stack area */
|
||||
if (use_local_addr
|
||||
@ -101,14 +107,13 @@ addr_t Platform_env_base::Region_map_mmap::_reserve_local(bool use_loc
|
||||
}
|
||||
|
||||
|
||||
void *
|
||||
Platform_env_base::Region_map_mmap::_map_local(Dataspace_capability ds,
|
||||
Genode::size_t size,
|
||||
addr_t offset,
|
||||
bool use_local_addr,
|
||||
addr_t local_addr,
|
||||
bool executable,
|
||||
bool overmap)
|
||||
void *Region_map_mmap::_map_local(Dataspace_capability ds,
|
||||
Genode::size_t size,
|
||||
addr_t offset,
|
||||
bool use_local_addr,
|
||||
addr_t local_addr,
|
||||
bool executable,
|
||||
bool overmap)
|
||||
{
|
||||
int const fd = _dataspace_fd(ds);
|
||||
bool const writable = _dataspace_writable(ds);
|
||||
@ -143,7 +148,7 @@ Platform_env_base::Region_map_mmap::_map_local(Dataspace_capability ds,
|
||||
}
|
||||
|
||||
|
||||
void Platform_env::Region_map_mmap::_add_to_rmap(Region const ®ion)
|
||||
void Region_map_mmap::_add_to_rmap(Region const ®ion)
|
||||
{
|
||||
if (_rmap.add_region(region) < 0) {
|
||||
PERR("_add_to_rmap: could not add region to sub RM session");
|
||||
@ -152,12 +157,11 @@ void Platform_env::Region_map_mmap::_add_to_rmap(Region const ®ion)
|
||||
}
|
||||
|
||||
|
||||
Region_map::Local_addr
|
||||
Platform_env::Region_map_mmap::attach(Dataspace_capability ds,
|
||||
size_t size, off_t offset,
|
||||
bool use_local_addr,
|
||||
Region_map::Local_addr local_addr,
|
||||
bool executable)
|
||||
Region_map::Local_addr Region_map_mmap::attach(Dataspace_capability ds,
|
||||
size_t size, off_t offset,
|
||||
bool use_local_addr,
|
||||
Region_map::Local_addr local_addr,
|
||||
bool executable)
|
||||
{
|
||||
Lock::Guard lock_guard(_lock);
|
||||
|
||||
@ -299,7 +303,7 @@ Platform_env::Region_map_mmap::attach(Dataspace_capability ds,
|
||||
}
|
||||
|
||||
|
||||
void Platform_env::Region_map_mmap::detach(Region_map::Local_addr local_addr)
|
||||
void Region_map_mmap::detach(Region_map::Local_addr local_addr)
|
||||
{
|
||||
Lock::Guard lock_guard(_lock);
|
||||
|
||||
|
Reference in New Issue
Block a user