/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * Copyright (C) 2008 RuggedCom, Inc.
 * Richard Retanubun <RichardRetanubun@RuggedCom.com>
 */

/*
 * See also linux/fs/partitions/efi.h
 *
 * EFI GUID Partition Table
 * Per Intel EFI Specification v1.02
 * http://developer.intel.com/technology/efi/efi.htm
*/

#include <linux/compiler.h>

#ifndef _DISK_PART_EFI_H
#define _DISK_PART_EFI_H

#include <efi.h>

#define MSDOS_MBR_SIGNATURE 0xAA55
#define MSDOS_MBR_BOOT_CODE_SIZE 440
#define EFI_PMBR_OSTYPE_EFI 0xEF
#define EFI_PMBR_OSTYPE_EFI_GPT 0xEE

#define GPT_HEADER_SIGNATURE_UBOOT 0x5452415020494645ULL
#define GPT_HEADER_REVISION_V1 0x00010000
#define GPT_PRIMARY_PARTITION_TABLE_LBA 1ULL
#define GPT_ENTRY_NUMBERS		CONFIG_EFI_PARTITION_ENTRIES_NUMBERS
#define GPT_ENTRY_SIZE			128

#define PARTITION_SYSTEM_GUID \
	EFI_GUID( 0xC12A7328, 0xF81F, 0x11d2, \
		0xBA, 0x4B, 0x00, 0xA0, 0xC9, 0x3E, 0xC9, 0x3B)
#define LEGACY_MBR_PARTITION_GUID \
	EFI_GUID( 0x024DEE41, 0x33E7, 0x11d3, \
		0x9D, 0x69, 0x00, 0x08, 0xC7, 0x81, 0xF3, 0x9F)
#define PARTITION_MSFT_RESERVED_GUID \
	EFI_GUID( 0xE3C9E316, 0x0B5C, 0x4DB8, \
		0x81, 0x7D, 0xF9, 0x2D, 0xF0, 0x02, 0x15, 0xAE)
#define PARTITION_BASIC_DATA_GUID \
	EFI_GUID( 0xEBD0A0A2, 0xB9E5, 0x4433, \
		0x87, 0xC0, 0x68, 0xB6, 0xB7, 0x26, 0x99, 0xC7)
#define PARTITION_LINUX_FILE_SYSTEM_DATA_GUID \
	EFI_GUID(0x0FC63DAF, 0x8483, 0x4772, \
		0x8E, 0x79, 0x3D, 0x69, 0xD8, 0x47, 0x7D, 0xE4)
#define PARTITION_LINUX_RAID_GUID \
	EFI_GUID( 0xa19d880f, 0x05fc, 0x4d3b, \
		0xa0, 0x06, 0x74, 0x3f, 0x0f, 0x84, 0x91, 0x1e)
#define PARTITION_LINUX_SWAP_GUID \
	EFI_GUID( 0x0657fd6d, 0xa4ab, 0x43c4, \
		0x84, 0xe5, 0x09, 0x33, 0xc8, 0x4b, 0x4f, 0x4f)
#define PARTITION_LINUX_LVM_GUID \
	EFI_GUID( 0xe6d6d379, 0xf507, 0x44c2, \
		0xa2, 0x3c, 0x23, 0x8f, 0x2a, 0x3d, 0xf9, 0x28)
#define PARTITION_LINUX_DEFAULT_GUID \
	EFI_GUID(0x0FC63DAF, 0x8483, 0x4772, \
		0x8E, 0x79, 0x3D, 0x69, 0xD8, 0x47, 0x7D, 0xE4)
#define PARTITION_ANDROID_BOOTLOADER_GUID \
	EFI_GUID(0x2568845D, 0x2332, 0x4675, \
		0xBC, 0x39, 0x8F, 0xA5, 0xA4, 0x74, 0x8D, 0x15)
#define PARTITION_ANDROID_BOOTLOADER2_GUID \
	EFI_GUID(0x114EAFFE, 0x1552, 0x4022, \
		0xB2, 0x6E, 0x9B, 0x05, 0x36, 0x04, 0xCF, 0x84)
#define PARTITION_ANDROID_RECOVERY_GUID \
	EFI_GUID(0x4177C722, 0x9E92, 0x4AAB, \
		0x86, 0x44, 0x43, 0x50, 0x2B, 0xFD, 0x55, 0x06)
#define PARTITION_ANDROID_MISC_GUID \
	EFI_GUID(0xEF32A33B, 0xA409, 0x486C, \
		0x91, 0X41, 0x9F, 0xFB, 0x71, 0x1F, 0x62, 0x66)
#define PARTITION_ANDROID_METADATA_GUID\
	EFI_GUID(0x20AC26BE, 0x20B7, 0x11E3, \
		0x84, 0xC5, 0x6C, 0xFD, 0xB9, 0x47, 0x11, 0xE9)
#define PARTITION_ANDROID_SYSTEM_GUID \
	EFI_GUID(0x38F428E6, 0xD326, 0x425D, \
		0x91, 0x40, 0x6E, 0x0E, 0xA1, 0x33, 0x64, 0x7C)
#define PARTITION_ANDROID_CACHE_GUID \
	EFI_GUID(0xA893EF21, 0xE428, 0x470A, \
		0x9E, 0x55, 0x06, 0x68, 0xFD, 0x91, 0xA2, 0xD9)
#define PARTITION_ANDROID_DATA_GUID \
	EFI_GUID(0xDC76DDA9, 0x5AC1, 0x491C, \
		0xAF, 0x42, 0xA8, 0x25, 0x91, 0x58, 0x0C, 0x0D)
#define PARTITION_ANDROID_PERSISTENT_GUID \
	EFI_GUID(0xEBC597D0, 0x2053, 0x4B15, \
		0x8B, 0x64, 0xE0, 0xAA, 0xC7, 0x5F, 0x4D, 0xB1)
#define PARTITION_ANDROID_VENDOR_GUID \
	EFI_GUID(0xC5A0AEEC, 0x13EA, 0x11E5, \
		0xA1, 0xB1, 0x00, 0x1E, 0x67, 0xCA, 0x0C, 0x3C)
#define PARTITION_ANDROID_CONFIG_GUID \
	EFI_GUID(0xBD59408B, 0x4514, 0x490D, \
		0xBF, 0x12, 0x98, 0x78, 0xD9, 0x63, 0xF3, 0x78)
#define PARTITION_ANDROID_FACTORY_GUID \
	EFI_GUID(0x8F68CC74, 0xC5E5, 0x48DA, \
		0xBE, 0x01, 0xA0, 0xC8, 0xC1, 0x5E, 0x9C, 0x80)
#define PARTITION_ANDROID_FACTORY_ALT_GUID \
	EFI_GUID(0x9FDAA6EF, 0x4B3F, 0x40D2, \
		0xBA, 0x8D, 0xBF, 0xF1, 0x6B, 0xFB, 0x88, 0x78)
#define PARTITION_ANDROID_FASTBOOT_GUID \
	EFI_GUID(0x767941D0, 0x2085, 0x11E3, \
		0xAD, 0x3B, 0x6C, 0xFD, 0xB9, 0x47, 0x11, 0xE9)
#define PARTITION_ANDROID_TERTIARY_GUID \
	EFI_GUID(0x767941D0, 0x2085, 0x11E3, \
		0xAD, 0x3B, 0x6C, 0xFD, 0xB9, 0x47, 0x11, 0xE9)
#define PARTITION_ANDROID_OEM_GUID \
	EFI_GUID(0xAC6D7924, 0xEB71, 0x4DF8, \
		0xB4, 0x8D, 0xE2, 0x67, 0xB2, 0x71, 0x48, 0xFF)

/* linux/include/efi.h */
typedef u16 efi_char16_t;
/* based on linux/include/genhd.h */
struct partition {
	u8 boot_ind;		/* 0x80 - active */
	u8 head;		/* starting head */
	u8 sector;		/* starting sector */
	u8 cyl;			/* starting cylinder */
	u8 sys_ind;		/* What partition type */
	u8 end_head;		/* end head */
	u8 end_sector;		/* end sector */
	u8 end_cyl;		/* end cylinder */
	__le32 start_sect;	/* starting sector counting from 0 */
	__le32 nr_sects;	/* nr of sectors in partition */
} __packed;

/* based on linux/fs/partitions/efi.h */
typedef struct _gpt_header {
	__le64 signature;
	__le32 revision;
	__le32 header_size;
	__le32 header_crc32;
	__le32 reserved1;
	__le64 my_lba;
	__le64 alternate_lba;
	__le64 first_usable_lba;
	__le64 last_usable_lba;
	efi_guid_t disk_guid;
	__le64 partition_entry_lba;
	__le32 num_partition_entries;
	__le32 sizeof_partition_entry;
	__le32 partition_entry_array_crc32;
} __packed gpt_header;

typedef union _gpt_entry_attributes {
	struct {
		u64 required_to_function:1;
		u64 no_block_io_protocol:1;
		u64 legacy_bios_bootable:1;
		u64 reserved:45;
		u64 type_guid_specific:16;
	} fields;
	unsigned long long raw;
} __packed gpt_entry_attributes;

#define PARTNAME_SZ	(72 / sizeof(efi_char16_t))
typedef struct _gpt_entry {
	efi_guid_t partition_type_guid;
	efi_guid_t unique_partition_guid;
	__le64 starting_lba;
	__le64 ending_lba;
	gpt_entry_attributes attributes;
	efi_char16_t partition_name[PARTNAME_SZ];
} __packed gpt_entry;

typedef struct _legacy_mbr {
	u8 boot_code[MSDOS_MBR_BOOT_CODE_SIZE];
	__le32 unique_mbr_signature;
	__le16 unknown;
	struct partition partition_record[4];
	__le16 signature;
} __packed legacy_mbr;

#endif	/* _DISK_PART_EFI_H */

int is_gpt_valid(struct blk_desc *dev_desc, u64 lba,
		gpt_header *pgpt_head, gpt_entry **pgpt_pte);
int part_test_efi(struct blk_desc *dev_desc);
int is_pte_valid(gpt_entry * pte);
