Zephyr Project API 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
riscv_aia.h File Reference

RISC-V AIA (Advanced Interrupt Architecture) unified coordinator API. More...

Go to the source code of this file.

Functions

void riscv_aia_irq_enable (uint32_t irq)
 Enable an AIA interrupt source.
void riscv_aia_irq_disable (uint32_t irq)
 Disable an AIA interrupt source.
int riscv_aia_irq_is_enabled (uint32_t irq)
 Check if an AIA interrupt source is enabled.
void riscv_aia_set_priority (uint32_t irq, uint32_t prio)
 Set priority for an AIA interrupt source.
static const struct deviceriscv_aia_get_dev (void)
 Get the underlying APLIC device.
void riscv_aia_config_source (uint32_t irq, uint32_t mode)
 Configure an APLIC source mode.
void riscv_aia_route_to_hart (uint32_t irq, uint32_t hart, uint32_t eiid)
 Route an APLIC source to a specific hart.
void riscv_aia_inject_msi (uint32_t hart, uint32_t eiid)
 Inject a software MSI via the APLIC GENMSI register.
void riscv_aia_enable_source (uint32_t irq)
 Enable an APLIC source using the convenience wrapper.
void riscv_aia_dispatch_eiid (uint32_t eiid)
 Dispatch an IMSIC EIID through the AIA second-level ISR table.

Detailed Description

RISC-V AIA (Advanced Interrupt Architecture) unified coordinator API.

Provides a single API wrapping APLIC and IMSIC for Zephyr's interrupt management. The coordinator is exposed to Zephyr as a PLIC-like second-level interrupt controller; APLIC and IMSIC remain internal implementation details.

Function Documentation

◆ riscv_aia_config_source()

void riscv_aia_config_source ( uint32_t irq,
uint32_t mode )

Configure an APLIC source mode.

Parameters
irqMulti-level encoded interrupt ID.
modeSource mode (trigger type) per RISC-V AIA spec section 4.5.2.

◆ riscv_aia_dispatch_eiid()

void riscv_aia_dispatch_eiid ( uint32_t eiid)

Dispatch an IMSIC EIID through the AIA second-level ISR table.

Parameters
eiidIMSIC external interrupt identity.

◆ riscv_aia_enable_source()

void riscv_aia_enable_source ( uint32_t irq)

Enable an APLIC source using the convenience wrapper.

Parameters
irqMulti-level encoded interrupt ID.

◆ riscv_aia_get_dev()

const struct device * riscv_aia_get_dev ( void )
inlinestatic

Get the underlying APLIC device.

Returns
Pointer to the APLIC device.

◆ riscv_aia_inject_msi()

void riscv_aia_inject_msi ( uint32_t hart,
uint32_t eiid )

Inject a software MSI via the APLIC GENMSI register.

Parameters
hartTarget hart index.
eiidEIID to inject.

◆ riscv_aia_irq_disable()

void riscv_aia_irq_disable ( uint32_t irq)

Disable an AIA interrupt source.

Disables both the IMSIC EIID and the APLIC source.

Parameters
irqMulti-level encoded interrupt ID.

◆ riscv_aia_irq_enable()

void riscv_aia_irq_enable ( uint32_t irq)

Enable an AIA interrupt source.

Enables the EIID in IMSIC and configures/enables the APLIC source.

Parameters
irqMulti-level encoded interrupt ID.

◆ riscv_aia_irq_is_enabled()

int riscv_aia_irq_is_enabled ( uint32_t irq)

Check if an AIA interrupt source is enabled.

Parameters
irqMulti-level encoded interrupt ID.
Returns
Non-zero if enabled, 0 if disabled.

◆ riscv_aia_route_to_hart()

void riscv_aia_route_to_hart ( uint32_t irq,
uint32_t hart,
uint32_t eiid )

Route an APLIC source to a specific hart.

Parameters
irqMulti-level encoded interrupt ID.
hartTarget hart index.
eiidEIID to deliver to the target hart's IMSIC.

◆ riscv_aia_set_priority()

void riscv_aia_set_priority ( uint32_t irq,
uint32_t prio )

Set priority for an AIA interrupt source.

APLIC-MSI mode has no per-source priority registers. Priority is handled via IMSIC EITHRESHOLD or implicit EIID ordering.

Parameters
irqMulti-level encoded interrupt ID.
prioPriority value (currently ignored in MSI mode).