1201b66b7SHaojian Zhuang /* 2201b66b7SHaojian Zhuang * Copyright (c) 2016, 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 10*2029f930SSughosh Ganu #include <drivers/partition/efi.h> 1109d40e0eSAntonio Nino Diaz #include <drivers/partition/partition.h> 12*2029f930SSughosh Ganu #include <tools_share/uuid.h> 13201b66b7SHaojian Zhuang 14201b66b7SHaojian Zhuang #define PARTITION_TYPE_GPT 0xee 15f8631f51SHaojian Zhuang #define GPT_HEADER_OFFSET PLAT_PARTITION_BLOCK_SIZE 16201b66b7SHaojian Zhuang #define GPT_ENTRY_OFFSET (GPT_HEADER_OFFSET + \ 17f8631f51SHaojian Zhuang PLAT_PARTITION_BLOCK_SIZE) 18201b66b7SHaojian Zhuang 19201b66b7SHaojian Zhuang #define GPT_SIGNATURE "EFI PART" 20201b66b7SHaojian Zhuang 21201b66b7SHaojian Zhuang typedef struct gpt_entry { 22*2029f930SSughosh Ganu struct efi_guid type_uuid; 23*2029f930SSughosh Ganu struct efi_guid unique_uuid; 24201b66b7SHaojian Zhuang unsigned long long first_lba; 25201b66b7SHaojian Zhuang unsigned long long last_lba; 26201b66b7SHaojian Zhuang unsigned long long attr; 27201b66b7SHaojian Zhuang unsigned short name[EFI_NAMELEN]; 28201b66b7SHaojian Zhuang } gpt_entry_t; 29201b66b7SHaojian Zhuang 30201b66b7SHaojian Zhuang typedef struct gpt_header { 31201b66b7SHaojian Zhuang unsigned char signature[8]; 32201b66b7SHaojian Zhuang unsigned int revision; 33201b66b7SHaojian Zhuang unsigned int size; 34201b66b7SHaojian Zhuang unsigned int header_crc; 35201b66b7SHaojian Zhuang unsigned int reserved; 36201b66b7SHaojian Zhuang unsigned long long current_lba; 37201b66b7SHaojian Zhuang unsigned long long backup_lba; 38201b66b7SHaojian Zhuang unsigned long long first_lba; 39201b66b7SHaojian Zhuang unsigned long long last_lba; 40*2029f930SSughosh Ganu struct efi_guid disk_uuid; 41201b66b7SHaojian Zhuang /* starting LBA of array of partition entries */ 42201b66b7SHaojian Zhuang unsigned long long part_lba; 43201b66b7SHaojian Zhuang /* number of partition entries in array */ 44201b66b7SHaojian Zhuang unsigned int list_num; 45201b66b7SHaojian Zhuang /* size of a single partition entry (usually 128) */ 46201b66b7SHaojian Zhuang unsigned int part_size; 47201b66b7SHaojian Zhuang unsigned int part_crc; 48201b66b7SHaojian Zhuang } gpt_header_t; 49201b66b7SHaojian Zhuang 50201b66b7SHaojian Zhuang int parse_gpt_entry(gpt_entry_t *gpt_entry, partition_entry_t *entry); 51201b66b7SHaojian Zhuang 52c3cf06f1SAntonio Nino Diaz #endif /* GPT_H */ 53