| /* |
| * Public TPM functions |
| * |
| * Copyright (C) 2011-2013 IBM Corporation |
| * |
| * Authors: |
| * Stefan Berger <stefanb@us.ibm.com> |
| * |
| * This work is licensed under the terms of the GNU GPL, version 2 or later. |
| * See the COPYING file in the top-level directory. |
| */ |
| #ifndef QEMU_TPM_H |
| #define QEMU_TPM_H |
| |
| #include "qapi/qapi-types-tpm.h" |
| #include "qom/object.h" |
| |
| #ifdef CONFIG_TPM |
| |
| int tpm_config_parse(QemuOptsList *opts_list, const char *optarg); |
| int tpm_init(void); |
| void tpm_cleanup(void); |
| |
| typedef enum TPMVersion { |
| TPM_VERSION_UNSPEC = 0, |
| TPM_VERSION_1_2 = 1, |
| TPM_VERSION_2_0 = 2, |
| } TPMVersion; |
| |
| #define TYPE_TPM_IF "tpm-if" |
| typedef struct TPMIfClass TPMIfClass; |
| DECLARE_CLASS_CHECKERS(TPMIfClass, TPM_IF, |
| TYPE_TPM_IF) |
| #define TPM_IF(obj) \ |
| INTERFACE_CHECK(TPMIf, (obj), TYPE_TPM_IF) |
| |
| typedef struct TPMIf TPMIf; |
| |
| struct TPMIfClass { |
| InterfaceClass parent_class; |
| |
| enum TpmModel model; |
| void (*request_completed)(TPMIf *obj, int ret); |
| enum TPMVersion (*get_version)(TPMIf *obj); |
| }; |
| |
| #define TYPE_TPM_TIS_ISA "tpm-tis" |
| #define TYPE_TPM_TIS_SYSBUS "tpm-tis-device" |
| #define TYPE_TPM_CRB "tpm-crb" |
| #define TYPE_TPM_SPAPR "tpm-spapr" |
| |
| #define TPM_IS_TIS_ISA(chr) \ |
| object_dynamic_cast(OBJECT(chr), TYPE_TPM_TIS_ISA) |
| #define TPM_IS_TIS_SYSBUS(chr) \ |
| object_dynamic_cast(OBJECT(chr), TYPE_TPM_TIS_SYSBUS) |
| #define TPM_IS_CRB(chr) \ |
| object_dynamic_cast(OBJECT(chr), TYPE_TPM_CRB) |
| #define TPM_IS_SPAPR(chr) \ |
| object_dynamic_cast(OBJECT(chr), TYPE_TPM_SPAPR) |
| |
| /* returns NULL unless there is exactly one TPM device */ |
| static inline TPMIf *tpm_find(void) |
| { |
| Object *obj = object_resolve_path_type("", TYPE_TPM_IF, NULL); |
| |
| return TPM_IF(obj); |
| } |
| |
| static inline TPMVersion tpm_get_version(TPMIf *ti) |
| { |
| if (!ti) { |
| return TPM_VERSION_UNSPEC; |
| } |
| |
| return TPM_IF_GET_CLASS(ti)->get_version(ti); |
| } |
| |
| #else /* CONFIG_TPM */ |
| |
| #define tpm_init() (0) |
| #define tpm_cleanup() |
| |
| /* needed for an alignment check in non-tpm code */ |
| static inline Object *TPM_IS_CRB(Object *obj) |
| { |
| return NULL; |
| } |
| |
| #endif /* CONFIG_TPM */ |
| |
| #endif /* QEMU_TPM_H */ |