L4Re Operating System Framework
Interface and Usage Documentation
Loading...
Searching...
No Matches

C IRQ interface, see L4::Irq for the C++ interface. More...

+ Collaboration diagram for IRQs:

Enumerations

enum  L4_irq_mode {
  L4_IRQ_F_NONE = 0 , L4_IRQ_F_LEVEL = 0x2 , L4_IRQ_F_EDGE = 0x0 , L4_IRQ_F_POS = 0x0 ,
  L4_IRQ_F_NEG = 0x4 , L4_IRQ_F_BOTH = 0x8 , L4_IRQ_F_LEVEL_HIGH = 0x3 , L4_IRQ_F_LEVEL_LOW = 0x7 ,
  L4_IRQ_F_POS_EDGE = 0x1 , L4_IRQ_F_NEG_EDGE = 0x5 , L4_IRQ_F_BOTH_EDGE = 0x9 , L4_IRQ_F_MASK = 0xf ,
  L4_IRQ_F_SET_WAKEUP = 0x10 , L4_IRQ_F_CLEAR_WAKEUP = 0x20
}
 Interrupt attributes. More...
 

Functions

l4_msgtag_t l4_irq_mux_chain (l4_cap_idx_t irq, l4_cap_idx_t slave) L4_NOTHROW
 Chain an IRQ to another master IRQ source.
 
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_detach (l4_cap_idx_t irq) L4_NOTHROW
 Detach from an interrupt source.
 
l4_msgtag_t l4_irq_detach_u (l4_cap_idx_t irq, l4_utcb_t *utcb) L4_NOTHROW
 Detach from this interrupt.
 
l4_msgtag_t l4_irq_trigger (l4_cap_idx_t irq) L4_NOTHROW
 Trigger an IRQ.
 
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 (l4_cap_idx_t irq, l4_timeout_t to) L4_NOTHROW
 Unmask and wait for specified IRQ.
 
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_wait (l4_cap_idx_t irq, l4_umword_t *label, l4_timeout_t to) L4_NOTHROW
 Unmask IRQ and wait for any message.
 
l4_msgtag_t l4_irq_wait_u (l4_cap_idx_t irq, l4_umword_t *label, l4_timeout_t timeout, l4_utcb_t *utcb) L4_NOTHROW
 Unmask IRQ and (open) wait for any message.
 
l4_msgtag_t l4_irq_unmask (l4_cap_idx_t irq) L4_NOTHROW
 Unmask IRQ.
 
l4_msgtag_t l4_irq_unmask_u (l4_cap_idx_t irq, l4_utcb_t *utcb) L4_NOTHROW
 Unmask this IRQ.
 

Detailed Description

C IRQ interface, see L4::Irq for the C++ interface.

The IRQ interface provides access to abstract interrupts provided by the microkernel. Interrupts may be

For hardware and virtual device interrupts the Irq object must be bound to an interrupt source, see Interrupt controller. To receive interrupts, the Irq object must be bound to a thread, see l4_rcv_ep_bind_thread().

IRQ objects can be created using a factory, see the Factory API (use l4_factory_create_irq()).

Include File
#include <l4/sys/irq.h>
C Irq interface.

For the C++ interface refer to the L4::Irq API for an overview.

Enumeration Type Documentation

◆ L4_irq_mode

Interrupt attributes.

Enumerator
L4_IRQ_F_NONE 

Flow types.

None

L4_IRQ_F_LEVEL 

Level triggered.

L4_IRQ_F_EDGE 

Edge triggered.

L4_IRQ_F_POS 

Positive trigger.

L4_IRQ_F_NEG 

Negative trigger.

L4_IRQ_F_BOTH 

Both edges trigger.

L4_IRQ_F_LEVEL_HIGH 

Level high trigger.

L4_IRQ_F_LEVEL_LOW 

Level low trigger.

L4_IRQ_F_POS_EDGE 

Positive edge trigger.

L4_IRQ_F_NEG_EDGE 

Negative edge trigger.

L4_IRQ_F_BOTH_EDGE 

Both edges trigger.

L4_IRQ_F_MASK 

Mask.

L4_IRQ_F_SET_WAKEUP 

Wakeup source?

Use irq as wakeup source

L4_IRQ_F_CLEAR_WAKEUP 

Do not use irq as wakeup source.

Definition at line 80 of file icu.h.

Function Documentation

◆ l4_irq_detach()

l4_msgtag_t l4_irq_detach ( l4_cap_idx_t  irq)
inline

Detach from an interrupt source.

Parameters
irqThe IRQ object that shall be detached.
Returns
Syscall return tag
Return values
0Successfully detached, there was no interrupt pending.
1Successfully detached, there was an interrupt pending.
-L4_EPERMNo L4_CAP_FPAGE_S rights on the capability used to invoke this operation.
Examples
examples/sys/isr/main.c.

Definition at line 299 of file irq.h.

References l4_irq_detach_u(), and l4_utcb().

+ Here is the call graph for this function:

◆ l4_irq_detach_u()

l4_msgtag_t l4_irq_detach_u ( l4_cap_idx_t  irq,
l4_utcb_t utcb 
)
inline

Detach from this interrupt.

Parameters
irqThe IRQ object that shall be detached.
utcbUTCB to be used for this operation, shall be the UTCB of the calling thread. See l4_utcb.
Returns
Syscall return tag
Return values
0Successfully detached, there was no interrupt pending.
1Successfully detached, there was an interrupt pending.
-L4_EPERMNo L4_CAP_FPAGE_S rights on the capability used to invoke this operation.

Definition at line 254 of file irq.h.

References l4_ipc_call(), L4_IPC_NEVER, l4_msgtag(), L4_PROTO_IRQ_SENDER, and l4_msg_regs_t::mr.

Referenced by L4::Irq::detach(), and l4_irq_detach().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ l4_irq_mux_chain()

l4_msgtag_t l4_irq_mux_chain ( l4_cap_idx_t  irq,
l4_cap_idx_t  slave 
)
inline

Chain an IRQ to another master IRQ source.

Deprecated:
IRQ muxer objects are no longer supported by the kernel.
Parameters
irqThe master IRQ object.
slaveThe slave that shall be attached to the master.
Returns
Syscall return tag

The chaining feature of IRQ objects allows to deal with shared IRQs. For chaining IRQs there must be a master IRQ object, bound to the real IRQ source. Note, the master IRQ must not have a thread bound to it.

This function allows to add a limited number of slave IRQs to this master IRQ, with the semantics that each of the slave IRQs is triggered whenever the master IRQ is triggered. The master IRQ will be masked automatically when an IRQ is delivered and shall be unmasked when all attached slave IRQs are unmasked.

Definition at line 293 of file irq.h.

References l4_irq_mux_chain_u(), and l4_utcb().

+ Here is the call graph for this function:

◆ l4_irq_mux_chain_u()

l4_msgtag_t l4_irq_mux_chain_u ( l4_cap_idx_t  irq,
l4_cap_idx_t  slave,
l4_utcb_t utcb 
)
inline

Attach an IRQ to this multiplexer.

Parameters
irqThe master IRQ object.
slaveThe slave that shall be attached to the master.
utcbUTCB to be used for this operation, shall be the UTCB of the calling thread. See l4_utcb.
Returns
Syscall return tag

The chaining feature of IRQ objects allows to deal with shared IRQs. For chaining IRQs there must be an IRQ multiplexer (Irq_mux) bound to the real IRQ source. This function allows to add slave IRQs to this multiplexer.

Definition at line 242 of file irq.h.

References L4_CAP_FPAGE_RWS, l4_ipc_call(), L4_IPC_NEVER, l4_map_obj_control(), l4_msgtag(), l4_obj_fpage(), L4_PROTO_IRQ_MUX, l4_msg_regs_t::mr, and l4_fpage_t::raw.

Referenced by L4::Irq_mux::chain(), and l4_irq_mux_chain().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ l4_irq_receive()

l4_msgtag_t l4_irq_receive ( l4_cap_idx_t  irq,
l4_timeout_t  to 
)
inline

Unmask and wait for specified IRQ.

Parameters
irqThe IRQ object that shall be unmasked.
toTimeout.
Returns
Syscall return tag

Definition at line 311 of file irq.h.

References l4_irq_receive_u(), and l4_utcb().

Referenced by L4Re::Util::Event_buffer_consumer_t< PAYLOAD >::process().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ l4_irq_receive_u()

l4_msgtag_t l4_irq_receive_u ( l4_cap_idx_t  irq,
l4_timeout_t  timeout,
l4_utcb_t utcb 
)
inline

Unmask and wait for this IRQ.

Parameters
irqThe IRQ object that shall be unmasked.
timeoutTimeout.
utcbUTCB to be used for this operation, shall be the UTCB of the calling thread. See l4_utcb.
Returns
Syscall return tag
Note
If this is the function normally used for your IRQs consider using L4::Semaphore instead of L4::Irq.

Definition at line 269 of file irq.h.

References l4_ipc_call(), l4_msgtag(), L4_PROTO_IRQ, and l4_msg_regs_t::mr.

Referenced by l4_irq_receive(), and L4::Irq::receive().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ l4_irq_trigger()

l4_msgtag_t l4_irq_trigger ( l4_cap_idx_t  irq)
inline

Trigger an IRQ.

Parameters
irqThe IRQ object that shall be triggered.
Returns
Syscall return tag.

Note that this function is a send only operation, i.e. there is no return value except for a failed send operation. Especially l4_error() will return an error value from the message tag which still contains the IRQ protocol used for the send operation.

Use l4_ipc_error() to check for (send) errors.

Definition at line 305 of file irq.h.

References l4_irq_trigger_u(), and l4_utcb().

Referenced by l4_semaphore_up().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ l4_irq_trigger_u()

l4_msgtag_t l4_irq_trigger_u ( l4_cap_idx_t  irq,
l4_utcb_t utcb 
)
inline

Trigger the object.

Parameters
irqThe IRQ object that shall be triggered.
utcbUTCB to be used for this operation, shall be the UTCB of the calling thread. See l4_utcb.
Returns
Syscall return tag for a send-only operation, this means there is no return value except L4_MSGTAG_ERROR indicating success or failure of the send operation. Use l4_ipc_error() to check for errors and do not use l4_error().

Definition at line 262 of file irq.h.

References L4_IPC_BOTH_TIMEOUT_0, l4_ipc_send(), l4_msgtag(), and L4_PROTO_IRQ.

Referenced by l4_irq_trigger(), and L4::Triggerable::trigger().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ l4_irq_unmask()

l4_msgtag_t l4_irq_unmask ( l4_cap_idx_t  irq)
inline

Unmask IRQ.

Parameters
irqThe IRQ object that shall be unmasked.
Returns
Syscall return tag
Note
l4_irq_wait() and l4_irq_receive() are doing the unmask themselves.

Definition at line 324 of file irq.h.

References l4_irq_unmask_u(), and l4_utcb().

+ Here is the call graph for this function:

◆ l4_irq_unmask_u()

l4_msgtag_t l4_irq_unmask_u ( l4_cap_idx_t  irq,
l4_utcb_t utcb 
)
inline

Unmask this IRQ.

Parameters
irqThe IRQ object that shall be unmasked.
utcbUTCB to be used for this operation, shall be the UTCB of the calling thread. See l4_utcb.
Returns
Syscall return tag for a send-only operation, this means there is no return value except L4_MSGTAG_ERROR indicating success or failure of the send operation. Use l4_ipc_error() to check for errors and do not use l4_error().

Irq::wait() and Irq::receive() operations already include an unmask(), do not use an extra unmask() in these cases.

Definition at line 285 of file irq.h.

References L4_IPC_NEVER, l4_ipc_send(), l4_msgtag(), L4_PROTO_IRQ, and l4_msg_regs_t::mr.

Referenced by l4_irq_unmask().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ l4_irq_wait()

l4_msgtag_t l4_irq_wait ( l4_cap_idx_t  irq,
l4_umword_t label,
l4_timeout_t  to 
)
inline

Unmask IRQ and wait for any message.

Parameters
irqThe IRQ object that shall be unmasked.
labelReceive label.
toTimeout.
Returns
Syscall return tag
Examples
examples/sys/isr/main.c.

Definition at line 317 of file irq.h.

References l4_irq_wait_u(), and l4_utcb().

+ Here is the call graph for this function:

◆ l4_irq_wait_u()

l4_msgtag_t l4_irq_wait_u ( l4_cap_idx_t  irq,
l4_umword_t label,
l4_timeout_t  timeout,
l4_utcb_t utcb 
)
inline

Unmask IRQ and (open) wait for any message.

Parameters
irqThe IRQ object that shall be unmasked.
labelThe protected label shall be received here.
timeoutTimeout.
utcbUTCB to be used for this operation, shall be the UTCB of the calling thread. See l4_utcb.
Returns
Syscall return tag

Definition at line 276 of file irq.h.

References l4_ipc_send_and_wait(), l4_msgtag(), L4_PROTO_IRQ, and l4_msg_regs_t::mr.

Referenced by l4_irq_wait().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: