1*32cad1ffSPhilippe Mathieu-Daudé /*
2*32cad1ffSPhilippe Mathieu-Daudé * TPM utility functions
3*32cad1ffSPhilippe Mathieu-Daudé *
4*32cad1ffSPhilippe Mathieu-Daudé * Copyright (c) 2010 - 2015 IBM Corporation
5*32cad1ffSPhilippe Mathieu-Daudé * Authors:
6*32cad1ffSPhilippe Mathieu-Daudé * Stefan Berger <stefanb@us.ibm.com>
7*32cad1ffSPhilippe Mathieu-Daudé *
8*32cad1ffSPhilippe Mathieu-Daudé * This library is free software; you can redistribute it and/or
9*32cad1ffSPhilippe Mathieu-Daudé * modify it under the terms of the GNU Lesser General Public
10*32cad1ffSPhilippe Mathieu-Daudé * License as published by the Free Software Foundation; either
11*32cad1ffSPhilippe Mathieu-Daudé * version 2.1 of the License, or (at your option) any later version.
12*32cad1ffSPhilippe Mathieu-Daudé *
13*32cad1ffSPhilippe Mathieu-Daudé * This library is distributed in the hope that it will be useful,
14*32cad1ffSPhilippe Mathieu-Daudé * but WITHOUT ANY WARRANTY; without even the implied warranty of
15*32cad1ffSPhilippe Mathieu-Daudé * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16*32cad1ffSPhilippe Mathieu-Daudé * Lesser General Public License for more details.
17*32cad1ffSPhilippe Mathieu-Daudé *
18*32cad1ffSPhilippe Mathieu-Daudé * You should have received a copy of the GNU Lesser General Public
19*32cad1ffSPhilippe Mathieu-Daudé * License along with this library; if not, see <http://www.gnu.org/licenses/>
20*32cad1ffSPhilippe Mathieu-Daudé */
21*32cad1ffSPhilippe Mathieu-Daudé
22*32cad1ffSPhilippe Mathieu-Daudé #ifndef SYSTEM_TPM_UTIL_H
23*32cad1ffSPhilippe Mathieu-Daudé #define SYSTEM_TPM_UTIL_H
24*32cad1ffSPhilippe Mathieu-Daudé
25*32cad1ffSPhilippe Mathieu-Daudé #include "system/tpm.h"
26*32cad1ffSPhilippe Mathieu-Daudé #include "qemu/bswap.h"
27*32cad1ffSPhilippe Mathieu-Daudé
28*32cad1ffSPhilippe Mathieu-Daudé void tpm_util_write_fatal_error_response(uint8_t *out, uint32_t out_len);
29*32cad1ffSPhilippe Mathieu-Daudé
30*32cad1ffSPhilippe Mathieu-Daudé bool tpm_util_is_selftest(const uint8_t *in, uint32_t in_len);
31*32cad1ffSPhilippe Mathieu-Daudé
32*32cad1ffSPhilippe Mathieu-Daudé int tpm_util_test_tpmdev(int tpm_fd, TPMVersion *tpm_version);
33*32cad1ffSPhilippe Mathieu-Daudé
tpm_cmd_get_tag(const void * b)34*32cad1ffSPhilippe Mathieu-Daudé static inline uint16_t tpm_cmd_get_tag(const void *b)
35*32cad1ffSPhilippe Mathieu-Daudé {
36*32cad1ffSPhilippe Mathieu-Daudé return lduw_be_p(b);
37*32cad1ffSPhilippe Mathieu-Daudé }
38*32cad1ffSPhilippe Mathieu-Daudé
tpm_cmd_set_tag(void * b,uint16_t tag)39*32cad1ffSPhilippe Mathieu-Daudé static inline void tpm_cmd_set_tag(void *b, uint16_t tag)
40*32cad1ffSPhilippe Mathieu-Daudé {
41*32cad1ffSPhilippe Mathieu-Daudé stw_be_p(b, tag);
42*32cad1ffSPhilippe Mathieu-Daudé }
43*32cad1ffSPhilippe Mathieu-Daudé
tpm_cmd_get_size(const void * b)44*32cad1ffSPhilippe Mathieu-Daudé static inline uint32_t tpm_cmd_get_size(const void *b)
45*32cad1ffSPhilippe Mathieu-Daudé {
46*32cad1ffSPhilippe Mathieu-Daudé return ldl_be_p(b + 2);
47*32cad1ffSPhilippe Mathieu-Daudé }
48*32cad1ffSPhilippe Mathieu-Daudé
tpm_cmd_set_size(void * b,uint32_t size)49*32cad1ffSPhilippe Mathieu-Daudé static inline void tpm_cmd_set_size(void *b, uint32_t size)
50*32cad1ffSPhilippe Mathieu-Daudé {
51*32cad1ffSPhilippe Mathieu-Daudé stl_be_p(b + 2, size);
52*32cad1ffSPhilippe Mathieu-Daudé }
53*32cad1ffSPhilippe Mathieu-Daudé
tpm_cmd_get_ordinal(const void * b)54*32cad1ffSPhilippe Mathieu-Daudé static inline uint32_t tpm_cmd_get_ordinal(const void *b)
55*32cad1ffSPhilippe Mathieu-Daudé {
56*32cad1ffSPhilippe Mathieu-Daudé return ldl_be_p(b + 6);
57*32cad1ffSPhilippe Mathieu-Daudé }
58*32cad1ffSPhilippe Mathieu-Daudé
tpm_cmd_get_errcode(const void * b)59*32cad1ffSPhilippe Mathieu-Daudé static inline uint32_t tpm_cmd_get_errcode(const void *b)
60*32cad1ffSPhilippe Mathieu-Daudé {
61*32cad1ffSPhilippe Mathieu-Daudé return ldl_be_p(b + 6);
62*32cad1ffSPhilippe Mathieu-Daudé }
63*32cad1ffSPhilippe Mathieu-Daudé
tpm_cmd_set_error(void * b,uint32_t error)64*32cad1ffSPhilippe Mathieu-Daudé static inline void tpm_cmd_set_error(void *b, uint32_t error)
65*32cad1ffSPhilippe Mathieu-Daudé {
66*32cad1ffSPhilippe Mathieu-Daudé stl_be_p(b + 6, error);
67*32cad1ffSPhilippe Mathieu-Daudé }
68*32cad1ffSPhilippe Mathieu-Daudé
69*32cad1ffSPhilippe Mathieu-Daudé void tpm_util_show_buffer(const unsigned char *buffer,
70*32cad1ffSPhilippe Mathieu-Daudé size_t buffer_size, const char *string);
71*32cad1ffSPhilippe Mathieu-Daudé
72*32cad1ffSPhilippe Mathieu-Daudé #endif /* SYSTEM_TPM_UTIL_H */
73