root/drivers/char/tpm/tpm_ibmvtpm.h
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (C) 2012 IBM Corporation
 *
 * Author: Ashley Lai <ashleydlai@gmail.com>
 *
 * Maintained by: <tpmdd-devel@lists.sourceforge.net>
 *
 * Device driver for TCG/TCPA TPM (trusted platform module).
 * Specifications at www.trustedcomputinggroup.org
 */

#ifndef __TPM_IBMVTPM_H__
#define __TPM_IBMVTPM_H__

/* vTPM Message Format 1 */
struct ibmvtpm_crq {
        u8 valid;
        u8 msg;
        __be16 len;
        __be32 data;
        __be64 reserved;
} __attribute__((packed, aligned(8)));

struct ibmvtpm_crq_queue {
        struct ibmvtpm_crq *crq_addr;
        u32 index;
        u32 num_entry;
        wait_queue_head_t wq;
};

struct ibmvtpm_dev {
        struct device *dev;
        struct vio_dev *vdev;
        struct ibmvtpm_crq_queue crq_queue;
        dma_addr_t crq_dma_handle;
        u32 rtce_size;
        void __iomem *rtce_buf;
        dma_addr_t rtce_dma_handle;
        spinlock_t rtce_lock;
        wait_queue_head_t wq;
        u16 res_len;
        u32 vtpm_version;
        u8 tpm_processing_cmd;
};

#define CRQ_RES_BUF_SIZE        PAGE_SIZE

/* Initialize CRQ */
#define INIT_CRQ_CMD            0xC001000000000000LL /* Init cmd */
#define INIT_CRQ_COMP_CMD       0xC002000000000000LL /* Init complete cmd */
#define INIT_CRQ_RES            0x01    /* Init respond */
#define INIT_CRQ_COMP_RES       0x02    /* Init complete respond */
#define VALID_INIT_CRQ          0xC0    /* Valid command for init crq */

/* vTPM CRQ response is the message type | 0x80 */
#define VTPM_MSG_RES            0x80
#define IBMVTPM_VALID_CMD       0x80

/* vTPM CRQ message types */
#define VTPM_GET_VERSION                        0x01
#define VTPM_GET_VERSION_RES                    (0x01 | VTPM_MSG_RES)

#define VTPM_TPM_COMMAND                        0x02
#define VTPM_TPM_COMMAND_RES                    (0x02 | VTPM_MSG_RES)

#define VTPM_GET_RTCE_BUFFER_SIZE               0x03
#define VTPM_GET_RTCE_BUFFER_SIZE_RES           (0x03 | VTPM_MSG_RES)

#define VTPM_PREPARE_TO_SUSPEND                 0x04
#define VTPM_PREPARE_TO_SUSPEND_RES             (0x04 | VTPM_MSG_RES)

#endif