blob: 59a67e68f491559d12b78c28c06b212dd631b326 [file] [log] [blame]
Will Arthur54e04e42015-07-15 11:29:25 -04001/**************************************************************
2 *
3 * Copyright (c) 2015, Intel Corporation
4 *
5 * Copyright 2015, Andreas Fuchs @ Fraunhofer SIT
6 *
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without modification,
10 * are permitted provided that the following conditions are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright notice, this
13 * list of conditions and the following disclaimer.
14 *
15 * 2. Redistributions in binary form must reproduce the above copyright notice,
16 * this list of conditions and the following disclaimer in the documentation and/or
17 * other materials provided with the distribution.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22 * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
23 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
24 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
27 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
28 * OF THE POSSIBILITY OF SUCH DAMAGE.
29 **************************************************************/
30
31#ifndef TSS2_COMMON_H
32#define TSS2_COMMON_H
33
34
35/**
36 * API version negotiation
37 */
38
39#define TSS2_CREATOR 0x1 /* TCG TSS-WG */
40#define TSS2_FAMILY 0x1 //TBD
41#define TSS2_LEVEL 0x1 //TBD
42#define TSS2_REVISION 0x1 //TBD
43
44/* TSS2_VERSION_<CREATOR>_<FAMILY>_<LEVEL>_<REVISION> */
45#define TSS2_API_VERSION_1_1_1_1 //TBD
46
47
48
49/**
50 * Type definitions
51 */
52
53#include <stdint.h>
54
55typedef uint8_t UINT8; /* unsigned, 8-bit integer */
56typedef uint8_t BYTE; /* unsigned 8-bit integer */
57typedef int8_t INT8; /* signed, 8-bit integer */
58typedef int BOOL; /* a bit in an int */
59typedef uint16_t UINT16; /* unsigned, 16-bit integer */
60typedef int16_t INT16; /* signed, 16-bit integer */
61typedef uint32_t UINT32; /* unsigned, 32-bit integer */
62typedef int32_t INT32; /* signed, 32-bit integer */
63typedef uint64_t UINT64; /* unsigned, 64-bit integer */
64typedef int64_t INT64; /* signed, 64-bit integer */
65
66typedef UINT32 TSS2_RC;
67
68
69/**
70 * ABI runetime negotiation structure.
71 */
72typedef struct {
73 UINT32 tssCreator; /* If == 1, this equals TSSWG-Interop
74 If == 2..9, this is reserved
75 If > TCG_VENDOR_ID_FIRST, this equals Vendor-ID */
76 UINT32 tssFamily; /* Free-to-use for creator > TCG_VENDOR_FIRST */
77 UINT32 tssLevel; /* Free-to-use for creator > TCG_VENDOR_FIRST */
78 UINT32 tssVersion; /* Free-to-use for creator > TCG_VENDOR_FIRST */
79} TSS2_ABI_VERSION;
80
81
82/**
83 * Error Levels
84 *
85 *
86 */
87
88// This macro is used to indicate the level of the error: use 5 and 6th
89// nibble for error level.
90
91#define TSS2_RC_LEVEL_SHIFT 16
92
93#define TSS2_ERROR_LEVEL( level ) ( level << TSS2_RC_LEVEL_SHIFT )
94
95
96//
97// Error code levels. These indicate what level in the software stack
98// the error codes are coming from.
99//
100#define TSS2_TPM_ERROR_LEVEL TSS2_ERROR_LEVEL(0)
101#define TSS2_APP_ERROR_LEVEL TSS2_ERROR_LEVEL(5)
102#define TSS2_FEATURE_ERROR_LEVEL TSS2_ERROR_LEVEL(6)
103#define TSS2_ESAPI_ERROR_LEVEL TSS2_ERROR_LEVEL(7)
104#define TSS2_SYS_ERROR_LEVEL TSS2_ERROR_LEVEL(8)
105#define TSS2_SYS_PART2_ERROR_LEVEL TSS2_ERROR_LEVEL(9)
106#define TSS2_TCTI_ERROR_LEVEL TSS2_ERROR_LEVEL(10)
107#define TSS2_RESMGRTPM_ERROR_LEVEL TSS2_ERROR_LEVEL(11)
108#define TSS2_RESMGR_ERROR_LEVEL TSS2_ERROR_LEVEL(12)
109#define TSS2_DRIVER_ERROR_LEVEL TSS2_ERROR_LEVEL(13)
110
111#define TSS2_ERROR_LEVEL_MASK TSS2_ERROR_LEVEL(0xff)
112
113/**
114 * Error Codes
115 */
116
117//
118// Base error codes
119// These are not returned directly, but are combined with an ERROR_LEVEL to
120// produce the error codes for each layer.
121//
122#define TSS2_BASE_RC_GENERAL_FAILURE 1 /* Catch all for all errors
123 not otherwise specifed */
124#define TSS2_BASE_RC_NOT_IMPLEMENTED 2 /* If called functionality isn't implemented */
125#define TSS2_BASE_RC_BAD_CONTEXT 3 /* A context structure is bad */
126#define TSS2_BASE_RC_ABI_MISMATCH 4 /* Passed in ABI version doesn't match
127 called module's ABI version */
128#define TSS2_BASE_RC_BAD_REFERENCE 5 /* A pointer is NULL that isn't allowed to
129 be NULL. */
130#define TSS2_BASE_RC_INSUFFICIENT_BUFFER 6 /* A buffer isn't large enough */
131#define TSS2_BASE_RC_BAD_SEQUENCE 7 /* Function called in the wrong order */
132#define TSS2_BASE_RC_NO_CONNECTION 8 /* Fails to connect to next lower layer */
133#define TSS2_BASE_RC_TRY_AGAIN 9 /* Operation timed out; function must be
134 called again to be completed */
135#define TSS2_BASE_RC_IO_ERROR 10 /* IO failure */
136#define TSS2_BASE_RC_BAD_VALUE 11 /* A parameter has a bad value */
137#define TSS2_BASE_RC_NOT_PERMITTED 12 /* Operation not permitted. */
138#define TSS2_BASE_RC_INVALID_SESSIONS 13 /* Session structures were sent, but */
139 /* command doesn't use them or doesn't use
140 the specifed number of them */
141#define TSS2_BASE_RC_NO_DECRYPT_PARAM 14 /* If function called that uses decrypt
142 parameter, but command doesn't support
143 crypt parameter. */
144#define TSS2_BASE_RC_NO_ENCRYPT_PARAM 15 /* If function called that uses encrypt
145 parameter, but command doesn't support
146 encrypt parameter. */
147#define TSS2_BASE_RC_BAD_SIZE 16 /* If size of a parameter is incorrect */
148#define TSS2_BASE_RC_MALFORMED_RESPONSE 17 /* Response is malformed */
149#define TSS2_BASE_RC_INSUFFICIENT_CONTEXT 18 /* Context not large enough */
150#define TSS2_BASE_RC_INSUFFICIENT_RESPONSE 19 /* Response is not long enough */
151#define TSS2_BASE_RC_INCOMPATIBLE_TCTI 20 /* Unknown or unusable TCTI version */
152#define TSS2_BASE_RC_NOT_SUPPORTED 21 /* Functionality not supported. */
153#define TSS2_BASE_RC_BAD_TCTI_STRUCTURE 22 /* TCTI context is bad. */
154
155
156#define TSS2_RC_SUCCESS ((TSS2_RC)0)
157
158//
159// TCTI error codes
160//
161
162#define TSS2_TCTI_RC_GENERAL_FAILURE ((TSS2_RC)(TSS2_TCTI_ERROR_LEVEL | \
163 TSS2_BASE_RC_GENERAL_FAILURE))
164#define TSS2_TCTI_RC_NOT_IMPLEMENTED ((TSS2_RC)(TSS2_TCTI_ERROR_LEVEL | \
165 TSS2_BASE_RC_NOT_IMPLEMENTED))
166#define TSS2_TCTI_RC_BAD_CONTEXT ((TSS2_RC)(TSS2_TCTI_ERROR_LEVEL | \
167 TSS2_BASE_RC_BAD_CONTEXT))
168#define TSS2_TCTI_RC_ABI_MISMATCH ((TSS2_RC)(TSS2_TCTI_ERROR_LEVEL | \
169 TSS2_BASE_RC_ABI_MISMATCH))
170#define TSS2_TCTI_RC_BAD_REFERENCE ((TSS2_RC)(TSS2_TCTI_ERROR_LEVEL | \
171 TSS2_BASE_RC_BAD_REFERENCE))
172#define TSS2_TCTI_RC_INSUFFICIENT_BUFFER ((TSS2_RC)(TSS2_TCTI_ERROR_LEVEL | \
173 TSS2_BASE_RC_INSUFFICIENT_BUFFER))
174#define TSS2_TCTI_RC_BAD_SEQUENCE ((TSS2_RC)(TSS2_TCTI_ERROR_LEVEL | \
175 TSS2_BASE_RC_BAD_SEQUENCE))
176#define TSS2_TCTI_RC_NO_CONNECTION ((TSS2_RC)(TSS2_TCTI_ERROR_LEVEL | \
177 TSS2_BASE_RC_NO_CONNECTION))
178#define TSS2_TCTI_RC_TRY_AGAIN ((TSS2_RC)(TSS2_TCTI_ERROR_LEVEL | \
179 TSS2_BASE_RC_TRY_AGAIN))
180#define TSS2_TCTI_RC_IO_ERROR ((TSS2_RC)(TSS2_TCTI_ERROR_LEVEL | \
181 TSS2_BASE_RC_IO_ERROR))
182#define TSS2_TCTI_RC_BAD_VALUE ((TSS2_RC)(TSS2_TCTI_ERROR_LEVEL | \
183 TSS2_BASE_RC_BAD_VALUE))
184#define TSS2_TCTI_RC_NOT_PERMITTED ((TSS2_RC)(TSS2_TCTI_ERROR_LEVEL | \
185 TSS2_BASE_RC_NOT_PERMITTED))
186#define TSS2_TCTI_RC_MALFORMED_RESPONSE ((TSS2_RC)(TSS2_TCTI_ERROR_LEVEL | \
187 TSS2_BASE_RC_MALFORMED_RESPONSE))
188#define TSS2_TCTI_RC_NOT_SUPPORTED ((TSS2_RC)(TSS2_TCTI_ERROR_LEVEL | \
189 TSS2_BASE_RC_NOT_SUPPORTED))
190//
191// SAPI error codes
192//
193#define TSS2_SYS_RC_GENERAL_FAILURE ((TSS2_RC)(TSS2_SYS_ERROR_LEVEL | \
194 TSS2_BASE_RC_GENERAL_FAILURE))
195#define TSS2_SYS_RC_ABI_MISMATCH ((TSS2_RC)(TSS2_SYS_ERROR_LEVEL | \
196 TSS2_BASE_RC_ABI_MISMATCH))
197#define TSS2_SYS_RC_BAD_REFERENCE ((TSS2_RC)(TSS2_SYS_ERROR_LEVEL | \
198 TSS2_BASE_RC_BAD_REFERENCE))
199#define TSS2_SYS_RC_INSUFFICIENT_BUFFER ((TSS2_RC)(TSS2_SYS_ERROR_LEVEL | \
200 TSS2_BASE_RC_INSUFFICIENT_BUFFER))
201#define TSS2_SYS_RC_BAD_SEQUENCE ((TSS2_RC)(TSS2_SYS_ERROR_LEVEL | \
202 TSS2_BASE_RC_BAD_SEQUENCE))
203#define TSS2_SYS_RC_BAD_VALUE ((TSS2_RC)(TSS2_SYS_ERROR_LEVEL | \
204 TSS2_BASE_RC_BAD_VALUE))
205#define TSS2_SYS_RC_INVALID_SESSIONS ((TSS2_RC)(TSS2_SYS_ERROR_LEVEL | \
206 TSS2_BASE_RC_INVALID_SESSIONS))
207#define TSS2_SYS_RC_NO_DECRYPT_PARAM ((TSS2_RC)(TSS2_SYS_ERROR_LEVEL | \
208 TSS2_BASE_RC_NO_DECRYPT_PARAM))
209#define TSS2_SYS_RC_NO_ENCRYPT_PARAM ((TSS2_RC)(TSS2_SYS_ERROR_LEVEL | \
210 TSS2_BASE_RC_NO_ENCRYPT_PARAM))
211#define TSS2_SYS_RC_BAD_SIZE ((TSS2_RC)(TSS2_SYS_ERROR_LEVEL | \
212 TSS2_BASE_RC_BAD_SIZE))
213#define TSS2_SYS_RC_MALFORMED_RESPONSE ((TSS2_RC)(TSS2_SYS_ERROR_LEVEL | \
214 TSS2_BASE_RC_MALFORMED_RESPONSE))
215#define TSS2_SYS_RC_INSUFFICIENT_CONTEXT ((TSS2_RC)(TSS2_SYS_ERROR_LEVEL | \
216 TSS2_BASE_RC_INSUFFICIENT_CONTEXT))
217#define TSS2_SYS_RC_INSUFFICIENT_RESPONSE ((TSS2_RC)(TSS2_SYS_ERROR_LEVEL | \
218 TSS2_BASE_RC_INSUFFICIENT_RESPONSE))
219#define TSS2_SYS_RC_INCOMPATIBLE_TCTI ((TSS2_RC)(TSS2_SYS_ERROR_LEVEL | \
220 TSS2_BASE_RC_INCOMPATIBLE_TCTI))
221#define TSS2_SYS_RC_BAD_TCTI_STRUCTURE ((TSS2_RC)(TSS2_SYS_ERROR_LEVEL | \
222 TSS2_BASE_RC_BAD_TCTI_STRUCTURE))
223
224#endif /* TSS2_COMMON_H */