flexarray_t *back, flexarray_t *front,
flexarray_t *ro_front)
{
- flexarray_append_pair(back, "backend-type",
- (char *)libxl_vkb_backend_to_string(vkb->backend_type));
-
if (vkb->unique_id) {
flexarray_append_pair(back, XENKBD_FIELD_UNIQUE_ID, vkb->unique_id);
}
libxl_devid devid,
libxl_device_vkb *vkb)
{
- const char *be_path, *be_type, *fe_path, *tmp;
+ const char *be_path, *fe_path, *tmp;
+ libxl__device dev;
int rc;
vkb->devid = devid;
rc = libxl__backendpath_parse_domid(gc, be_path, &vkb->backend_domid);
if (rc) goto out;
- rc = libxl__xs_read_mandatory(gc, XBT_NULL,
- GCSPRINTF("%s/backend-type", be_path),
- &be_type);
+ rc = libxl__parse_backend_path(gc, be_path, &dev);
if (rc) goto out;
- rc = libxl_vkb_backend_from_string(be_type, &vkb->backend_type);
- if (rc) goto out;
+ vkb->backend_type = dev.backend_kind == LIBXL__DEVICE_KIND_VINPUT ?
+ LIBXL_VKB_BACKEND_LINUX : LIBXL_VKB_BACKEND_QEMU;
vkb->unique_id = xs_read(CTX->xsh, XBT_NULL, GCSPRINTF("%s/"XENKBD_FIELD_UNIQUE_ID, be_path), NULL);
return rc;
}
+static int libxl__device_from_vkb(libxl__gc *gc, uint32_t domid,
+ libxl_device_vkb *type, libxl__device *device)
+{
+ device->backend_devid = type->devid;
+ device->backend_domid = type->backend_domid;
+ device->backend_kind = type->backend_type == LIBXL_VKB_BACKEND_LINUX ?
+ LIBXL__DEVICE_KIND_VINPUT : LIBXL__DEVICE_KIND_VKBD;
+ device->devid = type->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,
const libxl_asyncop_how *ao_how)
{
return rc;
}
-static LIBXL_DEFINE_DEVICE_FROM_TYPE(vkb)
static LIBXL_DEFINE_UPDATE_DEVID(vkb)
#define libxl__add_vkbs NULL