OLD | NEW |
1 /* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 1 /* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
2 * Use of this source code is governed by a BSD-style license that can be | 2 * Use of this source code is governed by a BSD-style license that can be |
3 * found in the LICENSE file. | 3 * found in the LICENSE file. |
4 */ | 4 */ |
5 | 5 |
6 /* This program generates partially filled TPM datagrams and other compile-time | 6 /* This program generates partially filled TPM datagrams and other compile-time |
7 * constants (e.g. structure sizes and offsets). Compile this file---and ONLY | 7 * constants (e.g. structure sizes and offsets). Compile this file---and ONLY |
8 * this file---with -fpack-struct. We take advantage of the fact that the | 8 * this file---with -fpack-struct. We take advantage of the fact that the |
9 * (packed) TPM structures layout (mostly) match the TPM request and response | 9 * (packed) TPM structures layout (mostly) match the TPM request and response |
10 * datagram layout. When they don't completely match, some fixing is necessary | 10 * datagram layout. When they don't completely match, some fixing is necessary |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
211 int size = kTpmRequestHeaderLength; | 211 int size = kTpmRequestHeaderLength; |
212 Command* cmd = newCommand(TPM_ORD_ContinueSelfTest, size); | 212 Command* cmd = newCommand(TPM_ORD_ContinueSelfTest, size); |
213 cmd->name = "tpm_continueselftest_cmd"; | 213 cmd->name = "tpm_continueselftest_cmd"; |
214 return cmd; | 214 return cmd; |
215 } | 215 } |
216 | 216 |
217 Command* BuildReadPubekCommand(void) { | 217 Command* BuildReadPubekCommand(void) { |
218 int size = kTpmRequestHeaderLength + sizeof(TPM_NONCE); | 218 int size = kTpmRequestHeaderLength + sizeof(TPM_NONCE); |
219 Command* cmd = newCommand(TPM_ORD_ReadPubek, size); | 219 Command* cmd = newCommand(TPM_ORD_ReadPubek, size); |
220 cmd->name = "tpm_readpubek_cmd"; | 220 cmd->name = "tpm_readpubek_cmd"; |
221 return cmd; | 221 return cmd; |
222 } | 222 } |
223 | 223 |
224 Command* BuildForceClearCommand(void) { | 224 Command* BuildForceClearCommand(void) { |
225 int size = kTpmRequestHeaderLength; | 225 int size = kTpmRequestHeaderLength; |
226 Command* cmd = newCommand(TPM_ORD_ForceClear, size); | 226 Command* cmd = newCommand(TPM_ORD_ForceClear, size); |
227 cmd->name = "tpm_forceclear_cmd"; | 227 cmd->name = "tpm_forceclear_cmd"; |
228 return cmd; | 228 return cmd; |
229 } | 229 } |
230 | 230 |
231 Command* BuildPhysicalEnableCommand(void) { | 231 Command* BuildPhysicalEnableCommand(void) { |
232 int size = kTpmRequestHeaderLength; | 232 int size = kTpmRequestHeaderLength; |
233 Command* cmd = newCommand(TPM_ORD_PhysicalEnable, size); | 233 Command* cmd = newCommand(TPM_ORD_PhysicalEnable, size); |
234 cmd->name = "tpm_physicalenable_cmd"; | 234 cmd->name = "tpm_physicalenable_cmd"; |
235 return cmd; | 235 return cmd; |
| 236 } |
| 237 |
| 238 Command* BuildPhysicalDisableCommand(void) { |
| 239 int size = kTpmRequestHeaderLength; |
| 240 Command* cmd = newCommand(TPM_ORD_PhysicalDisable, size); |
| 241 cmd->name = "tpm_physicaldisable_cmd"; |
| 242 return cmd; |
236 } | 243 } |
237 | 244 |
238 Command* BuildPhysicalSetDeactivatedCommand(void) { | 245 Command* BuildPhysicalSetDeactivatedCommand(void) { |
239 int size = kTpmRequestHeaderLength + sizeof(uint8_t); | 246 int size = kTpmRequestHeaderLength + sizeof(uint8_t); |
240 Command* cmd = newCommand(TPM_ORD_PhysicalSetDeactivated, size); | 247 Command* cmd = newCommand(TPM_ORD_PhysicalSetDeactivated, size); |
241 cmd->name = "tpm_physicalsetdeactivated_cmd"; | 248 cmd->name = "tpm_physicalsetdeactivated_cmd"; |
242 AddVisibleField(cmd, "deactivated", kTpmRequestHeaderLength); | 249 AddVisibleField(cmd, "deactivated", kTpmRequestHeaderLength); |
243 return cmd; | 250 return cmd; |
244 } | 251 } |
245 | 252 |
246 Command* BuildExtendCommand(void) { | 253 Command* BuildExtendCommand(void) { |
247 int size = kTpmRequestHeaderLength + sizeof(uint32_t) + kPcrDigestLength; | 254 int size = kTpmRequestHeaderLength + sizeof(uint32_t) + kPcrDigestLength; |
248 Command* cmd = newCommand(TPM_ORD_Extend, size); | 255 Command* cmd = newCommand(TPM_ORD_Extend, size); |
249 cmd->name = "tpm_extend_cmd"; | 256 cmd->name = "tpm_extend_cmd"; |
250 AddVisibleField(cmd, "pcrNum", kTpmRequestHeaderLength); | 257 AddVisibleField(cmd, "pcrNum", kTpmRequestHeaderLength); |
251 AddVisibleField(cmd, "inDigest", kTpmRequestHeaderLength + sizeof(uint32_t)); | 258 AddVisibleField(cmd, "inDigest", kTpmRequestHeaderLength + sizeof(uint32_t)); |
252 return cmd; | 259 return cmd; |
253 } | 260 } |
254 | 261 |
255 Command* BuildGetFlagsCommand(void) { | 262 Command* BuildGetFlagsCommand(void) { |
256 int size = (kTpmRequestHeaderLength + | 263 int size = (kTpmRequestHeaderLength + |
257 sizeof(TPM_CAPABILITY_AREA) + /* capArea */ | 264 sizeof(TPM_CAPABILITY_AREA) + /* capArea */ |
258 sizeof(uint32_t) + /* subCapSize */ | 265 sizeof(uint32_t) + /* subCapSize */ |
259 sizeof(uint32_t)); /* subCap */ | 266 sizeof(uint32_t)); /* subCap */ |
260 | 267 |
261 Command* cmd = newCommand(TPM_ORD_GetCapability, size); | 268 Command* cmd = newCommand(TPM_ORD_GetCapability, size); |
262 cmd->name = "tpm_getflags_cmd"; | 269 cmd->name = "tpm_getflags_cmd"; |
263 AddInitializedField(cmd, kTpmRequestHeaderLength, | 270 AddInitializedField(cmd, kTpmRequestHeaderLength, |
264 sizeof(TPM_CAPABILITY_AREA), TPM_CAP_FLAG); | 271 sizeof(TPM_CAPABILITY_AREA), TPM_CAP_FLAG); |
265 AddInitializedField(cmd, kTpmRequestHeaderLength + | 272 AddInitializedField(cmd, kTpmRequestHeaderLength + |
266 sizeof(TPM_CAPABILITY_AREA), | 273 sizeof(TPM_CAPABILITY_AREA), |
267 sizeof(uint32_t), sizeof(uint32_t)); | 274 sizeof(uint32_t), sizeof(uint32_t)); |
268 AddInitializedField(cmd, kTpmRequestHeaderLength + | 275 AddInitializedField(cmd, kTpmRequestHeaderLength + |
269 sizeof(TPM_CAPABILITY_AREA) + sizeof(uint32_t), | 276 sizeof(TPM_CAPABILITY_AREA) + sizeof(uint32_t), |
270 sizeof(uint32_t), TPM_CAP_FLAG_PERMANENT); | 277 sizeof(uint32_t), TPM_CAP_FLAG_PERMANENT); |
271 return cmd; | 278 return cmd; |
272 } | 279 } |
273 | 280 |
274 Command* BuildGetPermissionsCommand(void) { | 281 Command* BuildGetPermissionsCommand(void) { |
275 int size = (kTpmRequestHeaderLength + | 282 int size = (kTpmRequestHeaderLength + |
276 sizeof(TPM_CAPABILITY_AREA) + /* capArea */ | 283 sizeof(TPM_CAPABILITY_AREA) + /* capArea */ |
277 sizeof(uint32_t) + /* subCapSize */ | 284 sizeof(uint32_t) + /* subCapSize */ |
278 sizeof(uint32_t)); /* subCap */ | 285 sizeof(uint32_t)); /* subCap */ |
279 | 286 |
280 Command* cmd = newCommand(TPM_ORD_GetCapability, size); | 287 Command* cmd = newCommand(TPM_ORD_GetCapability, size); |
281 cmd->name = "tpm_getpermissions_cmd"; | 288 cmd->name = "tpm_getpermissions_cmd"; |
282 AddInitializedField(cmd, kTpmRequestHeaderLength, | 289 AddInitializedField(cmd, kTpmRequestHeaderLength, |
283 sizeof(TPM_CAPABILITY_AREA), TPM_CAP_NV_INDEX); | 290 sizeof(TPM_CAPABILITY_AREA), TPM_CAP_NV_INDEX); |
284 AddInitializedField(cmd, kTpmRequestHeaderLength + | 291 AddInitializedField(cmd, kTpmRequestHeaderLength + |
285 sizeof(TPM_CAPABILITY_AREA), | 292 sizeof(TPM_CAPABILITY_AREA), |
286 sizeof(uint32_t), sizeof(uint32_t)); | 293 sizeof(uint32_t), sizeof(uint32_t)); |
287 AddVisibleField(cmd, "index", kTpmRequestHeaderLength + | 294 AddVisibleField(cmd, "index", kTpmRequestHeaderLength + |
288 sizeof(TPM_CAPABILITY_AREA) + sizeof(uint32_t)); | 295 sizeof(TPM_CAPABILITY_AREA) + sizeof(uint32_t)); |
289 return cmd; | 296 return cmd; |
290 } | 297 } |
291 | 298 |
292 /* Output the fields of a structure. | 299 /* Output the fields of a structure. |
293 */ | 300 */ |
294 void OutputFields(Field* fld) { | 301 void OutputFields(Field* fld) { |
295 /* | 302 /* |
296 * Field order is reversed. | 303 * Field order is reversed. |
297 */ | 304 */ |
298 if (fld != NULL) { | 305 if (fld != NULL) { |
299 OutputFields(fld->next); | 306 OutputFields(fld->next); |
(...skipping 29 matching lines...) Expand all Loading... |
329 case 1: | 336 case 1: |
330 printf("0x%x, ", fld->value); | 337 printf("0x%x, ", fld->value); |
331 cursor += 1; | 338 cursor += 1; |
332 break; | 339 break; |
333 case 2: | 340 case 2: |
334 printf("0x%x, 0x%x, ", fld->value >> 8, fld->value & 0xff); | 341 printf("0x%x, 0x%x, ", fld->value >> 8, fld->value & 0xff); |
335 cursor += 2; | 342 cursor += 2; |
336 break; | 343 break; |
337 case 4: | 344 case 4: |
338 printf("0x%x, 0x%x, 0x%x, 0x%x, ", fld->value >> 24, | 345 printf("0x%x, 0x%x, 0x%x, 0x%x, ", fld->value >> 24, |
339 (fld->value >> 16) & 0xff, | 346 (fld->value >> 16) & 0xff, |
340 (fld->value >> 8) & 0xff, | 347 (fld->value >> 8) & 0xff, |
341 fld->value & 0xff); | 348 fld->value & 0xff); |
342 cursor += 4; | 349 cursor += 4; |
343 break; | 350 break; |
344 default: | 351 default: |
345 error("invalid field size %d\n", fld->size); | 352 error("invalid field size %d\n", fld->size); |
346 break; | 353 break; |
347 } | 354 } |
348 } | 355 } |
349 return cursor; | 356 return cursor; |
350 } | 357 } |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
388 BuildDefineSpaceCommand, | 395 BuildDefineSpaceCommand, |
389 BuildWriteCommand, | 396 BuildWriteCommand, |
390 BuildReadCommand, | 397 BuildReadCommand, |
391 BuildPPAssertCommand, | 398 BuildPPAssertCommand, |
392 BuildPPLockCommand, | 399 BuildPPLockCommand, |
393 BuildStartupCommand, | 400 BuildStartupCommand, |
394 BuildSelftestfullCommand, | 401 BuildSelftestfullCommand, |
395 BuildContinueSelfTestCommand, | 402 BuildContinueSelfTestCommand, |
396 BuildReadPubekCommand, | 403 BuildReadPubekCommand, |
397 BuildForceClearCommand, | 404 BuildForceClearCommand, |
| 405 BuildPhysicalDisableCommand, |
398 BuildPhysicalEnableCommand, | 406 BuildPhysicalEnableCommand, |
399 BuildPhysicalSetDeactivatedCommand, | 407 BuildPhysicalSetDeactivatedCommand, |
400 BuildGetFlagsCommand, | 408 BuildGetFlagsCommand, |
401 BuildGetPermissionsCommand, | 409 BuildGetPermissionsCommand, |
402 BuildExtendCommand, | 410 BuildExtendCommand, |
403 }; | 411 }; |
404 | 412 |
405 static void FreeFields(Field* fld) { | 413 static void FreeFields(Field* fld) { |
406 if (fld != NULL) { | 414 if (fld != NULL) { |
407 Field* next_field = fld->next; | 415 Field* next_field = fld->next; |
(...skipping 24 matching lines...) Expand all Loading... |
432 OutputCommands(commands); | 440 OutputCommands(commands); |
433 printf("const int kWriteInfoLength = %d;\n", (int) sizeof(TPM_WRITE_INFO)); | 441 printf("const int kWriteInfoLength = %d;\n", (int) sizeof(TPM_WRITE_INFO)); |
434 printf("const int kNvDataPublicPermissionsOffset = %d;\n", | 442 printf("const int kNvDataPublicPermissionsOffset = %d;\n", |
435 (int) (offsetof(TPM_NV_DATA_PUBLIC, permission) + | 443 (int) (offsetof(TPM_NV_DATA_PUBLIC, permission) + |
436 2 * PCR_SELECTION_FIX + | 444 2 * PCR_SELECTION_FIX + |
437 offsetof(TPM_NV_ATTRIBUTES, attributes))); | 445 offsetof(TPM_NV_ATTRIBUTES, attributes))); |
438 | 446 |
439 FreeCommands(commands); | 447 FreeCommands(commands); |
440 return 0; | 448 return 0; |
441 } | 449 } |
OLD | NEW |