3 Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
11 #include <Library/BaseLib.h>
12 #include <Library/DebugLib.h>
13 #include <Library/UefiBootServicesTableLib.h>
14 #include <Library/UefiRuntimeServicesTableLib.h>
16 #include <Protocol/MonotonicCounter.h>
18 UINT64 gCurrentMonotonicCount
= 0;
22 GetNextMonotonicCount (
27 return EFI_INVALID_PARAMETER
;
30 *Count
= gCurrentMonotonicCount
++;
36 GetNextHighMonotonicCount (
40 if (HighCount
== NULL
) {
41 return EFI_INVALID_PARAMETER
;
44 gCurrentMonotonicCount
+= 0x0000000100000000ULL
;
46 *HighCount
= (UINT32
)RShiftU64 (gCurrentMonotonicCount
, 32) & 0xFFFFFFFF;
53 MonotonicCounterDriverInitialize (
54 IN EFI_HANDLE ImageHandle
,
55 IN EFI_SYSTEM_TABLE
*SystemTable
59 EFI_HANDLE Handle
= NULL
;
61 // Make sure the Monotonic Counter Architectural Protocol is not already installed in the system
62 ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL
, &gEfiMonotonicCounterArchProtocolGuid
);
64 // Fill in the EFI Boot Services and EFI Runtime Services Monotonic Counter Fields
65 gBS
->GetNextMonotonicCount
= GetNextMonotonicCount
;
66 gRT
->GetNextHighMonotonicCount
= GetNextHighMonotonicCount
;
68 // Install the Monotonic Counter Architectural Protocol onto a new handle
69 Status
= gBS
->InstallMultipleProtocolInterfaces (
71 &gEfiMonotonicCounterArchProtocolGuid
,