You've already forked edk2-upstream
mirror of
https://github.com/Dasharo/edk2-upstream.git
synced 2026-03-06 15:03:57 -08: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>
137 lines
4.0 KiB
C
137 lines
4.0 KiB
C
/** @file
|
|
|
|
Copyright (c) 2014, ARM Ltd. All rights reserved.<BR>
|
|
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
**/
|
|
|
|
#pragma once
|
|
|
|
extern EFI_GUID gAndroidFastbootPlatformProtocolGuid;
|
|
|
|
/*
|
|
Protocol for platform-specific operations initiated by Android Fastboot.
|
|
|
|
Based on Fastboot Protocol version 0.4. See
|
|
system/core/fastboot/fastboot_protocol.txt in the AOSP source tree for more
|
|
info.
|
|
|
|
Doesn't support image verification.
|
|
*/
|
|
|
|
/*
|
|
Do any initialisation that needs to be done in order to be able to respond to
|
|
commands.
|
|
|
|
@retval EFI_SUCCESS Initialised successfully.
|
|
@retval !EFI_SUCCESS Error in initialisation.
|
|
*/
|
|
typedef
|
|
EFI_STATUS
|
|
(*FASTBOOT_PLATFORM_INIT) (
|
|
VOID
|
|
);
|
|
|
|
/*
|
|
To be called when Fastboot is finished and we aren't rebooting or booting an
|
|
image. Undo initialisation, free resources.
|
|
*/
|
|
typedef
|
|
VOID
|
|
(*FASTBOOT_PLATFORM_UN_INIT) (
|
|
VOID
|
|
);
|
|
|
|
/*
|
|
Flash the partition named (according to a platform-specific scheme)
|
|
PartitionName, with the image pointed to by Buffer, whose size is BufferSize.
|
|
|
|
@param[in] PartitionName Null-terminated name of partition to write.
|
|
@param[in] BufferSize Size of Buffer in bytes.
|
|
@param[in] Buffer Data to write to partition.
|
|
|
|
@retval EFI_NOT_FOUND No such partition.
|
|
@retval EFI_DEVICE_ERROR Flashing failed.
|
|
*/
|
|
typedef
|
|
EFI_STATUS
|
|
(*FASTBOOT_PLATFORM_FLASH) (
|
|
IN CHAR8 *PartitionName,
|
|
IN UINTN BufferSize,
|
|
IN VOID *Buffer
|
|
);
|
|
|
|
/*
|
|
Erase the partition named PartitionName.
|
|
|
|
@param[in] PartitionName Null-terminated name of partition to erase.
|
|
|
|
@retval EFI_NOT_FOUND No such partition.
|
|
@retval EFI_DEVICE_ERROR Erasing failed.
|
|
*/
|
|
typedef
|
|
EFI_STATUS
|
|
(*FASTBOOT_PLATFORM_ERASE) (
|
|
IN CHAR8 *PartitionName
|
|
);
|
|
|
|
/*
|
|
If the variable referred to by Name exists, copy it (as a null-terminated
|
|
string) into Value. If it doesn't exist, put the Empty string in Value.
|
|
|
|
Variable names and values may not be larger than 60 bytes, excluding the
|
|
terminal null character. This is a limitation of the Fastboot protocol.
|
|
|
|
The Fastboot application will handle platform-nonspecific variables
|
|
(Currently "version" is the only one of these.)
|
|
|
|
@param[in] Name Null-terminated name of Fastboot variable to retrieve.
|
|
@param[out] Value Caller-allocated buffer for null-terminated value of
|
|
variable.
|
|
|
|
@retval EFI_SUCCESS The variable was retrieved, or it doesn't exist.
|
|
@retval EFI_DEVICE_ERROR There was an error looking up the variable. This
|
|
does _not_ include the variable not existing.
|
|
*/
|
|
typedef
|
|
EFI_STATUS
|
|
(*FASTBOOT_PLATFORM_GETVAR) (
|
|
IN CHAR8 *Name,
|
|
OUT CHAR8 *Value
|
|
);
|
|
|
|
/*
|
|
React to an OEM-specific command.
|
|
|
|
Future versions of this function might want to allow the platform to do some
|
|
extra communication with the host. A way to do this would be to add a function
|
|
to the FASTBOOT_TRANSPORT_PROTOCOL that allows the implementation of
|
|
DoOemCommand to replace the ReceiveEvent with its own, and to restore the old
|
|
one when it's finished.
|
|
|
|
However at the moment although the specification allows it, the AOSP fastboot
|
|
host application doesn't handle receiving any data from the client, and it
|
|
doesn't support a data phase for OEM commands.
|
|
|
|
@param[in] Command Null-terminated command string.
|
|
|
|
@retval EFI_SUCCESS The command executed successfully.
|
|
@retval EFI_NOT_FOUND The command wasn't recognised.
|
|
@retval EFI_DEVICE_ERROR There was an error executing the command.
|
|
*/
|
|
typedef
|
|
EFI_STATUS
|
|
(*FASTBOOT_PLATFORM_OEM_COMMAND) (
|
|
IN CHAR8 *Command
|
|
);
|
|
|
|
typedef struct _FASTBOOT_PLATFORM_PROTOCOL {
|
|
FASTBOOT_PLATFORM_INIT Init;
|
|
FASTBOOT_PLATFORM_UN_INIT UnInit;
|
|
FASTBOOT_PLATFORM_FLASH FlashPartition;
|
|
FASTBOOT_PLATFORM_ERASE ErasePartition;
|
|
FASTBOOT_PLATFORM_GETVAR GetVar;
|
|
FASTBOOT_PLATFORM_OEM_COMMAND DoOemCommand;
|
|
} FASTBOOT_PLATFORM_PROTOCOL;
|