mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-22 08:53:29 +00:00
Rename the methods in the interface of VirtioTransport
This commit is contained in:
committed by
Tate, Hongliang Tian
parent
300403e3eb
commit
3cb7f5b721
@ -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);
|
||||
});
|
||||
|
@ -51,7 +51,7 @@ impl NetworkDevice {
|
||||
pub fn init(mut transport: Box<dyn VirtioTransport>) -> 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);
|
||||
|
@ -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<Box<dyn VirtioTransport>> {
|
||||
}
|
||||
|
||||
fn negotiate_features(transport: &mut Box<dyn VirtioTransport>) {
|
||||
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<dyn VirtioTransport>) {
|
||||
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();
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
|
Reference in New Issue
Block a user