diff --git a/src/scheme/itimer.rs b/src/scheme/itimer.rs deleted file mode 100644 index 0dc01b632b..0000000000 --- a/src/scheme/itimer.rs +++ /dev/null @@ -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> = RwLock::new(BTreeMap::new()); - -impl KernelScheme for ITimerScheme { - fn kopen(&self, path: &str, _flags: usize, _ctx: CallerCtx) -> Result { - let clock = path.parse::().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 { - Ok(0) - } - - fn fevent(&self, id: usize, _flags: EventFlags) -> Result { - 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 { - 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::()) { - current_chunk.copy_exactly(&ITimerSpec::default())?; - - specs_read += 1; - } - - Ok(specs_read * mem::size_of::()) - } - - fn kwrite( - &self, - id: usize, - buf: UserSliceRo, - _flags: u32, - _stored_flags: u32, - ) -> Result { - 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::()) { - let time = unsafe { chunk.read_exact::()? }; - - println!("{}: {:?}", specs_written, time); - specs_written += 1; - } - - Ok(specs_written * mem::size_of::()) - } - fn kfpath(&self, id: usize, buf: UserSliceWo) -> Result { - 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()) - } -} diff --git a/src/scheme/mod.rs b/src/scheme/mod.rs index 1941722171..d37bcc36cd 100644 --- a/src/scheme/mod.rs +++ b/src/scheme/mod.rs @@ -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::, Self::ProcRestricted => &ProcScheme::,