Support for TPM command line options
This patch adds support for TPM command line options.
The command line options supported here are
./qemu-... -tpmdev passthrough,path=<path to TPM device>,id=<id>
-device tpm-tis,tpmdev=<id>,id=<other id>
and
./qemu-... -tpmdev help
where the latter works similar to -soundhw help and shows a list of
available TPM backends (for example 'passthrough').
Using the type parameter, the backend is chosen, i.e., 'passthrough' for the
passthrough driver. The interpretation of the other parameters along
with determining whether enough parameters were provided is pushed into
the backend driver, which needs to implement the interface function
'create' and return a TPMDriverOpts structure if the VM can be started or
'NULL' if not enough or bad parameters were provided.
Monitor support for 'info tpm' has been added. It for example prints the
following:
(qemu) info tpm
TPM devices:
tpm0: model=tpm-tis
\ tpm0: type=passthrough,path=/dev/tpm0,cancel-path=/sys/devices/pnp0/00:09/cancel
Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
Reviewed-by: Corey Bryant <coreyb@linux.vnet.ibm.com>
Reviewed-by: Joel Schopp <jschopp@linux.vnet.ibm.com>
Message-id: 1361987275-26289-2-git-send-email-stefanb@linux.vnet.ibm.com
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
2013-02-27 21:47:49 +04:00
|
|
|
/*
|
|
|
|
* TPM configuration
|
|
|
|
*
|
|
|
|
* Copyright (C) 2011-2013 IBM Corporation
|
|
|
|
*
|
|
|
|
* Authors:
|
|
|
|
* Stefan Berger <stefanb@us.ibm.com>
|
|
|
|
*
|
|
|
|
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
|
|
|
* See the COPYING file in the top-level directory.
|
|
|
|
*/
|
2020-06-12 11:54:44 +03:00
|
|
|
#ifndef BACKENDS_TPM_INT_H
|
|
|
|
#define BACKENDS_TPM_INT_H
|
Support for TPM command line options
This patch adds support for TPM command line options.
The command line options supported here are
./qemu-... -tpmdev passthrough,path=<path to TPM device>,id=<id>
-device tpm-tis,tpmdev=<id>,id=<other id>
and
./qemu-... -tpmdev help
where the latter works similar to -soundhw help and shows a list of
available TPM backends (for example 'passthrough').
Using the type parameter, the backend is chosen, i.e., 'passthrough' for the
passthrough driver. The interpretation of the other parameters along
with determining whether enough parameters were provided is pushed into
the backend driver, which needs to implement the interface function
'create' and return a TPMDriverOpts structure if the VM can be started or
'NULL' if not enough or bad parameters were provided.
Monitor support for 'info tpm' has been added. It for example prints the
following:
(qemu) info tpm
TPM devices:
tpm0: model=tpm-tis
\ tpm0: type=passthrough,path=/dev/tpm0,cancel-path=/sys/devices/pnp0/00:09/cancel
Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
Reviewed-by: Corey Bryant <coreyb@linux.vnet.ibm.com>
Reviewed-by: Joel Schopp <jschopp@linux.vnet.ibm.com>
Message-id: 1361987275-26289-2-git-send-email-stefanb@linux.vnet.ibm.com
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
2013-02-27 21:47:49 +04:00
|
|
|
|
2020-06-12 11:54:37 +03:00
|
|
|
#include "qemu/option.h"
|
2020-06-12 11:54:41 +03:00
|
|
|
#include "sysemu/tpm.h"
|
2020-06-12 11:54:37 +03:00
|
|
|
|
2017-11-06 21:38:59 +03:00
|
|
|
#define TPM_STANDARD_CMDLINE_OPTS \
|
2013-04-22 18:41:39 +04:00
|
|
|
{ \
|
|
|
|
.name = "type", \
|
|
|
|
.type = QEMU_OPT_STRING, \
|
|
|
|
.help = "Type of TPM backend", \
|
|
|
|
}
|
|
|
|
|
2013-02-27 21:47:53 +04:00
|
|
|
struct tpm_req_hdr {
|
|
|
|
uint16_t tag;
|
|
|
|
uint32_t len;
|
|
|
|
uint32_t ordinal;
|
|
|
|
} QEMU_PACKED;
|
|
|
|
|
|
|
|
struct tpm_resp_hdr {
|
|
|
|
uint16_t tag;
|
|
|
|
uint32_t len;
|
|
|
|
uint32_t errcode;
|
|
|
|
} QEMU_PACKED;
|
|
|
|
|
|
|
|
#define TPM_TAG_RQU_COMMAND 0xc1
|
|
|
|
#define TPM_TAG_RQU_AUTH1_COMMAND 0xc2
|
|
|
|
#define TPM_TAG_RQU_AUTH2_COMMAND 0xc3
|
|
|
|
|
|
|
|
#define TPM_TAG_RSP_COMMAND 0xc4
|
|
|
|
#define TPM_TAG_RSP_AUTH1_COMMAND 0xc5
|
|
|
|
#define TPM_TAG_RSP_AUTH2_COMMAND 0xc6
|
|
|
|
|
2019-07-25 06:36:56 +03:00
|
|
|
#define TPM_BAD_PARAMETER 3
|
2013-02-27 21:47:53 +04:00
|
|
|
#define TPM_FAIL 9
|
2019-07-25 06:36:56 +03:00
|
|
|
#define TPM_KEYNOTFOUND 13
|
|
|
|
#define TPM_BAD_PARAM_SIZE 25
|
|
|
|
#define TPM_ENCRYPT_ERROR 32
|
|
|
|
#define TPM_DECRYPT_ERROR 33
|
|
|
|
#define TPM_BAD_KEY_PROPERTY 40
|
|
|
|
#define TPM_BAD_MODE 44
|
|
|
|
#define TPM_BAD_VERSION 46
|
|
|
|
#define TPM_BAD_LOCALITY 61
|
2013-02-27 21:47:53 +04:00
|
|
|
|
2015-02-23 17:27:19 +03:00
|
|
|
#define TPM_ORD_ContinueSelfTest 0x53
|
2013-02-27 21:47:53 +04:00
|
|
|
#define TPM_ORD_GetTicks 0xf1
|
2017-11-04 05:49:23 +03:00
|
|
|
#define TPM_ORD_GetCapability 0x65
|
2013-02-27 21:47:53 +04:00
|
|
|
|
2017-11-04 05:49:23 +03:00
|
|
|
#define TPM_CAP_PROPERTY 0x05
|
|
|
|
|
|
|
|
#define TPM_CAP_PROP_INPUT_BUFFER 0x124
|
2015-05-26 23:51:06 +03:00
|
|
|
|
|
|
|
/* TPM2 defines */
|
|
|
|
#define TPM2_ST_NO_SESSIONS 0x8001
|
|
|
|
|
|
|
|
#define TPM2_CC_ReadClock 0x00000181
|
2017-11-04 05:49:23 +03:00
|
|
|
#define TPM2_CC_GetCapability 0x0000017a
|
|
|
|
|
|
|
|
#define TPM2_CAP_TPM_PROPERTIES 0x6
|
|
|
|
|
|
|
|
#define TPM2_PT_MAX_COMMAND_SIZE 0x11e
|
2015-05-26 23:51:06 +03:00
|
|
|
|
2019-07-25 06:36:56 +03:00
|
|
|
#define TPM_RC_INSUFFICIENT 0x9a
|
|
|
|
#define TPM_RC_FAILURE 0x101
|
|
|
|
#define TPM_RC_LOCALITY 0x907
|
|
|
|
|
2020-06-12 11:54:41 +03:00
|
|
|
int tpm_util_get_buffer_size(int tpm_fd, TPMVersion tpm_version,
|
|
|
|
size_t *buffersize);
|
|
|
|
|
|
|
|
typedef struct TPMSizedBuffer {
|
|
|
|
uint32_t size;
|
|
|
|
uint8_t *buffer;
|
|
|
|
} TPMSizedBuffer;
|
|
|
|
|
|
|
|
void tpm_sized_buffer_reset(TPMSizedBuffer *tsb);
|
|
|
|
|
2020-06-12 11:54:44 +03:00
|
|
|
#endif /* BACKENDS_TPM_INT_H */
|