diff --git a/virtio-blkd/Cargo.toml b/virtio-blkd/Cargo.toml index 461a0d679a..2068f8923a 100644 --- a/virtio-blkd/Cargo.toml +++ b/virtio-blkd/Cargo.toml @@ -17,5 +17,6 @@ redox_syscall = "0.3" partitionlib = { git = "https://gitlab.redox-os.org/redox-os/partitionlib.git" } block-io-wrapper = { path = "../block-io-wrapper" } +common = { path = "../common" } pcid = { path = "../pcid" } virtio-core = { path = "../virtio-core" } diff --git a/virtio-blkd/src/scheme.rs b/virtio-blkd/src/scheme.rs index 8a3f6154cb..d94f9a76b4 100644 --- a/virtio-blkd/src/scheme.rs +++ b/virtio-blkd/src/scheme.rs @@ -7,6 +7,7 @@ use std::io::Seek; use std::fmt::Write; use std::sync::Arc; +use common::dma::Dma; use partitionlib::LogicalBlockSize; use partitionlib::PartitionTable; use syscall::*; @@ -27,15 +28,15 @@ trait BlkExtension { impl BlkExtension for Queue<'_> { async fn read(&self, block: u64, target: &mut [u8]) -> usize { - let req = syscall::Dma::new(BlockVirtRequest { + let req = Dma::new(BlockVirtRequest { ty: BlockRequestTy::In, reserved: 0, sector: block, }) .unwrap(); - let result = unsafe { syscall::Dma::<[u8]>::zeroed_unsized(target.len()) }.unwrap(); - let status = syscall::Dma::new(u8::MAX).unwrap(); + let result = unsafe { Dma::<[u8]>::zeroed_unsized(target.len()) }.unwrap(); + let status = Dma::new(u8::MAX).unwrap(); let chain = ChainBuilder::new() .chain(Buffer::new(&req)) @@ -52,17 +53,17 @@ impl BlkExtension for Queue<'_> { } async fn write(&self, block: u64, target: &[u8]) -> usize { - let req = syscall::Dma::new(BlockVirtRequest { + let req = Dma::new(BlockVirtRequest { ty: BlockRequestTy::Out, reserved: 0, sector: block, }) .unwrap(); - let mut result = unsafe { syscall::Dma::<[u8]>::zeroed_unsized(target.len()) }.unwrap(); + let mut result = unsafe { Dma::<[u8]>::zeroed_unsized(target.len()) }.unwrap(); result.copy_from_slice(target.as_ref()); - let status = syscall::Dma::new(u8::MAX).unwrap(); + let status = Dma::new(u8::MAX).unwrap(); let chain = ChainBuilder::new() .chain(Buffer::new(&req)) @@ -122,15 +123,15 @@ impl<'a> DiskScheme<'a> { impl<'a, 'b> Read for VirtioShim<'a, 'b> { fn read(&mut self, buf: &mut [u8]) -> IoResult { let read_block = |block: u64, block_bytes: &mut [u8]| -> Result<(), ()> { - let req = syscall::Dma::new(BlockVirtRequest { + let req = Dma::new(BlockVirtRequest { ty: BlockRequestTy::In, reserved: 0, sector: block, }) .unwrap(); - let result = syscall::Dma::new([0u8; 512]).unwrap(); - let status = syscall::Dma::new(u8::MAX).unwrap(); + let result = Dma::new([0u8; 512]).unwrap(); + let status = Dma::new(u8::MAX).unwrap(); let chain = ChainBuilder::new() .chain(Buffer::new(&req)) diff --git a/virtio-core/src/spec.rs b/virtio-core/src/spec.rs index eb8f12f829..f4a3d79f8c 100644 --- a/virtio-core/src/spec.rs +++ b/virtio-core/src/spec.rs @@ -246,7 +246,7 @@ pub struct Buffer { } impl Buffer { - pub fn new(val: &syscall::Dma) -> Self { + pub fn new(val: &common::dma::Dma) -> Self { Self { buffer: val.physical(), size: core::mem::size_of::(), @@ -254,7 +254,7 @@ impl Buffer { } } - pub fn new_unsized(val: &syscall::Dma<[T]>) -> Self { + pub fn new_unsized(val: &common::dma::Dma<[T]>) -> Self { Self { buffer: val.physical(), size: core::mem::size_of::() * val.len(), @@ -262,7 +262,7 @@ impl Buffer { } } - pub fn new_sized(val: &syscall::Dma<[T]>, size: usize) -> Self { + pub fn new_sized(val: &common::dma::Dma<[T]>, size: usize) -> Self { Self { buffer: val.physical(), size, diff --git a/virtio-core/src/transport.rs b/virtio-core/src/transport.rs index 2f049a1dab..6048d14f34 100644 --- a/virtio-core/src/transport.rs +++ b/virtio-core/src/transport.rs @@ -1,8 +1,8 @@ use crate::spec::*; use crate::utils::align; +use common::dma::Dma; use event::EventQueue; -use syscall::Dma; use core::mem::size_of; use core::sync::atomic::{AtomicU16, Ordering}; diff --git a/virtio-gpud/src/scheme.rs b/virtio-gpud/src/scheme.rs index ed202693e3..4439f647be 100644 --- a/virtio-gpud/src/scheme.rs +++ b/virtio-gpud/src/scheme.rs @@ -3,8 +3,9 @@ use std::collections::BTreeMap; use std::sync::atomic::{AtomicU32, Ordering}; use std::sync::Arc; +use common::dma::Dma; use inputd::Damage; -use syscall::{Dma, Error as SysError, SchemeMut, EINVAL}; +use syscall::{Error as SysError, SchemeMut, EINVAL}; use virtio_core::spec::{Buffer, ChainBuilder, DescriptorFlags}; use virtio_core::transport::{Error, Queue, StandardTransport};