devices/pci/
pci_hotplug.rs1#![deny(missing_docs)]
8
9use serde::Deserialize;
10use serde::Serialize;
11
12use crate::IrqLevelEvent;
13use crate::PciAddress;
14use crate::PciDevice;
15use crate::PciDeviceError;
16use crate::PciInterruptPin;
17
18pub type Result<T> = std::result::Result<T, PciDeviceError>;
19
20pub trait HotPluggable: PciDevice {
23 fn set_pci_address(&mut self, pci_addr: PciAddress) -> Result<()>;
25
26 fn configure_io_bars(&mut self) -> Result<()>;
28
29 fn configure_device_bars(&mut self) -> Result<()>;
31}
32
33impl<T: HotPluggable + ?Sized> HotPluggable for Box<T> {
34 fn set_pci_address(&mut self, pci_addr: PciAddress) -> Result<()> {
35 (**self).set_pci_address(pci_addr)
36 }
37
38 fn configure_io_bars(&mut self) -> Result<()> {
39 (**self).configure_io_bars()
40 }
41
42 fn configure_device_bars(&mut self) -> Result<()> {
43 (**self).configure_device_bars()
44 }
45}
46
47#[derive(Serialize, Deserialize)]
49pub struct IntxParameter {
50 pub irq_evt: IrqLevelEvent,
52 pub pin: PciInterruptPin,
54 pub irq_num: u32,
56}