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 17:47:49 +00: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.
|
|
|
|
*/
|
|
|
|
#ifndef TPM_TPM_INT_H
|
|
|
|
#define TPM_TPM_INT_H
|
|
|
|
|
|
|
|
#include "exec/memory.h"
|
2013-04-02 16:28:41 +00:00
|
|
|
#include "tpm_tis.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 17:47:49 +00:00
|
|
|
|
|
|
|
/* overall state of the TPM interface */
|
2013-04-02 20:14:51 +00:00
|
|
|
struct TPMState {
|
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 17:47:49 +00:00
|
|
|
ISADevice busdev;
|
|
|
|
MemoryRegion mmio;
|
|
|
|
|
|
|
|
union {
|
|
|
|
TPMTISEmuState tis;
|
|
|
|
} s;
|
|
|
|
|
|
|
|
uint8_t locty_number;
|
|
|
|
TPMLocality *locty_data;
|
|
|
|
|
|
|
|
char *backend;
|
|
|
|
TPMBackend *be_driver;
|
2015-05-26 20:51:05 +00:00
|
|
|
TPMVersion be_tpm_version;
|
2013-04-02 20:14:51 +00:00
|
|
|
};
|
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 17:47:49 +00:00
|
|
|
|
|
|
|
#define TPM(obj) OBJECT_CHECK(TPMState, (obj), TYPE_TPM_TIS)
|
|
|
|
|
2013-04-22 14:41:39 +00:00
|
|
|
#define TPM_STANDARD_CMDLINE_OPTS \
|
|
|
|
{ \
|
|
|
|
.name = "type", \
|
|
|
|
.type = QEMU_OPT_STRING, \
|
|
|
|
.help = "Type of TPM backend", \
|
|
|
|
}
|
|
|
|
|
2013-02-27 17:47:53 +00: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
|
|
|
|
|
|
|
|
#define TPM_FAIL 9
|
|
|
|
|
2015-02-23 14:27:19 +00:00
|
|
|
#define TPM_ORD_ContinueSelfTest 0x53
|
2013-02-27 17:47:53 +00:00
|
|
|
#define TPM_ORD_GetTicks 0xf1
|
|
|
|
|
2015-05-26 20:51:06 +00:00
|
|
|
|
|
|
|
/* TPM2 defines */
|
|
|
|
#define TPM2_ST_NO_SESSIONS 0x8001
|
|
|
|
|
|
|
|
#define TPM2_CC_ReadClock 0x00000181
|
|
|
|
|
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 17:47:49 +00:00
|
|
|
#endif /* TPM_TPM_INT_H */
|