diff options
author | Ian Campbell <ian.campbell@citrix.com> | 2011-10-18 13:36:43 +0100 |
---|---|---|
committer | Ian Campbell <ian.campbell@citrix.com> | 2011-10-18 13:36:43 +0100 |
commit | 00580c3a1aa502133cc72d830bdfdaf89ae22eb0 (patch) | |
tree | 0ec2219f1c42752c2c826e44bb1e6efdccf8dce3 /tools | |
parent | 18e09f52f227bdca81c42a158da9948c3948e6a8 (diff) | |
download | xen-00580c3a1aa502133cc72d830bdfdaf89ae22eb0.tar.gz xen-00580c3a1aa502133cc72d830bdfdaf89ae22eb0.tar.bz2 xen-00580c3a1aa502133cc72d830bdfdaf89ae22eb0.zip |
libxl: convert VKB handling to device API
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Ian Jackson <ian.jackson.citrix.com>
Committed-by: Ian Jackson <ian.jackson.citrix.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/libxl/libxl.c | 66 | ||||
-rw-r--r-- | tools/libxl/libxl.h | 7 | ||||
-rw-r--r-- | tools/libxl/xl_cmdimpl.c | 3 | ||||
-rw-r--r-- | tools/ocaml/libs/xl/genwrap.py | 5 | ||||
-rw-r--r-- | tools/ocaml/libs/xl/xenlight_stubs.c | 14 |
5 files changed, 61 insertions, 34 deletions
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c index 5f982b7a82..6dd65b065d 100644 --- a/tools/libxl/libxl.c +++ b/tools/libxl/libxl.c @@ -1586,10 +1586,24 @@ out: } /******************************************************************************/ -void libxl_device_vkb_init(libxl_device_vkb *vkb, int dev_num) +int libxl_device_vkb_init(libxl_ctx *ctx, libxl_device_vkb *vkb) { memset(vkb, 0x00, sizeof(libxl_device_vkb)); - vkb->devid = dev_num; + return 0; +} + +static int libxl__device_from_vkb(libxl__gc *gc, uint32_t domid, + libxl_device_vkb *vkb, + libxl__device *device) +{ + device->backend_devid = vkb->devid; + device->backend_domid = vkb->backend_domid; + device->backend_kind = LIBXL__DEVICE_KIND_VKBD; + device->devid = vkb->devid; + device->domid = domid; + device->kind = LIBXL__DEVICE_KIND_VKBD; + + return 0; } int libxl_device_vkb_add(libxl_ctx *ctx, uint32_t domid, libxl_device_vkb *vkb) @@ -1611,12 +1625,8 @@ int libxl_device_vkb_add(libxl_ctx *ctx, uint32_t domid, libxl_device_vkb *vkb) goto out_free; } - device.backend_devid = vkb->devid; - device.backend_domid = vkb->backend_domid; - device.backend_kind = LIBXL__DEVICE_KIND_VKBD; - device.devid = vkb->devid; - device.domid = domid; - device.kind = LIBXL__DEVICE_KIND_VKBD; + rc = libxl__device_from_vkb(&gc, domid, vkb, &device); + if (rc != 0) goto out_free; flexarray_append(back, "frontend-id"); flexarray_append(back, libxl__sprintf(&gc, "%d", domid)); @@ -1644,14 +1654,36 @@ out: return rc; } -int libxl_device_vkb_clean_shutdown(libxl_ctx *ctx, uint32_t domid) +int libxl_device_vkb_remove(libxl_ctx *ctx, uint32_t domid, + libxl_device_vkb *vkb) { - return ERROR_NI; + libxl__gc gc = LIBXL_INIT_GC(ctx); + libxl__device device; + int rc; + + rc = libxl__device_from_vkb(&gc, domid, vkb, &device); + if (rc != 0) goto out; + + rc = libxl__device_remove(&gc, &device, 1); +out: + libxl__free_all(&gc); + return rc; } -int libxl_device_vkb_hard_shutdown(libxl_ctx *ctx, uint32_t domid) +int libxl_device_vkb_destroy(libxl_ctx *ctx, uint32_t domid, + libxl_device_vkb *vkb) { - return ERROR_NI; + libxl__gc gc = LIBXL_INIT_GC(ctx); + libxl__device device; + int rc; + + rc = libxl__device_from_vkb(&gc, domid, vkb, &device); + if (rc != 0) goto out; + + rc = libxl__device_destroy(&gc, &device); +out: + libxl__free_all(&gc); + return rc; } static void libxl__device_disk_from_xs_be(libxl__gc *gc, @@ -1939,16 +1971,6 @@ out: return rc; } -int libxl_device_vfb_clean_shutdown(libxl_ctx *ctx, uint32_t domid) -{ - return ERROR_NI; -} - -int libxl_device_vfb_hard_shutdown(libxl_ctx *ctx, uint32_t domid) -{ - return ERROR_NI; -} - /******************************************************************************/ int libxl_domain_setmaxmem(libxl_ctx *ctx, uint32_t domid, uint32_t max_memkb) diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h index 56744b3da9..df27c88a25 100644 --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -473,10 +473,11 @@ libxl_device_nic *libxl_device_nic_list(libxl_ctx *ctx, uint32_t domid, int *num int libxl_device_nic_getinfo(libxl_ctx *ctx, uint32_t domid, libxl_device_nic *nic, libxl_nicinfo *nicinfo); -void libxl_device_vkb_init(libxl_device_vkb *vkb, int dev_num); +/* Keyboard */ +int libxl_device_vkb_init(libxl_ctx *ctx, libxl_device_vkb *vkb); int libxl_device_vkb_add(libxl_ctx *ctx, uint32_t domid, libxl_device_vkb *vkb); -int libxl_device_vkb_clean_shutdown(libxl_ctx *ctx, uint32_t domid); -int libxl_device_vkb_hard_shutdown(libxl_ctx *ctx, uint32_t domid); +int libxl_device_vkb_remove(libxl_ctx *ctx, uint32_t domid, libxl_device_vkb *vkb); +int libxl_device_vkb_destroy(libxl_ctx *ctx, uint32_t domid, libxl_device_vkb *vkb); void libxl_device_vfb_init(libxl_device_vfb *vfb, int dev_num); int libxl_device_vfb_add(libxl_ctx *ctx, uint32_t domid, libxl_device_vfb *vfb); diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c index 9bb0a4caa2..e8c1679ace 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -857,7 +857,8 @@ skip: d_config->vkbs = (libxl_device_vkb *) realloc(d_config->vkbs, sizeof(libxl_device_vkb) * (d_config->num_vkbs + 1)); vkb = d_config->vkbs + d_config->num_vkbs; - libxl_device_vkb_init(vkb, d_config->num_vkbs); + libxl_device_vkb_init(ctx, vkb); + vkb->devid = d_config->num_vkbs; p = strtok(buf2, ","); if (!p) diff --git a/tools/ocaml/libs/xl/genwrap.py b/tools/ocaml/libs/xl/genwrap.py index f7edad0930..c73d40fb63 100644 --- a/tools/ocaml/libs/xl/genwrap.py +++ b/tools/ocaml/libs/xl/genwrap.py @@ -26,10 +26,7 @@ functions = { # ( name , [type1,type2,....] ) ("clean_shutdown", ["domid", "unit"]), ("hard_shutdown", ["domid", "unit"]), ], - "device_vkb": [ ("add", ["t", "domid", "unit"]), - ("clean_shutdown", ["domid", "unit"]), - ("hard_shutdown", ["domid", "unit"]), - ], + "device_vkb": DEVICE_FUNCTIONS, "device_disk": DEVICE_FUNCTIONS, "device_nic": DEVICE_FUNCTIONS, "device_pci": [ ("add", ["t", "domid", "unit"]), diff --git a/tools/ocaml/libs/xl/xenlight_stubs.c b/tools/ocaml/libs/xl/xenlight_stubs.c index 3cf889b661..eea91345d4 100644 --- a/tools/ocaml/libs/xl/xenlight_stubs.c +++ b/tools/ocaml/libs/xl/xenlight_stubs.c @@ -306,14 +306,17 @@ value stub_xl_device_vkb_add(value info, value domid) CAMLreturn(Val_unit); } -value stub_xl_device_vkb_clean_shutdown(value domid) +value stub_xl_device_vkb_remove(value info, value domid) { CAMLparam1(domid); + libxl_device_vkb c_info; int ret; INIT_STRUCT(); + device_vkb_val(&gc, &lg, &c_info, info); + INIT_CTX(); - ret = libxl_device_vkb_clean_shutdown(ctx, Int_val(domid)); + ret = libxl_device_vkb_remove(ctx, Int_val(domid), &c_info); if (ret != 0) failwith_xl("vkb_clean_shutdown", &lg); FREE_CTX(); @@ -321,14 +324,17 @@ value stub_xl_device_vkb_clean_shutdown(value domid) CAMLreturn(Val_unit); } -value stub_xl_device_vkb_hard_shutdown(value domid) +value stub_xl_device_vkb_destroy(value info, value domid) { CAMLparam1(domid); + libxl_device_vkb c_info; int ret; INIT_STRUCT(); + device_vkb_val(&gc, &lg, &c_info, info); + INIT_CTX(); - ret = libxl_device_vkb_hard_shutdown(ctx, Int_val(domid)); + ret = libxl_device_vkb_destroy(ctx, Int_val(domid), &c_info); if (ret != 0) failwith_xl("vkb_hard_shutdown", &lg); FREE_CTX(); |