(&mut self, reset_evt: EventFd)
| 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)?; |
no test coverage detected