linux/drivers/char/tpm/tpm_ibmvtpm.h
<<
>>
Prefs
   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 */
  17struct ibmvtpm_crq {
  18        u8 valid;
  19        u8 msg;
  20        __be16 len;
  21        __be32 data;
  22        __be64 reserved;
  23} __attribute__((packed, aligned(8)));
  24
  25struct ibmvtpm_crq_queue {
  26        struct ibmvtpm_crq *crq_addr;
  27        u32 index;
  28        u32 num_entry;
  29        wait_queue_head_t wq;
  30};
  31
  32struct 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        bool 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