]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - include/xen/interface/io/tpmif.h
drivers/tpm: add xen tpmfront interface
[karo-tx-linux.git] / include / xen / interface / io / tpmif.h
diff --git a/include/xen/interface/io/tpmif.h b/include/xen/interface/io/tpmif.h
new file mode 100644 (file)
index 0000000..28e7dcd
--- /dev/null
@@ -0,0 +1,52 @@
+/******************************************************************************
+ * tpmif.h
+ *
+ * TPM I/O interface for Xen guest OSes, v2
+ *
+ * This file is in the public domain.
+ *
+ */
+
+#ifndef __XEN_PUBLIC_IO_TPMIF_H__
+#define __XEN_PUBLIC_IO_TPMIF_H__
+
+/*
+ * Xenbus state machine
+ *
+ * Device open:
+ *   1. Both ends start in XenbusStateInitialising
+ *   2. Backend transitions to InitWait (frontend does not wait on this step)
+ *   3. Frontend populates ring-ref, event-channel, feature-protocol-v2
+ *   4. Frontend transitions to Initialised
+ *   5. Backend maps grant and event channel, verifies feature-protocol-v2
+ *   6. Backend transitions to Connected
+ *   7. Frontend verifies feature-protocol-v2, transitions to Connected
+ *
+ * Device close:
+ *   1. State is changed to XenbusStateClosing
+ *   2. Frontend transitions to Closed
+ *   3. Backend unmaps grant and event, changes state to InitWait
+ */
+
+enum vtpm_shared_page_state {
+       VTPM_STATE_IDLE,         /* no contents / vTPM idle / cancel complete */
+       VTPM_STATE_SUBMIT,       /* request ready / vTPM working */
+       VTPM_STATE_FINISH,       /* response ready / vTPM idle */
+       VTPM_STATE_CANCEL,       /* cancel requested / vTPM working */
+};
+/* The backend should only change state to IDLE or FINISH, while the
+ * frontend should only change to SUBMIT or CANCEL. */
+
+
+struct vtpm_shared_page {
+       uint32_t length;         /* request/response length in bytes */
+
+       uint8_t state;           /* enum vtpm_shared_page_state */
+       uint8_t locality;        /* for the current request */
+       uint8_t pad;
+
+       uint8_t nr_extra_pages;  /* extra pages for long packets; may be zero */
+       uint32_t extra_pages[0]; /* grant IDs; length in nr_extra_pages */
+};
+
+#endif