Merge branch 'acpi-sleep'

* acpi-sleep:
  x86 / tboot / ACPI: Fail extended mode reduced hardware sleep
  xen / ACPI: notify xen when reduced hardware sleep is available
  ACPI / sleep: Introduce acpi_os_prepare_extended_sleep() for extended sleep path
This commit is contained in:
Rafael J. Wysocki 2013-08-27 01:28:38 +02:00
commit 4b319f290d
7 changed files with 88 additions and 18 deletions

View file

@ -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);
}