aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@redhat.com>2017-10-10 00:56:01 +0200
committerStefan Berger <stefanb@linux.vnet.ibm.com>2017-10-19 11:42:32 -0400
commit698f5daa4a81984490612a6143b46f5da7392510 (patch)
treecbfc2fa751a1da2abfb8610088a5469425f24e1f
parent3d4960c7addeb08513f04abaa3c52bb3c69f80f6 (diff)
tpm: add a QOM TPM interface
This will simplify backend / interface objects relationship, so the frontend interface will simply have to implement the TPM QOM interface. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Stefan Berger <stefanb@linux.vnet.ibm.com> Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
-rw-r--r--backends/tpm.c8
-rw-r--r--hw/tpm/tpm_int.h17
-rw-r--r--hw/tpm/tpm_tis.c4
3 files changed, 29 insertions, 0 deletions
diff --git a/backends/tpm.c b/backends/tpm.c
index dc7c831ff8..87c5c09179 100644
--- a/backends/tpm.c
+++ b/backends/tpm.c
@@ -17,6 +17,7 @@
#include "qapi/error.h"
#include "qapi/qmp/qerror.h"
#include "sysemu/tpm.h"
+#include "hw/tpm/tpm_int.h"
#include "qemu/thread.h"
static void tpm_backend_worker_thread(gpointer data, gpointer user_data)
@@ -209,9 +210,16 @@ static const TypeInfo tpm_backend_info = {
.abstract = true,
};
+static const TypeInfo tpm_if_info = {
+ .name = TYPE_TPM_IF,
+ .parent = TYPE_INTERFACE,
+ .class_size = sizeof(TPMIfClass),
+};
+
static void register_types(void)
{
type_register_static(&tpm_backend_info);
+ type_register_static(&tpm_if_info);
}
type_init(register_types);
diff --git a/hw/tpm/tpm_int.h b/hw/tpm/tpm_int.h
index e231d0eb4f..eb02e7760c 100644
--- a/hw/tpm/tpm_int.h
+++ b/hw/tpm/tpm_int.h
@@ -13,6 +13,23 @@
#define TPM_TPM_INT_H
#include "qemu/osdep.h"
+#include "qom/object.h"
+
+#define TYPE_TPM_IF "tpm-if"
+#define TPM_IF_CLASS(klass) \
+ OBJECT_CLASS_CHECK(TPMIfClass, (klass), TYPE_TPM_IF)
+#define TPM_IF_GET_CLASS(obj) \
+ OBJECT_GET_CLASS(TPMIfClass, (obj), TYPE_TPM_IF)
+#define TPM_IF(obj) \
+ INTERFACE_CHECK(TPMIf, (obj), TYPE_TPM_IF)
+
+typedef struct TPMIf {
+ Object parent_obj;
+} TPMIf;
+
+typedef struct TPMIfClass {
+ InterfaceClass parent_class;
+} TPMIfClass;
#define TPM_STANDARD_CMDLINE_OPTS \
{ \
diff --git a/hw/tpm/tpm_tis.c b/hw/tpm/tpm_tis.c
index d84eec48b4..dbb50043ac 100644
--- a/hw/tpm/tpm_tis.c
+++ b/hw/tpm/tpm_tis.c
@@ -1123,6 +1123,10 @@ static const TypeInfo tpm_tis_info = {
.instance_size = sizeof(TPMState),
.instance_init = tpm_tis_initfn,
.class_init = tpm_tis_class_init,
+ .interfaces = (InterfaceInfo[]) {
+ { TYPE_TPM_IF },
+ { }
+ }
};
static void tpm_tis_register(void)