/** @file
  CPU Security PreMemory Config Block.

  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
  SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _CPU_SECURITY_PREMEM_CONFIG_H_
#define _CPU_SECURITY_PREMEM_CONFIG_H_

#define CPU_SECURITY_PREMEM_CONFIG_REVISION 1

extern EFI_GUID gCpuSecurityPreMemConfigGuid;

#pragma pack (push,1)

/**
  CPU Security PreMemory Configuration Structure.

  <b>Revision 1</b>:
  - Initial version.
**/
typedef struct {
  CONFIG_BLOCK_HEADER Header;                      ///< Config Block Header
  UINT32              PrmrrSize;                   ///< PRMRR Size.<b>Software Control: 0x0</b>  32MB: 0x2000000, 64MB: 0x4000000, 128 MB: 0x8000000, 256 MB: 0x10000000, 512 MB: 0x20000000
  UINT16              BiosSize;                    ///< Flash information for BIOS Guard: BIOS Size in KB.
  UINT8               Reserved[2];                 ///< Reserved for future use
/**
   Enable or Disable BIOS Guard; 0: Disable; <b>1: Enable</b>.
    - This is an optional feature and can be opted out.
    - If this policy is set to Disabled, the policies in the BIOS_GUARD_CONFIG will be ignored.
    - If PeiBiosGuardLibNull is used, this policy will have no effect.
**/
  UINT32              BiosGuard               :  1;
  UINT32              BiosGuardToolsInterface :  1; ///< BIOS Guard Tools Interface; <b>0: Disable</b>, 1:Enable
/**
   Enable or Disable Software Guard Extensions; <b>0: Disable</b>; 1: Enable.
    - This is an optional feature and can be opted out.
    - If this policy is set to Disabled, the policies in the CPU_SGX_CONFIG will be ignored.
    - If BaseSoftwareGuardLibNull is used, this policy will have no effect.
**/
  UINT32              EnableSgx               :  1;
/**
   Enable or Disable Trusted Execution Technology; <b>0: Disable</b>; 1: Enable.
    - This is an optional feature and can be opted out.
    - If this policy is set to Disabled, the policies in the CPU_TXT_PREMEM_CONFIG will be ignored.
    - If PeiTxtLibNull is used, this policy will have no effect.
**/
  UINT32              Txt                     :  1;
  UINT32              SkipStopPbet            :  1; ///< <b>(Test)</b> Skip Stop PBET Timer; <b>0: Disable</b>; 1: Enable.
  ///
  /// <b>(Test)</b> This policy indicates whether or not BIOS should allocate PRMRR memory for C6DRAM power gating feature.
  ///  - 0: Don't allocate any PRMRR memory for C6DRAM power gating feature.
  ///  - <b>1: Allocate PRMRR memory for C6DRAM power gating feature</b>.
  ///
  UINT32              EnableC6Dram            :  1;
  UINT32              ResetAux                :  1; ///< <b>(Test)</b> Reset Auxiliary content, <b>0: Disabled</b>, 1: Enabled
  UINT32              TxtAcheckRequest        :  1; ///< <b>(Test)</b> AcheckRequest <b>0: Disabled</b>, 1: Enabled. When Enabled, it will call Acheck regardless of crashcode value
  UINT32              RsvdBits                : 24; ///< Reserved for future use
} CPU_SECURITY_PREMEM_CONFIG;

#pragma pack (pop)

#endif // _CPU_SECURITY_CONFIG_H_
