virtio-gpud: Migrate to redox-scheme

This commit is contained in:
bjorn3
2024-12-21 20:37:21 +01:00
parent 7565720f34
commit 436a16b069
4 changed files with 35 additions and 19 deletions
Generated
+1
View File
@@ -1736,6 +1736,7 @@ dependencies = [
"paste",
"pcid",
"redox-daemon",
"redox-scheme",
"redox_syscall",
"spin",
"static_assertions",
+1
View File
@@ -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" }
+17 -12
View File
@@ -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!(),
}
}
}
+16 -7
View File
@@ -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)
}