summary refs log tree commit diff stats
path: root/include/backends
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2013-04-02 18:28:41 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2013-04-15 18:19:25 +0200
commitbdee56f5466a724f043e6cfcfcf69866cc48cc94 (patch)
tree342c4de4d6e553b4116860489f671fdba7fd950c /include/backends
parent3b8acc11d3f60792f9f716f2a93c258e729af980 (diff)
downloadfocaccia-qemu-bdee56f5466a724f043e6cfcfcf69866cc48cc94.tar.gz
focaccia-qemu-bdee56f5466a724f043e6cfcfcf69866cc48cc94.zip
tpm: reorganize headers and split hardware part
The TPM subsystem does not have a full front-end/back-end separation.
The sole available backend, tpm_passthrough, depends on the data
structures of the sole available frontend, tpm_tis.

However, we can at least try to split the user interface (tpm.c) from the
implementation (hw/tpm).  The patches makes tpm.c not include tpm_int.h,
which is shared between tpm_tis.c and tpm_passthrough.c; instead it
moves more stuff to tpm_backend.h.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'include/backends')
-rw-r--r--include/backends/tpm.h41
1 files changed, 40 insertions, 1 deletions
diff --git a/include/backends/tpm.h b/include/backends/tpm.h
index 9e93cc5060..466787453d 100644
--- a/include/backends/tpm.h
+++ b/include/backends/tpm.h
@@ -18,7 +18,7 @@
 #include "qapi/error.h"
 #include "qapi-types.h"
 #include "qemu/option.h"
-#include "tpm/tpm.h"
+#include "sysemu/tpm.h"
 
 #define TYPE_TPM_BACKEND "tpm-backend"
 #define TPM_BACKEND(obj) \
@@ -56,6 +56,39 @@ struct TPMBackend {
     QLIST_ENTRY(TPMBackend) list;
 };
 
+typedef void (TPMRecvDataCB)(TPMState *, uint8_t locty);
+
+typedef struct TPMSizedBuffer {
+    uint32_t size;
+    uint8_t  *buffer;
+} TPMSizedBuffer;
+
+struct TPMDriverOps {
+    enum TpmType type;
+    /* get a descriptive text of the backend to display to the user */
+    const char *(*desc)(void);
+
+    TPMBackend *(*create)(QemuOpts *opts, const char *id);
+    void (*destroy)(TPMBackend *t);
+
+    /* initialize the backend */
+    int (*init)(TPMBackend *t, TPMState *s, TPMRecvDataCB *datacb);
+    /* start up the TPM on the backend */
+    int (*startup_tpm)(TPMBackend *t);
+    /* returns true if nothing will ever answer TPM requests */
+    bool (*had_startup_error)(TPMBackend *t);
+
+    size_t (*realloc_buffer)(TPMSizedBuffer *sb);
+
+    void (*deliver_request)(TPMBackend *t);
+
+    void (*reset)(TPMBackend *t);
+
+    void (*cancel_cmd)(TPMBackend *t);
+
+    bool (*get_tpm_established_flag)(TPMBackend *t);
+};
+
 
 /**
  * tpm_backend_get_type:
@@ -167,4 +200,10 @@ bool tpm_backend_get_tpm_established_flag(TPMBackend *s);
  */
 void tpm_backend_open(TPMBackend *s, Error **errp);
 
+TPMBackend *qemu_find_tpm(const char *id);
+
+const TPMDriverOps *tpm_get_backend_driver(const char *type);
+int tpm_register_model(enum TpmModel model);
+int tpm_register_driver(const TPMDriverOps *tdo);
+
 #endif