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