Will Arthur | 54e04e4 | 2015-07-15 11:29:25 -0400 | [diff] [blame^] | 1 | /************************************************************** |
| 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 | |
| 55 | typedef uint8_t UINT8; /* unsigned, 8-bit integer */ |
| 56 | typedef uint8_t BYTE; /* unsigned 8-bit integer */ |
| 57 | typedef int8_t INT8; /* signed, 8-bit integer */ |
| 58 | typedef int BOOL; /* a bit in an int */ |
| 59 | typedef uint16_t UINT16; /* unsigned, 16-bit integer */ |
| 60 | typedef int16_t INT16; /* signed, 16-bit integer */ |
| 61 | typedef uint32_t UINT32; /* unsigned, 32-bit integer */ |
| 62 | typedef int32_t INT32; /* signed, 32-bit integer */ |
| 63 | typedef uint64_t UINT64; /* unsigned, 64-bit integer */ |
| 64 | typedef int64_t INT64; /* signed, 64-bit integer */ |
| 65 | |
| 66 | typedef UINT32 TSS2_RC; |
| 67 | |
| 68 | |
| 69 | /** |
| 70 | * ABI runetime negotiation structure. |
| 71 | */ |
| 72 | typedef 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 */ |