[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] libxl, hvm: Add support to trigger power or sleep button events
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1264019779 0 # Node ID f300b53520d0b13696f6ca6669fff8ad54289817 # Parent 0edb75cd8126b9a463c829a763aafd1a5af1bb40 libxl, hvm: Add support to trigger power or sleep button events Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx> --- tools/libxl/libxl.c | 18 +++++++++++++++ tools/libxl/libxl.h | 10 +++++++- tools/libxl/xl.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+), 1 deletion(-) diff -r 0edb75cd8126 -r f300b53520d0 tools/libxl/libxl.c --- a/tools/libxl/libxl.c Wed Jan 20 20:34:19 2010 +0000 +++ b/tools/libxl/libxl.c Wed Jan 20 20:36:19 2010 +0000 @@ -2198,3 +2198,21 @@ int libxl_set_memory_target(struct libxl rc = xc_domain_memory_set_pod_target(ctx->xch, domid, (target_memkb - videoram) / 4, NULL, NULL, NULL); return rc; } + +int libxl_button_press(struct libxl_ctx *ctx, uint32_t domid, libxl_button button) +{ + int rc = -1; + + switch (button) { + case POWER_BUTTON: + rc = xc_domain_send_trigger(ctx->xch, domid, XEN_DOMCTL_SENDTRIGGER_POWER, 0); + break; + case SLEEP_BUTTON: + rc = xc_domain_send_trigger(ctx->xch, domid, XEN_DOMCTL_SENDTRIGGER_SLEEP, 0); + break; + default: + break; + } + + return rc; +} diff -r 0edb75cd8126 -r f300b53520d0 tools/libxl/libxl.h --- a/tools/libxl/libxl.h Wed Jan 20 20:34:19 2010 +0000 +++ b/tools/libxl/libxl.h Wed Jan 20 20:36:19 2010 +0000 @@ -353,4 +353,12 @@ int libxl_device_pci_init(libxl_device_p unsigned int bus, unsigned int dev, unsigned int func, unsigned int vdevfn); -#endif +typedef enum { + POWER_BUTTON, + SLEEP_BUTTON +} libxl_button; + +int libxl_button_press(struct libxl_ctx *ctx, uint32_t domid, libxl_button button); + +#endif /* LIBXL_H */ + diff -r 0edb75cd8126 -r f300b53520d0 tools/libxl/xl.c --- a/tools/libxl/xl.c Wed Jan 20 20:34:19 2010 +0000 +++ b/tools/libxl/xl.c Wed Jan 20 20:36:19 2010 +0000 @@ -931,6 +931,7 @@ static void help(char *command) printf(" cd-insert insert a cdrom into a guest's cd drive\n\n"); printf(" cd-eject eject a cdrom from a guest's cd drive\n\n"); printf(" mem-set set the current memory usage for a domain\n\n"); + printf(" button-press indicate an ACPI button press to the domain\n\n"); } else if(!strcmp(command, "create")) { printf("Usage: xl create <ConfigFile> [options] [vars]\n\n"); printf("Create a domain based on <ConfigFile>.\n\n"); @@ -984,6 +985,10 @@ static void help(char *command) } else if (!strcmp(command, "mem-set")) { printf("Usage: xl mem-set <Domain> <MemKB>\n\n"); printf("Set the current memory usage for a domain.\n\n"); + } else if (!strcmp(command, "button-press")) { + printf("Usage: xl button-press <Domain> <Button>\n\n"); + printf("Indicate <Button> press to a domain.\n"); + printf("<Button> may be 'power' or 'sleep'.\n\n"); } } @@ -1715,6 +1720,60 @@ int main_create(int argc, char **argv) filename = argv[optind]; create_domain(debug, daemonize, filename, NULL, 0); + exit(0); +} + +void button_press(char *p, char *b) +{ + struct libxl_ctx ctx; + uint32_t domid; + libxl_button button; + + libxl_ctx_init(&ctx, LIBXL_VERSION); + libxl_ctx_set_log(&ctx, log_callback, NULL); + + if (domain_qualifier_to_domid(&ctx, p, &domid) < 0) { + fprintf(stderr, "%s is an invalid domain identifier\n", p); + exit(2); + } + + if (!strcmp(b, "power")) { + button = POWER_BUTTON; + } else if (!strcmp(b, "sleep")) { + button = SLEEP_BUTTON; + } else { + fprintf(stderr, "%s is an invalid button identifier\n", b); + exit(2); + } + + libxl_button_press(&ctx, domid, button); +} + +int main_button_press(int argc, char **argv) +{ + int opt; + char *p; + char *b; + + while ((opt = getopt(argc, argv, "h")) != -1) { + switch (opt) { + case 'h': + help("button-press"); + exit(0); + default: + fprintf(stderr, "option not supported\n"); + break; + } + } + if (optind >= argc - 1) { + help("button-press"); + exit(2); + } + + p = argv[optind]; + b = argv[optind + 1]; + + button_press(p, b); exit(0); } @@ -1757,6 +1816,8 @@ int main(int argc, char **argv) main_cd_eject(argc - 1, argv + 1); } else if (!strcmp(argv[1], "mem-set")) { main_memset(argc - 1, argv + 1); + } else if (!strcmp(argv[1], "button-press")) { + main_button_press(argc - 1, argv + 1); } else if (!strcmp(argv[1], "help")) { if (argc > 2) help(argv[2]); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |