blob: b5d347f49030d5f35224ae93ab5bf865042c1fed [file] [log] [blame]
/*****************************************************************************
* Copyright (c) 2015-2020 IBM Corporation
* All rights reserved.
* This program and the accompanying materials
* are made available under the terms of the BSD License
* which accompanies this distribution, and is available at
* http://www.opensource.org/licenses/bsd-license.php
*
* Contributors:
* IBM Corporation - initial implementation
*****************************************************************************/
#ifndef TPM_DRIVERS_H
#define TPM_DRIVERS_H
#include <stdint.h>
#include <stdbool.h>
#include <unistd.h>
#include "tcgbios_int.h"
enum tpm_duration_type {
TPM_DURATION_TYPE_SHORT = 0,
TPM_DURATION_TYPE_MEDIUM,
TPM_DURATION_TYPE_LONG,
};
/* firmware driver states */
typedef enum {
VTPM_DRV_STATE_INVALID = 0,
VTPM_DRV_STATE_INIT_CALLED = 1,
VTPM_DRV_STATE_REG_CRQ = 2,
VTPM_DRV_STATE_WAIT_INIT = 3,
VTPM_DRV_STATE_SEND_INIT = 4,
VTPM_DRV_STATE_FAILURE = 5,
VTPM_DRV_STATE_WAIT_INIT_COMP = 6,
VTPM_DRV_STATE_SEND_INIT_COMP = 7,
VTPM_DRV_STATE_SEND_GET_VERSION = 8,
VTPM_DRV_STATE_WAIT_VERSION = 9,
VTPM_DRV_STATE_CHECK_VERSION = 10,
VTPM_DRV_STATE_SEND_BUFSIZE_REQ = 11,
VTPM_DRV_STATE_WAIT_BUFSIZE = 12,
VTPM_DRV_STATE_ALLOC_RTCE_BUF = 13,
VTPM_DRV_STATE_SEND_TPM_CMD = 14,
VTPM_DRV_STATE_WAIT_TPM_RSP = 15,
} vtpm_drv_state;
/* firmware driver errors */
typedef enum {
VTPM_DRV_ERROR_NO_FAILURE = -1,
VTPM_DRV_ERROR_NOT_FOUND_TIMEOUT = 0,
VTPM_DRV_ERROR_UNEXPECTED_REG_ERROR = 1,
VTPM_DRV_ERROR_PARTNER_FAILED = 2,
VTPM_DRV_ERROR_UNEXPECTED_TSP_ERROR = 3,
VTPM_DRV_ERROR_TPM_PROTOCOL_ERROR = 4,
VTPM_DRV_ERROR_WAIT_TIMEOUT = 5,
VTPM_DRV_ERROR_UNEXPECTED_SEND_ERROR = 6,
VTPM_DRV_ERROR_CRQ_OPEN_FAIL = 7,
VTPM_DRV_ERROR_BAD_STATE = 8,
VTPM_DRV_ERROR_TPM_FAIL = 9,
VTPM_DRV_ERROR_TPM_CRQ_ERROR = 10,
VTPM_DRV_ERROR_BAD_VERSION = 11,
VTPM_DRV_ERROR_BAD_RTCE_SIZE = 12,
VTPM_DRV_ERROR_SML_FAILURE = 13,
VTPM_DRV_ERROR_SML_HANDED_OVER = 14,
} vtpm_drv_error;
/* the max. buffer size by the external TPM is 4k */
#define PAPR_VTPM_MAX_BUFFER_SIZE 4096
/* exported functions */
bool spapr_is_vtpm_present(void);
void spapr_vtpm_finalize(void);
vtpm_drv_error spapr_vtpm_get_error(void);
void spapr_vtpm_set_error(vtpm_drv_error errcode);
struct tpm_req_header;
int spapr_transmit(uint8_t locty, struct tpm_req_header *req,
void *respbuffer, uint32_t *respbufferlen,
enum tpm_duration_type to_t);
#endif /* TPM_DRIVERS_H */