diff options
author | 2023-10-10 14:33:42 +0000 | |
---|---|---|
committer | 2023-10-10 14:33:42 +0000 | |
commit | af1a266670d040d2f4083ff309d732d648afba2a (patch) | |
tree | 2fc46203448ddcc6f81546d379abfaeb323575e9 /roms/skiboot/libstb/tss2/ibmtpm20tss/utils/Platform.h | |
parent | e02cda008591317b1625707ff8e115a4841aa889 (diff) |
Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
Diffstat (limited to 'roms/skiboot/libstb/tss2/ibmtpm20tss/utils/Platform.h')
-rw-r--r-- | roms/skiboot/libstb/tss2/ibmtpm20tss/utils/Platform.h | 361 |
1 files changed, 361 insertions, 0 deletions
diff --git a/roms/skiboot/libstb/tss2/ibmtpm20tss/utils/Platform.h b/roms/skiboot/libstb/tss2/ibmtpm20tss/utils/Platform.h new file mode 100644 index 000000000..9c5a594d3 --- /dev/null +++ b/roms/skiboot/libstb/tss2/ibmtpm20tss/utils/Platform.h @@ -0,0 +1,361 @@ +/********************************************************************************/ +/* */ +/* */ +/* Written by Ken Goldman */ +/* IBM Thomas J. Watson Research Center */ +/* $Id: Platform.h 1257 2018-06-27 20:52:08Z kgoldman $ */ +/* */ +/* Licenses and Notices */ +/* */ +/* 1. Copyright Licenses: */ +/* */ +/* - Trusted Computing Group (TCG) grants to the user of the source code in */ +/* this specification (the "Source Code") a worldwide, irrevocable, */ +/* nonexclusive, royalty free, copyright license to reproduce, create */ +/* derivative works, distribute, display and perform the Source Code and */ +/* derivative works thereof, and to grant others the rights granted herein. */ +/* */ +/* - The TCG grants to the user of the other parts of the specification */ +/* (other than the Source Code) the rights to reproduce, distribute, */ +/* display, and perform the specification solely for the purpose of */ +/* developing products based on such documents. */ +/* */ +/* 2. Source Code Distribution Conditions: */ +/* */ +/* - Redistributions of Source Code must retain the above copyright licenses, */ +/* this list of conditions and the following disclaimers. */ +/* */ +/* - Redistributions in binary form must reproduce the above copyright */ +/* licenses, this list of conditions and the following disclaimers in the */ +/* documentation and/or other materials provided with the distribution. */ +/* */ +/* 3. Disclaimers: */ +/* */ +/* - THE COPYRIGHT LICENSES SET FORTH ABOVE DO NOT REPRESENT ANY FORM OF */ +/* LICENSE OR WAIVER, EXPRESS OR IMPLIED, BY ESTOPPEL OR OTHERWISE, WITH */ +/* RESPECT TO PATENT RIGHTS HELD BY TCG MEMBERS (OR OTHER THIRD PARTIES) */ +/* THAT MAY BE NECESSARY TO IMPLEMENT THIS SPECIFICATION OR OTHERWISE. */ +/* Contact TCG Administration (admin@trustedcomputinggroup.org) for */ +/* information on specification licensing rights available through TCG */ +/* membership agreements. */ +/* */ +/* - THIS SPECIFICATION IS PROVIDED "AS IS" WITH NO EXPRESS OR IMPLIED */ +/* WARRANTIES WHATSOEVER, INCLUDING ANY WARRANTY OF MERCHANTABILITY OR */ +/* FITNESS FOR A PARTICULAR PURPOSE, ACCURACY, COMPLETENESS, OR */ +/* NONINFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS, OR ANY WARRANTY */ +/* OTHERWISE ARISING OUT OF ANY PROPOSAL, SPECIFICATION OR SAMPLE. */ +/* */ +/* - Without limitation, TCG and its members and licensors disclaim all */ +/* liability, including liability for infringement of any proprietary */ +/* rights, relating to use of information in this specification and to the */ +/* implementation of this specification, and TCG disclaims all liability for */ +/* cost of procurement of substitute goods or services, lost profits, loss */ +/* of use, loss of data or any incidental, consequential, direct, indirect, */ +/* or special damages, whether under contract, tort, warranty or otherwise, */ +/* arising in any way out of use or reliance upon this specification or any */ +/* information herein. */ +/* */ +/* (c) Copyright IBM Corp. and others, 2012-2015 */ +/* */ +/********************************************************************************/ + +/* rev 122 */ + +// C.8 Platform.h + +#ifndef PLATFORM_H +#define PLATFORM_H + +// C.8.1. Includes and Defines + +#include <ibmtss/BaseTypes.h> +#include "stdint.h" +#include "TpmError.h" +#include <ibmtss/TpmBuildSwitches.h> + +// C.8.2. Power Functions +// C.8.2.1. _plat__Signal_PowerOn +// Signal power on This signal is simulate by a RPC call + +LIB_EXPORT int +_plat__Signal_PowerOn(void); + +// C.8.2.2. _plat__Signal_Reset +// Signal reset This signal is simulate by a RPC call + +LIB_EXPORT int +_plat__Signal_Reset(void); + +// C.8.2.3. _plat__WasPowerLost() +// Indicates if the power was lost before a _TPM__Init(). + +LIB_EXPORT BOOL +_plat__WasPowerLost(BOOL clear); + +// C.8.2.4. _plat__Signal_PowerOff() +// Signal power off This signal is simulate by a RPC call + +LIB_EXPORT void +_plat__Signal_PowerOff(void); + +// C.8.3. Physical Presence Functions +// C.8.3.1. _plat__PhysicalPresenceAsserted() +// Check if physical presence is signaled +// Return Value Meaning +// TRUE if physical presence is signaled +// FALSE if physical presence is not signaled + +LIB_EXPORT BOOL +_plat__PhysicalPresenceAsserted(void); + +// C.8.3.2. _plat__Signal_PhysicalPresenceOn +// Signal physical presence on This signal is simulate by a RPC call + +LIB_EXPORT void +_plat__Signal_PhysicalPresenceOn(void); + +// C.8.3.3. _plat__Signal_PhysicalPresenceOff() +// Signal physical presence off This signal is simulate by a RPC call + +LIB_EXPORT void +_plat__Signal_PhysicalPresenceOff(void); + +// C.8.4. Command Canceling Functions +// C.8.4.1. _plat__IsCanceled() +// Check if the cancel flag is set +// Return Value Meaning +// TRUE if cancel flag is set +// FALSE if cancel flag is not set + +LIB_EXPORT BOOL +_plat__IsCanceled(void); + +// C.8.4.2. _plat__SetCancel() +// Set cancel flag. + +LIB_EXPORT void +_plat__SetCancel(void); + +// C.8.4.3. _plat__ClearCancel() +// Clear cancel flag + +LIB_EXPORT void +_plat__ClearCancel( void); + +// C.8.5. NV memory functions +// C.8.5.1. _plat__NvErrors() + +// This function is used by the simulator to set the error flags in the NV subsystem to simulate an +// error in the NV loading process + +LIB_EXPORT void +_plat__NvErrors( + BOOL recoverable, + BOOL unrecoverable + ); + +// C.8.5.2. _plat__NVEnable() + +// Enable platform NV memory NV memory is automatically enabled at power on event. This function is +// mostly for TPM_Manufacture() to access NV memory without a power on event + +// Return Value Meaning +// 0 if success +// non-0 if fail + +LIB_EXPORT int +_plat__NVEnable( + void *platParameter // IN: platform specific parameters + ); + +// C.8.5.3. _plat__NVDisable() + +// Disable platform NV memory NV memory is automatically disabled at power off event. This function +// is mostly for TPM_Manufacture() to disable NV memory without a power off event + +LIB_EXPORT void +_plat__NVDisable(void); + +// C.8.5.4. _plat__IsNvAvailable() +// Check if NV is available +// Return Value Meaning +// 0 NV is available +// 1 NV is not available due to write failure +// 2 NV is not available due to rate limit + +LIB_EXPORT int +_plat__IsNvAvailable(void); + +// C.8.5.5. _plat__NvCommit() +// Update NV chip +// Return Value Meaning +// 0 NV write success +// non-0 NV write fail + +LIB_EXPORT int +_plat__NvCommit(void); + +// C.8.5.6. _plat__NvMemoryRead() +// Read a chunk of NV memory + +LIB_EXPORT void +_plat__NvMemoryRead( + unsigned int startOffset, // IN: read start + unsigned int size, // IN: size of bytes to read + void *data // OUT: data buffer + ); + +// C.8.5.7. _plat__NvIsDifferent() + +// This function checks to see if the NV is different from the test value. This is so that NV will +// not be written if it has not changed. + +// Return Value Meaning +// TRUE the NV location is different from the test value +// FALSE the NV location is the same as the test value + +LIB_EXPORT BOOL +_plat__NvIsDifferent( + unsigned int startOffset, // IN: read start + unsigned int size, // IN: size of bytes to compare + void *data // IN: data buffer + ); + +// C.8.5.8. _plat__NvMemoryWrite() + +// Write a chunk of NV memory + +LIB_EXPORT void +_plat__NvMemoryWrite( + unsigned int startOffset, // IN: read start + unsigned int size, // IN: size of bytes to read + void *data // OUT: data buffer + ); + +// C.8.5.9. _plat__NvMemoryClear() + +// Function is used to set a range of NV memory bytes to an implementation-dependent value. The +// value represents the errase state of the memory. + +LIB_EXPORT void +_plat__NvMemoryClear( + unsigned int start, // IN: clear start + unsigned int size // IN: number of bytes to be clear + ); + +// C.8.5.10. _plat__NvMemoryMove() + +// Move a chunk of NV memory from source to destination This function should ensure that if there +// overlap, the original data is copied before it is written + +LIB_EXPORT void +_plat__NvMemoryMove( + unsigned int sourceOffset, // IN: source offset + unsigned int destOffset, // IN: destination offset + unsigned int size // IN: size of data being moved + ); + +// C.8.5.11. _plat__SetNvAvail() + +// Set the current NV state to available. This function is for testing purposes only. It is not +// part of the platform NV logic + +LIB_EXPORT void +_plat__SetNvAvail(void); + +// C.8.5.12. _plat__ClearNvAvail() + +// Set the current NV state to unavailable. This function is for testing purposes only. It is not +// part of the platform NV logic + +LIB_EXPORT void +_plat__ClearNvAvail(void); + +// C.8.6. Locality Functions +// C.8.6.1. _plat__LocalityGet() +// Get the most recent command locality in locality value form + +LIB_EXPORT unsigned char +_plat__LocalityGet(void); + +// C.8.6.2. _plat__LocalitySet() +// Set the most recent command locality in locality value form + +LIB_EXPORT void +_plat__LocalitySet( + unsigned char locality + ); + +// C.8.7. Clock Constants and Functions +// Assume that the nominal divisor is 30000 + +#define CLOCK_NOMINAL 30000 + +// A 1% change in rate is 300 counts + +#define CLOCK_ADJUST_COARSE 300 + +// A .1 change in rate is 30 counts + +#define CLOCK_ADJUST_MEDIUM 30 + +// A minimum change in rate is 1 count + +#define CLOCK_ADJUST_FINE 1 + +// The clock tolerance is +/-15% (4500 counts) Allow some guard band (16.7%) + +#define CLOCK_ADJUST_LIMIT 5000 + +// C.8.7.1. _plat__ClockReset() + +// This function sets the current clock time as initial time. This function is called at a power on +// event to reset the clock + +LIB_EXPORT void +_plat__ClockReset(void); + +// C.8.7.2. _plat__ClockTimeFromStart() + +// Function returns the compensated time from the start of the command when +// _plat__ClockTimeFromStart() was called. + +LIB_EXPORT unsigned long long +_plat__ClockTimeFromStart(void); + +// C.8.7.3. _plat__ClockTimeElapsed() + +// Get the time elapsed from current to the last time the _plat__ClockTimeElapsed() is called. For +// the first _plat__ClockTimeElapsed() call after a power on event, this call report the elapsed +// time from power on to the current call + +LIB_EXPORT unsigned long long +_plat__ClockTimeElapsed(void); + +// C.8.7.4. _plat__ClockAdjustRate() +// Adjust the clock rate + +LIB_EXPORT void +_plat__ClockAdjustRate( + int adjust // IN: the adjust number. It could be + // positive or negative + ); + +// C.8.8. Single Function Files +// C.8.8.1. _plat__GetEntropy() + +// This function is used to get available hardware entropy. In a hardware implementation of this +// function, there would be no call to the system to get entropy. If the caller does not ask for any +// entropy, then this is a startup indication and firstValue should be reset. + +// Return Value Meaning +// < 0 hardware failure of the entropy generator, this is sticky +// >= 0 the returned amount of entropy (bytes) + +LIB_EXPORT int32_t +_plat__GetEntropy( + unsigned char *entropy, // output buffer + uint32_t amount // amount requested + ); + +#endif |