xref: /rk3399_ARM-atf/include/drivers/partition/gpt.h (revision 3537dad5ed65c4aad334a4a77c3f03b2e2a7f503)
1201b66b7SHaojian Zhuang /*
2*3537dad5SXialin Liu  * Copyright (c) 2016-2025, Arm Limited and Contributors. All rights reserved.
3201b66b7SHaojian Zhuang  *
482cb2c1aSdp-arm  * SPDX-License-Identifier: BSD-3-Clause
5201b66b7SHaojian Zhuang  */
6201b66b7SHaojian Zhuang 
7c3cf06f1SAntonio Nino Diaz #ifndef GPT_H
8c3cf06f1SAntonio Nino Diaz #define GPT_H
9201b66b7SHaojian Zhuang 
102029f930SSughosh Ganu #include <drivers/partition/efi.h>
1109d40e0eSAntonio Nino Diaz #include <drivers/partition/partition.h>
122029f930SSughosh Ganu #include <tools_share/uuid.h>
13201b66b7SHaojian Zhuang 
14201b66b7SHaojian Zhuang #define PARTITION_TYPE_GPT		0xee
15201b66b7SHaojian Zhuang #define GPT_SIGNATURE			"EFI PART"
16201b66b7SHaojian Zhuang 
17*3537dad5SXialin Liu #define PRIMARY_GPT_CORRUPTED (1U << 0)
18*3537dad5SXialin Liu 
19201b66b7SHaojian Zhuang typedef struct gpt_entry {
202029f930SSughosh Ganu 	struct efi_guid		type_uuid;
212029f930SSughosh Ganu 	struct efi_guid		unique_uuid;
22201b66b7SHaojian Zhuang 	unsigned long long	first_lba;
23201b66b7SHaojian Zhuang 	unsigned long long	last_lba;
24201b66b7SHaojian Zhuang 	unsigned long long	attr;
25201b66b7SHaojian Zhuang 	unsigned short		name[EFI_NAMELEN];
26201b66b7SHaojian Zhuang } gpt_entry_t;
27201b66b7SHaojian Zhuang 
28201b66b7SHaojian Zhuang typedef struct gpt_header {
29201b66b7SHaojian Zhuang 	unsigned char		signature[8];
30201b66b7SHaojian Zhuang 	unsigned int		revision;
31201b66b7SHaojian Zhuang 	unsigned int		size;
32201b66b7SHaojian Zhuang 	unsigned int		header_crc;
33201b66b7SHaojian Zhuang 	unsigned int		reserved;
34201b66b7SHaojian Zhuang 	unsigned long long	current_lba;
35201b66b7SHaojian Zhuang 	unsigned long long	backup_lba;
36201b66b7SHaojian Zhuang 	unsigned long long	first_lba;
37201b66b7SHaojian Zhuang 	unsigned long long	last_lba;
382029f930SSughosh Ganu 	struct efi_guid		disk_uuid;
39201b66b7SHaojian Zhuang 	/* starting LBA of array of partition entries */
40201b66b7SHaojian Zhuang 	unsigned long long	part_lba;
41201b66b7SHaojian Zhuang 	/* number of partition entries in array */
42201b66b7SHaojian Zhuang 	unsigned int		list_num;
43201b66b7SHaojian Zhuang 	/* size of a single partition entry (usually 128) */
44201b66b7SHaojian Zhuang 	unsigned int		part_size;
45201b66b7SHaojian Zhuang 	unsigned int		part_crc;
46fce8a70eSGovindraj Raja } __packed gpt_header_t;
47201b66b7SHaojian Zhuang 
48201b66b7SHaojian Zhuang int parse_gpt_entry(gpt_entry_t *gpt_entry, partition_entry_t *entry);
49201b66b7SHaojian Zhuang 
50c3cf06f1SAntonio Nino Diaz #endif /* GPT_H */
51