On Tue, 2017-10-10 at 00:55 +0200, Marc-André Lureau wrote: > Use TPMBackendClass to hold class methods/fields. > > Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com> > --- > include/sysemu/tpm_backend.h | 15 +++++---------- > backends/tpm.c | 31 ++++++++++++++++--------------- > hw/tpm/tpm_emulator.c | 29 ++++++++++++----------------- > hw/tpm/tpm_passthrough.c | 25 +++++++++++-------------- > tpm.c | 20 +++++++++----------- > scripts/checkpatch.pl | 1 - > 6 files changed, 53 insertions(+), 68 deletions(-) > > diff --git a/include/sysemu/tpm_backend.h > b/include/sysemu/tpm_backend.h > index 63093551a1..a4288df038 100644 > --- a/include/sysemu/tpm_backend.h > +++ b/include/sysemu/tpm_backend.h > @@ -29,7 +29,7 @@ > > typedef struct TPMBackendClass TPMBackendClass; > typedef struct TPMBackend TPMBackend; > -typedef struct TPMDriverOps TPMDriverOps; > + > typedef void (TPMRecvDataCB)(TPMState *, uint8_t locty, bool > selftest_done); > > typedef enum TPMBackendCmd { > @@ -59,14 +59,6 @@ struct TPMBackend { > struct TPMBackendClass { > ObjectClass parent_class; > > - const TPMDriverOps *ops; > - > - void (*opened)(TPMBackend *s, Error **errp); > - > - void (*handle_request)(TPMBackend *s, TPMBackendCmd cmd); > -}; > - > -struct TPMDriverOps { > enum TpmType type; > const QemuOptDesc *opts; > /* get a descriptive text of the backend to display to the user > */ > @@ -90,8 +82,11 @@ struct TPMDriverOps { > TPMVersion (*get_tpm_version)(TPMBackend *t); > > TpmTypeOptions *(*get_tpm_options)(TPMBackend *t); > -}; > > + void (*opened)(TPMBackend *s, Error **errp); > + > + void (*handle_request)(TPMBackend *s, TPMBackendCmd cmd); > +}; > > /** > * tpm_backend_get_type: > diff --git a/backends/tpm.c b/backends/tpm.c > index 37c84b7c66..ca3a78eea8 100644 > --- a/backends/tpm.c > +++ b/backends/tpm.c > @@ -41,7 +41,7 @@ enum TpmType tpm_backend_get_type(TPMBackend *s) > { > TPMBackendClass *k = TPM_BACKEND_GET_CLASS(s); > > - return k->ops->type; > + return k->type; > } > > int tpm_backend_init(TPMBackend *s, TPMState *state, > @@ -53,7 +53,7 @@ int tpm_backend_init(TPMBackend *s, TPMState > *state, > s->recv_data_callback = datacb; > s->had_startup_error = false; > > - return k->ops->init ? k->ops->init(s) : 0; > + return k->init ? k->init(s) : 0; > } > > int tpm_backend_startup_tpm(TPMBackend *s) > @@ -68,7 +68,7 @@ int tpm_backend_startup_tpm(TPMBackend *s) > NULL); > g_thread_pool_push(s->thread_pool, > (gpointer)TPM_BACKEND_CMD_INIT, NULL); > > - res = k->ops->startup_tpm ? k->ops->startup_tpm(s) : 0; > + res = k->startup_tpm ? k->startup_tpm(s) : 0; > > s->had_startup_error = (res != 0); > > @@ -90,8 +90,8 @@ void tpm_backend_reset(TPMBackend *s) > { > TPMBackendClass *k = TPM_BACKEND_GET_CLASS(s); > > - if (k->ops->reset) { > - k->ops->reset(s); > + if (k->reset) { > + k->reset(s); > } > > tpm_backend_thread_end(s); > @@ -103,34 +103,34 @@ void tpm_backend_cancel_cmd(TPMBackend *s) > { > TPMBackendClass *k = TPM_BACKEND_GET_CLASS(s); > > - assert(k->ops->cancel_cmd); > + assert(k->cancel_cmd); > > - k->ops->cancel_cmd(s); > + k->cancel_cmd(s); > } > > bool tpm_backend_get_tpm_established_flag(TPMBackend *s) > { > TPMBackendClass *k = TPM_BACKEND_GET_CLASS(s); > > - return k->ops->get_tpm_established_flag ? > - k->ops->get_tpm_established_flag(s) : false; > + return k->get_tpm_established_flag ? > + k->get_tpm_established_flag(s) : false; > } > > int tpm_backend_reset_tpm_established_flag(TPMBackend *s, uint8_t > locty) > { > TPMBackendClass *k = TPM_BACKEND_GET_CLASS(s); > > - return k->ops->reset_tpm_established_flag ? > - k->ops->reset_tpm_established_flag(s, locty) : 0; > + return k->reset_tpm_established_flag ? > + k->reset_tpm_established_flag(s, locty) : 0; > } > > TPMVersion tpm_backend_get_tpm_version(TPMBackend *s) > { > TPMBackendClass *k = TPM_BACKEND_GET_CLASS(s); > > - assert(k->ops->get_tpm_version); > + assert(k->get_tpm_version); > > - return k->ops->get_tpm_version(s); > + return k->get_tpm_version(s); > } > > TPMInfo *tpm_backend_query_tpm(TPMBackend *s) > @@ -140,8 +140,9 @@ TPMInfo *tpm_backend_query_tpm(TPMBackend *s) > > info->id = g_strdup(s->id); > info->model = s->fe_model; > - info->options = k->ops->get_tpm_options ? > - k->ops->get_tpm_options(s) : NULL; > + if (k->get_tpm_options) { > + info->options = k->get_tpm_options(s); > + } > > return info; > } > diff --git a/hw/tpm/tpm_emulator.c b/hw/tpm/tpm_emulator.c > index 9e24a5f30e..bb5a65b492 100644 > --- a/hw/tpm/tpm_emulator.c > +++ b/hw/tpm/tpm_emulator.c > @@ -60,8 +60,6 @@ > > #define TPM_EMULATOR_IMPLEMENTS_ALL_CAPS(S, cap) (((S)->caps & > (cap)) == (cap)) > > -static const TPMDriverOps tpm_emulator_driver; > - > /* data structures */ > typedef struct TPMEmulator { > TPMBackend parent; > @@ -504,20 +502,6 @@ static const QemuOptDesc > tpm_emulator_cmdline_opts[] = { > { /* end of list */ }, > }; > > -static const TPMDriverOps tpm_emulator_driver = { > - .type = TPM_TYPE_EMULATOR, We can remove 'type' from class, and even tpm_backend_get_type() API also from backend, there are no takers for this.
> - .opts = tpm_emulator_cmdline_opts, > - .desc = "TPM emulator backend driver", And i feel, the above two members are better suited for Object members than Class. - Amarnath