/** @file

Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
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:
  
    AcpiDescription.h
    
Abstract:


   GUIDs used for ACPI Description

**/

#ifndef _EFI_ACPI_DESCRIPTION_H_
#define _EFI_ACPI_DESCRIPTION_H_

#include <IndustryStandard/Acpi.h>

#define EFI_ACPI_DESCRIPTION_GUID \
  { \
  0x3c699197, 0x93c, 0x4c69, {0xb0, 0x6b, 0x12, 0x8a, 0xe3, 0x48, 0x1d, 0xc9} \
  }

//
// Following structure defines ACPI Description information.
// This information is platform specific, may be consumed by DXE generic driver.
//
#pragma pack(1)
typedef struct _EFI_ACPI_DESCRIPTION {
  //
  // For Timer
  //
  EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE   PM_TMR_BLK;
  UINT8                                    PM_TMR_LEN;
  UINT8                                    TMR_VAL_EXT;

  //
  // For RTC
  //
  UINT8                                    DAY_ALRM;
  UINT8                                    MON_ALRM;
  UINT8                                    CENTURY;

  //
  // For Reset
  //
  EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE   RESET_REG;
  UINT8                                    RESET_VALUE;

  //
  // For Shutdown
  //
  EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE   PM1a_EVT_BLK;
  EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE   PM1b_EVT_BLK;
  EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE   PM1a_CNT_BLK;
  EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE   PM1b_CNT_BLK;
  EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE   PM2_CNT_BLK;
  UINT8                                    PM1_EVT_LEN;
  UINT8                                    PM1_CNT_LEN;
  UINT8                                    PM2_CNT_LEN;
  UINT8                                    SLP_TYPa;
  UINT8                                    SLP_TYPb;

  //
  // For sleep
  //
  UINT8                                    SLP1_TYPa;
  UINT8                                    SLP1_TYPb;
  UINT8                                    SLP2_TYPa;
  UINT8                                    SLP2_TYPb;
  UINT8                                    SLP3_TYPa;
  UINT8                                    SLP3_TYPb;
  UINT8                                    SLP4_TYPa;
  UINT8                                    SLP4_TYPb;

  //
  // GPE
  //
  EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE   GPE0_BLK;
  EFI_ACPI_3_0_GENERIC_ADDRESS_STRUCTURE   GPE1_BLK;
  UINT8                                    GPE0_BLK_LEN;
  UINT8                                    GPE1_BLK_LEN;
  UINT8                                    GPE1_BASE;

  //
  // IAPC Boot Arch
  //
  UINT16                                   IAPC_BOOT_ARCH;

  //
  // Flags
  //
  UINT32                                   Flags;

} EFI_ACPI_DESCRIPTION;
#pragma pack()

extern EFI_GUID gEfiAcpiDescriptionGuid;

#endif
