virtio-gpud: Migrate to redox-scheme
This commit is contained in:
Generated
+1
@@ -1736,6 +1736,7 @@ dependencies = [
|
||||
"paste",
|
||||
"pcid",
|
||||
"redox-daemon",
|
||||
"redox-scheme",
|
||||
"redox_syscall",
|
||||
"spin",
|
||||
"static_assertions",
|
||||
|
||||
@@ -21,3 +21,4 @@ redox_syscall = "0.5"
|
||||
orbclient = "0.3.27"
|
||||
spin = "0.9.8"
|
||||
libredox = "0.1.3"
|
||||
redox-scheme = { git = "https://gitlab.redox-os.org/redox-os/redox-scheme.git" }
|
||||
|
||||
@@ -23,13 +23,11 @@
|
||||
#![feature(int_roundings)]
|
||||
|
||||
use std::cell::UnsafeCell;
|
||||
use std::fs::File;
|
||||
use std::io::{Read, Write};
|
||||
use std::sync::Arc;
|
||||
|
||||
use pcid_interface::PciFunctionHandle;
|
||||
|
||||
use syscall::{Packet, SchemeMut};
|
||||
use redox_scheme::{RequestKind, SignalBehavior, Socket, V2};
|
||||
use virtio_core::transport::{self, Queue};
|
||||
use virtio_core::utils::VolatileCell;
|
||||
use virtio_core::MSIX_PRIMARY_VECTOR;
|
||||
@@ -438,7 +436,7 @@ fn deamon(deamon: redox_daemon::Daemon) -> anyhow::Result<()> {
|
||||
device.transport.run_device();
|
||||
deamon.ready().unwrap();
|
||||
|
||||
let mut socket_file = File::create(":display.virtio-gpu")?;
|
||||
let socket_file: Socket<V2> = Socket::create("display.virtio-gpu")?;
|
||||
let mut scheme = futures::executor::block_on(scheme::Scheme::new(
|
||||
config,
|
||||
control_queue.clone(),
|
||||
@@ -449,14 +447,21 @@ fn deamon(deamon: redox_daemon::Daemon) -> anyhow::Result<()> {
|
||||
// scheme.inputd_handle.activate(scheme.main_vt)?;
|
||||
|
||||
loop {
|
||||
let mut packet = Packet::default();
|
||||
socket_file
|
||||
.read(&mut packet)
|
||||
.expect("virtio-gpud: failed to read disk scheme");
|
||||
scheme.handle(&mut packet);
|
||||
socket_file
|
||||
.write(&packet)
|
||||
.expect("virtio-gpud: failed to read disk scheme");
|
||||
let Some(request) = socket_file.next_request(SignalBehavior::Restart)? else {
|
||||
// Scheme likely got unmounted
|
||||
return Ok(());
|
||||
};
|
||||
|
||||
match request.kind() {
|
||||
RequestKind::Call(call_request) => {
|
||||
socket_file.write_response(
|
||||
call_request.handle_scheme_mut(&mut scheme),
|
||||
SignalBehavior::Restart,
|
||||
)?;
|
||||
}
|
||||
RequestKind::Cancellation(_cancellation_request) => {}
|
||||
RequestKind::MsyncMsg | RequestKind::MunmapMsg | RequestKind::MmapMsg => unreachable!(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,8 @@ use std::sync::Arc;
|
||||
use common::{dma::Dma, sgl};
|
||||
use inputd::Damage;
|
||||
|
||||
use syscall::{Error as SysError, MapFlags, SchemeMut, EAGAIN, EINVAL, PAGE_SIZE};
|
||||
use redox_scheme::SchemeMut;
|
||||
use syscall::{Error as SysError, MapFlags, EAGAIN, EINVAL, PAGE_SIZE};
|
||||
|
||||
use virtio_core::spec::{Buffer, ChainBuilder, DescriptorFlags};
|
||||
use virtio_core::transport::{Error, Queue, Transport};
|
||||
@@ -384,13 +385,25 @@ impl<'a> SchemeMut for Scheme<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
fn read(&mut self, _id: usize, _buf: &mut [u8]) -> syscall::Result<usize> {
|
||||
fn read(
|
||||
&mut self,
|
||||
_id: usize,
|
||||
_buf: &mut [u8],
|
||||
_offset: u64,
|
||||
_fcntl_flags: u32,
|
||||
) -> syscall::Result<usize> {
|
||||
// TODO: figure out how to get input lol
|
||||
log::warn!("virtio_gpu::read is a stub!");
|
||||
Ok(0)
|
||||
}
|
||||
|
||||
fn write(&mut self, id: usize, buf: &[u8]) -> syscall::Result<usize> {
|
||||
fn write(
|
||||
&mut self,
|
||||
id: usize,
|
||||
buf: &[u8],
|
||||
_offset: u64,
|
||||
_fcntl_flags: u32,
|
||||
) -> syscall::Result<usize> {
|
||||
match self.handles.get(&id).ok_or(SysError::new(EINVAL))? {
|
||||
Handle::Vt { display, .. } => {
|
||||
// The VT is not active and the device is reseted. Ask them to try
|
||||
@@ -460,10 +473,6 @@ impl<'a> SchemeMut for Scheme<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
fn seek(&mut self, _id: usize, _pos: isize, _whence: usize) -> syscall::Result<isize> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn close(&mut self, _id: usize) -> syscall::Result<usize> {
|
||||
Ok(0)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user