| /* | 
 |  * Minimal TPM emulator for TPM test cases | 
 |  * | 
 |  * Copyright (c) 2018 Red Hat, Inc. | 
 |  * | 
 |  * Authors: | 
 |  *   Marc-André Lureau <marcandre.lureau@redhat.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 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 */ |