mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-19 13:47:56 +00:00
hw: Add MSI variables to Irq_session_component
Extend the base-hw Irq_session_component class with _is_msi, _address and _value variables required to support MSI mode of operation. Return MSI configuration in info() function if _is_msi is set to true.
This commit is contained in:
parent
f1d2d7251d
commit
11ee72eaa6
@ -31,6 +31,8 @@ class Genode::Irq_session_component : public Rpc_object<Irq_session>,
|
||||
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<Irq_session>,
|
||||
|
||||
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_ */
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user