From: Paul Durrant Date: Tue, 5 Jan 2010 17:03:49 +0000 (+0000) Subject: Add a method to trigger a sleep button push in a domain X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=1a4faae0d93e20e495978c5611ad13f3321235c6;p=xcp%2Fxen-api-libs.git Add a method to trigger a sleep button push in a domain Signed-off-by: Paul Durrant --- diff --git a/xc/xc.h b/xc/xc.h index b6ec5e5..a7c0f6c 100644 --- a/xc/xc.h +++ b/xc/xc.h @@ -185,6 +185,7 @@ int xc_domain_set_hpet(int handle, unsigned int domid, int hpet); int xc_domain_set_timer_mode(int handle, unsigned int domid, int mode); int xc_domain_get_acpi_s_state(int handle, unsigned int domid); int xc_domain_trigger_power(int handle, unsigned int domid); +int xc_domain_trigger_sleep(int handle, unsigned int domid); #if XEN_SYSCTL_INTERFACE_VERSION >= 6 #define SAFEDIV(a, b) (((b) >= 0) ? (a) / (b) : (a)) diff --git a/xc/xc.ml b/xc/xc.ml index 1d6ae97..4dcb801 100644 --- a/xc/xc.ml +++ b/xc/xc.ml @@ -254,6 +254,7 @@ external domain_send_s3resume: handle -> domid -> unit = "stub_xc_domain_send_s3 external domain_get_acpi_s_state: handle -> domid -> int = "stub_xc_domain_get_acpi_s_state" external domain_trigger_power: handle -> domid -> unit = "stub_xc_domain_trigger_power" +external domain_trigger_sleep: handle -> domid -> unit = "stub_xc_domain_trigger_sleep" (** check if some hvm domain got pv driver or not *) external hvm_check_pvdriver: handle -> domid -> bool diff --git a/xc/xc.mli b/xc/xc.mli index 1e31cc6..84703a2 100644 --- a/xc/xc.mli +++ b/xc/xc.mli @@ -168,6 +168,8 @@ external domain_get_acpi_s_state: handle -> domid -> int = "stub_xc_domain_get_a external domain_trigger_power: handle -> domid -> unit = "stub_xc_domain_trigger_power" +external domain_trigger_sleep: handle -> domid -> unit + = "stub_xc_domain_trigger_sleep" external hvm_check_pvdriver : handle -> domid -> bool = "stub_xc_hvm_check_pvdriver" diff --git a/xc/xc_lib.c b/xc/xc_lib.c index 661b6a1..1a0dc84 100644 --- a/xc/xc_lib.c +++ b/xc/xc_lib.c @@ -1562,6 +1562,19 @@ int xc_domain_trigger_power(int handle, unsigned int domid) return ret; } +int xc_domain_trigger_sleep(int handle, unsigned int domid) +{ + int ret; + + DECLARE_DOMCTL(XEN_DOMCTL_sendtrigger, domid); + domctl.u.sendtrigger.trigger = XEN_DOMCTL_SENDTRIGGER_SLEEP; + + ret = do_domctl(handle, &domctl); + if (ret != 0) + xc_error_set("sleep button failed: %s", xc_error_get()); + return ret; +} + /* * Local variables: * indent-tabs-mode: t diff --git a/xc/xc_stubs.c b/xc/xc_stubs.c index ffce8ff..a5fcf05 100644 --- a/xc/xc_stubs.c +++ b/xc/xc_stubs.c @@ -1216,6 +1216,13 @@ CAMLprim value stub_xc_domain_trigger_power(value handle, value domid) CAMLreturn(Val_unit); } +CAMLprim value stub_xc_domain_trigger_sleep(value handle, value domid) +{ + CAMLparam2(handle, domid); + xc_domain_trigger_sleep(_H(handle), _D(domid)); + CAMLreturn(Val_unit); +} + /* * Local variables: * indent-tabs-mode: t