mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-17 07:02:03 -06:00
QOM-ify the TPM support
QOM-ified the TPM support with much code borrowed from the rng implementation. All other TPM related code moves will be provided in a subsequent patch. Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com> Message-id: 1364469981.24703.1.camel@d941e-10 Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
684a096eaf
commit
8f0605cc9c
8 changed files with 413 additions and 59 deletions
170
include/backends/tpm.h
Normal file
170
include/backends/tpm.h
Normal file
|
@ -0,0 +1,170 @@
|
|||
/*
|
||||
* QEMU TPM Backend
|
||||
*
|
||||
* Copyright IBM, Corp. 2013
|
||||
*
|
||||
* 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 "qom/object.h"
|
||||
#include "qemu-common.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qapi-types.h"
|
||||
#include "qemu/option.h"
|
||||
#include "tpm/tpm.h"
|
||||
|
||||
#define TYPE_TPM_BACKEND "tpm-backend"
|
||||
#define TPM_BACKEND(obj) \
|
||||
OBJECT_CHECK(TPMBackend, (obj), TYPE_TPM_BACKEND)
|
||||
#define TPM_BACKEND_GET_CLASS(obj) \
|
||||
OBJECT_GET_CLASS(TPMBackendClass, (obj), TYPE_TPM_BACKEND)
|
||||
#define TPM_BACKEND_CLASS(klass) \
|
||||
OBJECT_CLASS_CHECK(TPMBackendClass, (klass), TYPE_TPM_BACKEND)
|
||||
|
||||
typedef struct TPMBackendClass TPMBackendClass;
|
||||
typedef struct TPMBackend TPMBackend;
|
||||
|
||||
typedef struct TPMDriverOps TPMDriverOps;
|
||||
|
||||
struct TPMBackendClass {
|
||||
ObjectClass parent_class;
|
||||
|
||||
const TPMDriverOps *ops;
|
||||
|
||||
void (*opened)(TPMBackend *s, Error **errp);
|
||||
};
|
||||
|
||||
struct TPMBackend {
|
||||
Object parent;
|
||||
|
||||
/*< protected >*/
|
||||
bool opened;
|
||||
|
||||
char *id;
|
||||
enum TpmModel fe_model;
|
||||
char *path;
|
||||
char *cancel_path;
|
||||
const TPMDriverOps *ops;
|
||||
|
||||
QLIST_ENTRY(TPMBackend) list;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* tpm_backend_get_type:
|
||||
* @s: the backend
|
||||
*
|
||||
* Returns the TpmType of the backend.
|
||||
*/
|
||||
enum TpmType tpm_backend_get_type(TPMBackend *s);
|
||||
|
||||
/**
|
||||
* tpm_backend_get_desc:
|
||||
* @s: the backend
|
||||
*
|
||||
* Returns a human readable description of the backend.
|
||||
*/
|
||||
const char *tpm_backend_get_desc(TPMBackend *s);
|
||||
|
||||
/**
|
||||
* tpm_backend_destroy:
|
||||
* @s: the backend to destroy
|
||||
*/
|
||||
void tpm_backend_destroy(TPMBackend *s);
|
||||
|
||||
/**
|
||||
* tpm_backend_init:
|
||||
* @s: the backend to initialized
|
||||
* @state: TPMState
|
||||
* @datacb: callback for sending data to frontend
|
||||
*
|
||||
* Initialize the backend with the given variables.
|
||||
*
|
||||
* Returns 0 on success.
|
||||
*/
|
||||
int tpm_backend_init(TPMBackend *s, TPMState *state,
|
||||
TPMRecvDataCB *datacb);
|
||||
|
||||
/**
|
||||
* tpm_backend_startup_tpm:
|
||||
* @s: the backend whose TPM support is to be started
|
||||
*
|
||||
* Returns 0 on success.
|
||||
*/
|
||||
int tpm_backend_startup_tpm(TPMBackend *s);
|
||||
|
||||
/**
|
||||
* tpm_backend_had_startup_error:
|
||||
* @s: the backend to query for a statup error
|
||||
*
|
||||
* Check whether the backend had an error during startup. Returns
|
||||
* false if no error occurred and the backend can be used, true
|
||||
* otherwise.
|
||||
*/
|
||||
bool tpm_backend_had_startup_error(TPMBackend *s);
|
||||
|
||||
/**
|
||||
* tpm_backend_realloc_buffer:
|
||||
* @s: the backend
|
||||
* @sb: the TPMSizedBuffer to re-allocated to the size suitable for the
|
||||
* backend.
|
||||
*
|
||||
* This function returns the size of the allocated buffer
|
||||
*/
|
||||
size_t tpm_backend_realloc_buffer(TPMBackend *s, TPMSizedBuffer *sb);
|
||||
|
||||
/**
|
||||
* tpm_backend_deliver_request:
|
||||
* @s: the backend to send the request to
|
||||
*
|
||||
* Send a request to the backend. The backend will then send the request
|
||||
* to the TPM implementation.
|
||||
*/
|
||||
void tpm_backend_deliver_request(TPMBackend *s);
|
||||
|
||||
/**
|
||||
* tpm_backend_reset:
|
||||
* @s: the backend to reset
|
||||
*
|
||||
* Reset the backend into a well defined state with all previous errors
|
||||
* reset.
|
||||
*/
|
||||
void tpm_backend_reset(TPMBackend *s);
|
||||
|
||||
/**
|
||||
* tpm_backend_cancel_cmd:
|
||||
* @s: the backend
|
||||
*
|
||||
* Cancel any ongoing command being processed by the TPM implementation
|
||||
* on behalf of the QEMU guest.
|
||||
*/
|
||||
void tpm_backend_cancel_cmd(TPMBackend *s);
|
||||
|
||||
/**
|
||||
* tpm_backend_get_tpm_established_flag:
|
||||
* @s: the backend
|
||||
*
|
||||
* Get the TPM establishment flag. This function may be called very
|
||||
* frequently by the frontend since for example in the TIS implementation
|
||||
* this flag is part of a register.
|
||||
*/
|
||||
bool tpm_backend_get_tpm_established_flag(TPMBackend *s);
|
||||
|
||||
/**
|
||||
* 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);
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue