--Changes in v4:
-qapi schema enhancement.
-remove no need code.
Signed-off-by: Quan Xu quan...@intel.com
---
configure| 14 ++
hmp.c| 2 ++
qapi-schema.json | 18 --
qemu-options.hx | 13 +++--
tpm.c| 7 ++-
5 files changed, 49 insertions(+), 5 deletions(-)
diff --git a/configure b/configure
index a9e4d49..d63b8a1 100755
--- a/configure
+++ b/configure
@@ -2942,6 +2942,16 @@ else
fi
##
+# TPM xenstubdoms is only on x86 Linux
+
+if test $targetos = Linux test $cpu = i386 -o $cpu = x86_64 \
+ test $xen = yes; then
+ tpm_xenstubdoms=$tpm
+else
+ tpm_xenstubdoms=no
+fi
+
+##
# attr probe
if test $attr != no ; then
@@ -4333,6 +4343,7 @@ echo gcov $gcov_tool
echo gcov enabled $gcov
echo TPM support $tpm
echo libssh2 support $libssh2
+echo TPM xenstubdoms $tpm_xenstubdoms
echo TPM passthrough $tpm_passthrough
echo QOM debugging $qom_cast_debug
echo vhdx $vhdx
@@ -4810,6 +4821,9 @@ if test $tpm = yes; then
if test $tpm_passthrough = yes; then
echo CONFIG_TPM_PASSTHROUGH=y $config_host_mak
fi
+ if test $tpm_xenstubdoms = yes; then
+echo CONFIG_TPM_XENSTUBDOMS=y $config_host_mak
+ fi
fi
echo TRACE_BACKENDS=$trace_backends $config_host_mak
diff --git a/hmp.c b/hmp.c
index 63d7686..5662cb6 100644
--- a/hmp.c
+++ b/hmp.c
@@ -718,6 +718,8 @@ void hmp_info_tpm(Monitor *mon, const QDict *qdict)
tpo-has_cancel_path ? ,cancel-path= : ,
tpo-has_cancel_path ? tpo-cancel_path : );
break;
+case TPM_TYPE_OPTIONS_KIND_XENSTUBDOMS:
+break;
case TPM_TYPE_OPTIONS_KIND_MAX:
break;
}
diff --git a/qapi-schema.json b/qapi-schema.json
index 24379ab..3f5c212 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -2854,9 +2854,11 @@
#
# @passthrough: TPM passthrough type
#
+# @xenstubdoms: TPM xenstubdoms type (since 2.3)
+#
# Since: 1.5
##
-{ 'enum': 'TpmType', 'data': [ 'passthrough' ] }
+{ 'enum': 'TpmType', 'data': [ 'passthrough', 'xenstubdoms' ] }
##
# @query-tpm-types:
@@ -2884,6 +2886,16 @@
{ 'type': 'TPMPassthroughOptions', 'data': { '*path' : 'str',
'*cancel-path' : 'str'} }
+# @TPMXenstubdomsOptions:
+#
+# Information about the TPM xenstubdoms type
+#
+# Since: 2.3
+##
+{ 'type': 'TPMXenstubdomsOptions', 'data': { } }
+#
+##
+
##
# @TpmTypeOptions:
#
@@ -2894,7 +2906,9 @@
# Since: 1.5
##
{ 'union': 'TpmTypeOptions',
- 'data': { 'passthrough' : 'TPMPassthroughOptions' } }
+ 'data': { 'passthrough' : 'TPMPassthroughOptions',
+'xenstubdoms' : 'TPMXenstubdomsOptions' } }
+##
##
# @TpmInfo:
diff --git a/qemu-options.hx b/qemu-options.hx
index 1e7d5b8..fd73f57 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -2485,7 +2485,8 @@ DEF(tpmdev, HAS_ARG, QEMU_OPTION_tpmdev, \
-tpmdev passthrough,id=id[,path=path][,cancel-path=path]\n
use path to provide path to a character device; default
is /dev/tpm0\n
use cancel-path to provide path to TPM's cancel sysfs
entry; if\n
-not provided it will be searched for in
/sys/class/misc/tpm?/device\n,
+not provided it will be searched for in
/sys/class/misc/tpm?/device\n
+-tpmdev xenstubdoms,id=id\n,
QEMU_ARCH_ALL)
STEXI
@@ -2495,7 +2496,8 @@ The general form of a TPM device option is:
@item -tpmdev @var{backend} ,id=@var{id} [,@var{options}]
@findex -tpmdev
Backend type must be:
-@option{passthrough}.
+@option{passthrough}, or
+@option{xenstubdoms}.
The specific backend type will determine the applicable options.
The @code{-tpmdev} option creates the TPM backend and requires a
@@ -2545,6 +2547,13 @@ To create a passthrough TPM use the following two
options:
Note that the @code{-tpmdev} id is @code{tpm0} and is referenced by
@code{tpmdev=tpm0} in the device option.
+To create a xenstubdoms TPM use the following two options:
+@example
+-tpmdev xenstubdoms,id=tpm0 -device tpm-tis,tpmdev=tpm0
+@end example
+Note that the @code{-tpmdev} id is @code{tpm0} and is referenced by
+@code{tpmdev=tpm0} in the device option.
+
@end table
ETEXI
diff --git a/tpm.c b/tpm.c
index c371023..ee9acb8 100644
--- a/tpm.c
+++ b/tpm.c
@@ -25,7 +25,7 @@ static QLIST_HEAD(, TPMBackend) tpm_backends =
#define TPM_MAX_MODELS 1
-#define TPM_MAX_DRIVERS 1
+#define TPM_MAX_DRIVERS 2
static TPMDriverOps const *be_drivers[TPM_MAX_DRIVERS] = {
NULL,
@@ -256,6 +256,7 @@ static TPMInfo *qmp_query_tpm_inst(TPMBackend *drv)
{
TPMInfo *res = g_new0(TPMInfo, 1);
TPMPassthroughOptions *tpo;
+TPMXenstubdomsOptions *txo;
res-id = g_strdup(drv-id);
res-model = drv-fe_model;
@@ -275,6 +276,10 @@ static TPMInfo