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