/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 *
 * Defines EFI related structure. See more details in EFI 2.3 spec.
 *
 * To download EFI standard, please visit UEFI homepage:
 *    http://www.uefi.org/
 */
#ifndef VBOOT_REFERENCE_CGPTLIB_GPT_H_
#define VBOOT_REFERENCE_CGPTLIB_GPT_H_

#include "sysincludes.h"

__pragma(pack(push,1)) /* Support packing for MSVC. */

#define GPT_HEADER_SIGNATURE "EFI PART"
#define GPT_HEADER_SIGNATURE_SIZE sizeof(GPT_HEADER_SIGNATURE)
#define GPT_HEADER_REVISION 0x00010000

/* The first 3 numbers should be stored in network-endian format
 * according to the GUID RFC.  The UEFI spec appendix A claims they
 * should be stored in little-endian format.  But they need to be
 * _displayed_ in network-endian format, which is also how they're
 * documented in the specs.
 *
 * Since what we have here are little-endian constants, they're
 * byte-swapped from the normal display order. */
#define GPT_ENT_TYPE_UNUSED \
  {{{0x00000000,0x0000,0x0000,0x00,0x00,{0x00,0x00,0x00,0x00,0x00,0x00}}}}
#define GPT_ENT_TYPE_EFI \
  {{{0xc12a7328,0xf81f,0x11d2,0xba,0x4b,{0x00,0xa0,0xc9,0x3e,0xc9,0x3b}}}}
#define GPT_ENT_TYPE_CHROMEOS_KERNEL \
  {{{0xfe3a2a5d,0x4f32,0x41a7,0xb7,0x25,{0xac,0xcc,0x32,0x85,0xa3,0x09}}}}
#define GPT_ENT_TYPE_CHROMEOS_ROOTFS \
  {{{0x3cb8e202,0x3b7e,0x47dd,0x8a,0x3c,{0x7f,0xf2,0xa1,0x3c,0xfc,0xec}}}}
#define GPT_ENT_TYPE_CHROMEOS_RESERVED \
  {{{0x2e0a753d,0x9e48,0x43b0,0x83,0x37,{0xb1,0x51,0x92,0xcb,0x1b,0x5e}}}}
#define GPT_ENT_TYPE_LINUX_DATA \
  {{{0xebd0a0a2,0xb9e5,0x4433,0x87,0xc0,{0x68,0xb6,0xb7,0x26,0x99,0xc7}}}}


#define UUID_NODE_LEN 6
#define GUID_SIZE 16

/*  GUID definition.
 *  Defined in appendix A of EFI standard.
 */
typedef struct {
  union {
    struct {
      uint32_t time_low;
      uint16_t time_mid;
      uint16_t time_high_and_version;
      uint8_t clock_seq_high_and_reserved;
      uint8_t clock_seq_low;
      uint8_t node[UUID_NODE_LEN];
    } Uuid;
    uint8_t raw[GUID_SIZE];
  } u;
} __attribute__((packed)) Guid;

#define GUID_EXPECTED_SIZE GUID_SIZE

/* GPT header defines how many partitions exist on a drive and sectors managed.
 * For every drive device, there are 2 headers, primary and secondary.
 * Most of fields are duplicated except my_lba and entries_lba.
 *
 * You may find more details in chapter 5 of EFI standard.
 */
typedef struct {
  char signature[8];
  uint32_t revision;
  uint32_t size;
  uint32_t header_crc32;
  uint32_t reserved_zero;
  uint64_t my_lba;
  uint64_t alternate_lba;
  uint64_t first_usable_lba;
  uint64_t last_usable_lba;
  Guid disk_uuid;
  uint64_t entries_lba;
  uint32_t number_of_entries;
  uint32_t size_of_entry;
  uint32_t entries_crc32;
  /* Remainder of sector is reserved and should be 0 */
} __attribute__((packed)) GptHeader;

#define GPTHEADER_EXPECTED_SIZE 92

/* GPT partition entry defines the starting and ending LBAs of a partition.
 * It also contains the unique GUID, type, and attribute bits.
 *
 * You may find more details in chapter 5 of EFI standard.
 */
typedef struct {
  Guid type;
  Guid unique;
  uint64_t starting_lba;
  uint64_t ending_lba;
  union {
    struct {
      uint16_t reserved[3];
      uint16_t gpt_att;
    } __attribute__((packed)) fields;
    uint64_t whole;
  } attrs;
  uint16_t name[36];                    /* UTF-16 encoded partition name */
  /* Remainder of entry is reserved and should be 0 */
} __attribute__((packed)) GptEntry;

#define GPTENTRY_EXPECTED_SIZE 128

__pragma(pack(pop)) /* Support packing for MSVC. */

#endif  /* VBOOT_REFERENCE_CGPTLIB_GPT_H_ */
