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§
Sourcefn init(&mut self) -> InterruptResult<()>
fn init(&mut self) -> InterruptResult<()>
Initialize the external interrupt controller
Sourcefn enable_interrupt(
&mut self,
interrupt_id: InterruptId,
cpu_id: CpuId,
) -> InterruptResult<()>
fn enable_interrupt( &mut self, interrupt_id: InterruptId, cpu_id: CpuId, ) -> InterruptResult<()>
Enable a specific interrupt for a CPU
Sourcefn disable_interrupt(
&mut self,
interrupt_id: InterruptId,
cpu_id: CpuId,
) -> InterruptResult<()>
fn disable_interrupt( &mut self, interrupt_id: InterruptId, cpu_id: CpuId, ) -> InterruptResult<()>
Disable a specific interrupt for a CPU
Sourcefn set_priority(
&mut self,
interrupt_id: InterruptId,
priority: Priority,
) -> InterruptResult<()>
fn set_priority( &mut self, interrupt_id: InterruptId, priority: Priority, ) -> InterruptResult<()>
Set priority for a specific interrupt
Sourcefn get_priority(&self, interrupt_id: InterruptId) -> InterruptResult<Priority>
fn get_priority(&self, interrupt_id: InterruptId) -> InterruptResult<Priority>
Get priority for a specific interrupt
Sourcefn set_threshold(
&mut self,
cpu_id: CpuId,
threshold: Priority,
) -> InterruptResult<()>
fn set_threshold( &mut self, cpu_id: CpuId, threshold: Priority, ) -> InterruptResult<()>
Set priority threshold for a CPU
Sourcefn get_threshold(&self, cpu_id: CpuId) -> InterruptResult<Priority>
fn get_threshold(&self, cpu_id: CpuId) -> InterruptResult<Priority>
Get priority threshold for a CPU
Sourcefn claim_interrupt(
&mut self,
cpu_id: CpuId,
) -> InterruptResult<Option<InterruptId>>
fn claim_interrupt( &mut self, cpu_id: CpuId, ) -> InterruptResult<Option<InterruptId>>
Claim an interrupt (acknowledge and get the interrupt ID)
Sourcefn complete_interrupt(
&mut self,
cpu_id: CpuId,
interrupt_id: InterruptId,
) -> InterruptResult<()>
fn complete_interrupt( &mut self, cpu_id: CpuId, interrupt_id: InterruptId, ) -> InterruptResult<()>
Complete an interrupt (signal that handling is finished)
Sourcefn is_pending(&self, interrupt_id: InterruptId) -> bool
fn is_pending(&self, interrupt_id: InterruptId) -> bool
Check if a specific interrupt is pending
Sourcefn max_interrupts(&self) -> InterruptId
fn max_interrupts(&self) -> InterruptId
Get the maximum number of interrupts supported