1 /* SPDX-License-Identifier: GPL-2.0+ */ 2 /* 3 * Copyright (c) 2015 Google, Inc 4 */ 5 6 #ifndef __tpm_internal_h 7 #define __tpm_internal_h 8 9 enum { 10 TPM_MAX_ORDINAL = 243, 11 TPM_MAX_PROTECTED_ORDINAL = 12, 12 TPM_PROTECTED_ORDINAL_MASK = 0xff, 13 TPM_CMD_COUNT_BYTE = 2, 14 TPM_CMD_ORDINAL_BYTE = 6, 15 }; 16 17 /* 18 * Array with one entry per ordinal defining the maximum amount 19 * of time the chip could take to return the result. The ordinal 20 * designation of short, medium or long is defined in a table in 21 * TCG Specification TPM Main Part 2 TPM Structures Section 17. The 22 * values of the SHORT, MEDIUM, and LONG durations are retrieved 23 * from the chip during initialization with a call to tpm_get_timeouts. 24 */ 25 static const u8 tpm_protected_ordinal_duration[TPM_MAX_PROTECTED_ORDINAL] = { 26 TPM_UNDEFINED, /* 0 */ 27 TPM_UNDEFINED, 28 TPM_UNDEFINED, 29 TPM_UNDEFINED, 30 TPM_UNDEFINED, 31 TPM_UNDEFINED, /* 5 */ 32 TPM_UNDEFINED, 33 TPM_UNDEFINED, 34 TPM_UNDEFINED, 35 TPM_UNDEFINED, 36 TPM_SHORT, /* 10 */ 37 TPM_SHORT, 38 }; 39 40 static const u8 tpm_ordinal_duration[TPM_MAX_ORDINAL] = { 41 TPM_UNDEFINED, /* 0 */ 42 TPM_UNDEFINED, 43 TPM_UNDEFINED, 44 TPM_UNDEFINED, 45 TPM_UNDEFINED, 46 TPM_UNDEFINED, /* 5 */ 47 TPM_UNDEFINED, 48 TPM_UNDEFINED, 49 TPM_UNDEFINED, 50 TPM_UNDEFINED, 51 TPM_SHORT, /* 10 */ 52 TPM_SHORT, 53 TPM_MEDIUM, 54 TPM_LONG, 55 TPM_LONG, 56 TPM_MEDIUM, /* 15 */ 57 TPM_SHORT, 58 TPM_SHORT, 59 TPM_MEDIUM, 60 TPM_LONG, 61 TPM_SHORT, /* 20 */ 62 TPM_SHORT, 63 TPM_MEDIUM, 64 TPM_MEDIUM, 65 TPM_MEDIUM, 66 TPM_SHORT, /* 25 */ 67 TPM_SHORT, 68 TPM_MEDIUM, 69 TPM_SHORT, 70 TPM_SHORT, 71 TPM_MEDIUM, /* 30 */ 72 TPM_LONG, 73 TPM_MEDIUM, 74 TPM_SHORT, 75 TPM_SHORT, 76 TPM_SHORT, /* 35 */ 77 TPM_MEDIUM, 78 TPM_MEDIUM, 79 TPM_UNDEFINED, 80 TPM_UNDEFINED, 81 TPM_MEDIUM, /* 40 */ 82 TPM_LONG, 83 TPM_MEDIUM, 84 TPM_SHORT, 85 TPM_SHORT, 86 TPM_SHORT, /* 45 */ 87 TPM_SHORT, 88 TPM_SHORT, 89 TPM_SHORT, 90 TPM_LONG, 91 TPM_MEDIUM, /* 50 */ 92 TPM_MEDIUM, 93 TPM_UNDEFINED, 94 TPM_UNDEFINED, 95 TPM_UNDEFINED, 96 TPM_UNDEFINED, /* 55 */ 97 TPM_UNDEFINED, 98 TPM_UNDEFINED, 99 TPM_UNDEFINED, 100 TPM_UNDEFINED, 101 TPM_MEDIUM, /* 60 */ 102 TPM_MEDIUM, 103 TPM_MEDIUM, 104 TPM_SHORT, 105 TPM_SHORT, 106 TPM_MEDIUM, /* 65 */ 107 TPM_UNDEFINED, 108 TPM_UNDEFINED, 109 TPM_UNDEFINED, 110 TPM_UNDEFINED, 111 TPM_SHORT, /* 70 */ 112 TPM_SHORT, 113 TPM_UNDEFINED, 114 TPM_UNDEFINED, 115 TPM_UNDEFINED, 116 TPM_UNDEFINED, /* 75 */ 117 TPM_UNDEFINED, 118 TPM_UNDEFINED, 119 TPM_UNDEFINED, 120 TPM_UNDEFINED, 121 TPM_LONG, /* 80 */ 122 TPM_UNDEFINED, 123 TPM_MEDIUM, 124 TPM_LONG, 125 TPM_SHORT, 126 TPM_UNDEFINED, /* 85 */ 127 TPM_UNDEFINED, 128 TPM_UNDEFINED, 129 TPM_UNDEFINED, 130 TPM_UNDEFINED, 131 TPM_SHORT, /* 90 */ 132 TPM_SHORT, 133 TPM_SHORT, 134 TPM_SHORT, 135 TPM_SHORT, 136 TPM_UNDEFINED, /* 95 */ 137 TPM_UNDEFINED, 138 TPM_UNDEFINED, 139 TPM_UNDEFINED, 140 TPM_UNDEFINED, 141 TPM_MEDIUM, /* 100 */ 142 TPM_SHORT, 143 TPM_SHORT, 144 TPM_UNDEFINED, 145 TPM_UNDEFINED, 146 TPM_UNDEFINED, /* 105 */ 147 TPM_UNDEFINED, 148 TPM_UNDEFINED, 149 TPM_UNDEFINED, 150 TPM_UNDEFINED, 151 TPM_SHORT, /* 110 */ 152 TPM_SHORT, 153 TPM_SHORT, 154 TPM_SHORT, 155 TPM_SHORT, 156 TPM_SHORT, /* 115 */ 157 TPM_SHORT, 158 TPM_SHORT, 159 TPM_UNDEFINED, 160 TPM_UNDEFINED, 161 TPM_LONG, /* 120 */ 162 TPM_LONG, 163 TPM_MEDIUM, 164 TPM_UNDEFINED, 165 TPM_SHORT, 166 TPM_SHORT, /* 125 */ 167 TPM_SHORT, 168 TPM_LONG, 169 TPM_SHORT, 170 TPM_SHORT, 171 TPM_SHORT, /* 130 */ 172 TPM_MEDIUM, 173 TPM_UNDEFINED, 174 TPM_SHORT, 175 TPM_MEDIUM, 176 TPM_UNDEFINED, /* 135 */ 177 TPM_UNDEFINED, 178 TPM_UNDEFINED, 179 TPM_UNDEFINED, 180 TPM_UNDEFINED, 181 TPM_SHORT, /* 140 */ 182 TPM_SHORT, 183 TPM_UNDEFINED, 184 TPM_UNDEFINED, 185 TPM_UNDEFINED, 186 TPM_UNDEFINED, /* 145 */ 187 TPM_UNDEFINED, 188 TPM_UNDEFINED, 189 TPM_UNDEFINED, 190 TPM_UNDEFINED, 191 TPM_SHORT, /* 150 */ 192 TPM_MEDIUM, 193 TPM_MEDIUM, 194 TPM_SHORT, 195 TPM_SHORT, 196 TPM_UNDEFINED, /* 155 */ 197 TPM_UNDEFINED, 198 TPM_UNDEFINED, 199 TPM_UNDEFINED, 200 TPM_UNDEFINED, 201 TPM_SHORT, /* 160 */ 202 TPM_SHORT, 203 TPM_SHORT, 204 TPM_SHORT, 205 TPM_UNDEFINED, 206 TPM_UNDEFINED, /* 165 */ 207 TPM_UNDEFINED, 208 TPM_UNDEFINED, 209 TPM_UNDEFINED, 210 TPM_UNDEFINED, 211 TPM_LONG, /* 170 */ 212 TPM_UNDEFINED, 213 TPM_UNDEFINED, 214 TPM_UNDEFINED, 215 TPM_UNDEFINED, 216 TPM_UNDEFINED, /* 175 */ 217 TPM_UNDEFINED, 218 TPM_UNDEFINED, 219 TPM_UNDEFINED, 220 TPM_UNDEFINED, 221 TPM_MEDIUM, /* 180 */ 222 TPM_SHORT, 223 TPM_MEDIUM, 224 TPM_MEDIUM, 225 TPM_MEDIUM, 226 TPM_MEDIUM, /* 185 */ 227 TPM_SHORT, 228 TPM_UNDEFINED, 229 TPM_UNDEFINED, 230 TPM_UNDEFINED, 231 TPM_UNDEFINED, /* 190 */ 232 TPM_UNDEFINED, 233 TPM_UNDEFINED, 234 TPM_UNDEFINED, 235 TPM_UNDEFINED, 236 TPM_UNDEFINED, /* 195 */ 237 TPM_UNDEFINED, 238 TPM_UNDEFINED, 239 TPM_UNDEFINED, 240 TPM_UNDEFINED, 241 TPM_SHORT, /* 200 */ 242 TPM_UNDEFINED, 243 TPM_UNDEFINED, 244 TPM_UNDEFINED, 245 TPM_SHORT, 246 TPM_SHORT, /* 205 */ 247 TPM_SHORT, 248 TPM_SHORT, 249 TPM_SHORT, 250 TPM_SHORT, 251 TPM_MEDIUM, /* 210 */ 252 TPM_UNDEFINED, 253 TPM_MEDIUM, 254 TPM_MEDIUM, 255 TPM_MEDIUM, 256 TPM_UNDEFINED, /* 215 */ 257 TPM_MEDIUM, 258 TPM_UNDEFINED, 259 TPM_UNDEFINED, 260 TPM_SHORT, 261 TPM_SHORT, /* 220 */ 262 TPM_SHORT, 263 TPM_SHORT, 264 TPM_SHORT, 265 TPM_SHORT, 266 TPM_UNDEFINED, /* 225 */ 267 TPM_UNDEFINED, 268 TPM_UNDEFINED, 269 TPM_UNDEFINED, 270 TPM_UNDEFINED, 271 TPM_SHORT, /* 230 */ 272 TPM_LONG, 273 TPM_MEDIUM, 274 TPM_UNDEFINED, 275 TPM_UNDEFINED, 276 TPM_UNDEFINED, /* 235 */ 277 TPM_UNDEFINED, 278 TPM_UNDEFINED, 279 TPM_UNDEFINED, 280 TPM_UNDEFINED, 281 TPM_SHORT, /* 240 */ 282 TPM_UNDEFINED, 283 TPM_MEDIUM, 284 }; 285 286 #endif 287