root / hw / tpm / tpm_tis.h @ a8aec295
History | View | Annotate | Download (1.7 kB)
1 | d1a0cf73 | Stefan Berger | /*
|
---|---|---|---|
2 | d1a0cf73 | Stefan Berger | * tpm_tis.h - QEMU's TPM TIS interface emulator
|
3 | d1a0cf73 | Stefan Berger | *
|
4 | d1a0cf73 | Stefan Berger | * Copyright (C) 2006, 2010-2013 IBM Corporation
|
5 | d1a0cf73 | Stefan Berger | *
|
6 | d1a0cf73 | Stefan Berger | * Authors:
|
7 | d1a0cf73 | Stefan Berger | * Stefan Berger <stefanb@us.ibm.com>
|
8 | d1a0cf73 | Stefan Berger | * David Safford <safford@us.ibm.com>
|
9 | d1a0cf73 | Stefan Berger | *
|
10 | d1a0cf73 | Stefan Berger | * This work is licensed under the terms of the GNU GPL, version 2 or later.
|
11 | d1a0cf73 | Stefan Berger | * See the COPYING file in the top-level directory.
|
12 | d1a0cf73 | Stefan Berger | *
|
13 | d1a0cf73 | Stefan Berger | * Implementation of the TIS interface according to specs found at
|
14 | d1a0cf73 | Stefan Berger | * http://www.trustedcomputinggroup.org
|
15 | d1a0cf73 | Stefan Berger | *
|
16 | d1a0cf73 | Stefan Berger | */
|
17 | d1a0cf73 | Stefan Berger | #ifndef TPM_TPM_TIS_H
|
18 | d1a0cf73 | Stefan Berger | #define TPM_TPM_TIS_H
|
19 | d1a0cf73 | Stefan Berger | |
20 | 0d09e41a | Paolo Bonzini | #include "hw/isa/isa.h" |
21 | d1a0cf73 | Stefan Berger | #include "qemu-common.h" |
22 | d1a0cf73 | Stefan Berger | |
23 | d1a0cf73 | Stefan Berger | #define TPM_TIS_ADDR_BASE 0xFED40000 |
24 | d1a0cf73 | Stefan Berger | |
25 | d1a0cf73 | Stefan Berger | #define TPM_TIS_NUM_LOCALITIES 5 /* per spec */ |
26 | d1a0cf73 | Stefan Berger | #define TPM_TIS_LOCALITY_SHIFT 12 |
27 | d1a0cf73 | Stefan Berger | #define TPM_TIS_NO_LOCALITY 0xff |
28 | d1a0cf73 | Stefan Berger | |
29 | d1a0cf73 | Stefan Berger | #define TPM_TIS_IS_VALID_LOCTY(x) ((x) < TPM_TIS_NUM_LOCALITIES)
|
30 | d1a0cf73 | Stefan Berger | |
31 | d1a0cf73 | Stefan Berger | #define TPM_TIS_IRQ 5 |
32 | d1a0cf73 | Stefan Berger | |
33 | d1a0cf73 | Stefan Berger | #define TPM_TIS_BUFFER_MAX 4096 |
34 | d1a0cf73 | Stefan Berger | |
35 | d1a0cf73 | Stefan Berger | #define TYPE_TPM_TIS "tpm-tis" |
36 | d1a0cf73 | Stefan Berger | |
37 | d1a0cf73 | Stefan Berger | |
38 | d1a0cf73 | Stefan Berger | typedef enum { |
39 | d1a0cf73 | Stefan Berger | TPM_TIS_STATE_IDLE = 0,
|
40 | d1a0cf73 | Stefan Berger | TPM_TIS_STATE_READY, |
41 | d1a0cf73 | Stefan Berger | TPM_TIS_STATE_COMPLETION, |
42 | d1a0cf73 | Stefan Berger | TPM_TIS_STATE_EXECUTION, |
43 | d1a0cf73 | Stefan Berger | TPM_TIS_STATE_RECEPTION, |
44 | d1a0cf73 | Stefan Berger | } TPMTISState; |
45 | d1a0cf73 | Stefan Berger | |
46 | d1a0cf73 | Stefan Berger | /* locality data -- all fields are persisted */
|
47 | d1a0cf73 | Stefan Berger | typedef struct TPMLocality { |
48 | d1a0cf73 | Stefan Berger | TPMTISState state; |
49 | d1a0cf73 | Stefan Berger | uint8_t access; |
50 | d1a0cf73 | Stefan Berger | uint8_t sts; |
51 | d1a0cf73 | Stefan Berger | uint32_t inte; |
52 | d1a0cf73 | Stefan Berger | uint32_t ints; |
53 | d1a0cf73 | Stefan Berger | |
54 | d1a0cf73 | Stefan Berger | uint16_t w_offset; |
55 | d1a0cf73 | Stefan Berger | uint16_t r_offset; |
56 | d1a0cf73 | Stefan Berger | TPMSizedBuffer w_buffer; |
57 | d1a0cf73 | Stefan Berger | TPMSizedBuffer r_buffer; |
58 | d1a0cf73 | Stefan Berger | } TPMLocality; |
59 | d1a0cf73 | Stefan Berger | |
60 | d1a0cf73 | Stefan Berger | typedef struct TPMTISEmuState { |
61 | d1a0cf73 | Stefan Berger | QEMUBH *bh; |
62 | d1a0cf73 | Stefan Berger | uint32_t offset; |
63 | d1a0cf73 | Stefan Berger | uint8_t buf[TPM_TIS_BUFFER_MAX]; |
64 | d1a0cf73 | Stefan Berger | |
65 | d1a0cf73 | Stefan Berger | uint8_t active_locty; |
66 | d1a0cf73 | Stefan Berger | uint8_t aborting_locty; |
67 | d1a0cf73 | Stefan Berger | uint8_t next_locty; |
68 | d1a0cf73 | Stefan Berger | |
69 | d1a0cf73 | Stefan Berger | TPMLocality loc[TPM_TIS_NUM_LOCALITIES]; |
70 | d1a0cf73 | Stefan Berger | |
71 | d1a0cf73 | Stefan Berger | qemu_irq irq; |
72 | d1a0cf73 | Stefan Berger | uint32_t irq_num; |
73 | d1a0cf73 | Stefan Berger | } TPMTISEmuState; |
74 | d1a0cf73 | Stefan Berger | |
75 | d1a0cf73 | Stefan Berger | #endif /* TPM_TPM_TIS_H */ |