MCPcopy Create free account
hub / github.com/cloud-hypervisor/cloud-hypervisor / add_legacy_devices

Method add_legacy_devices

vmm/src/device_manager.rs:2017–2087  ·  view source on GitHub ↗
(&mut self, reset_evt: EventFd)

Source from the content-addressed store, hash-verified

2015
2016 #[cfg(target_arch = "x86_64")]
2017 fn add_legacy_devices(&mut self, reset_evt: EventFd) -> DeviceManagerResult<()> {
2018 let vcpus_kill_signalled = self
2019 .cpu_manager
2020 .lock()
2021 .unwrap()
2022 .vcpus_kill_signalled()
2023 .clone();
2024 // Add a shutdown device (i8042)
2025 let i8042 = Arc::new(Mutex::new(devices::legacy::I8042Device::new(
2026 reset_evt.try_clone().unwrap(),
2027 vcpus_kill_signalled.clone(),
2028 )));
2029
2030 self.bus_devices
2031 .push(Arc::clone(&i8042) as Arc<dyn BusDeviceSync>);
2032
2033 self.address_manager
2034 .io_bus
2035 .insert(i8042, 0x61, 0x4)
2036 .map_err(DeviceManagerError::BusError)?;
2037 {
2038 // Add a CMOS emulated device
2039 let mem_size = self
2040 .memory_manager
2041 .lock()
2042 .unwrap()
2043 .guest_memory()
2044 .memory()
2045 .last_addr()
2046 .0
2047 + 1;
2048 let mem_below_4g = std::cmp::min(arch::layout::MEM_32BIT_RESERVED_START.0, mem_size);
2049 let mem_above_4g = mem_size.saturating_sub(arch::layout::RAM_64BIT_START.0);
2050
2051 let cmos = Arc::new(Mutex::new(devices::legacy::Cmos::new(
2052 mem_below_4g,
2053 mem_above_4g,
2054 reset_evt,
2055 Some(vcpus_kill_signalled),
2056 )));
2057
2058 self.bus_devices
2059 .push(Arc::clone(&cmos) as Arc<dyn BusDeviceSync>);
2060
2061 self.address_manager
2062 .io_bus
2063 .insert(cmos, 0x70, 0x2)
2064 .map_err(DeviceManagerError::BusError)?;
2065
2066 let fwdebug = Arc::new(Mutex::new(devices::legacy::FwDebugDevice::new()));
2067
2068 self.bus_devices
2069 .push(Arc::clone(&fwdebug) as Arc<dyn BusDeviceSync>);
2070
2071 self.address_manager
2072 .io_bus
2073 .insert(fwdebug, 0x402, 0x1)
2074 .map_err(DeviceManagerError::BusError)?;

Callers 1

create_devicesMethod · 0.80

Calls 11

newFunction · 0.85
state_from_idFunction · 0.85
vcpus_kill_signalledMethod · 0.80
memoryMethod · 0.80
create_groupMethod · 0.80
cloneMethod · 0.45
try_cloneMethod · 0.45
pushMethod · 0.45
insertMethod · 0.45
guest_memoryMethod · 0.45
allocate_irqMethod · 0.45

Tested by

no test coverage detected