From 664e0dc7cd1c9cf6b108bbc942048d7c272cefd1 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Wed, 10 Oct 2012 13:05:54 +0200 Subject: [PATCH] Provide cpu_session_cap via environment object Preparation to solve issue #10 --- base-linux/include/base/platform_env.h | 5 ++++- base-okl4/src/test/mini_env.h | 2 ++ base/include/base/env.h | 2 ++ base/include/base/platform_env.h | 5 ++++- base/src/base/child/child.cc | 6 ++++++ base/src/core/include/core_env.h | 6 ++++++ 6 files changed, 24 insertions(+), 2 deletions(-) diff --git a/base-linux/include/base/platform_env.h b/base-linux/include/base/platform_env.h index 71655640b6..8daf7b64a4 100644 --- a/base-linux/include/base/platform_env.h +++ b/base-linux/include/base/platform_env.h @@ -338,6 +338,7 @@ namespace Genode { Local_parent _parent; Ram_session_capability _ram_session_cap; Expanding_ram_session_client _ram_session_client; + Cpu_session_capability _cpu_session_cap; Cpu_session_client _cpu_session_client; Rm_session_mmap _rm_session_mmap; Heap _heap; @@ -352,7 +353,8 @@ namespace Genode { _parent(_parent_cap()), _ram_session_cap(static_cap_cast(parent()->session("Env::ram_session", ""))), _ram_session_client(_ram_session_cap), - _cpu_session_client(static_cap_cast(parent()->session("Env::cpu_session", ""))), + _cpu_session_cap(static_cap_cast(parent()->session("Env::cpu_session", ""))), + _cpu_session_client(_cpu_session_cap), _rm_session_mmap(false), _heap(&_ram_session_client, &_rm_session_mmap) { } @@ -381,6 +383,7 @@ namespace Genode { Rm_session *rm_session() { return &_rm_session_mmap; } Heap *heap() { return &_heap; } Cpu_session *cpu_session() { return &_cpu_session_client; } + Cpu_session_capability cpu_session_cap() { return _cpu_session_cap; } Pd_session *pd_session() { return 0; } }; } diff --git a/base-okl4/src/test/mini_env.h b/base-okl4/src/test/mini_env.h index b633048aa8..f8a50f909d 100644 --- a/base-okl4/src/test/mini_env.h +++ b/base-okl4/src/test/mini_env.h @@ -61,6 +61,8 @@ class Minimal_env : public Genode::Env Genode::Ram_session_capability ram_session_cap() { return Genode::Ram_session_capability(); } + Genode::Cpu_session_capability cpu_session_cap() { + return Genode::Cpu_session_capability(); } }; diff --git a/base/include/base/env.h b/base/include/base/env.h index 00237917b7..2145d34d80 100644 --- a/base/include/base/env.h +++ b/base/include/base/env.h @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -56,6 +57,7 @@ namespace Genode { * This session is used to create threads. */ virtual Cpu_session *cpu_session() = 0; + virtual Cpu_session_capability cpu_session_cap() = 0; /** * Region manager session of the program diff --git a/base/include/base/platform_env.h b/base/include/base/platform_env.h index f72a42a494..d45bfe0979 100644 --- a/base/include/base/platform_env.h +++ b/base/include/base/platform_env.h @@ -112,6 +112,7 @@ namespace Genode { { Ram_session_capability ram_cap; Expanding_ram_session_client ram; + Cpu_session_capability cpu_cap; Cpu_session_client cpu; Expanding_rm_session_client rm; Pd_session_client pd; @@ -120,7 +121,8 @@ namespace Genode { : ram_cap(static_cap_cast(parent.session("Env::ram_session", ""))), ram(ram_cap), - cpu(static_cap_cast(parent.session("Env::cpu_session", ""))), + cpu_cap(static_cap_cast(parent.session("Env::cpu_session", ""))), + cpu(cpu_cap), rm(static_cap_cast(parent.session("Env::rm_session", ""))), pd(static_cap_cast(parent.session("Env::pd_session", ""))) { } @@ -168,6 +170,7 @@ namespace Genode { Ram_session *ram_session() { return &_resources.ram; } Ram_session_capability ram_session_cap() { return _resources.ram_cap; } Cpu_session *cpu_session() { return &_resources.cpu; } + Cpu_session_capability cpu_session_cap() { return _resources.cpu_cap; } Rm_session *rm_session() { return &_resources.rm; } Pd_session *pd_session() { return &_resources.pd; } Allocator *heap() { return &_heap; } diff --git a/base/src/base/child/child.cc b/base/src/base/child/child.cc index 3dae88c92d..00b209dfe0 100644 --- a/base/src/base/child/child.cc +++ b/base/src/base/child/child.cc @@ -407,6 +407,12 @@ void Child::exit(int exit_value) } +Thread_capability Child::main_thread_cap() const +{ + return _process.main_thread_cap(); +} + + Child::Child(Dataspace_capability elf_ds, Ram_session_capability ram, Cpu_session_capability cpu, diff --git a/base/src/core/include/core_env.h b/base/src/core/include/core_env.h index 9dbb0ab8cb..7c9b0fa62f 100644 --- a/base/src/core/include/core_env.h +++ b/base/src/core/include/core_env.h @@ -163,6 +163,12 @@ namespace Genode { return 0; } + + Cpu_session_capability cpu_session_cap() { + PWRN("not implemented"); + return Cpu_session_capability(); + } + Pd_session *pd_session() { PWRN("not implemented");