Update to redox-scheme 0.4

This commit is contained in:
bjorn3
2025-03-14 21:32:39 +01:00
parent 3f9904e370
commit 5d76acfd74
24 changed files with 121 additions and 191 deletions
Generated
+10 -19
View File
@@ -32,7 +32,7 @@ dependencies = [
"parking_lot 0.12.3",
"plain",
"redox-daemon",
"redox-scheme 0.3.0",
"redox-scheme",
"redox_event",
"redox_syscall",
"ron",
@@ -193,7 +193,7 @@ dependencies = [
"orbclient",
"pcid",
"redox-daemon",
"redox-scheme 0.3.0",
"redox-scheme",
"redox_syscall",
]
@@ -393,7 +393,7 @@ version = "0.1.0"
dependencies = [
"libredox",
"partitionlib",
"redox-scheme 0.3.0",
"redox-scheme",
"redox_syscall",
]
@@ -406,7 +406,7 @@ dependencies = [
"inputd",
"libredox",
"log",
"redox-scheme 0.3.0",
"redox-scheme",
"redox_syscall",
]
@@ -415,7 +415,7 @@ name = "driver-network"
version = "0.1.0"
dependencies = [
"libredox",
"redox-scheme 0.3.0",
"redox-scheme",
"redox_syscall",
]
@@ -450,7 +450,7 @@ dependencies = [
"orbclient",
"ransid",
"redox-daemon",
"redox-scheme 0.3.0",
"redox-scheme",
"redox_event",
"redox_syscall",
]
@@ -466,7 +466,7 @@ dependencies = [
"orbclient",
"ransid",
"redox-daemon",
"redox-scheme 0.3.0",
"redox-scheme",
"redox_event",
"redox_syscall",
]
@@ -720,7 +720,7 @@ dependencies = [
"log",
"orbclient",
"redox-daemon",
"redox-scheme 0.3.0",
"redox-scheme",
"redox_syscall",
]
@@ -965,7 +965,7 @@ dependencies = [
"pico-args",
"plain",
"redox-daemon",
"redox-scheme 0.4.0",
"redox-scheme",
"redox_syscall",
"serde",
]
@@ -1115,15 +1115,6 @@ dependencies = [
"termion",
]
[[package]]
name = "redox-scheme"
version = "0.3.0"
source = "git+https://gitlab.redox-os.org/redox-os/redox-scheme.git#d2bfa80a1072facb2662d0bc73656247f0b254b4"
dependencies = [
"libredox",
"redox_syscall",
]
[[package]]
name = "redox-scheme"
version = "0.4.0"
@@ -1924,7 +1915,7 @@ dependencies = [
"pcid",
"plain",
"redox-daemon",
"redox-scheme 0.3.0",
"redox-scheme",
"redox_event",
"redox_syscall",
"regex",
+1 -1
View File
@@ -23,5 +23,5 @@ ron = "0.8.1"
amlserde = { path = "../amlserde" }
common = { path = "../common" }
libredox = "0.1.3"
redox-scheme = { git = "https://gitlab.redox-os.org/redox-os/redox-scheme.git" }
redox-scheme = "0.4"
arrayvec = "0.7.6"
+14 -12
View File
@@ -91,18 +91,12 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
if event.fd == socket.inner().raw() {
loop {
let sqe = match socket.next_request(SignalBehavior::Interrupt) {
let req = match socket.next_request(SignalBehavior::Interrupt) {
Ok(None) => {
mounted = false;
break;
}
Ok(Some(s)) => {
if let RequestKind::Call(call) = s.kind() {
call
} else {
continue;
}
}
Ok(Some(req)) => req,
Err(err) => {
if err.errno == EWOULDBLOCK || err.errno == EAGAIN {
break;
@@ -112,10 +106,18 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
}
};
let response = sqe.handle_scheme(&mut scheme);
socket
.write_response(response, SignalBehavior::Restart)
.expect("acpid: failed to write response");
match req.kind() {
RequestKind::Call(call) => {
let response = call.handle_scheme(&mut scheme);
socket
.write_response(response, SignalBehavior::Restart)
.expect("acpid: failed to write response");
}
RequestKind::OnClose { id } => {
scheme.on_close(id);
}
_ => (),
}
}
} else if event.fd == shutdown_pipe.as_raw_fd() as usize {
log::info!("Received shutdown request from kernel.");
+4 -6
View File
@@ -343,12 +343,10 @@ impl Scheme for AcpiScheme<'_> {
fn write(&mut self, _id: usize, _buf: &[u8], _offset: u64, _fcntl: u32) -> Result<usize> {
Err(Error::new(EBADF))
}
}
fn close(&mut self, id: usize) -> Result<usize> {
if self.handles.remove(&id).is_none() {
return Err(Error::new(EBADF));
}
Ok(0)
impl AcpiScheme<'_> {
pub fn on_close(&mut self, id: usize) {
self.handles.remove(&id);
}
}
+1 -1
View File
@@ -6,7 +6,7 @@ edition = "2021"
[dependencies]
orbclient = "0.3.47"
redox-daemon = "0.1"
redox-scheme = { git = "https://gitlab.redox-os.org/redox-os/redox-scheme.git" }
redox-scheme = "0.4"
redox_syscall = "0.5"
common = { path = "../../common" }
+10 -22
View File
@@ -1,8 +1,7 @@
use inputd::ProducerHandle;
use pcid_interface::PciFunctionHandle;
use redox_scheme::{RequestKind, Response, SignalBehavior, Socket};
use redox_scheme::{RequestKind, SignalBehavior, Socket};
use syscall::call::iopl;
use syscall::EOPNOTSUPP;
use crate::bga::Bga;
use crate::scheme::BgaScheme;
@@ -41,34 +40,23 @@ fn main() {
loop {
let Some(request) = socket
.next_request(SignalBehavior::Restart)
.expect("bgad: failed to read scheme")
.expect("bgad: failed to get next scheme request")
else {
// Scheme likely got unmounted
std::process::exit(0);
};
match request.kind() {
RequestKind::Call(call_request) => {
let resp = call_request.handle_scheme(&mut scheme);
RequestKind::Call(call) => {
let response = call.handle_scheme(&mut scheme);
socket
.write_response(resp, SignalBehavior::Restart)
.expect("bgad: failed to write display scheme");
.write_responses(&[response], SignalBehavior::Restart)
.expect("bgad: failed to write next scheme response");
}
RequestKind::SendFd(sendfd_request) => {
socket
.write_response(
Response::for_sendfd(
&sendfd_request,
Err(syscall::Error::new(EOPNOTSUPP)),
),
SignalBehavior::Restart,
)
.expect("bgad: failed to write response");
}
RequestKind::Cancellation(_cancellation_request) => {}
RequestKind::MsyncMsg | RequestKind::MunmapMsg | RequestKind::MmapMsg => {
unreachable!()
RequestKind::OnClose { id } => {
scheme.on_close(id);
}
_ => (),
}
}
})
+4 -4
View File
@@ -97,8 +97,8 @@ impl Scheme for BgaScheme {
fn fcntl(&mut self, _id: usize, _cmd: usize, _arg: usize) -> Result<usize> {
Ok(0)
}
fn close(&mut self, _file: usize) -> Result<usize> {
Ok(0)
}
}
impl BgaScheme {
pub fn on_close(&mut self, _id: usize) {}
}
+1 -1
View File
@@ -5,7 +5,7 @@ edition = "2021"
[dependencies]
log = "0.4"
redox-scheme = { git = "https://gitlab.redox-os.org/redox-os/redox-scheme.git" }
redox-scheme = "0.4"
redox_syscall = "0.5"
libredox = "0.1.3"
+14 -19
View File
@@ -3,9 +3,8 @@ use std::io;
use graphics_ipc::v1::Damage;
use inputd::{VtEvent, VtEventKind};
use libredox::errno::EOPNOTSUPP;
use libredox::Fd;
use redox_scheme::{RequestKind, Response, Scheme, SignalBehavior, Socket};
use redox_scheme::{RequestKind, Scheme, SignalBehavior, Socket};
use syscall::{Error, MapFlags, Result, EAGAIN, EBADF, EINVAL};
pub trait GraphicsAdapter {
@@ -118,22 +117,16 @@ impl<T: GraphicsAdapter> GraphicsScheme<T> {
};
match request.kind() {
RequestKind::Call(call_request) => {
let resp = call_request.handle_scheme(self);
RequestKind::Call(call) => {
let response = call.handle_scheme(self);
self.socket
.write_response(resp, SignalBehavior::Restart)
.expect("driver-graphics: failed to write display scheme");
.write_response(response, SignalBehavior::Restart)
.expect("driver-graphics: failed to write response");
}
RequestKind::SendFd(sendfd_request) => {
self.socket.write_response(
Response::for_sendfd(&sendfd_request, Err(syscall::Error::new(EOPNOTSUPP))),
SignalBehavior::Restart,
)?;
}
RequestKind::Cancellation(_cancellation_request) => {}
RequestKind::MsyncMsg | RequestKind::MunmapMsg | RequestKind::MmapMsg => {
unreachable!()
RequestKind::OnClose { id } => {
self.on_close(id);
}
_ => (),
}
}
@@ -246,10 +239,6 @@ impl<T: GraphicsAdapter> Scheme for GraphicsScheme<T> {
Ok(buf.len())
}
fn close(&mut self, id: usize) -> syscall::Result<usize> {
self.handles.remove(&id).ok_or(Error::new(EBADF))?;
Ok(0)
}
fn mmap_prep(
&mut self,
id: usize,
@@ -265,3 +254,9 @@ impl<T: GraphicsAdapter> Scheme for GraphicsScheme<T> {
Ok(ptr as usize)
}
}
impl<T: GraphicsAdapter> GraphicsScheme<T> {
fn on_close(&mut self, id: usize) {
self.handles.remove(&id);
}
}
+1 -1
View File
@@ -9,7 +9,7 @@ ransid = "0.4"
redox_event = "0.4"
redox_syscall = "0.5"
redox-daemon = "0.1"
redox-scheme = { git = "https://gitlab.redox-os.org/redox-os/redox-scheme.git" }
redox-scheme = "0.4"
console-draw = { path = "../console-draw" }
graphics-ipc = { path = "../graphics-ipc" }
+9 -19
View File
@@ -9,8 +9,7 @@
//! to get new input. Fbbootlogd does all blocking operations in background threads such that the
//! main thread will always keep accepting new input and writing it to the framebuffer.
use libredox::errno::EOPNOTSUPP;
use redox_scheme::{RequestKind, Response, SignalBehavior, Socket};
use redox_scheme::{RequestKind, SignalBehavior, Socket};
use crate::scheme::FbbootlogScheme;
@@ -45,26 +44,17 @@ fn inner(daemon: redox_daemon::Daemon) -> ! {
};
match request.kind() {
RequestKind::Call(call_request) => {
RequestKind::Call(call) => {
let response = call.handle_scheme(&mut scheme);
socket
.write_response(
call_request.handle_scheme(&mut scheme),
SignalBehavior::Restart,
)
.expect("fbbootlogd: failed to write display scheme");
.write_responses(&[response], SignalBehavior::Restart)
.expect("pcid: failed to write next scheme response");
}
RequestKind::SendFd(sendfd_request) => {
socket
.write_response(
Response::for_sendfd(&sendfd_request, Err(syscall::Error::new(EOPNOTSUPP))),
SignalBehavior::Restart,
)
.expect("fbbootlogd: failed to write scheme");
}
RequestKind::Cancellation(_cancellation_request) => {}
RequestKind::MsyncMsg | RequestKind::MunmapMsg | RequestKind::MmapMsg => {
unreachable!()
RequestKind::OnClose { id } => {
scheme.on_close(id);
}
_ => (),
}
}
}
+4 -4
View File
@@ -73,8 +73,8 @@ impl Scheme for FbbootlogScheme {
Ok(buf.len())
}
fn close(&mut self, _id: usize) -> Result<usize> {
Ok(0)
}
}
impl FbbootlogScheme {
pub fn on_close(&mut self, _id: usize) {}
}
+1 -1
View File
@@ -9,7 +9,7 @@ ransid = "0.4"
redox_event = "0.4"
redox_syscall = "0.5"
redox-daemon = "0.1"
redox-scheme = { git = "https://gitlab.redox-os.org/redox-os/redox-scheme.git" }
redox-scheme = "0.4"
console-draw = { path = "../console-draw" }
graphics-ipc = { path = "../graphics-ipc" }
+4 -14
View File
@@ -1,5 +1,5 @@
use event::EventQueue;
use libredox::errno::{EAGAIN, EINTR, EOPNOTSUPP, ESTALE};
use libredox::errno::{EAGAIN, EINTR, ESTALE};
use orbclient::Event;
use redox_scheme::{CallRequest, RequestKind, Response, SignalBehavior, Socket};
use std::os::fd::{AsRawFd, BorrowedFd};
@@ -105,16 +105,8 @@ fn handle_event(
blocked.push(call_request);
}
}
RequestKind::SendFd(sendfd_request) => {
socket
.write_response(
Response::for_sendfd(
&sendfd_request,
Err(syscall::Error::new(EOPNOTSUPP)),
),
SignalBehavior::Restart,
)
.expect("fbcond: failed to write scheme");
RequestKind::OnClose { id } => {
scheme.on_close(id);
}
RequestKind::Cancellation(cancellation_request) => {
if let Some(i) = blocked
@@ -128,9 +120,7 @@ fn handle_event(
.expect("vesad: failed to write display scheme");
}
}
RequestKind::MsyncMsg | RequestKind::MunmapMsg | RequestKind::MmapMsg => {
unreachable!()
}
_ => {}
}
}
}
+4 -3
View File
@@ -161,9 +161,10 @@ impl SchemeBlock for FbconScheme {
Err(Error::new(EBADF))
}
}
}
fn close(&mut self, id: usize) -> Result<Option<usize>> {
self.handles.remove(&id).ok_or(Error::new(EBADF))?;
Ok(Some(0))
impl FbconScheme {
pub fn on_close(&mut self, id: usize) {
self.handles.remove(&id);
}
}
+1 -1
View File
@@ -13,4 +13,4 @@ orbclient = "0.3.27"
libredox = "0.1.3"
common = { path = "../common" }
redox-scheme = { git = "https://gitlab.redox-os.org/redox-os/redox-scheme.git" }
redox-scheme = "0.4"
+10 -13
View File
@@ -18,8 +18,8 @@ use std::sync::atomic::{AtomicUsize, Ordering};
use inputd::{VtActivate, VtEvent, VtEventKind};
use libredox::errno::{EOPNOTSUPP, ESTALE};
use redox_scheme::{RequestKind, Response, Scheme, SignalBehavior, Socket};
use libredox::errno::ESTALE;
use redox_scheme::{RequestKind, Scheme, SignalBehavior, Socket};
use orbclient::{Event, EventOption};
use syscall::{Error as SysError, EventFlags, EINVAL};
@@ -457,11 +457,13 @@ impl Scheme for InputScheme {
}
}
}
}
fn close(&mut self, id: usize) -> syscall::Result<usize> {
let handle = self.handles.get(&id).ok_or(SysError::new(EINVAL))?;
impl InputScheme {
fn on_close(&mut self, id: usize) {
let handle = self.handles.remove(&id).unwrap();
match *handle {
match handle {
Handle::Consumer { vt, .. } => {
self.vts.remove(&vt);
if self.active_vt == Some(vt) {
@@ -474,7 +476,6 @@ impl Scheme for InputScheme {
}
_ => {}
}
Ok(0)
}
}
@@ -499,14 +500,10 @@ fn deamon(deamon: redox_daemon::Daemon) -> anyhow::Result<()> {
SignalBehavior::Restart,
)?;
}
RequestKind::SendFd(sendfd_request) => {
socket_file.write_response(
Response::for_sendfd(&sendfd_request, Err(syscall::Error::new(EOPNOTSUPP))),
SignalBehavior::Restart,
)?;
RequestKind::OnClose { id } => {
scheme.on_close(id);
}
RequestKind::Cancellation(_cancellation_request) => {}
RequestKind::MsyncMsg | RequestKind::MunmapMsg | RequestKind::MmapMsg => unreachable!(),
_ => {}
}
if !scheme.has_new_events {
+1 -1
View File
@@ -5,5 +5,5 @@ edition = "2021"
[dependencies]
libredox = "0.1.3"
redox-scheme = { git = "https://gitlab.redox-os.org/redox-os/redox-scheme.git" }
redox-scheme = "0.4"
redox_syscall = { version = "0.5", features = ["std"] }
+7 -12
View File
@@ -1,7 +1,6 @@
use std::collections::BTreeMap;
use std::{cmp, io};
use libredox::errno::EOPNOTSUPP;
use libredox::flag::O_NONBLOCK;
use libredox::Fd;
use redox_scheme::{
@@ -114,11 +113,8 @@ impl<T: NetworkAdapter> NetworkScheme<T> {
self.blocked.push(call_request);
}
}
RequestKind::SendFd(sendfd_request) => {
self.socket.write_response(
Response::for_sendfd(&sendfd_request, Err(syscall::Error::new(EOPNOTSUPP))),
SignalBehavior::Restart,
)?;
RequestKind::OnClose { id } => {
self.on_close(id);
}
RequestKind::Cancellation(cancellation_request) => {
if let Some(i) = self
@@ -131,9 +127,7 @@ impl<T: NetworkAdapter> NetworkScheme<T> {
self.socket.write_response(resp, SignalBehavior::Restart)?;
}
}
RequestKind::MsyncMsg | RequestKind::MunmapMsg | RequestKind::MmapMsg => {
unreachable!()
}
_ => {}
}
}
@@ -282,9 +276,10 @@ impl<T: NetworkAdapter> SchemeBlock for NetworkScheme<T> {
let _handle = self.handles.get(&id).ok_or(Error::new(EBADF))?;
Ok(Some(0))
}
}
fn close(&mut self, id: usize) -> Result<Option<usize>> {
self.handles.remove(&id).ok_or(Error::new(EBADF))?;
Ok(Some(0))
impl<T: NetworkAdapter> NetworkScheme<T> {
fn on_close(&mut self, id: usize) {
self.handles.remove(&id);
}
}
+1 -1
View File
@@ -8,4 +8,4 @@ partitionlib = { path = "../partitionlib" }
libredox = "0.1.3"
redox_syscall = "0.5"
redox-scheme = { git = "https://gitlab.redox-os.org/redox-os/redox-scheme.git" }
redox-scheme = "0.4"
+10 -16
View File
@@ -9,12 +9,12 @@ use std::str;
use libredox::Fd;
use partitionlib::{LogicalBlockSize, PartitionTable};
use redox_scheme::{
CallRequest, CallerCtx, OpenResult, RequestKind, Response, SchemeBlock, SignalBehavior, Socket,
CallRequest, CallerCtx, OpenResult, RequestKind, SchemeBlock, SignalBehavior, Socket,
};
use syscall::schemev2::NewFdFlags;
use syscall::{
Error, Result, Stat, EACCES, EAGAIN, EBADF, EINVAL, EISDIR, ENOENT, ENOLCK, EOPNOTSUPP,
EOVERFLOW, MODE_DIR, MODE_FILE, O_DIRECTORY, O_STAT,
Error, Result, Stat, EACCES, EAGAIN, EBADF, EINVAL, EISDIR, ENOENT, ENOLCK, EOVERFLOW,
MODE_DIR, MODE_FILE, O_DIRECTORY, O_STAT,
};
/// Split the read operation into a series of block reads.
@@ -330,18 +330,13 @@ impl<T: Disk> DiskScheme<T> {
self.blocked.push(call_request);
}
}
RequestKind::SendFd(sendfd_request) => {
self.socket.write_response(
Response::for_sendfd(&sendfd_request, Err(syscall::Error::new(EOPNOTSUPP))),
SignalBehavior::Restart,
)?;
RequestKind::OnClose { id } => {
self.on_close(id);
}
RequestKind::Cancellation(_cancellation_request) => {
// FIXME implement cancellation
}
RequestKind::MsyncMsg | RequestKind::MunmapMsg | RequestKind::MmapMsg => {
unreachable!()
}
_ => {}
}
}
@@ -610,11 +605,10 @@ impl<T: Disk> SchemeBlock for DiskScheme<T> {
},
))
}
}
fn close(&mut self, id: usize) -> Result<Option<usize>> {
self.handles
.remove(&id)
.ok_or(Error::new(EBADF))
.and(Ok(Some(0)))
impl<T: Disk> DiskScheme<T> {
fn on_close(&mut self, id: usize) {
self.handles.remove(&id);
}
}
+1 -1
View File
@@ -21,7 +21,7 @@ lazy_static = "1.4"
log = "0.4"
redox-daemon = "0.1"
redox_event = "0.4.1"
redox-scheme = { git = "https://gitlab.redox-os.org/redox-os/redox-scheme.git" }
redox-scheme = "0.4"
redox_syscall = "0.5"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
+4 -13
View File
@@ -37,8 +37,7 @@ use pcid_interface::{
MsiSetFeatureInfo, PciFeature, PciFeatureInfo, PciFunctionHandle, SetFeatureInfo,
};
use redox_scheme::{RequestKind, Response, SignalBehavior, Socket};
use syscall::EOPNOTSUPP;
use redox_scheme::{RequestKind, SignalBehavior, Socket};
use crate::xhci::{InterruptMethod, Xhci};
@@ -216,18 +215,10 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
.write_response(resp, SignalBehavior::Restart)
.expect("xhcid: failed to write scheme");
}
RequestKind::SendFd(sendfd_request) => {
socket
.write_response(
Response::for_sendfd(&sendfd_request, Err(syscall::Error::new(EOPNOTSUPP))),
SignalBehavior::Restart,
)
.expect("xhcid: failed to write response");
}
RequestKind::Cancellation(_cancellation_request) => {}
RequestKind::MsyncMsg | RequestKind::MunmapMsg | RequestKind::MmapMsg => {
unreachable!()
RequestKind::OnClose { id } => {
hci.on_close(id);
}
_ => {}
}
}
}
+4 -6
View File
@@ -2163,14 +2163,12 @@ impl Scheme for &Xhci {
_ => Err(Error::new(EBADF)),
}
}
fn close(&mut self, fd: usize) -> Result<usize> {
if self.handles.remove(&fd).is_none() {
return Err(Error::new(EBADF));
}
Ok(0)
}
}
impl Xhci {
pub fn on_close(&self, fd: usize) {
self.handles.remove(&fd);
}
pub fn get_endp_status(&self, port_num: usize, endp_num: u8) -> Result<EndpointStatus> {
let port_state = self.port_states.get(&port_num).ok_or(Error::new(EBADFD))?;