From 3cb7f5b7211d5de5def32dc57496f11a79858450 Mon Sep 17 00:00:00 2001 From: Cautreoxit Date: Thu, 14 Nov 2024 21:05:38 +0800 Subject: [PATCH] Rename the methods in the interface of VirtioTransport --- kernel/comps/virtio/src/device/block/device.rs | 2 +- kernel/comps/virtio/src/device/network/device.rs | 2 +- kernel/comps/virtio/src/lib.rs | 12 +++++++----- kernel/comps/virtio/src/transport/mmio/device.rs | 8 ++++---- kernel/comps/virtio/src/transport/mod.rs | 11 ++++++----- kernel/comps/virtio/src/transport/pci/device.rs | 8 ++++---- 6 files changed, 23 insertions(+), 20 deletions(-) diff --git a/kernel/comps/virtio/src/device/block/device.rs b/kernel/comps/virtio/src/device/block/device.rs index b0116a6cf..885453357 100644 --- a/kernel/comps/virtio/src/device/block/device.rs +++ b/kernel/comps/virtio/src/device/block/device.rs @@ -410,7 +410,7 @@ impl DeviceInner { /// Flushes any cached data from the guest to the persistent storage on the host. /// This will be ignored if the device doesn't support the `VIRTIO_BLK_F_FLUSH` feature. fn flush(&self, bio_request: BioRequest) { - if self.transport.lock().device_features() & BlockFeatures::FLUSH.bits() == 0 { + if self.transport.lock().read_device_features() & BlockFeatures::FLUSH.bits() == 0 { bio_request.bios().for_each(|bio| { bio.complete(BioStatus::Complete); }); diff --git a/kernel/comps/virtio/src/device/network/device.rs b/kernel/comps/virtio/src/device/network/device.rs index 26437c89b..038d05605 100644 --- a/kernel/comps/virtio/src/device/network/device.rs +++ b/kernel/comps/virtio/src/device/network/device.rs @@ -51,7 +51,7 @@ impl NetworkDevice { pub fn init(mut transport: Box) -> Result<(), VirtioDeviceError> { let virtio_net_config = VirtioNetConfig::new(transport.as_mut()); let features = NetworkFeatures::from_bits_truncate(Self::negotiate_features( - transport.device_features(), + transport.read_device_features(), )); debug!("virtio_net_config = {:?}", virtio_net_config); debug!("features = {:?}", features); diff --git a/kernel/comps/virtio/src/lib.rs b/kernel/comps/virtio/src/lib.rs index 8ae577596..dda790428 100644 --- a/kernel/comps/virtio/src/lib.rs +++ b/kernel/comps/virtio/src/lib.rs @@ -40,17 +40,19 @@ fn virtio_component_init() -> Result<(), ComponentInitError> { socket::init(); while let Some(mut transport) = pop_device_transport() { // Reset device - transport.set_device_status(DeviceStatus::empty()).unwrap(); + transport + .write_device_status(DeviceStatus::empty()) + .unwrap(); // Set to acknowledge transport - .set_device_status(DeviceStatus::ACKNOWLEDGE | DeviceStatus::DRIVER) + .write_device_status(DeviceStatus::ACKNOWLEDGE | DeviceStatus::DRIVER) .unwrap(); // negotiate features negotiate_features(&mut transport); // change to features ok status transport - .set_device_status( + .write_device_status( DeviceStatus::ACKNOWLEDGE | DeviceStatus::DRIVER | DeviceStatus::FEATURES_OK, ) .unwrap(); @@ -87,7 +89,7 @@ fn pop_device_transport() -> Option> { } fn negotiate_features(transport: &mut Box) { - let features = transport.device_features(); + let features = transport.read_device_features(); let mask = ((1u64 << 24) - 1) | (((1u64 << 24) - 1) << 50); let device_specified_features = features & mask; let device_support_features = match transport.device_type() { @@ -101,7 +103,7 @@ fn negotiate_features(transport: &mut Box) { let mut support_feature = Feature::from_bits_truncate(features); support_feature.remove(Feature::RING_EVENT_IDX); transport - .set_driver_features(features & (support_feature.bits | device_support_features)) + .write_driver_features(features & (support_feature.bits | device_support_features)) .unwrap(); } diff --git a/kernel/comps/virtio/src/transport/mmio/device.rs b/kernel/comps/virtio/src/transport/mmio/device.rs index 8bd5185f7..854ed6afd 100644 --- a/kernel/comps/virtio/src/transport/mmio/device.rs +++ b/kernel/comps/virtio/src/transport/mmio/device.rs @@ -201,7 +201,7 @@ impl VirtioTransport for VirtioMmioTransport { self.common_device.io_mem().slice(0x100..0x200) } - fn device_features(&self) -> u64 { + fn read_device_features(&self) -> u64 { // select low field_ptr!(&self.layout, VirtioMmioLayout, device_features_select) .write_once(&0u32) @@ -219,7 +219,7 @@ impl VirtioTransport for VirtioMmioTransport { device_feature_high << 32 | device_feature_low as u64 } - fn set_driver_features(&mut self, features: u64) -> Result<(), VirtioTransportError> { + fn write_driver_features(&mut self, features: u64) -> Result<(), VirtioTransportError> { let low = features as u32; let high = (features >> 32) as u32; field_ptr!(&self.layout, VirtioMmioLayout, driver_features_select) @@ -237,7 +237,7 @@ impl VirtioTransport for VirtioMmioTransport { Ok(()) } - fn device_status(&self) -> DeviceStatus { + fn read_device_status(&self) -> DeviceStatus { DeviceStatus::from_bits( field_ptr!(&self.layout, VirtioMmioLayout, status) .read_once() @@ -246,7 +246,7 @@ impl VirtioTransport for VirtioMmioTransport { .unwrap() } - fn set_device_status(&mut self, status: DeviceStatus) -> Result<(), VirtioTransportError> { + fn write_device_status(&mut self, status: DeviceStatus) -> Result<(), VirtioTransportError> { field_ptr!(&self.layout, VirtioMmioLayout, status) .write_once(&(status.bits() as u32)) .unwrap(); diff --git a/kernel/comps/virtio/src/transport/mod.rs b/kernel/comps/virtio/src/transport/mod.rs index 766302223..8aa71234c 100644 --- a/kernel/comps/virtio/src/transport/mod.rs +++ b/kernel/comps/virtio/src/transport/mod.rs @@ -24,23 +24,24 @@ pub mod pci; pub trait VirtioTransport: Sync + Send + Debug { // ====================Device related APIs======================= + /// Get device type. fn device_type(&self) -> VirtioDeviceType; /// Get device features. - fn device_features(&self) -> u64; + fn read_device_features(&self) -> u64; /// Set driver features. - fn set_driver_features(&mut self, features: u64) -> Result<(), VirtioTransportError>; + fn write_driver_features(&mut self, features: u64) -> Result<(), VirtioTransportError>; /// Get device status. - fn device_status(&self) -> DeviceStatus; + fn read_device_status(&self) -> DeviceStatus; /// Set device status. - fn set_device_status(&mut self, status: DeviceStatus) -> Result<(), VirtioTransportError>; + fn write_device_status(&mut self, status: DeviceStatus) -> Result<(), VirtioTransportError>; // Set to driver ok status fn finish_init(&mut self) { - self.set_device_status( + self.write_device_status( DeviceStatus::ACKNOWLEDGE | DeviceStatus::DRIVER | DeviceStatus::FEATURES_OK diff --git a/kernel/comps/virtio/src/transport/pci/device.rs b/kernel/comps/virtio/src/transport/pci/device.rs index f2e05a597..34cb98314 100644 --- a/kernel/comps/virtio/src/transport/pci/device.rs +++ b/kernel/comps/virtio/src/transport/pci/device.rs @@ -132,7 +132,7 @@ impl VirtioTransport for VirtioPciTransport { memory.slice(offset..offset + length) } - fn device_features(&self) -> u64 { + fn read_device_features(&self) -> u64 { // select low field_ptr!(&self.common_cfg, VirtioPciCommonCfg, device_feature_select) .write_once(&0u32) @@ -150,7 +150,7 @@ impl VirtioTransport for VirtioPciTransport { device_feature_high << 32 | device_feature_low as u64 } - fn set_driver_features(&mut self, features: u64) -> Result<(), VirtioTransportError> { + fn write_driver_features(&mut self, features: u64) -> Result<(), VirtioTransportError> { let low = features as u32; let high = (features >> 32) as u32; field_ptr!(&self.common_cfg, VirtioPciCommonCfg, driver_feature_select) @@ -168,14 +168,14 @@ impl VirtioTransport for VirtioPciTransport { Ok(()) } - fn device_status(&self) -> DeviceStatus { + fn read_device_status(&self) -> DeviceStatus { let status = field_ptr!(&self.common_cfg, VirtioPciCommonCfg, device_status) .read_once() .unwrap(); DeviceStatus::from_bits(status).unwrap() } - fn set_device_status(&mut self, status: DeviceStatus) -> Result<(), VirtioTransportError> { + fn write_device_status(&mut self, status: DeviceStatus) -> Result<(), VirtioTransportError> { field_ptr!(&self.common_cfg, VirtioPciCommonCfg, device_status) .write_once(&(status.bits())) .unwrap();