| /** @file | |
| Defines the defitions used by TDX in OvmfPkg. | |
| Copyright (c) 2020 - 2021, Intel Corporation. All rights reserved.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #ifndef OVMF_INTEL_TDX_H_ | |
| #define OVMF_INTEL_TDX_H_ | |
| #include <PiPei.h> | |
| #include <Library/BaseLib.h> | |
| #include <Uefi/UefiSpec.h> | |
| #include <Uefi/UefiBaseType.h> | |
| #define MP_CPU_PROTECTED_MODE_MAILBOX_APICID_INVALID 0xFFFFFFFF | |
| #define MP_CPU_PROTECTED_MODE_MAILBOX_APICID_BROADCAST 0xFFFFFFFE | |
| typedef enum { | |
| MpProtectedModeWakeupCommandNoop = 0, | |
| MpProtectedModeWakeupCommandWakeup = 1, | |
| MpProtectedModeWakeupCommandSleep = 2, | |
| MpProtectedModeWakeupCommandAcceptPages = 3, | |
| } MP_CPU_PROTECTED_MODE_WAKEUP_CMD; | |
| #pragma pack(1) | |
| // | |
| // Describes the CPU MAILBOX control structure use to | |
| // wakeup cpus spinning in long mode | |
| // | |
| typedef struct { | |
| UINT16 Command; | |
| UINT16 Resv; | |
| UINT32 ApicId; | |
| UINT64 WakeUpVector; | |
| UINT8 ResvForOs[2032]; | |
| // | |
| // Arguments available for wakeup code | |
| // | |
| UINT64 WakeUpArgs1; | |
| UINT64 WakeUpArgs2; | |
| UINT64 WakeUpArgs3; | |
| UINT64 WakeUpArgs4; | |
| UINT8 Pad1[0xe0]; | |
| UINT64 NumCpusArriving; | |
| UINT8 Pad2[0xf8]; | |
| UINT64 NumCpusExiting; | |
| UINT32 Tallies[256]; | |
| UINT8 Errors[256]; | |
| UINT8 Pad3[0xf8]; | |
| } MP_WAKEUP_MAILBOX; | |
| // | |
| // AP relocation code information including code address and size, | |
| // this structure will be shared be C code and assembly code. | |
| // It is natural aligned by design. | |
| // | |
| typedef struct { | |
| UINT8 *RelocateApLoopFuncAddress; | |
| UINTN RelocateApLoopFuncSize; | |
| } MP_RELOCATION_MAP; | |
| #pragma pack() | |
| #endif |