All of lore.kernel.org
 help / color / mirror / Atom feed
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: x86@kernel.org, tglx@linutronix.de,
	tboot-devel@lists.sourceforge.net, shane.wang@intel.com,
	linux-pm@lists.linux-foundation.org, linux-acpi@vger.kernel.org,
	len.brown@intel.com, jose
Cc: xen-devel@lists.xensource.com,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Subject: [PATCH 6/7] xen/acpi/sleep: Enable ACPI sleep via the __acpi_override_sleep
Date: Wed, 31 Aug 2011 14:31:23 -0400	[thread overview]
Message-ID: <1314815484-4668-7-git-send-email-konrad.wilk@oracle.com> (raw)
In-Reply-To: <1314815484-4668-1-git-send-email-konrad.wilk@oracle.com>

Provide the registration callback to call in the Xen's
ACPI sleep functionality. This means that during S3/S5
we make a hypercall XENPF_enter_acpi_sleep with the
proper PM1A/PM1B registers.

Based of Ke Yu's <ke.yu@intel.com> initial idea.
[ From http://xenbits.xensource.com/linux-2.6.18-xen.hg
change c68699484a65 ]

Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
---
 arch/x86/include/asm/xen/hypercall.h |    8 ++++++++
 arch/x86/xen/enlighten.c             |    3 +++
 drivers/xen/Makefile                 |    2 +-
 drivers/xen/acpi.c                   |   25 +++++++++++++++++++++++++
 include/xen/acpi.h                   |   26 ++++++++++++++++++++++++++
 5 files changed, 63 insertions(+), 1 deletions(-)
 create mode 100644 drivers/xen/acpi.c
 create mode 100644 include/xen/acpi.h

diff --git a/arch/x86/include/asm/xen/hypercall.h b/arch/x86/include/asm/xen/hypercall.h
index d240ea9..0c9894e 100644
--- a/arch/x86/include/asm/xen/hypercall.h
+++ b/arch/x86/include/asm/xen/hypercall.h
@@ -45,6 +45,7 @@
 #include <xen/interface/xen.h>
 #include <xen/interface/sched.h>
 #include <xen/interface/physdev.h>
+#include <xen/interface/platform.h>
 
 /*
  * The hypercall asms have to meet several constraints:
@@ -299,6 +300,13 @@ HYPERVISOR_set_timer_op(u64 timeout)
 }
 
 static inline int
+HYPERVISOR_dom0_op(struct xen_platform_op *platform_op)
+{
+	platform_op->interface_version = XENPF_INTERFACE_VERSION;
+	return _hypercall1(int, dom0_op, platform_op);
+}
+
+static inline int
 HYPERVISOR_set_debugreg(int reg, unsigned long value)
 {
 	return _hypercall2(int, set_debugreg, reg, value);
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index 5525163..6962653 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -42,6 +42,7 @@
 #include <xen/page.h>
 #include <xen/hvm.h>
 #include <xen/hvc-console.h>
+#include <xen/acpi.h>
 
 #include <asm/paravirt.h>
 #include <asm/apic.h>
@@ -1250,6 +1251,8 @@ asmlinkage void __init xen_start_kernel(void)
 	} else {
 		/* Make sure ACS will be enabled */
 		pci_request_acs();
+
+		xen_acpi_sleep_register();
 	}
 		
 
diff --git a/drivers/xen/Makefile b/drivers/xen/Makefile
index bbc1825..370552d 100644
--- a/drivers/xen/Makefile
+++ b/drivers/xen/Makefile
@@ -16,7 +16,7 @@ obj-$(CONFIG_XENFS)			+= xenfs/
 obj-$(CONFIG_XEN_SYS_HYPERVISOR)	+= sys-hypervisor.o
 obj-$(CONFIG_XEN_PLATFORM_PCI)		+= xen-platform-pci.o
 obj-$(CONFIG_SWIOTLB_XEN)		+= swiotlb-xen.o
-obj-$(CONFIG_XEN_DOM0)			+= pci.o
+obj-$(CONFIG_XEN_DOM0)			+= pci.o acpi.o
 
 xen-evtchn-y				:= evtchn.o
 xen-gntdev-y				:= gntdev.o
diff --git a/drivers/xen/acpi.c b/drivers/xen/acpi.c
new file mode 100644
index 0000000..c0f829f
--- /dev/null
+++ b/drivers/xen/acpi.c
@@ -0,0 +1,25 @@
+#include <xen/acpi.h>
+#include <xen/interface/platform.h>
+#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,
+				     bool *skip_rest)
+{
+	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,
+			},
+		},
+	};
+	if (skip_rest)
+		*skip_rest = true;
+
+	return HYPERVISOR_dom0_op(&op);
+}
diff --git a/include/xen/acpi.h b/include/xen/acpi.h
new file mode 100644
index 0000000..e414f14
--- /dev/null
+++ b/include/xen/acpi.h
@@ -0,0 +1,26 @@
+#ifndef _XEN_ACPI_H
+#define _XEN_ACPI_H
+
+#include <linux/types.h>
+
+#ifdef CONFIG_XEN_DOM0
+#include <asm/xen/hypervisor.h>
+#include <xen/xen.h>
+#include <linux/acpi.h>
+
+int xen_acpi_notify_hypervisor_state(u8 sleep_state,
+				     u32 pm1a_cnt, u32 pm1b_cnd,
+				     bool *skip_rest);
+
+static inline void xen_acpi_sleep_register(void)
+{
+	if (xen_initial_domain())
+		__acpi_override_sleep = xen_acpi_notify_hypervisor_state;
+}
+#else
+static inline void xen_acpi_sleep_register(void)
+{
+}
+#endif
+
+#endif	/* _XEN_ACPI_H */
-- 
1.7.4.1


  parent reply	other threads:[~2011-08-31 18:33 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-31 18:31 [RFC PATCH v1] ACPI S3 to work under Xen Konrad Rzeszutek Wilk
2011-08-31 18:31 ` [PATCH 1/7] x86: Expand the x86_msi_ops to have a restore MSIs Konrad Rzeszutek Wilk
2011-08-31 18:31 ` Konrad Rzeszutek Wilk
2011-08-31 18:31 ` [PATCH 2/7] x86, acpi, tboot: Have a ACPI sleep override instead of calling tboot_sleep Konrad Rzeszutek Wilk
2011-09-07  4:20   ` Cihula, Joseph
2011-09-07  4:20   ` Cihula, Joseph
2011-09-07 17:27     ` [Xen-devel] " Jeremy Fitzhardinge
2011-09-07 17:27     ` Jeremy Fitzhardinge
2011-09-07 17:55       ` Cihula, Joseph
2011-09-07 17:55       ` Cihula, Joseph
2011-08-31 18:31 ` Konrad Rzeszutek Wilk
2011-08-31 18:31 ` [PATCH 3/7] x86/acpi/sleep: Provide registration for acpi_suspend_lowlevel Konrad Rzeszutek Wilk
2011-08-31 18:31 ` Konrad Rzeszutek Wilk
2011-08-31 18:31 ` [PATCH 4/7] xen: Utilize the restore_msi_irqs hook Konrad Rzeszutek Wilk
2011-08-31 18:31 ` Konrad Rzeszutek Wilk
2011-08-31 18:31 ` [PATCH 5/7] xen/acpi: Domain0 acpi parser related platform hypercall Konrad Rzeszutek Wilk
2011-08-31 18:31 ` Konrad Rzeszutek Wilk
2011-09-07  5:50   ` Cihula, Joseph
2011-09-07 17:29     ` [Xen-devel] " Jeremy Fitzhardinge
2011-09-07 17:29     ` Jeremy Fitzhardinge
2011-09-07 17:43       ` Cihula, Joseph
2011-09-07 19:06         ` Konrad Rzeszutek Wilk
2011-09-08 13:38           ` Konrad Rzeszutek Wilk
2011-09-08 13:38           ` Konrad Rzeszutek Wilk
2011-09-22 12:51             ` Konrad Rzeszutek Wilk
2011-09-07 19:06         ` Konrad Rzeszutek Wilk
2011-09-07 17:43       ` Cihula, Joseph
2011-09-21 19:29       ` Konrad Rzeszutek Wilk
2011-09-21 22:42         ` Jeremy Fitzhardinge
2011-09-07  5:50   ` Cihula, Joseph
2011-08-31 18:31 ` Konrad Rzeszutek Wilk [this message]
2011-09-07  4:36   ` [PATCH 6/7] xen/acpi/sleep: Enable ACPI sleep via the __acpi_override_sleep Cihula, Joseph
2011-09-07  4:36   ` Cihula, Joseph
2011-08-31 18:31 ` Konrad Rzeszutek Wilk
2011-08-31 18:31 ` [PATCH 7/7] xen/acpi/sleep: Register to the acpi_suspend_lowlevel a callback Konrad Rzeszutek Wilk
2011-08-31 18:31 ` Konrad Rzeszutek Wilk
2011-09-01  6:58 ` [RFC PATCH v1] ACPI S3 to work under Xen Tian, Kevin
2011-09-01  6:58 ` Tian, Kevin
2011-09-02 11:52 ` [Xen-devel] " Stefano Stabellini
2011-09-02 11:52 ` Stefano Stabellini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1314815484-4668-7-git-send-email-konrad.wilk@oracle.com \
    --to=konrad.wilk@oracle.com \
    --cc=len.brown@intel.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-pm@lists.linux-foundation.org \
    --cc=shane.wang@intel.com \
    --cc=tboot-devel@lists.sourceforge.net \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    --cc=xen-devel@lists.xensource.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.