This patch provides HMP 'info tpm', QMP 'query-tpm' and QMP 'query-tpm-types' support for the libtpms TPM backend.
Signed-off-by: Corey Bryant <cor...@linux.vnet.ibm.com> --- hmp.c | 5 +++++ include/sysemu/tpm_backend.h | 1 + qapi-schema.json | 18 ++++++++++++++++-- tpm.c | 7 +++++++ 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/hmp.c b/hmp.c index 32ee285..0903969 100644 --- a/hmp.c +++ b/hmp.c @@ -673,6 +673,7 @@ void hmp_info_tpm(Monitor *mon, const QDict *qdict) Error *err = NULL; unsigned int c = 0; TPMPassthroughOptions *tpo; + TPMLibtpmsOptions *tlo; info_list = qmp_query_tpm(&err); if (err) { @@ -702,6 +703,10 @@ 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_LIBTPMS: + tlo = ti->options->libtpms; + monitor_printf(mon, ",nvram=%s", tlo->nvram); + break; case TPM_TYPE_OPTIONS_KIND_MAX: break; } diff --git a/include/sysemu/tpm_backend.h b/include/sysemu/tpm_backend.h index c7a7281..e648f79 100644 --- a/include/sysemu/tpm_backend.h +++ b/include/sysemu/tpm_backend.h @@ -51,6 +51,7 @@ struct TPMBackend { enum TpmModel fe_model; char *path; char *cancel_path; + char *nvram_id; const TPMDriverOps *ops; QLIST_ENTRY(TPMBackend) list; diff --git a/qapi-schema.json b/qapi-schema.json index 81a375b..564e529 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -3673,10 +3673,11 @@ # An enumeration of TPM types # # @passthrough: TPM passthrough type +# @libtpms: TPM libtpms type # # Since: 1.5 ## -{ 'enum': 'TpmType', 'data': [ 'passthrough' ] } +{ 'enum': 'TpmType', 'data': [ 'passthrough', 'libtpms' ] } ## # @query-tpm-types: @@ -3705,16 +3706,29 @@ '*cancel-path' : 'str'} } ## +# @TPMLibtpmsOptions: +# +# Information about the TPM libtpms type +# +# @nvram: string showing the NVRAM drive id +# +# Since: 1.8 +## +{ 'type': 'TPMLibtpmsOptions', 'data': { 'nvram' : 'str' } } + +## # @TpmTypeOptions: # # A union referencing different TPM backend types' configuration options # # @passthrough: The configuration options for the TPM passthrough type +# @libtpms: The configuration options for the TPM libtpms type # # Since: 1.5 ## { 'union': 'TpmTypeOptions', - 'data': { 'passthrough' : 'TPMPassthroughOptions' } } + 'data': { 'passthrough' : 'TPMPassthroughOptions', + 'libtpms' : 'TPMLibtpmsOptions' } } ## # @TpmInfo: diff --git a/tpm.c b/tpm.c index 1dd516b..2f4ef52 100644 --- a/tpm.c +++ b/tpm.c @@ -275,6 +275,7 @@ static TPMInfo *qmp_query_tpm_inst(TPMBackend *drv) { TPMInfo *res = g_new0(TPMInfo, 1); TPMPassthroughOptions *tpo; + TPMLibtpmsOptions *tlo; res->id = g_strdup(drv->id); res->model = drv->fe_model; @@ -294,6 +295,12 @@ static TPMInfo *qmp_query_tpm_inst(TPMBackend *drv) tpo->has_cancel_path = true; } break; + case TPM_TYPE_LIBTPMS: + res->options->kind = TPM_TYPE_OPTIONS_KIND_LIBTPMS; + tlo = g_new0(TPMLibtpmsOptions, 1); + res->options->libtpms = tlo; + tlo->nvram = g_strdup(drv->nvram_id); + break; case TPM_TYPE_MAX: break; } -- 1.7.1