mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2026-08-05 02:19:16 +00:00
virtio-devices: PCI: Hard-code the settings BAR number
It will always be 0. Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
This commit is contained in:
committed by
Rob Bradford
parent
8b86dd9fb5
commit
fb9532f857
@@ -272,7 +272,7 @@ const MSIX_PBA_BAR_OFFSET: u64 = next_bar_addr(MSIX_TABLE_BAR_OFFSET, MSIX_TABLE
|
||||
const MSIX_PBA_SIZE: u64 = 0x800;
|
||||
// The BAR size must be a power of 2.
|
||||
const CAPABILITY_BAR_SIZE: u64 = (MSIX_PBA_BAR_OFFSET + MSIX_PBA_SIZE).next_power_of_two();
|
||||
const VIRTIO_COMMON_BAR_INDEX: usize = 0;
|
||||
const VIRTIO_COMMON_BAR_INDEX: u8 = 0;
|
||||
const VIRTIO_SHM_BAR_INDEX: usize = 2;
|
||||
|
||||
const NOTIFY_OFF_MULTIPLIER: u32 = 4; // A dword per notification address.
|
||||
@@ -368,9 +368,6 @@ pub struct VirtioPciDevice {
|
||||
// Guest memory
|
||||
memory: GuestMemoryAtomic<GuestMemoryMmap>,
|
||||
|
||||
// Settings PCI BAR
|
||||
settings_bar: u8,
|
||||
|
||||
// Whether to use 64-bit bar location or 32-bit
|
||||
use_64bit_bar: bool,
|
||||
|
||||
@@ -611,7 +608,6 @@ impl VirtioPciDevice {
|
||||
queues,
|
||||
queue_evts,
|
||||
memory,
|
||||
settings_bar: 0,
|
||||
use_64bit_bar,
|
||||
cap_pci_cfg_info,
|
||||
bar_regions: vec![],
|
||||
@@ -677,17 +673,15 @@ impl VirtioPciDevice {
|
||||
}
|
||||
|
||||
pub fn config_bar_addr(&self) -> u64 {
|
||||
self.configuration.get_bar_addr(self.settings_bar as usize)
|
||||
self.configuration
|
||||
.get_bar_addr(VIRTIO_COMMON_BAR_INDEX.into())
|
||||
}
|
||||
|
||||
fn add_pci_capabilities(
|
||||
&mut self,
|
||||
settings_bar: u8,
|
||||
) -> std::result::Result<(), PciDeviceError> {
|
||||
fn add_pci_capabilities(&mut self) -> std::result::Result<(), PciDeviceError> {
|
||||
// Add pointers to the different configuration structures from the PCI capabilities.
|
||||
let common_cap = VirtioPciCap::new(
|
||||
PciCapabilityType::Common,
|
||||
settings_bar,
|
||||
VIRTIO_COMMON_BAR_INDEX,
|
||||
COMMON_CONFIG_BAR_OFFSET as u32,
|
||||
COMMON_CONFIG_SIZE as u32,
|
||||
);
|
||||
@@ -697,7 +691,7 @@ impl VirtioPciDevice {
|
||||
|
||||
let isr_cap = VirtioPciCap::new(
|
||||
PciCapabilityType::Isr,
|
||||
settings_bar,
|
||||
VIRTIO_COMMON_BAR_INDEX,
|
||||
ISR_CONFIG_BAR_OFFSET as u32,
|
||||
ISR_CONFIG_SIZE as u32,
|
||||
);
|
||||
@@ -708,7 +702,7 @@ impl VirtioPciDevice {
|
||||
// TODO(dgreid) - set based on device's configuration size?
|
||||
let device_cap = VirtioPciCap::new(
|
||||
PciCapabilityType::Device,
|
||||
settings_bar,
|
||||
VIRTIO_COMMON_BAR_INDEX,
|
||||
DEVICE_CONFIG_BAR_OFFSET as u32,
|
||||
DEVICE_CONFIG_SIZE as u32,
|
||||
);
|
||||
@@ -718,7 +712,7 @@ impl VirtioPciDevice {
|
||||
|
||||
let notify_cap = VirtioPciNotifyCap::new(
|
||||
PciCapabilityType::Notify,
|
||||
settings_bar,
|
||||
VIRTIO_COMMON_BAR_INDEX,
|
||||
NOTIFICATION_BAR_OFFSET as u32,
|
||||
NOTIFICATION_SIZE as u32,
|
||||
Le32::from(NOTIFY_OFF_MULTIPLIER),
|
||||
@@ -736,17 +730,16 @@ impl VirtioPciDevice {
|
||||
self.cap_pci_cfg_info.cap = configuration_cap;
|
||||
|
||||
let msix_cap = MsixCap::new(
|
||||
settings_bar,
|
||||
VIRTIO_COMMON_BAR_INDEX,
|
||||
self.msix_num,
|
||||
MSIX_TABLE_BAR_OFFSET as u32,
|
||||
settings_bar,
|
||||
VIRTIO_COMMON_BAR_INDEX,
|
||||
MSIX_PBA_BAR_OFFSET as u32,
|
||||
);
|
||||
self.configuration
|
||||
.add_capability(&msix_cap)
|
||||
.map_err(PciDeviceError::CapabilitiesSetup)?;
|
||||
|
||||
self.settings_bar = settings_bar;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -1009,7 +1002,7 @@ impl PciDevice for VirtioPciDevice {
|
||||
if let Resource::PciBar {
|
||||
index, base, type_, ..
|
||||
} = resource
|
||||
&& index == VIRTIO_COMMON_BAR_INDEX
|
||||
&& index == usize::from(VIRTIO_COMMON_BAR_INDEX)
|
||||
{
|
||||
settings_bar_addr = Some(GuestAddress(base));
|
||||
use_64bit_bar = match type_ {
|
||||
@@ -1053,7 +1046,7 @@ impl PciDevice for VirtioPciDevice {
|
||||
};
|
||||
|
||||
let bar = PciBarConfiguration::default()
|
||||
.set_index(VIRTIO_COMMON_BAR_INDEX)
|
||||
.set_index(VIRTIO_COMMON_BAR_INDEX.into())
|
||||
.set_address(virtio_pci_bar_addr.raw_value())
|
||||
.set_size(CAPABILITY_BAR_SIZE)
|
||||
.set_region_type(region_type);
|
||||
@@ -1068,7 +1061,7 @@ impl PciDevice for VirtioPciDevice {
|
||||
})?;
|
||||
|
||||
// Once the BARs are allocated, the capabilities can be added to the PCI configuration.
|
||||
self.add_pci_capabilities(VIRTIO_COMMON_BAR_INDEX as u8)?;
|
||||
self.add_pci_capabilities()?;
|
||||
}
|
||||
|
||||
bars.push(bar);
|
||||
|
||||
Reference in New Issue
Block a user