pub struct PciRoot {
mmio_bus: Weak<Bus>,
io_bus: Weak<Bus>,
root_bus: Arc<Mutex<PciBus>>,
root_configuration: PciRootConfiguration,
devices: BTreeMap<PciAddress, Arc<Mutex<dyn BusDevice>>>,
pcie_cfg_mmio: Option<u64>,
pci_mmio_state: PciRootMmioState,
}Expand description
Emulates the PCI Root bridge.
Fields§
§mmio_bus: Weak<Bus>Memory (MMIO) bus.
io_bus: Weak<Bus>IO bus (x86 only - for non-x86 platforms, this is just an empty Bus).
root_bus: Arc<Mutex<PciBus>>Root pci bus (bus 0)
root_configuration: PciRootConfigurationBus configuration for the root device.
devices: BTreeMap<PciAddress, Arc<Mutex<dyn BusDevice>>>Devices attached to this bridge.
pcie_cfg_mmio: Option<u64>pcie enhanced configuration access mmio base
pci_mmio_state: PciRootMmioStateImplementations§
Source§impl PciRoot
impl PciRoot
Sourcepub fn new(
vm: &dyn Vm,
mmio_bus: Weak<Bus>,
mmio_base: GuestAddress,
mmio_register_bit_num: usize,
io_bus: Weak<Bus>,
root_bus: Arc<Mutex<PciBus>>,
) -> Result<Self>
pub fn new( vm: &dyn Vm, mmio_bus: Weak<Bus>, mmio_base: GuestAddress, mmio_register_bit_num: usize, io_bus: Weak<Bus>, root_bus: Arc<Mutex<PciBus>>, ) -> Result<Self>
Create an empty PCI root bus.
fn create_for_test( mmio_bus: Weak<Bus>, mmio_base: GuestAddress, mmio_register_bit_num: usize, io_bus: Weak<Bus>, root_bus: Arc<Mutex<PciBus>>, ) -> Self
Sourcepub fn get_root_bus(&self) -> Arc<Mutex<PciBus>>
pub fn get_root_bus(&self) -> Arc<Mutex<PciBus>>
Get the root pci bus
Sourcepub fn acpi_path(&self, address: &PciAddress) -> Option<String>
pub fn acpi_path(&self, address: &PciAddress) -> Option<String>
Get the ACPI path to a PCI device
Sourcepub fn enable_pcie_cfg_mmio(&mut self, pcie_cfg_mmio: u64)
pub fn enable_pcie_cfg_mmio(&mut self, pcie_cfg_mmio: u64)
enable pcie enhanced configuration access and set base mmio
Sourcepub fn add_device(
&mut self,
address: PciAddress,
device: Arc<Mutex<dyn BusDevice>>,
mapper: &mut (impl PciMmioMapper + ?Sized),
) -> Result<(), Error>
pub fn add_device( &mut self, address: PciAddress, device: Arc<Mutex<dyn BusDevice>>, mapper: &mut (impl PciMmioMapper + ?Sized), ) -> Result<(), Error>
Add a device to this root PCI bus.
fn sync_multifunction_bit_to_mmio_mappings( &mut self, address: &PciAddress, on_add: bool, )
pub fn add_bridge( &mut self, bridge_bus: Arc<Mutex<PciBus>>, ) -> Result<(), Error>
pub fn remove_device(&mut self, address: PciAddress)
pub fn config_space_read(&self, address: PciAddress, register: usize) -> u32
pub fn config_space_write( &mut self, address: PciAddress, register: usize, offset: u64, data: &[u8], )
pub fn virtual_config_space_read( &self, address: PciAddress, register: usize, ) -> u32
pub fn virtual_config_space_write( &mut self, address: PciAddress, register: usize, value: u32, )
pub fn snapshot(&mut self) -> Result<AnySnapshot>
pub fn restore(&mut self, data: AnySnapshot) -> Result<()>
fn num_multifunction_device(&self, address: &PciAddress) -> usize
Auto Trait Implementations§
impl Freeze for PciRoot
impl !RefUnwindSafe for PciRoot
impl Send for PciRoot
impl !Sync for PciRoot
impl Unpin for PciRoot
impl !UnwindSafe for PciRoot
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more