/** @file
  VFR file used by the TCG2 configuration component.

Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#include "Tcg2ConfigNvData.h"

formset
  guid      = TCG2_CONFIG_FORM_SET_GUID,
  title     = STRING_TOKEN(STR_TCG2_TITLE),
  help      = STRING_TOKEN(STR_TCG2_HELP),
  classguid = EFI_HII_PLATFORM_SETUP_FORMSET_GUID,

  efivarstore TCG2_CONFIGURATION_INFO,
    varid = TCG2_CONFIGURATION_INFO_VARSTORE_ID,
    attribute = 0x02,  // EFI variable attributes  EFI_VARIABLE_BOOTSERVICE_ACCESS
    name  = TCG2_CONFIGURATION_INFO,
    guid  = TCG2_CONFIG_FORM_SET_GUID;

  efivarstore TCG2_CONFIGURATION,
    varid = TCG2_CONFIGURATION_VARSTORE_ID,
    attribute = 0x03,  // EFI variable attributes  EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE
    name  = TCG2_CONFIGURATION,
    guid  = TCG2_CONFIG_FORM_SET_GUID;

  efivarstore TCG2_VERSION,
    varid = TCG2_VERSION_VARSTORE_ID,
    attribute = 0x03,  // EFI variable attributes  EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE
    name  = TCG2_VERSION,
    guid  = TCG2_CONFIG_FORM_SET_GUID;

  form formid = TCG2_CONFIGURATION_FORM_ID,
    title = STRING_TOKEN(STR_TCG2_TITLE);

    subtitle text = STRING_TOKEN(STR_NULL);

    text
      help   = STRING_TOKEN(STR_TCG2_DEVICE_STATE_HELP),
      text   = STRING_TOKEN(STR_TCG2_DEVICE_STATE_PROMPT),
        text   = STRING_TOKEN(STR_TCG2_DEVICE_STATE_CONTENT);

    oneof varid  = TCG2_CONFIGURATION.TpmDevice,
          questionid = KEY_TPM_DEVICE,
          prompt = STRING_TOKEN(STR_TCG2_DEVICE_PROMPT),
          help   = STRING_TOKEN(STR_TCG2_DEVICE_HELP),
          flags  = INTERACTIVE,
            option text = STRING_TOKEN(STR_TCG2_TPM_1_2),          value = TPM_DEVICE_1_2,          flags = DEFAULT | MANUFACTURING | RESET_REQUIRED;
            option text = STRING_TOKEN(STR_TCG2_TPM_2_0_DTPM),     value = TPM_DEVICE_2_0_DTPM,     flags = RESET_REQUIRED;
    endoneof;

    suppressif ideqvallist TCG2_CONFIGURATION.TpmDevice == TPM_DEVICE_NULL TPM_DEVICE_1_2;

    subtitle text = STRING_TOKEN(STR_NULL);

    text
      help   = STRING_TOKEN(STR_TPM2_ACPI_HID_HELP),
      text   = STRING_TOKEN(STR_TPM2_ACPI_HID_PROMPT),
        text   = STRING_TOKEN(STR_TPM2_ACPI_HID_CONTENT);

    text
      help   = STRING_TOKEN(STR_TPM2_ACPI_REVISION_STATE_HELP),
      text   = STRING_TOKEN(STR_TPM2_ACPI_REVISION_STATE_PROMPT),
        text   = STRING_TOKEN(STR_TPM2_ACPI_REVISION_STATE_CONTENT);

    oneof varid  = TCG2_VERSION.Tpm2AcpiTableRev,
          questionid = KEY_TPM2_ACPI_REVISION,
          prompt = STRING_TOKEN(STR_TPM2_ACPI_REVISION_PROMPT),
          help   = STRING_TOKEN(STR_TPM2_ACPI_REVISION_HELP),
          flags  = INTERACTIVE,
            option text = STRING_TOKEN(STR_TPM2_ACPI_REVISION_3),     value = TPM2_ACPI_REVISION_3,     flags = RESET_REQUIRED;
            option text = STRING_TOKEN(STR_TPM2_ACPI_REVISION_4),     value = TPM2_ACPI_REVISION_4,     flags = DEFAULT | MANUFACTURING | RESET_REQUIRED;
    endoneof;

    subtitle text = STRING_TOKEN(STR_NULL);

    text
      help   = STRING_TOKEN(STR_TCG2_DEVICE_INTERFACE_STATE_HELP),
      text   = STRING_TOKEN(STR_TCG2_DEVICE_INTERFACE_STATE_PROMPT),
        text   = STRING_TOKEN(STR_TCG2_DEVICE_INTERFACE_STATE_CONTENT);

    text
      help   = STRING_TOKEN(STR_TCG2_DEVICE_INTERFACE_CAPABILITY_HELP),
      text   = STRING_TOKEN(STR_TCG2_DEVICE_INTERFACE_CAPABILITY_PROMPT),
        text   = STRING_TOKEN(STR_TCG2_DEVICE_INTERFACE_CAPABILITY_CONTENT);

    suppressif ideqval TCG2_CONFIGURATION_INFO.TpmDeviceInterfacePtpFifoSupported == 0
            OR ideqval TCG2_CONFIGURATION_INFO.TpmDeviceInterfacePtpCrbSupported == 0;
    oneof varid  = TCG2_CONFIGURATION_INFO.TpmDeviceInterfaceAttempt,
          questionid = KEY_TPM_DEVICE_INTERFACE,
          prompt = STRING_TOKEN(STR_TCG2_DEVICE_INTERFACE_PROMPT),
          help   = STRING_TOKEN(STR_TCG2_DEVICE_INTERFACE_HELP),
          flags  = INTERACTIVE,
            option text = STRING_TOKEN(STR_TCG2_DEVICE_INTERFACE_TIS),          value = TPM_DEVICE_INTERFACE_TIS,          flags = RESET_REQUIRED;
            option text = STRING_TOKEN(STR_TCG2_DEVICE_INTERFACE_PTP_FIFO),     value = TPM_DEVICE_INTERFACE_PTP_FIFO,     flags = RESET_REQUIRED;
            option text = STRING_TOKEN(STR_TCG2_DEVICE_INTERFACE_PTP_CRB),      value = TPM_DEVICE_INTERFACE_PTP_CRB,      flags = DEFAULT | MANUFACTURING | RESET_REQUIRED;
    endoneof;
    endif;

    endif;

    subtitle text = STRING_TOKEN(STR_NULL);

    suppressif ideqvallist TCG2_CONFIGURATION.TpmDevice == TPM_DEVICE_NULL TPM_DEVICE_1_2;
    text
      help   = STRING_TOKEN(STR_TPM2_ACTIVE_HASH_ALGO_HELP),
      text   = STRING_TOKEN(STR_TPM2_ACTIVE_HASH_ALGO),
        text   = STRING_TOKEN(STR_TPM2_ACTIVE_HASH_ALGO_CONTENT);
    text
      help   = STRING_TOKEN(STR_TPM2_SUPPORTED_HASH_ALGO_HELP),
      text   = STRING_TOKEN(STR_TPM2_SUPPORTED_HASH_ALGO),
        text   = STRING_TOKEN(STR_TPM2_SUPPORTED_HASH_ALGO_CONTENT);
    text
      help   = STRING_TOKEN(STR_BIOS_HASH_ALGO_HELP),
      text   = STRING_TOKEN(STR_BIOS_HASH_ALGO),
        text   = STRING_TOKEN(STR_BIOS_HASH_ALGO_CONTENT);

    subtitle text = STRING_TOKEN(STR_NULL);
    subtitle text = STRING_TOKEN(STR_TCG2_PP_OPERATION);

    text
      help   = STRING_TOKEN(STR_TCG2_PPI_VERSION_STATE_HELP),
      text   = STRING_TOKEN(STR_TCG2_PPI_VERSION_STATE_PROMPT),
        text   = STRING_TOKEN(STR_TCG2_PPI_VERSION_STATE_CONTENT);

    oneof varid  = TCG2_VERSION.PpiVersion,
          questionid = KEY_TCG2_PPI_VERSION,
          prompt = STRING_TOKEN(STR_TCG2_PPI_VERSION_PROMPT),
          help   = STRING_TOKEN(STR_TCG2_PPI_VERSION_HELP),
          flags  = INTERACTIVE,
            option text = STRING_TOKEN(STR_TCG2_PPI_VERSION_1_2), value = TCG2_PPI_VERSION_1_2, flags = RESET_REQUIRED;
            option text = STRING_TOKEN(STR_TCG2_PPI_VERSION_1_3), value = TCG2_PPI_VERSION_1_3, flags = DEFAULT | MANUFACTURING | RESET_REQUIRED;
    endoneof;

    oneof name = Tpm2Operation,
          questionid = KEY_TPM2_OPERATION,
          prompt = STRING_TOKEN(STR_TCG2_OPERATION),
          help   = STRING_TOKEN(STR_TCG2_OPERATION_HELP),
          flags  = INTERACTIVE | NUMERIC_SIZE_1,
            option text = STRING_TOKEN(STR_TCG2_NO_ACTION), value = TCG2_PHYSICAL_PRESENCE_NO_ACTION, flags = DEFAULT | MANUFACTURING | RESET_REQUIRED;
            option text = STRING_TOKEN(STR_TCG2_ENABLE), value = TCG2_PHYSICAL_PRESENCE_ENABLE, flags = RESET_REQUIRED;
            option text = STRING_TOKEN(STR_TCG2_DISABLE), value = TCG2_PHYSICAL_PRESENCE_DISABLE, flags = RESET_REQUIRED;
            option text = STRING_TOKEN(STR_TCG2_CLEAR), value = TCG2_PHYSICAL_PRESENCE_CLEAR, flags = RESET_REQUIRED;
            option text = STRING_TOKEN(STR_TCG2_SET_PCD_BANKS), value = TCG2_PHYSICAL_PRESENCE_SET_PCR_BANKS, flags = RESET_REQUIRED;
            suppressif ideqval TCG2_CONFIGURATION_INFO.ChangeEPSSupported == 0;
            option text = STRING_TOKEN(STR_TCG2_CHANGE_EPS), value = TCG2_PHYSICAL_PRESENCE_CHANGE_EPS, flags = RESET_REQUIRED;
            endif
            option text = STRING_TOKEN(STR_TCG2_LOG_ALL_DIGESTS), value = TCG2_PHYSICAL_PRESENCE_LOG_ALL_DIGESTS, flags = RESET_REQUIRED;
            option text = STRING_TOKEN(STR_TCG2_DISABLE_ENDORSEMENT_ENABLE_STORAGE_HIERARCHY), value = TCG2_PHYSICAL_PRESENCE_DISABLE_ENDORSEMENT_ENABLE_STORAGE_HIERARCHY, flags = RESET_REQUIRED;
    endoneof;

    suppressif NOT questionref(Tpm2Operation) == TCG2_PHYSICAL_PRESENCE_SET_PCR_BANKS;
    numeric name = Tpm2OperationParameter,
            questionid = KEY_TPM2_OPERATION_PARAMETER,
            prompt  = STRING_TOKEN(STR_TCG2_OPERATION_PARAMETER),
            help    = STRING_TOKEN(STR_TCG2_OPERATION_PARAMETER_HELP),
            flags   = DISPLAY_UINT_HEX | INTERACTIVE | NUMERIC_SIZE_4,
            minimum = 0,
            maximum = 0xFFFFFFFF,
            step    = 0,
            default = 0,
    endnumeric;
    endif;

    subtitle text = STRING_TOKEN(STR_NULL);
    subtitle text = STRING_TOKEN(STR_TCG2_CONFIGURATION);

    text
      help   = STRING_TOKEN(STR_TCG2_SUPPORTED_EVENT_LOG_FORMAT_HELP),
      text   = STRING_TOKEN(STR_TCG2_SUPPORTED_EVENT_LOG_FORMAT),
        text   = STRING_TOKEN(STR_TCG2_SUPPORTED_EVENT_LOG_FORMAT_CONTENT);

    text
      help   = STRING_TOKEN(STR_TCG2_HASH_ALGO_BITMAP_HELP),
      text   = STRING_TOKEN(STR_TCG2_HASH_ALGO_BITMAP),
        text   = STRING_TOKEN(STR_TCG2_HASH_ALGO_BITMAP_CONTENT);

    text
      help   = STRING_TOKEN(STR_TCG2_NUMBER_OF_PCR_BANKS_HELP),
      text   = STRING_TOKEN(STR_TCG2_NUMBER_OF_PCR_BANKS),
        text   = STRING_TOKEN(STR_TCG2_NUMBER_OF_PCR_BANKS_CONTENT);

    text
      help   = STRING_TOKEN(STR_TCG2_ACTIVE_PCR_BANKS_HELP),
      text   = STRING_TOKEN(STR_TCG2_ACTIVE_PCR_BANKS),
        text   = STRING_TOKEN(STR_TCG2_ACTIVE_PCR_BANKS_CONTENT);

    subtitle text = STRING_TOKEN(STR_NULL);

  suppressif ideqval TCG2_CONFIGURATION_INFO.Sha1Supported == 0;
    checkbox name = TCG2ActivatePCRBank0,
            questionid = KEY_TPM2_PCR_BANKS_REQUEST_0,
            prompt     = STRING_TOKEN(STR_TCG2_PCR_BANK_SHA1),
            help       = STRING_TOKEN(STR_TCG2_PCR_BANK_SHA1_HELP),
            flags      = INTERACTIVE | RESET_REQUIRED,
            default    = 1,
    endcheckbox;
  endif;

  suppressif ideqval TCG2_CONFIGURATION_INFO.Sha256Supported == 0;
    checkbox name = TCG2ActivatePCRBank1,
            questionid = KEY_TPM2_PCR_BANKS_REQUEST_1,
            prompt     = STRING_TOKEN(STR_TCG2_PCR_BANK_SHA256),
            help       = STRING_TOKEN(STR_TCG2_PCR_BANK_SHA256_HELP),
            flags      = INTERACTIVE | RESET_REQUIRED,
            default    = 0,
    endcheckbox;
  endif;

  suppressif ideqval TCG2_CONFIGURATION_INFO.Sha384Supported == 0;
    checkbox name = TCG2ActivatePCRBank2,
            questionid = KEY_TPM2_PCR_BANKS_REQUEST_2,
            prompt     = STRING_TOKEN(STR_TCG2_PCR_BANK_SHA384),
            help       = STRING_TOKEN(STR_TCG2_PCR_BANK_SHA384_HELP),
            flags      = INTERACTIVE | RESET_REQUIRED,
            default    = 0,
    endcheckbox;
  endif;

  suppressif ideqval TCG2_CONFIGURATION_INFO.Sha512Supported == 0;
    checkbox name = TCG2ActivatePCRBank3,
            questionid = KEY_TPM2_PCR_BANKS_REQUEST_3,
            prompt     = STRING_TOKEN(STR_TCG2_PCR_BANK_SHA512),
            help       = STRING_TOKEN(STR_TCG2_PCR_BANK_SHA512_HELP),
            flags      = INTERACTIVE | RESET_REQUIRED,
            default    = 0,
    endcheckbox;
  endif;

  suppressif ideqval TCG2_CONFIGURATION_INFO.Sm3Supported == 0;
    checkbox name = TCG2ActivatePCRBank4,
            questionid = KEY_TPM2_PCR_BANKS_REQUEST_4,
            prompt     = STRING_TOKEN(STR_TCG2_PCR_BANK_SM3_256),
            help       = STRING_TOKEN(STR_TCG2_PCR_BANK_SM3_256_HELP),
            flags      = INTERACTIVE | RESET_REQUIRED,
            default    = 0,
    endcheckbox;
  endif;

    endif;

  endform;

endformset;
