[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2 of 2] Add support to libxl to trigger power or sleep button pushes
# HG changeset patch # User Paul Durrant <paul.durrant@xxxxxxxxxx> # Date 1263377694 0 # Node ID 679f0a189c7280053cc172d1ed80b6312702f4d8 # Parent cdf348c11aba31171bdc838ffe3a457acab0f7de Add support to libxl to trigger power or sleep button pushes in HVM guests. signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx> diff -r cdf348c11aba -r 679f0a189c72 tools/libxl/libxl.c --- a/tools/libxl/libxl.c Wed Jan 13 10:14:54 2010 +0000 +++ b/tools/libxl/libxl.c Wed Jan 13 10:14:54 2010 +0000 @@ -2153,3 +2153,21 @@ 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 cdf348c11aba -r 679f0a189c72 tools/libxl/libxl.h --- a/tools/libxl/libxl.h Wed Jan 13 10:14:54 2010 +0000 +++ b/tools/libxl/libxl.h Wed Jan 13 10:14:54 2010 +0000 @@ -343,4 +343,12 @@ 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 cdf348c11aba -r 679f0a189c72 tools/libxl/xl.c --- a/tools/libxl/xl.c Wed Jan 13 10:14:54 2010 +0000 +++ b/tools/libxl/xl.c Wed Jan 13 10:14:54 2010 +0000 @@ -933,6 +933,7 @@ 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"); @@ -986,6 +987,10 @@ } 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"); } } @@ -1668,6 +1673,60 @@ 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); +} + int main(int argc, char **argv) { if (argc < 2) { @@ -1705,6 +1764,8 @@ 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-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |