static TPMBackend *tpm_passthrough_create(QemuOpts *opts, const char *id) { Object *obj = object_new(TYPE_TPM_PASSTHROUGH); TPMBackend *tb = TPM_BACKEND(obj); TPMPassthruState *tpm_pt = TPM_PASSTHROUGH(tb); tb->id = g_strdup(id); /* let frontend set the fe_model to proper value */ tb->fe_model = -1; tb->ops = &tpm_passthrough_driver; if (tpm_passthrough_handle_device_opts(opts, tb)) { goto err_exit; } tpm_pt->cancel_fd = tpm_passthrough_open_sysfs_cancel(tb); if (tpm_pt->cancel_fd < 0) { goto err_exit; } return tb; err_exit: g_free(tb->id); return NULL; }
static void tpm_backend_prop_set_opened(Object *obj, bool value, Error **errp) { TPMBackend *s = TPM_BACKEND(obj); TPMBackendClass *k = TPM_BACKEND_GET_CLASS(s); Error *local_err = NULL; if (value == s->opened) { return; } if (!value && s->opened) { error_setg(errp, QERR_PERMISSION_DENIED); return; } if (k->opened) { k->opened(s, &local_err); if (local_err) { error_propagate(errp, local_err); return; } } s->opened = true; }
static TPMBackend *tpm_xenstubdoms_create(QemuOpts *opts, const char *id) { Object *obj = object_new(TYPE_TPM_XENSTUBDOMS); TPMBackend *tb = TPM_BACKEND(obj); tb->id = g_strdup(id); tb->fe_model = -1; tb->ops = &tpm_xenstubdoms_driver; return tb; }
static TPMBackend *tpm_emulator_create(QemuOpts *opts) { TPMBackend *tb = TPM_BACKEND(object_new(TYPE_TPM_EMULATOR)); if (tpm_emulator_handle_device_opts(TPM_EMULATOR(tb), opts)) { object_unref(OBJECT(tb)); return NULL; } return tb; }
static bool tpm_backend_prop_get_opened(Object *obj, Error **errp) { TPMBackend *s = TPM_BACKEND(obj); return s->opened; }