Zephyr API Documentation  3.7.0
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
sw_isr_table.h File Reference

Software-managed ISR table. More...

Go to the source code of this file.

Macros

#define INTC_BASE_ISR_TBL_OFFSET(node_id)    Z_SW_ISR_TBL_KCONFIG_BY_ALVL(DT_INTC_GET_AGGREGATOR_LEVEL(node_id))
 Get an interrupt controller node's level base ISR table offset.
 
#define INTC_INST_ISR_TBL_OFFSET(inst)    (INTC_BASE_ISR_TBL_OFFSET(DT_DRV_INST(inst)) + (inst * CONFIG_MAX_IRQ_PER_AGGREGATOR))
 Get the SW ISR table offset for an instance of interrupt controller.
 
#define INTC_CHILD_ISR_TBL_OFFSET(node_id)
 Get the SW ISR table offset for a child interrupt controller.
 
#define IRQ_PARENT_ENTRY_DEFINE(_name, _dev, _irq, _offset, _level)
 Register an interrupt controller with the software ISR table.
 
#define ISR_FLAG_DIRECT   BIT(0)
 This interrupt gets put directly in the vector table.
 
#define IRQ_TABLE_SIZE   (CONFIG_NUM_IRQS - CONFIG_GEN_IRQ_START_VECTOR)
 

Detailed Description

Software-managed ISR table.

Data types for a software-managed ISR table, with a parameter per-ISR.

Macro Definition Documentation

◆ INTC_BASE_ISR_TBL_OFFSET

#define INTC_BASE_ISR_TBL_OFFSET (   node_id)     Z_SW_ISR_TBL_KCONFIG_BY_ALVL(DT_INTC_GET_AGGREGATOR_LEVEL(node_id))

Get an interrupt controller node's level base ISR table offset.

Parameters
node_idnode identifier of the interrupt controller
Returns
CONFIG_2ND_LVL_ISR_TBL_OFFSET if node_id is a second level aggregator, CONFIG_3RD_LVL_ISR_TBL_OFFSET if it is a third level aggregator

◆ INTC_CHILD_ISR_TBL_OFFSET

#define INTC_CHILD_ISR_TBL_OFFSET (   node_id)
Value:
(DT_NODE_CHILD_IDX(node_id) * CONFIG_MAX_IRQ_PER_AGGREGATOR))
#define DT_NODE_CHILD_IDX(node_id)
Get a devicetree node's index into its parent's list of children.
Definition: devicetree.h:552
#define INTC_BASE_ISR_TBL_OFFSET(node_id)
Get an interrupt controller node's level base ISR table offset.
Definition: sw_isr_table.h:85

Get the SW ISR table offset for a child interrupt controller.

This macro is a alternative form of the INTC_INST_ISR_TBL_OFFSET. This is used by pseudo interrupt controller devices that are child of a main interrupt controller device.

Parameters
node_idnode identifier of the child interrupt controller
Returns
Software ISR table offset of the child

◆ INTC_INST_ISR_TBL_OFFSET

#define INTC_INST_ISR_TBL_OFFSET (   inst)     (INTC_BASE_ISR_TBL_OFFSET(DT_DRV_INST(inst)) + (inst * CONFIG_MAX_IRQ_PER_AGGREGATOR))

Get the SW ISR table offset for an instance of interrupt controller.

Parameters
instDT_DRV_COMPAT interrupt controller driver instance number
Returns
Software ISR table offset of the interrupt controller

◆ IRQ_PARENT_ENTRY_DEFINE

#define IRQ_PARENT_ENTRY_DEFINE (   _name,
  _dev,
  _irq,
  _offset,
  _level 
)
Value:
static const STRUCT_SECTION_ITERABLE_ALTERNATE(intc_table, _irq_parent_entry, _name) = { \
.dev = _dev, \
.level = _level, \
.irq = _irq, \
.offset = _offset, \
}
#define STRUCT_SECTION_ITERABLE_ALTERNATE(secname, struct_type, varname)
Defines a new element of alternate data type for an iterable section.
Definition: iterable_sections.h:188

Register an interrupt controller with the software ISR table.

Parameters
_nameName of the interrupt controller (must be unique)
_devPointer to the interrupt controller device instance
_irqInterrupt controller IRQ number
_offsetSoftware ISR table offset of the interrupt controller
_levelInterrupt controller aggregator level

◆ IRQ_TABLE_SIZE

#define IRQ_TABLE_SIZE   (CONFIG_NUM_IRQS - CONFIG_GEN_IRQ_START_VECTOR)

◆ ISR_FLAG_DIRECT

#define ISR_FLAG_DIRECT   BIT(0)

This interrupt gets put directly in the vector table.