pub trait LocalInterruptController: Send + Sync {
// Required methods
fn init(&mut self, cpu_id: CpuId) -> InterruptResult<()>;
fn enable_interrupt(
&mut self,
cpu_id: CpuId,
interrupt_type: LocalInterruptType,
) -> InterruptResult<()>;
fn disable_interrupt(
&mut self,
cpu_id: CpuId,
interrupt_type: LocalInterruptType,
) -> InterruptResult<()>;
fn is_pending(
&self,
cpu_id: CpuId,
interrupt_type: LocalInterruptType,
) -> bool;
fn clear_interrupt(
&mut self,
cpu_id: CpuId,
interrupt_type: LocalInterruptType,
) -> InterruptResult<()>;
fn send_software_interrupt(
&mut self,
target_cpu: CpuId,
) -> InterruptResult<()>;
fn clear_software_interrupt(&mut self, cpu_id: CpuId) -> InterruptResult<()>;
fn set_timer(&mut self, cpu_id: CpuId, time: u64) -> InterruptResult<()>;
fn get_time(&self) -> u64;
}
Expand description
Trait for local interrupt controllers (like CLINT)
Local interrupt controllers manage CPU-local interrupts such as timer interrupts and software interrupts.
Required Methods§
Sourcefn init(&mut self, cpu_id: CpuId) -> InterruptResult<()>
fn init(&mut self, cpu_id: CpuId) -> InterruptResult<()>
Initialize the local interrupt controller for a specific CPU
Sourcefn enable_interrupt(
&mut self,
cpu_id: CpuId,
interrupt_type: LocalInterruptType,
) -> InterruptResult<()>
fn enable_interrupt( &mut self, cpu_id: CpuId, interrupt_type: LocalInterruptType, ) -> InterruptResult<()>
Enable a specific local interrupt type for a CPU
Sourcefn disable_interrupt(
&mut self,
cpu_id: CpuId,
interrupt_type: LocalInterruptType,
) -> InterruptResult<()>
fn disable_interrupt( &mut self, cpu_id: CpuId, interrupt_type: LocalInterruptType, ) -> InterruptResult<()>
Disable a specific local interrupt type for a CPU
Sourcefn is_pending(&self, cpu_id: CpuId, interrupt_type: LocalInterruptType) -> bool
fn is_pending(&self, cpu_id: CpuId, interrupt_type: LocalInterruptType) -> bool
Check if a specific local interrupt type is pending for a CPU
Sourcefn clear_interrupt(
&mut self,
cpu_id: CpuId,
interrupt_type: LocalInterruptType,
) -> InterruptResult<()>
fn clear_interrupt( &mut self, cpu_id: CpuId, interrupt_type: LocalInterruptType, ) -> InterruptResult<()>
Clear a pending local interrupt for a CPU
Sourcefn send_software_interrupt(&mut self, target_cpu: CpuId) -> InterruptResult<()>
fn send_software_interrupt(&mut self, target_cpu: CpuId) -> InterruptResult<()>
Send a software interrupt to a specific CPU
Sourcefn clear_software_interrupt(&mut self, cpu_id: CpuId) -> InterruptResult<()>
fn clear_software_interrupt(&mut self, cpu_id: CpuId) -> InterruptResult<()>
Clear a software interrupt for a specific CPU
Sourcefn set_timer(&mut self, cpu_id: CpuId, time: u64) -> InterruptResult<()>
fn set_timer(&mut self, cpu_id: CpuId, time: u64) -> InterruptResult<()>
Set timer interrupt for a specific CPU