1/*
2 * The Initial Developer of the Original Code is International
3 * Business Machines Corporation. Portions created by IBM
4 * Corporation are Copyright (C) 2005 International Business
5 * Machines Corporation. All Rights Reserved.
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the Common Public License as published by
9 * IBM Corporation; either version 1 of the License, or (at your option)
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * Common Public License for more details.
16 *
17 * You should have received a copy of the Common Public License
18 * along with this program; if not, a copy can be viewed at
19 * http://www.opensource.org/licenses/cpl1.0.php.
20 */
21#ifndef TPM_NVCOMMON_H
22#define TPM_NVCOMMON_H
23
24#include "tpm_tspi.h"
25
26
27struct strings_with_values
28{
29	const char *name;
30	UINT32 value;
31	const char *desc;
32};
33
34extern const struct strings_with_values permvalues[];
35
36int parseStringWithValues(const char *aArg,
37                          const struct strings_with_values *svals,
38                          unsigned int *x, unsigned int maximum,
39                          const char *name);
40
41char *printValueAsStrings(unsigned int value,
42                          const struct strings_with_values *svals);
43
44int parseHexOrDecimal(const char *aArg, unsigned int *x,
45                      unsigned int minimum, unsigned int maximum,
46                      const char *name);
47
48void displayStringsAndValues(const struct strings_with_values *svals, const char *indent);
49
50TSS_RESULT getNVDataPublic(TSS_HTPM hTpm, TPM_NV_INDEX nvindex, TPM_NV_DATA_PUBLIC **pub);
51void freeNVDataPublic(TPM_NV_DATA_PUBLIC *pub);
52
53static inline UINT32
54Decode_UINT32(BYTE * y)
55{
56        UINT32 x = 0;
57
58        x = y[0];
59        x = ((x << 8) | (y[1] & 0xFF));
60        x = ((x << 8) | (y[2] & 0xFF));
61        x = ((x << 8) | (y[3] & 0xFF));
62
63        return x;
64}
65
66#endif /* TPM_NVCOMMON_H */
67