From e2cbc7c5b37cd95fd2284d40f84b2b18bcc49851 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Tue, 17 Mar 2015 13:28:20 +0100 Subject: [PATCH] base: unify some irq_session headers remove repos/base-*/include/irq_session headers and use only a unification from repos/base/include/irq_session first step Issue #1456 --- repos/base-codezero/lib/mk/base.mk | 1 + .../src/core/include/irq_session_component.h | 3 +- .../src/core/irq_session_component.cc | 6 ++ repos/base-fiasco/lib/mk/base.mk | 1 + .../src/core/irq_session_component.cc | 6 ++ repos/base-foc/lib/mk/base.mk | 1 + .../src/core/include/irq_session_component.h | 3 +- .../src/core/irq_session_component.cc | 7 ++ repos/base-hw/include/irq_session/client.h | 62 -------------- .../base-hw/include/irq_session/irq_session.h | 82 ------------------- repos/base-hw/lib/mk/base.mk | 1 + repos/base-hw/src/base/irq/platform.cc | 23 ++++++ repos/base-nova/lib/mk/base.mk | 1 + .../src/core/include/irq_session_component.h | 3 +- .../src/core/irq_session_component.cc | 7 ++ repos/base-okl4/lib/mk/base.mk | 1 + .../src/core/irq_session_component.cc | 6 ++ repos/base-pistachio/lib/mk/base.mk | 1 + .../src/core/irq_session_component.cc | 6 ++ repos/base/include/irq_session/client.h | 32 +++++++- repos/base/include/irq_session/irq_session.h | 43 ++++++++-- repos/base/src/base/irq/platform.cc | 19 +++++ .../src/core/include/irq_session_component.h | 3 +- 23 files changed, 161 insertions(+), 157 deletions(-) delete mode 100644 repos/base-hw/include/irq_session/client.h delete mode 100644 repos/base-hw/include/irq_session/irq_session.h create mode 100644 repos/base-hw/src/base/irq/platform.cc create mode 100644 repos/base/src/base/irq/platform.cc diff --git a/repos/base-codezero/lib/mk/base.mk b/repos/base-codezero/lib/mk/base.mk index 7aea3ba229..5d5fee3353 100644 --- a/repos/base-codezero/lib/mk/base.mk +++ b/repos/base-codezero/lib/mk/base.mk @@ -2,6 +2,7 @@ SRC_CC += console/log_console.cc SRC_CC += cpu/cache.cc SRC_CC += env/env.cc env/context_area.cc env/reinitialize.cc SRC_CC += thread/thread_start.cc +SRC_CC += irq/platform.cc INC_DIR += $(BASE_DIR)/src/base/env INC_DIR += $(REP_DIR)/include/codezero/dummies diff --git a/repos/base-codezero/src/core/include/irq_session_component.h b/repos/base-codezero/src/core/include/irq_session_component.h index 02fbabfe42..734de0531f 100644 --- a/repos/base-codezero/src/core/include/irq_session_component.h +++ b/repos/base-codezero/src/core/include/irq_session_component.h @@ -64,7 +64,8 @@ namespace Genode { ** Irq session interface ** ***************************/ - void wait_for_irq(); + void wait_for_irq(); + Irq_signal signal(); }; } diff --git a/repos/base-codezero/src/core/irq_session_component.cc b/repos/base-codezero/src/core/irq_session_component.cc index 3db8af7ae5..6a6d3556fd 100644 --- a/repos/base-codezero/src/core/irq_session_component.cc +++ b/repos/base-codezero/src/core/irq_session_component.cc @@ -70,3 +70,9 @@ Irq_session_component::~Irq_session_component() PERR("not yet implemented"); } + +Irq_signal Irq_session_component::signal() +{ + PDBG("not implemented;"); + return Irq_signal(); +} diff --git a/repos/base-fiasco/lib/mk/base.mk b/repos/base-fiasco/lib/mk/base.mk index 2ea9bfcab0..5d0f684c33 100644 --- a/repos/base-fiasco/lib/mk/base.mk +++ b/repos/base-fiasco/lib/mk/base.mk @@ -10,6 +10,7 @@ SRC_CC += console/log_console.cc SRC_CC += cpu/cache.cc SRC_CC += env/env.cc env/context_area.cc env/reinitialize.cc SRC_CC += thread/thread_start.cc +SRC_CC += irq/platform.cc INC_DIR += $(BASE_DIR)/src/base/env diff --git a/repos/base-fiasco/src/core/irq_session_component.cc b/repos/base-fiasco/src/core/irq_session_component.cc index 68935bd48f..e7b738a863 100644 --- a/repos/base-fiasco/src/core/irq_session_component.cc +++ b/repos/base-fiasco/src/core/irq_session_component.cc @@ -120,3 +120,9 @@ Irq_session_component::~Irq_session_component() PERR("Implement me, immediately!"); } + +Irq_signal Irq_session_component::signal() +{ + PDBG("not implemented;"); + return Irq_signal(); +} diff --git a/repos/base-foc/lib/mk/base.mk b/repos/base-foc/lib/mk/base.mk index 44aa19f3ec..451da5bcb4 100644 --- a/repos/base-foc/lib/mk/base.mk +++ b/repos/base-foc/lib/mk/base.mk @@ -11,6 +11,7 @@ SRC_CC += cpu/cache.cc SRC_CC += env/env.cc env/context_area.cc env/reinitialize.cc \ env/cap_map_remove.cc env/cap_alloc.cc SRC_CC += thread/thread_start.cc +SRC_CC += irq/platform.cc INC_DIR += $(BASE_DIR)/src/base/env diff --git a/repos/base-foc/src/core/include/irq_session_component.h b/repos/base-foc/src/core/include/irq_session_component.h index 2d5277424f..b6f4bf5ed1 100644 --- a/repos/base-foc/src/core/include/irq_session_component.h +++ b/repos/base-foc/src/core/include/irq_session_component.h @@ -70,7 +70,8 @@ namespace Genode { ** Irq session interface ** ***************************/ - void wait_for_irq(); + void wait_for_irq(); + Irq_signal signal(); }; } diff --git a/repos/base-foc/src/core/irq_session_component.cc b/repos/base-foc/src/core/irq_session_component.cc index b3a8196b34..deb058b03d 100644 --- a/repos/base-foc/src/core/irq_session_component.cc +++ b/repos/base-foc/src/core/irq_session_component.cc @@ -220,6 +220,13 @@ Irq_session_component::~Irq_session_component() { _proxy->remove_sharer(); } +Irq_signal Irq_session_component::signal() +{ + PDBG("not implemented;"); + return Irq_signal(); +} + + /*************************************** ** Interrupt handler implemtentation ** ***************************************/ diff --git a/repos/base-hw/include/irq_session/client.h b/repos/base-hw/include/irq_session/client.h deleted file mode 100644 index 8a417d9890..0000000000 --- a/repos/base-hw/include/irq_session/client.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * \brief Client-side IRQ session interface - * \author Martin Stein - * \date 2013-10-24 - */ - -/* - * Copyright (C) 2013 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 _IRQ_SESSION__CLIENT_H_ -#define _IRQ_SESSION__CLIENT_H_ - -/* Genode includes */ -#include -#include - -namespace Genode -{ - /** - * Client-side IRQ session interface - */ - struct Irq_session_client : Rpc_client - { - /* - * FIXME: This is used only client-internal and could thus be protected. - */ - Irq_signal const irq_signal; - - /** - * Constructor - * - * \param session pointer to the session backend - */ - explicit Irq_session_client(Irq_session_capability const & session) - : - Rpc_client(session), - irq_signal(signal()) - { } - - - /***************** - ** Irq_session ** - *****************/ - - Irq_signal signal() { return call(); } - - void wait_for_irq() - { - while (Kernel::await_signal(irq_signal.receiver_id, - irq_signal.context_id)) - { - PERR("failed to receive interrupt"); - } - } - }; -} - -#endif /* _IRQ_SESSION__CLIENT_H_ */ diff --git a/repos/base-hw/include/irq_session/irq_session.h b/repos/base-hw/include/irq_session/irq_session.h deleted file mode 100644 index 9060257e23..0000000000 --- a/repos/base-hw/include/irq_session/irq_session.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * \brief IRQ session interface - * \author Martin Stein - * \date 2013-10-24 - */ - -/* - * Copyright (C) 2013 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 _IRQ_SESSION__IRQ_SESSION_H_ -#define _IRQ_SESSION__IRQ_SESSION_H_ - -/* Genode includes */ -#include -#include - -namespace Genode -{ - /** - * Information that enables a user to await and ack an IRQ directly - */ - struct Irq_signal - { - unsigned receiver_id; - unsigned context_id; - }; - - /** - * IRQ session interface - */ - struct Irq_session : Session - { - /** - * Interrupt trigger - */ - enum Trigger { TRIGGER_UNCHANGED = 0, TRIGGER_LEVEL, TRIGGER_EDGE }; - - /** - * Interrupt trigger polarity - */ - enum Polarity { POLARITY_UNCHANGED = 0, POLARITY_HIGH, POLARITY_LOW }; - - /** - * Destructor - */ - virtual ~Irq_session() { } - - /** - * Await the next occurence of the interrupt of this session - */ - virtual void wait_for_irq() = 0; - - /** - * Get information for direct interrupt handling - * - * FIXME: This is used only client-internal and could thus be protected. - */ - virtual Irq_signal signal() = 0; - - - /************* - ** Session ** - *************/ - - static const char * service_name() { return "IRQ"; } - - - /********************* - ** RPC declaration ** - *********************/ - - GENODE_RPC(Rpc_wait_for_irq, void, wait_for_irq); - GENODE_RPC(Rpc_signal, Irq_signal, signal); - GENODE_RPC_INTERFACE(Rpc_wait_for_irq, Rpc_signal); - }; -} - -#endif /* _IRQ_SESSION__IRQ_SESSION_H_ */ diff --git a/repos/base-hw/lib/mk/base.mk b/repos/base-hw/lib/mk/base.mk index b7592142ce..a1ac85df7a 100644 --- a/repos/base-hw/lib/mk/base.mk +++ b/repos/base-hw/lib/mk/base.mk @@ -15,6 +15,7 @@ SRC_CC += env/context_area.cc SRC_CC += env/reinitialize.cc SRC_CC += thread/thread.cc SRC_CC += thread/start.cc +SRC_CC += irq/platform.cc # add include paths INC_DIR += $(BASE_DIR)/src/base/env diff --git a/repos/base-hw/src/base/irq/platform.cc b/repos/base-hw/src/base/irq/platform.cc new file mode 100644 index 0000000000..181ff2f7e7 --- /dev/null +++ b/repos/base-hw/src/base/irq/platform.cc @@ -0,0 +1,23 @@ +/* + * \brief Client-side IRQ session interface - specific for base-hw + * \author Martin Stein + * \date 2013-10-24 + */ + +/* + * Copyright (C) 2013-2015 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. + */ + +#include + +void Genode::Irq_session_client::wait_for_irq() +{ + while (Kernel::await_signal(irq_signal.receiver_id, + irq_signal.context_id)) + { + PERR("failed to receive interrupt"); + } +} diff --git a/repos/base-nova/lib/mk/base.mk b/repos/base-nova/lib/mk/base.mk index 0b1ce6a00b..a471e689ad 100644 --- a/repos/base-nova/lib/mk/base.mk +++ b/repos/base-nova/lib/mk/base.mk @@ -10,6 +10,7 @@ SRC_CC += console/log_console.cc SRC_CC += cpu/cache.cc SRC_CC += env/env.cc env/context_area.cc env/reinitialize.cc SRC_CC += thread/thread_nova.cc +SRC_CC += irq/platform.cc INC_DIR += $(BASE_DIR)/src/base/env diff --git a/repos/base-nova/src/core/include/irq_session_component.h b/repos/base-nova/src/core/include/irq_session_component.h index 9c4e94885d..89dd6d8335 100644 --- a/repos/base-nova/src/core/include/irq_session_component.h +++ b/repos/base-nova/src/core/include/irq_session_component.h @@ -67,7 +67,8 @@ namespace Genode { ** Irq session interface ** ***************************/ - void wait_for_irq(); + void wait_for_irq(); + Irq_signal signal(); }; } diff --git a/repos/base-nova/src/core/irq_session_component.cc b/repos/base-nova/src/core/irq_session_component.cc index f63d93c01a..61aab161c3 100644 --- a/repos/base-nova/src/core/irq_session_component.cc +++ b/repos/base-nova/src/core/irq_session_component.cc @@ -203,3 +203,10 @@ Irq_session_component::Irq_session_component(Cap_session *cap_session, Irq_session_component::~Irq_session_component() { } + + +Irq_signal Irq_session_component::signal() +{ + PDBG("not implemented;"); + return Irq_signal(); +} diff --git a/repos/base-okl4/lib/mk/base.mk b/repos/base-okl4/lib/mk/base.mk index 91ace83206..007e2e20ff 100644 --- a/repos/base-okl4/lib/mk/base.mk +++ b/repos/base-okl4/lib/mk/base.mk @@ -2,6 +2,7 @@ SRC_CC += console/log_console.cc SRC_CC += cpu/cache.cc SRC_CC += env/env.cc env/context_area.cc env/reinitialize.cc SRC_CC += thread/thread_start.cc +SRC_CC += irq/platform.cc vpath %.cc $(REP_DIR)/src/base vpath %.cc $(BASE_DIR)/src/base diff --git a/repos/base-okl4/src/core/irq_session_component.cc b/repos/base-okl4/src/core/irq_session_component.cc index 625acfd4a1..5806b6c41e 100644 --- a/repos/base-okl4/src/core/irq_session_component.cc +++ b/repos/base-okl4/src/core/irq_session_component.cc @@ -175,3 +175,9 @@ Irq_session_component::~Irq_session_component() /* TODO del_sharer() resp. put_sharer() */ } + +Irq_signal Irq_session_component::signal() +{ + PDBG("not implemented;"); + return Irq_signal(); +} diff --git a/repos/base-pistachio/lib/mk/base.mk b/repos/base-pistachio/lib/mk/base.mk index 2ea9bfcab0..5d0f684c33 100644 --- a/repos/base-pistachio/lib/mk/base.mk +++ b/repos/base-pistachio/lib/mk/base.mk @@ -10,6 +10,7 @@ SRC_CC += console/log_console.cc SRC_CC += cpu/cache.cc SRC_CC += env/env.cc env/context_area.cc env/reinitialize.cc SRC_CC += thread/thread_start.cc +SRC_CC += irq/platform.cc INC_DIR += $(BASE_DIR)/src/base/env diff --git a/repos/base-pistachio/src/core/irq_session_component.cc b/repos/base-pistachio/src/core/irq_session_component.cc index 237f56a3be..df67eb1f39 100644 --- a/repos/base-pistachio/src/core/irq_session_component.cc +++ b/repos/base-pistachio/src/core/irq_session_component.cc @@ -132,3 +132,9 @@ Irq_session_component::~Irq_session_component() } } + +Irq_signal Irq_session_component::signal() +{ + PDBG("not implemented;"); + return Irq_signal(); +} diff --git a/repos/base/include/irq_session/client.h b/repos/base/include/irq_session/client.h index 4c89967119..c19218aef0 100644 --- a/repos/base/include/irq_session/client.h +++ b/repos/base/include/irq_session/client.h @@ -1,6 +1,7 @@ /* * \brief Client-side IRQ session interface * \author Christian Helmuth + * \author Martin Stein * \date 2007-09-13 */ @@ -14,18 +15,41 @@ #ifndef _INCLUDE__IRQ_SESSION__CLIENT_H_ #define _INCLUDE__IRQ_SESSION__CLIENT_H_ +/* Genode includes */ #include #include namespace Genode { struct Irq_session_client; } - +/** + * Client-side IRQ session interface + */ struct Genode::Irq_session_client : Rpc_client { - explicit Irq_session_client(Irq_session_capability session) - : Rpc_client(session) { } + /* + * FIXME: This is used only client-internal and could thus be protected. + */ + Irq_signal const irq_signal; - void wait_for_irq() override { call(); } + /** + * Constructor + * + * \param session pointer to the session backend + */ + explicit Irq_session_client(Irq_session_capability const & session) + : + Rpc_client(session), + irq_signal(signal()) + { } + + + /***************** + ** Irq_session ** + *****************/ + + Irq_signal signal() override { return call(); } + + void wait_for_irq() override; }; #endif /* _INCLUDE__IRQ_SESSION__CLIENT_H_ */ diff --git a/repos/base/include/irq_session/irq_session.h b/repos/base/include/irq_session/irq_session.h index d3a03e51cb..0fd7c1955f 100644 --- a/repos/base/include/irq_session/irq_session.h +++ b/repos/base/include/irq_session/irq_session.h @@ -1,6 +1,7 @@ /* * \brief IRQ session interface * \author Christian Helmuth + * \author Martin Stein * \date 2007-09-13 * * An open IRQ session represents a valid IRQ attachment/association. @@ -12,7 +13,7 @@ */ /* - * Copyright (C) 2007-2013 Genode Labs GmbH + * Copyright (C) 2007-2015 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. @@ -24,7 +25,20 @@ #include #include -namespace Genode { struct Irq_session; } +namespace Genode { + struct Irq_session; + struct Irq_signal; +} + + +/** + * Information that enables a user to await and ack an IRQ directly + */ +struct Genode::Irq_signal +{ + unsigned receiver_id; + unsigned context_id; +}; struct Genode::Irq_session : Session @@ -39,19 +53,38 @@ struct Genode::Irq_session : Session */ enum Polarity { POLARITY_UNCHANGED = 0, POLARITY_HIGH, POLARITY_LOW }; - static const char *service_name() { return "IRQ"; } - + /** + * Destructor + */ virtual ~Irq_session() { } + /** + * Await the next occurence of the interrupt of this session + */ virtual void wait_for_irq() = 0; + /** + * Get information for direct interrupt handling + * + * FIXME: This is used only client-internal and could thus be protected. + */ + virtual Irq_signal signal() = 0; + + + /************* + ** Session ** + *************/ + + static const char * service_name() { return "IRQ"; } + /********************* ** RPC declaration ** *********************/ GENODE_RPC(Rpc_wait_for_irq, void, wait_for_irq); - GENODE_RPC_INTERFACE(Rpc_wait_for_irq); + GENODE_RPC(Rpc_signal, Irq_signal, signal); + GENODE_RPC_INTERFACE(Rpc_wait_for_irq, Rpc_signal); }; #endif /* _INCLUDE__IRQ_SESSION__IRQ_SESSION_H_ */ diff --git a/repos/base/src/base/irq/platform.cc b/repos/base/src/base/irq/platform.cc new file mode 100644 index 0000000000..e2bc9cd7c8 --- /dev/null +++ b/repos/base/src/base/irq/platform.cc @@ -0,0 +1,19 @@ +/* + * \brief Generic implementation parts of the irq framework which are + * implemented platform specifically, e.g. base-hw. + * \author Alexander Boettcher + */ + +/* + * Copyright (C) 2015 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. + */ + +#include + +void Genode::Irq_session_client::wait_for_irq() +{ + call(); +} diff --git a/repos/base/src/core/include/irq_session_component.h b/repos/base/src/core/include/irq_session_component.h index 723ad40620..ea016af2a6 100644 --- a/repos/base/src/core/include/irq_session_component.h +++ b/repos/base/src/core/include/irq_session_component.h @@ -133,7 +133,8 @@ namespace Genode { ** Irq session interface ** ***************************/ - void wait_for_irq(); + void wait_for_irq(); + Irq_signal signal(); }; }