vmbfs/
resolver.rs

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4//! Provides a resolver for the vmbfs device.
5
6use crate::VmbfsDevice;
7use crate::single_file_backing::VmbfsSingleFileBacking;
8use std::convert::Infallible;
9use vm_resource::ResolveResource;
10use vm_resource::declare_static_resolver;
11use vm_resource::kind::VmbusDeviceHandleKind;
12use vmbfs_resources::VmbfsImcDeviceHandle;
13use vmbus_channel::resources::ResolveVmbusDeviceHandleParams;
14use vmbus_channel::resources::ResolvedVmbusDevice;
15use vmbus_channel::simple::SimpleDeviceWrapper;
16
17/// Resolver for the vmbfs device.
18pub struct VmbfsResolver;
19
20declare_static_resolver! {
21    VmbfsResolver,
22    (VmbusDeviceHandleKind, VmbfsImcDeviceHandle),
23}
24
25impl ResolveResource<VmbusDeviceHandleKind, VmbfsImcDeviceHandle> for VmbfsResolver {
26    type Output = ResolvedVmbusDevice;
27    type Error = Infallible;
28
29    fn resolve(
30        &self,
31        resource: VmbfsImcDeviceHandle,
32        input: ResolveVmbusDeviceHandleParams<'_>,
33    ) -> Result<Self::Output, Self::Error> {
34        let backing = VmbfsSingleFileBacking::new("imc.hiv", resource.file).unwrap();
35        let device = VmbfsDevice::new(Box::new(backing));
36        Ok(SimpleDeviceWrapper::new(input.driver_source.simple(), device).into())
37    }
38}