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