tlcl.h revision 416f681882d8a35fa4c7ad9245a9e544c3115670
10df08373a2d85d1188751749835e466eee8db878Gaurav Shah/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 20df08373a2d85d1188751749835e466eee8db878Gaurav Shah * Use of this source code is governed by a BSD-style license that can be 30df08373a2d85d1188751749835e466eee8db878Gaurav Shah * found in the LICENSE file. 40df08373a2d85d1188751749835e466eee8db878Gaurav Shah */ 50df08373a2d85d1188751749835e466eee8db878Gaurav Shah 60df08373a2d85d1188751749835e466eee8db878Gaurav Shah/* TPM Lightweight Command Library. 70df08373a2d85d1188751749835e466eee8db878Gaurav Shah * 80df08373a2d85d1188751749835e466eee8db878Gaurav Shah * A low-level library for interfacing to TPM hardware or an emulator. 90df08373a2d85d1188751749835e466eee8db878Gaurav Shah */ 100df08373a2d85d1188751749835e466eee8db878Gaurav Shah 11887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shah/* FIXME(gauravsh): 12887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shah * NOTE: This file is copied over from 13887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shah * src/platform/tpm_lite/src/tlcl/tlcl.h 14887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shah * Ideally, we want to directly include it without having two maintain 15887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shah * duplicate copies in sync. But in the current model, this is hard 16887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shah * to do without breaking standalone compilation. 17887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shah * Eventually tpm_lite should be moved into vboot_reference. 1859204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato * 1959204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato * FURTHER NOTE: The subset of TPM error codes relevant to verified boot 2059204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato * (TPM_SUCCESS, etc.) are in tss_constants.h. A full list of TPM error codes 2159204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato * are in /usr/include/tss/tpm_error.h, from the trousers package. 22887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shah */ 23887e3d4700338e7fb5af4d7e1e4ea0e561956d3eGaurav Shah 240df08373a2d85d1188751749835e466eee8db878Gaurav Shah#ifndef TPM_LITE_TLCL_H_ 250df08373a2d85d1188751749835e466eee8db878Gaurav Shah#define TPM_LITE_TLCL_H_ 260df08373a2d85d1188751749835e466eee8db878Gaurav Shah 27f302905224a346718910e56f5f1593d4b19253f1Randall Spangler#include "sysincludes.h" 280df08373a2d85d1188751749835e466eee8db878Gaurav Shah 290df08373a2d85d1188751749835e466eee8db878Gaurav Shah/* Call this first. 300df08373a2d85d1188751749835e466eee8db878Gaurav Shah */ 3159204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzatovoid TlclLibInit(void); 320df08373a2d85d1188751749835e466eee8db878Gaurav Shah 33416f681882d8a35fa4c7ad9245a9e544c3115670Luigi Semenzato/* Close and open the device. This is needed for running more complex commands 34416f681882d8a35fa4c7ad9245a9e544c3115670Luigi Semenzato * at user level, such as TPM_TakeOwnership, since the TPM device can be opened 35416f681882d8a35fa4c7ad9245a9e544c3115670Luigi Semenzato * only by one process at a time. 36416f681882d8a35fa4c7ad9245a9e544c3115670Luigi Semenzato */ 37416f681882d8a35fa4c7ad9245a9e544c3115670Luigi Semenzatovoid TlclCloseDevice(void); 38416f681882d8a35fa4c7ad9245a9e544c3115670Luigi Semenzatovoid TlclOpenDevice(void); 39416f681882d8a35fa4c7ad9245a9e544c3115670Luigi Semenzato 400df08373a2d85d1188751749835e466eee8db878Gaurav Shah/* Sends a TPM_Startup(ST_CLEAR). Note that this is a no-op for the emulator, 4159204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato * because it runs this command during initialization. The TPM error code is 4259204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato * returned (0 for success). 430df08373a2d85d1188751749835e466eee8db878Gaurav Shah */ 4459204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzatouint32_t TlclStartup(void); 450df08373a2d85d1188751749835e466eee8db878Gaurav Shah 460df08373a2d85d1188751749835e466eee8db878Gaurav Shah/* Run the self test. Note---this is synchronous. To run this in parallel 4759204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato * with other firmware, use ContinueSelfTest. The TPM error code is returned. 480df08373a2d85d1188751749835e466eee8db878Gaurav Shah */ 4959204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzatouint32_t TlclSelftestfull(void); 5059204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato 5159204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato/* Runs the self test in the background. The TPM error code is returned. 5259204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato */ 5359204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzatouint32_t TlclContinueSelfTest(void); 540df08373a2d85d1188751749835e466eee8db878Gaurav Shah 550df08373a2d85d1188751749835e466eee8db878Gaurav Shah/* Defines a space with permission [perm]. [index] is the index for the space, 5659204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato * [size] the usable data size. The TPM error code is returned. 570df08373a2d85d1188751749835e466eee8db878Gaurav Shah */ 5859204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzatouint32_t TlclDefineSpace(uint32_t index, uint32_t perm, uint32_t size); 590df08373a2d85d1188751749835e466eee8db878Gaurav Shah 600df08373a2d85d1188751749835e466eee8db878Gaurav Shah/* Writes [length] bytes of [data] to space at [index]. The TPM error code is 6159204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato * returned. 620df08373a2d85d1188751749835e466eee8db878Gaurav Shah */ 630df08373a2d85d1188751749835e466eee8db878Gaurav Shahuint32_t TlclWrite(uint32_t index, uint8_t *data, uint32_t length); 640df08373a2d85d1188751749835e466eee8db878Gaurav Shah 650df08373a2d85d1188751749835e466eee8db878Gaurav Shah/* Reads [length] bytes from space at [index] into [data]. The TPM error code 6659204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato * is returned. 670df08373a2d85d1188751749835e466eee8db878Gaurav Shah */ 680df08373a2d85d1188751749835e466eee8db878Gaurav Shahuint32_t TlclRead(uint32_t index, uint8_t *data, uint32_t length); 690df08373a2d85d1188751749835e466eee8db878Gaurav Shah 7059204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato/* Write-locks space at [index]. The TPM error code is returned. 710df08373a2d85d1188751749835e466eee8db878Gaurav Shah */ 7259204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzatouint32_t TlclWriteLock(uint32_t index); 730df08373a2d85d1188751749835e466eee8db878Gaurav Shah 7459204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato/* Read-locks space at [index]. The TPM error code is returned. 750df08373a2d85d1188751749835e466eee8db878Gaurav Shah */ 7659204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzatouint32_t TlclReadLock(uint32_t index); 770df08373a2d85d1188751749835e466eee8db878Gaurav Shah 7859204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato/* Asserts physical presence in software. The TPM error code is returned. 790df08373a2d85d1188751749835e466eee8db878Gaurav Shah */ 8059204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzatouint32_t TlclAssertPhysicalPresence(void); 810df08373a2d85d1188751749835e466eee8db878Gaurav Shah 8259204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato/* Turns off physical presence and locks it off until next reboot. The TPM 8359204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato * error code is returned. 84596b64052e7a8265b8f4411065036ba51badb6e0Luigi Semenzato */ 85596b64052e7a8265b8f4411065036ba51badb6e0Luigi Semenzatouint32_t TlclLockPhysicalPresence(void); 86596b64052e7a8265b8f4411065036ba51badb6e0Luigi Semenzato 8759204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato/* Sets the nvLocked bit. The TPM error code is returned. 880df08373a2d85d1188751749835e466eee8db878Gaurav Shah */ 8959204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzatouint32_t TlclSetNvLocked(void); 900df08373a2d85d1188751749835e466eee8db878Gaurav Shah 910df08373a2d85d1188751749835e466eee8db878Gaurav Shah/* Returns 1 if the TPM is owned, 0 otherwise. 920df08373a2d85d1188751749835e466eee8db878Gaurav Shah */ 930df08373a2d85d1188751749835e466eee8db878Gaurav Shahint TlclIsOwned(void); 940df08373a2d85d1188751749835e466eee8db878Gaurav Shah 9559204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato/* Issues a ForceClear. The TPM error code is returned. 960df08373a2d85d1188751749835e466eee8db878Gaurav Shah */ 9759204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzatouint32_t TlclForceClear(void); 980df08373a2d85d1188751749835e466eee8db878Gaurav Shah 99416f681882d8a35fa4c7ad9245a9e544c3115670Luigi Semenzato/* Issues a PhysicalEnable. The TPM error code is returned. 1000df08373a2d85d1188751749835e466eee8db878Gaurav Shah */ 10159204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzatouint32_t TlclSetEnable(void); 1020df08373a2d85d1188751749835e466eee8db878Gaurav Shah 103416f681882d8a35fa4c7ad9245a9e544c3115670Luigi Semenzato/* Issues a PhysicalDisable. The TPM error code is returned. 104416f681882d8a35fa4c7ad9245a9e544c3115670Luigi Semenzato */ 105416f681882d8a35fa4c7ad9245a9e544c3115670Luigi Semenzatouint32_t TlclClearEnable(void); 106416f681882d8a35fa4c7ad9245a9e544c3115670Luigi Semenzato 107596b64052e7a8265b8f4411065036ba51badb6e0Luigi Semenzato/* Issues a SetDeactivated. Pass 0 to activate. Returns result code. 1080df08373a2d85d1188751749835e466eee8db878Gaurav Shah */ 10959204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzatouint32_t TlclSetDeactivated(uint8_t flag); 1100df08373a2d85d1188751749835e466eee8db878Gaurav Shah 11159204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato/* Gets flags of interest. (Add more here as needed.) The TPM error code is 11259204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato * returned. 1130df08373a2d85d1188751749835e466eee8db878Gaurav Shah */ 11459204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzatouint32_t TlclGetFlags(uint8_t* disable, uint8_t* deactivated); 1150df08373a2d85d1188751749835e466eee8db878Gaurav Shah 11659204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato/* Sets the bGlobalLock flag, which only a reboot can clear. The TPM error 11759204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato * code is returned. 118596b64052e7a8265b8f4411065036ba51badb6e0Luigi Semenzato */ 119596b64052e7a8265b8f4411065036ba51badb6e0Luigi Semenzatouint32_t TlclSetGlobalLock(void); 120596b64052e7a8265b8f4411065036ba51badb6e0Luigi Semenzato 1214f11c36ebcc42a8f875ce6ea7cdc36f5c4e965deLuigi Semenzato/* Gets the permission bits for the NVRAM space with |index|. 1224f11c36ebcc42a8f875ce6ea7cdc36f5c4e965deLuigi Semenzato */ 1234f11c36ebcc42a8f875ce6ea7cdc36f5c4e965deLuigi Semenzatouint32_t TlclGetPermissions(uint32_t index, uint32_t* permissions); 1244f11c36ebcc42a8f875ce6ea7cdc36f5c4e965deLuigi Semenzato 1250df08373a2d85d1188751749835e466eee8db878Gaurav Shah#endif /* TPM_LITE_TLCL_H_ */ 126