From: Paul Durrant Date: Tue, 22 Dec 2009 16:22:25 +0000 (+0000) Subject: Add a method to trigger a power button push in a domain X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=279d18cba30cb68e05dcc791cbc992bfa09073f6;p=xcp%2Fxen-api-libs.git Add a method to trigger a power button push in a domain signed-off-by: Paul Durrant --- diff --git a/xc/xc.h b/xc/xc.h index 19c4557..b6ec5e5 100644 --- a/xc/xc.h +++ b/xc/xc.h @@ -184,6 +184,7 @@ int xc_domain_set_vpt_align(int handle, unsigned int domid, int vpt_align); 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); #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 e12c92e..1d6ae97 100644 --- a/xc/xc.ml +++ b/xc/xc.ml @@ -253,6 +253,8 @@ external domain_set_vpt_align: handle -> domid -> int -> unit = "stub_xc_domain_ external domain_send_s3resume: handle -> domid -> unit = "stub_xc_domain_send_s3resume" 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" + (** check if some hvm domain got pv driver or not *) external hvm_check_pvdriver: handle -> domid -> bool = "stub_xc_hvm_check_pvdriver" diff --git a/xc/xc.mli b/xc/xc.mli index 360b4b0..1e31cc6 100644 --- a/xc/xc.mli +++ b/xc/xc.mli @@ -166,6 +166,9 @@ external domain_send_s3resume: handle -> domid -> unit = "stub_xc_domain_send_s3resume" 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 hvm_check_pvdriver : handle -> domid -> bool = "stub_xc_hvm_check_pvdriver" external version : handle -> version = "stub_xc_version_version" diff --git a/xc/xc_lib.c b/xc/xc_lib.c index aa13247..661b6a1 100644 --- a/xc/xc_lib.c +++ b/xc/xc_lib.c @@ -1549,6 +1549,19 @@ int xc_domain_suppress_spurious_page_faults(int xc, uint32_t domid) return rc; } +int xc_domain_trigger_power(int handle, unsigned int domid) +{ + int ret; + + DECLARE_DOMCTL(XEN_DOMCTL_sendtrigger, domid); + domctl.u.sendtrigger.trigger = XEN_DOMCTL_SENDTRIGGER_POWER; + + ret = do_domctl(handle, &domctl); + if (ret != 0) + xc_error_set("power 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 531dd5a..ffce8ff 100644 --- a/xc/xc_stubs.c +++ b/xc/xc_stubs.c @@ -1209,6 +1209,13 @@ CAMLprim value stub_xc_domain_set_vpt_align(value handle, value id, value mode) CAMLreturn(Val_unit); } +CAMLprim value stub_xc_domain_trigger_power(value handle, value domid) +{ + CAMLparam2(handle, domid); + xc_domain_trigger_power(_H(handle), _D(domid)); + CAMLreturn(Val_unit); +} + /* * Local variables: * indent-tabs-mode: t