You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This code is based on the OSDev Wiki PIC notes, but it's not a
complete implementation of everything they discuss. Also note that if you
want to do more sophisticated interrupt handling, especially on
multiprocessor systems, you'll probably want to read about the newer
APIC and IOAPIC interfaces.
Using
This is a very basic interface to the 8259 and 8259A interrupt controllers,
which are used on single processor systems to pass hardware interrupts to
the CPU.
To use this crate, add it to your Cargo.toml file, along with an
appropriate kernel-space mutex implementation such as spin:
[dependencies]
pic8259 = "0.10.0"spin = "0.9.0"
You can then declare a global, lockable ChainedPics object as follows:
use pic8259::ChainedPics;use spin::Mutex;// Map PIC interrupts to 0x20 through 0x2f.staticPICS:Mutex<ChainedPics> =
Mutex::new(unsafe{ChainedPics::new(0x20,0x28)});
To perform runtime PIC intialization, call initialize before enabling
interrupts:
It's safe to call notify_end_of_interrupt after every interrupt; the
notify_end_of_interrupt function will try to figure out what it needs to
do.
All public PIC interfaces are unsafe, because it's really easy to trigger
undefined behavior by misconfiguring the PIC or using it incorrectly.
Crate Feature Flags
nightly - Uses features that are only usable on nightly Rust. Enabled by default.
stable - Enable this feature flag to build this crate on stable Rust. You have to add default-features = false, features = ["stable"] to your Cargo.toml.