blob: 3805d4e75ce04bbf84ec834ca198d918fb5bec25 [file] [log] [blame]
/** @file
Clock part of PlatformTpmLib to use TpmLib.
Copyright (c) 2025, Arm Limited. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include <Library/BaseLib.h>
#include <Library/PlatformTpmLib.h>
/**
_plat__TimerReset()
This function sets current system clock time as t0 for counting TPM time.
This function is called at a power on event to reset the clock. When the clock
is reset, the indication that the clock was stopped is also set.
**/
VOID
EFIAPI
PlatformTpmLibTimerReset (
VOID
)
{
return;
}
/**
_plat__TimerRestart()
This function should be called in order to simulate the restart of the timer
should it be stopped while power is still applied.
**/
VOID
EFIAPI
PlatformTpmLibTimerRestart (
VOID
)
{
return;
}
/**
_plat__RealTime()
This is another, probably futile, attempt to define a portable function
that will return a 64-bit clock value that has mSec resolution.
@return value realtime
**/
UINT64
EFIAPI
PlatformTpmLibRealTime (
VOID
)
{
return 0;
}
/**
_plat__TimerRead()
This function provides access to the tick timer of the platform. The TPM code
uses this value to drive the TPM Clock.
The tick timer is supposed to run when power is applied to the device. This timer
should not be reset by time events including _TPM_Init. It should only be reset
when TPM power is re-applied.
If the TPM is run in a protected environment, that environment may provide the
tick time to the TPM as long as the time provided by the environment is not
allowed to go backwards. If the time provided by the system can go backwards
during a power discontinuity, then the _plat__Signal_PowerOn should call
_plat__TimerReset().
@return value timeval
**/
UINT64
EFIAPI
PlatformTpmLibTimerRead (
VOID
)
{
return 0;
}
/**
_plat__TimerWasReset()
This function is used to interrogate the flag indicating if the tick timer has
been reset.
If the resetFlag parameter is SET, then the flag will be CLEAR before the
function returns.
@return 0 Timer wasn't reset.
@return others Timer was reset.
**/
INT32
EFIAPI
PlatformTpmLibTimerWasReset (
VOID
)
{
return 0;
}
/**
_plat__TimerWasStopped()
This function is used to interrogate the flag indicating if the tick timer has
been stopped. If so, this is typically a reason to roll the nonce.
This function will CLEAR the s_timerStopped flag before returning. This provides
functionality that is similar to status register that is cleared when read. This
is the model used here because it is the one that has the most impact on the TPM
code as the flag can only be accessed by one entity in the TPM. Any other
implementation of the hardware can be made to look like a read-once register.
@return TRUE timer was stopped
@return FALSE timer wasn't stopped
**/
BOOLEAN
EFIAPI
PlatformTpmLibTimerWasStopped (
VOID
)
{
return FALSE;
}
/**
_plat__ClockAdjustRate()
ClockRateAdjust uses predefined signal values and encapsulates the platform
specifics regarding the number of ticks the underlying clock is running at.
The adjustment must be one of these values. A COARSE adjustment is 1%, MEDIUM
is 0.1%, and FINE is the smallest amount supported by the platform. The
total (cumulative) adjustment is limited to ~15% total. Attempts to adjust
the clock further are silently ignored as are any invalid values. These
values are defined here to insulate them from spec changes and to avoid
needing visibility to the doc-generated structure headers.
@param [in] Adjust The adjust number. It could be positive
**/
VOID
EFIAPI
PlatformTpmLibClockAdjustRate (
IN INT32 Adjust
)
{
return;
}