1use super::PitDevice;
7use chipset_device_resources::IRQ_LINE_SET;
8use chipset_device_resources::ResolveChipsetDeviceHandleParams;
9use chipset_device_resources::ResolvedChipsetDevice;
10use chipset_resources::pit::PitDeviceHandle;
11use vm_resource::ResolveResource;
12use vm_resource::declare_static_resolver;
13use vm_resource::kind::ChipsetDeviceHandleKind;
14
15pub struct PitResolver;
17
18declare_static_resolver! {
19 PitResolver,
20 (ChipsetDeviceHandleKind, PitDeviceHandle),
21}
22
23impl ResolveResource<ChipsetDeviceHandleKind, PitDeviceHandle> for PitResolver {
24 type Output = ResolvedChipsetDevice;
25 type Error = std::convert::Infallible;
26
27 fn resolve(
28 &self,
29 _resource: PitDeviceHandle,
30 input: ResolveChipsetDeviceHandleParams<'_>,
31 ) -> Result<Self::Output, Self::Error> {
32 let interrupt = input.configure.new_line(IRQ_LINE_SET, "timer0", 2); let vmtime = input.vmtime.access("pit");
34 Ok(PitDevice::new(interrupt, vmtime).into())
35 }
36}