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