Add sys:irq

This commit is contained in:
Jeremy Soller
2022-11-18 14:18:06 -07:00
parent 1e81c9d78b
commit d298459686
3 changed files with 25 additions and 3 deletions

View File

@@ -20,7 +20,7 @@ use crate::syscall::scheme::{calc_seek_offset_usize, Scheme};
pub static IRQ_SCHEME_ID: AtomicSchemeId = AtomicSchemeId::default();
/// IRQ queues
static COUNTS: Mutex<[usize; 224]> = Mutex::new([0; 224]);
pub(super) static COUNTS: Mutex<[usize; 224]> = Mutex::new([0; 224]);
static HANDLES: RwLock<Option<BTreeMap<usize, Handle>>> = RwLock::new(None);
/// These are IRQs 0..=15 (corresponding to interrupt vectors 32..=47). They are opened without the

20
src/scheme/sys/irq.rs Normal file
View File

@@ -0,0 +1,20 @@
use alloc::{
string::String,
vec::Vec,
};
use core::fmt::Write;
use crate::syscall::error::Result;
pub fn resource() -> Result<Vec<u8>> {
let mut string = String::new();
{
let counts = crate::scheme::irq::COUNTS.lock();
for (i, count) in counts.iter().enumerate() {
let _ = writeln!(string, "{}: {}", i, count);
}
}
Ok(string.into_bytes())
}

View File

@@ -9,13 +9,14 @@ use crate::syscall::data::Stat;
use crate::syscall::error::{Error, EBADF, ENOENT, Result};
use crate::syscall::flag::{MODE_DIR, MODE_FILE};
use crate::syscall::scheme::{calc_seek_offset_usize, Scheme};
use crate::arch::interrupt::irq;
use crate::arch::interrupt;
mod block;
mod context;
mod cpu;
mod exe;
mod iostat;
mod irq;
mod log;
mod scheme;
mod scheme_num;
@@ -47,6 +48,7 @@ impl SysScheme {
files.insert("cpu", Box::new(cpu::resource));
files.insert("exe", Box::new(exe::resource));
files.insert("iostat", Box::new(iostat::resource));
files.insert("irq", Box::new(irq::resource));
files.insert("log", Box::new(log::resource));
files.insert("scheme", Box::new(scheme::resource));
files.insert("scheme_num", Box::new(scheme_num::resource));
@@ -54,7 +56,7 @@ impl SysScheme {
files.insert("uname", Box::new(uname::resource));
files.insert("env", Box::new(|| Ok(Vec::from(crate::init_env()))));
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
files.insert("spurious_irq", Box::new(irq::spurious_irq_resource));
files.insert("spurious_irq", Box::new(interrupt::irq::spurious_irq_resource));
SysScheme {
next_id: AtomicUsize::new(0),