mirror of
https://github.com/tianocore/edk2
synced 2026-08-27 00:23:19 -04: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>
101 lines
3.9 KiB
C
101 lines
3.9 KiB
C
/** @file
|
|
Fmp Capsule Dependency support functions for Firmware Management Protocol based
|
|
firmware updates.
|
|
|
|
Copyright (c) Microsoft Corporation.<BR>
|
|
Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
|
|
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
**/
|
|
|
|
#pragma once
|
|
|
|
#include <PiDxe.h>
|
|
#include <Protocol/FirmwareManagement.h>
|
|
|
|
//
|
|
// Data struct to store FMP ImageType and version for dependency check.
|
|
//
|
|
typedef struct {
|
|
EFI_GUID ImageTypeId;
|
|
UINT32 Version;
|
|
} FMP_DEPEX_CHECK_VERSION_DATA;
|
|
|
|
/**
|
|
Validate the dependency expression and output its size.
|
|
|
|
@param[in] Dependencies Pointer to the EFI_FIRMWARE_IMAGE_DEP.
|
|
@param[in] MaxDepexSize Max size of the dependency.
|
|
@param[out] DepexSize Size of dependency.
|
|
@param[out] LastAttemptStatus An optional pointer to a UINT32 that holds the
|
|
last attempt status to report back to the caller.
|
|
If a last attempt status error code is not returned,
|
|
this function will not modify the LastAttemptStatus value.
|
|
|
|
@retval TRUE The dependency expression is valid.
|
|
@retval FALSE The dependency expression is invalid.
|
|
|
|
**/
|
|
BOOLEAN
|
|
EFIAPI
|
|
ValidateDependency (
|
|
IN EFI_FIRMWARE_IMAGE_DEP *Dependencies,
|
|
IN UINTN MaxDepexSize,
|
|
OUT UINT32 *DepexSize,
|
|
OUT UINT32 *LastAttemptStatus OPTIONAL
|
|
);
|
|
|
|
/**
|
|
Get dependency from firmware image.
|
|
|
|
@param[in] Image Points to the firmware image.
|
|
@param[in] ImageSize Size, in bytes, of the firmware image.
|
|
@param[out] DepexSize Size, in bytes, of the dependency.
|
|
@param[out] LastAttemptStatus An optional pointer to a UINT32 that holds the
|
|
last attempt status to report back to the caller.
|
|
If a last attempt status error code is not returned,
|
|
this function will not modify the LastAttemptStatus value.
|
|
@retval The pointer to dependency.
|
|
@retval Null
|
|
|
|
**/
|
|
EFI_FIRMWARE_IMAGE_DEP *
|
|
EFIAPI
|
|
GetImageDependency (
|
|
IN EFI_FIRMWARE_IMAGE_AUTHENTICATION *Image,
|
|
IN UINTN ImageSize,
|
|
OUT UINT32 *DepexSize,
|
|
OUT UINT32 *LastAttemptStatus OPTIONAL
|
|
);
|
|
|
|
/**
|
|
Evaluate the dependencies. The caller must search all the Fmp instances and
|
|
gather their versions into FmpVersions parameter. If there is PUSH_GUID opcode
|
|
in dependency expression with no FmpVersions provided, the dependency will
|
|
evaluate to FALSE.
|
|
|
|
@param[in] Dependencies Dependency expressions.
|
|
@param[in] DependenciesSize Size of Dependency expressions.
|
|
@param[in] FmpVersions Array of Fmp ImageTypeId and version. This
|
|
parameter is optional and can be set to NULL.
|
|
@param[in] FmpVersionsCount Element count of the array. When FmpVersions
|
|
is NULL, FmpVersionsCount must be 0.
|
|
@param[out] LastAttemptStatus An optional pointer to a UINT32 that holds the
|
|
last attempt status to report back to the caller.
|
|
This function will set the value to LAST_ATTEMPT_STATUS_SUCCESS
|
|
if an error code is not set.
|
|
|
|
@retval TRUE Dependency expressions evaluate to TRUE.
|
|
@retval FALSE Dependency expressions evaluate to FALSE.
|
|
|
|
**/
|
|
BOOLEAN
|
|
EFIAPI
|
|
EvaluateDependency (
|
|
IN EFI_FIRMWARE_IMAGE_DEP *Dependencies,
|
|
IN UINTN DependenciesSize,
|
|
IN FMP_DEPEX_CHECK_VERSION_DATA *FmpVersions OPTIONAL,
|
|
IN UINTN FmpVersionsCount,
|
|
OUT UINT32 *LastAttemptStatus OPTIONAL
|
|
);
|