1201b66b7SHaojian Zhuang /* 2*fce8a70eSGovindraj Raja * Copyright (c) 2016-2023, 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 17201b66b7SHaojian Zhuang typedef struct gpt_entry { 182029f930SSughosh Ganu struct efi_guid type_uuid; 192029f930SSughosh Ganu struct efi_guid unique_uuid; 20201b66b7SHaojian Zhuang unsigned long long first_lba; 21201b66b7SHaojian Zhuang unsigned long long last_lba; 22201b66b7SHaojian Zhuang unsigned long long attr; 23201b66b7SHaojian Zhuang unsigned short name[EFI_NAMELEN]; 24201b66b7SHaojian Zhuang } gpt_entry_t; 25201b66b7SHaojian Zhuang 26201b66b7SHaojian Zhuang typedef struct gpt_header { 27201b66b7SHaojian Zhuang unsigned char signature[8]; 28201b66b7SHaojian Zhuang unsigned int revision; 29201b66b7SHaojian Zhuang unsigned int size; 30201b66b7SHaojian Zhuang unsigned int header_crc; 31201b66b7SHaojian Zhuang unsigned int reserved; 32201b66b7SHaojian Zhuang unsigned long long current_lba; 33201b66b7SHaojian Zhuang unsigned long long backup_lba; 34201b66b7SHaojian Zhuang unsigned long long first_lba; 35201b66b7SHaojian Zhuang unsigned long long last_lba; 362029f930SSughosh Ganu struct efi_guid disk_uuid; 37201b66b7SHaojian Zhuang /* starting LBA of array of partition entries */ 38201b66b7SHaojian Zhuang unsigned long long part_lba; 39201b66b7SHaojian Zhuang /* number of partition entries in array */ 40201b66b7SHaojian Zhuang unsigned int list_num; 41201b66b7SHaojian Zhuang /* size of a single partition entry (usually 128) */ 42201b66b7SHaojian Zhuang unsigned int part_size; 43201b66b7SHaojian Zhuang unsigned int part_crc; 44*fce8a70eSGovindraj Raja } __packed gpt_header_t; 45201b66b7SHaojian Zhuang 46201b66b7SHaojian Zhuang int parse_gpt_entry(gpt_entry_t *gpt_entry, partition_entry_t *entry); 47201b66b7SHaojian Zhuang 48c3cf06f1SAntonio Nino Diaz #endif /* GPT_H */ 49