1b21373d0SStefan Berger /* 2b21373d0SStefan Berger * QTest TPM utilities 3b21373d0SStefan Berger * 4b21373d0SStefan Berger * Copyright (c) 2018 IBM Corporation 5b21373d0SStefan Berger * 6b21373d0SStefan Berger * Authors: 7b21373d0SStefan Berger * Stefan Berger <stefanb@linux.vnet.ibm.com> 8b21373d0SStefan Berger * 9b21373d0SStefan Berger * This work is licensed under the terms of the GNU GPL, version 2 or later. 10b21373d0SStefan Berger * See the COPYING file in the top-level directory. 11b21373d0SStefan Berger */ 12b21373d0SStefan Berger 13b21373d0SStefan Berger #ifndef TESTS_TPM_UTIL_H 14b21373d0SStefan Berger #define TESTS_TPM_UTIL_H 15b21373d0SStefan Berger 16b21373d0SStefan Berger #include "io/channel-socket.h" 17b21373d0SStefan Berger 185166c326SEric Auger extern uint64_t tpm_tis_base_addr; 195166c326SEric Auger 205166c326SEric Auger #define TIS_REG(LOCTY, REG) \ 215166c326SEric Auger (tpm_tis_base_addr + ((LOCTY) << 12) + REG) 225166c326SEric Auger 23b21373d0SStefan Berger typedef void (tx_func)(QTestState *s, 24b21373d0SStefan Berger const unsigned char *req, size_t req_size, 25b21373d0SStefan Berger unsigned char *rsp, size_t rsp_size); 26b21373d0SStefan Berger 27b21373d0SStefan Berger void tpm_util_crb_transfer(QTestState *s, 28b21373d0SStefan Berger const unsigned char *req, size_t req_size, 29b21373d0SStefan Berger unsigned char *rsp, size_t rsp_size); 3070663851SStefan Berger void tpm_util_tis_transfer(QTestState *s, 3170663851SStefan Berger const unsigned char *req, size_t req_size, 3270663851SStefan Berger unsigned char *rsp, size_t rsp_size); 33b21373d0SStefan Berger 34b21373d0SStefan Berger void tpm_util_startup(QTestState *s, tx_func *tx); 35b21373d0SStefan Berger void tpm_util_pcrextend(QTestState *s, tx_func *tx); 36b21373d0SStefan Berger void tpm_util_pcrread(QTestState *s, tx_func *tx, 37b21373d0SStefan Berger const unsigned char *exp_resp, size_t exp_resp_size); 38b21373d0SStefan Berger 39e2f246a5SMarc-André Lureau bool tpm_util_swtpm_has_tpm2(void); 40e2f246a5SMarc-André Lureau 41b21373d0SStefan Berger gboolean tpm_util_swtpm_start(const char *path, GPid *pid, 42b21373d0SStefan Berger SocketAddress **addr, GError **error); 43b21373d0SStefan Berger void tpm_util_swtpm_kill(GPid pid); 44b21373d0SStefan Berger 45b1e4b7c6SStefan Berger void tpm_util_migrate(QTestState *who, const char *uri); 46b1e4b7c6SStefan Berger 47b1e4b7c6SStefan Berger void tpm_util_migration_start_qemu(QTestState **src_qemu, 48b1e4b7c6SStefan Berger QTestState **dst_qemu, 49b1e4b7c6SStefan Berger SocketAddress *src_tpm_addr, 50b1e4b7c6SStefan Berger SocketAddress *dst_tpm_addr, 51ea71a336SStefan Berger const char *miguri, 52551cabdfSEric Auger const char *ifmodel, 53551cabdfSEric Auger const char *machine_options); 54b1e4b7c6SStefan Berger 55b1e4b7c6SStefan Berger void tpm_util_wait_for_migration_complete(QTestState *who); 56*daa8bb57SThomas Huth void tpm_util_rmdir(const char *path); 57b1e4b7c6SStefan Berger 58b21373d0SStefan Berger #endif /* TESTS_TPM_UTIL_H */ 59