Update redox-scheme to 0.3.0
This commit is contained in:
Generated
+2
-2
@@ -1157,8 +1157,8 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "redox-scheme"
|
||||
version = "0.2.4"
|
||||
source = "git+https://gitlab.redox-os.org/redox-os/redox-scheme.git#efe7addc3d6c54149694f875ed51467f8c4aa8b9"
|
||||
version = "0.3.0"
|
||||
source = "git+https://gitlab.redox-os.org/redox-os/redox-scheme.git#d2bfa80a1072facb2662d0bc73656247f0b254b4"
|
||||
dependencies = [
|
||||
"libredox",
|
||||
"redox_syscall",
|
||||
|
||||
+3
-3
@@ -7,7 +7,7 @@ use std::os::unix::io::AsRawFd;
|
||||
use std::sync::Arc;
|
||||
|
||||
use event::{EventFlags, RawEventQueue};
|
||||
use redox_scheme::{RequestKind, SignalBehavior, Socket, V2};
|
||||
use redox_scheme::{RequestKind, SignalBehavior, Socket};
|
||||
use syscall::{EAGAIN, EWOULDBLOCK};
|
||||
|
||||
mod acpi;
|
||||
@@ -66,7 +66,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
|
||||
.expect("acpid: failed to open `/scheme/kernel.acpi/kstop`");
|
||||
|
||||
let mut event_queue = RawEventQueue::new().expect("acpid: failed to create event queue");
|
||||
let socket = Socket::<V2>::nonblock("acpi").expect("acpid: failed to create disk scheme");
|
||||
let socket = Socket::nonblock("acpi").expect("acpid: failed to create disk scheme");
|
||||
|
||||
daemon.ready().expect("acpid: failed to notify parent");
|
||||
|
||||
@@ -114,7 +114,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
|
||||
}
|
||||
};
|
||||
|
||||
let response = sqe.handle_scheme_mut(&mut scheme);
|
||||
let response = sqe.handle_scheme(&mut scheme);
|
||||
socket
|
||||
.write_response(response, SignalBehavior::Restart)
|
||||
.expect("acpid: failed to write response");
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
use core::str;
|
||||
use parking_lot::RwLockReadGuard;
|
||||
use redox_scheme::{CallerCtx, OpenResult, SchemeMut};
|
||||
use redox_scheme::{CallerCtx, OpenResult, Scheme};
|
||||
use std::collections::BTreeMap;
|
||||
use std::convert::{TryFrom, TryInto};
|
||||
use syscall::dirent::{DirEntry, DirentBuf, DirentKind};
|
||||
@@ -141,7 +141,7 @@ fn parse_table(table: &[u8]) -> Option<SdtSignature> {
|
||||
})
|
||||
}
|
||||
|
||||
impl SchemeMut for AcpiScheme<'_> {
|
||||
impl Scheme for AcpiScheme<'_> {
|
||||
fn xopen(&mut self, path: &str, flags: usize, _ctx: &CallerCtx) -> Result<OpenResult> {
|
||||
let path = path.trim_start_matches('/');
|
||||
|
||||
|
||||
@@ -11,7 +11,8 @@
|
||||
|
||||
#![feature(io_error_more)]
|
||||
|
||||
use redox_scheme::{RequestKind, SignalBehavior, Socket, V2};
|
||||
use libredox::errno::EOPNOTSUPP;
|
||||
use redox_scheme::{RequestKind, Response, SignalBehavior, Socket};
|
||||
|
||||
use crate::scheme::FbbootlogScheme;
|
||||
|
||||
@@ -23,7 +24,7 @@ fn main() {
|
||||
redox_daemon::Daemon::new(|daemon| inner(daemon)).expect("failed to create daemon");
|
||||
}
|
||||
fn inner(daemon: redox_daemon::Daemon) -> ! {
|
||||
let socket: Socket<V2> =
|
||||
let socket =
|
||||
Socket::create("fbbootlog").expect("fbbootlogd: failed to create fbbootlog scheme");
|
||||
|
||||
let mut scheme = FbbootlogScheme::new();
|
||||
@@ -54,11 +55,19 @@ fn inner(daemon: redox_daemon::Daemon) -> ! {
|
||||
RequestKind::Call(call_request) => {
|
||||
socket
|
||||
.write_response(
|
||||
call_request.handle_scheme_mut(&mut scheme),
|
||||
call_request.handle_scheme(&mut scheme),
|
||||
SignalBehavior::Restart,
|
||||
)
|
||||
.expect("fbbootlogd: failed to write display scheme");
|
||||
}
|
||||
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!()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use std::collections::BTreeMap;
|
||||
|
||||
use redox_scheme::SchemeMut;
|
||||
use redox_scheme::Scheme;
|
||||
use syscall::{Error, EventFlags, Result, EBADF, EINVAL, ENOENT};
|
||||
|
||||
use crate::display::Display;
|
||||
@@ -31,7 +31,7 @@ impl FbbootlogScheme {
|
||||
}
|
||||
}
|
||||
|
||||
impl SchemeMut for FbbootlogScheme {
|
||||
impl Scheme for FbbootlogScheme {
|
||||
fn open(&mut self, path_str: &str, _flags: usize, _uid: u32, _gid: u32) -> Result<usize> {
|
||||
if !path_str.is_empty() {
|
||||
return Err(Error::new(ENOENT));
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#![feature(io_error_more)]
|
||||
|
||||
use event::EventQueue;
|
||||
use libredox::errno::{EAGAIN, EINTR, ESTALE};
|
||||
use libredox::errno::{EAGAIN, EINTR, EOPNOTSUPP, ESTALE};
|
||||
use orbclient::Event;
|
||||
use redox_scheme::{CallRequest, RequestKind, Response, SignalBehavior, Socket};
|
||||
use std::os::fd::{AsRawFd, BorrowedFd};
|
||||
@@ -99,14 +99,25 @@ fn handle_event(
|
||||
|
||||
match request.kind() {
|
||||
RequestKind::Call(call_request) => {
|
||||
if let Some(resp) = call_request.handle_scheme_block_mut(scheme) {
|
||||
if let Some(resp) = call_request.handle_scheme_block(scheme) {
|
||||
socket
|
||||
.write_response(resp, SignalBehavior::Restart)
|
||||
.expect("vesad: failed to write display scheme");
|
||||
.expect("fbcond: failed to write display scheme");
|
||||
} else {
|
||||
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::Cancellation(cancellation_request) => {
|
||||
if let Some(i) = blocked
|
||||
.iter()
|
||||
@@ -154,7 +165,7 @@ fn handle_event(
|
||||
{
|
||||
let mut i = 0;
|
||||
while i < blocked.len() {
|
||||
if let Some(resp) = blocked[i].handle_scheme_block_mut(scheme) {
|
||||
if let Some(resp) = blocked[i].handle_scheme_block(scheme) {
|
||||
socket
|
||||
.write_response(resp, SignalBehavior::Restart)
|
||||
.expect("vesad: failed to write display scheme");
|
||||
|
||||
@@ -2,7 +2,7 @@ use std::collections::BTreeMap;
|
||||
use std::os::fd::AsRawFd;
|
||||
|
||||
use event::{EventQueue, UserData};
|
||||
use redox_scheme::SchemeBlockMut;
|
||||
use redox_scheme::SchemeBlock;
|
||||
use syscall::{Error, EventFlags, Result, EBADF, EINVAL, ENOENT, O_NONBLOCK};
|
||||
|
||||
use crate::display::Display;
|
||||
@@ -69,7 +69,7 @@ impl FbconScheme {
|
||||
}
|
||||
}
|
||||
|
||||
impl SchemeBlockMut for FbconScheme {
|
||||
impl SchemeBlock for FbconScheme {
|
||||
fn open(
|
||||
&mut self,
|
||||
path_str: &str,
|
||||
|
||||
@@ -3,8 +3,8 @@ extern crate orbclient;
|
||||
extern crate syscall;
|
||||
|
||||
use event::{user_data, EventQueue};
|
||||
use libredox::errno::EAGAIN;
|
||||
use redox_scheme::{RequestKind, SignalBehavior, Socket, V2};
|
||||
use libredox::errno::{EAGAIN, EOPNOTSUPP};
|
||||
use redox_scheme::{RequestKind, Response, SignalBehavior, Socket};
|
||||
use std::env;
|
||||
use std::fs::File;
|
||||
use std::os::fd::AsRawFd;
|
||||
@@ -78,8 +78,7 @@ fn main() {
|
||||
.expect("failed to create daemon");
|
||||
}
|
||||
fn inner(daemon: redox_daemon::Daemon, framebuffers: Vec<FrameBuffer>, spec: &[()]) -> ! {
|
||||
let socket: Socket<V2> =
|
||||
Socket::nonblock("display.vesa").expect("vesad: failed to create display scheme");
|
||||
let socket = Socket::nonblock("display.vesa").expect("vesad: failed to create display scheme");
|
||||
|
||||
let mut scheme = DisplayScheme::new(framebuffers, &spec);
|
||||
|
||||
@@ -148,11 +147,22 @@ fn inner(daemon: redox_daemon::Daemon, framebuffers: Vec<FrameBuffer>, spec: &[(
|
||||
RequestKind::Call(call_request) => {
|
||||
socket
|
||||
.write_response(
|
||||
call_request.handle_scheme_mut(&mut scheme),
|
||||
call_request.handle_scheme(&mut scheme),
|
||||
SignalBehavior::Restart,
|
||||
)
|
||||
.expect("vesad: failed to write display scheme");
|
||||
}
|
||||
RequestKind::SendFd(sendfd_request) => {
|
||||
socket
|
||||
.write_response(
|
||||
Response::for_sendfd(
|
||||
&sendfd_request,
|
||||
Err(syscall::Error::new(EOPNOTSUPP)),
|
||||
),
|
||||
SignalBehavior::Restart,
|
||||
)
|
||||
.expect("vesad: failed to write scheme");
|
||||
}
|
||||
RequestKind::Cancellation(_cancellation_request) => {}
|
||||
RequestKind::MsyncMsg | RequestKind::MunmapMsg | RequestKind::MmapMsg => {
|
||||
unreachable!()
|
||||
|
||||
@@ -2,7 +2,7 @@ use std::collections::BTreeMap;
|
||||
use std::str;
|
||||
|
||||
use inputd::{VtEvent, VtEventKind};
|
||||
use redox_scheme::SchemeMut;
|
||||
use redox_scheme::Scheme;
|
||||
use syscall::{Error, MapFlags, Result, EBADF, EINVAL, ENOENT};
|
||||
|
||||
use crate::{framebuffer::FrameBuffer, screen::GraphicScreen};
|
||||
@@ -105,7 +105,7 @@ impl DisplayScheme {
|
||||
}
|
||||
}
|
||||
|
||||
impl SchemeMut for DisplayScheme {
|
||||
impl Scheme for DisplayScheme {
|
||||
fn open(&mut self, path_str: &str, _flags: usize, _uid: u32, _gid: u32) -> Result<usize> {
|
||||
let mut parts = path_str.split('/');
|
||||
let mut vt_screen = parts.next().unwrap_or("").split('.');
|
||||
|
||||
@@ -27,10 +27,10 @@ use std::os::fd::AsRawFd;
|
||||
use std::sync::atomic::{AtomicU32, Ordering};
|
||||
|
||||
use event::{user_data, EventQueue};
|
||||
use libredox::errno::EAGAIN;
|
||||
use libredox::errno::{EAGAIN, EOPNOTSUPP};
|
||||
use pcid_interface::PciFunctionHandle;
|
||||
|
||||
use redox_scheme::{RequestKind, SignalBehavior, Socket, V2};
|
||||
use redox_scheme::{RequestKind, Response, SignalBehavior, Socket};
|
||||
use virtio_core::utils::VolatileCell;
|
||||
use virtio_core::MSIX_PRIMARY_VECTOR;
|
||||
|
||||
@@ -439,8 +439,8 @@ fn deamon(deamon: redox_daemon::Daemon) -> anyhow::Result<()> {
|
||||
device.transport.run_device();
|
||||
deamon.ready().unwrap();
|
||||
|
||||
let socket: Socket<V2> = Socket::nonblock("display.virtio-gpu")?;
|
||||
let mut scheme = futures::executor::block_on(scheme::Scheme::new(
|
||||
let socket = Socket::nonblock("display.virtio-gpu")?;
|
||||
let mut scheme = futures::executor::block_on(scheme::GpuScheme::new(
|
||||
config,
|
||||
control_queue.clone(),
|
||||
cursor_queue.clone(),
|
||||
@@ -505,11 +505,22 @@ fn deamon(deamon: redox_daemon::Daemon) -> anyhow::Result<()> {
|
||||
RequestKind::Call(call_request) => {
|
||||
socket
|
||||
.write_response(
|
||||
call_request.handle_scheme_mut(&mut scheme),
|
||||
call_request.handle_scheme(&mut scheme),
|
||||
SignalBehavior::Restart,
|
||||
)
|
||||
.expect("virtio-gpud: failed to write display scheme");
|
||||
}
|
||||
RequestKind::SendFd(sendfd_request) => {
|
||||
socket
|
||||
.write_response(
|
||||
Response::for_sendfd(
|
||||
&sendfd_request,
|
||||
Err(syscall::Error::new(EOPNOTSUPP)),
|
||||
),
|
||||
SignalBehavior::Restart,
|
||||
)
|
||||
.expect("virtio-gpud: failed to write scheme");
|
||||
}
|
||||
RequestKind::Cancellation(_cancellation_request) => {}
|
||||
RequestKind::MsyncMsg | RequestKind::MunmapMsg | RequestKind::MmapMsg => {
|
||||
unreachable!()
|
||||
|
||||
@@ -7,7 +7,7 @@ use std::sync::Arc;
|
||||
use common::{dma::Dma, sgl};
|
||||
use inputd::{Damage, VtEvent, VtEventKind};
|
||||
|
||||
use redox_scheme::SchemeMut;
|
||||
use redox_scheme::Scheme;
|
||||
use syscall::{Error as SysError, MapFlags, EINVAL, PAGE_SIZE};
|
||||
|
||||
use virtio_core::spec::{Buffer, ChainBuilder, DescriptorFlags};
|
||||
@@ -227,7 +227,7 @@ struct Handle<'a> {
|
||||
vt: usize,
|
||||
}
|
||||
|
||||
pub struct Scheme<'a> {
|
||||
pub struct GpuScheme<'a> {
|
||||
handles: BTreeMap<usize /* file descriptor */, Handle<'a>>,
|
||||
/// Counter used for file descriptor allocation.
|
||||
next_id: AtomicUsize,
|
||||
@@ -235,13 +235,13 @@ pub struct Scheme<'a> {
|
||||
pub inputd_handle: inputd::DisplayHandle,
|
||||
}
|
||||
|
||||
impl<'a> Scheme<'a> {
|
||||
impl<'a> GpuScheme<'a> {
|
||||
pub async fn new(
|
||||
config: &'a mut GpuConfig,
|
||||
control_queue: Arc<Queue<'a>>,
|
||||
cursor_queue: Arc<Queue<'a>>,
|
||||
transport: Arc<dyn Transport>,
|
||||
) -> Result<Scheme<'a>, Error> {
|
||||
) -> Result<GpuScheme<'a>, Error> {
|
||||
let displays = Self::probe(
|
||||
control_queue.clone(),
|
||||
cursor_queue.clone(),
|
||||
@@ -335,7 +335,7 @@ impl<'a> Scheme<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> SchemeMut for Scheme<'a> {
|
||||
impl<'a> Scheme for GpuScheme<'a> {
|
||||
fn open(&mut self, path: &str, _flags: usize, _uid: u32, _gid: u32) -> syscall::Result<usize> {
|
||||
if path.is_empty() {
|
||||
return Err(SysError::new(EINVAL));
|
||||
|
||||
+11
-5
@@ -18,8 +18,8 @@ use std::sync::atomic::{AtomicUsize, Ordering};
|
||||
|
||||
use inputd::{VtActivate, VtEvent, VtEventKind};
|
||||
|
||||
use libredox::errno::ESTALE;
|
||||
use redox_scheme::{RequestKind, SchemeMut, SignalBehavior, Socket, V2};
|
||||
use libredox::errno::{EOPNOTSUPP, ESTALE};
|
||||
use redox_scheme::{RequestKind, Response, Scheme, SignalBehavior, Socket};
|
||||
|
||||
use orbclient::{Event, EventOption};
|
||||
use syscall::{Error as SysError, EventFlags, EINVAL};
|
||||
@@ -154,7 +154,7 @@ impl InputScheme {
|
||||
}
|
||||
}
|
||||
|
||||
impl SchemeMut for InputScheme {
|
||||
impl Scheme for InputScheme {
|
||||
fn open(&mut self, path: &str, _flags: usize, _uid: u32, _gid: u32) -> syscall::Result<usize> {
|
||||
let mut path_parts = path.split('/');
|
||||
|
||||
@@ -483,7 +483,7 @@ impl SchemeMut for InputScheme {
|
||||
|
||||
fn deamon(deamon: redox_daemon::Daemon) -> anyhow::Result<()> {
|
||||
// Create the ":input" scheme.
|
||||
let socket_file: Socket<V2> = Socket::create("input")?;
|
||||
let socket_file = Socket::create("input")?;
|
||||
let mut scheme = InputScheme::new();
|
||||
|
||||
deamon.ready().unwrap();
|
||||
@@ -498,7 +498,13 @@ fn deamon(deamon: redox_daemon::Daemon) -> anyhow::Result<()> {
|
||||
match request.kind() {
|
||||
RequestKind::Call(call_request) => {
|
||||
socket_file.write_response(
|
||||
call_request.handle_scheme_mut(&mut scheme),
|
||||
call_request.handle_scheme(&mut scheme),
|
||||
SignalBehavior::Restart,
|
||||
)?;
|
||||
}
|
||||
RequestKind::SendFd(sendfd_request) => {
|
||||
socket_file.write_response(
|
||||
Response::for_sendfd(&sendfd_request, Err(syscall::Error::new(EOPNOTSUPP))),
|
||||
SignalBehavior::Restart,
|
||||
)?;
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
use std::collections::BTreeMap;
|
||||
use std::{cmp, io};
|
||||
|
||||
use libredox::errno::EOPNOTSUPP;
|
||||
use libredox::flag::O_NONBLOCK;
|
||||
use libredox::Fd;
|
||||
use redox_scheme::{
|
||||
CallRequest, CallerCtx, OpenResult, RequestKind, Response, SchemeBlockMut, SignalBehavior,
|
||||
Socket,
|
||||
CallRequest, CallerCtx, OpenResult, RequestKind, Response, SchemeBlock, SignalBehavior, Socket,
|
||||
};
|
||||
use syscall::schemev2::NewFdFlags;
|
||||
use syscall::{
|
||||
@@ -85,10 +85,10 @@ impl<T: NetworkAdapter> NetworkScheme<T> {
|
||||
// Handle any blocked requests
|
||||
let mut i = 0;
|
||||
while i < self.blocked.len() {
|
||||
if let Some(resp) = self.blocked[i].handle_scheme_block_mut(self) {
|
||||
if let Some(resp) = self.blocked[i].handle_scheme_block(self) {
|
||||
self.socket
|
||||
.write_response(resp, SignalBehavior::Restart)
|
||||
.expect("vesad: failed to write display scheme");
|
||||
.expect("driver-network: failed to write scheme");
|
||||
self.blocked.remove(i);
|
||||
} else {
|
||||
i += 1;
|
||||
@@ -109,12 +109,18 @@ impl<T: NetworkAdapter> NetworkScheme<T> {
|
||||
|
||||
match request.kind() {
|
||||
RequestKind::Call(call_request) => {
|
||||
if let Some(resp) = call_request.handle_scheme_block_mut(self) {
|
||||
if let Some(resp) = call_request.handle_scheme_block(self) {
|
||||
self.socket.write_response(resp, SignalBehavior::Restart)?;
|
||||
} else {
|
||||
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::Cancellation(cancellation_request) => {
|
||||
if let Some(i) = self
|
||||
.blocked
|
||||
@@ -146,7 +152,7 @@ impl<T: NetworkAdapter> NetworkScheme<T> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: NetworkAdapter> SchemeBlockMut for NetworkScheme<T> {
|
||||
impl<T: NetworkAdapter> SchemeBlock for NetworkScheme<T> {
|
||||
fn xopen(
|
||||
&mut self,
|
||||
path: &str,
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
use std::convert::TryInto;
|
||||
use std::fs::File;
|
||||
use std::io::{Read, Write};
|
||||
use std::io::{Read, Write};
|
||||
use std::os::unix::io::AsRawFd;
|
||||
use std::ptr::NonNull;
|
||||
|
||||
@@ -218,8 +218,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
|
||||
}
|
||||
}
|
||||
|
||||
let event_queue =
|
||||
EventQueue::<Source>::new().expect("rtl8139d: Could not create event queue.");
|
||||
let event_queue = EventQueue::<Source>::new().expect("rtl8139d: Could not create event queue.");
|
||||
event_queue
|
||||
.subscribe(
|
||||
irq_file.as_raw_fd() as usize,
|
||||
|
||||
@@ -10,7 +10,7 @@ use std::usize;
|
||||
|
||||
use event::{EventFlags, RawEventQueue};
|
||||
use pcid_interface::PciFunctionHandle;
|
||||
use redox_scheme::{RequestKind, Response, SignalBehavior, Socket, V2};
|
||||
use redox_scheme::{RequestKind, Response, SignalBehavior, Socket};
|
||||
use syscall::error::{Error, ENODEV};
|
||||
|
||||
use log::{error, info};
|
||||
@@ -53,8 +53,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
|
||||
.as_ptr() as usize;
|
||||
{
|
||||
let scheme_name = format!("disk.{}", name);
|
||||
let socket =
|
||||
Socket::<V2>::nonblock(&scheme_name).expect("ahcid: failed to create disk scheme");
|
||||
let socket = Socket::nonblock(&scheme_name).expect("ahcid: failed to create disk scheme");
|
||||
|
||||
let mut irq_file = irq.irq_handle("ahcid");
|
||||
let irq_fd = irq_file.as_raw_fd() as usize;
|
||||
@@ -109,7 +108,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
|
||||
}
|
||||
};
|
||||
|
||||
if let Some(response) = sqe.handle_scheme_block_mut(&mut scheme) {
|
||||
if let Some(response) = sqe.handle_scheme_block(&mut scheme) {
|
||||
// TODO: handle full CQE?
|
||||
socket
|
||||
.write_response(response, SignalBehavior::Restart)
|
||||
@@ -133,7 +132,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
|
||||
// Handle todos in order to finish previous packets if possible
|
||||
let mut i = 0;
|
||||
while i < todo.len() {
|
||||
if let Some(resp) = todo[i].handle_scheme_block_mut(&mut scheme) {
|
||||
if let Some(resp) = todo[i].handle_scheme_block(&mut scheme) {
|
||||
let _sqe = todo.remove(i);
|
||||
socket
|
||||
.write_response(resp, SignalBehavior::Restart)
|
||||
@@ -151,7 +150,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
|
||||
// Handle todos to start new packets if possible
|
||||
let mut i = 0;
|
||||
while i < todo.len() {
|
||||
if let Some(response) = todo[i].handle_scheme_block_mut(&mut scheme) {
|
||||
if let Some(response) = todo[i].handle_scheme_block(&mut scheme) {
|
||||
let _sqe = todo.remove(i);
|
||||
socket
|
||||
.write_response(response, SignalBehavior::Restart)
|
||||
|
||||
@@ -4,7 +4,7 @@ use std::str;
|
||||
|
||||
use common::io::Io as _;
|
||||
use driver_block::{Disk, DiskWrapper};
|
||||
use redox_scheme::{CallerCtx, OpenResult, SchemeBlockMut};
|
||||
use redox_scheme::{CallerCtx, OpenResult, SchemeBlock};
|
||||
use syscall::schemev2::NewFdFlags;
|
||||
use syscall::{
|
||||
Error, Result, Stat, EACCES, EBADF, EINVAL, EISDIR, ENOENT, ENOLCK, EOVERFLOW, MODE_DIR,
|
||||
@@ -96,7 +96,7 @@ impl DiskScheme {
|
||||
}
|
||||
}
|
||||
|
||||
impl SchemeBlockMut for DiskScheme {
|
||||
impl SchemeBlock for DiskScheme {
|
||||
fn xopen(&mut self, path: &str, flags: usize, ctx: &CallerCtx) -> Result<Option<OpenResult>> {
|
||||
if ctx.uid != 0 {
|
||||
return Err(Error::new(EACCES));
|
||||
|
||||
@@ -9,7 +9,7 @@ use std::{
|
||||
use driver_block::Disk;
|
||||
use event::{EventFlags, RawEventQueue};
|
||||
use fdt::{node::FdtNode, Fdt};
|
||||
use redox_scheme::{RequestKind, Response, SignalBehavior, Socket, V2};
|
||||
use redox_scheme::{RequestKind, Response, SignalBehavior, Socket};
|
||||
use syscall::{
|
||||
data::{Event, Packet},
|
||||
error::{Error, ENODEV},
|
||||
@@ -115,7 +115,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
|
||||
}
|
||||
|
||||
let scheme_name = "disk.mmc";
|
||||
let socket_fd = Socket::<V2>::create(&scheme_name).expect("mmcd: failed to create disk scheme");
|
||||
let socket_fd = Socket::create(&scheme_name).expect("mmcd: failed to create disk scheme");
|
||||
|
||||
let mut event_queue = RawEventQueue::new().expect("mmcd: failed to open event file");
|
||||
event_queue
|
||||
@@ -158,7 +158,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
|
||||
}
|
||||
}
|
||||
};
|
||||
if let Some(resp) = req.handle_scheme_block_mut(&mut scheme) {
|
||||
if let Some(resp) = req.handle_scheme_block(&mut scheme) {
|
||||
socket_fd
|
||||
.write_response(resp, SignalBehavior::Restart)
|
||||
.expect("mmcd: failed to write disk scheme");
|
||||
@@ -173,7 +173,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
|
||||
// Handle todos to start new packets if possible
|
||||
let mut i = 0;
|
||||
while i < todo.len() {
|
||||
if let Some(resp) = todo[i].handle_scheme_block_mut(&mut scheme) {
|
||||
if let Some(resp) = todo[i].handle_scheme_block(&mut scheme) {
|
||||
socket_fd
|
||||
.write_response(resp, SignalBehavior::Restart)
|
||||
.expect("mmcd: failed to write disk scheme");
|
||||
|
||||
@@ -10,7 +10,7 @@ use syscall::{
|
||||
MODE_FILE, O_DIRECTORY, O_STAT,
|
||||
};
|
||||
|
||||
use redox_scheme::{CallerCtx, OpenResult, SchemeBlockMut};
|
||||
use redox_scheme::{CallerCtx, OpenResult, SchemeBlock};
|
||||
|
||||
#[derive(Clone)]
|
||||
enum Handle {
|
||||
@@ -70,7 +70,7 @@ impl DiskScheme {
|
||||
}
|
||||
}
|
||||
|
||||
impl SchemeBlockMut for DiskScheme {
|
||||
impl SchemeBlock for DiskScheme {
|
||||
fn xopen(&mut self, path: &str, flags: usize, ctx: &CallerCtx) -> Result<Option<OpenResult>> {
|
||||
if ctx.uid == 0 {
|
||||
let path_str = path.trim_matches('/');
|
||||
|
||||
@@ -4,7 +4,7 @@ use event::{EventFlags, RawEventQueue};
|
||||
use libredox::flag;
|
||||
use log::{error, info};
|
||||
use pcid_interface::{PciBar, PciFunctionHandle};
|
||||
use redox_scheme::{RequestKind, Response, SignalBehavior, Socket, V2};
|
||||
use redox_scheme::{RequestKind, Response, SignalBehavior, Socket};
|
||||
use std::{
|
||||
fs::File,
|
||||
io::{ErrorKind, Read, Write},
|
||||
@@ -200,8 +200,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
|
||||
}
|
||||
|
||||
let scheme_name = format!("disk.{}", name);
|
||||
let socket_fd =
|
||||
Socket::<V2>::nonblock(&scheme_name).expect("ided: failed to create disk scheme");
|
||||
let socket_fd = Socket::nonblock(&scheme_name).expect("ided: failed to create disk scheme");
|
||||
|
||||
let primary_irq_fd = libredox::call::open(
|
||||
&format!("/scheme/irq/{}", primary_irq),
|
||||
@@ -267,7 +266,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
|
||||
}
|
||||
}
|
||||
};
|
||||
if let Some(resp) = req.handle_scheme_block_mut(&mut scheme) {
|
||||
if let Some(resp) = req.handle_scheme_block(&mut scheme) {
|
||||
socket_fd
|
||||
.write_response(resp, SignalBehavior::Restart)
|
||||
.expect("ided: failed to write disk scheme");
|
||||
@@ -290,7 +289,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
|
||||
// Handle todos in order to finish previous packets if possible
|
||||
let mut i = 0;
|
||||
while i < todo.len() {
|
||||
if let Some(resp) = todo[i].handle_scheme_block_mut(&mut scheme) {
|
||||
if let Some(resp) = todo[i].handle_scheme_block(&mut scheme) {
|
||||
socket_fd
|
||||
.write_response(resp, SignalBehavior::Restart)
|
||||
.expect("ided: failed to write disk scheme");
|
||||
@@ -315,7 +314,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
|
||||
// Handle todos in order to finish previous packets if possible
|
||||
let mut i = 0;
|
||||
while i < todo.len() {
|
||||
if let Some(resp) = todo[i].handle_scheme_block_mut(&mut scheme) {
|
||||
if let Some(resp) = todo[i].handle_scheme_block(&mut scheme) {
|
||||
socket_fd
|
||||
.write_response(resp, SignalBehavior::Restart)
|
||||
.expect("ided: failed to write disk scheme");
|
||||
@@ -332,7 +331,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
|
||||
// Handle todos to start new packets if possible
|
||||
let mut i = 0;
|
||||
while i < todo.len() {
|
||||
if let Some(resp) = todo[i].handle_scheme_block_mut(&mut scheme) {
|
||||
if let Some(resp) = todo[i].handle_scheme_block(&mut scheme) {
|
||||
socket_fd
|
||||
.write_response(resp, SignalBehavior::Restart)
|
||||
.expect("ided: failed to write disk scheme");
|
||||
|
||||
@@ -11,7 +11,7 @@ use syscall::{
|
||||
};
|
||||
|
||||
use crate::ide::Channel;
|
||||
use redox_scheme::{CallerCtx, OpenResult, SchemeBlockMut};
|
||||
use redox_scheme::{CallerCtx, OpenResult, SchemeBlock};
|
||||
|
||||
#[derive(Clone)]
|
||||
enum Handle {
|
||||
@@ -83,7 +83,7 @@ impl DiskScheme {
|
||||
}
|
||||
}
|
||||
|
||||
impl SchemeBlockMut for DiskScheme {
|
||||
impl SchemeBlock for DiskScheme {
|
||||
fn xopen(&mut self, path: &str, flags: usize, ctx: &CallerCtx) -> Result<Option<OpenResult>> {
|
||||
if ctx.uid == 0 {
|
||||
let path_str = path.trim_matches('/');
|
||||
|
||||
@@ -9,7 +9,7 @@ use std::str;
|
||||
|
||||
use libredox::call::MmapArgs;
|
||||
use libredox::flag;
|
||||
use redox_scheme::{CallerCtx, OpenResult, RequestKind, SchemeMut, SignalBehavior, Socket, V2};
|
||||
use redox_scheme::{CallerCtx, OpenResult, RequestKind, Scheme, SignalBehavior, Socket};
|
||||
|
||||
use syscall::data::Stat;
|
||||
use syscall::error::*;
|
||||
@@ -97,7 +97,7 @@ impl DiskScheme {
|
||||
}
|
||||
}
|
||||
|
||||
impl SchemeMut for DiskScheme {
|
||||
impl Scheme for DiskScheme {
|
||||
fn fsize(&mut self, id: usize) -> Result<u64> {
|
||||
Ok(
|
||||
match HandleType::try_from_raw(id).ok_or(Error::new(EBADF))? {
|
||||
@@ -195,7 +195,7 @@ impl SchemeMut for DiskScheme {
|
||||
}
|
||||
fn main() -> anyhow::Result<()> {
|
||||
redox_daemon::Daemon::new(move |daemon| {
|
||||
let socket_fd = Socket::<V2>::create("disk.live").expect("failed to open scheme");
|
||||
let socket_fd = Socket::create("disk.live").expect("failed to open scheme");
|
||||
let mut scheme = DiskScheme::new().unwrap_or_else(|err| {
|
||||
eprintln!("failed to initialize livedisk scheme: {}", err);
|
||||
std::process::exit(1)
|
||||
@@ -216,7 +216,7 @@ fn main() -> anyhow::Result<()> {
|
||||
}
|
||||
None => break,
|
||||
};
|
||||
let resp = req.handle_scheme_mut(&mut scheme);
|
||||
let resp = req.handle_scheme(&mut scheme);
|
||||
socket_fd
|
||||
.write_response(resp, SignalBehavior::Restart)
|
||||
.expect("failed to write packet");
|
||||
|
||||
@@ -12,7 +12,7 @@ use std::{slice, usize};
|
||||
|
||||
use libredox::flag;
|
||||
use pcid_interface::{PciFeature, PciFeatureInfo, PciFunction, PciFunctionHandle};
|
||||
use redox_scheme::{CallRequest, RequestKind, SignalBehavior, Socket, V2};
|
||||
use redox_scheme::{CallRequest, RequestKind, SignalBehavior, Socket};
|
||||
use syscall::{Event, Packet, Result, SchemeBlockMut, PAGE_SIZE};
|
||||
|
||||
use self::nvme::{InterruptMethod, InterruptSources, Nvme};
|
||||
@@ -170,7 +170,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
|
||||
|
||||
let address = unsafe { pcid_handle.map_bar(0).expect("nvmed").ptr };
|
||||
|
||||
let socket = Socket::<V2>::create(&scheme_name).expect("nvmed: failed to create disk scheme");
|
||||
let socket = Socket::create(&scheme_name).expect("nvmed: failed to create disk scheme");
|
||||
|
||||
daemon.ready().expect("nvmed: failed to signal readiness");
|
||||
|
||||
@@ -220,7 +220,7 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! {
|
||||
|
||||
let mut i = 0;
|
||||
while i < todo.len() {
|
||||
if let Some(resp) = todo[i].handle_scheme_block_mut(&mut scheme) {
|
||||
if let Some(resp) = todo[i].handle_scheme_block(&mut scheme) {
|
||||
let _req = todo.remove(i);
|
||||
socket
|
||||
.write_response(resp, SignalBehavior::Restart)
|
||||
|
||||
@@ -6,7 +6,7 @@ use std::io::prelude::*;
|
||||
use std::sync::Arc;
|
||||
use std::{cmp, str};
|
||||
|
||||
use redox_scheme::{CallerCtx, OpenResult, SchemeBlockMut};
|
||||
use redox_scheme::{CallerCtx, OpenResult, SchemeBlock};
|
||||
use syscall::schemev2::NewFdFlags;
|
||||
use syscall::{
|
||||
Error, Result, Stat, EACCES, EBADF, EINVAL, EISDIR, ENOENT, ENOLCK, EOVERFLOW, MODE_DIR,
|
||||
@@ -192,7 +192,7 @@ impl DiskScheme {
|
||||
}
|
||||
}
|
||||
|
||||
impl SchemeBlockMut for DiskScheme {
|
||||
impl SchemeBlock for DiskScheme {
|
||||
fn xopen(
|
||||
&mut self,
|
||||
path_str: &str,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use std::env;
|
||||
|
||||
use redox_scheme::{RequestKind, SignalBehavior, Socket, V2};
|
||||
use redox_scheme::{RequestKind, SignalBehavior, Socket};
|
||||
use xhcid_interface::{ConfigureEndpointsReq, XhciClientHandle};
|
||||
|
||||
pub mod protocol;
|
||||
@@ -83,7 +83,7 @@ fn daemon(daemon: redox_daemon::Daemon, scheme: String, port: usize, protocol: u
|
||||
// TODO: Let all of the USB drivers fork or be managed externally, and xhcid won't have to keep
|
||||
// track of all the drivers.
|
||||
let socket_fd =
|
||||
Socket::<V2>::create(&disk_scheme_name).expect("usbscsid: failed to create disk scheme");
|
||||
Socket::create(&disk_scheme_name).expect("usbscsid: failed to create disk scheme");
|
||||
|
||||
//libredox::call::setrens(0, 0).expect("scsid: failed to enter null namespace");
|
||||
let mut scsi = Scsi::new(&mut *protocol).expect("usbscsid: failed to setup SCSI");
|
||||
@@ -109,7 +109,7 @@ fn daemon(daemon: redox_daemon::Daemon, scheme: String, port: usize, protocol: u
|
||||
}
|
||||
None => break,
|
||||
};
|
||||
let resp = req.handle_scheme_mut(&mut scsi_scheme);
|
||||
let resp = req.handle_scheme(&mut scsi_scheme);
|
||||
socket_fd
|
||||
.write_response(resp, SignalBehavior::Restart)
|
||||
.expect("scsid: failed to write cqe");
|
||||
|
||||
@@ -4,7 +4,7 @@ use std::{cmp, str};
|
||||
use crate::protocol::Protocol;
|
||||
use crate::scsi::Scsi;
|
||||
|
||||
use redox_scheme::{CallerCtx, OpenResult, SchemeMut};
|
||||
use redox_scheme::{CallerCtx, OpenResult, Scheme};
|
||||
use syscall::error::{Error, Result};
|
||||
use syscall::error::{EACCES, EBADF, EINVAL, EIO, ENOENT, ENOSYS};
|
||||
use syscall::flag::{MODE_CHR, MODE_DIR};
|
||||
@@ -39,7 +39,7 @@ impl<'a> ScsiScheme<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
impl SchemeMut for ScsiScheme<'_> {
|
||||
impl Scheme for ScsiScheme<'_> {
|
||||
fn xopen(&mut self, path_str: &str, flags: usize, ctx: &CallerCtx) -> Result<OpenResult> {
|
||||
if ctx.uid != 0 {
|
||||
return Err(Error::new(EACCES));
|
||||
|
||||
@@ -7,7 +7,7 @@ use std::os::fd::{FromRawFd, RawFd};
|
||||
use std::sync::{Arc, Weak};
|
||||
|
||||
use libredox::flag;
|
||||
use redox_scheme::{RequestKind, SignalBehavior, Socket, V2};
|
||||
use redox_scheme::{RequestKind, SignalBehavior, Socket};
|
||||
use static_assertions::const_assert_eq;
|
||||
|
||||
use pcid_interface::*;
|
||||
@@ -147,7 +147,7 @@ fn deamon(deamon: redox_daemon::Daemon) -> anyhow::Result<()> {
|
||||
|
||||
let scheme_name = format!("disk.{}", name);
|
||||
|
||||
let socket_fd = Socket::<V2>::create(&scheme_name).map_err(Error::SyscallError)?;
|
||||
let socket_fd = Socket::create(&scheme_name).map_err(Error::SyscallError)?;
|
||||
|
||||
let mut scheme = scheme::DiskScheme::new(queue, device_space);
|
||||
|
||||
@@ -167,9 +167,7 @@ fn deamon(deamon: redox_daemon::Daemon) -> anyhow::Result<()> {
|
||||
}
|
||||
None => break,
|
||||
};
|
||||
let resp = req
|
||||
.handle_scheme_block_mut(&mut scheme)
|
||||
.expect("TODO: block?");
|
||||
let resp = req.handle_scheme_block(&mut scheme).expect("TODO: block?");
|
||||
socket_fd
|
||||
.write_response(resp, SignalBehavior::Restart)
|
||||
.expect("virtio-blkd: failed to write to disk scheme");
|
||||
|
||||
@@ -13,7 +13,7 @@ use partitionlib::PartitionTable;
|
||||
|
||||
use redox_scheme::CallerCtx;
|
||||
use redox_scheme::OpenResult;
|
||||
use redox_scheme::SchemeBlockMut;
|
||||
use redox_scheme::SchemeBlock;
|
||||
use syscall::error::*;
|
||||
use syscall::flag::*;
|
||||
use syscall::schemev2::NewFdFlags;
|
||||
@@ -201,7 +201,7 @@ impl<'a> DiskScheme<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> SchemeBlockMut for DiskScheme<'a> {
|
||||
impl<'a> SchemeBlock for DiskScheme<'a> {
|
||||
fn xopen(
|
||||
&mut self,
|
||||
path: &str,
|
||||
|
||||
Reference in New Issue
Block a user