mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2025-03-20 07:58:55 +00:00
device_manager: Enable power button for ACPI on AArch64
Current AArch64 power button is only for device tree using a PL061 GPIO controller device. Since AArch64 now supports ACPI, this commit extend the power button on AArch64 to: - Using GED for ACPI+UEFI boot. - Using PL061 for device tree boot. Signed-off-by: Henry Wang <Henry.Wang@arm.com>
This commit is contained in:
parent
e475b12cf7
commit
c50051a686
@ -3701,13 +3701,43 @@ impl DeviceManager {
|
||||
|
||||
#[cfg(target_arch = "aarch64")]
|
||||
pub fn notify_power_button(&self) -> DeviceManagerResult<()> {
|
||||
self.gpio_device
|
||||
// There are three use cases:
|
||||
// 1. The Cloud Hypervisor is built without feature acpi.
|
||||
// 2. The Cloud Hypervisor is built with feature acpi, but users will
|
||||
// use direct kernel boot with device tree.
|
||||
// 3. The Cloud Hypervisor is built with feature acpi, and users will
|
||||
// use ACPI+UEFI boot.
|
||||
#[cfg(not(feature = "acpi"))]
|
||||
// The `return` here will trigger a GPIO pin 3 event, which will trigger
|
||||
// a power button event for use case 1.
|
||||
return self
|
||||
.gpio_device
|
||||
.as_ref()
|
||||
.unwrap()
|
||||
.lock()
|
||||
.unwrap()
|
||||
.trigger_key(3)
|
||||
.map_err(DeviceManagerError::AArch64PowerButtonNotification)
|
||||
.map_err(DeviceManagerError::AArch64PowerButtonNotification);
|
||||
#[cfg(feature = "acpi")]
|
||||
{
|
||||
// Trigger a GPIO pin 3 event to satisify use case 2.
|
||||
self.gpio_device
|
||||
.as_ref()
|
||||
.unwrap()
|
||||
.lock()
|
||||
.unwrap()
|
||||
.trigger_key(3)
|
||||
.map_err(DeviceManagerError::AArch64PowerButtonNotification)?;
|
||||
// Trigger a GED power button event to satisify use case 3.
|
||||
return self
|
||||
.ged_notification_device
|
||||
.as_ref()
|
||||
.unwrap()
|
||||
.lock()
|
||||
.unwrap()
|
||||
.notify(AcpiNotificationFlags::POWER_BUTTON_CHANGED)
|
||||
.map_err(DeviceManagerError::PowerButtonNotification);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn iommu_attached_devices(&self) -> &Option<(u32, Vec<u32>)> {
|
||||
|
Loading…
x
Reference in New Issue
Block a user