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;
22
23pub use self::chipset::ChipsetBuilder;
26pub use self::chipset::backing::arc_mutex::device::ArcMutexChipsetDeviceBuilder;
27
28use chipset_device::ChipsetDevice;
29use inspect::InspectMut;
30use mesh::MeshPayload;
31use std::marker::PhantomData;
32use std::sync::Arc;
33use vm_resource::Resource;
34use vm_resource::kind::ChipsetDeviceHandleKind;
35use vmcore::device_state::ChangeDeviceState;
36use vmcore::save_restore::ProtobufSaveRestore;
37
38pub trait VmmChipsetDevice:
45 ChipsetDevice + InspectMut + ProtobufSaveRestore + ChangeDeviceState
46{
47}
48
49impl<T> VmmChipsetDevice for T where
50 T: ChipsetDevice + InspectMut + ProtobufSaveRestore + ChangeDeviceState
51{
52}
53
54pub enum PowerEvent {
56 PowerOff,
58 Reset,
60 Hibernate,
62}
63
64pub trait PowerEventHandler: Send + Sync {
66 fn on_power_event(&self, evt: PowerEvent);
68}
69
70pub trait DebugEventHandler: Send + Sync {
72 fn on_debug_break(&self, vp: Option<u32>);
74}
75
76#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
78pub struct BusId<T> {
79 name: Arc<str>,
80 _kind: PhantomData<T>,
81}
82
83impl<T> BusId<T> {
84 pub fn new(name: &str) -> Self {
86 BusId {
87 name: name.into(),
88 _kind: PhantomData,
89 }
90 }
91}
92
93#[doc(hidden)]
94pub mod bus_kind {
95 #[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
96 pub enum Pci {}
97}
98
99pub type BusIdPci = BusId<bus_kind::Pci>;
101
102#[derive(MeshPayload, Debug)]
104pub struct ChipsetDeviceHandle {
105 pub name: String,
107 pub resource: Resource<ChipsetDeviceHandleKind>,
109}