Add sys:irq
This commit is contained in:
@@ -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
20
src/scheme/sys/irq.rs
Normal 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())
|
||||
}
|
||||
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user