pci_resources/
lib.rs
1#![forbid(unsafe_code)]
7
8use chipset_device::mmio::RegisterMmioIntercept;
9use chipset_device_resources::ErasedChipsetDevice;
10use chipset_device_resources::ResolvedChipsetDevice;
11use guestmem::DoorbellRegistration;
12use guestmem::GuestMemory;
13use guestmem::MemoryMapper;
14use pci_core::msi::RegisterMsi;
15use std::sync::Arc;
16use vm_resource::CanResolveTo;
17use vm_resource::kind::PciDeviceHandleKind;
18use vmcore::vm_task::VmTaskDriverSource;
19
20impl CanResolveTo<ResolvedPciDevice> for PciDeviceHandleKind {
21 type Input<'a> = ResolvePciDeviceHandleParams<'a>;
22}
23
24pub struct ResolvedPciDevice(pub ErasedChipsetDevice);
26
27impl<T: Into<ResolvedChipsetDevice>> From<T> for ResolvedPciDevice {
28 fn from(value: T) -> Self {
29 Self(value.into().0)
30 }
31}
32
33pub struct ResolvePciDeviceHandleParams<'a> {
35 pub register_msi: &'a mut dyn RegisterMsi,
37 pub register_mmio: &'a mut (dyn RegisterMmioIntercept + Send),
39 pub driver_source: &'a VmTaskDriverSource,
41 pub guest_memory: &'a GuestMemory,
43 pub doorbell_registration: Option<Arc<dyn DoorbellRegistration>>,
45 pub shared_mem_mapper: Option<&'a dyn MemoryMapper>,
47}