mirror of
https://github.com/genodelabs/genode.git
synced 2025-06-01 23:20:55 +00:00
parent
52110b9d89
commit
4f927f651b
@ -25,7 +25,17 @@ class Genode::Irq_root : public Root_component<Irq_session_component>
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
Range_allocator *_irq_alloc; /* platform irq allocator */
|
/*
|
||||||
|
* Use a dedicated entrypoint for IRQ session to decouple the interrupt
|
||||||
|
* handling from other core services. If we used the same entrypoint, a
|
||||||
|
* long-running operation (like allocating and clearing a dataspace
|
||||||
|
* from the RAM service) would delay the response to time-critical
|
||||||
|
* calls of the 'Irq_session::ack_irq' function.
|
||||||
|
*/
|
||||||
|
enum { STACK_SIZE = sizeof(long)*1024 };
|
||||||
|
Rpc_entrypoint _session_ep;
|
||||||
|
|
||||||
|
Range_allocator *_irq_alloc; /* platform irq allocator */
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
@ -37,15 +47,17 @@ class Genode::Irq_root : public Root_component<Irq_session_component>
|
|||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*
|
*
|
||||||
* \param session_ep entry point for managing irq session objects
|
* \param cap_session capability allocator
|
||||||
* \param irq_alloc IRQ range that can be assigned to clients
|
* \param irq_alloc IRQ range that can be assigned to clients
|
||||||
* \param md_alloc meta-data allocator to be used by root component
|
* \param md_alloc meta-data allocator to be used by root component
|
||||||
*/
|
*/
|
||||||
Irq_root(Rpc_entrypoint *session_ep, Range_allocator *irq_alloc,
|
Irq_root(Cap_session *cap_session,
|
||||||
Allocator *md_alloc)
|
Range_allocator *irq_alloc, Allocator *md_alloc)
|
||||||
:
|
:
|
||||||
Root_component<Irq_session_component>(session_ep, md_alloc),
|
Root_component<Irq_session_component>(&_session_ep, md_alloc),
|
||||||
_irq_alloc(irq_alloc) { }
|
_session_ep(cap_session, STACK_SIZE, "irq"),
|
||||||
|
_irq_alloc(irq_alloc)
|
||||||
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* _CORE__INCLUDE__IRQ_ROOT_H_ */
|
#endif /* _CORE__INCLUDE__IRQ_ROOT_H_ */
|
||||||
|
@ -224,7 +224,8 @@ int main()
|
|||||||
static Log_root log_root (e, &sliced_heap);
|
static Log_root log_root (e, &sliced_heap);
|
||||||
static Io_mem_root io_mem_root (e, e, platform()->io_mem_alloc(),
|
static Io_mem_root io_mem_root (e, e, platform()->io_mem_alloc(),
|
||||||
platform()->ram_alloc(), &sliced_heap);
|
platform()->ram_alloc(), &sliced_heap);
|
||||||
static Irq_root irq_root (e, platform()->irq_alloc(), &sliced_heap);
|
static Irq_root irq_root (core_env()->cap_session(),
|
||||||
|
platform()->irq_alloc(), &sliced_heap);
|
||||||
static Trace::Root trace_root (e, &sliced_heap, trace_sources, trace_policies);
|
static Trace::Root trace_root (e, &sliced_heap, trace_sources, trace_policies);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user