Sming Framework API
()
Toggle main menu visibility
Sming
Libraries
DiskStorage
src
include
Storage
Disk
linux
efi.h
Go to the documentation of this file.
1
/* SPDX-License-Identifier: GPL-2.0-or-later */
2
/************************************************************
3
* EFI GUID Partition Table
4
* Per Intel EFI Specification v1.02
5
* http://developer.intel.com/technology/efi/efi.htm
6
*
7
* By Matt Domsch <Matt_Domsch@dell.com> Fri Sep 22 22:15:56 CDT 2000
8
* Copyright 2000,2001 Dell Inc.
9
************************************************************/
10
11
#ifndef FS_PART_EFI_H_INCLUDED
12
#define FS_PART_EFI_H_INCLUDED
13
14
#define MSDOS_MBR_SIGNATURE 0xaa55
15
#define EFI_PMBR_OSTYPE_EFI 0xEF
16
#define EFI_PMBR_OSTYPE_EFI_GPT 0xEE
17
18
#define GPT_MBR_PROTECTIVE 1
19
#define GPT_MBR_HYBRID 2
20
21
#define GPT_HEADER_SIGNATURE 0x5452415020494645ULL
22
#define GPT_HEADER_REVISION_V1 0x00010000
23
#define GPT_PRIMARY_PARTITION_TABLE_LBA 1
24
25
using
efi_guid_t
=
Uuid
;
26
27
struct
gpt_header_t
{
28
uint64_t
signature
;
29
uint32_t
revision
;
30
uint32_t
header_size
;
31
uint32_t
header_crc32
;
32
uint32_t
reserved1
;
33
uint64_t
my_lba
;
34
uint64_t
alternate_lba
;
35
uint64_t
first_usable_lba
;
36
uint64_t
last_usable_lba
;
37
efi_guid_t
disk_guid
;
38
uint64_t
partition_entry_lba
;
39
uint32_t
num_partition_entries
;
40
uint32_t
sizeof_partition_entry
;
41
uint32_t
partition_entry_array_crc32
;
42
43
/* The rest of the logical block is reserved by UEFI and must be zero.
44
* EFI standard handles this by:
45
*
46
* uint8_t reserved2[ BlockSize - 92 ];
47
*/
48
};
49
50
static_assert(
sizeof
(
gpt_header_t
) == 92 ||
sizeof
(
gpt_header_t
) == 96);
51
52
#define GPT_HEADER_SIZE 92
53
54
struct
gpt_entry_attributes_t
{
55
uint64_t
required_to_function
: 1;
56
uint64_t
reserved
: 47;
57
uint64_t
type_guid_specific
: 16;
58
};
59
60
struct
gpt_entry_t
{
61
efi_guid_t
partition_type_guid
;
62
efi_guid_t
unique_partition_guid
;
63
uint64_t
starting_lba
;
64
uint64_t
ending_lba
;
65
gpt_entry_attributes_t
attributes
;
66
uint16_t
partition_name[72 /
sizeof
(
uint16_t
)];
67
};
68
69
static_assert(
sizeof
(
gpt_entry_t
) == 128);
70
71
struct
__attribute__((packed))
gpt_mbr_record_t
{
72
uint8_t
boot_indicator
;
/* unused by EFI, set to 0x80 for bootable */
73
uint8_t
start_head
;
/* unused by EFI, pt start in CHS */
74
uint8_t
start_sector
;
/* unused by EFI, pt start in CHS */
75
uint8_t
start_track
;
76
uint8_t
os_type
;
/* EFI and legacy non-EFI OS types */
77
uint8_t
end_head
;
/* unused by EFI, pt end in CHS */
78
uint8_t
end_sector
;
/* unused by EFI, pt end in CHS */
79
uint8_t
end_track
;
/* unused by EFI, pt end in CHS */
80
uint32_t
starting_lba
;
/* used by EFI - start addr of the on disk pt */
81
uint32_t
size_in_lba
;
/* used by EFI - size of pt in LBA */
82
};
83
84
struct
__attribute__((packed))
legacy_mbr_t
{
85
uint8_t
boot_code[440];
86
uint32_t
unique_mbr_signature
;
87
uint16_t
unknown
;
88
gpt_mbr_record_t
partition_record[4];
89
uint16_t
signature
;
90
};
91
92
#endif
gpt_mbr_record_t::start_sector
uint8_t start_sector
Definition:
efi.h:74
gpt_entry_attributes_t
Definition:
efi.h:54
gpt_header_t::header_crc32
uint32_t header_crc32
Definition:
efi.h:31
gpt_entry_t::partition_type_guid
efi_guid_t partition_type_guid
Definition:
efi.h:61
gpt_mbr_record_t::boot_indicator
uint8_t boot_indicator
Definition:
efi.h:72
gpt_header_t::reserved1
uint32_t reserved1
Definition:
efi.h:32
gpt_mbr_record_t
Definition:
efi.h:71
gpt_entry_attributes_t::type_guid_specific
uint64_t type_guid_specific
Definition:
efi.h:57
gpt_entry_attributes_t::required_to_function
uint64_t required_to_function
Definition:
efi.h:55
gpt_mbr_record_t::os_type
uint8_t os_type
Definition:
efi.h:76
gpt_mbr_record_t::starting_lba
uint32_t starting_lba
Definition:
efi.h:80
gpt_entry_t::attributes
gpt_entry_attributes_t attributes
Definition:
efi.h:65
gpt_header_t::alternate_lba
uint64_t alternate_lba
Definition:
efi.h:34
gpt_header_t::my_lba
uint64_t my_lba
Definition:
efi.h:33
gpt_header_t::sizeof_partition_entry
uint32_t sizeof_partition_entry
Definition:
efi.h:40
gpt_mbr_record_t::end_track
uint8_t end_track
Definition:
efi.h:79
gpt_entry_t
Definition:
efi.h:60
gpt_header_t::header_size
uint32_t header_size
Definition:
efi.h:30
gpt_entry_attributes_t::reserved
uint64_t reserved
Definition:
efi.h:56
gpt_header_t::first_usable_lba
uint64_t first_usable_lba
Definition:
efi.h:35
gpt_mbr_record_t::end_head
uint8_t end_head
Definition:
efi.h:77
gpt_entry_t::ending_lba
uint64_t ending_lba
Definition:
efi.h:64
Uuid
Class for manipulating UUID (aka GUID) entities.
Definition:
Uuid.h:26
gpt_header_t::disk_guid
efi_guid_t disk_guid
Definition:
efi.h:37
gpt_entry_t::unique_partition_guid
efi_guid_t unique_partition_guid
Definition:
efi.h:62
gpt_mbr_record_t::size_in_lba
uint32_t size_in_lba
Definition:
efi.h:81
gpt_header_t::partition_entry_array_crc32
uint32_t partition_entry_array_crc32
Definition:
efi.h:41
gpt_entry_t::starting_lba
uint64_t starting_lba
Definition:
efi.h:63
legacy_mbr_t::signature
uint16_t signature
Definition:
efi.h:89
gpt_header_t::partition_entry_lba
uint64_t partition_entry_lba
Definition:
efi.h:38
gpt_header_t
Definition:
efi.h:27
uint8_t
gpt_mbr_record_t::start_head
uint8_t start_head
Definition:
efi.h:73
legacy_mbr_t
Definition:
efi.h:84
gpt_header_t::signature
uint64_t signature
Definition:
efi.h:28
gpt_mbr_record_t::end_sector
uint8_t end_sector
Definition:
efi.h:78
legacy_mbr_t::unique_mbr_signature
uint32_t unique_mbr_signature
Definition:
efi.h:86
gpt_header_t::last_usable_lba
uint64_t last_usable_lba
Definition:
efi.h:36
uint16_t
gpt_header_t::num_partition_entries
uint32_t num_partition_entries
Definition:
efi.h:39
legacy_mbr_t::unknown
uint16_t unknown
Definition:
efi.h:87
gpt_mbr_record_t::start_track
uint8_t start_track
Definition:
efi.h:75
gpt_header_t::revision
uint32_t revision
Definition:
efi.h:29
Generated by
1.8.13