| /* |
| * 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 */ |