156a3c24fSStefan Berger /*
256a3c24fSStefan Berger * TPM utility functions
356a3c24fSStefan Berger *
456a3c24fSStefan Berger * Copyright (c) 2010 - 2015 IBM Corporation
556a3c24fSStefan Berger * Authors:
656a3c24fSStefan Berger * Stefan Berger <stefanb@us.ibm.com>
756a3c24fSStefan Berger *
856a3c24fSStefan Berger * This library is free software; you can redistribute it and/or
956a3c24fSStefan Berger * modify it under the terms of the GNU Lesser General Public
1056a3c24fSStefan Berger * License as published by the Free Software Foundation; either
11eac2fce9SChetan Pant * version 2.1 of the License, or (at your option) any later version.
1256a3c24fSStefan Berger *
1356a3c24fSStefan Berger * This library is distributed in the hope that it will be useful,
1456a3c24fSStefan Berger * but WITHOUT ANY WARRANTY; without even the implied warranty of
1556a3c24fSStefan Berger * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1656a3c24fSStefan Berger * Lesser General Public License for more details.
1756a3c24fSStefan Berger *
1856a3c24fSStefan Berger * You should have received a copy of the GNU Lesser General Public
1956a3c24fSStefan Berger * License along with this library; if not, see <http://www.gnu.org/licenses/>
2056a3c24fSStefan Berger */
21121d0712SMarkus Armbruster
22*32cad1ffSPhilippe Mathieu-Daudé #ifndef SYSTEM_TPM_UTIL_H
23*32cad1ffSPhilippe Mathieu-Daudé #define SYSTEM_TPM_UTIL_H
2456a3c24fSStefan Berger
25*32cad1ffSPhilippe Mathieu-Daudé #include "system/tpm.h"
265cf954d0SMarc-André Lureau #include "qemu/bswap.h"
2756a3c24fSStefan Berger
284a3d8098SAmarnath Valluri void tpm_util_write_fatal_error_response(uint8_t *out, uint32_t out_len);
294a3d8098SAmarnath Valluri
304a3d8098SAmarnath Valluri bool tpm_util_is_selftest(const uint8_t *in, uint32_t in_len);
314a3d8098SAmarnath Valluri
3256a3c24fSStefan Berger int tpm_util_test_tpmdev(int tpm_fd, TPMVersion *tpm_version);
3356a3c24fSStefan Berger
tpm_cmd_get_tag(const void * b)34cc1b6c55SMarc-André Lureau static inline uint16_t tpm_cmd_get_tag(const void *b)
35cc1b6c55SMarc-André Lureau {
36cc1b6c55SMarc-André Lureau return lduw_be_p(b);
37cc1b6c55SMarc-André Lureau }
38cc1b6c55SMarc-André Lureau
tpm_cmd_set_tag(void * b,uint16_t tag)39a35e15dcSStefan Berger static inline void tpm_cmd_set_tag(void *b, uint16_t tag)
40a35e15dcSStefan Berger {
41a35e15dcSStefan Berger stw_be_p(b, tag);
42a35e15dcSStefan Berger }
43a35e15dcSStefan Berger
tpm_cmd_get_size(const void * b)445cf954d0SMarc-André Lureau static inline uint32_t tpm_cmd_get_size(const void *b)
455cf954d0SMarc-André Lureau {
46cc1b6c55SMarc-André Lureau return ldl_be_p(b + 2);
47cc1b6c55SMarc-André Lureau }
48cc1b6c55SMarc-André Lureau
tpm_cmd_set_size(void * b,uint32_t size)49a35e15dcSStefan Berger static inline void tpm_cmd_set_size(void *b, uint32_t size)
50a35e15dcSStefan Berger {
51a35e15dcSStefan Berger stl_be_p(b + 2, size);
52a35e15dcSStefan Berger }
53a35e15dcSStefan Berger
tpm_cmd_get_ordinal(const void * b)54cc1b6c55SMarc-André Lureau static inline uint32_t tpm_cmd_get_ordinal(const void *b)
55cc1b6c55SMarc-André Lureau {
56cc1b6c55SMarc-André Lureau return ldl_be_p(b + 6);
57cc1b6c55SMarc-André Lureau }
58cc1b6c55SMarc-André Lureau
tpm_cmd_get_errcode(const void * b)59cc1b6c55SMarc-André Lureau static inline uint32_t tpm_cmd_get_errcode(const void *b)
60cc1b6c55SMarc-André Lureau {
61cc1b6c55SMarc-André Lureau return ldl_be_p(b + 6);
625cf954d0SMarc-André Lureau }
635cf954d0SMarc-André Lureau
tpm_cmd_set_error(void * b,uint32_t error)64a35e15dcSStefan Berger static inline void tpm_cmd_set_error(void *b, uint32_t error)
65a35e15dcSStefan Berger {
66a35e15dcSStefan Berger stl_be_p(b + 6, error);
67a35e15dcSStefan Berger }
68a35e15dcSStefan Berger
693688d73bSStefan Berger void tpm_util_show_buffer(const unsigned char *buffer,
703688d73bSStefan Berger size_t buffer_size, const char *string);
713688d73bSStefan Berger
72*32cad1ffSPhilippe Mathieu-Daudé #endif /* SYSTEM_TPM_UTIL_H */
73