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>
49 lines
2.1 KiB
C
49 lines
2.1 KiB
C
/** @file
|
|
|
|
Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
**/
|
|
|
|
#pragma once
|
|
|
|
#define EFI_MSR_CACHE_VARIABLE_MTRR_BASE 0x00000200
|
|
#define EFI_MSR_CACHE_VARIABLE_MTRR_END 0x0000020F
|
|
#define V_EFI_FIXED_MTRR_NUMBER 11
|
|
|
|
#define EFI_MSR_IA32_MTRR_FIX64K_00000 0x00000250
|
|
#define EFI_MSR_IA32_MTRR_FIX16K_80000 0x00000258
|
|
#define EFI_MSR_IA32_MTRR_FIX16K_A0000 0x00000259
|
|
#define EFI_MSR_IA32_MTRR_FIX4K_C0000 0x00000268
|
|
#define EFI_MSR_IA32_MTRR_FIX4K_C8000 0x00000269
|
|
#define EFI_MSR_IA32_MTRR_FIX4K_D0000 0x0000026A
|
|
#define EFI_MSR_IA32_MTRR_FIX4K_D8000 0x0000026B
|
|
#define EFI_MSR_IA32_MTRR_FIX4K_E0000 0x0000026C
|
|
#define EFI_MSR_IA32_MTRR_FIX4K_E8000 0x0000026D
|
|
#define EFI_MSR_IA32_MTRR_FIX4K_F0000 0x0000026E
|
|
#define EFI_MSR_IA32_MTRR_FIX4K_F8000 0x0000026F
|
|
#define EFI_MSR_CACHE_IA32_MTRR_DEF_TYPE 0x000002FF
|
|
#define B_EFI_MSR_CACHE_MTRR_VALID BIT11
|
|
#define B_EFI_MSR_GLOBAL_MTRR_ENABLE BIT11
|
|
#define B_EFI_MSR_FIXED_MTRR_ENABLE BIT10
|
|
#define B_EFI_MSR_CACHE_MEMORY_TYPE (BIT2 | BIT1 | BIT0)
|
|
|
|
#define EFI_MSR_VALID_MASK 0xFFFFFFFFF
|
|
#define EFI_CACHE_VALID_ADDRESS 0xFFFFFF000
|
|
#define EFI_SMRR_CACHE_VALID_ADDRESS 0xFFFFF000
|
|
#define EFI_CACHE_VALID_EXTENDED_ADDRESS 0xFFFFFFFFFF000
|
|
|
|
// Leave one MTRR pairs for OS use
|
|
#define EFI_CACHE_NUM_VAR_MTRR_PAIRS_FOR_OS 1
|
|
#define EFI_CACHE_LAST_VARIABLE_MTRR_FOR_BIOS (EFI_MSR_CACHE_VARIABLE_MTRR_END) -\
|
|
(EFI_CACHE_NUM_VAR_MTRR_PAIRS_FOR_OS * 2)
|
|
|
|
#define EFI_MSR_IA32_MTRR_CAP 0x000000FE
|
|
#define B_EFI_MSR_IA32_MTRR_CAP_EMRR_SUPPORT BIT12
|
|
#define B_EFI_MSR_IA32_MTRR_CAP_SMRR_SUPPORT BIT11
|
|
#define B_EFI_MSR_IA32_MTRR_CAP_WC_SUPPORT BIT10
|
|
#define B_EFI_MSR_IA32_MTRR_CAP_FIXED_SUPPORT BIT8
|
|
#define B_EFI_MSR_IA32_MTRR_CAP_VARIABLE_SUPPORT (BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0)
|
|
|
|
#define CPUID_VIR_PHY_ADDRESS_SIZE 0x80000008
|
|
#define CPUID_EXTENDED_FUNCTION 0x80000000
|