mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 17:53:56 -06:00
Merge tpm 2017/12/15 v1
-----BEGIN PGP SIGNATURE----- iQEcBAABAgAGBQJaM1MfAAoJEHWtZYAqC0IRAj8H/AgVHuAf5huzKZkju/OwQ4z0 MxQwNFHbBgT5reRCjK3JAxTviOHUR7JTVLFFyLIbHQDX+VRDoxXWsuVPNdAgd8SF bA/ywmKlQcYJrdyf1Fole4JY+ZIndkgtUJnwuvC4LWmt/s7LYsNlwOfnARkvtpul 0QH+mlJYv+EeEIjeJDNlgcqxFo4qr8HfuJi2/qC7IEXIHcTYNpdk6gh7auCUVvGl tojocW0Da0G0Ce1ncFIME9doWlBu0ZiU+b3mjjDf5OVtXiT6Xce3o9bNTWsboHia iuvyEaFU/wXbHkn+i/50/DIP6o+u9wJ4MmYp3uJKlpen0SZndZ+UFxcBY7ZrP4g= =s0pV -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/stefanberger/tags/pull-tpm-2017-12-15-1' into staging Merge tpm 2017/12/15 v1 # gpg: Signature made Fri 15 Dec 2017 04:44:15 GMT # gpg: using RSA key 0x75AD65802A0B4211 # gpg: Good signature from "Stefan Berger <stefanb@linux.vnet.ibm.com>" # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: B818 B9CA DF90 89C2 D5CE C66B 75AD 6580 2A0B 4211 * remotes/stefanberger/tags/pull-tpm-2017-12-15-1: (32 commits) tpm: tpm_passthrough: Fail startup if FE buffer size < BE buffer size tpm: tpm_emulator: get and set buffer size of device tpm: tpm_passthrough: Read the buffer size from the host device tpm: pull tpm_util_request() out of tpm_util_test() tpm: Move getting TPM buffer size to backends tpm: remove tpm_register_model() tpm-tis: use DEFINE_PROP_TPMBE qdev: add DEFINE_PROP_TPMBE tpm-tis: check that at most one TPM device exists tpm-tis: remove redundant 'tpm_tis:' in error messages tpm-emulator: add a FIXME comment about blocking cancel acpi: change TPM TIS data conditions tpm: add tpm_cmd_get_size() to tpm_util tpm: add TPM interface to lookup TPM version tpm: lookup the the TPM interface instead of TIS device tpm: rename qemu_find_tpm() -> qemu_find_tpm_be() tpm-tis: simplify header inclusion tpm-passthrough: workaround a possible race tpm-passthrough: simplify create() tpm-passthrough: make it safer to destroy after creation ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
411ad78115
14 changed files with 562 additions and 275 deletions
|
@ -12,35 +12,59 @@
|
|||
#ifndef QEMU_TPM_H
|
||||
#define QEMU_TPM_H
|
||||
|
||||
#include "qemu/option.h"
|
||||
#include "qom/object.h"
|
||||
|
||||
typedef struct TPMState TPMState;
|
||||
#include "qapi-types.h"
|
||||
|
||||
int tpm_config_parse(QemuOptsList *opts_list, const char *optarg);
|
||||
int tpm_init(void);
|
||||
void tpm_cleanup(void);
|
||||
|
||||
typedef enum TPMVersion {
|
||||
typedef enum TPMVersion {
|
||||
TPM_VERSION_UNSPEC = 0,
|
||||
TPM_VERSION_1_2 = 1,
|
||||
TPM_VERSION_2_0 = 2,
|
||||
} TPMVersion;
|
||||
|
||||
TPMVersion tpm_tis_get_tpm_version(Object *obj);
|
||||
#define TYPE_TPM_IF "tpm-if"
|
||||
#define TPM_IF_CLASS(klass) \
|
||||
OBJECT_CLASS_CHECK(TPMIfClass, (klass), TYPE_TPM_IF)
|
||||
#define TPM_IF_GET_CLASS(obj) \
|
||||
OBJECT_GET_CLASS(TPMIfClass, (obj), TYPE_TPM_IF)
|
||||
#define TPM_IF(obj) \
|
||||
INTERFACE_CHECK(TPMIf, (obj), TYPE_TPM_IF)
|
||||
|
||||
typedef struct TPMIf {
|
||||
Object parent_obj;
|
||||
} TPMIf;
|
||||
|
||||
typedef struct TPMIfClass {
|
||||
InterfaceClass parent_class;
|
||||
|
||||
enum TpmModel model;
|
||||
void (*request_completed)(TPMIf *obj);
|
||||
enum TPMVersion (*get_version)(TPMIf *obj);
|
||||
} TPMIfClass;
|
||||
|
||||
#define TYPE_TPM_TIS "tpm-tis"
|
||||
|
||||
static inline TPMVersion tpm_get_version(void)
|
||||
{
|
||||
#ifdef CONFIG_TPM
|
||||
Object *obj = object_resolve_path_type("", TYPE_TPM_TIS, NULL);
|
||||
#define TPM_IS_TIS(chr) \
|
||||
object_dynamic_cast(OBJECT(chr), TYPE_TPM_TIS)
|
||||
|
||||
if (obj) {
|
||||
return tpm_tis_get_tpm_version(obj);
|
||||
/* 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;
|
||||
}
|
||||
#endif
|
||||
return TPM_VERSION_UNSPEC;
|
||||
|
||||
return TPM_IF_GET_CLASS(ti)->get_version(ti);
|
||||
}
|
||||
|
||||
#endif /* QEMU_TPM_H */
|
||||
|
|
|
@ -43,14 +43,14 @@ struct TPMBackend {
|
|||
Object parent;
|
||||
|
||||
/*< protected >*/
|
||||
TPMIf *tpmif;
|
||||
bool opened;
|
||||
TPMState *tpm_state;
|
||||
GThreadPool *thread_pool;
|
||||
bool had_startup_error;
|
||||
QEMUBH *bh;
|
||||
|
||||
/* <public> */
|
||||
char *id;
|
||||
enum TpmModel fe_model;
|
||||
|
||||
QLIST_ENTRY(TPMBackend) list;
|
||||
};
|
||||
|
@ -63,24 +63,27 @@ struct TPMBackendClass {
|
|||
/* get a descriptive text of the backend to display to the user */
|
||||
const char *desc;
|
||||
|
||||
TPMBackend *(*create)(QemuOpts *opts, const char *id);
|
||||
TPMBackend *(*create)(QemuOpts *opts);
|
||||
|
||||
/* start up the TPM on the backend */
|
||||
int (*startup_tpm)(TPMBackend *t);
|
||||
/* start up the TPM on the backend - optional */
|
||||
int (*startup_tpm)(TPMBackend *t, size_t buffersize);
|
||||
|
||||
/* optional */
|
||||
void (*reset)(TPMBackend *t);
|
||||
|
||||
void (*cancel_cmd)(TPMBackend *t);
|
||||
|
||||
/* optional */
|
||||
bool (*get_tpm_established_flag)(TPMBackend *t);
|
||||
|
||||
/* optional */
|
||||
int (*reset_tpm_established_flag)(TPMBackend *t, uint8_t locty);
|
||||
|
||||
TPMVersion (*get_tpm_version)(TPMBackend *t);
|
||||
|
||||
TpmTypeOptions *(*get_tpm_options)(TPMBackend *t);
|
||||
size_t (*get_buffer_size)(TPMBackend *t);
|
||||
|
||||
void (*opened)(TPMBackend *s, Error **errp);
|
||||
TpmTypeOptions *(*get_tpm_options)(TPMBackend *t);
|
||||
|
||||
void (*handle_request)(TPMBackend *s, TPMBackendCmd *cmd);
|
||||
};
|
||||
|
@ -96,22 +99,25 @@ enum TpmType tpm_backend_get_type(TPMBackend *s);
|
|||
/**
|
||||
* tpm_backend_init:
|
||||
* @s: the backend to initialized
|
||||
* @state: TPMState
|
||||
* @tpmif: TPM interface
|
||||
* @datacb: callback for sending data to frontend
|
||||
* @errp: a pointer to return the #Error object if an error occurs.
|
||||
*
|
||||
* Initialize the backend with the given variables.
|
||||
*
|
||||
* Returns 0 on success.
|
||||
*/
|
||||
int tpm_backend_init(TPMBackend *s, TPMState *state);
|
||||
int tpm_backend_init(TPMBackend *s, TPMIf *tpmif, Error **errp);
|
||||
|
||||
/**
|
||||
* tpm_backend_startup_tpm:
|
||||
* @s: the backend whose TPM support is to be started
|
||||
* @buffersize: the buffer size the TPM is supposed to use,
|
||||
* 0 to leave it as-is
|
||||
*
|
||||
* Returns 0 on success.
|
||||
*/
|
||||
int tpm_backend_startup_tpm(TPMBackend *s);
|
||||
int tpm_backend_startup_tpm(TPMBackend *s, size_t buffersize);
|
||||
|
||||
/**
|
||||
* tpm_backend_had_startup_error:
|
||||
|
@ -170,16 +176,6 @@ bool tpm_backend_get_tpm_established_flag(TPMBackend *s);
|
|||
*/
|
||||
int tpm_backend_reset_tpm_established_flag(TPMBackend *s, uint8_t locty);
|
||||
|
||||
/**
|
||||
* tpm_backend_open:
|
||||
* @s: the backend to open
|
||||
* @errp: a pointer to return the #Error object if an error occurs.
|
||||
*
|
||||
* This function will open the backend if it is not already open. Calling this
|
||||
* function on an already opened backend will not result in an error.
|
||||
*/
|
||||
void tpm_backend_open(TPMBackend *s, Error **errp);
|
||||
|
||||
/**
|
||||
* tpm_backend_get_tpm_version:
|
||||
* @s: the backend to call into
|
||||
|
@ -190,6 +186,16 @@ void tpm_backend_open(TPMBackend *s, Error **errp);
|
|||
*/
|
||||
TPMVersion tpm_backend_get_tpm_version(TPMBackend *s);
|
||||
|
||||
/**
|
||||
* tpm_backend_get_buffer_size:
|
||||
* @s: the backend to call into
|
||||
*
|
||||
* Get the TPM's buffer size.
|
||||
*
|
||||
* Returns buffer size.
|
||||
*/
|
||||
size_t tpm_backend_get_buffer_size(TPMBackend *s);
|
||||
|
||||
/**
|
||||
* tpm_backend_query_tpm:
|
||||
* @s: the backend
|
||||
|
@ -200,8 +206,6 @@ TPMVersion tpm_backend_get_tpm_version(TPMBackend *s);
|
|||
*/
|
||||
TPMInfo *tpm_backend_query_tpm(TPMBackend *s);
|
||||
|
||||
TPMBackend *qemu_find_tpm(const char *id);
|
||||
|
||||
void tpm_register_model(enum TpmModel model);
|
||||
TPMBackend *qemu_find_tpm_be(const char *id);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue