1211063dcSKonrad Rzeszutek Wilk /******************************************************************************
2211063dcSKonrad Rzeszutek Wilk * acpi.h
3211063dcSKonrad Rzeszutek Wilk * acpi file for domain 0 kernel
4211063dcSKonrad Rzeszutek Wilk *
5211063dcSKonrad Rzeszutek Wilk * Copyright (c) 2011 Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
6211063dcSKonrad Rzeszutek Wilk * Copyright (c) 2011 Yu Ke <ke.yu@intel.com>
7211063dcSKonrad Rzeszutek Wilk *
8211063dcSKonrad Rzeszutek Wilk * This program is free software; you can redistribute it and/or
9211063dcSKonrad Rzeszutek Wilk * modify it under the terms of the GNU General Public License version 2
10211063dcSKonrad Rzeszutek Wilk * as published by the Free Software Foundation; or, when distributed
11211063dcSKonrad Rzeszutek Wilk * separately from the Linux kernel or incorporated into other
12211063dcSKonrad Rzeszutek Wilk * software packages, subject to the following license:
13211063dcSKonrad Rzeszutek Wilk *
14211063dcSKonrad Rzeszutek Wilk * Permission is hereby granted, free of charge, to any person obtaining a copy
15211063dcSKonrad Rzeszutek Wilk * of this source file (the "Software"), to deal in the Software without
16211063dcSKonrad Rzeszutek Wilk * restriction, including without limitation the rights to use, copy, modify,
17211063dcSKonrad Rzeszutek Wilk * merge, publish, distribute, sublicense, and/or sell copies of the Software,
18211063dcSKonrad Rzeszutek Wilk * and to permit persons to whom the Software is furnished to do so, subject to
19211063dcSKonrad Rzeszutek Wilk * the following conditions:
20211063dcSKonrad Rzeszutek Wilk *
21211063dcSKonrad Rzeszutek Wilk * The above copyright notice and this permission notice shall be included in
22211063dcSKonrad Rzeszutek Wilk * all copies or substantial portions of the Software.
23211063dcSKonrad Rzeszutek Wilk *
24211063dcSKonrad Rzeszutek Wilk * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
25211063dcSKonrad Rzeszutek Wilk * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26211063dcSKonrad Rzeszutek Wilk * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
27211063dcSKonrad Rzeszutek Wilk * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28211063dcSKonrad Rzeszutek Wilk * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
29211063dcSKonrad Rzeszutek Wilk * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
30211063dcSKonrad Rzeszutek Wilk * IN THE SOFTWARE.
31211063dcSKonrad Rzeszutek Wilk */
32211063dcSKonrad Rzeszutek Wilk
33211063dcSKonrad Rzeszutek Wilk #ifndef _XEN_ACPI_H
34211063dcSKonrad Rzeszutek Wilk #define _XEN_ACPI_H
35211063dcSKonrad Rzeszutek Wilk
36211063dcSKonrad Rzeszutek Wilk #include <linux/types.h>
37211063dcSKonrad Rzeszutek Wilk
38211063dcSKonrad Rzeszutek Wilk #ifdef CONFIG_XEN_DOM0
39211063dcSKonrad Rzeszutek Wilk #include <asm/xen/hypervisor.h>
40211063dcSKonrad Rzeszutek Wilk #include <xen/xen.h>
41211063dcSKonrad Rzeszutek Wilk #include <linux/acpi.h>
42211063dcSKonrad Rzeszutek Wilk
43*be6b25d1SBen Guthro int xen_acpi_notify_hypervisor_sleep(u8 sleep_state,
44268a2075SLiu Jinsong u32 pm1a_cnt, u32 pm1b_cnd);
45*be6b25d1SBen Guthro int xen_acpi_notify_hypervisor_extended_sleep(u8 sleep_state,
46*be6b25d1SBen Guthro u32 val_a, u32 val_b);
47268a2075SLiu Jinsong
xen_acpi_suspend_lowlevel(void)48068e0dc7SKonrad Rzeszutek Wilk static inline int xen_acpi_suspend_lowlevel(void)
49068e0dc7SKonrad Rzeszutek Wilk {
50068e0dc7SKonrad Rzeszutek Wilk /*
51068e0dc7SKonrad Rzeszutek Wilk * Xen will save and restore CPU context, so
52068e0dc7SKonrad Rzeszutek Wilk * we can skip that and just go straight to
53068e0dc7SKonrad Rzeszutek Wilk * the suspend.
54068e0dc7SKonrad Rzeszutek Wilk */
55068e0dc7SKonrad Rzeszutek Wilk acpi_enter_sleep_state(ACPI_STATE_S3);
56068e0dc7SKonrad Rzeszutek Wilk return 0;
57068e0dc7SKonrad Rzeszutek Wilk }
58068e0dc7SKonrad Rzeszutek Wilk
xen_acpi_sleep_register(void)59268a2075SLiu Jinsong static inline void xen_acpi_sleep_register(void)
60268a2075SLiu Jinsong {
61068e0dc7SKonrad Rzeszutek Wilk if (xen_initial_domain()) {
62268a2075SLiu Jinsong acpi_os_set_prepare_sleep(
63*be6b25d1SBen Guthro &xen_acpi_notify_hypervisor_sleep);
64*be6b25d1SBen Guthro acpi_os_set_prepare_extended_sleep(
65*be6b25d1SBen Guthro &xen_acpi_notify_hypervisor_extended_sleep);
66068e0dc7SKonrad Rzeszutek Wilk
67068e0dc7SKonrad Rzeszutek Wilk acpi_suspend_lowlevel = xen_acpi_suspend_lowlevel;
68068e0dc7SKonrad Rzeszutek Wilk }
69268a2075SLiu Jinsong }
70268a2075SLiu Jinsong #else
xen_acpi_sleep_register(void)71268a2075SLiu Jinsong static inline void xen_acpi_sleep_register(void)
72268a2075SLiu Jinsong {
73268a2075SLiu Jinsong }
74268a2075SLiu Jinsong #endif
75268a2075SLiu Jinsong
76211063dcSKonrad Rzeszutek Wilk #endif /* _XEN_ACPI_H */
77