diff options
author | Daniel De Graaf <dgdegra@tycho.nsa.gov> | 2013-07-30 13:29:47 -0400 |
---|---|---|
committer | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2013-08-09 10:57:06 -0400 |
commit | e2683957fb268c6b29316fd9e7191e13239a30a5 (patch) | |
tree | dca5158cc38a7b469f36999749d5a9bc100ded01 /include/xen | |
parent | 6efa20e49b9cb1db1ab66870cc37323474a75a13 (diff) |
drivers/tpm: add xen tpmfront interface
This is a complete rewrite of the Xen TPM frontend driver, taking
advantage of a simplified frontend/backend interface and adding support
for cancellation and timeouts. The backend for this driver is provided
by a vTPM stub domain using the interface in Xen 4.3.
Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>
Acked-by: Matthew Fioravante <matthew.fioravante@jhuapl.edu>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Acked-by: Peter Huewe <peterhuewe@gmx.de>
Reviewed-by: Peter Huewe <peterhuewe@gmx.de>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Diffstat (limited to 'include/xen')
-rw-r--r-- | include/xen/interface/io/tpmif.h | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/include/xen/interface/io/tpmif.h b/include/xen/interface/io/tpmif.h new file mode 100644 index 000000000000..28e7dcd75e82 --- /dev/null +++ b/include/xen/interface/io/tpmif.h | |||
@@ -0,0 +1,52 @@ | |||
1 | /****************************************************************************** | ||
2 | * tpmif.h | ||
3 | * | ||
4 | * TPM I/O interface for Xen guest OSes, v2 | ||
5 | * | ||
6 | * This file is in the public domain. | ||
7 | * | ||
8 | */ | ||
9 | |||
10 | #ifndef __XEN_PUBLIC_IO_TPMIF_H__ | ||
11 | #define __XEN_PUBLIC_IO_TPMIF_H__ | ||
12 | |||
13 | /* | ||
14 | * Xenbus state machine | ||
15 | * | ||
16 | * Device open: | ||
17 | * 1. Both ends start in XenbusStateInitialising | ||
18 | * 2. Backend transitions to InitWait (frontend does not wait on this step) | ||
19 | * 3. Frontend populates ring-ref, event-channel, feature-protocol-v2 | ||
20 | * 4. Frontend transitions to Initialised | ||
21 | * 5. Backend maps grant and event channel, verifies feature-protocol-v2 | ||
22 | * 6. Backend transitions to Connected | ||
23 | * 7. Frontend verifies feature-protocol-v2, transitions to Connected | ||
24 | * | ||
25 | * Device close: | ||
26 | * 1. State is changed to XenbusStateClosing | ||
27 | * 2. Frontend transitions to Closed | ||
28 | * 3. Backend unmaps grant and event, changes state to InitWait | ||
29 | */ | ||
30 | |||
31 | enum vtpm_shared_page_state { | ||
32 | VTPM_STATE_IDLE, /* no contents / vTPM idle / cancel complete */ | ||
33 | VTPM_STATE_SUBMIT, /* request ready / vTPM working */ | ||
34 | VTPM_STATE_FINISH, /* response ready / vTPM idle */ | ||
35 | VTPM_STATE_CANCEL, /* cancel requested / vTPM working */ | ||
36 | }; | ||
37 | /* The backend should only change state to IDLE or FINISH, while the | ||
38 | * frontend should only change to SUBMIT or CANCEL. */ | ||
39 | |||
40 | |||
41 | struct vtpm_shared_page { | ||
42 | uint32_t length; /* request/response length in bytes */ | ||
43 | |||
44 | uint8_t state; /* enum vtpm_shared_page_state */ | ||
45 | uint8_t locality; /* for the current request */ | ||
46 | uint8_t pad; | ||
47 | |||
48 | uint8_t nr_extra_pages; /* extra pages for long packets; may be zero */ | ||
49 | uint32_t extra_pages[0]; /* grant IDs; length in nr_extra_pages */ | ||
50 | }; | ||
51 | |||
52 | #endif | ||