48class Irq_eoi :
public Kobject_0t<Irq_eoi, L4::PROTO_EMPTY>
79 return l4_icu_control_u(cap(), irqnum, L4_ICU_CTL_UNMASK, label, to, utcb);
131class Irq :
public Kobject_2t<Irq, Triggerable, Rcv_endpoint, L4_PROTO_IRQ_SENDER>
178 {
return unmask(-1, label, timeout, utcb); }
258 public Kobject_t<Icu, Irq_eoi, L4_PROTO_IRQ,
259 Type_info::Demand_t<1> >
354 struct _Info {
l4_umword_t features, nr_irqs, nr_msis; };
378 {
return l4_icu_control_u(cap(), irqnum, op, label, to, utcb); }
437 bind_t, unbind_t, info_t, msi_info_t, unmask_t, mask_t, set_mode_t
L4::Cap related definitions.
l4_cap_idx_t cap() const noexcept
Return capability selector.
C++ interface for capabilities.
This class encapsulates information about an ICU.
bool supports_msi() const noexcept
True, if the ICU has support for MSIs.
C++ Icu interface, see Interrupt controller for the C interface.
l4_msgtag_t msi_info(l4_umword_t irqnum, l4_uint64_t source, l4_icu_msi_info_t *msi_info)
Get MSI info about IRQ.
l4_msgtag_t info(l4_icu_info_t *info, l4_utcb_t *utcb=l4_utcb()) noexcept
Get information about the ICU features.
l4_msgtag_t set_mode(unsigned irqnum, l4_umword_t mode, l4_utcb_t *utcb=l4_utcb()) noexcept
Set interrupt mode.
l4_msgtag_t unbind(unsigned irqnum, L4::Cap< Triggerable > irq, l4_utcb_t *utcb=l4_utcb()) noexcept
Remove binding of an interrupt line from the interrupt controller object.
l4_msgtag_t mask(unsigned irqnum, l4_umword_t *label=0, l4_timeout_t to=L4_IPC_NEVER, l4_utcb_t *utcb=l4_utcb()) noexcept
Mask an IRQ line.
l4_msgtag_t bind(unsigned irqnum, L4::Cap< Triggerable > irq, l4_utcb_t *utcb=l4_utcb()) noexcept
Bind an interrupt line of an interrupt controller to an interrupt object.
Capability type for RPC interfaces (see L4::Cap<T>).
Interface for sending an unmask message to an object.
l4_msgtag_t unmask(unsigned irqnum, l4_umword_t *label=0, l4_timeout_t to=L4_IPC_NEVER, l4_utcb_t *utcb=l4_utcb()) noexcept
Unmask the given interrupt line.
C++ Irq interface, see IRQs for the C interface.
l4_msgtag_t detach(l4_utcb_t *utcb=l4_utcb()) noexcept
Detach from this interrupt.
l4_msgtag_t wait(l4_umword_t *label, l4_timeout_t timeout=L4_IPC_NEVER, l4_utcb_t *utcb=l4_utcb()) noexcept
Unmask IRQ and (open) wait for any message.
l4_msgtag_t unmask(l4_utcb_t *utcb=l4_utcb()) noexcept
Unmask this IRQ.
l4_msgtag_t receive(l4_timeout_t timeout=L4_IPC_NEVER, l4_utcb_t *utcb=l4_utcb()) noexcept
Unmask and wait for this IRQ.
Helper class to create an L4Re interface class that is derived from two base classes (see L4::Kobject...
Helper class to create an L4Re interface class that is derived from a single base class.
unsigned long l4_umword_t
Unsigned machine word.
unsigned long long l4_uint64_t
Unsigned 64bit value.
l4_msgtag_t l4_icu_bind_u(l4_cap_idx_t icu, unsigned irqnum, l4_cap_idx_t irq, l4_utcb_t *utcb) L4_NOTHROW
Bind an interrupt line of an interrupt controller to an interrupt object.
l4_msgtag_t l4_icu_info_u(l4_cap_idx_t icu, l4_icu_info_t *info, l4_utcb_t *utcb) L4_NOTHROW
Get information about the ICU features.
l4_msgtag_t l4_icu_set_mode_u(l4_cap_idx_t icu, unsigned irqnum, l4_umword_t mode, l4_utcb_t *utcb) L4_NOTHROW
Set interrupt mode.
l4_msgtag_t l4_icu_mask_u(l4_cap_idx_t icu, unsigned irqnum, l4_umword_t *label, l4_timeout_t to, l4_utcb_t *utcb) L4_NOTHROW
Mask an IRQ line.
l4_msgtag_t l4_icu_unbind_u(l4_cap_idx_t icu, unsigned irqnum, l4_cap_idx_t irq, l4_utcb_t *utcb) L4_NOTHROW
Remove binding of an interrupt line from the interrupt controller object.
@ L4_ICU_FLAG_MSI
Flag to denote that the IRQ is actually an MSI.
l4_msgtag_t l4_irq_mux_chain_u(l4_cap_idx_t irq, l4_cap_idx_t slave, l4_utcb_t *utcb) L4_NOTHROW
Attach an IRQ to this multiplexer.
l4_msgtag_t l4_irq_trigger_u(l4_cap_idx_t irq, l4_utcb_t *utcb) L4_NOTHROW
Trigger the object.
l4_msgtag_t l4_irq_receive_u(l4_cap_idx_t irq, l4_timeout_t timeout, l4_utcb_t *utcb) L4_NOTHROW
Unmask and wait for this IRQ.
l4_msgtag_t l4_irq_detach_u(l4_cap_idx_t irq, l4_utcb_t *utcb) L4_NOTHROW
Detach from this interrupt.
@ L4_IRQ_F_NEG_EDGE
Negative edge trigger.
@ L4_IRQ_F_CLEAR_WAKEUP
Do not use irq as wakeup source.
@ L4_IRQ_F_SET_WAKEUP
Wakeup source?
@ L4_IRQ_F_LEVEL_HIGH
Level high trigger.
@ L4_IRQ_F_BOTH_EDGE
Both edges trigger.
@ L4_IRQ_F_POS_EDGE
Positive edge trigger.
@ L4_IRQ_F_NONE
Flow types.
@ L4_IRQ_F_LEVEL_LOW
Level low trigger.
@ L4_ICU_OP_MASK
Mask opcode.
@ L4_ICU_OP_SET_MODE
Set-mode opcode.
@ L4_ICU_OP_UNMASK
Unmask opcode.
@ L4_ICU_OP_INFO
Info opcode.
@ L4_ICU_OP_MSI_INFO
Msi-info opcode.
@ L4_ICU_OP_UNBIND
Unbind opcode.
@ L4_ICU_OP_BIND
Bind opcode.
#define L4_IPC_NEVER
never timeout
struct l4_utcb_t l4_utcb_t
Opaque type for the UTCB.
l4_utcb_t * l4_utcb(void) L4_NOTHROW L4_PURE
Get the UTCB address.
Interface Definition Language.
#define L4_RPC_NF_OP(op, res, name, args...)
Define an RPC call type with specific opcode (the type only, no callable).
#define L4_INLINE_RPC_OP(op, res, name, args, attr...)
Define an inline RPC call with specific opcode (type and callable).
L4 low-level kernel interface.
The C++ Receive endpoint interface.
RPC attribute for a send-only RPC.
IRQ multiplexer for shared IRQs.
l4_msgtag_t chain(Cap< Triggerable > const &slave, l4_utcb_t *utcb=l4_utcb()) noexcept
Attach an IRQ to this multiplexer.
Interface that allows an object to be triggered by some source.
l4_msgtag_t trigger(l4_utcb_t *utcb=l4_utcb()) noexcept
Trigger the object.
List of RPCs typically used for kernel interfaces.
Info structure for an ICU.
unsigned features
Feature flags.
Info to use for a specific MSI.
Message tag data structure.