/** @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
