macro_rules! __log_prefix {
() => {
"irq: "
};
}
pub(super) mod chip;
pub(super) mod ipi;
mod ops;
mod remapping;
pub use chip::{IRQ_CHIP, IrqChip, MappedIrqLine};
pub(crate) use ipi::{HwCpuId, send_ipi};
pub(crate) use ops::{
disable_local, disable_local_and_halt, enable_local, enable_local_and_halt, is_local_enabled,
};
pub(crate) use remapping::IrqRemapping;
use crate::arch::{cpu, kernel};
pub(crate) const IRQ_NUM_MIN: u8 = 32;
pub(crate) const IRQ_NUM_MAX: u8 = 255;
pub(crate) struct HwIrqLine {
irq_num: u8,
}
impl HwIrqLine {
pub(super) fn new(irq_num: u8) -> Self {
Self { irq_num }
}
pub(crate) fn irq_num(&self) -> u8 {
self.irq_num
}
pub(crate) fn ack(&self) {
debug_assert!(!cpu::context::CpuException::is_cpu_exception(
self.irq_num as usize
));
kernel::apic::get_or_init(&crate::task::disable_preempt() as _).eoi();
}
}