diff --git a/Cargo.lock b/Cargo.lock index a049a93f31..29c7c216d7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,13 +8,12 @@ version = "0.1.0" dependencies = [ "bitflags 1.3.2", "common", - "libredox 0.1.3", "log", "pcid", "redox-daemon", "redox-log", "redox_event 0.1.0", - "redox_syscall 0.5.1", + "redox_syscall 0.4.1", "spin", ] @@ -25,7 +24,6 @@ dependencies = [ "aml", "amlserde", "common", - "libredox 0.1.3", "log", "num-derive", "num-traits", @@ -47,7 +45,6 @@ dependencies = [ "byteorder", "common", "driver-block", - "libredox 0.1.3", "log", "pcid", "redox-daemon", @@ -61,10 +58,9 @@ version = "0.1.0" dependencies = [ "bitflags 1.3.2", "common", - "libredox 0.1.3", "redox-daemon", "redox_event 0.1.0", - "redox_syscall 0.5.1", + "redox_syscall 0.4.1", ] [[package]] @@ -155,7 +151,6 @@ dependencies = [ "common", "driver-block", "fdt 0.1.5", - "libredox 0.1.3", "redox-daemon", "redox_syscall 0.4.1", ] @@ -164,7 +159,6 @@ dependencies = [ name = "bgad" version = "0.1.0" dependencies = [ - "libredox 0.1.3", "orbclient", "pcid", "redox-daemon", @@ -286,8 +280,7 @@ dependencies = [ name = "common" version = "0.1.0" dependencies = [ - "libredox 0.1.3", - "redox_syscall 0.5.1", + "redox_syscall 0.4.1", ] [[package]] @@ -363,9 +356,8 @@ dependencies = [ name = "driver-network" version = "0.1.0" dependencies = [ - "libredox 0.1.3", "redox_event 0.1.0", - "redox_syscall 0.5.1", + "redox_syscall 0.4.1", ] [[package]] @@ -375,11 +367,10 @@ dependencies = [ "bitflags 1.3.2", "common", "driver-network", - "libredox 0.1.3", "pcid", "redox-daemon", "redox_event 0.1.0", - "redox_syscall 0.5.1", + "redox_syscall 0.4.1", ] [[package]] @@ -393,7 +384,6 @@ name = "fbcond" version = "0.1.0" dependencies = [ "inputd", - "libredox 0.1.3", "orbclient", "ransid", "redox-daemon", @@ -592,7 +582,6 @@ version = "0.1.0" dependencies = [ "common", "driver-block", - "libredox 0.1.3", "log", "pcid", "redox-daemon", @@ -606,7 +595,6 @@ version = "0.1.0" dependencies = [ "bitflags 1.3.2", "common", - "libredox 0.1.3", "log", "pcid", "redox-daemon", @@ -631,12 +619,11 @@ name = "inputd" version = "0.1.0" dependencies = [ "anyhow", - "libredox 0.1.3", "log", "orbclient", "redox-daemon", "redox-log", - "redox_syscall 0.5.1", + "redox_syscall 0.4.1", "spin", ] @@ -662,11 +649,10 @@ dependencies = [ "bitflags 1.3.2", "common", "driver-network", - "libredox 0.1.3", "pcid", "redox-daemon", "redox_event 0.1.0", - "redox_syscall 0.5.1", + "redox_syscall 0.4.1", ] [[package]] @@ -703,13 +689,12 @@ dependencies = [ [[package]] name = "libredox" -version = "0.1.3" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +checksum = "138adbe77ccf68e1925b6ed3cc45e83a6845f17a687d6061ddeb518e9b756440" dependencies = [ "bitflags 2.4.2", "libc", - "redox_syscall 0.5.1", ] [[package]] @@ -717,7 +702,6 @@ name = "lived" version = "0.1.0" dependencies = [ "anyhow", - "libredox 0.1.3", "redox-daemon", "redox_syscall 0.4.1", "slab", @@ -787,7 +771,6 @@ dependencies = [ "crossbeam-channel", "driver-block", "futures", - "libredox 0.1.3", "log", "partitionlib", "pcid", @@ -934,7 +917,6 @@ dependencies = [ "common", "fdt 0.1.0", "libc", - "libredox 0.1.3", "log", "paw", "pci_types", @@ -952,7 +934,6 @@ dependencies = [ name = "pcspkrd" version = "0.1.0" dependencies = [ - "libredox 0.1.3", "redox-daemon", "redox_syscall 0.4.1", ] @@ -1013,7 +994,6 @@ name = "ps2d" version = "0.1.0" dependencies = [ "bitflags 1.3.2", - "libredox 0.1.3", "orbclient", "redox-daemon", "redox_syscall 0.4.1", @@ -1087,7 +1067,7 @@ version = "0.1.3" source = "git+https://gitlab.redox-os.org/redox-os/redox-daemon.git#31ab115cf17d6fe333515bfe19ac477352a1dcc0" dependencies = [ "libc", - "libredox 0.1.3", + "libredox 0.1.0", ] [[package]] @@ -1121,16 +1101,6 @@ dependencies = [ "redox_syscall 0.4.1", ] -[[package]] -name = "redox_event" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69609faa5d5992247a4ef379917bb3e39be281405d6a0ccd4f942429400b956f" -dependencies = [ - "bitflags 2.4.2", - "libredox 0.1.3", -] - [[package]] name = "redox_syscall" version = "0.2.16" @@ -1158,15 +1128,6 @@ dependencies = [ "bitflags 1.3.2", ] -[[package]] -name = "redox_syscall" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" -dependencies = [ - "bitflags 2.4.2", -] - [[package]] name = "redox_termios" version = "0.1.2" @@ -1183,13 +1144,12 @@ dependencies = [ "bitflags 1.3.2", "common", "driver-network", - "libredox 0.1.3", "log", "pcid", "redox-daemon", "redox-log", "redox_event 0.1.0", - "redox_syscall 0.5.1", + "redox_syscall 0.4.1", ] [[package]] @@ -1199,13 +1159,12 @@ dependencies = [ "bitflags 1.3.2", "common", "driver-network", - "libredox 0.1.3", "log", "pcid", "redox-daemon", "redox-log", "redox_event 0.1.0", - "redox_syscall 0.5.1", + "redox_syscall 0.4.1", ] [[package]] @@ -1226,7 +1185,6 @@ version = "0.1.0" dependencies = [ "bitflags 1.3.2", "common", - "libredox 0.1.3", "log", "redox-daemon", "redox-log", @@ -1568,7 +1526,6 @@ name = "usbscsid" version = "0.1.0" dependencies = [ "base64", - "libredox 0.1.3", "plain", "redox-daemon", "redox_syscall 0.4.1", @@ -1602,12 +1559,11 @@ name = "vboxd" version = "0.1.0" dependencies = [ "common", - "libredox 0.1.3", "orbclient", "pcid", "redox-daemon", "redox_event 0.1.0", - "redox_syscall 0.5.1", + "redox_syscall 0.4.1", ] [[package]] @@ -1634,7 +1590,6 @@ version = "0.1.0" dependencies = [ "common", "inputd", - "libredox 0.1.3", "orbclient", "ransid", "redox-daemon", @@ -1649,7 +1604,6 @@ dependencies = [ "common", "driver-block", "futures", - "libredox 0.1.3", "log", "partitionlib", "pcid", @@ -1670,7 +1624,6 @@ dependencies = [ "common", "crossbeam-queue", "futures", - "libredox 0.1.3", "log", "pcid", "redox-log", @@ -1688,7 +1641,6 @@ dependencies = [ "common", "futures", "inputd", - "libredox 0.1.3", "log", "orbclient", "paste", @@ -1707,11 +1659,10 @@ dependencies = [ "common", "driver-network", "futures", - "libredox 0.1.3", "log", "pcid", "redox-daemon", - "redox_syscall 0.5.1", + "redox_syscall 0.4.1", "static_assertions", "virtio-core", ] @@ -1901,14 +1852,13 @@ dependencies = [ "crossbeam-channel", "futures", "lazy_static", - "libredox 0.1.3", "log", "pcid", "plain", "redox-daemon", "redox-log", - "redox_event 0.4.1", - "redox_syscall 0.5.1", + "redox_event 0.1.0", + "redox_syscall 0.4.1", "serde", "serde_json", "smallvec 1.11.0", diff --git a/acpid/Cargo.toml b/acpid/Cargo.toml index 23db6931f5..92a6e8027d 100644 --- a/acpid/Cargo.toml +++ b/acpid/Cargo.toml @@ -22,4 +22,3 @@ serde_json = "1.0.94" amlserde = { path = "../amlserde" } common = { path = "../common" } -libredox = "0.1.3" diff --git a/acpid/src/acpi.rs b/acpid/src/acpi.rs index 6f73bab115..9bd620ef6d 100644 --- a/acpid/src/acpi.rs +++ b/acpid/src/acpi.rs @@ -124,7 +124,7 @@ impl Deref for PhysmapGuard { impl Drop for PhysmapGuard { fn drop(&mut self) { unsafe { - let _ = libredox::call::munmap(self.virt as *mut (), self.size); + let _ = syscall::funmap(self.virt as usize, self.size); } } } diff --git a/acpid/src/acpi/dmar/drhd.rs b/acpid/src/acpi/dmar/drhd.rs index 70c8f8b42b..091f553e95 100644 --- a/acpid/src/acpi/dmar/drhd.rs +++ b/acpid/src/acpi/dmar/drhd.rs @@ -35,7 +35,7 @@ impl DerefMut for DrhdPage { impl Drop for DrhdPage { fn drop(&mut self) { unsafe { - let _ = libredox::call::munmap(self.virt.cast(), crate::acpi::PAGE_SIZE); + let _ = syscall::funmap(self.virt as usize, crate::acpi::PAGE_SIZE); } } } diff --git a/acpid/src/aml_physmem.rs b/acpid/src/aml_physmem.rs index 6658de3ee7..98d78f1910 100644 --- a/acpid/src/aml_physmem.rs +++ b/acpid/src/aml_physmem.rs @@ -29,7 +29,7 @@ impl MappedPage { impl Drop for MappedPage { fn drop(&mut self) { log::trace!("Drop page {:#x}", self.phys_page); - if let Err(e) = unsafe { libredox::call::munmap(self.virt_page as *mut (), PAGE_SIZE) } { + if let Err(e) = unsafe { syscall::funmap(self.virt_page, PAGE_SIZE) } { log::error!("funmap (phys): {:?}", e); } } @@ -212,7 +212,7 @@ impl aml::Handler for AmlPhysMemHandler { } } - // Pio must be enabled via syscall::iopl + // Pio must be enabled via syscall::iopl(3) fn read_io_u8(&self, port: u16) -> u8 { Pio::::new(port).read() } diff --git a/acpid/src/main.rs b/acpid/src/main.rs index 93c54f9558..e4c8711045 100644 --- a/acpid/src/main.rs +++ b/acpid/src/main.rs @@ -113,8 +113,8 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { let acpi_context = self::acpi::AcpiContext::init(physaddrs_iter); - // TODO: I/O permission bitmap? - common::acquire_port_io_rights().expect("acpid: failed to set I/O privilege level to Ring 3"); + // TODO: I/O permission bitmap + unsafe { syscall::iopl(3) }.expect("acpid: failed to set I/O privilege level to Ring 3"); let shutdown_pipe = File::open("kernel.acpi:kstop") .expect("acpid: failed to open `kernel.acpi:kstop`"); @@ -136,7 +136,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { daemon.ready().expect("acpid: failed to notify parent"); - libredox::call::setrens(0, 0).expect("acpid: failed to enter null namespace"); + syscall::setrens(0, 0).expect("acpid: failed to enter null namespace"); let _ = event_queue.write(&Event { id: shutdown_pipe.as_raw_fd() as usize, diff --git a/audio/ac97d/Cargo.toml b/audio/ac97d/Cargo.toml index 50b781cfca..4d780d5d99 100644 --- a/audio/ac97d/Cargo.toml +++ b/audio/ac97d/Cargo.toml @@ -10,8 +10,7 @@ log = "0.4" redox-daemon = "0.1" redox-log = "0.1" redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" } -redox_syscall = "0.5" +redox_syscall = "0.4" spin = "0.9" pcid = { path = "../../pcid" } -libredox = "0.1.3" diff --git a/audio/ac97d/src/main.rs b/audio/ac97d/src/main.rs index 8649e671d6..2a26dc193b 100644 --- a/audio/ac97d/src/main.rs +++ b/audio/ac97d/src/main.rs @@ -13,7 +13,6 @@ use std::sync::Arc; use std::usize; use event::EventQueue; -use libredox::flag; use pcid_interface::{PciBar, PcidServerHandle}; use redox_log::{OutputBuilder, RedoxLogger}; use syscall::{EventFlags, Packet, SchemeBlockMut}; @@ -85,19 +84,19 @@ fn main() { redox_daemon::Daemon::new(move |daemon| { let _logger_ref = setup_logging(); - common::acquire_port_io_rights().expect("ac97d: failed to set I/O privilege level to Ring 3"); + unsafe { syscall::iopl(3) }.expect("ac97d: failed to set I/O privilege level to Ring 3"); let mut irq_file = irq.irq_handle("ac97d"); let device = Arc::new(RefCell::new(unsafe { device::Ac97::new(bar0, bar1).expect("ac97d: failed to allocate device") })); - let socket_fd = libredox::call::open(":audiohw", flag::O_RDWR | flag::O_CREAT | flag::O_NONBLOCK, 0).expect("ac97d: failed to create hda scheme"); + let socket_fd = syscall::open(":audiohw", syscall::O_RDWR | syscall::O_CREAT | syscall::O_NONBLOCK).expect("ac97d: failed to create hda scheme"); let socket = Arc::new(RefCell::new(unsafe { File::from_raw_fd(socket_fd as RawFd) })); daemon.ready().expect("ac97d: failed to signal readiness"); let mut event_queue = EventQueue::::new().expect("ac97d: Could not create event queue."); - libredox::call::setrens(0, 0).expect("ac97d: failed to enter null namespace"); + syscall::setrens(0, 0).expect("ac97d: failed to enter null namespace"); let todo = Arc::new(RefCell::new(Vec::::new())); @@ -168,7 +167,7 @@ fn main() { for event_count in event_queue.trigger_all(event::Event { fd: 0, - flags: Default::default(), + flags: EventFlags::empty(), }).expect("ac97d: failed to trigger events") { socket.borrow_mut().write(&Packet { id: 0, diff --git a/audio/ihdad/Cargo.toml b/audio/ihdad/Cargo.toml old mode 100644 new mode 100755 index 736e98d31e..32f294d95a --- a/audio/ihdad/Cargo.toml +++ b/audio/ihdad/Cargo.toml @@ -14,4 +14,3 @@ spin = "0.9" common = { path = "../../common" } pcid = { path = "../../pcid" } -libredox = "0.1.3" diff --git a/audio/ihdad/src/main.rs b/audio/ihdad/src/main.rs index bb29a49007..7eeba58e2a 100755 --- a/audio/ihdad/src/main.rs +++ b/audio/ihdad/src/main.rs @@ -10,7 +10,6 @@ use std::usize; use std::fs::File; use std::io::{ErrorKind, Read, Write, Result}; use std::os::unix::io::{AsRawFd, FromRawFd, RawFd}; -use libredox::flag; use syscall::{Packet, SchemeBlockMut, EventFlags}; use std::cell::RefCell; use std::sync::Arc; @@ -163,13 +162,13 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { | (pci_config.func.full_device_id.device_id as u32); let device = Arc::new(RefCell::new(unsafe { hda::IntelHDA::new(address, vend_prod).expect("ihdad: failed to allocate device") })); - let socket_fd = libredox::call::open(":audiohw", flag::O_RDWR | flag::O_CREAT | flag::O_NONBLOCK, 0).expect("ihdad: failed to create hda scheme"); + let socket_fd = syscall::open(":audiohw", syscall::O_RDWR | syscall::O_CREAT | syscall::O_NONBLOCK).expect("ihdad: failed to create hda scheme"); let socket = Arc::new(RefCell::new(unsafe { File::from_raw_fd(socket_fd as RawFd) })); daemon.ready().expect("ihdad: failed to signal readiness"); let mut event_queue = EventQueue::::new().expect("ihdad: Could not create event queue."); - libredox::call::setrens(0, 0).expect("ihdad: failed to enter null namespace"); + syscall::setrens(0, 0).expect("ihdad: failed to enter null namespace"); let todo = Arc::new(RefCell::new(Vec::::new())); diff --git a/audio/pcspkrd/Cargo.toml b/audio/pcspkrd/Cargo.toml index 72bae14204..8f355d4e53 100644 --- a/audio/pcspkrd/Cargo.toml +++ b/audio/pcspkrd/Cargo.toml @@ -7,4 +7,3 @@ edition = "2018" [dependencies] redox_syscall = "0.4" redox-daemon = "0.1" -libredox = "0.1.3" diff --git a/audio/pcspkrd/src/main.rs b/audio/pcspkrd/src/main.rs index 75957745c3..7f9bfc1e40 100644 --- a/audio/pcspkrd/src/main.rs +++ b/audio/pcspkrd/src/main.rs @@ -29,7 +29,7 @@ fn main() { next_id: 0, }; - libredox::call::setrens(0, 0).expect("pcspkrd: failed to enter null namespace"); + syscall::setrens(0, 0).expect("pcspkrd: failed to enter null namespace"); loop { let mut packet = Packet::default(); diff --git a/audio/sb16d/Cargo.toml b/audio/sb16d/Cargo.toml index eb5a92a6e8..ccabfa3514 100644 --- a/audio/sb16d/Cargo.toml +++ b/audio/sb16d/Cargo.toml @@ -6,7 +6,6 @@ edition = "2018" [dependencies] bitflags = "1" common = { path = "../../common" } -libredox = "0.1.3" log = "0.4" redox-daemon = "0.1" redox-log = "0.1" diff --git a/audio/sb16d/src/main.rs b/audio/sb16d/src/main.rs index 814ed2066d..6671ac9b39 100644 --- a/audio/sb16d/src/main.rs +++ b/audio/sb16d/src/main.rs @@ -9,7 +9,6 @@ use std::{env, usize}; use std::fs::File; use std::io::{ErrorKind, Read, Write, Result}; use std::os::unix::io::{AsRawFd, FromRawFd, RawFd}; -use libredox::flag; use syscall::{Packet, SchemeBlockMut, EventFlags}; use std::cell::RefCell; use std::sync::Arc; @@ -75,10 +74,10 @@ fn main() { redox_daemon::Daemon::new(move |daemon| { let _logger_ref = setup_logging(); - common::acquire_port_io_rights().expect("sb16d: failed to acquire port IO rights"); + unsafe { syscall::iopl(3) }.expect("sb16d: failed to set I/O privilege level to Ring 3"); let device = Arc::new(RefCell::new(unsafe { device::Sb16::new(addr).expect("sb16d: failed to allocate device") })); - let socket_fd = libredox::call::open(":audiohw", flag::O_RDWR | flag::O_CREAT | flag::O_NONBLOCK, 0).expect("sb16d: failed to create hda scheme"); + let socket_fd = syscall::open(":audiohw", syscall::O_RDWR | syscall::O_CREAT | syscall::O_NONBLOCK).expect("sb16d: failed to create hda scheme"); let socket = Arc::new(RefCell::new(unsafe { File::from_raw_fd(socket_fd as RawFd) })); //TODO: error on multiple IRQs? @@ -91,7 +90,7 @@ fn main() { let mut event_queue = EventQueue::::new().expect("sb16d: Could not create event queue."); - libredox::call::setrens(0, 0).expect("sb16d: failed to enter null namespace"); + syscall::setrens(0, 0).expect("sb16d: failed to enter null namespace"); let todo = Arc::new(RefCell::new(Vec::::new())); @@ -99,8 +98,6 @@ fn main() { let device_irq = device.clone(); let socket_irq = socket.clone(); - // TODO: Use new event queue API - event_queue.add(irq_file.as_raw_fd(), move |_event| -> Result> { let mut irq = [0; 8]; irq_file.read(&mut irq)?; diff --git a/common/Cargo.toml b/common/Cargo.toml index c1a072fa5d..02b611d345 100644 --- a/common/Cargo.toml +++ b/common/Cargo.toml @@ -8,5 +8,4 @@ license = "MIT" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -libredox = "0.1.3" -redox_syscall = "0.5" +redox_syscall = "0.4" diff --git a/common/src/dma.rs b/common/src/dma.rs index 1adbbc6392..ec06623360 100644 --- a/common/src/dma.rs +++ b/common/src/dma.rs @@ -2,10 +2,10 @@ use std::mem::{self, size_of, MaybeUninit}; use std::ops::{Deref, DerefMut}; use std::ptr; -use libredox::call::MmapArgs; -use libredox::{flag, error::Result, Fd}; use syscall::PAGE_SIZE; +use syscall::Result; + use crate::MemoryType; const DMA_MEMTY: MemoryType = { @@ -20,26 +20,30 @@ const DMA_MEMTY: MemoryType = { } }; -fn alloc_and_map(length: usize) -> Result<(usize, *mut ())> { - assert_eq!(length % PAGE_SIZE, 0); +fn alloc_and_map(len: usize) -> Result<(usize, *mut ())> { + assert_eq!(len % PAGE_SIZE, 0); unsafe { - let fd = Fd::open( - &format!("memory:zeroed@{DMA_MEMTY}?phys_contiguous"), - flag::O_CLOEXEC, - 0, + let fd = syscall::open( + format!("memory:zeroed@{DMA_MEMTY}?phys_contiguous"), + syscall::O_CLOEXEC, )?; - let virt = libredox::call::mmap(MmapArgs { - fd: fd.raw(), - offset: 0, // ignored - addr: core::ptr::null_mut(), // ignored - length, - flags: flag::MAP_PRIVATE, - prot: flag::PROT_READ | flag::PROT_WRITE, - })?; - let phys = syscall::virttophys(virt as usize)?; - for i in 1..length.div_ceil(PAGE_SIZE) { - debug_assert_eq!(syscall::virttophys(virt as usize + i * PAGE_SIZE), Ok(phys + i * PAGE_SIZE), "NOT CONTIGUOUS"); - } + let virt = syscall::fmap( + fd, + &syscall::Map { + offset: 0, // ignored + address: 0, // ignored + size: len, + flags: syscall::MapFlags::MAP_PRIVATE + | syscall::MapFlags::PROT_READ + | syscall::MapFlags::PROT_WRITE, + }, + ); + let _ = syscall::close(fd); + let virt = virt?; + let phys = syscall::virttophys(virt)?; + /*for i in 1..len.div_ceil(PAGE_SIZE) { + assert_eq!(syscall::virttophys(virt + i * PAGE_SIZE), Ok(phys + i * PAGE_SIZE), "NOT CONTIGUOUS"); + }*/ Ok((phys, virt as *mut ())) } } @@ -155,7 +159,7 @@ impl Drop for Dma { fn drop(&mut self) { unsafe { ptr::drop_in_place(self.virt); - let _ = libredox::call::munmap(self.virt as *mut (), self.aligned_len); + let _ = syscall::funmap(self.virt as *mut u8 as usize, self.aligned_len); } } } diff --git a/common/src/lib.rs b/common/src/lib.rs index 2107a08660..2a9240f193 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -1,8 +1,7 @@ #![feature(int_roundings)] -use libredox::call::MmapArgs; -use libredox::{Fd, error::*, errno::EINVAL}; -use libredox::flag::{self, O_CLOEXEC, O_RDONLY, O_RDWR, O_WRONLY}; +use syscall::error::{Error, Result, EINVAL}; +use syscall::flag::{MapFlags, O_CLOEXEC, O_RDONLY, O_RDWR, O_WRONLY}; use syscall::PAGE_SIZE; pub mod dma; @@ -64,23 +63,23 @@ pub unsafe fn physmap( (false, true) => O_WRONLY, (false, false) => return Err(Error::new(EINVAL)), }; - let mut prot = 0; - if read { - prot |= flag::PROT_READ; - } - if write { - prot |= flag::PROT_WRITE; - } + let mut prot = MapFlags::empty(); + prot.set(MapFlags::PROT_READ, read); + prot.set(MapFlags::PROT_WRITE, write); - let fd = Fd::open(&path, O_CLOEXEC | mode, 0)?; - Ok(libredox::call::mmap(MmapArgs { - fd: fd.raw(), - offset: base_phys as u64, - length: len.next_multiple_of(PAGE_SIZE), - flags: flag::MAP_SHARED, - prot, - addr: core::ptr::null_mut(), - })? as *mut ()) + let file = syscall::open(path, O_CLOEXEC | mode)?; + let base = syscall::fmap( + file, + &syscall::Map { + offset: base_phys, + size: len.next_multiple_of(PAGE_SIZE), + flags: MapFlags::MAP_SHARED | prot, + address: 0, + }, + ); + let _ = syscall::close(file); + + Ok(base? as *mut ()) } impl std::fmt::Display for MemoryType { @@ -120,14 +119,7 @@ impl PhysBorrowed { impl Drop for PhysBorrowed { fn drop(&mut self) { unsafe { - let _ = libredox::call::munmap(self.mem, self.len); + let _ = syscall::funmap(self.mem as usize, self.len); } } } - -pub fn acquire_port_io_rights() -> Result<()> { - unsafe { - syscall::iopl(3)?; - } - Ok(()) -} diff --git a/graphics/bgad/Cargo.toml b/graphics/bgad/Cargo.toml index 0c439fd17a..afa6619215 100644 --- a/graphics/bgad/Cargo.toml +++ b/graphics/bgad/Cargo.toml @@ -9,4 +9,3 @@ redox-daemon = "0.1" redox_syscall = "0.4" pcid = { path = "../../pcid" } -libredox = "0.1.3" diff --git a/graphics/bgad/src/main.rs b/graphics/bgad/src/main.rs index a80423f392..18ac70df34 100644 --- a/graphics/bgad/src/main.rs +++ b/graphics/bgad/src/main.rs @@ -42,7 +42,7 @@ fn main() { scheme.update_size(); - libredox::call::setrens(0, 0).expect("bgad: failed to enter null namespace"); + syscall::setrens(0, 0).expect("bgad: failed to enter null namespace"); daemon.ready().expect("bgad: failed to notify parent"); diff --git a/graphics/fbcond/Cargo.toml b/graphics/fbcond/Cargo.toml index fb930d8ab8..d934921104 100644 --- a/graphics/fbcond/Cargo.toml +++ b/graphics/fbcond/Cargo.toml @@ -11,7 +11,6 @@ redox_syscall = "0.4" redox-daemon = "0.1" inputd = { path = "../../inputd" } -libredox = "0.1.3" [features] default = [] diff --git a/graphics/fbcond/src/display.rs b/graphics/fbcond/src/display.rs index e2d3798046..da16fe5804 100644 --- a/graphics/fbcond/src/display.rs +++ b/graphics/fbcond/src/display.rs @@ -8,7 +8,6 @@ use std::{ os::unix::io::{AsRawFd, FromRawFd}, slice, }; -use libredox::flag; use syscall::{O_CLOEXEC, O_NONBLOCK, O_RDWR}; // Keep synced with vesad @@ -23,14 +22,15 @@ pub struct SyncRect { fn display_fd_map(width: usize, height: usize, display_fd: usize) -> syscall::Result<*mut [u32]> { unsafe { - let display_ptr = libredox::call::mmap(libredox::call::MmapArgs { - fd: display_fd, - offset: 0, - length: (width * height * 4), - prot: flag::PROT_READ | flag::PROT_WRITE, - flags: flag::MAP_SHARED, - addr: core::ptr::null_mut(), - })?; + let display_ptr = syscall::fmap( + display_fd, + &syscall::Map { + offset: 0, + size: (width * height * 4), + flags: syscall::PROT_READ | syscall::PROT_WRITE | syscall::MAP_SHARED, + address: 0, + }, + )?; let display_slice = slice::from_raw_parts_mut(display_ptr as *mut u32, width * height); Ok(display_slice) } @@ -38,7 +38,7 @@ fn display_fd_map(width: usize, height: usize, display_fd: usize) -> syscall::Re unsafe fn display_fd_unmap(image: *mut [u32], size: usize) { // FIXME use image.len() instead of size once it is stable. - let _ = libredox::call::munmap(image as *mut (), size * 4); + let _ = syscall::funmap(image as *mut u32 as usize, size * 4); } pub struct Display { @@ -59,7 +59,7 @@ impl Display { .open(format!("input:consumer/{vt}"))?; let fd = input_handle.as_raw_fd(); - let written = libredox::call::fpath(fd as usize, &mut buffer) + let written = syscall::fpath(fd as usize, &mut buffer) .expect("init: failed to get the path to the display device"); assert!(written <= buffer.len()); @@ -67,7 +67,7 @@ impl Display { let display_path = std::str::from_utf8(&buffer[..written]).expect("init: display path UTF-8 check failed"); - let display_file = libredox::call::open(display_path, (O_CLOEXEC | O_NONBLOCK | O_RDWR) as _, 0) + let display_file = syscall::open(display_path, O_CLOEXEC | O_NONBLOCK | O_RDWR) .map(|socket| unsafe { File::from_raw_fd(socket as RawFd) }) .unwrap_or_else(|err| { panic!("failed to open display {}: {}", display_path, err); @@ -75,7 +75,7 @@ impl Display { let mut buf: [u8; 4096] = [0; 4096]; let count = - libredox::call::fpath(display_file.as_raw_fd() as usize, &mut buf).unwrap_or_else(|e| { + syscall::fpath(display_file.as_raw_fd() as usize, &mut buf).unwrap_or_else(|e| { panic!("Could not read display path with fpath(): {e}"); }); @@ -138,7 +138,7 @@ impl Display { pub fn sync_rect(&mut self, sync_rect: SyncRect) -> syscall::Result<()> { unsafe { - libredox::call::write( + syscall::write( self.display_file.as_raw_fd().as_raw_fd() as usize, slice::from_raw_parts( &sync_rect as *const SyncRect as *const u8, diff --git a/graphics/fbcond/src/main.rs b/graphics/fbcond/src/main.rs index 4db9e1b5fc..cd0a859810 100644 --- a/graphics/fbcond/src/main.rs +++ b/graphics/fbcond/src/main.rs @@ -53,7 +53,7 @@ fn inner(daemon: redox_daemon::Daemon, vt_ids: &[usize]) -> ! { let mut scheme = FbconScheme::new(vt_ids, &mut event_queue); - libredox::call::setrens(0, 0).expect("fbcond: failed to enter null namespace"); + syscall::setrens(0, 0).expect("fbcond: failed to enter null namespace"); daemon.ready().expect("failed to notify parent"); diff --git a/graphics/fbcond/src/text.rs b/graphics/fbcond/src/text.rs index 7f75c6fbc5..bdc24d66f5 100644 --- a/graphics/fbcond/src/text.rs +++ b/graphics/fbcond/src/text.rs @@ -320,7 +320,7 @@ impl TextScreen { })?; } self.changed.clear(); - libredox::call::fsync(self.display.display_file.as_raw_fd().as_raw_fd() as usize)?; + syscall::fsync(self.display.display_file.as_raw_fd().as_raw_fd() as usize)?; Ok(buf.len()) } diff --git a/graphics/vesad/Cargo.toml b/graphics/vesad/Cargo.toml index da97862697..5d6542ccf5 100644 --- a/graphics/vesad/Cargo.toml +++ b/graphics/vesad/Cargo.toml @@ -11,7 +11,6 @@ redox-daemon = "0.1" common = { path = "../../common" } inputd = { path = "../../inputd" } -libredox = "0.1.3" [features] default = [] diff --git a/graphics/vesad/src/main.rs b/graphics/vesad/src/main.rs index 2b6fd953c4..9f1d8f2901 100644 --- a/graphics/vesad/src/main.rs +++ b/graphics/vesad/src/main.rs @@ -88,7 +88,7 @@ fn inner(daemon: redox_daemon::Daemon, framebuffers: Vec, spec: &[( let mut scheme = DisplayScheme::new(framebuffers, &spec); - libredox::call::setrens(0, 0).expect("vesad: failed to enter null namespace"); + syscall::setrens(0, 0).expect("vesad: failed to enter null namespace"); daemon.ready().expect("failed to notify parent"); diff --git a/graphics/vesad/src/scheme.rs b/graphics/vesad/src/scheme.rs index 4b94801b16..7f12cf0f9c 100644 --- a/graphics/vesad/src/scheme.rs +++ b/graphics/vesad/src/scheme.rs @@ -95,7 +95,7 @@ impl DisplayScheme { // Unmap old onscreen unsafe { let slice = mem::take(&mut self.onscreens[fb_i]); - libredox::call::munmap(slice.as_mut_ptr().cast(), (slice.len() * 4).next_multiple_of(PAGE_SIZE)).expect("vesad: failed to unmap framebuffer"); + syscall::funmap(slice.as_mut_ptr() as usize, (slice.len() * 4).next_multiple_of(PAGE_SIZE)).expect("vesad: failed to unmap framebuffer"); } // Map new onscreen diff --git a/graphics/virtio-gpud/Cargo.toml b/graphics/virtio-gpud/Cargo.toml index 7d9d17b2f5..a51e8b5a7a 100644 --- a/graphics/virtio-gpud/Cargo.toml +++ b/graphics/virtio-gpud/Cargo.toml @@ -20,4 +20,3 @@ redox-daemon = "0.1" redox_syscall = "0.4" orbclient = "0.3.27" spin = "0.9.8" -libredox = "0.1.3" diff --git a/inputd/Cargo.toml b/inputd/Cargo.toml index 9b900edc13..e88ab86f9e 100644 --- a/inputd/Cargo.toml +++ b/inputd/Cargo.toml @@ -7,9 +7,8 @@ authors = ["Anhad Singh "] [dependencies] anyhow = "1.0.71" log = "0.4.19" -redox-daemon = "0.1.2" +redox-daemon = "0.1.0" redox-log = "0.1.1" -redox_syscall = "0.5" +redox_syscall = "0.4" orbclient = "0.3.27" spin = "0.9.8" -libredox = "0.1.3" diff --git a/inputd/src/lib.rs b/inputd/src/lib.rs index 3112964993..4a52c09403 100644 --- a/inputd/src/lib.rs +++ b/inputd/src/lib.rs @@ -91,7 +91,7 @@ impl Cmd { } } -pub fn send_comand(file: &mut File, command: Cmd) -> Result<(), libredox::error::Error> { +pub fn send_comand(file: &mut File, command: Cmd) -> Result<(), syscall::Error> { use std::os::fd::AsRawFd; let mut result = vec![]; @@ -119,7 +119,7 @@ pub fn send_comand(file: &mut File, command: Cmd) -> Result<(), libredox::error: } }; - let written = libredox::call::write(file.as_raw_fd() as usize, &result)?; + let written = syscall::write(file.as_raw_fd() as usize, &result)?; // XXX: Ensure all of the data is written. assert_eq!(written, result.len()); diff --git a/inputd/src/main.rs b/inputd/src/main.rs index e8b34c9585..23f6b7b4e3 100644 --- a/inputd/src/main.rs +++ b/inputd/src/main.rs @@ -535,7 +535,7 @@ pub fn main() { .expect("inputd: failed to open consumer handle"); let mut display_path = [0; 4096]; - let written = libredox::call::fpath(handle.as_raw_fd() as usize, &mut display_path) + let written = syscall::fpath(handle.as_raw_fd() as usize, &mut display_path) .expect("inputd: fpath() failed"); assert!(written <= display_path.len()); diff --git a/net/alxd/Cargo.toml b/net/alxd/Cargo.toml index 5d20a58d5b..4a3ed09f03 100644 --- a/net/alxd/Cargo.toml +++ b/net/alxd/Cargo.toml @@ -6,8 +6,7 @@ edition = "2018" [dependencies] bitflags = "1" redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" } -redox_syscall = "0.5" +redox_syscall = "0.4" redox-daemon = "0.1" common = { path = "../../common" } -libredox = "0.1.3" diff --git a/net/alxd/src/device/mod.rs b/net/alxd/src/device/mod.rs index 0222cd1c27..3a20c9fc81 100644 --- a/net/alxd/src/device/mod.rs +++ b/net/alxd/src/device/mod.rs @@ -281,7 +281,7 @@ pub struct Alx { fn dma_array() -> Result<[Dma; N]> { Ok((0..N) - .map(|_| Ok(Dma::zeroed().map(|dma| unsafe { dma.assume_init() })?)) + .map(|_| Dma::zeroed().map(|dma| unsafe { dma.assume_init() })) .collect::>>()? .try_into() .unwrap_or_else(|_| unreachable!())) @@ -290,7 +290,7 @@ fn dma_array() -> Result<[Dma; N]> { impl Alx { pub unsafe fn new(base: usize) -> Result { let mut module = Alx { - base, + base: base, vendor_id: 0, device_id: 0, diff --git a/net/alxd/src/main.rs b/net/alxd/src/main.rs index 8ff8e18c52..ef1f745681 100644 --- a/net/alxd/src/main.rs +++ b/net/alxd/src/main.rs @@ -14,7 +14,6 @@ use std::os::unix::io::{AsRawFd, FromRawFd, RawFd}; use std::sync::Arc; use event::EventQueue; -use libredox::flag; use syscall::{EventFlags, Packet, SchemeMut}; use syscall::error::EWOULDBLOCK; @@ -36,7 +35,7 @@ fn main() { // Daemonize redox_daemon::Daemon::new(move |daemon| { - let socket_fd = libredox::call::open(":network", flag::O_RDWR | flag::O_CREAT | flag::O_NONBLOCK, 0).expect("alxd: failed to create network scheme"); + let socket_fd = syscall::open(":network", syscall::O_RDWR | syscall::O_CREAT | syscall::O_NONBLOCK).expect("alxd: failed to create network scheme"); let socket = Arc::new(RefCell::new(unsafe { File::from_raw_fd(socket_fd as RawFd) })); daemon.ready().expect("alxd: failed to signal readiness"); @@ -49,7 +48,7 @@ fn main() { let mut event_queue = EventQueue::::new().expect("alxd: failed to create event queue"); - libredox::call::setrens(0, 0).expect("alxd: failed to enter null namespace"); + syscall::setrens(0, 0).expect("alxd: failed to enter null namespace"); let todo = Arc::new(RefCell::new(Vec::::new())); @@ -112,7 +111,7 @@ fn main() { for event_count in event_queue.trigger_all(event::Event { fd: 0, - flags: Default::default(), + flags: EventFlags::empty(), }).expect("alxd: failed to trigger events") { socket.borrow_mut().write(&Packet { id: 0, diff --git a/net/driver-network/Cargo.toml b/net/driver-network/Cargo.toml index 965bbcf23c..47be9d3175 100644 --- a/net/driver-network/Cargo.toml +++ b/net/driver-network/Cargo.toml @@ -4,6 +4,5 @@ version = "0.1.0" edition = "2021" [dependencies] -libredox = "0.1.3" redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" } -redox_syscall = "0.5" +redox_syscall = "0.4" diff --git a/net/driver-network/src/lib.rs b/net/driver-network/src/lib.rs index ce108dcd70..3790b33ba5 100644 --- a/net/driver-network/src/lib.rs +++ b/net/driver-network/src/lib.rs @@ -4,7 +4,6 @@ use std::io::{ErrorKind, Read, Write}; use std::os::fd::{AsRawFd, FromRawFd, RawFd}; use std::{cmp, io}; -use libredox::flag; use syscall::{ Error, EventFlags, Packet, Result, SchemeBlockMut, Stat, EACCES, EBADF, EINVAL, EWOULDBLOCK, MODE_FILE, O_NONBLOCK, @@ -47,10 +46,9 @@ enum Handle { impl NetworkScheme { pub fn new(adapter: T, scheme_name: String) -> Self { assert!(scheme_name.starts_with("network")); - let scheme_fd = libredox::call::open( + let scheme_fd = syscall::open( format!(":{scheme_name}"), - flag::O_RDWR | flag::O_CREAT | flag::O_NONBLOCK, - 0, + syscall::O_RDWR | syscall::O_CREAT | syscall::O_NONBLOCK, ) .expect("failed to create network scheme"); let scheme = unsafe { File::from_raw_fd(scheme_fd as RawFd) }; diff --git a/net/e1000d/Cargo.toml b/net/e1000d/Cargo.toml index bc6c347647..395a6341cc 100644 --- a/net/e1000d/Cargo.toml +++ b/net/e1000d/Cargo.toml @@ -7,9 +7,8 @@ edition = "2018" bitflags = "1" redox-daemon = "0.1" redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" } -redox_syscall = "0.5" +redox_syscall = "0.4" common = { path = "../../common" } driver-network = { path = "../driver-network" } pcid = { path = "../../pcid" } -libredox = "0.1.3" diff --git a/net/e1000d/src/device.rs b/net/e1000d/src/device.rs index 721e7cf913..7da6965d13 100644 --- a/net/e1000d/src/device.rs +++ b/net/e1000d/src/device.rs @@ -208,7 +208,7 @@ impl NetworkAdapter for Intel8254x { fn dma_array() -> Result<[Dma; N]> { Ok((0..N) - .map(|_| Ok(unsafe { Dma::zeroed()?.assume_init() })) + .map(|_| Dma::zeroed().map(|dma| unsafe { dma.assume_init() })) .collect::>>()? .try_into() .unwrap_or_else(|_| unreachable!())) diff --git a/net/e1000d/src/main.rs b/net/e1000d/src/main.rs index 8c532f3c68..b8052b93f3 100644 --- a/net/e1000d/src/main.rs +++ b/net/e1000d/src/main.rs @@ -43,7 +43,7 @@ fn main() { let mut event_queue = EventQueue::::new().expect("e1000d: failed to create event queue"); - libredox::call::setrens(0, 0).expect("e1000d: failed to enter null namespace"); + syscall::setrens(0, 0).expect("e1000d: failed to enter null namespace"); daemon .ready() @@ -79,7 +79,7 @@ fn main() { event_queue .trigger_all(event::Event { fd: 0, - flags: Default::default(), + flags: EventFlags::empty(), }) .expect("e1000d: failed to trigger events"); diff --git a/net/ixgbed/Cargo.toml b/net/ixgbed/Cargo.toml index 38ee7a7477..fd3258fa00 100644 --- a/net/ixgbed/Cargo.toml +++ b/net/ixgbed/Cargo.toml @@ -6,10 +6,9 @@ edition = "2021" [dependencies] bitflags = "1.0" redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" } -redox_syscall = "0.5" +redox_syscall = "0.4" redox-daemon = "0.1" common = { path = "../../common" } driver-network = { path = "../driver-network" } pcid = { path = "../../pcid" } -libredox = "0.1.3" diff --git a/net/ixgbed/src/device.rs b/net/ixgbed/src/device.rs index 4ab8d0e530..b36309e14f 100644 --- a/net/ixgbed/src/device.rs +++ b/net/ixgbed/src/device.rs @@ -129,13 +129,13 @@ impl Intel8259x { base, size, receive_buffer: (0..32) - .map(|_| Ok(unsafe { Dma::zeroed()?.assume_init() })) + .map(|_| Dma::zeroed().map(|dma| unsafe { dma.assume_init() })) .collect::>>()? .try_into() .unwrap_or_else(|_| unreachable!()), receive_ring: unsafe { Dma::zeroed()?.assume_init() }, transmit_buffer: (0..32) - .map(|_| Ok(unsafe { Dma::zeroed()?.assume_init() })) + .map(|_| Dma::zeroed().map(|dma| unsafe { dma.assume_init() })) .collect::>>()? .try_into() .unwrap_or_else(|_| unreachable!()), diff --git a/net/ixgbed/src/main.rs b/net/ixgbed/src/main.rs index 7c6aefbb27..33c67083bd 100644 --- a/net/ixgbed/src/main.rs +++ b/net/ixgbed/src/main.rs @@ -55,7 +55,7 @@ fn main() { let mut event_queue = EventQueue::::new().expect("ixgbed: failed to create event queue"); - libredox::call::setrens(0, 0).expect("ixgbed: failed to enter null namespace"); + syscall::setrens(0, 0).expect("ixgbed: failed to enter null namespace"); daemon .ready() @@ -91,7 +91,7 @@ fn main() { event_queue .trigger_all(event::Event { fd: 0, - flags: Default::default(), + flags: EventFlags::empty(), }) .expect("ixgbed: failed to trigger events"); diff --git a/net/rtl8139d/Cargo.toml b/net/rtl8139d/Cargo.toml index ef23f408db..2ff86321ab 100644 --- a/net/rtl8139d/Cargo.toml +++ b/net/rtl8139d/Cargo.toml @@ -7,11 +7,10 @@ edition = "2018" bitflags = "1" log = "0.4" redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" } -redox_syscall = "0.5" +redox_syscall = "0.4" redox-daemon = "0.1" redox-log = "0.1" common = { path = "../../common" } driver-network = { path = "../driver-network" } pcid = { path = "../../pcid" } -libredox = "0.1.3" diff --git a/net/rtl8139d/src/device.rs b/net/rtl8139d/src/device.rs index e6ef45053b..4b6ce854f0 100644 --- a/net/rtl8139d/src/device.rs +++ b/net/rtl8139d/src/device.rs @@ -209,13 +209,13 @@ impl Rtl8139 { let regs = Regs::from_base(base); let mut module = Rtl8139 { - regs, + regs: regs, //TODO: limit to 32-bit receive_buffer: Dma::zeroed().map(|dma| dma.assume_init())?, receive_i: 0, //TODO: limit to 32-bit transmit_buffer: (0..4) - .map(|_| Ok(Dma::zeroed()?.assume_init())) + .map(|_| Dma::zeroed().map(|dma| dma.assume_init())) .collect::>>()? .try_into() .unwrap_or_else(|_| unreachable!()), diff --git a/net/rtl8139d/src/main.rs b/net/rtl8139d/src/main.rs index 66ca3b533e..048daf6d95 100644 --- a/net/rtl8139d/src/main.rs +++ b/net/rtl8139d/src/main.rs @@ -242,7 +242,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { let mut event_queue = EventQueue::::new().expect("rtl8139d: failed to create event queue"); - libredox::call::setrens(0, 0).expect("rtl8139d: failed to enter null namespace"); + syscall::setrens(0, 0).expect("rtl8139d: failed to enter null namespace"); daemon .ready() @@ -279,7 +279,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { event_queue .trigger_all(event::Event { fd: 0, - flags: Default::default(), + flags: EventFlags::empty(), }) .expect("rtl8139d: failed to trigger events"); diff --git a/net/rtl8168d/Cargo.toml b/net/rtl8168d/Cargo.toml index 2010b02b47..3ec1bdfbcf 100644 --- a/net/rtl8168d/Cargo.toml +++ b/net/rtl8168d/Cargo.toml @@ -7,11 +7,10 @@ edition = "2018" bitflags = "1" log = "0.4" redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" } -redox_syscall = "0.5" +redox_syscall = "0.4" redox-daemon = "0.1" redox-log = "0.1" common = { path = "../../common" } driver-network = { path = "../driver-network" } pcid = { path = "../../pcid" } -libredox = "0.1.3" diff --git a/net/rtl8168d/src/device.rs b/net/rtl8168d/src/device.rs index 717ac194e2..25b6aea64a 100644 --- a/net/rtl8168d/src/device.rs +++ b/net/rtl8168d/src/device.rs @@ -173,9 +173,9 @@ impl Rtl8168 { assert_eq!(®s.mtps as *const _ as usize - base, 0xEC); let mut module = Rtl8168 { - regs, + regs: regs, receive_buffer: (0..64) - .map(|_| Ok(Dma::zeroed()?.assume_init())) + .map(|_| Dma::zeroed().map(|dma| dma.assume_init())) .collect::>>()? .try_into() .unwrap_or_else(|_| unreachable!()), @@ -183,7 +183,7 @@ impl Rtl8168 { receive_ring: Dma::zeroed()?.assume_init(), receive_i: 0, transmit_buffer: (0..16) - .map(|_| Ok(Dma::zeroed()?.assume_init())) + .map(|_| Dma::zeroed().map(|dma| dma.assume_init())) .collect::>>()? .try_into() .unwrap_or_else(|_| unreachable!()), diff --git a/net/rtl8168d/src/main.rs b/net/rtl8168d/src/main.rs index e38501b3ec..3767f2ddad 100644 --- a/net/rtl8168d/src/main.rs +++ b/net/rtl8168d/src/main.rs @@ -237,7 +237,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { let mut event_queue = EventQueue::::new().expect("rtl8168d: failed to create event queue"); - libredox::call::setrens(0, 0).expect("rtl8168d: failed to enter null namespace"); + syscall::setrens(0, 0).expect("rtl8168d: failed to enter null namespace"); daemon .ready() @@ -274,7 +274,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { event_queue .trigger_all(event::Event { fd: 0, - flags: Default::default(), + flags: EventFlags::empty(), }) .expect("rtl8168d: failed to trigger events"); diff --git a/net/virtio-netd/Cargo.toml b/net/virtio-netd/Cargo.toml index 3becfd7897..e1063e7414 100644 --- a/net/virtio-netd/Cargo.toml +++ b/net/virtio-netd/Cargo.toml @@ -14,5 +14,4 @@ common = { path = "../../common" } driver-network = { path = "../driver-network" } redox-daemon = "0.1" -redox_syscall = "0.5" -libredox = "0.1.3" +redox_syscall = "0.4" diff --git a/net/virtio-netd/src/main.rs b/net/virtio-netd/src/main.rs index d2a2411f55..f00437a763 100644 --- a/net/virtio-netd/src/main.rs +++ b/net/virtio-netd/src/main.rs @@ -102,7 +102,7 @@ fn deamon(daemon: redox_daemon::Daemon) -> Result<(), Box data: 0, })?; - libredox::call::setrens(0, 0).expect("virtio-netd: failed to enter null namespace"); + syscall::setrens(0, 0).expect("virtio-netd: failed to enter null namespace"); daemon.ready().expect("virtio-netd: failed to daemonize"); diff --git a/pcid/Cargo.toml b/pcid/Cargo.toml index 487b79029d..a4ae567e9d 100644 --- a/pcid/Cargo.toml +++ b/pcid/Cargo.toml @@ -31,4 +31,3 @@ thiserror = "1" toml = "0.5" common = { path = "../common" } -libredox = "0.1.3" diff --git a/pcid/src/cfg_access/fallback.rs b/pcid/src/cfg_access/fallback.rs index c1d51bfb5c..65682e171f 100644 --- a/pcid/src/cfg_access/fallback.rs +++ b/pcid/src/cfg_access/fallback.rs @@ -33,7 +33,9 @@ impl Pci { "PCI: couldn't find or access PCIe extended configuration, \ and thus falling back to PCI 3.0 io ports" ); - common::acquire_port_io_rights().expect("pcid: failed to get IO port rights"); + unsafe { + syscall::iopl(3).expect("pcid: failed to set iopl to 3"); + } } }); } diff --git a/ps2d/Cargo.toml b/ps2d/Cargo.toml index 90f5875711..cfab793a52 100644 --- a/ps2d/Cargo.toml +++ b/ps2d/Cargo.toml @@ -8,4 +8,3 @@ bitflags = "1" orbclient = "0.3.27" redox_syscall = "0.4" redox-daemon = "0.1" -libredox = "0.1.3" diff --git a/ps2d/src/main.rs b/ps2d/src/main.rs index aa4ec5df2c..f9cdba3b6b 100644 --- a/ps2d/src/main.rs +++ b/ps2d/src/main.rs @@ -80,7 +80,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { data: 1 }).expect("ps2d: failed to event irq:12"); - libredox::call::setrens(0, 0).expect("ps2d: failed to enter null namespace"); + syscall::setrens(0, 0).expect("ps2d: failed to enter null namespace"); daemon.ready().expect("ps2d: failed to mark daemon as ready"); diff --git a/storage/ahcid/Cargo.toml b/storage/ahcid/Cargo.toml index eb8e450c77..4c84077667 100644 --- a/storage/ahcid/Cargo.toml +++ b/storage/ahcid/Cargo.toml @@ -14,4 +14,3 @@ redox_syscall = "0.4" common = { path = "../../common" } driver-block = { path = "../driver-block" } pcid = { path = "../../pcid" } -libredox = "0.1.3" diff --git a/storage/ahcid/src/main.rs b/storage/ahcid/src/main.rs index 050fa97bf4..60dd30ab12 100644 --- a/storage/ahcid/src/main.rs +++ b/storage/ahcid/src/main.rs @@ -10,7 +10,6 @@ use std::os::fd::AsRawFd; use std::os::unix::io::{FromRawFd, RawFd}; use std::usize; -use libredox::flag; use pcid_interface::PcidServerHandle; use syscall::error::{Error, ENODEV}; use syscall::data::{Event, Packet}; @@ -94,10 +93,9 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { let address = unsafe { bar.physmap_mem("ahcid") }; { let scheme_name = format!("disk.{}", name); - let socket_fd = libredox::call::open( + let socket_fd = syscall::open( &format!(":{}", scheme_name), - flag::O_RDWR | flag::O_CREAT | flag::O_NONBLOCK - 0, + syscall::O_RDWR | syscall::O_CREAT | syscall::O_NONBLOCK ).expect("ahcid: failed to create disk scheme"); let mut socket = unsafe { File::from_raw_fd(socket_fd as RawFd) }; @@ -106,7 +104,9 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { let mut event_file = File::open("event:").expect("ahcid: failed to open event file"); - libredox::call::setrens(0, 0).expect("ahcid: failed to enter null namespace"); + syscall::setrens(0, 0).expect("ahcid: failed to enter null namespace"); + + daemon.ready().expect("ahcid: failed to notify parent"); event_file.write(&Event { id: socket_fd, @@ -120,8 +120,6 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { data: 0 }).expect("ahcid: failed to event irq scheme"); - daemon.ready().expect("ahcid: failed to notify parent"); - let (hba_mem, disks) = ahci::disks(address as usize, &name); let mut scheme = DiskScheme::new(scheme_name, hba_mem, disks); diff --git a/storage/bcm2835-sdhcid/Cargo.toml b/storage/bcm2835-sdhcid/Cargo.toml index b5c21ffb80..d92d58d3fa 100644 --- a/storage/bcm2835-sdhcid/Cargo.toml +++ b/storage/bcm2835-sdhcid/Cargo.toml @@ -12,4 +12,3 @@ common = { path = "../../common" } driver-block = { path = "../driver-block" } redox-daemon = "0.1" -libredox = "0.1.3" diff --git a/storage/bcm2835-sdhcid/src/main.rs b/storage/bcm2835-sdhcid/src/main.rs index edcafbb4ea..7a815a64e2 100644 --- a/storage/bcm2835-sdhcid/src/main.rs +++ b/storage/bcm2835-sdhcid/src/main.rs @@ -79,7 +79,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { let scheme_name = ":disk.mmc"; let mut socket = File::create(scheme_name).expect("mmc: failed to create disk scheme"); - libredox::call::setrens(0, 0).expect("mmc: failed to enter null namespace"); + syscall::setrens(0, 0).expect("mmc: failed to enter null namespace"); daemon.ready().expect("mmc: failed to notify parent"); diff --git a/storage/ided/Cargo.toml b/storage/ided/Cargo.toml index aab5d97153..1df0416b7b 100644 --- a/storage/ided/Cargo.toml +++ b/storage/ided/Cargo.toml @@ -6,7 +6,6 @@ edition = "2018" [dependencies] common = { path = "../../common" } driver-block = { path = "../driver-block" } -libredox = "0.1.3" log = "0.4" pcid = { path = "../../pcid" } redox-daemon = "0.1" diff --git a/storage/ided/src/main.rs b/storage/ided/src/main.rs index 2778a68324..ca27ab7e60 100644 --- a/storage/ided/src/main.rs +++ b/storage/ided/src/main.rs @@ -1,5 +1,4 @@ use driver_block::Disk; -use libredox::flag; use log::{error, info}; use pcid_interface::{PciBar, PcidServerHandle}; use redox_log::{OutputBuilder, RedoxLogger}; @@ -100,7 +99,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { (Channel::secondary_compat(busmaster_base + 8).unwrap(), 15) }; - common::acquire_port_io_rights().expect("ided: failed to get I/O privilege"); + unsafe { syscall::iopl(3).expect("ided: failed to get I/O privilege") }; //TODO: move this to ide.rs? let chans = vec![ @@ -232,30 +231,27 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { } let scheme_name = format!("disk.{}", name); - let socket_fd = libredox::call::open( + let socket_fd = syscall::open( &format!(":{}", scheme_name), - flag::O_RDWR | flag::O_CREAT | flag::O_NONBLOCK, - 0, + syscall::O_RDWR | syscall::O_CREAT | syscall::O_NONBLOCK ).expect("ided: failed to create disk scheme"); let mut socket = unsafe { File::from_raw_fd(socket_fd as RawFd) }; - let primary_irq_fd = libredox::call::open( + let primary_irq_fd = syscall::open( &format!("irq:{}", primary_irq), - flag::O_RDWR | flag::O_NONBLOCK, - 0, + syscall::O_RDWR | syscall::O_NONBLOCK ).expect("ided: failed to open irq file"); let mut primary_irq_file = unsafe { File::from_raw_fd(primary_irq_fd as RawFd) }; - let secondary_irq_fd = libredox::call::open( + let secondary_irq_fd = syscall::open( &format!("irq:{}", secondary_irq), - flag::O_RDWR | flag::O_NONBLOCK, - 0, + syscall::O_RDWR | syscall::O_NONBLOCK ).expect("ided: failed to open irq file"); let mut secondary_irq_file = unsafe { File::from_raw_fd(secondary_irq_fd as RawFd) }; let mut event_file = File::open("event:").expect("ided: failed to open event file"); - libredox::call::setrens(0, 0).expect("ided: failed to enter null namespace"); + syscall::setrens(0, 0).expect("ided: failed to enter null namespace"); daemon.ready().expect("ided: failed to notify parent"); diff --git a/storage/lived/Cargo.toml b/storage/lived/Cargo.toml index 339708856e..cea304209c 100644 --- a/storage/lived/Cargo.toml +++ b/storage/lived/Cargo.toml @@ -9,7 +9,6 @@ license = "MIT" [dependencies] anyhow = "1" -libredox = "0.1.3" redox-daemon = "0.1" redox_syscall = "0.4" slab = "0.4" diff --git a/storage/lived/src/main.rs b/storage/lived/src/main.rs index 8470400938..411d44db3f 100644 --- a/storage/lived/src/main.rs +++ b/storage/lived/src/main.rs @@ -8,8 +8,6 @@ use std::io::{Read, Write}; use std::os::fd::AsRawFd; use std::str; -use libredox::call::MmapArgs; -use libredox::flag; use slab::Slab; use syscall::data::Stat; use syscall::{error::*, MapFlags, SchemeMut, Packet}; @@ -65,13 +63,11 @@ impl DiskScheme { let the_data = unsafe { let file = File::open("memory:physical")?; - let base = libredox::call::mmap(MmapArgs { - fd: file.as_raw_fd() as usize, - addr: core::ptr::null_mut(), - offset: start as u64, - length: size, - prot: flag::PROT_READ | flag::PROT_WRITE, - flags: flag::MAP_SHARED, + let base = syscall::fmap(file.as_raw_fd() as usize, &syscall::Map { + address: 0, + offset: start, + size, + flags: MapFlags::PROT_READ | MapFlags::PROT_WRITE | MapFlags::MAP_SHARED, }).map_err(|err| anyhow!("failed to mmap livedisk: {}", err))?; std::slice::from_raw_parts_mut(base as *mut u8, size) diff --git a/storage/nvmed/Cargo.toml b/storage/nvmed/Cargo.toml index 6271a63fa8..59c9c36935 100644 --- a/storage/nvmed/Cargo.toml +++ b/storage/nvmed/Cargo.toml @@ -18,7 +18,6 @@ smallvec = "1" common = { path = "../../common" } driver-block = { path = "../driver-block" } pcid = { path = "../../pcid" } -libredox = "0.1.3" [features] default = ["async"] diff --git a/storage/nvmed/src/main.rs b/storage/nvmed/src/main.rs index 5b05e82cd0..7058e9f6ae 100644 --- a/storage/nvmed/src/main.rs +++ b/storage/nvmed/src/main.rs @@ -9,7 +9,6 @@ use std::ptr::NonNull; use std::sync::{Arc, Mutex}; use std::{slice, usize}; -use libredox::flag; use pcid_interface::{PciFeature, PciFeatureInfo, PciFunction, PcidServerHandle}; use syscall::{ Event, Mmio, Packet, Result, SchemeBlockMut, @@ -50,8 +49,8 @@ impl Bar { impl Drop for Bar { fn drop(&mut self) { let _ = unsafe { - libredox::call::munmap( - self.ptr.as_ptr().cast(), + syscall::funmap( + self.ptr.as_ptr() as usize, self.bar_size.next_multiple_of(PAGE_SIZE), ) }; @@ -276,10 +275,9 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { ptr: NonNull::new(address as *mut u8).expect("Physmapping BAR gave nullptr"), }); - let socket_fd = libredox::call::open( + let socket_fd = syscall::open( &format!(":{}", scheme_name), - flag::O_RDWR | flag::O_CREAT | flag::O_CLOEXEC, - 0, + syscall::O_RDWR | syscall::O_CREAT | syscall::O_CLOEXEC, ) .expect("nvmed: failed to create disk scheme"); let mut socket_file = unsafe { File::from_raw_fd(socket_fd as RawFd) }; @@ -299,7 +297,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { let reactor_thread = nvme::cq_reactor::start_cq_reactor_thread(Arc::clone(&nvme), interrupt_sources, reactor_receiver); let namespaces = nvme.init_with_queues(); - libredox::call::setrens(0, 0).expect("nvmed: failed to enter null namespace"); + syscall::setrens(0, 0).expect("nvmed: failed to enter null namespace"); let mut scheme = DiskScheme::new(scheme_name, nvme, namespaces); let mut todo = Vec::new(); diff --git a/storage/nvmed/src/nvme/cq_reactor.rs b/storage/nvmed/src/nvme/cq_reactor.rs index a41f576f64..ccadb14941 100644 --- a/storage/nvmed/src/nvme/cq_reactor.rs +++ b/storage/nvmed/src/nvme/cq_reactor.rs @@ -65,8 +65,8 @@ struct CqReactor { } impl CqReactor { fn create_event_queue(int_sources: &mut InterruptSources) -> Result { - use libredox::flag::*; - let fd = libredox::call::open("event:", O_CLOEXEC | O_RDWR, 0)?; + use syscall::flag::*; + let fd = syscall::open("event:", O_CLOEXEC | O_RDWR)?; let mut file = unsafe { File::from_raw_fd(fd as RawFd) }; for (num, irq_handle) in int_sources.iter_mut() { diff --git a/storage/usbscsid/Cargo.toml b/storage/usbscsid/Cargo.toml index d3ca3455ee..28083405a3 100644 --- a/storage/usbscsid/Cargo.toml +++ b/storage/usbscsid/Cargo.toml @@ -9,7 +9,6 @@ license = "MIT" [dependencies] base64 = "0.11" # Only for debugging -libredox = "0.1.3" plain = "0.2" redox-daemon = "0.1" redox_syscall = "0.4" diff --git a/storage/usbscsid/src/main.rs b/storage/usbscsid/src/main.rs index e745c0ad3f..6f698e8c19 100644 --- a/storage/usbscsid/src/main.rs +++ b/storage/usbscsid/src/main.rs @@ -3,7 +3,6 @@ use std::fs::File; use std::io::prelude::*; use std::os::unix::io::{FromRawFd, RawFd}; -use libredox::flag; use syscall::{Packet, SchemeMut}; use xhcid_interface::{ConfigureEndpointsReq, DeviceReqData, XhciClientHandle}; @@ -85,11 +84,11 @@ fn daemon(daemon: redox_daemon::Daemon, scheme: String, port: usize, protocol: u // TODO: Let all of the USB drivers syscall clone(2), and xhcid won't have to keep track of all // the drivers. - let socket_fd = libredox::call::open(disk_scheme_name, flag::O_RDWR | flag::O_CREAT, 0) + let socket_fd = syscall::open(disk_scheme_name, syscall::O_RDWR | syscall::O_CREAT) .expect("usbscsid: failed to create disk scheme"); let mut socket_file = unsafe { File::from_raw_fd(socket_fd as RawFd) }; - //libredox::call::setrens(0, 0).expect("scsid: failed to enter null namespace"); + //syscall::setrens(0, 0).expect("scsid: failed to enter null namespace"); let mut scsi = Scsi::new(&mut *protocol).expect("usbscsid: failed to setup SCSI"); println!("SCSI initialized"); let mut buffer = [0u8; 512]; diff --git a/storage/virtio-blkd/Cargo.toml b/storage/virtio-blkd/Cargo.toml index 34883809cd..690454263d 100644 --- a/storage/virtio-blkd/Cargo.toml +++ b/storage/virtio-blkd/Cargo.toml @@ -21,4 +21,3 @@ common = { path = "../../common" } driver-block = { path = "../driver-block" } pcid = { path = "../../pcid" } virtio-core = { path = "../../virtio-core" } -libredox = "0.1.3" diff --git a/storage/virtio-blkd/src/main.rs b/storage/virtio-blkd/src/main.rs index 634621e3f4..c6b3727a16 100644 --- a/storage/virtio-blkd/src/main.rs +++ b/storage/virtio-blkd/src/main.rs @@ -8,7 +8,6 @@ use std::io::{Read, Write}; use std::os::fd::{FromRawFd, RawFd}; use std::sync::{Arc, Weak}; -use libredox::flag; use static_assertions::const_assert_eq; use pcid_interface::*; @@ -143,10 +142,9 @@ fn deamon(deamon: redox_daemon::Daemon) -> anyhow::Result<()> { let scheme_name = format!("disk.{}", name); - let socket_fd = libredox::call::open( + let socket_fd = syscall::open( &format!(":{}", scheme_name), - flag::O_RDWR | flag::O_CREAT | flag::O_CLOEXEC, - 0, + syscall::O_RDWR | syscall::O_CREAT | syscall::O_CLOEXEC, ) .map_err(Error::SyscallError)?; diff --git a/vboxd/Cargo.toml b/vboxd/Cargo.toml index ff25884242..23a4273c2a 100644 --- a/vboxd/Cargo.toml +++ b/vboxd/Cargo.toml @@ -6,9 +6,8 @@ edition = "2018" [dependencies] orbclient = "0.3.27" redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" } -redox_syscall = "0.5" +redox_syscall = "0.4" redox-daemon = "0.1" common = { path = "../common" } pcid = { path = "../pcid" } -libredox = "0.1.3" diff --git a/vboxd/src/main.rs b/vboxd/src/main.rs index 39b0c3efaf..7555482450 100644 --- a/vboxd/src/main.rs +++ b/vboxd/src/main.rs @@ -11,6 +11,7 @@ use std::fs::File; use std::io::{Result, Read, Write}; use pcid_interface::{PciBar, PcidServerHandle}; +use syscall::call::iopl; use syscall::flag::EventFlags; use syscall::io::{Io, Mmio, Pio}; @@ -205,14 +206,14 @@ fn main() { redox_daemon::Daemon::new(move |daemon| { daemon.ready().expect("failed to signal readiness"); - common::acquire_port_io_rights().expect("vboxd: failed to get I/O permission"); + unsafe { iopl(3).expect("vboxd: failed to get I/O permission"); }; let mut width = 0; let mut height = 0; let mut display_opt = File::open("inputd:producer").ok(); if let Some(ref display) = display_opt { let mut buf: [u8; 4096] = [0; 4096]; - if let Ok(count) = libredox::call::fpath(display.as_raw_fd() as usize, &mut buf) { + if let Ok(count) = syscall::fpath(display.as_raw_fd() as usize, &mut buf) { let path = unsafe { String::from_utf8_unchecked(Vec::from(&buf[..count])) }; let res = path.split(":").nth(1).unwrap_or(""); width = res.split("/").nth(1).unwrap_or("").parse::().unwrap_or(0); @@ -244,7 +245,7 @@ fn main() { let mut event_queue = EventQueue::<()>::new().expect("vboxd: failed to create event queue"); - libredox::call::setrens(0, 0).expect("vboxd: failed to enter null namespace"); + syscall::setrens(0, 0).expect("vboxd: failed to enter null namespace"); let mut bga = Bga::new(); let get_mouse = VboxGetMouse::new().expect("vboxd: failed to map GetMouse"); @@ -294,7 +295,7 @@ fn main() { event_queue.trigger_all(event::Event { fd: 0, - flags: Default::default(), + flags: EventFlags::empty() }).expect("vboxd: failed to trigger events"); event_queue.run().expect("vboxd: failed to run event loop"); diff --git a/virtio-core/Cargo.toml b/virtio-core/Cargo.toml index a9d8c6713a..8824169676 100644 --- a/virtio-core/Cargo.toml +++ b/virtio-core/Cargo.toml @@ -18,4 +18,3 @@ redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" } common = { path = "../common" } pcid = { path = "../pcid" } -libredox = "0.1.3" diff --git a/virtio-core/src/arch/x86.rs b/virtio-core/src/arch/x86.rs index 862d4dfee6..9073ce8059 100644 --- a/virtio-core/src/arch/x86.rs +++ b/virtio-core/src/arch/x86.rs @@ -13,7 +13,7 @@ pub fn probe_legacy_port_transport( ) -> Result { let port = pci_config.func.bars[0].expect_port(); - common::acquire_io_port_rights().expect("virtio: failed to set I/O privilege level"); + unsafe { syscall::iopl(3).expect("virtio: failed to set I/O privilege level") }; log::warn!("virtio: using legacy transport"); let transport = LegacyTransport::new(port); diff --git a/virtio-core/src/arch/x86_64.rs b/virtio-core/src/arch/x86_64.rs index fa0de00c6c..e67d8ab767 100644 --- a/virtio-core/src/arch/x86_64.rs +++ b/virtio-core/src/arch/x86_64.rs @@ -54,7 +54,7 @@ pub fn probe_legacy_port_transport( ) -> Result { let port = pci_config.func.bars[0].expect_port(); - common::acquire_port_io_rights().expect("virtio: failed to set I/O privilege level"); + unsafe { syscall::iopl(3).expect("virtio: failed to set I/O privilege level") }; log::warn!("virtio: using legacy transport"); let transport = LegacyTransport::new(port); diff --git a/virtio-core/src/transport.rs b/virtio-core/src/transport.rs index 133c5e53c4..1ff80a205f 100644 --- a/virtio-core/src/transport.rs +++ b/virtio-core/src/transport.rs @@ -16,7 +16,7 @@ use std::task::{Poll, Waker}; #[derive(thiserror::Error, Debug)] pub enum Error { #[error("syscall failed")] - SyscallError(#[from] libredox::error::Error), + SyscallError(syscall::Error), #[error("pcid client handle error")] PcidClientHandle(pcid_interface::PcidClientHandleError), #[error("the device is incapable of {0:?}")] @@ -29,6 +29,12 @@ impl From for Error { } } +impl From for Error { + fn from(value: syscall::Error) -> Self { + Self::SyscallError(value) + } +} + /// Returns the queue part sizes in bytes. /// /// ## Reference diff --git a/xhcid/Cargo.toml b/xhcid/Cargo.toml index 94e09eb0b3..7fa83821b5 100644 --- a/xhcid/Cargo.toml +++ b/xhcid/Cargo.toml @@ -20,9 +20,9 @@ plain = "0.2" lazy_static = "1.4" log = "0.4" redox-daemon = "0.1" -redox_event = "0.4.1" +redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" } redox-log = "0.1" -redox_syscall = "0.5" +redox_syscall = "0.4" serde = { version = "1", features = ["derive"] } serde_json = "1" smallvec = { version = "1", features = ["serde"] } @@ -31,4 +31,3 @@ toml = "0.5" common = { path = "../common" } pcid = { path = "../pcid" } -libredox = "0.1.3" diff --git a/xhcid/src/main.rs b/xhcid/src/main.rs index 6b9fe1bd79..faf50300ec 100644 --- a/xhcid/src/main.rs +++ b/xhcid/src/main.rs @@ -11,14 +11,13 @@ use std::ptr::NonNull; use std::sync::{Arc, Mutex}; use std::env; -use libredox::flag; use pcid_interface::{MsiSetFeatureInfo, PcidServerHandle, PciFeature, PciFeatureInfo, SetFeatureInfo}; #[cfg(target_arch = "x86_64")] use pcid_interface::irq_helpers::allocate_single_interrupt_vector_for_msi; use pcid_interface::irq_helpers::read_bsp_apic_id; use pcid_interface::msi::MsixTableEntry; -use event::{Event, RawEventQueue}; +use event::{Event, EventQueue}; use redox_log::{RedoxLogger, OutputBuilder}; use syscall::data::Packet; use syscall::error::EWOULDBLOCK; @@ -209,10 +208,9 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { println!(" + XHCI {}", pci_config.func.display()); let scheme_name = format!("usb.{}", name); - let socket_fd = libredox::call::open( + let socket_fd = syscall::open( format!(":{}", scheme_name), - flag::O_RDWR | flag::O_CREAT, - 0, + syscall::O_RDWR | syscall::O_CREAT, ) .expect("xhcid: failed to create usb scheme"); let socket = Arc::new(Mutex::new(unsafe { @@ -225,38 +223,47 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { xhci::start_irq_reactor(&hci, irq_file); futures::executor::block_on(hci.probe()).expect("xhcid: failed to probe"); - //let event_queue = RawEventQueue::new().expect("xhcid: failed to create event queue"); + let mut event_queue = + EventQueue::<()>::new().expect("xhcid: failed to create event queue"); - libredox::call::setrens(0, 0).expect("xhcid: failed to enter null namespace"); + syscall::setrens(0, 0).expect("xhcid: failed to enter null namespace"); let todo = Arc::new(Mutex::new(Vec::::new())); - //let todo_futures = Arc::new(Mutex::new(Vec:: + Send + Sync + 'static>>>::new())); - - //let socket_fd = socket.lock().unwrap().as_raw_fd(); - //event_queue.subscribe(socket_fd as usize, 0, event::EventFlags::READ).unwrap(); + let todo_futures = Arc::new(Mutex::new(Vec:: + Send + Sync + 'static>>>::new())); + let socket_fd = socket.lock().unwrap().as_raw_fd(); let socket_packet = socket.clone(); + event_queue + .add(socket_fd, move |_| -> io::Result> { + let mut socket = socket_packet.lock().unwrap(); + let mut todo = todo.lock().unwrap(); - loop { - let mut socket = socket_packet.lock().unwrap(); - let mut todo = todo.lock().unwrap(); + loop { + let mut packet = Packet::default(); + match socket.read(&mut packet) { + Ok(0) => break, + Ok(_) => (), + Err(err) => return Err(err), + } - let mut packet = Packet::default(); - match socket.read(&mut packet) { - Ok(0) => break, - Ok(_) => (), - Err(err) => panic!("xhcid failed to read from socket: {err}"), - } + let a = packet.a; + hci.handle(&mut packet); + if packet.a == (-EWOULDBLOCK) as usize { + packet.a = a; + todo.push(packet); + } else { + socket.write(&packet)?; + } + } + Ok(None) + }) + .expect("xhcid: failed to catch events on scheme file"); - let a = packet.a; - hci.handle(&mut packet); - if packet.a == (-EWOULDBLOCK) as usize { - packet.a = a; - todo.push(packet); - } else { - socket.write(&packet).expect("xhcid failed to write to socket"); - } - } + event_queue + .trigger_all(Event { fd: 0, flags: EventFlags::empty() }) + .expect("xhcid: failed to trigger events"); + + event_queue.run().expect("xhcid: failed to handle events"); std::process::exit(0); } diff --git a/xhcid/src/xhci/context.rs b/xhcid/src/xhci/context.rs index 5f364a5524..3779218c28 100644 --- a/xhcid/src/xhci/context.rs +++ b/xhcid/src/xhci/context.rs @@ -185,7 +185,7 @@ impl ScratchpadBufferArray { pub fn new(ac64: bool, entries: u16) -> Result { let mut entries = unsafe { Xhci::alloc_dma_zeroed_unsized_raw(ac64, entries as usize)? }; - let pages = entries.iter_mut().map(|entry: &mut ScratchpadBufferEntry| -> Result<_, syscall::Error> { + let pages = entries.iter_mut().map(|entry: &mut ScratchpadBufferEntry| { let dma = unsafe { Dma::<[u8; PAGE_SIZE]>::zeroed()?.assume_init() }; assert_eq!(dma.physical() % PAGE_SIZE, 0); entry.set_addr(dma.physical() as u64); diff --git a/xhcid/src/xhci/irq_reactor.rs b/xhcid/src/xhci/irq_reactor.rs index a697561ad5..215832ff9f 100644 --- a/xhcid/src/xhci/irq_reactor.rs +++ b/xhcid/src/xhci/irq_reactor.rs @@ -14,7 +14,7 @@ use log::{debug, error, info, warn, trace}; use futures::Stream; use syscall::Io; -use event::{Event, EventQueue, RawEventQueue}; +use event::{Event, EventQueue}; use super::Xhci; use super::doorbell::Doorbell; @@ -146,13 +146,12 @@ impl IrqReactor { debug!("Running IRQ reactor with IRQ file and event queue"); let hci_clone = Arc::clone(&self.hci); - let mut event_queue = RawEventQueue::new().expect("xhcid irq_reactor: failed to create IRQ event queue"); + let mut event_queue = EventQueue::<()>::new().expect("xhcid irq_reactor: failed to create IRQ event queue"); let irq_fd = self.irq_file.as_ref().unwrap().as_raw_fd(); - event_queue.subscribe(irq_fd as usize, 0, event::EventFlags::READ).unwrap(); let mut event_trb_index = { hci_clone.primary_event_ring.lock().unwrap().ring.next_index() }; - for _event in event_queue { + event_queue.add(irq_fd, move |_| -> io::Result> { trace!("IRQ event queue notified"); let mut buffer = [0u8; 8]; @@ -161,7 +160,7 @@ impl IrqReactor { if !self.hci.received_irq() { // continue only when an IRQ to this device was received trace!("no interrupt pending"); - break; + return Ok(None); } trace!("IRQ reactor received an IRQ"); @@ -174,13 +173,13 @@ impl IrqReactor { let mut count = 0; - loop { + 'trb_loop: loop { let event_trb = &mut event_ring.ring.trbs[event_trb_index]; if event_trb.completion_code() == TrbCompletionCode::Invalid as u8 { if count == 0 { warn!("xhci: Received interrupt, but no event was found in the event ring. Ignoring interrupt.") } // no more events were found, continue the loop - return; + return Ok(None); } else { count += 1 } trace!("Found event TRB type {}: {:?}", event_trb.trb_type(), event_trb); @@ -188,7 +187,7 @@ impl IrqReactor { if self.check_event_ring_full(event_trb.clone()) { info!("Had to resize event TRB, retrying..."); hci_clone.event_handler_finished(); - return; + return Ok(None); } self.handle_requests(); @@ -200,7 +199,8 @@ impl IrqReactor { event_trb_index = event_ring.ring.next_index(); } - } + }).expect("xhcid: failed to catch irq events"); + event_queue.run().expect("xhcid: failed to run IRQ event queue"); } fn update_erdp(&self, event_ring: &EventRing) { let dequeue_pointer_and_dcs = event_ring.erdp(); diff --git a/xhcid/src/xhci/mod.rs b/xhcid/src/xhci/mod.rs index 52d544d845..32d9d1eb82 100644 --- a/xhcid/src/xhci/mod.rs +++ b/xhcid/src/xhci/mod.rs @@ -11,6 +11,7 @@ use std::{mem, process, slice, sync::atomic, task, thread}; use syscall::PAGE_SIZE; use syscall::error::{Error, Result, EBADF, EBADMSG, ENOENT, EIO}; +use syscall::flag::{O_RDONLY, PhysallocFlags}; use syscall::io::Io; use chashmap::CHashMap; @@ -235,7 +236,12 @@ impl Xhci { let cap = unsafe { &mut *(address as *mut CapabilityRegs) }; debug!("CAP REGS BASE {:X}", address); - //let page_size = ... + /*let page_size = { + let memory_fd = syscall::open("memory:", O_RDONLY)?; + let mut stat = syscall::data::StatVfs::default(); + syscall::fstatvfs(memory_fd, &mut stat)?; + stat.f_bsize as usize + };*/ let op_base = address + cap.len.read() as usize; let op = unsafe { &mut *(op_base as *mut OperationalRegs) };