xref: /qemu/include/system/tpm_util.h (revision 32cad1ffb81dcecf6f4a8af56d6e5892682839b1)
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