Trait zcore_drivers::scheme::IrqScheme
source · [−]pub trait IrqScheme: Scheme {
fn is_valid_irq(&self, irq_num: usize) -> bool;
fn mask(&self, irq_num: usize) -> DeviceResult;
fn unmask(&self, irq_num: usize) -> DeviceResult;
fn register_handler(
&self,
irq_num: usize,
handler: IrqHandler
) -> DeviceResult;
fn unregister(&self, irq_num: usize) -> DeviceResult;
fn configure(
&self,
_irq_num: usize,
_tm: IrqTriggerMode,
_pol: IrqPolarity
) -> DeviceResult { ... }
fn register_device(
&self,
irq_num: usize,
dev: Arc<dyn Scheme>
) -> DeviceResult { ... }
fn msi_alloc_block(
&self,
_requested_irqs: usize
) -> DeviceResult<Range<usize>> { ... }
fn msi_free_block(&self, _block: Range<usize>) -> DeviceResult { ... }
fn msi_register_handler(
&self,
_block: Range<usize>,
_msi_id: usize,
_handler: IrqHandler
) -> DeviceResult { ... }
fn init_hart(&self) { ... }
fn apic_timer_enable(&self) { ... }
}
Required Methods
fn is_valid_irq(&self, irq_num: usize) -> bool
fn is_valid_irq(&self, irq_num: usize) -> bool
Is a valid IRQ number.
fn mask(&self, irq_num: usize) -> DeviceResult
fn mask(&self, irq_num: usize) -> DeviceResult
Disable IRQ.
fn unmask(&self, irq_num: usize) -> DeviceResult
fn unmask(&self, irq_num: usize) -> DeviceResult
Enable IRQ.
fn register_handler(&self, irq_num: usize, handler: IrqHandler) -> DeviceResult
fn register_handler(&self, irq_num: usize, handler: IrqHandler) -> DeviceResult
Add an interrupt handler to an IRQ.
fn unregister(&self, irq_num: usize) -> DeviceResult
fn unregister(&self, irq_num: usize) -> DeviceResult
Remove the interrupt handler to an IRQ.
Provided Methods
fn configure(
&self,
_irq_num: usize,
_tm: IrqTriggerMode,
_pol: IrqPolarity
) -> DeviceResult
fn configure(
&self,
_irq_num: usize,
_tm: IrqTriggerMode,
_pol: IrqPolarity
) -> DeviceResult
Configure the specified interrupt vector. If it is invoked, it must be invoked prior to interrupt registration.
fn register_device(&self, irq_num: usize, dev: Arc<dyn Scheme>) -> DeviceResult
fn register_device(&self, irq_num: usize, dev: Arc<dyn Scheme>) -> DeviceResult
Register the device to delivery an IRQ.
fn msi_alloc_block(&self, _requested_irqs: usize) -> DeviceResult<Range<usize>>
fn msi_alloc_block(&self, _requested_irqs: usize) -> DeviceResult<Range<usize>>
Method used for platform allocation of blocks of MSI and MSI-X compatible IRQ targets.
fn msi_free_block(&self, _block: Range<usize>) -> DeviceResult
fn msi_free_block(&self, _block: Range<usize>) -> DeviceResult
Method used to free a block of MSI IRQs previously allocated by msi_alloc_block(). This does not unregister IRQ handlers.
fn msi_register_handler(
&self,
_block: Range<usize>,
_msi_id: usize,
_handler: IrqHandler
) -> DeviceResult
fn msi_register_handler(
&self,
_block: Range<usize>,
_msi_id: usize,
_handler: IrqHandler
) -> DeviceResult
Register a handler function for a given msi_id within an msi_block_t. Passing a NULL handler will effectively unregister a handler for a given msi_id within the block.
Init irq for current cpu. Some IRQ hardware requires per-CPU initialization.
fn apic_timer_enable(&self)
fn apic_timer_enable(&self)
[for x86_64] enable apic timer