xref: /rk3399_rockchip-uboot/include/part_efi.h (revision fae2bf22a2b1aee85734fc2643ac6ede88cbbd01)
19386f96cSLukasz Majewski /*
29386f96cSLukasz Majewski  * Copyright (C) 2008 RuggedCom, Inc.
39386f96cSLukasz Majewski  * Richard Retanubun <RichardRetanubun@RuggedCom.com>
49386f96cSLukasz Majewski  *
59386f96cSLukasz Majewski  * See file CREDITS for list of people who contributed to this
69386f96cSLukasz Majewski  * project.
79386f96cSLukasz Majewski  *
89386f96cSLukasz Majewski  * This program is free software; you can redistribute it and/or
99386f96cSLukasz Majewski  * modify it under the terms of the GNU General Public License as
109386f96cSLukasz Majewski  * published by the Free Software Foundation; either version 2 of
119386f96cSLukasz Majewski  * the License, or (at your option) any later version.
129386f96cSLukasz Majewski  *
139386f96cSLukasz Majewski  * This program is distributed in the hope that it will be useful,
149386f96cSLukasz Majewski  * but WITHOUT ANY WARRANTY; without even the implied warranty of
159386f96cSLukasz Majewski  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
169386f96cSLukasz Majewski  * GNU General Public License for more details.
179386f96cSLukasz Majewski  *
189386f96cSLukasz Majewski  * You should have received a copy of the GNU General Public License
199386f96cSLukasz Majewski  * along with this program; if not, write to the Free Software
209386f96cSLukasz Majewski  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
219386f96cSLukasz Majewski  * MA 02111-1307 USA
229386f96cSLukasz Majewski  */
239386f96cSLukasz Majewski 
249386f96cSLukasz Majewski /*
259386f96cSLukasz Majewski  * See also linux/fs/partitions/efi.h
269386f96cSLukasz Majewski  *
279386f96cSLukasz Majewski  * EFI GUID Partition Table
289386f96cSLukasz Majewski  * Per Intel EFI Specification v1.02
299386f96cSLukasz Majewski  * http://developer.intel.com/technology/efi/efi.htm
309386f96cSLukasz Majewski */
319386f96cSLukasz Majewski 
32*fae2bf22SChang Hyun Park #include <linux/compiler.h>
33*fae2bf22SChang Hyun Park 
349386f96cSLukasz Majewski #ifndef _DISK_PART_EFI_H
359386f96cSLukasz Majewski #define _DISK_PART_EFI_H
369386f96cSLukasz Majewski 
379386f96cSLukasz Majewski #define MSDOS_MBR_SIGNATURE 0xAA55
389386f96cSLukasz Majewski #define EFI_PMBR_OSTYPE_EFI 0xEF
399386f96cSLukasz Majewski #define EFI_PMBR_OSTYPE_EFI_GPT 0xEE
409386f96cSLukasz Majewski 
419386f96cSLukasz Majewski #define GPT_BLOCK_SIZE 512
429386f96cSLukasz Majewski #define GPT_HEADER_SIGNATURE 0x5452415020494645ULL
439386f96cSLukasz Majewski #define GPT_HEADER_REVISION_V1 0x00010000
449386f96cSLukasz Majewski #define GPT_PRIMARY_PARTITION_TABLE_LBA 1ULL
459386f96cSLukasz Majewski #define GPT_ENTRY_NAME "gpt"
46*fae2bf22SChang Hyun Park #define GPT_ENTRY_NUMBERS		128
47*fae2bf22SChang Hyun Park #define GPT_ENTRY_SIZE			128
489386f96cSLukasz Majewski 
499386f96cSLukasz Majewski #define EFI_GUID(a,b,c,d0,d1,d2,d3,d4,d5,d6,d7) \
509386f96cSLukasz Majewski 	((efi_guid_t) \
519386f96cSLukasz Majewski 	{{ (a) & 0xff, ((a) >> 8) & 0xff, ((a) >> 16) & 0xff, ((a) >> 24) & 0xff, \
529386f96cSLukasz Majewski 		(b) & 0xff, ((b) >> 8) & 0xff, \
539386f96cSLukasz Majewski 		(c) & 0xff, ((c) >> 8) & 0xff, \
549386f96cSLukasz Majewski 		(d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7) }})
559386f96cSLukasz Majewski 
569386f96cSLukasz Majewski #define PARTITION_SYSTEM_GUID \
579386f96cSLukasz Majewski 	EFI_GUID( 0xC12A7328, 0xF81F, 0x11d2, \
589386f96cSLukasz Majewski 		0xBA, 0x4B, 0x00, 0xA0, 0xC9, 0x3E, 0xC9, 0x3B)
599386f96cSLukasz Majewski #define LEGACY_MBR_PARTITION_GUID \
609386f96cSLukasz Majewski 	EFI_GUID( 0x024DEE41, 0x33E7, 0x11d3, \
619386f96cSLukasz Majewski 		0x9D, 0x69, 0x00, 0x08, 0xC7, 0x81, 0xF3, 0x9F)
629386f96cSLukasz Majewski #define PARTITION_MSFT_RESERVED_GUID \
639386f96cSLukasz Majewski 	EFI_GUID( 0xE3C9E316, 0x0B5C, 0x4DB8, \
649386f96cSLukasz Majewski 		0x81, 0x7D, 0xF9, 0x2D, 0xF0, 0x02, 0x15, 0xAE)
659386f96cSLukasz Majewski #define PARTITION_BASIC_DATA_GUID \
669386f96cSLukasz Majewski 	EFI_GUID( 0xEBD0A0A2, 0xB9E5, 0x4433, \
679386f96cSLukasz Majewski 		0x87, 0xC0, 0x68, 0xB6, 0xB7, 0x26, 0x99, 0xC7)
689386f96cSLukasz Majewski #define PARTITION_LINUX_RAID_GUID \
699386f96cSLukasz Majewski 	EFI_GUID( 0xa19d880f, 0x05fc, 0x4d3b, \
709386f96cSLukasz Majewski 		0xa0, 0x06, 0x74, 0x3f, 0x0f, 0x84, 0x91, 0x1e)
719386f96cSLukasz Majewski #define PARTITION_LINUX_SWAP_GUID \
729386f96cSLukasz Majewski 	EFI_GUID( 0x0657fd6d, 0xa4ab, 0x43c4, \
739386f96cSLukasz Majewski 		0x84, 0xe5, 0x09, 0x33, 0xc8, 0x4b, 0x4f, 0x4f)
749386f96cSLukasz Majewski #define PARTITION_LINUX_LVM_GUID \
759386f96cSLukasz Majewski 	EFI_GUID( 0xe6d6d379, 0xf507, 0x44c2, \
769386f96cSLukasz Majewski 		0xa2, 0x3c, 0x23, 0x8f, 0x2a, 0x3d, 0xf9, 0x28)
779386f96cSLukasz Majewski 
789386f96cSLukasz Majewski /* linux/include/efi.h */
79*fae2bf22SChang Hyun Park typedef u16 efi_char16_t;
809386f96cSLukasz Majewski 
819386f96cSLukasz Majewski typedef struct {
82*fae2bf22SChang Hyun Park 	u8 b[16];
839386f96cSLukasz Majewski } efi_guid_t;
849386f96cSLukasz Majewski 
859386f96cSLukasz Majewski /* based on linux/include/genhd.h */
869386f96cSLukasz Majewski struct partition {
87*fae2bf22SChang Hyun Park 	u8 boot_ind;		/* 0x80 - active */
88*fae2bf22SChang Hyun Park 	u8 head;		/* starting head */
89*fae2bf22SChang Hyun Park 	u8 sector;		/* starting sector */
90*fae2bf22SChang Hyun Park 	u8 cyl;			/* starting cylinder */
91*fae2bf22SChang Hyun Park 	u8 sys_ind;		/* What partition type */
92*fae2bf22SChang Hyun Park 	u8 end_head;		/* end head */
93*fae2bf22SChang Hyun Park 	u8 end_sector;		/* end sector */
94*fae2bf22SChang Hyun Park 	u8 end_cyl;		/* end cylinder */
95*fae2bf22SChang Hyun Park 	__le32 start_sect;	/* starting sector counting from 0 */
96*fae2bf22SChang Hyun Park 	__le32 nr_sects;	/* nr of sectors in partition */
97*fae2bf22SChang Hyun Park } __packed;
989386f96cSLukasz Majewski 
999386f96cSLukasz Majewski /* based on linux/fs/partitions/efi.h */
1009386f96cSLukasz Majewski typedef struct _gpt_header {
101*fae2bf22SChang Hyun Park 	__le64 signature;
102*fae2bf22SChang Hyun Park 	__le32 revision;
103*fae2bf22SChang Hyun Park 	__le32 header_size;
104*fae2bf22SChang Hyun Park 	__le32 header_crc32;
105*fae2bf22SChang Hyun Park 	__le32 reserved1;
106*fae2bf22SChang Hyun Park 	__le64 my_lba;
107*fae2bf22SChang Hyun Park 	__le64 alternate_lba;
108*fae2bf22SChang Hyun Park 	__le64 first_usable_lba;
109*fae2bf22SChang Hyun Park 	__le64 last_usable_lba;
1109386f96cSLukasz Majewski 	efi_guid_t disk_guid;
111*fae2bf22SChang Hyun Park 	__le64 partition_entry_lba;
112*fae2bf22SChang Hyun Park 	__le32 num_partition_entries;
113*fae2bf22SChang Hyun Park 	__le32 sizeof_partition_entry;
114*fae2bf22SChang Hyun Park 	__le32 partition_entry_array_crc32;
115*fae2bf22SChang Hyun Park 	u8 reserved2[GPT_BLOCK_SIZE - 92];
116*fae2bf22SChang Hyun Park } __packed gpt_header;
1179386f96cSLukasz Majewski 
1189386f96cSLukasz Majewski typedef union _gpt_entry_attributes {
1199386f96cSLukasz Majewski 	struct {
120*fae2bf22SChang Hyun Park 		u64 required_to_function:1;
121*fae2bf22SChang Hyun Park 		u64 no_block_io_protocol:1;
122*fae2bf22SChang Hyun Park 		u64 legacy_bios_bootable:1;
123*fae2bf22SChang Hyun Park 		u64 reserved:45;
124*fae2bf22SChang Hyun Park 		u64 type_guid_specific:16;
1259386f96cSLukasz Majewski 	} fields;
1269386f96cSLukasz Majewski 	unsigned long long raw;
127*fae2bf22SChang Hyun Park } __packed gpt_entry_attributes;
1289386f96cSLukasz Majewski 
1299386f96cSLukasz Majewski #define PARTNAME_SZ	(72 / sizeof(efi_char16_t))
1309386f96cSLukasz Majewski typedef struct _gpt_entry {
1319386f96cSLukasz Majewski 	efi_guid_t partition_type_guid;
1329386f96cSLukasz Majewski 	efi_guid_t unique_partition_guid;
133*fae2bf22SChang Hyun Park 	__le64 starting_lba;
134*fae2bf22SChang Hyun Park 	__le64 ending_lba;
1359386f96cSLukasz Majewski 	gpt_entry_attributes attributes;
1369386f96cSLukasz Majewski 	efi_char16_t partition_name[PARTNAME_SZ];
137*fae2bf22SChang Hyun Park } __packed gpt_entry;
1389386f96cSLukasz Majewski 
1399386f96cSLukasz Majewski typedef struct _legacy_mbr {
140*fae2bf22SChang Hyun Park 	u8 boot_code[440];
141*fae2bf22SChang Hyun Park 	__le32 unique_mbr_signature;
142*fae2bf22SChang Hyun Park 	__le16 unknown;
1439386f96cSLukasz Majewski 	struct partition partition_record[4];
144*fae2bf22SChang Hyun Park 	__le16 signature;
145*fae2bf22SChang Hyun Park } __packed legacy_mbr;
1469386f96cSLukasz Majewski 
1479386f96cSLukasz Majewski #endif	/* _DISK_PART_EFI_H */
148