mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 18:21:39 +01:00
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>
This commit is contained in:
1 parent
18e09f52f2
commit
00580c3a1a
5 files changed
+61
-34
No files matched your search
+44
-22
@@ -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)
|
||||
|
||||
+4
-3
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"]),
|
||||
|
||||
@@ -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();
|
||||
|
||||