/** @file
  ACPI Low Power Idle Table (LPIT) definitions

  Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
  SPDX-License-Identifier: BSD-2-Clause-Patent

  @par Revision Reference:
    - ACPI Low Power Idle Table (LPIT) Revision 001, dated July 2014
      http://www.uefi.org/sites/default/files/resources/ACPI_Low_Power_Idle_Table.pdf

  @par Glossary:
    - GAS - Generic Address Structure
    - LPI - Low Power Idle
**/

#ifndef _LOW_POWER_IDLE_TABLE_H_
#define _LOW_POWER_IDLE_TABLE_H_

#include <IndustryStandard/Acpi.h>

#pragma pack(1)

///
/// LPI Structure Types
///
#define ACPI_LPI_STRUCTURE_TYPE_NATIVE_CSTATE  0x00

///
/// Low Power Idle (LPI) State Flags
///
typedef union {
  struct {
    UINT32    Disabled           : 1; ///< If set, LPI state is not used

    /**
      If set, Residency counter is not available for this LPI state and
      Residency Counter Frequency is invalid
    **/
    UINT32    CounterUnavailable : 1;
    UINT32    Reserved           : 30; ///< Reserved for future use. Must be zero
  } Bits;
  UINT32    Data32;
} ACPI_LPI_STATE_FLAGS;

///
/// Low Power Idle (LPI) structure with Native C-state instruction entry trigger descriptor
///
typedef struct {
  UINT32                                    Type;   ///< LPI State descriptor Type 0
  UINT32                                    Length; ///< Length of LPI state Descriptor Structure
  ///
  /// Unique LPI state identifier: zero based, monotonically increasing identifier
  ///
  UINT16                                    UniqueId;
  UINT8                                     Reserved[2]; ///< Must be Zero
  ACPI_LPI_STATE_FLAGS                      Flags;       ///< LPI state flags

  /**
    The LPI entry trigger, matching an existing _CST.Register object, represented as a
    Generic Address Structure. All processors must request this state or deeper to trigger.
  **/
  EFI_ACPI_6_1_GENERIC_ADDRESS_STRUCTURE    EntryTrigger;
  UINT32                                    Residency; ///< Minimum residency or break-even in uSec
  UINT32                                    Latency;   ///< Worst case exit latency in uSec

  /**
    [optional] Residency counter, represented as a Generic Address Structure.
    If not present, Flags[1] bit should be set.
  **/
  EFI_ACPI_6_1_GENERIC_ADDRESS_STRUCTURE    ResidencyCounter;

  /**
    [optional] Residency counter frequency in cycles per second. Value 0 indicates that
    counter runs at TSC frequency. Valid only if Residency Counter is present.
  **/
  UINT64                                    ResidencyCounterFrequency;
} ACPI_LPI_NATIVE_CSTATE_DESCRIPTOR;

#pragma pack()

#endif
