blob: c2a229e3376d853f8a07086a44531bc264e6b3a7 [file] [log] [blame]
Haojian Zhuang91f56462016-07-28 14:19:36 +08001/*
2 * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
3 *
dp-armfa3cf0b2017-05-03 09:38:09 +01004 * SPDX-License-Identifier: BSD-3-Clause
Haojian Zhuang91f56462016-07-28 14:19:36 +08005 */
6
Antonio Nino Diaz5eb88372018-11-08 10:20:19 +00007#ifndef GPT_H
8#define GPT_H
Haojian Zhuang91f56462016-07-28 14:19:36 +08009
Sughosh Ganue9269152021-12-07 16:49:21 +053010#include <drivers/partition/efi.h>
Antonio Nino Diaze0f90632018-12-14 00:18:21 +000011#include <drivers/partition/partition.h>
Sughosh Ganue9269152021-12-07 16:49:21 +053012#include <tools_share/uuid.h>
Haojian Zhuang91f56462016-07-28 14:19:36 +080013
14#define PARTITION_TYPE_GPT 0xee
Haojian Zhuang42a746d2019-09-14 18:01:16 +080015#define GPT_HEADER_OFFSET PLAT_PARTITION_BLOCK_SIZE
Haojian Zhuang91f56462016-07-28 14:19:36 +080016#define GPT_ENTRY_OFFSET (GPT_HEADER_OFFSET + \
Haojian Zhuang42a746d2019-09-14 18:01:16 +080017 PLAT_PARTITION_BLOCK_SIZE)
Haojian Zhuang91f56462016-07-28 14:19:36 +080018
19#define GPT_SIGNATURE "EFI PART"
20
21typedef struct gpt_entry {
Sughosh Ganue9269152021-12-07 16:49:21 +053022 struct efi_guid type_uuid;
23 struct efi_guid unique_uuid;
Haojian Zhuang91f56462016-07-28 14:19:36 +080024 unsigned long long first_lba;
25 unsigned long long last_lba;
26 unsigned long long attr;
27 unsigned short name[EFI_NAMELEN];
28} gpt_entry_t;
29
30typedef struct gpt_header {
31 unsigned char signature[8];
32 unsigned int revision;
33 unsigned int size;
34 unsigned int header_crc;
35 unsigned int reserved;
36 unsigned long long current_lba;
37 unsigned long long backup_lba;
38 unsigned long long first_lba;
39 unsigned long long last_lba;
Sughosh Ganue9269152021-12-07 16:49:21 +053040 struct efi_guid disk_uuid;
Haojian Zhuang91f56462016-07-28 14:19:36 +080041 /* starting LBA of array of partition entries */
42 unsigned long long part_lba;
43 /* number of partition entries in array */
44 unsigned int list_num;
45 /* size of a single partition entry (usually 128) */
46 unsigned int part_size;
47 unsigned int part_crc;
48} gpt_header_t;
49
50int parse_gpt_entry(gpt_entry_t *gpt_entry, partition_entry_t *entry);
51
Antonio Nino Diaz5eb88372018-11-08 10:20:19 +000052#endif /* GPT_H */