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.
Note: Headers taken directly from external projects, such as those
in OvmfPkg/Include/IndustryStandard/Xen/ were not modified since they
may be periodically re-synced and do not follow other edk2 coding
stadards.
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>
158 lines
5.1 KiB
C
158 lines
5.1 KiB
C
/** @file
|
|
|
|
Copyright (c) 2011 - 2013, Intel Corporation. All rights reserved.<BR>
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
**/
|
|
|
|
#pragma once
|
|
|
|
#define BOOTSIG 0x1FE
|
|
#define SETUP_HDR 0x53726448 /* 0x53726448 == "HdrS" */
|
|
|
|
#define E820_RAM 1
|
|
#define E820_RESERVED 2
|
|
#define E820_ACPI 3
|
|
#define E820_NVS 4
|
|
#define E820_UNUSABLE 5
|
|
|
|
#pragma pack(1)
|
|
|
|
struct setup_header {
|
|
UINT8 setup_secs; /* Sectors for setup code */
|
|
UINT16 root_flags;
|
|
UINT32 sys_size;
|
|
UINT16 ram_size;
|
|
UINT16 video_mode;
|
|
UINT16 root_dev;
|
|
UINT16 signature; /* Boot signature */
|
|
UINT16 jump;
|
|
UINT32 header;
|
|
UINT16 version;
|
|
UINT16 su_switch;
|
|
UINT16 setup_seg;
|
|
UINT16 start_sys;
|
|
UINT16 kernel_ver;
|
|
UINT8 loader_id;
|
|
UINT8 load_flags;
|
|
UINT16 movesize;
|
|
UINT32 code32_start; /* Start of code loaded high */
|
|
UINT32 ramdisk_start; /* Start of initial ramdisk */
|
|
UINT32 ramdisk_len; /* Length of initial ramdisk */
|
|
UINT32 bootsect_kludge;
|
|
UINT16 heap_end;
|
|
UINT8 ext_loader_ver; /* Extended boot loader version */
|
|
UINT8 ext_loader_type; /* Extended boot loader ID */
|
|
UINT32 cmd_line_ptr; /* 32-bit pointer to the kernel command line */
|
|
UINT32 ramdisk_max; /* Highest legal initrd address */
|
|
UINT32 kernel_alignment; /* Physical addr alignment required for kernel */
|
|
UINT8 relocatable_kernel; /* Whether kernel is relocatable or not */
|
|
UINT8 min_alignment;
|
|
UINT16 xloadflags;
|
|
UINT32 cmdline_size;
|
|
UINT32 hardware_subarch;
|
|
UINT64 hardware_subarch_data;
|
|
UINT32 payload_offset;
|
|
UINT32 payload_length;
|
|
UINT64 setup_data;
|
|
UINT64 pref_address;
|
|
UINT32 init_size;
|
|
UINT32 handover_offset;
|
|
};
|
|
|
|
struct efi_info {
|
|
UINT32 efi_loader_signature;
|
|
UINT32 efi_systab;
|
|
UINT32 efi_memdesc_size;
|
|
UINT32 efi_memdesc_version;
|
|
UINT32 efi_memmap;
|
|
UINT32 efi_memmap_size;
|
|
UINT32 efi_systab_hi;
|
|
UINT32 efi_memmap_hi;
|
|
};
|
|
|
|
struct e820_entry {
|
|
UINT64 addr; /* start of memory segment */
|
|
UINT64 size; /* size of memory segment */
|
|
UINT32 type; /* type of memory segment */
|
|
};
|
|
|
|
struct screen_info {
|
|
UINT8 orig_x; /* 0x00 */
|
|
UINT8 orig_y; /* 0x01 */
|
|
UINT16 ext_mem_k; /* 0x02 */
|
|
UINT16 orig_video_page; /* 0x04 */
|
|
UINT8 orig_video_mode; /* 0x06 */
|
|
UINT8 orig_video_cols; /* 0x07 */
|
|
UINT8 flags; /* 0x08 */
|
|
UINT8 unused2; /* 0x09 */
|
|
UINT16 orig_video_ega_bx; /* 0x0a */
|
|
UINT16 unused3; /* 0x0c */
|
|
UINT8 orig_video_lines; /* 0x0e */
|
|
UINT8 orig_video_isVGA; /* 0x0f */
|
|
UINT16 orig_video_points; /* 0x10 */
|
|
|
|
/* VESA graphic mode -- linear frame buffer */
|
|
UINT16 lfb_width; /* 0x12 */
|
|
UINT16 lfb_height; /* 0x14 */
|
|
UINT16 lfb_depth; /* 0x16 */
|
|
UINT32 lfb_base; /* 0x18 */
|
|
UINT32 lfb_size; /* 0x1c */
|
|
UINT16 cl_magic, cl_offset; /* 0x20 */
|
|
UINT16 lfb_linelength; /* 0x24 */
|
|
UINT8 red_size; /* 0x26 */
|
|
UINT8 red_pos; /* 0x27 */
|
|
UINT8 green_size; /* 0x28 */
|
|
UINT8 green_pos; /* 0x29 */
|
|
UINT8 blue_size; /* 0x2a */
|
|
UINT8 blue_pos; /* 0x2b */
|
|
UINT8 rsvd_size; /* 0x2c */
|
|
UINT8 rsvd_pos; /* 0x2d */
|
|
UINT16 vesapm_seg; /* 0x2e */
|
|
UINT16 vesapm_off; /* 0x30 */
|
|
UINT16 pages; /* 0x32 */
|
|
UINT16 vesa_attributes; /* 0x34 */
|
|
UINT32 capabilities; /* 0x36 */
|
|
UINT8 _reserved[6]; /* 0x3a */
|
|
};
|
|
|
|
struct boot_params {
|
|
struct screen_info screen_info;
|
|
UINT8 apm_bios_info[0x14];
|
|
UINT8 _pad2[4];
|
|
UINT64 tboot_addr;
|
|
UINT8 ist_info[0x10];
|
|
UINT8 _pad3[16];
|
|
UINT8 hd0_info[16];
|
|
UINT8 hd1_info[16];
|
|
UINT8 sys_desc_table[0x10];
|
|
UINT8 olpc_ofw_header[0x10];
|
|
UINT8 _pad4[128];
|
|
UINT8 edid_info[0x80];
|
|
struct efi_info efi_info;
|
|
UINT32 alt_mem_k;
|
|
UINT32 scratch;
|
|
UINT8 e820_entries;
|
|
UINT8 eddbuf_entries;
|
|
UINT8 edd_mbr_sig_buf_entries;
|
|
UINT8 _pad6[6];
|
|
struct setup_header hdr;
|
|
UINT8 _pad7[0x290-0x1f1-sizeof (struct setup_header)];
|
|
UINT32 edd_mbr_sig_buffer[16];
|
|
struct e820_entry e820_map[128];
|
|
UINT8 _pad8[48];
|
|
UINT8 eddbuf[0x1ec];
|
|
UINT8 _pad9[276];
|
|
};
|
|
|
|
typedef struct {
|
|
UINT16 limit;
|
|
UINT64 *base;
|
|
} dt_addr_t;
|
|
|
|
#pragma pack()
|
|
|
|
extern EFI_STATUS
|
|
setup_graphics (
|
|
struct boot_params *buf
|
|
);
|