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