/* * Minimal TPM emulator for TPM test cases * * Copyright (c) 2018 Red Hat, Inc. * * Authors: * Marc-André Lureau * * 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 TESTS_TPM_EMU_H #define TESTS_TPM_EMU_H #define TPM_RC_FAILURE 0x101 #define TPM2_ST_NO_SESSIONS 0x8001 #define TPM_FAIL 9 #define TPM_TAG_RSP_COMMAND 0xc4 #include "qemu/sockets.h" #include "io/channel.h" #include "sysemu/tpm.h" #include "libqtest.h" struct tpm_hdr { uint16_t tag; uint32_t len; uint32_t code; /*ordinal/error */ char buffer[]; } QEMU_PACKED; #ifndef CONFIG_TPM enum TPMVersion { TPM_VERSION_1_2 = 1, TPM_VERSION_2_0 = 2, }; #endif typedef struct TPMTestState { GMutex data_mutex; GCond data_cond; bool data_cond_signal; SocketAddress *addr; QIOChannel *tpm_ioc; GThread *emu_tpm_thread; struct tpm_hdr *tpm_msg; enum TPMVersion tpm_version; } TPMTestState; void tpm_emu_test_wait_cond(TPMTestState *s); void *tpm_emu_ctrl_thread(void *data); bool tpm_model_is_available(const char *args, const char *tpm_if); #endif /* TESTS_TPM_EMU_H */