Skip to content

Commit 4bcf14f

Browse files
author
lhw
committed
custom virtio-drivers
pass the compile
1 parent cba9998 commit 4bcf14f

16 files changed

Lines changed: 168 additions & 110 deletions

File tree

Cargo.lock

Lines changed: 102 additions & 53 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/axlog/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ default = []
2121

2222
[dependencies]
2323
cfg-if = "1.0"
24-
log = "< 0.4.22"
24+
log = "0.4"
2525
spinlock = { path = "../spinlock" }
2626
crate_interface = { version = "0.1.1" }
2727
chrono = { version = "0.4", optional = true }

crates/driver_pci/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ repository = "https://github.com/rcore-os/arceos/tree/main/crates/driver_pci"
1010
documentation = "https://rcore-os.github.io/arceos/driver_pci/index.html"
1111

1212
[dependencies]
13-
virtio-drivers = { git = "https://github.com/syswonder/virtio-drivers.git", rev = "62dbe5a"}
13+
virtio-drivers = { git = "https://github.com/syswonder/virtio-drivers.git", rev = "31f6555"}

crates/driver_pci/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@
1717
1818
#![no_std]
1919

20-
pub use virtio_drivers::transport::pci::bus::{BarInfo, Cam, HeaderType, MemoryBarType, PciError};
20+
pub use virtio_drivers::transport::pci::bus::{BarInfo, Cam, HeaderType, MemoryBarType, PciError, MmioCam};
2121
pub use virtio_drivers::transport::pci::bus::{
2222
CapabilityInfo, Command, DeviceFunction, DeviceFunctionInfo, PciRoot, Status,
2323
};
24-
24+
pub use virtio_drivers::transport::pci::bus::ConfigurationAccess;
2525
/// Used to allocate MMIO regions for PCI BARs.
2626
pub struct PciRangeAllocator {
2727
_start: u64,

crates/driver_virtio/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,4 @@ driver_net = { path = "../driver_net", optional = true }
2828
driver_display = { path = "../driver_display", optional = true }
2929
driver_9p = { path = "../driver_9p", optional = true }
3030
driver_console = { path = "../driver_console", optional = true }
31-
virtio-drivers = { git = "https://github.com/syswonder/virtio-drivers.git", rev = "62dbe5a" }
31+
virtio-drivers = { git = "https://github.com/syswonder/virtio-drivers.git", rev = "31f6555" }

crates/driver_virtio/src/blk.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,13 @@ impl<H: Hal, T: Transport> BlockDriverOps for VirtIoBlkDev<H, T> {
5353

5454
fn read_block(&mut self, block_id: u64, buf: &mut [u8]) -> DevResult {
5555
self.inner
56-
.read_block(block_id as _, buf)
56+
.read_blocks(block_id as _, buf)
5757
.map_err(as_dev_err)
5858
}
5959

6060
fn write_block(&mut self, block_id: u64, buf: &[u8]) -> DevResult {
6161
self.inner
62-
.write_block(block_id as _, buf)
62+
.write_blocks(block_id as _, buf)
6363
.map_err(as_dev_err)
6464
}
6565

crates/driver_virtio/src/console.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use virtio_drivers::{device::console::VirtIOConsole as InnerDev, transport::Tran
1414

1515
/// VirtIO console device
1616
pub struct VirtIoConsoleDev<H: Hal, T: Transport> {
17-
inner: InnerDev<'static, H, T>,
17+
inner: InnerDev<H, T>,
1818
}
1919

2020
unsafe impl<H: Hal, T: Transport> Send for VirtIoConsoleDev<H, T> {}

crates/driver_virtio/src/gpu.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use virtio_drivers::{device::gpu::VirtIOGpu as InnerDev, transport::Transport, H
1616

1717
/// The VirtIO GPU device driver.
1818
pub struct VirtIoGpuDev<H: Hal, T: Transport> {
19-
inner: InnerDev<'static, H, T>,
19+
inner: InnerDev<H, T>,
2020
info: DisplayInfo,
2121
}
2222

crates/driver_virtio/src/lib.rs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ pub use self::net::VirtIoNetDev;
4545
#[cfg(feature = "v9p")]
4646
pub use self::v9p::VirtIo9pDev;
4747

48+
use virtio_drivers::transport::pci::bus::ConfigurationAccess;
4849
pub use virtio_drivers::transport::pci::bus as pci;
4950
pub use virtio_drivers::transport::{mmio::MmioTransport, pci::PciTransport, Transport};
5051
pub use virtio_drivers::{BufferDirection, Hal as VirtIoHal, PhysAddr};
@@ -59,13 +60,13 @@ use virtio_drivers::transport::DeviceType as VirtIoDevType;
5960
/// for later operations. Otherwise, returns [`None`].
6061
pub fn probe_mmio_device(
6162
reg_base: *mut u8,
62-
_reg_size: usize,
63-
) -> Option<(DeviceType, MmioTransport)> {
63+
reg_size: usize,
64+
) -> Option<(DeviceType, MmioTransport<'static>)> {
6465
use core::ptr::NonNull;
6566
use virtio_drivers::transport::mmio::VirtIOHeader;
6667

6768
let header = NonNull::new(reg_base as *mut VirtIOHeader).unwrap();
68-
let transport = unsafe { MmioTransport::new(header) }.ok()?;
69+
let transport = unsafe { MmioTransport::new(header,reg_size) }.ok()?;
6970
let dev_type = as_dev_type(transport.device_type())?;
7071
Some((dev_type, transport))
7172
}
@@ -74,18 +75,23 @@ pub fn probe_mmio_device(
7475
///
7576
/// If the device is recognized, returns the device type and a transport object
7677
/// for later operations. Otherwise, returns [`None`].
77-
pub fn probe_pci_device<H: VirtIoHal>(
78-
root: &mut PciRoot,
78+
pub fn probe_pci_device<H, C>(
79+
root: &mut PciRoot<C>,
7980
bdf: DeviceFunction,
8081
dev_info: &DeviceFunctionInfo,
81-
) -> Option<(DeviceType, PciTransport)> {
82+
) -> Option<(DeviceType, PciTransport)>
83+
where
84+
H: VirtIoHal,
85+
C: ConfigurationAccess,
86+
{
8287
use virtio_drivers::transport::pci::virtio_device_type;
8388

8489
let dev_type = virtio_device_type(dev_info).and_then(as_dev_type)?;
85-
let transport = PciTransport::new::<H>(root, bdf).ok()?;
90+
let transport = PciTransport::new::<H, C>(root, bdf).ok()?;
8691
Some((dev_type, transport))
8792
}
8893

94+
8995
const fn as_dev_type(t: VirtIoDevType) -> Option<DeviceType> {
9096
use VirtIoDevType::*;
9197
match t {

crates/driver_virtio/src/net.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,12 @@ impl<H: Hal, T: Transport, const QS: usize> NetDriverOps for VirtIoNetDev<H, T,
9999

100100
#[inline]
101101
fn can_transmit(&self) -> bool {
102-
!self.free_tx_bufs.is_empty() && self.inner.can_transmit()
102+
!self.free_tx_bufs.is_empty() && self.inner.can_send()
103103
}
104104

105105
#[inline]
106106
fn can_receive(&self) -> bool {
107-
self.inner.can_receive()
107+
self.inner.poll_receive().is_some()
108108
}
109109

110110
#[inline]

0 commit comments

Comments
 (0)