xref: /openbmc/linux/include/xen/acpi.h (revision 8be98d2f2a0a262f8bf8a0bc1fdf522b3c7aab17)
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