/*
 * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#ifndef __GPT_H__
#define __GPT_H__

#include <partition.h>

#define PARTITION_TYPE_GPT		0xee
#define GPT_HEADER_OFFSET		PARTITION_BLOCK_SIZE
#define GPT_ENTRY_OFFSET		(GPT_HEADER_OFFSET +		\
					 PARTITION_BLOCK_SIZE)
#define GUID_LEN			16

#define GPT_SIGNATURE			"EFI PART"

typedef struct gpt_entry {
	unsigned char		type_uuid[GUID_LEN];
	unsigned char		unique_uuid[GUID_LEN];
	unsigned long long	first_lba;
	unsigned long long	last_lba;
	unsigned long long	attr;
	unsigned short		name[EFI_NAMELEN];
} gpt_entry_t;

typedef struct gpt_header {
	unsigned char		signature[8];
	unsigned int		revision;
	unsigned int		size;
	unsigned int		header_crc;
	unsigned int		reserved;
	unsigned long long	current_lba;
	unsigned long long	backup_lba;
	unsigned long long	first_lba;
	unsigned long long	last_lba;
	unsigned char		disk_uuid[16];
	/* starting LBA of array of partition entries */
	unsigned long long	part_lba;
	/* number of partition entries in array */
	unsigned int		list_num;
	/* size of a single partition entry (usually 128) */
	unsigned int		part_size;
	unsigned int		part_crc;
} gpt_header_t;

int parse_gpt_entry(gpt_entry_t *gpt_entry, partition_entry_t *entry);

#endif	/* __GPT_H__ */
