diff --git a/repos/base-hw/src/core/include/irq_session_component.h b/repos/base-hw/src/core/include/irq_session_component.h index ce0ed8297..d81a699e2 100644 --- a/repos/base-hw/src/core/include/irq_session_component.h +++ b/repos/base-hw/src/core/include/irq_session_component.h @@ -31,6 +31,8 @@ class Genode::Irq_session_component : public Rpc_object, unsigned _irq_number; Range_allocator *_irq_alloc; Genode::uint8_t _kernel_object[sizeof(Kernel::User_irq)]; + bool _is_msi; + addr_t _address, _value; Signal_context_capability _sig_cap; @@ -58,8 +60,16 @@ class Genode::Irq_session_component : public Rpc_object, void ack_irq() override; void sigh(Signal_context_capability) override; - Info info() override { - return { .type = Genode::Irq_session::Info::Type::INVALID }; } + + Info info() override + { + if (!_is_msi) { + return { .type = Info::Type::INVALID }; + } + return { .type = Info::Type::MSI, + .address = _address, + .value = _value }; + } }; #endif /* _INCLUDE__IRQ_SESSION_COMPONENT_H_ */ diff --git a/repos/base-hw/src/core/irq_session_component.cc b/repos/base-hw/src/core/irq_session_component.cc index 6c8868d66..acdba3094 100644 --- a/repos/base-hw/src/core/irq_session_component.cc +++ b/repos/base-hw/src/core/irq_session_component.cc @@ -66,7 +66,8 @@ Irq_session_component::~Irq_session_component() Irq_session_component::Irq_session_component(Range_allocator * const irq_alloc, const char * const args) : - _irq_number(Platform::irq(_find_irq_number(args))), _irq_alloc(irq_alloc) + _irq_number(Platform::irq(_find_irq_number(args))), _irq_alloc(irq_alloc), + _is_msi(false), _address(0), _value(0) { long const msi = Arg_string::find_arg(args, "device_config_phys").long_value(0); if (msi)