mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-21 02:01:38 +00:00
parent
2dbf3322d8
commit
5253d4ddd7
@ -119,8 +119,8 @@ Genode::Irq_session_capability Device_component::irq(unsigned idx)
|
||||
if (irq.shared && !irq.sirq.constructed())
|
||||
_device_model.with_shared_irq(irq.number,
|
||||
[&] (Shared_interrupt & sirq) {
|
||||
irq.sirq.construct(sirq, irq.mode, irq.polarity);
|
||||
_env.ep().rpc_ep().manage(&*irq.sirq);
|
||||
irq.sirq.construct(_env.ep().rpc_ep(), sirq,
|
||||
irq.mode, irq.polarity);
|
||||
});
|
||||
|
||||
cap = irq.shared ? irq.sirq->cap() : irq.irq->cap();
|
||||
|
@ -67,23 +67,31 @@ class Driver::Shared_interrupt_session :
|
||||
{
|
||||
private:
|
||||
|
||||
Rpc_entrypoint & _ep;
|
||||
Shared_interrupt & _sirq;
|
||||
Signal_context_capability _cap {};
|
||||
bool _outstanding { true };
|
||||
|
||||
public:
|
||||
|
||||
Shared_interrupt_session(Shared_interrupt & sirq,
|
||||
Shared_interrupt_session(Rpc_entrypoint &ep,
|
||||
Shared_interrupt &sirq,
|
||||
Irq_session::Trigger mode,
|
||||
Irq_session::Polarity polarity)
|
||||
:
|
||||
Registry<Shared_interrupt_session>::Element(sirq._sessions, *this),
|
||||
_ep(ep),
|
||||
_sirq(sirq)
|
||||
{
|
||||
sirq.enable(mode, polarity);
|
||||
_ep.manage(this);
|
||||
}
|
||||
|
||||
~Shared_interrupt_session() { _sirq.disable(); }
|
||||
~Shared_interrupt_session()
|
||||
{
|
||||
_ep.dissolve(this);
|
||||
_sirq.disable();
|
||||
}
|
||||
|
||||
bool outstanding() { return _outstanding; }
|
||||
void signal();
|
||||
|
Loading…
x
Reference in New Issue
Block a user