Statistics
| Branch: | Revision:

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 */