/** @file
  Intel Trust Domain Extension definitions
  Detailed information is in below document:
  https://software.intel.com/content/dam/develop/external/us/en/documents
  /tdx-module-1eas-v0.85.039.pdf

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

**/

#ifndef MDE_PKG_TDX_H_
#define MDE_PKG_TDX_H_

#define EXIT_REASON_EXTERNAL_INTERRUPT  1
#define EXIT_REASON_TRIPLE_FAULT        2

#define EXIT_REASON_PENDING_INTERRUPT    7
#define EXIT_REASON_NMI_WINDOW           8
#define EXIT_REASON_TASK_SWITCH          9
#define EXIT_REASON_CPUID                10
#define EXIT_REASON_HLT                  12
#define EXIT_REASON_INVD                 13
#define EXIT_REASON_INVLPG               14
#define EXIT_REASON_RDPMC                15
#define EXIT_REASON_RDTSC                16
#define EXIT_REASON_VMCALL               18
#define EXIT_REASON_VMCLEAR              19
#define EXIT_REASON_VMLAUNCH             20
#define EXIT_REASON_VMPTRLD              21
#define EXIT_REASON_VMPTRST              22
#define EXIT_REASON_VMREAD               23
#define EXIT_REASON_VMRESUME             24
#define EXIT_REASON_VMWRITE              25
#define EXIT_REASON_VMOFF                26
#define EXIT_REASON_VMON                 27
#define EXIT_REASON_CR_ACCESS            28
#define EXIT_REASON_DR_ACCESS            29
#define EXIT_REASON_IO_INSTRUCTION       30
#define EXIT_REASON_MSR_READ             31
#define EXIT_REASON_MSR_WRITE            32
#define EXIT_REASON_INVALID_STATE        33
#define EXIT_REASON_MSR_LOAD_FAIL        34
#define EXIT_REASON_MWAIT_INSTRUCTION    36
#define EXIT_REASON_MONITOR_TRAP_FLAG    37
#define EXIT_REASON_MONITOR_INSTRUCTION  39
#define EXIT_REASON_PAUSE_INSTRUCTION    40
#define EXIT_REASON_MCE_DURING_VMENTRY   41
#define EXIT_REASON_TPR_BELOW_THRESHOLD  43
#define EXIT_REASON_APIC_ACCESS          44
#define EXIT_REASON_EOI_INDUCED          45
#define EXIT_REASON_GDTR_IDTR            46
#define EXIT_REASON_LDTR_TR              47
#define EXIT_REASON_EPT_VIOLATION        48
#define EXIT_REASON_EPT_MISCONFIG        49
#define EXIT_REASON_INVEPT               50
#define EXIT_REASON_RDTSCP               51
#define EXIT_REASON_PREEMPTION_TIMER     52
#define EXIT_REASON_INVVPID              53
#define EXIT_REASON_WBINVD               54
#define EXIT_REASON_XSETBV               55
#define EXIT_REASON_APIC_WRITE           56
#define EXIT_REASON_RDRAND               57
#define EXIT_REASON_INVPCID              58
#define EXIT_REASON_VMFUNC               59
#define EXIT_REASON_ENCLS                60
#define EXIT_REASON_RDSEED               61
#define EXIT_REASON_PML_FULL             62
#define EXIT_REASON_XSAVES               63
#define EXIT_REASON_XRSTORS              64

// TDCALL API Function Completion Status Codes
#define TDX_EXIT_REASON_SUCCESS                0x0000000000000000
#define TDX_EXIT_REASON_PAGE_ALREADY_ACCEPTED  0x00000B0A00000000
#define TDX_EXIT_REASON_PAGE_SIZE_MISMATCH     0xC0000B0B00000000
#define TDX_EXIT_REASON_OPERAND_INVALID        0xC000010000000000
#define TDX_EXIT_REASON_OPERAND_BUSY           0x8000020000000000

// TDCALL [TDG.MEM.PAGE.ACCEPT] page size
#define TDCALL_ACCEPT_PAGE_SIZE_4K  0
#define TDCALL_ACCEPT_PAGE_SIZE_2M  1
#define TDCALL_ACCEPT_PAGE_SIZE_1G  2

#define TDCALL_TDVMCALL      0
#define TDCALL_TDINFO        1
#define TDCALL_TDEXTENDRTMR  2
#define TDCALL_TDGETVEINFO   3
#define TDCALL_TDREPORT      4
#define TDCALL_TDSETCPUIDVE  5
#define TDCALL_TDACCEPTPAGE  6

#define TDVMCALL_CPUID    0x0000a
#define TDVMCALL_HALT     0x0000c
#define TDVMCALL_IO       0x0001e
#define TDVMCALL_RDMSR    0x0001f
#define TDVMCALL_WRMSR    0x00020
#define TDVMCALL_MMIO     0x00030
#define TDVMCALL_PCONFIG  0x00041

#define TDVMCALL_GET_TDVMCALL_INFO   0x10000
#define TDVMCALL_MAPGPA              0x10001
#define TDVMCALL_GET_QUOTE           0x10002
#define TDVMCALL_REPORT_FATAL_ERR    0x10003
#define TDVMCALL_SETUP_EVENT_NOTIFY  0x10004

#pragma pack(1)
typedef struct {
  UINT64    Data[6];
} TDCALL_GENERIC_RETURN_DATA;

typedef struct {
  UINT64    Gpaw;
  UINT64    Attributes;
  UINT32    MaxVcpus;
  UINT32    NumVcpus;
  UINT64    Resv[3];
} TDCALL_INFO_RETURN_DATA;

typedef union {
  UINT64    Val;
  struct {
    UINT32    Size      : 3;
    UINT32    Direction : 1;
    UINT32    String    : 1;
    UINT32    Rep       : 1;
    UINT32    Encoding  : 1;
    UINT32    Resv      : 9;
    UINT32    Port      : 16;
    UINT32    Resv2;
  } Io;
} VMX_EXIT_QUALIFICATION;

typedef struct {
  UINT32                    ExitReason;
  UINT32                    Resv;
  VMX_EXIT_QUALIFICATION    ExitQualification;
  UINT64                    GuestLA;
  UINT64                    GuestPA;
  UINT32                    ExitInstructionLength;
  UINT32                    ExitInstructionInfo;
  UINT32                    Resv1;
} TDCALL_VEINFO_RETURN_DATA;

typedef union {
  TDCALL_GENERIC_RETURN_DATA    Generic;
  TDCALL_INFO_RETURN_DATA       TdInfo;
  TDCALL_VEINFO_RETURN_DATA     VeInfo;
} TD_RETURN_DATA;

/* data structure used in TDREPORT_STRUCT */
typedef struct {
  UINT8    Type;
  UINT8    Subtype;
  UINT8    Version;
  UINT8    Rsvd;
} TD_REPORT_TYPE;

typedef struct {
  TD_REPORT_TYPE    ReportType;
  UINT8             Rsvd1[12];
  UINT8             CpuSvn[16];
  UINT8             TeeTcbInfoHash[48];
  UINT8             TeeInfoHash[48];
  UINT8             ReportData[64];
  UINT8             Rsvd2[32];
  UINT8             Mac[32];
} REPORTMACSTRUCT;

typedef struct {
  UINT8    Seam[2];
  UINT8    Rsvd[14];
} TEE_TCB_SVN;

typedef struct {
  UINT8          Valid[8];
  TEE_TCB_SVN    TeeTcbSvn;
  UINT8          Mrseam[48];
  UINT8          Mrsignerseam[48];
  UINT8          Attributes[8];
  UINT8          Rsvd[111];
} TEE_TCB_INFO;

typedef struct {
  UINT8    Attributes[8];
  UINT8    Xfam[8];
  UINT8    Mrtd[48];
  UINT8    Mrconfigid[48];
  UINT8    Mrowner[48];
  UINT8    Mrownerconfig[48];
  UINT8    Rtmrs[4][48];
  UINT8    Rsvd[112];
} TDINFO;

typedef struct {
  REPORTMACSTRUCT    ReportMacStruct;
  TEE_TCB_INFO       TeeTcbInfo;
  UINT8              Rsvd[17];
  TDINFO             Tdinfo;
} TDREPORT_STRUCT;

#pragma pack()

#endif
