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