Update to redox-scheme 0.4
This commit is contained in:
Generated
+10
-19
@@ -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
@@ -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
@@ -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
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
@@ -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) {}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,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);
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {}
|
||||
}
|
||||
|
||||
@@ -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" }
|
||||
|
||||
@@ -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!()
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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 {
|
||||
|
||||
@@ -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"] }
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
@@ -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
@@ -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);
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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))?;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user