/*++

Copyright (c)  1999  - 2014, 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 that 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:

  Ea815acpiFACS.c


Abstract:

  This file contains the FACS structure definition.

--*/

//
// Statements that include other files
//
#ifdef ECP_FLAG
#include "EDKIIGlueDxe.h"
#else
#include <PiDxe.h>
#endif
#include <IndustryStandard/Acpi50.h>
#include "AcpiTablePlatform.h"

EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE FACS = {
  EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE,
  sizeof (EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE),

  //
  // Hardware Signature will be updated at runtime
  //
  0x00000000,                  //HardwareSignature
  0x00000000,                  //FirmwareWakingVector
  0x00000000,                  //GlobalLock
  0x00000000,                  //Flags
  0x0000000000000000,          //XFirmwareWakingVector
  EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_VERSION,
  EFI_ACPI_RESERVED_BYTE,      //Reserved0[3]
  EFI_ACPI_RESERVED_BYTE,
  EFI_ACPI_RESERVED_BYTE,
  0x00000000,                  //OspmFlags
  EFI_ACPI_RESERVED_BYTE,      //Reserved1[24]
  EFI_ACPI_RESERVED_BYTE,
  EFI_ACPI_RESERVED_BYTE,
  EFI_ACPI_RESERVED_BYTE,
  EFI_ACPI_RESERVED_BYTE,
  EFI_ACPI_RESERVED_BYTE,
  EFI_ACPI_RESERVED_BYTE,
  EFI_ACPI_RESERVED_BYTE,
  EFI_ACPI_RESERVED_BYTE,
  EFI_ACPI_RESERVED_BYTE,
  EFI_ACPI_RESERVED_BYTE,
  EFI_ACPI_RESERVED_BYTE,
  EFI_ACPI_RESERVED_BYTE,
  EFI_ACPI_RESERVED_BYTE,
  EFI_ACPI_RESERVED_BYTE,
  EFI_ACPI_RESERVED_BYTE,
  EFI_ACPI_RESERVED_BYTE,
  EFI_ACPI_RESERVED_BYTE,
  EFI_ACPI_RESERVED_BYTE,
  EFI_ACPI_RESERVED_BYTE,
  EFI_ACPI_RESERVED_BYTE,
  EFI_ACPI_RESERVED_BYTE,
  EFI_ACPI_RESERVED_BYTE,
  EFI_ACPI_RESERVED_BYTE
};

VOID*
ReferenceAcpiTable (
  VOID
  )
{
  //
  // Reference the table being generated to prevent the optimizer from
  // removing the data structure from the executable
  //
  return (VOID*)&FACS;
}
