qemu/include/sysemu/tpm.h
<<
>>
Prefs
   1/*
   2 * Public TPM functions
   3 *
   4 * Copyright (C) 2011-2013 IBM Corporation
   5 *
   6 * Authors:
   7 *  Stefan Berger    <stefanb@us.ibm.com>
   8 *
   9 * This work is licensed under the terms of the GNU GPL, version 2 or later.
  10 * See the COPYING file in the top-level directory.
  11 */
  12#ifndef QEMU_TPM_H
  13#define QEMU_TPM_H
  14
  15#include "qapi/qapi-types-tpm.h"
  16#include "qom/object.h"
  17
  18int tpm_config_parse(QemuOptsList *opts_list, const char *optarg);
  19void tpm_init(void);
  20void tpm_cleanup(void);
  21
  22typedef enum TPMVersion {
  23    TPM_VERSION_UNSPEC = 0,
  24    TPM_VERSION_1_2 = 1,
  25    TPM_VERSION_2_0 = 2,
  26} TPMVersion;
  27
  28#define TYPE_TPM_IF "tpm-if"
  29#define TPM_IF_CLASS(klass)                                 \
  30    OBJECT_CLASS_CHECK(TPMIfClass, (klass), TYPE_TPM_IF)
  31#define TPM_IF_GET_CLASS(obj)                           \
  32    OBJECT_GET_CLASS(TPMIfClass, (obj), TYPE_TPM_IF)
  33#define TPM_IF(obj)                             \
  34    INTERFACE_CHECK(TPMIf, (obj), TYPE_TPM_IF)
  35
  36typedef struct TPMIf {
  37    Object parent_obj;
  38} TPMIf;
  39
  40typedef struct TPMIfClass {
  41    InterfaceClass parent_class;
  42
  43    enum TpmModel model;
  44    void (*request_completed)(TPMIf *obj, int ret);
  45    enum TPMVersion (*get_version)(TPMIf *obj);
  46} TPMIfClass;
  47
  48#define TYPE_TPM_TIS                "tpm-tis"
  49#define TYPE_TPM_CRB                "tpm-crb"
  50
  51#define TPM_IS_TIS(chr)                             \
  52    object_dynamic_cast(OBJECT(chr), TYPE_TPM_TIS)
  53#define TPM_IS_CRB(chr)                             \
  54    object_dynamic_cast(OBJECT(chr), TYPE_TPM_CRB)
  55
  56/* returns NULL unless there is exactly one TPM device */
  57static inline TPMIf *tpm_find(void)
  58{
  59    Object *obj = object_resolve_path_type("", TYPE_TPM_IF, NULL);
  60
  61    return TPM_IF(obj);
  62}
  63
  64static inline TPMVersion tpm_get_version(TPMIf *ti)
  65{
  66    if (!ti) {
  67        return TPM_VERSION_UNSPEC;
  68    }
  69
  70    return TPM_IF_GET_CLASS(ti)->get_version(ti);
  71}
  72
  73#endif /* QEMU_TPM_H */
  74