/** @file
  Define the variable data structures used for TCG physical presence.
  The TPM request from firmware or OS is saved to variable. And it is
  cleared after it is processed in the next boot cycle. The TPM response
  is saved to variable.

Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#pragma once

#define EFI_PHYSICAL_PRESENCE_DATA_GUID \
  { \
    0xf6499b1, 0xe9ad, 0x493d, { 0xb9, 0xc2, 0x2f, 0x90, 0x81, 0x5c, 0x6c, 0xbc }\
  }

#define EFI_PHYSICAL_PRESENCE_ACPI_GUID \
  { \
    0x3DDDFAA6, 0x361B, 0x4eb4, { 0xA4, 0x24, 0x8D, 0x10, 0x08, 0x9D, 0x16, 0x53 }\
  }

#define PHYSICAL_PRESENCE_VARIABLE  L"PhysicalPresence"

typedef struct {
  UINT8     PPRequest;    ///< Physical Presence request command.
  UINT8     LastPPRequest;
  UINT32    PPResponse;
} EFI_PHYSICAL_PRESENCE;

//
// The definition of physical presence operation actions
//
#define PHYSICAL_PRESENCE_NO_ACTION                              0
#define PHYSICAL_PRESENCE_ENABLE                                 1
#define PHYSICAL_PRESENCE_DISABLE                                2
#define PHYSICAL_PRESENCE_ACTIVATE                               3
#define PHYSICAL_PRESENCE_DEACTIVATE                             4
#define PHYSICAL_PRESENCE_CLEAR                                  5
#define PHYSICAL_PRESENCE_ENABLE_ACTIVATE                        6
#define PHYSICAL_PRESENCE_DEACTIVATE_DISABLE                     7
#define PHYSICAL_PRESENCE_SET_OWNER_INSTALL_TRUE                 8
#define PHYSICAL_PRESENCE_SET_OWNER_INSTALL_FALSE                9
#define PHYSICAL_PRESENCE_ENABLE_ACTIVATE_OWNER_TRUE             10
#define PHYSICAL_PRESENCE_DEACTIVATE_DISABLE_OWNER_FALSE         11
#define PHYSICAL_PRESENCE_DEFERRED_PP_UNOWNERED_FIELD_UPGRADE    12
#define PHYSICAL_PRESENCE_SET_OPERATOR_AUTH                      13
#define PHYSICAL_PRESENCE_CLEAR_ENABLE_ACTIVATE                  14
#define PHYSICAL_PRESENCE_SET_NO_PPI_PROVISION_FALSE             15
#define PHYSICAL_PRESENCE_SET_NO_PPI_PROVISION_TRUE              16
#define PHYSICAL_PRESENCE_SET_NO_PPI_CLEAR_FALSE                 17
#define PHYSICAL_PRESENCE_SET_NO_PPI_CLEAR_TRUE                  18
#define PHYSICAL_PRESENCE_SET_NO_PPI_MAINTENANCE_FALSE           19
#define PHYSICAL_PRESENCE_SET_NO_PPI_MAINTENANCE_TRUE            20
#define PHYSICAL_PRESENCE_ENABLE_ACTIVATE_CLEAR                  21
#define PHYSICAL_PRESENCE_ENABLE_ACTIVATE_CLEAR_ENABLE_ACTIVATE  22

//
// This variable is used to save TPM Management Flags and corresponding operations.
// It should be protected from malicious software (e.g. Set it as read-only variable).
//
#define PHYSICAL_PRESENCE_FLAGS_VARIABLE  L"PhysicalPresenceFlags"
typedef struct {
  UINT8    PPFlags;
} EFI_PHYSICAL_PRESENCE_FLAGS;

//
// The definition bit of the TPM Management Flags
//
#define FLAG_NO_PPI_PROVISION    BIT0
#define FLAG_NO_PPI_CLEAR        BIT1
#define FLAG_NO_PPI_MAINTENANCE  BIT2
#define FLAG_RESET_TRACK         BIT3

extern EFI_GUID  gEfiPhysicalPresenceGuid;
extern EFI_GUID  gEfiPhysicalPresenceAcpiGuid;
