1use super::DualPic;
7use chipset_device_resources::BSP_LINT_LINE_SET;
8use chipset_device_resources::IRQ_LINE_SET;
9use chipset_device_resources::ResolveChipsetDeviceHandleParams;
10use chipset_device_resources::ResolvedChipsetDevice;
11use chipset_resources::pic::PicDeviceHandle;
12use vm_resource::ResolveResource;
13use vm_resource::declare_static_resolver;
14use vm_resource::kind::ChipsetDeviceHandleKind;
15
16pub struct PicResolver;
18
19declare_static_resolver! {
20 PicResolver,
21 (ChipsetDeviceHandleKind, PicDeviceHandle),
22}
23
24impl ResolveResource<ChipsetDeviceHandleKind, PicDeviceHandle> for PicResolver {
25 type Output = ResolvedChipsetDevice;
26 type Error = std::convert::Infallible;
27
28 fn resolve(
29 &self,
30 _resource: PicDeviceHandle,
31 input: ResolveChipsetDeviceHandleParams<'_>,
32 ) -> Result<Self::Output, Self::Error> {
33 input.configure.add_line_target(IRQ_LINE_SET, 1..=1, 1);
38 input.configure.add_line_target(IRQ_LINE_SET, 2..=2, 0);
39 input.configure.add_line_target(IRQ_LINE_SET, 3..=15, 3);
40
41 let ready = input.configure.new_line(BSP_LINT_LINE_SET, "ready", 0);
42
43 Ok(DualPic::new(ready, input.register_pio).into())
44 }
45}