Trait devices::bus::HotPlugBus

source ·
pub trait HotPlugBus: Send {
    // Required methods
    fn hot_plug(&mut self, addr: PciAddress) -> Result<Option<Event>>;
    fn hot_unplug(&mut self, addr: PciAddress) -> Result<Option<Event>>;
    fn get_ready_notification(&mut self) -> Result<Event>;
    fn is_match(&self, host_addr: PciAddress) -> Option<u8>;
    fn get_address(&self) -> Option<PciAddress>;
    fn get_secondary_bus_number(&self) -> Option<u8>;
    fn add_hotplug_device(
        &mut self,
        hotplug_key: HotPlugKey,
        guest_addr: PciAddress
    );
    fn get_hotplug_device(&self, hotplug_key: HotPlugKey) -> Option<PciAddress>;
    fn is_empty(&self) -> bool;
    fn get_hotplug_key(&self) -> Option<HotPlugKey>;
}
Expand description

Trait for devices that notify hotplug event into guest

Required Methods§

source

fn hot_plug(&mut self, addr: PciAddress) -> Result<Option<Event>>

Request hot plug event. Returns error if the request is not sent. Upon success, optionally returns an event, which is triggerred once when the guest OS completes the request (by sending PCI_EXP_SLTCTL_CCIE). Returns None if no such mechanism is provided.

  • ‘addr’ - the guest pci address for hotplug in device
source

fn hot_unplug(&mut self, addr: PciAddress) -> Result<Option<Event>>

Request hot unplug event. Returns error if the request is not sent. Upon success, optionally returns an event, which is triggerred once when the guest OS completes the request (by sending PCI_EXP_SLTCTL_CCIE). Returns None if no such mechanism is provided.

  • ‘addr’ - the guest pci address for hotplug out device
source

fn get_ready_notification(&mut self) -> Result<Event>

Get a notification event when the HotPlugBus is ready for hot plug commands. If the port is already ready, then the notification event is triggerred immediately.

source

fn is_match(&self, host_addr: PciAddress) -> Option<u8>

Check whether the hotplug bus is available to add the new device

  • ‘None’: hotplug bus isn’t match with host pci device
  • ‘Some(bus_num)’: hotplug bus is match and put the device at bus_num
source

fn get_address(&self) -> Option<PciAddress>

Gets the upstream PCI Address of the hotplug bus

source

fn get_secondary_bus_number(&self) -> Option<u8>

Gets the secondary bus number of this bus

source

fn add_hotplug_device( &mut self, hotplug_key: HotPlugKey, guest_addr: PciAddress )

Add hotplug device into this bus

  • ‘hotplug_key’ - the key to identify hotplug device from host view
  • ‘guest_addr’ - the guest pci address for hotplug device
source

fn get_hotplug_device(&self, hotplug_key: HotPlugKey) -> Option<PciAddress>

get guest pci address from the specified hotplug_key

source

fn is_empty(&self) -> bool

Check whether this hotplug bus is empty

source

fn get_hotplug_key(&self) -> Option<HotPlugKey>

Get hotplug key of this hotplug bus

Implementors§