Trait ExternalInterruptController

Source
pub trait ExternalInterruptController: Send + Sync {
    // Required methods
    fn init(&mut self) -> InterruptResult<()>;
    fn enable_interrupt(
        &mut self,
        interrupt_id: InterruptId,
        cpu_id: CpuId,
    ) -> InterruptResult<()>;
    fn disable_interrupt(
        &mut self,
        interrupt_id: InterruptId,
        cpu_id: CpuId,
    ) -> InterruptResult<()>;
    fn set_priority(
        &mut self,
        interrupt_id: InterruptId,
        priority: Priority,
    ) -> InterruptResult<()>;
    fn get_priority(
        &self,
        interrupt_id: InterruptId,
    ) -> InterruptResult<Priority>;
    fn set_threshold(
        &mut self,
        cpu_id: CpuId,
        threshold: Priority,
    ) -> InterruptResult<()>;
    fn get_threshold(&self, cpu_id: CpuId) -> InterruptResult<Priority>;
    fn claim_interrupt(
        &mut self,
        cpu_id: CpuId,
    ) -> InterruptResult<Option<InterruptId>>;
    fn complete_interrupt(
        &mut self,
        cpu_id: CpuId,
        interrupt_id: InterruptId,
    ) -> InterruptResult<()>;
    fn is_pending(&self, interrupt_id: InterruptId) -> bool;
    fn max_interrupts(&self) -> InterruptId;
    fn max_cpus(&self) -> CpuId;
}
Expand description

Trait for external interrupt controllers (like PLIC)

External interrupt controllers manage interrupts from external devices and can route them to different CPUs with priority support.

Required Methods§

Source

fn init(&mut self) -> InterruptResult<()>

Initialize the external interrupt controller

Source

fn enable_interrupt( &mut self, interrupt_id: InterruptId, cpu_id: CpuId, ) -> InterruptResult<()>

Enable a specific interrupt for a CPU

Source

fn disable_interrupt( &mut self, interrupt_id: InterruptId, cpu_id: CpuId, ) -> InterruptResult<()>

Disable a specific interrupt for a CPU

Source

fn set_priority( &mut self, interrupt_id: InterruptId, priority: Priority, ) -> InterruptResult<()>

Set priority for a specific interrupt

Source

fn get_priority(&self, interrupt_id: InterruptId) -> InterruptResult<Priority>

Get priority for a specific interrupt

Source

fn set_threshold( &mut self, cpu_id: CpuId, threshold: Priority, ) -> InterruptResult<()>

Set priority threshold for a CPU

Source

fn get_threshold(&self, cpu_id: CpuId) -> InterruptResult<Priority>

Get priority threshold for a CPU

Source

fn claim_interrupt( &mut self, cpu_id: CpuId, ) -> InterruptResult<Option<InterruptId>>

Claim an interrupt (acknowledge and get the interrupt ID)

Source

fn complete_interrupt( &mut self, cpu_id: CpuId, interrupt_id: InterruptId, ) -> InterruptResult<()>

Complete an interrupt (signal that handling is finished)

Source

fn is_pending(&self, interrupt_id: InterruptId) -> bool

Check if a specific interrupt is pending

Source

fn max_interrupts(&self) -> InterruptId

Get the maximum number of interrupts supported

Source

fn max_cpus(&self) -> CpuId

Get the number of CPUs supported

Implementors§