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