chipset_legacy/i440bx_host_pci_bridge/
resolver.rs1use super::HostPciBridge;
7use async_trait::async_trait;
8use chipset_device_resources::ResolveChipsetDeviceHandleParams;
9use chipset_device_resources::ResolvedChipsetDevice;
10use chipset_resources::i440bx_host_pci_bridge::AdjustGpaRangeHandleKind;
11use chipset_resources::i440bx_host_pci_bridge::I440BxHostPciBridgeDeviceHandle;
12use chipset_resources::i440bx_host_pci_bridge::ResolvedAdjustGpaRange;
13use thiserror::Error;
14use vm_resource::AsyncResolveResource;
15use vm_resource::ResolveError;
16use vm_resource::ResourceResolver;
17use vm_resource::declare_static_async_resolver;
18use vm_resource::kind::ChipsetDeviceHandleKind;
19
20pub struct I440BxHostPciBridgeResolver;
22
23declare_static_async_resolver! {
24 I440BxHostPciBridgeResolver,
25 (ChipsetDeviceHandleKind, I440BxHostPciBridgeDeviceHandle),
26}
27
28#[derive(Debug, Error)]
30#[expect(missing_docs)]
31pub enum ResolveI440BxHostPciBridgeError {
32 #[error("failed to resolve adjust_gpa_range platform resource")]
33 ResolveAdjustGpaRange(#[source] ResolveError),
34}
35
36#[async_trait]
37impl AsyncResolveResource<ChipsetDeviceHandleKind, I440BxHostPciBridgeDeviceHandle>
38 for I440BxHostPciBridgeResolver
39{
40 type Output = ResolvedChipsetDevice;
41 type Error = ResolveI440BxHostPciBridgeError;
42
43 async fn resolve(
44 &self,
45 resolver: &ResourceResolver,
46 resource: I440BxHostPciBridgeDeviceHandle,
47 input: ResolveChipsetDeviceHandleParams<'_>,
48 ) -> Result<Self::Output, Self::Error> {
49 let ResolvedAdjustGpaRange(adjust_gpa_range) = resolver
50 .resolve::<AdjustGpaRangeHandleKind, _>(resource.adjust_gpa_range, ())
51 .await
52 .map_err(ResolveI440BxHostPciBridgeError::ResolveAdjustGpaRange)?;
53
54 Ok(HostPciBridge::new(adjust_gpa_range, input.is_restoring).into())
55 }
56}