xref: /aosp_15_r20/external/arm-trusted-firmware/include/drivers/partition/gpt.h (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park /*
2*54fd6939SJiyong Park  * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
3*54fd6939SJiyong Park  *
4*54fd6939SJiyong Park  * SPDX-License-Identifier: BSD-3-Clause
5*54fd6939SJiyong Park  */
6*54fd6939SJiyong Park 
7*54fd6939SJiyong Park #ifndef GPT_H
8*54fd6939SJiyong Park #define GPT_H
9*54fd6939SJiyong Park 
10*54fd6939SJiyong Park #include <drivers/partition/partition.h>
11*54fd6939SJiyong Park 
12*54fd6939SJiyong Park #define PARTITION_TYPE_GPT		0xee
13*54fd6939SJiyong Park #define GPT_HEADER_OFFSET		PLAT_PARTITION_BLOCK_SIZE
14*54fd6939SJiyong Park #define GPT_ENTRY_OFFSET		(GPT_HEADER_OFFSET +		\
15*54fd6939SJiyong Park 					 PLAT_PARTITION_BLOCK_SIZE)
16*54fd6939SJiyong Park #define GUID_LEN			16
17*54fd6939SJiyong Park 
18*54fd6939SJiyong Park #define GPT_SIGNATURE			"EFI PART"
19*54fd6939SJiyong Park 
20*54fd6939SJiyong Park typedef struct gpt_entry {
21*54fd6939SJiyong Park 	unsigned char		type_uuid[GUID_LEN];
22*54fd6939SJiyong Park 	unsigned char		unique_uuid[GUID_LEN];
23*54fd6939SJiyong Park 	unsigned long long	first_lba;
24*54fd6939SJiyong Park 	unsigned long long	last_lba;
25*54fd6939SJiyong Park 	unsigned long long	attr;
26*54fd6939SJiyong Park 	unsigned short		name[EFI_NAMELEN];
27*54fd6939SJiyong Park } gpt_entry_t;
28*54fd6939SJiyong Park 
29*54fd6939SJiyong Park typedef struct gpt_header {
30*54fd6939SJiyong Park 	unsigned char		signature[8];
31*54fd6939SJiyong Park 	unsigned int		revision;
32*54fd6939SJiyong Park 	unsigned int		size;
33*54fd6939SJiyong Park 	unsigned int		header_crc;
34*54fd6939SJiyong Park 	unsigned int		reserved;
35*54fd6939SJiyong Park 	unsigned long long	current_lba;
36*54fd6939SJiyong Park 	unsigned long long	backup_lba;
37*54fd6939SJiyong Park 	unsigned long long	first_lba;
38*54fd6939SJiyong Park 	unsigned long long	last_lba;
39*54fd6939SJiyong Park 	unsigned char		disk_uuid[16];
40*54fd6939SJiyong Park 	/* starting LBA of array of partition entries */
41*54fd6939SJiyong Park 	unsigned long long	part_lba;
42*54fd6939SJiyong Park 	/* number of partition entries in array */
43*54fd6939SJiyong Park 	unsigned int		list_num;
44*54fd6939SJiyong Park 	/* size of a single partition entry (usually 128) */
45*54fd6939SJiyong Park 	unsigned int		part_size;
46*54fd6939SJiyong Park 	unsigned int		part_crc;
47*54fd6939SJiyong Park } gpt_header_t;
48*54fd6939SJiyong Park 
49*54fd6939SJiyong Park int parse_gpt_entry(gpt_entry_t *gpt_entry, partition_entry_t *entry);
50*54fd6939SJiyong Park 
51*54fd6939SJiyong Park #endif /* GPT_H */
52