mirror of https://github.com/xqemu/xqemu.git
Merge tpm 2017/12/19 v1
-----BEGIN PGP SIGNATURE----- iQEcBAABAgAGBQJaOP0xAAoJEHWtZYAqC0IREyYIAJyIBBVj5L5zX96v24eMzjmO vTQq37Ciez83amzRqmaFfIJBNoDCUNUI95vP4Ltx47xz/HhLYWfpcZ5siVDuDBgu vI+sNsImJwJzbzI42BRIB+nQRkb+2r+gHYXWjf8/Giw/pIxo/TsrjQhHZsWKXgfv 4s87dHDSgdkFy24+fKQWmpWoRG/nCQg8LglD9PdxVcuX+bcMQ5ZaFjHrxhq+eeYH suoRD06KXMfx1RESxCkK2eY6laLzIL1ar8Zzk4XLW6OrbPXIJnkaDnEbdE56t2Ii z1sABZyNZe02pVNoYsN+hypsodjRnO3gdyGdcTI/lpn1QrJWrEbJTV1O5UpXRDI= =JdKQ -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/stefanberger/tags/pull-tpm-2017-12-19-1' into staging Merge tpm 2017/12/19 v1 # gpg: Signature made Tue 19 Dec 2017 11:51:13 GMT # gpg: using RSA key 0x75AD65802A0B4211 # gpg: Good signature from "Stefan Berger <stefanb@linux.vnet.ibm.com>" # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: B818 B9CA DF90 89C2 D5CE C66B 75AD 6580 2A0B 4211 * remotes/stefanberger/tags/pull-tpm-2017-12-19-1: tpm: move qdev_prop_tpm to hw/tpm/ Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
062fcb27c4
|
@ -21,7 +21,6 @@
|
||||||
#include "net/hub.h"
|
#include "net/hub.h"
|
||||||
#include "qapi/visitor.h"
|
#include "qapi/visitor.h"
|
||||||
#include "chardev/char-fe.h"
|
#include "chardev/char-fe.h"
|
||||||
#include "sysemu/tpm_backend.h"
|
|
||||||
#include "sysemu/iothread.h"
|
#include "sysemu/iothread.h"
|
||||||
|
|
||||||
static void get_pointer(Object *obj, Visitor *v, Property *prop,
|
static void get_pointer(Object *obj, Visitor *v, Property *prop,
|
||||||
|
@ -237,69 +236,6 @@ const PropertyInfo qdev_prop_chr = {
|
||||||
.release = release_chr,
|
.release = release_chr,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* --- character device --- */
|
|
||||||
|
|
||||||
static void get_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
|
|
||||||
Error **errp)
|
|
||||||
{
|
|
||||||
DeviceState *dev = DEVICE(obj);
|
|
||||||
TPMBackend **be = qdev_get_prop_ptr(dev, opaque);
|
|
||||||
char *p;
|
|
||||||
|
|
||||||
p = g_strdup(*be ? (*be)->id : "");
|
|
||||||
visit_type_str(v, name, &p, errp);
|
|
||||||
g_free(p);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void set_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
|
|
||||||
Error **errp)
|
|
||||||
{
|
|
||||||
DeviceState *dev = DEVICE(obj);
|
|
||||||
Error *local_err = NULL;
|
|
||||||
Property *prop = opaque;
|
|
||||||
TPMBackend *s, **be = qdev_get_prop_ptr(dev, prop);
|
|
||||||
char *str;
|
|
||||||
|
|
||||||
if (dev->realized) {
|
|
||||||
qdev_prop_set_after_realize(dev, name, errp);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
visit_type_str(v, name, &str, &local_err);
|
|
||||||
if (local_err) {
|
|
||||||
error_propagate(errp, local_err);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
s = qemu_find_tpm_be(str);
|
|
||||||
if (s == NULL) {
|
|
||||||
error_setg(errp, "Property '%s.%s' can't find value '%s'",
|
|
||||||
object_get_typename(obj), prop->name, str);
|
|
||||||
} else if (tpm_backend_init(s, TPM_IF(obj), errp) == 0) {
|
|
||||||
*be = s; /* weak reference, avoid cyclic ref */
|
|
||||||
}
|
|
||||||
g_free(str);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void release_tpm(Object *obj, const char *name, void *opaque)
|
|
||||||
{
|
|
||||||
DeviceState *dev = DEVICE(obj);
|
|
||||||
Property *prop = opaque;
|
|
||||||
TPMBackend **be = qdev_get_prop_ptr(dev, prop);
|
|
||||||
|
|
||||||
if (*be) {
|
|
||||||
tpm_backend_reset(*be);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const PropertyInfo qdev_prop_tpm = {
|
|
||||||
.name = "str",
|
|
||||||
.description = "ID of a tpm to use as a backend",
|
|
||||||
.get = get_tpm,
|
|
||||||
.set = set_tpm,
|
|
||||||
.release = release_tpm,
|
|
||||||
};
|
|
||||||
|
|
||||||
/* --- netdev device --- */
|
/* --- netdev device --- */
|
||||||
static void get_netdev(Object *obj, Visitor *v, const char *name,
|
static void get_netdev(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
common-obj-y += tpm_util.o
|
||||||
common-obj-$(CONFIG_TPM_TIS) += tpm_tis.o
|
common-obj-$(CONFIG_TPM_TIS) += tpm_tis.o
|
||||||
common-obj-$(CONFIG_TPM_PASSTHROUGH) += tpm_passthrough.o tpm_util.o
|
common-obj-$(CONFIG_TPM_PASSTHROUGH) += tpm_passthrough.o
|
||||||
common-obj-$(CONFIG_TPM_EMULATOR) += tpm_emulator.o tpm_util.o
|
common-obj-$(CONFIG_TPM_EMULATOR) += tpm_emulator.o
|
||||||
|
|
|
@ -21,9 +21,13 @@
|
||||||
|
|
||||||
#include "qemu/osdep.h"
|
#include "qemu/osdep.h"
|
||||||
#include "qemu/error-report.h"
|
#include "qemu/error-report.h"
|
||||||
|
#include "qapi/error.h"
|
||||||
|
#include "qapi/visitor.h"
|
||||||
#include "tpm_util.h"
|
#include "tpm_util.h"
|
||||||
#include "tpm_int.h"
|
#include "tpm_int.h"
|
||||||
#include "exec/memory.h"
|
#include "exec/memory.h"
|
||||||
|
#include "sysemu/tpm_backend.h"
|
||||||
|
#include "hw/qdev.h"
|
||||||
|
|
||||||
#define DEBUG_TPM 0
|
#define DEBUG_TPM 0
|
||||||
|
|
||||||
|
@ -33,6 +37,69 @@
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
/* tpm backend property */
|
||||||
|
|
||||||
|
static void get_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
|
Error **errp)
|
||||||
|
{
|
||||||
|
DeviceState *dev = DEVICE(obj);
|
||||||
|
TPMBackend **be = qdev_get_prop_ptr(dev, opaque);
|
||||||
|
char *p;
|
||||||
|
|
||||||
|
p = g_strdup(*be ? (*be)->id : "");
|
||||||
|
visit_type_str(v, name, &p, errp);
|
||||||
|
g_free(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void set_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
|
Error **errp)
|
||||||
|
{
|
||||||
|
DeviceState *dev = DEVICE(obj);
|
||||||
|
Error *local_err = NULL;
|
||||||
|
Property *prop = opaque;
|
||||||
|
TPMBackend *s, **be = qdev_get_prop_ptr(dev, prop);
|
||||||
|
char *str;
|
||||||
|
|
||||||
|
if (dev->realized) {
|
||||||
|
qdev_prop_set_after_realize(dev, name, errp);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
visit_type_str(v, name, &str, &local_err);
|
||||||
|
if (local_err) {
|
||||||
|
error_propagate(errp, local_err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
s = qemu_find_tpm_be(str);
|
||||||
|
if (s == NULL) {
|
||||||
|
error_setg(errp, "Property '%s.%s' can't find value '%s'",
|
||||||
|
object_get_typename(obj), prop->name, str);
|
||||||
|
} else if (tpm_backend_init(s, TPM_IF(obj), errp) == 0) {
|
||||||
|
*be = s; /* weak reference, avoid cyclic ref */
|
||||||
|
}
|
||||||
|
g_free(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void release_tpm(Object *obj, const char *name, void *opaque)
|
||||||
|
{
|
||||||
|
DeviceState *dev = DEVICE(obj);
|
||||||
|
Property *prop = opaque;
|
||||||
|
TPMBackend **be = qdev_get_prop_ptr(dev, prop);
|
||||||
|
|
||||||
|
if (*be) {
|
||||||
|
tpm_backend_reset(*be);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const PropertyInfo qdev_prop_tpm = {
|
||||||
|
.name = "str",
|
||||||
|
.description = "ID of a tpm to use as a backend",
|
||||||
|
.get = get_tpm,
|
||||||
|
.set = set_tpm,
|
||||||
|
.release = release_tpm,
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Write an error message in the given output buffer.
|
* Write an error message in the given output buffer.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -39,4 +39,7 @@ static inline uint32_t tpm_cmd_get_size(const void *b)
|
||||||
int tpm_util_get_buffer_size(int tpm_fd, TPMVersion tpm_version,
|
int tpm_util_get_buffer_size(int tpm_fd, TPMVersion tpm_version,
|
||||||
size_t *buffersize);
|
size_t *buffersize);
|
||||||
|
|
||||||
|
#define DEFINE_PROP_TPMBE(_n, _s, _f) \
|
||||||
|
DEFINE_PROP(_n, _s, _f, qdev_prop_tpm, TPMBackend *)
|
||||||
|
|
||||||
#endif /* TPM_TPM_UTIL_H */
|
#endif /* TPM_TPM_UTIL_H */
|
||||||
|
|
|
@ -187,8 +187,6 @@ extern const PropertyInfo qdev_prop_link;
|
||||||
|
|
||||||
#define DEFINE_PROP_CHR(_n, _s, _f) \
|
#define DEFINE_PROP_CHR(_n, _s, _f) \
|
||||||
DEFINE_PROP(_n, _s, _f, qdev_prop_chr, CharBackend)
|
DEFINE_PROP(_n, _s, _f, qdev_prop_chr, CharBackend)
|
||||||
#define DEFINE_PROP_TPMBE(_n, _s, _f) \
|
|
||||||
DEFINE_PROP(_n, _s, _f, qdev_prop_tpm, TPMBackend *)
|
|
||||||
#define DEFINE_PROP_STRING(_n, _s, _f) \
|
#define DEFINE_PROP_STRING(_n, _s, _f) \
|
||||||
DEFINE_PROP(_n, _s, _f, qdev_prop_string, char*)
|
DEFINE_PROP(_n, _s, _f, qdev_prop_string, char*)
|
||||||
#define DEFINE_PROP_NETDEV(_n, _s, _f) \
|
#define DEFINE_PROP_NETDEV(_n, _s, _f) \
|
||||||
|
|
Loading…
Reference in New Issue