mirror of
https://github.com/Dasharo/edk2-upstream.git
synced 2026-06-13 19:16:19 -07:00
Replace traditional `#ifndef`/`#define`/`#endif` include guards with
`#pragma` once.
`#pragma once` is a widely supported preprocessor directive that
prevents header files from being included multiple times. It is
supported by all toolchains used to build edk2: GCC, Clang/LLVM, and
MSVC.
Compared to macro-based include guards, `#pragma once`:
- Eliminates the risk of macro name collisions or copy/paste errors
where two headers inadvertently use the same guard macro.
- Eliminate inconsistency in the way include guard macros are named
(e.g., some files use `__FILE_H__`, others use `FILE_H_`, etc.).
- Reduces boilerplate (three lines replaced by one).
- Avoids polluting the macro namespace with guard symbols.
- Can improve build times as the preprocessor can skip re-opening the
file entirely, rather than re-reading it to find the matching
`#endif` ("multiple-include optimization").
- Note that some compilers may already optimize traditional include
guards, by recognzining the idiomatic pattern.
This change is made acknowledging that overall portability of the
code will technically be reduced, as `#pragma once` is not part of the
C/C++ standards.
However, this is considered acceptable given:
1. edk2 already defines a subset of supported compilers in
BaseTools/Conf/tools_def.template, all of which have supported
`#pragma once` for over two decades.
2. There have been concerns raised to the project about inconsistent
include guard naming and potential macro collisions.
Approximate compiler support dates:
- MSVC: Supported since Visual C++ 4.2 (1996)
- GCC: Supported since 3.4 (2004)
(http://gnu.ist.utl.pt/software/gcc/gcc-3.4/changes.html)
- Clang (LLVM based): Since initial release in 2007
Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
83 lines
2.5 KiB
C
83 lines
2.5 KiB
C
/** @file
|
|
TdxMeasurementLib header file
|
|
Copyright (c) 2025, Intel Corporation. All rights reserved.<BR>
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
**/
|
|
|
|
#pragma once
|
|
|
|
#include <PiPei.h>
|
|
|
|
#define CC_MR_INDEX_0_MRTD 0
|
|
#define CC_MR_INDEX_1_RTMR0 1
|
|
#define CC_MR_INDEX_2_RTMR1 2
|
|
#define CC_MR_INDEX_3_RTMR2 3
|
|
#define CC_MR_INDEX_INVALID 4
|
|
|
|
/**
|
|
According to UEFI Spec 2.10 Section 38.4.1:
|
|
The following table shows the TPM PCR index mapping and CC event log measurement
|
|
register index interpretation for Intel TDX, where MRTD means Trust Domain Measurement
|
|
Register and RTMR means Runtime Measurement Register
|
|
// TPM PCR Index | CC Measurement Register Index | TDX-measurement register
|
|
// ------------------------------------------------------------------------
|
|
// 0 | 0 | MRTD
|
|
// 1, 7 | 1 | RTMR[0]
|
|
// 2~6 | 2 | RTMR[1]
|
|
// 8~15 | 3 | RTMR[2]
|
|
@param[in] PCRIndex Index of the TPM PCR
|
|
@retval UINT32 Index of the CC Event Log Measurement Register Index
|
|
@retval CC_MR_INDEX_INVALID Invalid MR Index
|
|
**/
|
|
UINT32
|
|
EFIAPI
|
|
TdxMeasurementMapPcrToMrIndex (
|
|
IN UINT32 PCRIndex
|
|
);
|
|
|
|
/**
|
|
* Build GuidHob for Tdx CC measurement event.
|
|
*
|
|
* @param RtmrIndex RTMR index
|
|
* @param EventType Event type
|
|
* @param EventData Event data
|
|
* @param EventSize Size of event data
|
|
* @param HashValue Hash value
|
|
* @param HashSize Size of hash
|
|
*
|
|
* @retval EFI_SUCCESS Successfully build the GuidHobs
|
|
* @retval Others Other error as indicated
|
|
*/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
TdxMeasurementBuildGuidHob (
|
|
UINT32 RtmrIndex,
|
|
UINT32 EventType,
|
|
UINT8 *EventData,
|
|
UINT32 EventSize,
|
|
UINT8 *HashValue,
|
|
UINT32 HashSize
|
|
);
|
|
|
|
/**
|
|
* Calculate the sha384 of input Data and extend it to RTMR register.
|
|
*
|
|
* @param RtmrIndex Index of the RTMR register
|
|
* @param DataToHash Data to be hashed
|
|
* @param DataToHashLen Length of the data
|
|
* @param Digest Hash value of the input data
|
|
* @param DigestLen Length of the hash value
|
|
*
|
|
* @retval EFI_SUCCESS Successfully hash and extend to RTMR
|
|
* @retval Others Other errors as indicated
|
|
*/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
TdxMeasurementHashAndExtendToRtmr (
|
|
IN UINT32 RtmrIndex,
|
|
IN VOID *DataToHash,
|
|
IN UINTN DataToHashLen,
|
|
OUT UINT8 *Digest,
|
|
IN UINTN DigestLen
|
|
);
|