/** @file
  Platform specific defines for constructing ACPI tables

  Copyright (c) 2012, 2013, Red Hat, Inc.
  Copyright (c) 2008, Intel Corporation. All rights reserved.<BR>
  SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef _Platform_h_INCLUDED_
#define _Platform_h_INCLUDED_

#include <PiDxe.h>
#include <IndustryStandard/Acpi.h>

//
// ACPI table information used to initialize tables.
//
#define EFI_ACPI_OEM_ID           'O','V','M','F',' ',' '   // OEMID 6 bytes long
#define EFI_ACPI_OEM_TABLE_ID     SIGNATURE_64('O','V','M','F','E','D','K','2') // OEM table id 8 bytes long
#define EFI_ACPI_OEM_REVISION     0x20130221
#define EFI_ACPI_CREATOR_ID       SIGNATURE_32('O','V','M','F')
#define EFI_ACPI_CREATOR_REVISION 0x00000099

#define SCI_INT_VECTOR  0x0009
#define SMI_CMD_IO_PORT 0xB2
#define ACPI_ENABLE     0xF1
#define ACPI_DISABLE    0xF0
#define S4BIOS_REQ      0x00
#define PM1a_EVT_BLK    0x0000b000
#define PM1a_CNT_BLK    0x0000b004
#define PM_TMR_BLK      0x0000b008
#define GPE0_BLK        0x0000afe0
#define PM1_EVT_LEN     0x04
#define PM1_CNT_LEN     0x02
#define PM_TM_LEN       0x04
#define GPE0_BLK_LEN    0x04
#define RESERVED        0x00
#define P_LVL2_LAT      0x0065
#define P_LVL3_LAT      0x03E9
#define FLUSH_SIZE      0x0000
#define FLUSH_STRIDE    0x0000
#define DUTY_OFFSET     0x00
#define DUTY_WIDTH      0x00
#define DAY_ALRM        0x00
#define MON_ALRM        0x00
#define CENTURY         0x00
#define FLAG            (EFI_ACPI_2_0_WBINVD | \
                         EFI_ACPI_2_0_PROC_C1 | \
                         EFI_ACPI_2_0_SLP_BUTTON | \
                         EFI_ACPI_2_0_RTC_S4 | \
                         EFI_ACPI_2_0_RESET_REG_SUP)
#define RESET_REG       0xCF9
#define RESET_VALUE     (BIT2 | BIT1) // PIIX3 Reset CPU + System Reset

//
// Byte-aligned IO port register block initializer for
// EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE
//
#define GAS2_IO(Base, Size) {                             \
          EFI_ACPI_2_0_SYSTEM_IO, /* AddressSpaceId    */ \
          (Size) * 8,             /* RegisterBitWidth  */ \
          0,                      /* RegisterBitOffset */ \
          0,                      /* Reserved          */ \
          (Base)                  /* Address           */ \
          }

#endif
