pub struct InterruptControllers {
local_controllers: Vec<Box<dyn LocalInterruptController>>,
external_controller: Option<Box<dyn ExternalInterruptController>>,
cpu_to_local_controller: BTreeMap<CpuId, usize>,
}
Expand description
Interrupt controller registry
This struct maintains references to the active interrupt controllers and provides a unified interface for interrupt management. Supports multiple local interrupt controllers for different CPU groups.
Fields§
§local_controllers: Vec<Box<dyn LocalInterruptController>>
§external_controller: Option<Box<dyn ExternalInterruptController>>
§cpu_to_local_controller: BTreeMap<CpuId, usize>
Implementations§
Source§impl InterruptControllers
impl InterruptControllers
Sourcepub fn register_local_controller(
&mut self,
controller: Box<dyn LocalInterruptController>,
cpu_ids: &[CpuId],
) -> usize
pub fn register_local_controller( &mut self, controller: Box<dyn LocalInterruptController>, cpu_ids: &[CpuId], ) -> usize
Register a local interrupt controller for specific CPUs Returns the controller index
Sourcepub fn register_local_controller_for_cpu(
&mut self,
controller: Box<dyn LocalInterruptController>,
cpu_id: CpuId,
) -> usize
pub fn register_local_controller_for_cpu( &mut self, controller: Box<dyn LocalInterruptController>, cpu_id: CpuId, ) -> usize
Register a local interrupt controller for a single CPU Returns the controller index
Sourcepub fn register_local_controller_for_range(
&mut self,
controller: Box<dyn LocalInterruptController>,
cpu_range: Range<CpuId>,
) -> usize
pub fn register_local_controller_for_range( &mut self, controller: Box<dyn LocalInterruptController>, cpu_range: Range<CpuId>, ) -> usize
Register a local interrupt controller for a CPU range (convenience function) Returns the controller index
Sourcepub fn register_external_controller(
&mut self,
controller: Box<dyn ExternalInterruptController>,
)
pub fn register_external_controller( &mut self, controller: Box<dyn ExternalInterruptController>, )
Register an external interrupt controller
Sourcepub fn local_controller_mut_for_cpu(
&mut self,
cpu_id: CpuId,
) -> Option<&mut Box<dyn LocalInterruptController>>
pub fn local_controller_mut_for_cpu( &mut self, cpu_id: CpuId, ) -> Option<&mut Box<dyn LocalInterruptController>>
Get a mutable reference to the local interrupt controller for a specific CPU
Sourcepub fn local_controller_mut(
&mut self,
index: usize,
) -> Option<&mut Box<dyn LocalInterruptController>>
pub fn local_controller_mut( &mut self, index: usize, ) -> Option<&mut Box<dyn LocalInterruptController>>
Get a mutable reference to a specific local interrupt controller by index
Sourcepub fn external_controller_mut(
&mut self,
) -> Option<&mut Box<dyn ExternalInterruptController>>
pub fn external_controller_mut( &mut self, ) -> Option<&mut Box<dyn ExternalInterruptController>>
Get a mutable reference to the external interrupt controller
Sourcepub fn init_local_controllers(&mut self) -> InterruptResult<()>
pub fn init_local_controllers(&mut self) -> InterruptResult<()>
Initialize all local controllers for their respective CPUs
Sourcepub fn init_external_controller(&mut self) -> InterruptResult<()>
pub fn init_external_controller(&mut self) -> InterruptResult<()>
Initialize the external controller
Sourcepub fn has_local_controller_for_cpu(&self, cpu_id: CpuId) -> bool
pub fn has_local_controller_for_cpu(&self, cpu_id: CpuId) -> bool
Check if local controller is available for a specific CPU
Sourcepub fn has_local_controller(&self) -> bool
pub fn has_local_controller(&self) -> bool
Check if any local controller is available
Sourcepub fn has_external_controller(&self) -> bool
pub fn has_external_controller(&self) -> bool
Check if external controller is available
Sourcepub fn local_controller_count(&self) -> usize
pub fn local_controller_count(&self) -> usize
Get the number of registered local controllers
Sourcepub fn cpus_for_controller(&self, controller_index: usize) -> Vec<CpuId>
pub fn cpus_for_controller(&self, controller_index: usize) -> Vec<CpuId>
Get CPU IDs managed by a specific local controller