mirror of
https://github.com/torvalds/linux.git
synced 2024-12-28 05:41:55 +00:00
243b6754cd
This reverts commit 84be880560
, which itself reverted my original
attempt to move x86 from #include'ing .c files from across the tree
to using the EFI stub built as a static library.
The issue that affected the original approach was that splitting
the implementation into several .o files resulted in the variable
'efi_early' becoming a global with external linkage, which under
-fPIC implies that references to it must go through the GOT. However,
dealing with this additional GOT entry turned out to be troublesome
on some EFI implementations. (GCC's visibility=hidden attribute is
supposed to lift this requirement, but it turned out not to work on
the 32-bit build.)
Instead, use a pure getter function to get a reference to efi_early.
This approach results in no additional GOT entries being generated,
so there is no need for any changes in the early GOT handling.
Tested-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
107 lines
2.1 KiB
C
107 lines
2.1 KiB
C
#ifndef BOOT_COMPRESSED_EBOOT_H
|
|
#define BOOT_COMPRESSED_EBOOT_H
|
|
|
|
#define SEG_TYPE_DATA (0 << 3)
|
|
#define SEG_TYPE_READ_WRITE (1 << 1)
|
|
#define SEG_TYPE_CODE (1 << 3)
|
|
#define SEG_TYPE_EXEC_READ (1 << 1)
|
|
#define SEG_TYPE_TSS ((1 << 3) | (1 << 0))
|
|
#define SEG_OP_SIZE_32BIT (1 << 0)
|
|
#define SEG_GRANULARITY_4KB (1 << 0)
|
|
|
|
#define DESC_TYPE_CODE_DATA (1 << 0)
|
|
|
|
#define EFI_CONSOLE_OUT_DEVICE_GUID \
|
|
EFI_GUID(0xd3b36f2c, 0xd551, 0x11d4, 0x9a, 0x46, 0x0, 0x90, 0x27, \
|
|
0x3f, 0xc1, 0x4d)
|
|
|
|
#define PIXEL_RGB_RESERVED_8BIT_PER_COLOR 0
|
|
#define PIXEL_BGR_RESERVED_8BIT_PER_COLOR 1
|
|
#define PIXEL_BIT_MASK 2
|
|
#define PIXEL_BLT_ONLY 3
|
|
#define PIXEL_FORMAT_MAX 4
|
|
|
|
struct efi_pixel_bitmask {
|
|
u32 red_mask;
|
|
u32 green_mask;
|
|
u32 blue_mask;
|
|
u32 reserved_mask;
|
|
};
|
|
|
|
struct efi_graphics_output_mode_info {
|
|
u32 version;
|
|
u32 horizontal_resolution;
|
|
u32 vertical_resolution;
|
|
int pixel_format;
|
|
struct efi_pixel_bitmask pixel_information;
|
|
u32 pixels_per_scan_line;
|
|
} __packed;
|
|
|
|
struct efi_graphics_output_protocol_mode_32 {
|
|
u32 max_mode;
|
|
u32 mode;
|
|
u32 info;
|
|
u32 size_of_info;
|
|
u64 frame_buffer_base;
|
|
u32 frame_buffer_size;
|
|
} __packed;
|
|
|
|
struct efi_graphics_output_protocol_mode_64 {
|
|
u32 max_mode;
|
|
u32 mode;
|
|
u64 info;
|
|
u64 size_of_info;
|
|
u64 frame_buffer_base;
|
|
u64 frame_buffer_size;
|
|
} __packed;
|
|
|
|
struct efi_graphics_output_protocol_mode {
|
|
u32 max_mode;
|
|
u32 mode;
|
|
unsigned long info;
|
|
unsigned long size_of_info;
|
|
u64 frame_buffer_base;
|
|
unsigned long frame_buffer_size;
|
|
} __packed;
|
|
|
|
struct efi_graphics_output_protocol_32 {
|
|
u32 query_mode;
|
|
u32 set_mode;
|
|
u32 blt;
|
|
u32 mode;
|
|
};
|
|
|
|
struct efi_graphics_output_protocol_64 {
|
|
u64 query_mode;
|
|
u64 set_mode;
|
|
u64 blt;
|
|
u64 mode;
|
|
};
|
|
|
|
struct efi_graphics_output_protocol {
|
|
void *query_mode;
|
|
unsigned long set_mode;
|
|
unsigned long blt;
|
|
struct efi_graphics_output_protocol_mode *mode;
|
|
};
|
|
|
|
struct efi_uga_draw_protocol_32 {
|
|
u32 get_mode;
|
|
u32 set_mode;
|
|
u32 blt;
|
|
};
|
|
|
|
struct efi_uga_draw_protocol_64 {
|
|
u64 get_mode;
|
|
u64 set_mode;
|
|
u64 blt;
|
|
};
|
|
|
|
struct efi_uga_draw_protocol {
|
|
void *get_mode;
|
|
void *set_mode;
|
|
void *blt;
|
|
};
|
|
|
|
#endif /* BOOT_COMPRESSED_EBOOT_H */
|