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>
99 lines
4.0 KiB
C
99 lines
4.0 KiB
C
/** @file
|
|
Boot Logo 2 Protocol is used to convey information of Logo dispayed during boot.
|
|
|
|
The Boot Logo 2 Protocol is a replacement for the Boot Logo Protocol. If a
|
|
platform produces both the Boot Logo 2 Protocol and the Boot Logo Protocol
|
|
then the Boot Logo 2 Protocol must be used instead of the Boot Logo Protocol.
|
|
|
|
Copyright (c) 2016, Microsoft Corporation
|
|
Copyright (c) 2018, Intel Corporation. All rights reserved.<BR>
|
|
|
|
All rights reserved.
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
**/
|
|
|
|
#pragma once
|
|
|
|
#include <Protocol/GraphicsOutput.h>
|
|
|
|
#define EDKII_BOOT_LOGO2_PROTOCOL_GUID \
|
|
{ \
|
|
0x4b5dc1df, 0x1eaa, 0x48b2, { 0xa7, 0xe9, 0xea, 0xc4, 0x89, 0xa0, 0xb, 0x5c } \
|
|
}
|
|
|
|
//
|
|
// Forward reference for pure ANSI compatability
|
|
//
|
|
typedef struct _EDKII_BOOT_LOGO2_PROTOCOL EDKII_BOOT_LOGO2_PROTOCOL;
|
|
|
|
/**
|
|
Update information of logo image drawn on screen.
|
|
|
|
@param[in] This The pointer to the Boot Logo protocol 2 instance.
|
|
@param[in] BltBuffer The BLT buffer for logo drawn on screen. If BltBuffer
|
|
is set to NULL, it indicates that logo image is no
|
|
longer on the screen.
|
|
@param[in] DestinationX X coordinate of destination for the BltBuffer.
|
|
@param[in] DestinationY Y coordinate of destination for the BltBuffer.
|
|
@param[in] Width Width of rectangle in BltBuffer in pixels.
|
|
@param[in] Height Hight of rectangle in BltBuffer in pixels.
|
|
|
|
@retval EFI_SUCCESS The boot logo information was updated.
|
|
@retval EFI_INVALID_PARAMETER One of the parameters has an invalid value.
|
|
@retval EFI_OUT_OF_RESOURCES The logo information was not updated due to
|
|
insufficient memory resources.
|
|
**/
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EDKII_SET_BOOT_LOGO2)(
|
|
IN EDKII_BOOT_LOGO2_PROTOCOL *This,
|
|
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer OPTIONAL,
|
|
IN UINTN DestinationX,
|
|
IN UINTN DestinationY,
|
|
IN UINTN Width,
|
|
IN UINTN Height
|
|
);
|
|
|
|
/**
|
|
Get the location of the boot logo on the screen.
|
|
|
|
@param[in] This The pointer to the Boot Logo Protocol 2 instance
|
|
@param[out] BltBuffer Returns pointer to the GOP BLT buffer that was
|
|
previously registered with SetBootLogo2(). The
|
|
buffer returned must not be modified or freed.
|
|
@param[out] DestinationX Returns the X start position of the GOP BLT buffer
|
|
that was previously registered with SetBootLogo2().
|
|
@param[out] DestinationY Returns the Y start position of the GOP BLT buffer
|
|
that was previously registered with SetBootLogo2().
|
|
@param[out] Width Returns the width of the GOP BLT buffer
|
|
that was previously registered with SetBootLogo2().
|
|
@param[out] Height Returns the height of the GOP BLT buffer
|
|
that was previously registered with SetBootLogo2().
|
|
|
|
@retval EFI_SUCCESS The location of the boot logo was returned.
|
|
@retval EFI_NOT_READY The boot logo has not been set.
|
|
@retval EFI_INVALID_PARAMETER BltBuffer is NULL.
|
|
@retval EFI_INVALID_PARAMETER DestinationX is NULL.
|
|
@retval EFI_INVALID_PARAMETER DestinationY is NULL.
|
|
@retval EFI_INVALID_PARAMETER Width is NULL.
|
|
@retval EFI_INVALID_PARAMETER Height is NULL.
|
|
**/
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EDKII_GET_BOOT_LOGO2)(
|
|
IN EDKII_BOOT_LOGO2_PROTOCOL *This,
|
|
OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL **BltBuffer,
|
|
OUT UINTN *DestinationX,
|
|
OUT UINTN *DestinationY,
|
|
OUT UINTN *Width,
|
|
OUT UINTN *Height
|
|
);
|
|
|
|
struct _EDKII_BOOT_LOGO2_PROTOCOL {
|
|
EDKII_SET_BOOT_LOGO2 SetBootLogo;
|
|
EDKII_GET_BOOT_LOGO2 GetBootLogo;
|
|
};
|
|
|
|
extern EFI_GUID gEdkiiBootLogo2ProtocolGuid;
|