123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- use core::ops::Add;
- use system_error::SystemError;
- use crate::arch::CurrentIrqArch;
- pub mod dummychip;
- pub mod handle;
- pub mod init;
- pub mod ipi;
- pub mod irqchip;
- pub mod irqdata;
- pub mod irqdesc;
- pub mod irqdomain;
- pub mod manage;
- pub mod msi;
- mod resend;
- pub mod softirq;
- pub mod sysfs;
- pub trait InterruptArch: Send + Sync {
-
- unsafe fn arch_irq_init() -> Result<(), SystemError>;
-
- unsafe fn interrupt_enable();
-
- unsafe fn interrupt_disable();
-
- fn is_irq_enabled() -> bool;
-
- unsafe fn save_and_disable_irq() -> IrqFlagsGuard;
- unsafe fn restore_irq(flags: IrqFlags);
-
- fn probe_total_irq_num() -> u32;
- fn arch_early_irq_init() -> Result<(), SystemError> {
- Ok(())
- }
-
- fn ack_bad_irq(irq: IrqNumber);
- }
- #[derive(Debug, Clone, Copy)]
- pub struct IrqFlags {
- flags: usize,
- }
- impl IrqFlags {
- pub fn new(flags: usize) -> Self {
- IrqFlags { flags }
- }
- pub fn flags(&self) -> usize {
- self.flags
- }
- }
- #[derive(Debug)]
- pub struct IrqFlagsGuard {
- flags: IrqFlags,
- }
- impl IrqFlagsGuard {
-
-
-
-
-
-
-
- pub unsafe fn new(flags: IrqFlags) -> Self {
- IrqFlagsGuard { flags }
- }
- }
- impl Drop for IrqFlagsGuard {
- fn drop(&mut self) {
- unsafe {
- CurrentIrqArch::restore_irq(self.flags);
- }
- }
- }
- int_like!(IrqNumber, u32);
- impl IrqNumber {
-
-
- pub const IRQ_NOTCONNECTED: IrqNumber = IrqNumber::new(u32::MAX);
- }
- int_like!(HardwareIrqNumber, u32);
- impl Add<u32> for HardwareIrqNumber {
- type Output = HardwareIrqNumber;
- fn add(self, rhs: u32) -> HardwareIrqNumber {
- HardwareIrqNumber::new(self.0 + rhs)
- }
- }
- impl Add<u32> for IrqNumber {
- type Output = IrqNumber;
- fn add(self, rhs: u32) -> IrqNumber {
- IrqNumber::new(self.0 + rhs)
- }
- }
|