/*++

Copyright (c) 2006, Intel Corporation                                                         
All rights reserved. This program and the accompanying materials                          
are licensed and made available under the terms and conditions of the BSD License         
which accompanies this distribution.  The full text of the license may be found at        
http://opensource.org/licenses/bsd-license.php                                            
                                                                                          
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             

Module Name:

  Gpt.h
  
Abstract:

  Data Structures required for detecting GPT Partitions
  
Revision History

--*/

#ifndef _GPT_H_
#define _GPT_H_

#pragma pack(1)

#define PRIMARY_PART_HEADER_LBA 1

#define EFI_PTAB_HEADER_ID      "EFI PART"

//
// EFI Partition Attributes
//
#define EFI_PART_REQUIRED_TO_FUNCTION 0x0000000000000001

//
// GPT Partition Table Header
//
typedef struct {
  EFI_TABLE_HEADER  Header;
  EFI_LBA           MyLBA;
  EFI_LBA           AlternateLBA;
  EFI_LBA           FirstUsableLBA;
  EFI_LBA           LastUsableLBA;
  EFI_GUID          DiskGUID;
  EFI_LBA           PartitionEntryLBA;
  UINT32            NumberOfPartitionEntries;
  UINT32            SizeOfPartitionEntry;
  UINT32            PartitionEntryArrayCRC32;
} EFI_PARTITION_TABLE_HEADER;

//
// GPT Partition Entry
//
typedef struct {
  EFI_GUID  PartitionTypeGUID;
  EFI_GUID  UniquePartitionGUID;
  EFI_LBA   StartingLBA;
  EFI_LBA   EndingLBA;
  UINT64    Attributes;
  CHAR16    PartitionName[36];
} EFI_PARTITION_ENTRY;

//
// GPT Partition Entry Status
//
typedef struct {
  BOOLEAN OutOfRange;
  BOOLEAN Overlap;
} EFI_PARTITION_ENTRY_STATUS;

#pragma pack()

#endif
