From d29845968666e15f4b1a2c9dbe4c0fb2561e8baf Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Fri, 18 Nov 2022 14:18:06 -0700 Subject: [PATCH] Add sys:irq --- src/scheme/irq.rs | 2 +- src/scheme/sys/irq.rs | 20 ++++++++++++++++++++ src/scheme/sys/mod.rs | 6 ++++-- 3 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 src/scheme/sys/irq.rs diff --git a/src/scheme/irq.rs b/src/scheme/irq.rs index 2f46d29..abd7b59 100644 --- a/src/scheme/irq.rs +++ b/src/scheme/irq.rs @@ -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>> = RwLock::new(None); /// These are IRQs 0..=15 (corresponding to interrupt vectors 32..=47). They are opened without the diff --git a/src/scheme/sys/irq.rs b/src/scheme/sys/irq.rs new file mode 100644 index 0000000..7e4b69c --- /dev/null +++ b/src/scheme/sys/irq.rs @@ -0,0 +1,20 @@ +use alloc::{ + string::String, + vec::Vec, +}; +use core::fmt::Write; + +use crate::syscall::error::Result; + +pub fn resource() -> Result> { + 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()) +} diff --git a/src/scheme/sys/mod.rs b/src/scheme/sys/mod.rs index 70b5399..fadbd5b 100644 --- a/src/scheme/sys/mod.rs +++ b/src/scheme/sys/mod.rs @@ -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),