tlcl.h revision 54992f9d3379c4b048d8da6171f0e578b2db4fac
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
110df08373a2d85d1188751749835e466eee8db878Gaurav Shah#ifndef TPM_LITE_TLCL_H_
120df08373a2d85d1188751749835e466eee8db878Gaurav Shah#define TPM_LITE_TLCL_H_
130df08373a2d85d1188751749835e466eee8db878Gaurav Shah
14f302905224a346718910e56f5f1593d4b19253f1Randall Spangler#include "sysincludes.h"
155896b9664d088699e246de964a7c374af663a34eLuigi Semenzato#include "tss_constants.h"
1689678602e66df24dea75b384ce079519cb8ec2a4Che-Liang Chiou#include "tlcl_stub.h"
1739f66114c03639715cb88774255f066a2d942557Randall Spangler
1839f66114c03639715cb88774255f066a2d942557Randall Spangler/*****************************************************************************/
1939f66114c03639715cb88774255f066a2d942557Randall Spangler/* Functions implemented in tlcl.c */
2039f66114c03639715cb88774255f066a2d942557Randall Spangler
215d9509cbdee7b9c8dd91ed47d967569dbb9af83dChe-Liang Chiou/* Call this first.  Returns 0 if success, nonzero if error.
2239f66114c03639715cb88774255f066a2d942557Randall Spangler */
235d9509cbdee7b9c8dd91ed47d967569dbb9af83dChe-Liang Chiouuint32_t TlclLibInit(void);
2439f66114c03639715cb88774255f066a2d942557Randall Spangler
2539f66114c03639715cb88774255f066a2d942557Randall Spangler/* Logs to stdout.  Arguments like printf.
2639f66114c03639715cb88774255f066a2d942557Randall Spangler */
2739f66114c03639715cb88774255f066a2d942557Randall Spanglervoid TlclLog(char* format, ...);
2839f66114c03639715cb88774255f066a2d942557Randall Spangler
2939f66114c03639715cb88774255f066a2d942557Randall Spangler/* Sets the log level.  0 is quietest.
3039f66114c03639715cb88774255f066a2d942557Randall Spangler */
3139f66114c03639715cb88774255f066a2d942557Randall Spanglervoid TlclSetLogLevel(int level);
3239f66114c03639715cb88774255f066a2d942557Randall Spangler
3339f66114c03639715cb88774255f066a2d942557Randall Spangler/* Sends a TPM_Startup(ST_CLEAR).  The TPM error code is returned (0
3439f66114c03639715cb88774255f066a2d942557Randall Spangler * for success).
350df08373a2d85d1188751749835e466eee8db878Gaurav Shah */
3659204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzatouint32_t TlclStartup(void);
370df08373a2d85d1188751749835e466eee8db878Gaurav Shah
3854992f9d3379c4b048d8da6171f0e578b2db4facLuigi Semenzato/* Save the TPM state.  Normally done by the kernel before a suspend, included
3954992f9d3379c4b048d8da6171f0e578b2db4facLuigi Semenzato * here for tests.  The TPM error code is returned (0 for success).
4054992f9d3379c4b048d8da6171f0e578b2db4facLuigi Semenzato */
4154992f9d3379c4b048d8da6171f0e578b2db4facLuigi Semenzatouint32_t TlclSaveState(void);
4254992f9d3379c4b048d8da6171f0e578b2db4facLuigi Semenzato
433da063e3f7612464a41a4c9b2b31fb7eade57a13Luigi Semenzato/* Resumes by sending a TPM_Startup(ST_STATE).  The TPM error code is returned
443da063e3f7612464a41a4c9b2b31fb7eade57a13Luigi Semenzato * (0 for success).
453da063e3f7612464a41a4c9b2b31fb7eade57a13Luigi Semenzato */
463da063e3f7612464a41a4c9b2b31fb7eade57a13Luigi Semenzatouint32_t TlclResume(void);
473da063e3f7612464a41a4c9b2b31fb7eade57a13Luigi Semenzato
483da063e3f7612464a41a4c9b2b31fb7eade57a13Luigi Semenzato/* Runs the self test.  Note---this is synchronous.  To run this in parallel
4959204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato * with other firmware, use ContinueSelfTest.  The TPM error code is returned.
500df08373a2d85d1188751749835e466eee8db878Gaurav Shah */
513e1081fb71385d72fd3a522599c35b516dda7a37Randall Spangleruint32_t TlclSelfTestFull(void);
5259204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato
5339f66114c03639715cb88774255f066a2d942557Randall Spangler/* Runs the self test in the background.
5459204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato */
5559204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzatouint32_t TlclContinueSelfTest(void);
560df08373a2d85d1188751749835e466eee8db878Gaurav Shah
570df08373a2d85d1188751749835e466eee8db878Gaurav Shah/* Defines a space with permission [perm].  [index] is the index for the space,
5859204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato * [size] the usable data size.  The TPM error code is returned.
590df08373a2d85d1188751749835e466eee8db878Gaurav Shah */
6059204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzatouint32_t TlclDefineSpace(uint32_t index, uint32_t perm, uint32_t size);
610df08373a2d85d1188751749835e466eee8db878Gaurav Shah
620df08373a2d85d1188751749835e466eee8db878Gaurav Shah/* Writes [length] bytes of [data] to space at [index].  The TPM error code is
6359204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato * returned.
640df08373a2d85d1188751749835e466eee8db878Gaurav Shah */
654abede35afc8b5ecc8165d5d79f77c203bce51fcRandall Spangleruint32_t TlclWrite(uint32_t index, const void* data, uint32_t length);
660df08373a2d85d1188751749835e466eee8db878Gaurav Shah
670df08373a2d85d1188751749835e466eee8db878Gaurav Shah/* Reads [length] bytes from space at [index] into [data].  The TPM error code
6859204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato * is returned.
690df08373a2d85d1188751749835e466eee8db878Gaurav Shah */
704abede35afc8b5ecc8165d5d79f77c203bce51fcRandall Spangleruint32_t TlclRead(uint32_t index, void* data, uint32_t length);
710df08373a2d85d1188751749835e466eee8db878Gaurav Shah
7259204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato/* Write-locks space at [index].  The TPM error code is returned.
730df08373a2d85d1188751749835e466eee8db878Gaurav Shah */
7459204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzatouint32_t TlclWriteLock(uint32_t index);
750df08373a2d85d1188751749835e466eee8db878Gaurav Shah
7659204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato/* Read-locks space at [index].  The TPM error code is returned.
770df08373a2d85d1188751749835e466eee8db878Gaurav Shah */
7859204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzatouint32_t TlclReadLock(uint32_t index);
790df08373a2d85d1188751749835e466eee8db878Gaurav Shah
8059204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato/* Asserts physical presence in software.  The TPM error code is returned.
810df08373a2d85d1188751749835e466eee8db878Gaurav Shah */
8259204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzatouint32_t TlclAssertPhysicalPresence(void);
830df08373a2d85d1188751749835e466eee8db878Gaurav Shah
84377557fcb260c9b41abc36ebba5759336436e59cLuigi Semenzato/* Enables the physical presence command.  The TPM error code is returned.
851d83dd1ba5b825407a8e17972c54577d14ba173dLuigi Semenzato */
861d83dd1ba5b825407a8e17972c54577d14ba173dLuigi Semenzatouint32_t TlclPhysicalPresenceCMDEnable(void);
871d83dd1ba5b825407a8e17972c54577d14ba173dLuigi Semenzato
88377557fcb260c9b41abc36ebba5759336436e59cLuigi Semenzato/* Finalizes the physical presence settings: sofware PP is enabled, hardware PP
89377557fcb260c9b41abc36ebba5759336436e59cLuigi Semenzato * is disabled, and the lifetime lock is set.  The TPM error code is returned.
90377557fcb260c9b41abc36ebba5759336436e59cLuigi Semenzato */
91377557fcb260c9b41abc36ebba5759336436e59cLuigi Semenzatouint32_t TlclFinalizePhysicalPresence(void);
92377557fcb260c9b41abc36ebba5759336436e59cLuigi Semenzato
9359204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato/* Turns off physical presence and locks it off until next reboot.  The TPM
9459204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato * error code is returned.
95596b64052e7a8265b8f4411065036ba51badb6e0Luigi Semenzato */
96596b64052e7a8265b8f4411065036ba51badb6e0Luigi Semenzatouint32_t TlclLockPhysicalPresence(void);
97596b64052e7a8265b8f4411065036ba51badb6e0Luigi Semenzato
9859204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato/* Sets the nvLocked bit.  The TPM error code is returned.
990df08373a2d85d1188751749835e466eee8db878Gaurav Shah */
10059204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzatouint32_t TlclSetNvLocked(void);
1010df08373a2d85d1188751749835e466eee8db878Gaurav Shah
1020df08373a2d85d1188751749835e466eee8db878Gaurav Shah/* Returns 1 if the TPM is owned, 0 otherwise.
1030df08373a2d85d1188751749835e466eee8db878Gaurav Shah */
1040df08373a2d85d1188751749835e466eee8db878Gaurav Shahint TlclIsOwned(void);
1050df08373a2d85d1188751749835e466eee8db878Gaurav Shah
10659204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato/* Issues a ForceClear.  The TPM error code is returned.
1070df08373a2d85d1188751749835e466eee8db878Gaurav Shah */
10859204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzatouint32_t TlclForceClear(void);
1090df08373a2d85d1188751749835e466eee8db878Gaurav Shah
110416f681882d8a35fa4c7ad9245a9e544c3115670Luigi Semenzato/* Issues a PhysicalEnable.  The TPM error code is returned.
1110df08373a2d85d1188751749835e466eee8db878Gaurav Shah */
11259204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzatouint32_t TlclSetEnable(void);
1130df08373a2d85d1188751749835e466eee8db878Gaurav Shah
114416f681882d8a35fa4c7ad9245a9e544c3115670Luigi Semenzato/* Issues a PhysicalDisable.  The TPM error code is returned.
115416f681882d8a35fa4c7ad9245a9e544c3115670Luigi Semenzato */
116416f681882d8a35fa4c7ad9245a9e544c3115670Luigi Semenzatouint32_t TlclClearEnable(void);
117416f681882d8a35fa4c7ad9245a9e544c3115670Luigi Semenzato
118596b64052e7a8265b8f4411065036ba51badb6e0Luigi Semenzato/* Issues a SetDeactivated.  Pass 0 to activate.  Returns result code.
1190df08373a2d85d1188751749835e466eee8db878Gaurav Shah */
12059204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzatouint32_t TlclSetDeactivated(uint8_t flag);
1210df08373a2d85d1188751749835e466eee8db878Gaurav Shah
1223e1081fb71385d72fd3a522599c35b516dda7a37Randall Spangler/* Gets flags of interest.  Pointers for flags you aren't interested in may
123205190d4ae8080298d9d1b580dd95c885f2af42cRandall Spangler * be NULL.  The TPM error code is returned.
1240df08373a2d85d1188751749835e466eee8db878Gaurav Shah */
125a7e19cffbee540a130d16b3b93ebfe250a774358Luigi Semenzatouint32_t TlclGetFlags(uint8_t* disable, uint8_t* deactivated,
126a7e19cffbee540a130d16b3b93ebfe250a774358Luigi Semenzato                      uint8_t* nvlocked);
1270df08373a2d85d1188751749835e466eee8db878Gaurav Shah
12859204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato/* Sets the bGlobalLock flag, which only a reboot can clear.  The TPM error
12959204c57d0a4889e3cace81b3361ea06f7b3fb45Luigi Semenzato * code is returned.
130596b64052e7a8265b8f4411065036ba51badb6e0Luigi Semenzato */
131596b64052e7a8265b8f4411065036ba51badb6e0Luigi Semenzatouint32_t TlclSetGlobalLock(void);
132596b64052e7a8265b8f4411065036ba51badb6e0Luigi Semenzato
13339f66114c03639715cb88774255f066a2d942557Randall Spangler/* Performs a TPM_Extend.
13439f66114c03639715cb88774255f066a2d942557Randall Spangler */
135b64faaa7f4167344765eb32baebb0aa01a03bc29Gaurav Shahuint32_t TlclExtend(int pcr_num, const uint8_t* in_digest, uint8_t* out_digest);
13639f66114c03639715cb88774255f066a2d942557Randall Spangler
1374f11c36ebcc42a8f875ce6ea7cdc36f5c4e965deLuigi Semenzato/* Gets the permission bits for the NVRAM space with |index|.
1384f11c36ebcc42a8f875ce6ea7cdc36f5c4e965deLuigi Semenzato */
1394f11c36ebcc42a8f875ce6ea7cdc36f5c4e965deLuigi Semenzatouint32_t TlclGetPermissions(uint32_t index, uint32_t* permissions);
1404f11c36ebcc42a8f875ce6ea7cdc36f5c4e965deLuigi Semenzato
1415896b9664d088699e246de964a7c374af663a34eLuigi Semenzato/* Gets the entire set of permanent flags.
1425896b9664d088699e246de964a7c374af663a34eLuigi Semenzato */
1435896b9664d088699e246de964a7c374af663a34eLuigi Semenzatouint32_t TlclGetPermanentFlags(TPM_PERMANENT_FLAGS* pflags);
1445896b9664d088699e246de964a7c374af663a34eLuigi Semenzato
1455896b9664d088699e246de964a7c374af663a34eLuigi Semenzato/* Gets the entire set of volatile (ST_CLEAR) flags.
1465896b9664d088699e246de964a7c374af663a34eLuigi Semenzato */
1475896b9664d088699e246de964a7c374af663a34eLuigi Semenzatouint32_t TlclGetSTClearFlags(TPM_STCLEAR_FLAGS* pflags);
1485896b9664d088699e246de964a7c374af663a34eLuigi Semenzato
1490df08373a2d85d1188751749835e466eee8db878Gaurav Shah#endif  /* TPM_LITE_TLCL_H_ */
150