DM: Add support for virtual TPM enabling

Support TPM enable option when launch UOS.

New option: "--vtpm sock_path=$PATH_OF_SWTPM_SOCKET".
If valid option parsed, then init virtual tpm device.

Tracked-On: #1924
Signed-off-by: Qi Yadong <yadong.qi@intel.com>
Reviewed-by: Zhu Bing <bing.zhu@intel.com>
Reviewed-by: Jason Chen CJ <jason.cj.chen@intel.com>
Acked-by: Yin Fengwei <fengwei.yin@intel.com>
This commit is contained in:
Qi Yadong
2018-08-16 13:58:24 +08:00
committed by lijinxia
parent 7df90a2527
commit aae70db6b9
4 changed files with 106 additions and 0 deletions

View File

@@ -64,6 +64,7 @@
#include "atomic.h"
#include "vmcfg_config.h"
#include "vmcfg.h"
#include "tpm.h"
#define GUEST_NIO_PORT 0x488 /* guest upcalls via i/o port */
@@ -157,6 +158,7 @@ usage(int code)
" --ptdev_no_reset: disable reset check for ptdev\n"
" --debugexit: enable debug exit function\n"
" --intr_monitor: enable interrupt storm monitor\n"
" --vtpm2: Virtual TPM2 args: sock_path=$PATH_OF_SWTPM_SOCKET\n"
"............its params: threshold/s,probe-period(s),delay_time(ms),delay_duration(ms)\n",
progname, (int)strlen(progname), "", (int)strlen(progname), "",
(int)strlen(progname), "");
@@ -446,6 +448,8 @@ vm_init_vdevs(struct vmctx *ctx)
if (ret < 0)
goto pci_fail;
init_vtpm2(ctx);
return 0;
pci_fail:
@@ -480,6 +484,7 @@ vm_deinit_vdevs(struct vmctx *ctx)
atkbdc_deinit(ctx);
pci_irq_deinit(ctx);
ioapic_deinit();
deinit_vtpm2(ctx);
}
static void
@@ -703,6 +708,7 @@ enum {
CMD_OPT_VMCFG,
CMD_OPT_DUMP,
CMD_OPT_INTR_MONITOR,
CMD_OPT_VTPM2,
};
static struct option long_options[] = {
@@ -737,6 +743,7 @@ static struct option long_options[] = {
CMD_OPT_PTDEV_NO_RESET},
{"debugexit", no_argument, 0, CMD_OPT_DEBUGEXIT},
{"intr_monitor", required_argument, 0, CMD_OPT_INTR_MONITOR},
{"vtpm2", required_argument, 0, CMD_OPT_VTPM2},
{0, 0, 0, 0 },
};
@@ -860,6 +867,11 @@ dm_run(int argc, char *argv[])
break;
case CMD_OPT_DEBUGEXIT:
debugexit_enabled = true;
case CMD_OPT_VTPM2:
if (acrn_parse_vtpm2(optarg) != 0) {
errx(EX_USAGE, "invalid vtpm2 param %s", optarg);
exit(1);
}
break;
case CMD_OPT_INTR_MONITOR:
if (acrn_parse_intr_monitor(optarg) != 0) {