/** @file
  Copyright (c) 2019 Intel Corporation. All rights reserved. <BR>

  SPDX-License-Identifier: BSD-2-Clause-Patent
**/

  //
  // Define CPU NVS Area operation region.
  //

#ifndef _CPU_NVS_AREA_DEF_H_
#define _CPU_NVS_AREA_DEF_H_

#pragma pack (push,1)
typedef struct {
  UINT8    Revision;                                ///< Offset 0       CPU GlobalNvs Revision
  UINT32   PpmFlags;                                ///< Offset 1       PPM Flags Values
  UINT8    Reserved0[1];                            ///< Offset 5:5
  UINT8    AutoCriticalTripPoint;                   ///< Offset 6       Auto Critical Trip Point
  UINT8    AutoPassiveTripPoint;                    ///< Offset 7       Auto Passive Trip Point
  UINT8    AutoActiveTripPoint;                     ///< Offset 8       Auto Active Trip Point
  UINT32   Cpuid;                                   ///< Offset 9       CPUID
  UINT8    ConfigurablePpc;                         ///< Offset 13      Boot Mode vlues for _PPC
  UINT8    CtdpLevelsSupported;                     ///< Offset 14      ConfigTdp Number Of Levels
  UINT8    ConfigTdpBootModeIndex;                  ///< Offset 15      CTDP Boot Mode Index
  UINT16   CtdpPowerLimit1[3];                      ///< Offset 16      CTDP Level 0 Power Limit1
                                                    ///< Offset 18      CTDP Level 1 Power Limit1
                                                    ///< Offset 20      CTDP Level 2 Power Limit1
  UINT16   CtdpPowerLimit2[3];                      ///< Offset 22      CTDP Level 0 Power Limit2
                                                    ///< Offset 24      CTDP Level 1 Power Limit2
                                                    ///< Offset 26      CTDP Level 2 Power Limit2
  UINT8    CtdpPowerLimitWindow[3];                 ///< Offset 28      CTDP Level 0 Power Limit1 Time Window
                                                    ///< Offset 29      CTDP Level 1 Power Limit1 Time Window
                                                    ///< Offset 30      CTDP Level 2 Power Limit1 Time Window
  UINT8    CtdpCtc[3];                              ///< Offset 31      CTDP Level 0 CTC
                                                    ///< Offset 32      CTDP Level 1 CTC
                                                    ///< Offset 33      CTDP Level 2 CTC
  UINT8    CtdpTar[3];                              ///< Offset 34      CTDP Level 0 TAR
                                                    ///< Offset 35      CTDP Level 1 TAR
                                                    ///< Offset 36      CTDP Level 2 TAR
  UINT8    CtdpPpc[3];                              ///< Offset 37      CTDP Level 0 PPC
                                                    ///< Offset 38      CTDP Level 1 PPC
                                                    ///< Offset 39      CTDP Level 2 PPC
  UINT8    Reserved1[1];                            ///< Offset 40:40
  UINT8    C6MwaitValue;                            ///< Offset 41      Mwait Hint value for C6
  UINT8    C7MwaitValue;                            ///< Offset 42      Mwait Hint value for C7/C7s
  UINT8    CDMwaitValue;                            ///< Offset 43      Mwait Hint value for C7/C8/C9/C10
  UINT8    Reserved2[2];                            ///< Offset 44:45
  UINT16   C6Latency;                               ///< Offset 46      Latency Value for C6
  UINT16   C7Latency;                               ///< Offset 48      Latency Value for C7/C7S
  UINT16   CDLatency;                               ///< Offset 50      Latency Value for C8/C9/C10
  UINT16   CDIOLevel;                               ///< Offset 52      IO LVL value for C8/C9/C10
  UINT16   CDPowerValue;                            ///< Offset 54      Power value for C8/C9/C10
  UINT8    MiscPowerManagementFlags;                ///< Offset 56      MiscPowerManagementFlags
  UINT8    EnableDigitalThermalSensor;              ///< Offset 57      Digital Thermal Sensor Enable
  UINT8    BspDigitalThermalSensorTemperature;      ///< Offset 58      Digital Thermal Sensor 1 Readingn for BSP
  UINT8    ApDigitalThermalSensorTemperature;       ///< Offset 59      Digital Thermal Sensor 2 Reading for AP1
  UINT8    DigitalThermalSensorSmiFunction;         ///< Offset 60      DTS SMI Function Call via DTS IO Trap
  UINT8    PackageDTSTemperature;                   ///< Offset 61      Package Temperature
  UINT8    IsPackageTempMSRAvailable;               ///< Offset 62      Package Temperature MSR available
  UINT8    Ap2DigitalThermalSensorTemperature;      ///< Offset 63      Digital Thermal Sensor 3 Reading for AP2
  UINT8    Ap3DigitalThermalSensorTemperature;      ///< Offset 64      Digital Thermal Sensor 4 Reading for AP3
  UINT64   BiosGuardMemAddress;                     ///< Offset 65      BIOS Guard Memory Address for Tool Interface
  UINT8    BiosGuardMemSize;                        ///< Offset 73      BIOS Guard Memory Size for Tool Interface
  UINT16   BiosGuardIoTrapAddress;                  ///< Offset 74      BIOS Guard IoTrap Address for Tool Interface
  UINT16   BiosGuardIoTrapLength;                   ///< Offset 76      BIOS Guard IoTrap Length for Tool Interface
  UINT16   DtsIoTrapAddress;                        ///< Offset 78      DTS IO trap Address
  UINT8    DtsIoTrapLength;                         ///< Offset 80      DTS IO trap Length
  UINT8    DtsAcpiEnable;                           ///< Offset 81      DTS is in ACPI Mode Enabled
  UINT8    SgxStatus;                               ///< Offset 82      SGX Status
  UINT64   EpcBaseAddress;                          ///< Offset 83      EPC Base Address
  UINT64   EpcLength;                               ///< Offset 91      EPC Length
  UINT8    HwpVersion;                              ///< Offset 99      HWP Version
  UINT8    HwpInterruptStatus;                      ///< Offset 100     HWP Interrupt Status
  UINT8    DtsInterruptStatus;                      ///< Offset 101     DTS Interrupt Status
  UINT8    HwpSmi;                                  ///< Offset 102     SMI to setup HWP LVT tables
  UINT8    LowestMaxPerf;                           ///< Offset 103     Max ratio of the slowest core.
  UINT8    EnableItbm;                              ///< Offset 104     Enable/Disable Intel Turbo Boost Max Technology 3.0.
  UINT8    EnableItbmDriver;                        ///< Offset 105     Enable/Disable Intel Turbo Boost Max Technology 3.0 Driver.
  UINT8    ItbmInterruptStatus;                     ///< Offset 106     Intel Turbo Boost Max Technology 3.0 interrupt status.
  UINT8    ItbmSmi;                                 ///< Offset 107     SMI to resume periodic SMM for Intel Turbo Boost Max Technology 3.0.
  UINT8    OcBins;                                  ///< Offset 108     Indicates bins of Oc support. MSR 194h FLEX_RATIO Bits (19:17)
  UINT8    C3MwaitValue;                            ///< Offset 109     Mwait Hint value for C3 (CFL only)
  UINT16   C3Latency;                               ///< Offset 110     Latency Value for C3 (CFL only)
} CPU_NVS_AREA;

#pragma pack(pop)
#endif
