Signed-off-by: Andreas Niederl <andreas.nied...@iaik.tugraz.at> --- hw/pc.h | 5 +++++ qemu-config.c | 12 ++++++++++++ qemu-config.h | 1 + qemu-options.hx | 6 ++++++ vl.c | 25 +++++++++++++++++++++++++ 5 files changed, 49 insertions(+), 0 deletions(-)
diff --git a/hw/pc.h b/hw/pc.h index 63b0249..d95020c 100644 --- a/hw/pc.h +++ b/hw/pc.h @@ -176,4 +176,9 @@ void isa_ne2000_init(int base, int irq, NICInfo *nd); int e820_add_entry(uint64_t, uint64_t, uint32_t); +#ifdef CONFIG_TPM +/* tpm.c */ +extern int tpm_init(QemuOpts *opts); +#endif + #endif diff --git a/qemu-config.c b/qemu-config.c index 3abe655..aedca13 100644 --- a/qemu-config.c +++ b/qemu-config.c @@ -336,6 +336,18 @@ static QemuOptsList qemu_cpudef_opts = { }, }; +QemuOptsList qemu_tpm_opts = { + .name = "tpm", + .head = QTAILQ_HEAD_INITIALIZER(qemu_tpm_opts.head), + .desc = { + { + .name = "dev", + .type = QEMU_OPT_STRING, + }, + { /*End of list */ } + }, +}; + static QemuOptsList *vm_config_groups[32] = { &qemu_drive_opts, &qemu_chardev_opts, diff --git a/qemu-config.h b/qemu-config.h index 533a049..492a35d 100644 --- a/qemu-config.h +++ b/qemu-config.h @@ -3,6 +3,7 @@ extern QemuOptsList qemu_fsdev_opts; extern QemuOptsList qemu_virtfs_opts; +extern QemuOptsList qemu_tpm_opts; QemuOptsList *qemu_find_opts(const char *group); void qemu_add_opts(QemuOptsList *list); diff --git a/qemu-options.hx b/qemu-options.hx index 453f129..771990b 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -2230,6 +2230,12 @@ Normally QEMU loads a configuration file from @var{sysconfdir}/qemu.conf and @var{sysconfdir}/targ...@var{arch}.conf on startup. The @code{-nodefconfig} option will prevent QEMU from loading these configuration files at startup. ETEXI +#ifdef CONFIG_TPM +DEF("tpm", HAS_ARG, QEMU_OPTION_tpm, + "-tpm dev=<device>\n" + " enable TPM support and forward commands to the given TPM device file\n", + QEMU_ARCH_I386) +#endif HXCOMM This is the last statement. Insert new options before this line! STEXI diff --git a/vl.c b/vl.c index 91d1684..fe35f49 100644 --- a/vl.c +++ b/vl.c @@ -1541,6 +1541,16 @@ static int fsdev_init_func(QemuOpts *opts, void *opaque) } #endif +#ifdef CONFIG_TPM +static int tpm_init_func(QemuOpts *opts, void *opaque) +{ + if (tpm_init(opts) != 0) { + return 1; + } + return 0; +} +#endif + static int mon_init_func(QemuOpts *opts, void *opaque) { CharDriverState *chr; @@ -1860,6 +1870,10 @@ int main(int argc, char **argv, char **envp) qemu_add_opts(&qemu_virtfs_opts); #endif +#ifdef CONFIG_TPM + qemu_add_opts(&qemu_tpm_opts); +#endif + /* first pass of option parsing */ optind = 1; while (optind < argc) { @@ -2360,6 +2374,12 @@ int main(int argc, char **argv, char **envp) qemu_free(arg_9p); break; } + case QEMU_OPTION_tpm: + opts = qemu_opts_parse(&qemu_tpm_opts, optarg, 0); + if (!opts) { + exit(1); + } + break; case QEMU_OPTION_serial: add_device_config(DEV_SERIAL, optarg); default_serial = 0; @@ -2713,6 +2733,11 @@ int main(int argc, char **argv, char **envp) exit(1); } #endif +#ifdef CONFIG_TPM + if (qemu_opts_foreach(&qemu_tpm_opts, tpm_init_func, NULL, 1) != 0) { + exit(1); + } +#endif os_daemonize(); -- 1.7.2.2