diff options
author | Marc-André Lureau <marcandre.lureau@redhat.com> | 2017-10-10 00:55:45 +0200 |
---|---|---|
committer | Stefan Berger <stefanb@linux.vnet.ibm.com> | 2017-10-19 11:42:21 -0400 |
commit | f3faa1dff4dc4f3fea28ca847d57caa150c15683 (patch) | |
tree | fa586e5a08852bd13ad55e552a3992939b412953 /tpm.c | |
parent | 349ccdc89c1b76f6cdd9f8cdc412f0d806046d6b (diff) |
tpm: lookup tpm backend class in tpm_driver_find_by_type()
One step towards removing TPMDriverOps and driver registration.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
Diffstat (limited to 'tpm.c')
-rw-r--r-- | tpm.c | 29 |
1 files changed, 21 insertions, 8 deletions
@@ -47,6 +47,24 @@ void tpm_register_driver(const TPMDriverOps *tdo) be_drivers[tdo->type] = tdo; } +static const TPMDriverOps * +tpm_driver_find_by_type(enum TpmType type) +{ + ObjectClass *oc; + TPMBackendClass *bc; + char *typename = g_strdup_printf("tpm-%s", TpmType_str(type)); + + oc = object_class_by_name(typename); + g_free(typename); + + if (!object_class_dynamic_cast(oc, TYPE_TPM_BACKEND)) { + return NULL; + } + + bc = TPM_BACKEND_CLASS(oc); + return bc->ops; +} + /* * Walk the list of available TPM backend drivers and display them on the * screen. @@ -58,11 +76,11 @@ static void tpm_display_backend_drivers(void) fprintf(stderr, "Supported TPM types (choose only one):\n"); for (i = 0; i < TPM_TYPE__MAX; i++) { - if (be_drivers[i] == NULL) { + const TPMDriverOps *ops = tpm_driver_find_by_type(i); + if (!ops) { continue; } - fprintf(stderr, "%12s %s\n", - TpmType_str(i), be_drivers[i]->desc); + fprintf(stderr, "%12s %s\n", TpmType_str(i), ops->desc); } fprintf(stderr, "\n"); } @@ -196,11 +214,6 @@ int tpm_config_parse(QemuOptsList *opts_list, const char *optarg) #endif /* CONFIG_TPM */ -static const TPMDriverOps *tpm_driver_find_by_type(enum TpmType type) -{ - return be_drivers[type]; -} - /* * Walk the list of active TPM backends and collect information about them * following the schema description in qapi-schema.json. |