Coverage Report

Created: 2025-08-03 06:18

/src/libtpms/src/tpm2/PowerPlat.c
Line
Count
Source
1
/********************************************************************************/
2
/*                    */
3
/*       Platform Power Support           */
4
/*           Written by Ken Goldman       */
5
/*           IBM Thomas J. Watson Research Center     */
6
/*            $Id: PowerPlat.c 1529 2019-11-21 23:29:01Z kgoldman $   */
7
/*                    */
8
/*  Licenses and Notices              */
9
/*                    */
10
/*  1. Copyright Licenses:              */
11
/*                    */
12
/*  - Trusted Computing Group (TCG) grants to the user of the source code in  */
13
/*    this specification (the "Source Code") a worldwide, irrevocable,    */
14
/*    nonexclusive, royalty free, copyright license to reproduce, create  */
15
/*    derivative works, distribute, display and perform the Source Code and */
16
/*    derivative works thereof, and to grant others the rights granted herein.  */
17
/*                    */
18
/*  - The TCG grants to the user of the other parts of the specification  */
19
/*    (other than the Source Code) the rights to reproduce, distribute,   */
20
/*    display, and perform the specification solely for the purpose of    */
21
/*    developing products based on such documents.        */
22
/*                    */
23
/*  2. Source Code Distribution Conditions:         */
24
/*                    */
25
/*  - Redistributions of Source Code must retain the above copyright licenses,  */
26
/*    this list of conditions and the following disclaimers.      */
27
/*                    */
28
/*  - Redistributions in binary form must reproduce the above copyright   */
29
/*    licenses, this list of conditions and the following disclaimers in the  */
30
/*    documentation and/or other materials provided with the distribution.  */
31
/*                    */
32
/*  3. Disclaimers:               */
33
/*                    */
34
/*  - THE COPYRIGHT LICENSES SET FORTH ABOVE DO NOT REPRESENT ANY FORM OF */
35
/*  LICENSE OR WAIVER, EXPRESS OR IMPLIED, BY ESTOPPEL OR OTHERWISE, WITH */
36
/*  RESPECT TO PATENT RIGHTS HELD BY TCG MEMBERS (OR OTHER THIRD PARTIES) */
37
/*  THAT MAY BE NECESSARY TO IMPLEMENT THIS SPECIFICATION OR OTHERWISE.   */
38
/*  Contact TCG Administration (admin@trustedcomputinggroup.org) for    */
39
/*  information on specification licensing rights available through TCG   */
40
/*  membership agreements.              */
41
/*                    */
42
/*  - THIS SPECIFICATION IS PROVIDED "AS IS" WITH NO EXPRESS OR IMPLIED   */
43
/*    WARRANTIES WHATSOEVER, INCLUDING ANY WARRANTY OF MERCHANTABILITY OR   */
44
/*    FITNESS FOR A PARTICULAR PURPOSE, ACCURACY, COMPLETENESS, OR    */
45
/*    NONINFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS, OR ANY WARRANTY    */
46
/*    OTHERWISE ARISING OUT OF ANY PROPOSAL, SPECIFICATION OR SAMPLE.   */
47
/*                    */
48
/*  - Without limitation, TCG and its members and licensors disclaim all  */
49
/*    liability, including liability for infringement of any proprietary  */
50
/*    rights, relating to use of information in this specification and to the */
51
/*    implementation of this specification, and TCG disclaims all liability for */
52
/*    cost of procurement of substitute goods or services, lost profits, loss   */
53
/*    of use, loss of data or any incidental, consequential, direct, indirect,  */
54
/*    or special damages, whether under contract, tort, warranty or otherwise,  */
55
/*    arising in any way out of use or reliance upon this specification or any  */
56
/*    information herein.             */
57
/*                    */
58
/*  (c) Copyright IBM Corp. and others, 2016 - 2019       */
59
/*                    */
60
/********************************************************************************/
61
62
//** Includes and Function Prototypes
63
64
#include "Platform.h"
65
66
//** Functions
67
68
//***_plat__Signal_PowerOn()
69
// Signal platform power on
70
LIB_EXPORT int _plat__Signal_PowerOn(void)
71
14.6k
{
72
    // Reset the timer
73
14.6k
    _plat__TimerReset();
74
75
    // Need to indicate that we lost power
76
14.6k
    s_powerLost = TRUE;
77
78
14.6k
    return 0;
79
14.6k
}
80
81
//*** _plat__WasPowerLost()
82
// Test whether power was lost before a _TPM_Init.
83
//
84
// This function will clear the "hardware" indication of power loss before return.
85
// This means that there can only be one spot in the TPM code where this value
86
// gets read. This method is used here as it is the most difficult to manage in the
87
// TPM code and, if the hardware actually works this way, it is hard to make it
88
// look like anything else. So, the burden is placed on the TPM code rather than the
89
// platform code
90
//  Return Type: int
91
//      TRUE(1)         power was lost
92
//      FALSE(0)        power was not lost
93
LIB_EXPORT int _plat__WasPowerLost(void)
94
14.6k
{
95
14.6k
    int retVal  = s_powerLost;
96
14.6k
    s_powerLost = FALSE;
97
14.6k
    return retVal;
98
14.6k
}
99
100
//*** _plat_Signal_Reset()
101
// This a TPM reset without a power loss.
102
LIB_EXPORT int _plat__Signal_Reset(void)
103
14.6k
{
104
    // Initialize locality
105
14.6k
    s_locality = 0;
106
107
    // Command cancel
108
14.6k
    s_isCanceled = FALSE;
109
110
14.6k
    _TPM_Init();
111
112
    // if we are doing reset but did not have a power failure, then we should
113
    // not need to reload NV ...
114
115
14.6k
    return 0;
116
14.6k
}
117
118
//***_plat__Signal_PowerOff()
119
// Signal platform power off
120
LIB_EXPORT void _plat__Signal_PowerOff(void)
121
14.6k
{
122
    // Prepare NV memory for power off
123
14.6k
    _plat__NVDisable((void*)FALSE, 0);
124
125
14.6k
#if ACT_SUPPORT
126
    // Disable tick ACT tick processing
127
14.6k
    _plat__ACT_EnableTicks(FALSE);
128
14.6k
#endif
129
130
14.6k
    return;
131
14.6k
}