Remove physmap in virtio.
This commit is contained in:
@@ -16,4 +16,5 @@ crossbeam-queue = "0.3.8"
|
||||
redox-log = "0.1"
|
||||
redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" }
|
||||
|
||||
common = { path = "../common" }
|
||||
pcid = { path = "../pcid" }
|
||||
|
||||
@@ -8,7 +8,7 @@ use pcid_interface::msi::x86_64::DeliveryMode;
|
||||
use pcid_interface::msi::{MsixCapability, MsixTableEntry};
|
||||
use pcid_interface::*;
|
||||
|
||||
use syscall::{Io, PHYSMAP_NO_CACHE, PHYSMAP_WRITE};
|
||||
use syscall::Io;
|
||||
|
||||
use crate::spec::*;
|
||||
use crate::transport::{Error, StandardTransport};
|
||||
@@ -68,11 +68,12 @@ fn enable_msix(pcid_handle: &mut PcidServerHandle) -> Result<File, Error> {
|
||||
};
|
||||
|
||||
let address = unsafe {
|
||||
syscall::physmap(
|
||||
common::physmap(
|
||||
bar_ptr as usize,
|
||||
bar_size as usize,
|
||||
PHYSMAP_WRITE | PHYSMAP_NO_CACHE,
|
||||
)?
|
||||
common::Prot::RW,
|
||||
common::MemoryType::Uncacheable,
|
||||
)? as usize
|
||||
};
|
||||
|
||||
// Ensure that the table and PBA are be within the BAR.
|
||||
@@ -186,7 +187,7 @@ pub fn probe_device<'a>(pcid_handle: &mut PcidServerHandle) -> Result<Device<'a>
|
||||
|
||||
let size = offset + capability.length as usize;
|
||||
|
||||
let addr = syscall::physmap(aligned_addr, size, PHYSMAP_WRITE | PHYSMAP_NO_CACHE)?;
|
||||
let addr = common::physmap(aligned_addr, size, common::Prot::RW, common::MemoryType::Uncacheable)? as usize;
|
||||
|
||||
addr + offset
|
||||
};
|
||||
|
||||
@@ -2,7 +2,7 @@ use crate::spec::*;
|
||||
use crate::utils::align;
|
||||
|
||||
use event::EventQueue;
|
||||
use syscall::{Dma, PHYSMAP_WRITE};
|
||||
use syscall::Dma;
|
||||
|
||||
use core::mem::size_of;
|
||||
use core::sync::atomic::{AtomicU16, Ordering};
|
||||
@@ -230,8 +230,9 @@ impl<'a> Available<'a> {
|
||||
let size = size.next_multiple_of(syscall::PAGE_SIZE); // align to page size
|
||||
|
||||
let addr = unsafe { syscall::physalloc(size) }.map_err(Error::SyscallError)?;
|
||||
let virt =
|
||||
unsafe { syscall::physmap(addr, size, PHYSMAP_WRITE) }.map_err(Error::SyscallError)?;
|
||||
let virt = unsafe {
|
||||
common::physmap(addr, size, common::Prot::RW, common::MemoryType::default())
|
||||
}.map_err(Error::SyscallError)?;
|
||||
|
||||
let ring = unsafe { &mut *(virt as *mut AvailableRing) };
|
||||
|
||||
@@ -275,7 +276,7 @@ impl Drop for Available<'_> {
|
||||
log::warn!("virtio-core: dropping 'available' ring at {:#x}", self.addr);
|
||||
|
||||
unsafe {
|
||||
syscall::physunmap(self.addr).unwrap();
|
||||
syscall::funmap(self.addr, self.size).unwrap();
|
||||
syscall::physfree(self.addr, self.size).unwrap();
|
||||
}
|
||||
}
|
||||
@@ -297,7 +298,7 @@ impl<'a> Used<'a> {
|
||||
|
||||
let addr = unsafe { syscall::physalloc(size) }.map_err(Error::SyscallError)?;
|
||||
let virt =
|
||||
unsafe { syscall::physmap(addr, size, PHYSMAP_WRITE) }.map_err(Error::SyscallError)?;
|
||||
unsafe { common::physmap(addr, size, common::Prot::RW, common::MemoryType::default()) }.map_err(Error::SyscallError)?;
|
||||
|
||||
let ring = unsafe { &mut *(virt as *mut UsedRing) };
|
||||
|
||||
@@ -355,7 +356,7 @@ impl Drop for Used<'_> {
|
||||
log::warn!("virtio-core: dropping 'used' ring at {:#x}", self.addr);
|
||||
|
||||
unsafe {
|
||||
syscall::physunmap(self.addr).unwrap();
|
||||
syscall::funmap(self.addr, self.size).unwrap();
|
||||
syscall::physfree(self.addr, self.size).unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ futures = { version = "0.3.28", features = ["executor"] }
|
||||
anyhow = "1.0.71"
|
||||
paste = "1.0.13"
|
||||
|
||||
common = { path = "../common" }
|
||||
virtio-core = { path = "../virtio-core" }
|
||||
pcid = { path = "../pcid" }
|
||||
inputd = { path = "../inputd" }
|
||||
|
||||
@@ -113,12 +113,13 @@ impl<'a> Display<'a> {
|
||||
.next_multiple_of(syscall::PAGE_SIZE);
|
||||
let address = unsafe { syscall::physalloc(fb_size) }? as u64;
|
||||
let mapped = unsafe {
|
||||
syscall::physmap(
|
||||
common::physmap(
|
||||
address as usize,
|
||||
fb_size,
|
||||
syscall::PhysmapFlags::PHYSMAP_WRITE,
|
||||
common::Prot::RW,
|
||||
common::MemoryType::default(),
|
||||
)
|
||||
}?;
|
||||
}? as usize;
|
||||
|
||||
unsafe {
|
||||
core::ptr::write_bytes(mapped as *mut u8, 255, fb_size);
|
||||
|
||||
Reference in New Issue
Block a user