mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
xen / ACPI: notify xen when reduced hardware sleep is available
Use the acpi_os_prepare_extended_sleep() callback to notify xen
to make use of the reduced hardware sleep functionality
The xen hypervisor change underlying this is commit 62d1a69
("ACPI: support v5 (reduced HW) sleep interface") on the master
branch of git://xenbits.xen.org/xen.git.
Signed-off-by: Jan Beulich <[email protected]>
Signed-off-by: Ben Guthro <[email protected]>
Acked-by: Konrad Wilk <[email protected]>
Signed-off-by: Rafael J. Wysocki <[email protected]>
This commit is contained in:
parent
d6b47b1224
commit
be6b25d15f
3 changed files with 38 additions and 18 deletions
|
|
@ -35,28 +35,43 @@
|
|||
#include <asm/xen/hypercall.h>
|
||||
#include <asm/xen/hypervisor.h>
|
||||
|
||||
int xen_acpi_notify_hypervisor_state(u8 sleep_state,
|
||||
u32 pm1a_cnt, u32 pm1b_cnt)
|
||||
static int xen_acpi_notify_hypervisor_state(u8 sleep_state,
|
||||
u32 val_a, u32 val_b,
|
||||
bool extended)
|
||||
{
|
||||
unsigned int bits = extended ? 8 : 16;
|
||||
|
||||
struct xen_platform_op op = {
|
||||
.cmd = XENPF_enter_acpi_sleep,
|
||||
.interface_version = XENPF_INTERFACE_VERSION,
|
||||
.u = {
|
||||
.enter_acpi_sleep = {
|
||||
.pm1a_cnt_val = (u16)pm1a_cnt,
|
||||
.pm1b_cnt_val = (u16)pm1b_cnt,
|
||||
.sleep_state = sleep_state,
|
||||
},
|
||||
.u.enter_acpi_sleep = {
|
||||
.val_a = (u16)val_a,
|
||||
.val_b = (u16)val_b,
|
||||
.sleep_state = sleep_state,
|
||||
.flags = extended ? XENPF_ACPI_SLEEP_EXTENDED : 0,
|
||||
},
|
||||
};
|
||||
|
||||
if ((pm1a_cnt & 0xffff0000) || (pm1b_cnt & 0xffff0000)) {
|
||||
WARN(1, "Using more than 16bits of PM1A/B 0x%x/0x%x!"
|
||||
"Email [email protected] Thank you.\n", \
|
||||
pm1a_cnt, pm1b_cnt);
|
||||
if (WARN((val_a & (~0 << bits)) || (val_b & (~0 << bits)),
|
||||
"Using more than %u bits of sleep control values %#x/%#x!"
|
||||
"Email [email protected] - Thank you.\n", \
|
||||
bits, val_a, val_b))
|
||||
return -1;
|
||||
}
|
||||
|
||||
HYPERVISOR_dom0_op(&op);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int xen_acpi_notify_hypervisor_sleep(u8 sleep_state,
|
||||
u32 pm1a_cnt, u32 pm1b_cnt)
|
||||
{
|
||||
return xen_acpi_notify_hypervisor_state(sleep_state, pm1a_cnt,
|
||||
pm1b_cnt, false);
|
||||
}
|
||||
|
||||
int xen_acpi_notify_hypervisor_extended_sleep(u8 sleep_state,
|
||||
u32 val_a, u32 val_b)
|
||||
{
|
||||
return xen_acpi_notify_hypervisor_state(sleep_state, val_a,
|
||||
val_b, true);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue