Remove unimplemented itimer scheme.

This commit is contained in:
4lDO2
2025-04-13 18:13:00 +02:00
parent f5f877ca22
commit 5d41cd7c53
2 changed files with 3 additions and 123 deletions
-112
View File
@@ -1,112 +0,0 @@
use alloc::collections::BTreeMap;
use core::{
mem, str,
sync::atomic::{AtomicUsize, Ordering},
};
use spin::RwLock;
use crate::{
context::file::InternalFlags,
syscall::{
data::ITimerSpec,
error::*,
flag::{EventFlags, CLOCK_MONOTONIC, CLOCK_REALTIME},
usercopy::{UserSliceRo, UserSliceWo},
},
};
use super::{CallerCtx, KernelScheme, OpenResult};
pub struct ITimerScheme;
static NEXT_ID: AtomicUsize = AtomicUsize::new(1);
// Using BTreeMap as hashbrown doesn't have a const constructor.
static HANDLES: RwLock<BTreeMap<usize, usize>> = RwLock::new(BTreeMap::new());
impl KernelScheme for ITimerScheme {
fn kopen(&self, path: &str, _flags: usize, _ctx: CallerCtx) -> Result<OpenResult> {
let clock = path.parse::<usize>().or(Err(Error::new(ENOENT)))?;
match clock {
CLOCK_REALTIME => (),
CLOCK_MONOTONIC => (),
_ => return Err(Error::new(ENOENT)),
}
let id = NEXT_ID.fetch_add(1, Ordering::Relaxed);
HANDLES.write().insert(id, clock);
Ok(OpenResult::SchemeLocal(id, InternalFlags::empty()))
}
fn fcntl(&self, _id: usize, _cmd: usize, _arg: usize) -> Result<usize> {
Ok(0)
}
fn fevent(&self, id: usize, _flags: EventFlags) -> Result<EventFlags> {
let handles = HANDLES.read();
handles
.get(&id)
.ok_or(Error::new(EBADF))
.and(Ok(EventFlags::empty()))
}
fn fsync(&self, id: usize) -> Result<()> {
HANDLES.read().get(&id).ok_or(Error::new(EBADF)).and(Ok(()))
}
fn close(&self, id: usize) -> Result<()> {
HANDLES
.write()
.remove(&id)
.ok_or(Error::new(EBADF))
.and(Ok(()))
}
fn kread(&self, id: usize, buf: UserSliceWo, _flags: u32, _stored_flags: u32) -> Result<usize> {
let _clock = {
let handles = HANDLES.read();
*handles.get(&id).ok_or(Error::new(EBADF))?
};
let mut specs_read = 0;
for current_chunk in buf.in_exact_chunks(mem::size_of::<ITimerSpec>()) {
current_chunk.copy_exactly(&ITimerSpec::default())?;
specs_read += 1;
}
Ok(specs_read * mem::size_of::<ITimerSpec>())
}
fn kwrite(
&self,
id: usize,
buf: UserSliceRo,
_flags: u32,
_stored_flags: u32,
) -> Result<usize> {
let _clock = {
let handles = HANDLES.read();
*handles.get(&id).ok_or(Error::new(EBADF))?
};
let mut specs_written = 0;
for chunk in buf.in_exact_chunks(mem::size_of::<ITimerSpec>()) {
let time = unsafe { chunk.read_exact::<ITimerSpec>()? };
println!("{}: {:?}", specs_written, time);
specs_written += 1;
}
Ok(specs_written * mem::size_of::<ITimerSpec>())
}
fn kfpath(&self, id: usize, buf: UserSliceWo) -> Result<usize> {
let clock = {
let handles = HANDLES.read();
*handles.get(&id).ok_or(Error::new(EBADF))?
};
buf.copy_common_bytes_from_slice(format!("time:{}", clock).as_bytes())
}
}
+3 -11
View File
@@ -32,9 +32,9 @@ use self::acpi::AcpiScheme;
use self::dtb::DtbScheme;
use self::{
debug::DebugScheme, event::EventScheme, irq::IrqScheme, itimer::ITimerScheme,
memory::MemoryScheme, pipe::PipeScheme, proc::ProcScheme, root::RootScheme, serio::SerioScheme,
sys::SysScheme, time::TimeScheme, user::UserScheme,
debug::DebugScheme, event::EventScheme, irq::IrqScheme, memory::MemoryScheme, pipe::PipeScheme,
proc::ProcScheme, root::RootScheme, serio::SerioScheme, sys::SysScheme, time::TimeScheme,
user::UserScheme,
};
/// When compiled with the "acpi" feature - `acpi:` - allows drivers to read a limited set of ACPI tables.
@@ -52,9 +52,6 @@ pub mod event;
/// `irq:` - allows userspace handling of IRQs
pub mod irq;
/// `itimer:` - support for getitimer and setitimer
pub mod itimer;
/// `memory:` - a scheme for accessing physical memory
pub mod memory;
@@ -139,7 +136,6 @@ impl SchemeList {
Serio,
Irq,
Time,
ITimer,
Sys,
ProcFull,
ProcRestricted,
@@ -185,8 +181,6 @@ impl SchemeList {
.unwrap();
self.insert_global(ns, "event", GlobalSchemes::Event)
.unwrap();
self.insert_global(ns, "itimer", GlobalSchemes::ITimer)
.unwrap();
self.insert_global(ns, "memory", GlobalSchemes::Memory)
.unwrap();
self.insert_global(ns, "pipe", GlobalSchemes::Pipe).unwrap();
@@ -543,7 +537,6 @@ pub enum GlobalSchemes {
Serio,
Irq,
Time,
ITimer,
Sys,
ProcFull,
ProcRestricted,
@@ -584,7 +577,6 @@ impl core::ops::Deref for GlobalSchemes {
Self::Serio => &SerioScheme,
Self::Irq => &IrqScheme,
Self::Time => &TimeScheme,
Self::ITimer => &ITimerScheme,
Self::Sys => &SysScheme,
Self::ProcFull => &ProcScheme::<true>,
Self::ProcRestricted => &ProcScheme::<false>,