qemu/tests/qtest/tpm-emu.h
<<
>>
Prefs
   1/*
   2 * Minimal TPM emulator for TPM test cases
   3 *
   4 * Copyright (c) 2018 Red Hat, Inc.
   5 *
   6 * Authors:
   7 *   Marc-André Lureau <marcandre.lureau@redhat.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
  13#ifndef TESTS_TPM_EMU_H
  14#define TESTS_TPM_EMU_H
  15
  16#define TPM_RC_FAILURE 0x101
  17#define TPM2_ST_NO_SESSIONS 0x8001
  18
  19#define TPM_FAIL 9
  20#define TPM_TAG_RSP_COMMAND 0xc4
  21
  22#include "qemu/sockets.h"
  23#include "io/channel.h"
  24#include "sysemu/tpm.h"
  25#include "libqtest.h"
  26
  27struct tpm_hdr {
  28    uint16_t tag;
  29    uint32_t len;
  30    uint32_t code; /*ordinal/error */
  31    char buffer[];
  32} QEMU_PACKED;
  33
  34#ifndef CONFIG_TPM
  35enum TPMVersion {
  36    TPM_VERSION_1_2 = 1,
  37    TPM_VERSION_2_0 = 2,
  38};
  39#endif
  40
  41typedef struct TPMTestState {
  42    GMutex data_mutex;
  43    GCond data_cond;
  44    bool data_cond_signal;
  45    SocketAddress *addr;
  46    QIOChannel *tpm_ioc;
  47    GThread *emu_tpm_thread;
  48    struct tpm_hdr *tpm_msg;
  49    enum TPMVersion tpm_version;
  50} TPMTestState;
  51
  52void tpm_emu_test_wait_cond(TPMTestState *s);
  53void *tpm_emu_ctrl_thread(void *data);
  54bool tpm_model_is_available(const char *args, const char *tpm_if);
  55
  56#endif /* TESTS_TPM_EMU_H */
  57