pub struct Clint {
base_addr: usize,
max_cpus: CpuId,
}
Expand description
RISC-V CLINT Implementation
Fields§
§base_addr: usize
Base address of the CLINT
max_cpus: CpuId
Maximum number of CPUs this CLINT supports
Implementations§
Source§impl Clint
impl Clint
Sourcepub fn new(base_addr: usize, max_cpus: CpuId) -> Self
pub fn new(base_addr: usize, max_cpus: CpuId) -> Self
Create a new CLINT instance
§Arguments
base_addr
- Physical base address of the CLINTmax_cpus
- Maximum number of CPUs supported
The base address is used to calculate all register addresses using relative offsets defined in the CLINT specification.
Sourcefn msip_addr(&self, cpu_id: CpuId) -> usize
fn msip_addr(&self, cpu_id: CpuId) -> usize
Get the address of the software interrupt pending register for a CPU
Sourcefn mtimecmp_addr(&self, cpu_id: CpuId) -> usize
fn mtimecmp_addr(&self, cpu_id: CpuId) -> usize
Get the address of the timer compare register for a CPU
Sourcefn mtime_addr(&self) -> usize
fn mtime_addr(&self) -> usize
Get the address of the timer value register
Sourcefn validate_cpu_id(&self, cpu_id: CpuId) -> InterruptResult<()>
fn validate_cpu_id(&self, cpu_id: CpuId) -> InterruptResult<()>
Validate CPU ID
Trait Implementations§
Source§impl LocalInterruptController for Clint
impl LocalInterruptController for Clint
Source§fn init(&mut self, cpu_id: CpuId) -> InterruptResult<()>
fn init(&mut self, cpu_id: CpuId) -> InterruptResult<()>
Initialize the CLINT for a specific CPU
Source§fn 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
Source§fn 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
Source§fn 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
Source§fn 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
Source§fn 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
Source§fn 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
Source§fn 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