1#![forbid(unsafe_code)]
11
12mod base_chipset;
13mod chipset;
14
15pub use self::base_chipset::BaseChipsetBuilder;
16pub use self::base_chipset::BaseChipsetBuilderError;
17pub use self::base_chipset::BaseChipsetBuilderOutput;
18pub use self::base_chipset::BaseChipsetDeviceInterfaces;
19pub use self::base_chipset::options;
20pub use self::chipset::Chipset;
21pub use self::chipset::ChipsetDevices;
22pub use self::chipset::DynamicDeviceUnit;
23
24pub use self::chipset::ChipsetBuilder;
27pub use self::chipset::backing::arc_mutex::device::ArcMutexChipsetDeviceBuilder;
28
29use chipset_device::ChipsetDevice;
30use inspect::InspectMut;
31use mesh::MeshPayload;
32use std::marker::PhantomData;
33use std::sync::Arc;
34use vm_resource::Resource;
35use vm_resource::kind::ChipsetDeviceHandleKind;
36use vmcore::device_state::ChangeDeviceState;
37use vmcore::save_restore::ProtobufSaveRestore;
38
39pub trait VmmChipsetDevice:
46 ChipsetDevice + InspectMut + ProtobufSaveRestore + ChangeDeviceState
47{
48}
49
50impl<T> VmmChipsetDevice for T where
51 T: ChipsetDevice + InspectMut + ProtobufSaveRestore + ChangeDeviceState
52{
53}
54
55pub enum PowerEvent {
57 PowerOff,
59 Reset,
61 Hibernate,
63}
64
65pub trait PowerEventHandler: Send + Sync {
67 fn on_power_event(&self, evt: PowerEvent);
69}
70
71pub trait DebugEventHandler: Send + Sync {
73 fn on_debug_break(&self, vp: Option<u32>);
75}
76
77#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
79pub struct BusId<T> {
80 name: Arc<str>,
81 _kind: PhantomData<T>,
82}
83
84impl<T> BusId<T> {
85 pub fn new(name: &str) -> Self {
87 BusId {
88 name: name.into(),
89 _kind: PhantomData,
90 }
91 }
92}
93
94#[doc(hidden)]
95pub mod bus_kind {
96 #[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
97 pub enum Pci {}
98}
99
100pub type BusIdPci = BusId<bus_kind::Pci>;
102
103#[derive(MeshPayload, Debug)]
105pub struct ChipsetDeviceHandle {
106 pub name: String,
108 pub resource: Resource<ChipsetDeviceHandleKind>,
110}