Ashley Lai | 132f762 | 2012-08-22 16:17:43 -0500 | [diff] [blame^] | 1 | /* |
| 2 | * Copyright (C) 2012 IBM Corporation |
| 3 | * |
| 4 | * Author: Ashley Lai <adlai@us.ibm.com> |
| 5 | * |
| 6 | * Maintained by: <tpmdd-devel@lists.sourceforge.net> |
| 7 | * |
| 8 | * Device driver for TCG/TCPA TPM (trusted platform module). |
| 9 | * Specifications at www.trustedcomputinggroup.org |
| 10 | * |
| 11 | * This program is free software; you can redistribute it and/or |
| 12 | * modify it under the terms of the GNU General Public License as |
| 13 | * published by the Free Software Foundation, version 2 of the |
| 14 | * License. |
| 15 | * |
| 16 | */ |
| 17 | |
| 18 | #ifndef __TPM_IBMVTPM_H__ |
| 19 | #define __TPM_IBMVTPM_H__ |
| 20 | |
| 21 | /* vTPM Message Format 1 */ |
| 22 | struct ibmvtpm_crq { |
| 23 | u8 valid; |
| 24 | u8 msg; |
| 25 | u16 len; |
| 26 | u32 data; |
| 27 | u64 reserved; |
| 28 | } __attribute__((packed, aligned(8))); |
| 29 | |
| 30 | struct ibmvtpm_crq_queue { |
| 31 | struct ibmvtpm_crq *crq_addr; |
| 32 | u32 index; |
| 33 | u32 num_entry; |
| 34 | }; |
| 35 | |
| 36 | struct ibmvtpm_dev { |
| 37 | struct device *dev; |
| 38 | struct vio_dev *vdev; |
| 39 | struct ibmvtpm_crq_queue crq_queue; |
| 40 | dma_addr_t crq_dma_handle; |
| 41 | spinlock_t lock; |
| 42 | struct tasklet_struct tasklet; |
| 43 | u32 rtce_size; |
| 44 | void __iomem *rtce_buf; |
| 45 | dma_addr_t rtce_dma_handle; |
| 46 | spinlock_t rtce_lock; |
| 47 | struct ibmvtpm_crq crq_res; |
| 48 | u32 vtpm_version; |
| 49 | }; |
| 50 | |
| 51 | #define CRQ_RES_BUF_SIZE PAGE_SIZE |
| 52 | |
| 53 | /* Initialize CRQ */ |
| 54 | #define INIT_CRQ_CMD 0xC001000000000000LL /* Init cmd */ |
| 55 | #define INIT_CRQ_COMP_CMD 0xC002000000000000LL /* Init complete cmd */ |
| 56 | #define INIT_CRQ_RES 0x01 /* Init respond */ |
| 57 | #define INIT_CRQ_COMP_RES 0x02 /* Init complete respond */ |
| 58 | #define VALID_INIT_CRQ 0xC0 /* Valid command for init crq */ |
| 59 | |
| 60 | /* vTPM CRQ response is the message type | 0x80 */ |
| 61 | #define VTPM_MSG_RES 0x80 |
| 62 | #define IBMVTPM_VALID_CMD 0x80 |
| 63 | |
| 64 | /* vTPM CRQ message types */ |
| 65 | #define VTPM_GET_VERSION 0x01 |
| 66 | #define VTPM_GET_VERSION_RES (0x01 | VTPM_MSG_RES) |
| 67 | |
| 68 | #define VTPM_TPM_COMMAND 0x02 |
| 69 | #define VTPM_TPM_COMMAND_RES (0x02 | VTPM_MSG_RES) |
| 70 | |
| 71 | #define VTPM_GET_RTCE_BUFFER_SIZE 0x03 |
| 72 | #define VTPM_GET_RTCE_BUFFER_SIZE_RES (0x03 | VTPM_MSG_RES) |
| 73 | |
| 74 | #define VTPM_PREPARE_TO_SUSPEND 0x04 |
| 75 | #define VTPM_PREPARE_TO_SUSPEND_RES (0x04 | VTPM_MSG_RES) |
| 76 | |
| 77 | #endif |