1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /* |
3 | * Copyright (C) 2012 IBM Corporation |
4 | * |
5 | * Author: Ashley Lai <ashleydlai@gmail.com> |
6 | * |
7 | * Maintained by: <tpmdd-devel@lists.sourceforge.net> |
8 | * |
9 | * Device driver for TCG/TCPA TPM (trusted platform module). |
10 | * Specifications at www.trustedcomputinggroup.org |
11 | */ |
12 | |
13 | #ifndef __TPM_IBMVTPM_H__ |
14 | #define __TPM_IBMVTPM_H__ |
15 | |
16 | /* vTPM Message Format 1 */ |
17 | struct ibmvtpm_crq { |
18 | u8 valid; |
19 | u8 msg; |
20 | __be16 len; |
21 | __be32 data; |
22 | __be64 reserved; |
23 | } __attribute__((packed, aligned(8))); |
24 | |
25 | struct ibmvtpm_crq_queue { |
26 | struct ibmvtpm_crq *crq_addr; |
27 | u32 index; |
28 | u32 num_entry; |
29 | wait_queue_head_t wq; |
30 | }; |
31 | |
32 | struct ibmvtpm_dev { |
33 | struct device *dev; |
34 | struct vio_dev *vdev; |
35 | struct ibmvtpm_crq_queue crq_queue; |
36 | dma_addr_t crq_dma_handle; |
37 | u32 rtce_size; |
38 | void __iomem *rtce_buf; |
39 | dma_addr_t rtce_dma_handle; |
40 | spinlock_t rtce_lock; |
41 | wait_queue_head_t wq; |
42 | u16 res_len; |
43 | u32 vtpm_version; |
44 | u8 tpm_processing_cmd; |
45 | }; |
46 | |
47 | #define CRQ_RES_BUF_SIZE PAGE_SIZE |
48 | |
49 | /* Initialize CRQ */ |
50 | #define INIT_CRQ_CMD 0xC001000000000000LL /* Init cmd */ |
51 | #define INIT_CRQ_COMP_CMD 0xC002000000000000LL /* Init complete cmd */ |
52 | #define INIT_CRQ_RES 0x01 /* Init respond */ |
53 | #define INIT_CRQ_COMP_RES 0x02 /* Init complete respond */ |
54 | #define VALID_INIT_CRQ 0xC0 /* Valid command for init crq */ |
55 | |
56 | /* vTPM CRQ response is the message type | 0x80 */ |
57 | #define VTPM_MSG_RES 0x80 |
58 | #define IBMVTPM_VALID_CMD 0x80 |
59 | |
60 | /* vTPM CRQ message types */ |
61 | #define VTPM_GET_VERSION 0x01 |
62 | #define VTPM_GET_VERSION_RES (0x01 | VTPM_MSG_RES) |
63 | |
64 | #define VTPM_TPM_COMMAND 0x02 |
65 | #define VTPM_TPM_COMMAND_RES (0x02 | VTPM_MSG_RES) |
66 | |
67 | #define VTPM_GET_RTCE_BUFFER_SIZE 0x03 |
68 | #define VTPM_GET_RTCE_BUFFER_SIZE_RES (0x03 | VTPM_MSG_RES) |
69 | |
70 | #define VTPM_PREPARE_TO_SUSPEND 0x04 |
71 | #define VTPM_PREPARE_TO_SUSPEND_RES (0x04 | VTPM_MSG_RES) |
72 | |
73 | #endif |
74 | |