OvmfPkg/UefiCpuPkg: Add CcExit prefix to the APIs of CcExitLib
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4123 APIs which are defined in CcExitLib.h are added with the CcExit prefix. This is to make the APIs' name more meaningful. This change impacts OvmfPkg/UefiCpuPkg. Cc: Eric Dong <eric.dong@intel.com> Cc: Ray Ni <ray.ni@intel.com> Cc: Brijesh Singh <brijesh.singh@amd.com> Cc: Erdem Aktas <erdemaktas@google.com> Cc: Gerd Hoffmann <kraxel@redhat.com> Cc: James Bottomley <jejb@linux.ibm.com> Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Tom Lendacky <thomas.lendacky@amd.com> Reviewed-by: Jiewen Yao <jiewen.yao@intel.com> Reviewed-by: Ray Ni <ray.ni@intel.com> Signed-off-by: Min Xu <min.m.xu@intel.com>
This commit is contained in:
@ -193,9 +193,9 @@ PageStateChangeVmgExit (
|
|||||||
//
|
//
|
||||||
while (Info->Header.CurrentEntry <= Info->Header.EndEntry) {
|
while (Info->Header.CurrentEntry <= Info->Header.EndEntry) {
|
||||||
Ghcb->SaveArea.SwScratch = (UINT64)Ghcb->SharedBuffer;
|
Ghcb->SaveArea.SwScratch = (UINT64)Ghcb->SharedBuffer;
|
||||||
VmgSetOffsetValid (Ghcb, GhcbSwScratch);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbSwScratch);
|
||||||
|
|
||||||
Status = VmgExit (Ghcb, SVM_EXIT_SNP_PAGE_STATE_CHANGE, 0, 0);
|
Status = CcExitVmgExit (Ghcb, SVM_EXIT_SNP_PAGE_STATE_CHANGE, 0, 0);
|
||||||
|
|
||||||
//
|
//
|
||||||
// The Page State Change VMGEXIT can pass the failure through the
|
// The Page State Change VMGEXIT can pass the failure through the
|
||||||
@ -251,7 +251,7 @@ InternalSetPageState (
|
|||||||
//
|
//
|
||||||
// Initialize the GHCB
|
// Initialize the GHCB
|
||||||
//
|
//
|
||||||
VmgInit (Ghcb, &InterruptState);
|
CcExitVmgInit (Ghcb, &InterruptState);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Build the page state structure
|
// Build the page state structure
|
||||||
@ -293,7 +293,7 @@ InternalSetPageState (
|
|||||||
PvalidateRange (Info, CurrentEntry, EndEntry, TRUE);
|
PvalidateRange (Info, CurrentEntry, EndEntry, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
VmgDone (Ghcb, InterruptState);
|
CcExitVmgDone (Ghcb, InterruptState);
|
||||||
|
|
||||||
BaseAddress = NextAddress;
|
BaseAddress = NextAddress;
|
||||||
}
|
}
|
||||||
|
@ -103,7 +103,7 @@ VmgExitErrorCheck (
|
|||||||
**/
|
**/
|
||||||
UINT64
|
UINT64
|
||||||
EFIAPI
|
EFIAPI
|
||||||
VmgExit (
|
CcExitVmgExit (
|
||||||
IN OUT GHCB *Ghcb,
|
IN OUT GHCB *Ghcb,
|
||||||
IN UINT64 ExitCode,
|
IN UINT64 ExitCode,
|
||||||
IN UINT64 ExitInfo1,
|
IN UINT64 ExitInfo1,
|
||||||
@ -114,9 +114,9 @@ VmgExit (
|
|||||||
Ghcb->SaveArea.SwExitInfo1 = ExitInfo1;
|
Ghcb->SaveArea.SwExitInfo1 = ExitInfo1;
|
||||||
Ghcb->SaveArea.SwExitInfo2 = ExitInfo2;
|
Ghcb->SaveArea.SwExitInfo2 = ExitInfo2;
|
||||||
|
|
||||||
VmgSetOffsetValid (Ghcb, GhcbSwExitCode);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbSwExitCode);
|
||||||
VmgSetOffsetValid (Ghcb, GhcbSwExitInfo1);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbSwExitInfo1);
|
||||||
VmgSetOffsetValid (Ghcb, GhcbSwExitInfo2);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbSwExitInfo2);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Guest memory is used for the guest-hypervisor communication, so fence
|
// Guest memory is used for the guest-hypervisor communication, so fence
|
||||||
@ -138,12 +138,12 @@ VmgExit (
|
|||||||
|
|
||||||
@param[in, out] Ghcb A pointer to the GHCB
|
@param[in, out] Ghcb A pointer to the GHCB
|
||||||
@param[in, out] InterruptState A pointer to hold the current interrupt
|
@param[in, out] InterruptState A pointer to hold the current interrupt
|
||||||
state, used for restoring in VmgDone ()
|
state, used for restoring in CcExitVmgDone ()
|
||||||
|
|
||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
VmgInit (
|
CcExitVmgInit (
|
||||||
IN OUT GHCB *Ghcb,
|
IN OUT GHCB *Ghcb,
|
||||||
IN OUT BOOLEAN *InterruptState
|
IN OUT BOOLEAN *InterruptState
|
||||||
)
|
)
|
||||||
@ -173,7 +173,7 @@ VmgInit (
|
|||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
VmgDone (
|
CcExitVmgDone (
|
||||||
IN OUT GHCB *Ghcb,
|
IN OUT GHCB *Ghcb,
|
||||||
IN BOOLEAN InterruptState
|
IN BOOLEAN InterruptState
|
||||||
)
|
)
|
||||||
@ -195,7 +195,7 @@ VmgDone (
|
|||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
VmgSetOffsetValid (
|
CcExitVmgSetOffsetValid (
|
||||||
IN OUT GHCB *Ghcb,
|
IN OUT GHCB *Ghcb,
|
||||||
IN GHCB_REGISTER Offset
|
IN GHCB_REGISTER Offset
|
||||||
)
|
)
|
||||||
@ -224,7 +224,7 @@ VmgSetOffsetValid (
|
|||||||
**/
|
**/
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
VmgIsOffsetValid (
|
CcExitVmgIsOffsetValid (
|
||||||
IN GHCB *Ghcb,
|
IN GHCB *Ghcb,
|
||||||
IN GHCB_REGISTER Offset
|
IN GHCB_REGISTER Offset
|
||||||
)
|
)
|
||||||
|
@ -611,7 +611,7 @@ UnsupportedExit (
|
|||||||
{
|
{
|
||||||
UINT64 Status;
|
UINT64 Status;
|
||||||
|
|
||||||
Status = VmgExit (Ghcb, SVM_EXIT_UNSUPPORTED, Regs->ExceptionData, 0);
|
Status = CcExitVmgExit (Ghcb, SVM_EXIT_UNSUPPORTED, Regs->ExceptionData, 0);
|
||||||
if (Status == 0) {
|
if (Status == 0) {
|
||||||
GHCB_EVENT_INJECTION Event;
|
GHCB_EVENT_INJECTION Event;
|
||||||
|
|
||||||
@ -755,8 +755,8 @@ MmioExit (
|
|||||||
CopyMem (Ghcb->SharedBuffer, &InstructionData->Ext.RegData, Bytes);
|
CopyMem (Ghcb->SharedBuffer, &InstructionData->Ext.RegData, Bytes);
|
||||||
|
|
||||||
Ghcb->SaveArea.SwScratch = (UINT64)Ghcb->SharedBuffer;
|
Ghcb->SaveArea.SwScratch = (UINT64)Ghcb->SharedBuffer;
|
||||||
VmgSetOffsetValid (Ghcb, GhcbSwScratch);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbSwScratch);
|
||||||
Status = VmgExit (Ghcb, SVM_EXIT_MMIO_WRITE, ExitInfo1, ExitInfo2);
|
Status = CcExitVmgExit (Ghcb, SVM_EXIT_MMIO_WRITE, ExitInfo1, ExitInfo2);
|
||||||
if (Status != 0) {
|
if (Status != 0) {
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
@ -807,8 +807,8 @@ MmioExit (
|
|||||||
CopyMem (Ghcb->SharedBuffer, &Regs->Rax, Bytes);
|
CopyMem (Ghcb->SharedBuffer, &Regs->Rax, Bytes);
|
||||||
|
|
||||||
Ghcb->SaveArea.SwScratch = (UINT64)Ghcb->SharedBuffer;
|
Ghcb->SaveArea.SwScratch = (UINT64)Ghcb->SharedBuffer;
|
||||||
VmgSetOffsetValid (Ghcb, GhcbSwScratch);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbSwScratch);
|
||||||
Status = VmgExit (Ghcb, SVM_EXIT_MMIO_WRITE, ExitInfo1, ExitInfo2);
|
Status = CcExitVmgExit (Ghcb, SVM_EXIT_MMIO_WRITE, ExitInfo1, ExitInfo2);
|
||||||
if (Status != 0) {
|
if (Status != 0) {
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
@ -843,8 +843,8 @@ MmioExit (
|
|||||||
CopyMem (Ghcb->SharedBuffer, InstructionData->Immediate, Bytes);
|
CopyMem (Ghcb->SharedBuffer, InstructionData->Immediate, Bytes);
|
||||||
|
|
||||||
Ghcb->SaveArea.SwScratch = (UINT64)Ghcb->SharedBuffer;
|
Ghcb->SaveArea.SwScratch = (UINT64)Ghcb->SharedBuffer;
|
||||||
VmgSetOffsetValid (Ghcb, GhcbSwScratch);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbSwScratch);
|
||||||
Status = VmgExit (Ghcb, SVM_EXIT_MMIO_WRITE, ExitInfo1, ExitInfo2);
|
Status = CcExitVmgExit (Ghcb, SVM_EXIT_MMIO_WRITE, ExitInfo1, ExitInfo2);
|
||||||
if (Status != 0) {
|
if (Status != 0) {
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
@ -882,8 +882,8 @@ MmioExit (
|
|||||||
ExitInfo2 = Bytes;
|
ExitInfo2 = Bytes;
|
||||||
|
|
||||||
Ghcb->SaveArea.SwScratch = (UINT64)Ghcb->SharedBuffer;
|
Ghcb->SaveArea.SwScratch = (UINT64)Ghcb->SharedBuffer;
|
||||||
VmgSetOffsetValid (Ghcb, GhcbSwScratch);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbSwScratch);
|
||||||
Status = VmgExit (Ghcb, SVM_EXIT_MMIO_READ, ExitInfo1, ExitInfo2);
|
Status = CcExitVmgExit (Ghcb, SVM_EXIT_MMIO_READ, ExitInfo1, ExitInfo2);
|
||||||
if (Status != 0) {
|
if (Status != 0) {
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
@ -942,8 +942,8 @@ MmioExit (
|
|||||||
ExitInfo2 = Bytes;
|
ExitInfo2 = Bytes;
|
||||||
|
|
||||||
Ghcb->SaveArea.SwScratch = (UINT64)Ghcb->SharedBuffer;
|
Ghcb->SaveArea.SwScratch = (UINT64)Ghcb->SharedBuffer;
|
||||||
VmgSetOffsetValid (Ghcb, GhcbSwScratch);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbSwScratch);
|
||||||
Status = VmgExit (Ghcb, SVM_EXIT_MMIO_READ, ExitInfo1, ExitInfo2);
|
Status = CcExitVmgExit (Ghcb, SVM_EXIT_MMIO_READ, ExitInfo1, ExitInfo2);
|
||||||
if (Status != 0) {
|
if (Status != 0) {
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
@ -979,8 +979,8 @@ MmioExit (
|
|||||||
ExitInfo2 = Bytes;
|
ExitInfo2 = Bytes;
|
||||||
|
|
||||||
Ghcb->SaveArea.SwScratch = (UINT64)Ghcb->SharedBuffer;
|
Ghcb->SaveArea.SwScratch = (UINT64)Ghcb->SharedBuffer;
|
||||||
VmgSetOffsetValid (Ghcb, GhcbSwScratch);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbSwScratch);
|
||||||
Status = VmgExit (Ghcb, SVM_EXIT_MMIO_READ, ExitInfo1, ExitInfo2);
|
Status = CcExitVmgExit (Ghcb, SVM_EXIT_MMIO_READ, ExitInfo1, ExitInfo2);
|
||||||
if (Status != 0) {
|
if (Status != 0) {
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
@ -1011,8 +1011,8 @@ MmioExit (
|
|||||||
ExitInfo2 = Bytes;
|
ExitInfo2 = Bytes;
|
||||||
|
|
||||||
Ghcb->SaveArea.SwScratch = (UINT64)Ghcb->SharedBuffer;
|
Ghcb->SaveArea.SwScratch = (UINT64)Ghcb->SharedBuffer;
|
||||||
VmgSetOffsetValid (Ghcb, GhcbSwScratch);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbSwScratch);
|
||||||
Status = VmgExit (Ghcb, SVM_EXIT_MMIO_READ, ExitInfo1, ExitInfo2);
|
Status = CcExitVmgExit (Ghcb, SVM_EXIT_MMIO_READ, ExitInfo1, ExitInfo2);
|
||||||
if (Status != 0) {
|
if (Status != 0) {
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
@ -1068,11 +1068,11 @@ MwaitExit (
|
|||||||
DecodeModRm (Regs, InstructionData);
|
DecodeModRm (Regs, InstructionData);
|
||||||
|
|
||||||
Ghcb->SaveArea.Rax = Regs->Rax;
|
Ghcb->SaveArea.Rax = Regs->Rax;
|
||||||
VmgSetOffsetValid (Ghcb, GhcbRax);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbRax);
|
||||||
Ghcb->SaveArea.Rcx = Regs->Rcx;
|
Ghcb->SaveArea.Rcx = Regs->Rcx;
|
||||||
VmgSetOffsetValid (Ghcb, GhcbRcx);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbRcx);
|
||||||
|
|
||||||
return VmgExit (Ghcb, SVM_EXIT_MWAIT, 0, 0);
|
return CcExitVmgExit (Ghcb, SVM_EXIT_MWAIT, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1100,13 +1100,13 @@ MonitorExit (
|
|||||||
DecodeModRm (Regs, InstructionData);
|
DecodeModRm (Regs, InstructionData);
|
||||||
|
|
||||||
Ghcb->SaveArea.Rax = Regs->Rax; // Identity mapped, so VA = PA
|
Ghcb->SaveArea.Rax = Regs->Rax; // Identity mapped, so VA = PA
|
||||||
VmgSetOffsetValid (Ghcb, GhcbRax);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbRax);
|
||||||
Ghcb->SaveArea.Rcx = Regs->Rcx;
|
Ghcb->SaveArea.Rcx = Regs->Rcx;
|
||||||
VmgSetOffsetValid (Ghcb, GhcbRcx);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbRcx);
|
||||||
Ghcb->SaveArea.Rdx = Regs->Rdx;
|
Ghcb->SaveArea.Rdx = Regs->Rdx;
|
||||||
VmgSetOffsetValid (Ghcb, GhcbRdx);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbRdx);
|
||||||
|
|
||||||
return VmgExit (Ghcb, SVM_EXIT_MONITOR, 0, 0);
|
return CcExitVmgExit (Ghcb, SVM_EXIT_MONITOR, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1131,7 +1131,7 @@ WbinvdExit (
|
|||||||
IN SEV_ES_INSTRUCTION_DATA *InstructionData
|
IN SEV_ES_INSTRUCTION_DATA *InstructionData
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return VmgExit (Ghcb, SVM_EXIT_WBINVD, 0, 0);
|
return CcExitVmgExit (Ghcb, SVM_EXIT_WBINVD, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1160,14 +1160,14 @@ RdtscpExit (
|
|||||||
|
|
||||||
DecodeModRm (Regs, InstructionData);
|
DecodeModRm (Regs, InstructionData);
|
||||||
|
|
||||||
Status = VmgExit (Ghcb, SVM_EXIT_RDTSCP, 0, 0);
|
Status = CcExitVmgExit (Ghcb, SVM_EXIT_RDTSCP, 0, 0);
|
||||||
if (Status != 0) {
|
if (Status != 0) {
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!VmgIsOffsetValid (Ghcb, GhcbRax) ||
|
if (!CcExitVmgIsOffsetValid (Ghcb, GhcbRax) ||
|
||||||
!VmgIsOffsetValid (Ghcb, GhcbRcx) ||
|
!CcExitVmgIsOffsetValid (Ghcb, GhcbRcx) ||
|
||||||
!VmgIsOffsetValid (Ghcb, GhcbRdx))
|
!CcExitVmgIsOffsetValid (Ghcb, GhcbRdx))
|
||||||
{
|
{
|
||||||
return UnsupportedExit (Ghcb, Regs, InstructionData);
|
return UnsupportedExit (Ghcb, Regs, InstructionData);
|
||||||
}
|
}
|
||||||
@ -1206,16 +1206,16 @@ VmmCallExit (
|
|||||||
DecodeModRm (Regs, InstructionData);
|
DecodeModRm (Regs, InstructionData);
|
||||||
|
|
||||||
Ghcb->SaveArea.Rax = Regs->Rax;
|
Ghcb->SaveArea.Rax = Regs->Rax;
|
||||||
VmgSetOffsetValid (Ghcb, GhcbRax);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbRax);
|
||||||
Ghcb->SaveArea.Cpl = (UINT8)(Regs->Cs & 0x3);
|
Ghcb->SaveArea.Cpl = (UINT8)(Regs->Cs & 0x3);
|
||||||
VmgSetOffsetValid (Ghcb, GhcbCpl);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbCpl);
|
||||||
|
|
||||||
Status = VmgExit (Ghcb, SVM_EXIT_VMMCALL, 0, 0);
|
Status = CcExitVmgExit (Ghcb, SVM_EXIT_VMMCALL, 0, 0);
|
||||||
if (Status != 0) {
|
if (Status != 0) {
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!VmgIsOffsetValid (Ghcb, GhcbRax)) {
|
if (!CcExitVmgIsOffsetValid (Ghcb, GhcbRax)) {
|
||||||
return UnsupportedExit (Ghcb, Regs, InstructionData);
|
return UnsupportedExit (Ghcb, Regs, InstructionData);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1254,28 +1254,28 @@ MsrExit (
|
|||||||
case 0x30: // WRMSR
|
case 0x30: // WRMSR
|
||||||
ExitInfo1 = 1;
|
ExitInfo1 = 1;
|
||||||
Ghcb->SaveArea.Rax = Regs->Rax;
|
Ghcb->SaveArea.Rax = Regs->Rax;
|
||||||
VmgSetOffsetValid (Ghcb, GhcbRax);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbRax);
|
||||||
Ghcb->SaveArea.Rdx = Regs->Rdx;
|
Ghcb->SaveArea.Rdx = Regs->Rdx;
|
||||||
VmgSetOffsetValid (Ghcb, GhcbRdx);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbRdx);
|
||||||
//
|
//
|
||||||
// fall through
|
// fall through
|
||||||
//
|
//
|
||||||
case 0x32: // RDMSR
|
case 0x32: // RDMSR
|
||||||
Ghcb->SaveArea.Rcx = Regs->Rcx;
|
Ghcb->SaveArea.Rcx = Regs->Rcx;
|
||||||
VmgSetOffsetValid (Ghcb, GhcbRcx);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbRcx);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return UnsupportedExit (Ghcb, Regs, InstructionData);
|
return UnsupportedExit (Ghcb, Regs, InstructionData);
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = VmgExit (Ghcb, SVM_EXIT_MSR, ExitInfo1, 0);
|
Status = CcExitVmgExit (Ghcb, SVM_EXIT_MSR, ExitInfo1, 0);
|
||||||
if (Status != 0) {
|
if (Status != 0) {
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ExitInfo1 == 0) {
|
if (ExitInfo1 == 0) {
|
||||||
if (!VmgIsOffsetValid (Ghcb, GhcbRax) ||
|
if (!CcExitVmgIsOffsetValid (Ghcb, GhcbRax) ||
|
||||||
!VmgIsOffsetValid (Ghcb, GhcbRdx))
|
!CcExitVmgIsOffsetValid (Ghcb, GhcbRdx))
|
||||||
{
|
{
|
||||||
return UnsupportedExit (Ghcb, Regs, InstructionData);
|
return UnsupportedExit (Ghcb, Regs, InstructionData);
|
||||||
}
|
}
|
||||||
@ -1471,8 +1471,8 @@ IoioExit (
|
|||||||
}
|
}
|
||||||
|
|
||||||
Ghcb->SaveArea.SwScratch = (UINT64)Ghcb->SharedBuffer;
|
Ghcb->SaveArea.SwScratch = (UINT64)Ghcb->SharedBuffer;
|
||||||
VmgSetOffsetValid (Ghcb, GhcbSwScratch);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbSwScratch);
|
||||||
Status = VmgExit (Ghcb, SVM_EXIT_IOIO_PROT, ExitInfo1, ExitInfo2);
|
Status = CcExitVmgExit (Ghcb, SVM_EXIT_IOIO_PROT, ExitInfo1, ExitInfo2);
|
||||||
if (Status != 0) {
|
if (Status != 0) {
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
@ -1495,15 +1495,15 @@ IoioExit (
|
|||||||
CopyMem (&Ghcb->SaveArea.Rax, &Regs->Rax, IOIO_DATA_BYTES (ExitInfo1));
|
CopyMem (&Ghcb->SaveArea.Rax, &Regs->Rax, IOIO_DATA_BYTES (ExitInfo1));
|
||||||
}
|
}
|
||||||
|
|
||||||
VmgSetOffsetValid (Ghcb, GhcbRax);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbRax);
|
||||||
|
|
||||||
Status = VmgExit (Ghcb, SVM_EXIT_IOIO_PROT, ExitInfo1, 0);
|
Status = CcExitVmgExit (Ghcb, SVM_EXIT_IOIO_PROT, ExitInfo1, 0);
|
||||||
if (Status != 0) {
|
if (Status != 0) {
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((ExitInfo1 & IOIO_TYPE_IN) != 0) {
|
if ((ExitInfo1 & IOIO_TYPE_IN) != 0) {
|
||||||
if (!VmgIsOffsetValid (Ghcb, GhcbRax)) {
|
if (!CcExitVmgIsOffsetValid (Ghcb, GhcbRax)) {
|
||||||
return UnsupportedExit (Ghcb, Regs, InstructionData);
|
return UnsupportedExit (Ghcb, Regs, InstructionData);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1536,7 +1536,7 @@ InvdExit (
|
|||||||
IN SEV_ES_INSTRUCTION_DATA *InstructionData
|
IN SEV_ES_INSTRUCTION_DATA *InstructionData
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return VmgExit (Ghcb, SVM_EXIT_INVD, 0, 0);
|
return CcExitVmgExit (Ghcb, SVM_EXIT_INVD, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1581,23 +1581,23 @@ GetCpuidHyp (
|
|||||||
{
|
{
|
||||||
*UnsupportedExit = FALSE;
|
*UnsupportedExit = FALSE;
|
||||||
Ghcb->SaveArea.Rax = EaxIn;
|
Ghcb->SaveArea.Rax = EaxIn;
|
||||||
VmgSetOffsetValid (Ghcb, GhcbRax);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbRax);
|
||||||
Ghcb->SaveArea.Rcx = EcxIn;
|
Ghcb->SaveArea.Rcx = EcxIn;
|
||||||
VmgSetOffsetValid (Ghcb, GhcbRcx);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbRcx);
|
||||||
if (EaxIn == CPUID_EXTENDED_STATE) {
|
if (EaxIn == CPUID_EXTENDED_STATE) {
|
||||||
Ghcb->SaveArea.XCr0 = XCr0;
|
Ghcb->SaveArea.XCr0 = XCr0;
|
||||||
VmgSetOffsetValid (Ghcb, GhcbXCr0);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbXCr0);
|
||||||
}
|
}
|
||||||
|
|
||||||
*Status = VmgExit (Ghcb, SVM_EXIT_CPUID, 0, 0);
|
*Status = CcExitVmgExit (Ghcb, SVM_EXIT_CPUID, 0, 0);
|
||||||
if (*Status != 0) {
|
if (*Status != 0) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!VmgIsOffsetValid (Ghcb, GhcbRax) ||
|
if (!CcExitVmgIsOffsetValid (Ghcb, GhcbRax) ||
|
||||||
!VmgIsOffsetValid (Ghcb, GhcbRbx) ||
|
!CcExitVmgIsOffsetValid (Ghcb, GhcbRbx) ||
|
||||||
!VmgIsOffsetValid (Ghcb, GhcbRcx) ||
|
!CcExitVmgIsOffsetValid (Ghcb, GhcbRcx) ||
|
||||||
!VmgIsOffsetValid (Ghcb, GhcbRdx))
|
!CcExitVmgIsOffsetValid (Ghcb, GhcbRdx))
|
||||||
{
|
{
|
||||||
*UnsupportedExit = TRUE;
|
*UnsupportedExit = TRUE;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -2049,15 +2049,15 @@ RdpmcExit (
|
|||||||
UINT64 Status;
|
UINT64 Status;
|
||||||
|
|
||||||
Ghcb->SaveArea.Rcx = Regs->Rcx;
|
Ghcb->SaveArea.Rcx = Regs->Rcx;
|
||||||
VmgSetOffsetValid (Ghcb, GhcbRcx);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbRcx);
|
||||||
|
|
||||||
Status = VmgExit (Ghcb, SVM_EXIT_RDPMC, 0, 0);
|
Status = CcExitVmgExit (Ghcb, SVM_EXIT_RDPMC, 0, 0);
|
||||||
if (Status != 0) {
|
if (Status != 0) {
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!VmgIsOffsetValid (Ghcb, GhcbRax) ||
|
if (!CcExitVmgIsOffsetValid (Ghcb, GhcbRax) ||
|
||||||
!VmgIsOffsetValid (Ghcb, GhcbRdx))
|
!CcExitVmgIsOffsetValid (Ghcb, GhcbRdx))
|
||||||
{
|
{
|
||||||
return UnsupportedExit (Ghcb, Regs, InstructionData);
|
return UnsupportedExit (Ghcb, Regs, InstructionData);
|
||||||
}
|
}
|
||||||
@ -2092,13 +2092,13 @@ RdtscExit (
|
|||||||
{
|
{
|
||||||
UINT64 Status;
|
UINT64 Status;
|
||||||
|
|
||||||
Status = VmgExit (Ghcb, SVM_EXIT_RDTSC, 0, 0);
|
Status = CcExitVmgExit (Ghcb, SVM_EXIT_RDTSC, 0, 0);
|
||||||
if (Status != 0) {
|
if (Status != 0) {
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!VmgIsOffsetValid (Ghcb, GhcbRax) ||
|
if (!CcExitVmgIsOffsetValid (Ghcb, GhcbRax) ||
|
||||||
!VmgIsOffsetValid (Ghcb, GhcbRdx))
|
!CcExitVmgIsOffsetValid (Ghcb, GhcbRdx))
|
||||||
{
|
{
|
||||||
return UnsupportedExit (Ghcb, Regs, InstructionData);
|
return UnsupportedExit (Ghcb, Regs, InstructionData);
|
||||||
}
|
}
|
||||||
@ -2150,9 +2150,9 @@ Dr7WriteExit (
|
|||||||
// Using a value of 0 for ExitInfo1 means RAX holds the value
|
// Using a value of 0 for ExitInfo1 means RAX holds the value
|
||||||
//
|
//
|
||||||
Ghcb->SaveArea.Rax = *Register;
|
Ghcb->SaveArea.Rax = *Register;
|
||||||
VmgSetOffsetValid (Ghcb, GhcbRax);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbRax);
|
||||||
|
|
||||||
Status = VmgExit (Ghcb, SVM_EXIT_DR7_WRITE, 0, 0);
|
Status = CcExitVmgExit (Ghcb, SVM_EXIT_DR7_WRITE, 0, 0);
|
||||||
if (Status != 0) {
|
if (Status != 0) {
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
@ -2243,7 +2243,7 @@ InternalVmgExitHandleVc (
|
|||||||
|
|
||||||
Regs = SystemContext.SystemContextX64;
|
Regs = SystemContext.SystemContextX64;
|
||||||
|
|
||||||
VmgInit (Ghcb, &InterruptState);
|
CcExitVmgInit (Ghcb, &InterruptState);
|
||||||
|
|
||||||
ExitCode = Regs->ExceptionData;
|
ExitCode = Regs->ExceptionData;
|
||||||
switch (ExitCode) {
|
switch (ExitCode) {
|
||||||
@ -2327,7 +2327,7 @@ InternalVmgExitHandleVc (
|
|||||||
VcRet = EFI_PROTOCOL_ERROR;
|
VcRet = EFI_PROTOCOL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
VmgDone (Ghcb, InterruptState);
|
CcExitVmgDone (Ghcb, InterruptState);
|
||||||
|
|
||||||
return VcRet;
|
return VcRet;
|
||||||
}
|
}
|
||||||
|
@ -464,7 +464,7 @@ MmioExit (
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
VmTdExitHandleVe (
|
CcExitHandleVe (
|
||||||
IN OUT EFI_EXCEPTION_TYPE *ExceptionType,
|
IN OUT EFI_EXCEPTION_TYPE *ExceptionType,
|
||||||
IN OUT EFI_SYSTEM_CONTEXT SystemContext
|
IN OUT EFI_SYSTEM_CONTEXT SystemContext
|
||||||
)
|
)
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
VmgExitHandleVc (
|
CcExitHandleVc (
|
||||||
IN OUT EFI_EXCEPTION_TYPE *ExceptionType,
|
IN OUT EFI_EXCEPTION_TYPE *ExceptionType,
|
||||||
IN OUT EFI_SYSTEM_CONTEXT SystemContext
|
IN OUT EFI_SYSTEM_CONTEXT SystemContext
|
||||||
)
|
)
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
VmgExitHandleVc (
|
CcExitHandleVc (
|
||||||
IN OUT EFI_EXCEPTION_TYPE *ExceptionType,
|
IN OUT EFI_EXCEPTION_TYPE *ExceptionType,
|
||||||
IN OUT EFI_SYSTEM_CONTEXT SystemContext
|
IN OUT EFI_SYSTEM_CONTEXT SystemContext
|
||||||
)
|
)
|
||||||
|
@ -50,7 +50,7 @@ AmdSevSnpInitialize (
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Query the hypervisor feature using the VmgExit and set the value in the
|
// Query the hypervisor feature using the CcExitVmgExit and set the value in the
|
||||||
// hypervisor features PCD.
|
// hypervisor features PCD.
|
||||||
//
|
//
|
||||||
HvFeatures = GetHypervisorFeature ();
|
HvFeatures = GetHypervisorFeature ();
|
||||||
@ -129,19 +129,19 @@ GetHypervisorFeature (
|
|||||||
//
|
//
|
||||||
// Initialize the GHCB
|
// Initialize the GHCB
|
||||||
//
|
//
|
||||||
VmgInit (Ghcb, &InterruptState);
|
CcExitVmgInit (Ghcb, &InterruptState);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Query the Hypervisor Features.
|
// Query the Hypervisor Features.
|
||||||
//
|
//
|
||||||
Status = VmgExit (Ghcb, SVM_EXIT_HYPERVISOR_FEATURES, 0, 0);
|
Status = CcExitVmgExit (Ghcb, SVM_EXIT_HYPERVISOR_FEATURES, 0, 0);
|
||||||
if ((Status != 0)) {
|
if ((Status != 0)) {
|
||||||
SevEsProtocolFailure (GHCB_TERMINATE_GHCB_GENERAL);
|
SevEsProtocolFailure (GHCB_TERMINATE_GHCB_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
Features = Ghcb->SaveArea.SwExitInfo2;
|
Features = Ghcb->SaveArea.SwExitInfo2;
|
||||||
|
|
||||||
VmgDone (Ghcb, InterruptState);
|
CcExitVmgDone (Ghcb, InterruptState);
|
||||||
|
|
||||||
return Features;
|
return Features;
|
||||||
}
|
}
|
||||||
|
@ -82,12 +82,12 @@ QemuFlashPtrWrite (
|
|||||||
// #VC exception. Instead, use the VMGEXIT MMIO write support directly
|
// #VC exception. Instead, use the VMGEXIT MMIO write support directly
|
||||||
// to perform the update.
|
// to perform the update.
|
||||||
//
|
//
|
||||||
VmgInit (Ghcb, &InterruptState);
|
CcExitVmgInit (Ghcb, &InterruptState);
|
||||||
Ghcb->SharedBuffer[0] = Value;
|
Ghcb->SharedBuffer[0] = Value;
|
||||||
Ghcb->SaveArea.SwScratch = (UINT64)(UINTN)Ghcb->SharedBuffer;
|
Ghcb->SaveArea.SwScratch = (UINT64)(UINTN)Ghcb->SharedBuffer;
|
||||||
VmgSetOffsetValid (Ghcb, GhcbSwScratch);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbSwScratch);
|
||||||
VmgExit (Ghcb, SVM_EXIT_MMIO_WRITE, PhysAddr, 1);
|
CcExitVmgExit (Ghcb, SVM_EXIT_MMIO_WRITE, PhysAddr, 1);
|
||||||
VmgDone (Ghcb, InterruptState);
|
CcExitVmgDone (Ghcb, InterruptState);
|
||||||
} else {
|
} else {
|
||||||
*Ptr = Value;
|
*Ptr = Value;
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
**/
|
**/
|
||||||
UINT64
|
UINT64
|
||||||
EFIAPI
|
EFIAPI
|
||||||
VmgExit (
|
CcExitVmgExit (
|
||||||
IN OUT GHCB *Ghcb,
|
IN OUT GHCB *Ghcb,
|
||||||
IN UINT64 ExitCode,
|
IN UINT64 ExitCode,
|
||||||
IN UINT64 ExitInfo1,
|
IN UINT64 ExitInfo1,
|
||||||
@ -56,12 +56,12 @@ VmgExit (
|
|||||||
|
|
||||||
@param[in, out] Ghcb A pointer to the GHCB
|
@param[in, out] Ghcb A pointer to the GHCB
|
||||||
@param[in, out] InterruptState A pointer to hold the current interrupt
|
@param[in, out] InterruptState A pointer to hold the current interrupt
|
||||||
state, used for restoring in VmgDone ()
|
state, used for restoring in CcExitVmgDone ()
|
||||||
|
|
||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
VmgInit (
|
CcExitVmgInit (
|
||||||
IN OUT GHCB *Ghcb,
|
IN OUT GHCB *Ghcb,
|
||||||
IN OUT BOOLEAN *InterruptState
|
IN OUT BOOLEAN *InterruptState
|
||||||
);
|
);
|
||||||
@ -79,7 +79,7 @@ VmgInit (
|
|||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
VmgDone (
|
CcExitVmgDone (
|
||||||
IN OUT GHCB *Ghcb,
|
IN OUT GHCB *Ghcb,
|
||||||
IN BOOLEAN InterruptState
|
IN BOOLEAN InterruptState
|
||||||
);
|
);
|
||||||
@ -96,7 +96,7 @@ VmgDone (
|
|||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
VmgSetOffsetValid (
|
CcExitVmgSetOffsetValid (
|
||||||
IN OUT GHCB *Ghcb,
|
IN OUT GHCB *Ghcb,
|
||||||
IN GHCB_REGISTER Offset
|
IN GHCB_REGISTER Offset
|
||||||
);
|
);
|
||||||
@ -116,7 +116,7 @@ VmgSetOffsetValid (
|
|||||||
**/
|
**/
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
VmgIsOffsetValid (
|
CcExitVmgIsOffsetValid (
|
||||||
IN GHCB *Ghcb,
|
IN GHCB *Ghcb,
|
||||||
IN GHCB_REGISTER Offset
|
IN GHCB_REGISTER Offset
|
||||||
);
|
);
|
||||||
@ -142,7 +142,7 @@ VmgIsOffsetValid (
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
VmgExitHandleVc (
|
CcExitHandleVc (
|
||||||
IN OUT EFI_EXCEPTION_TYPE *ExceptionType,
|
IN OUT EFI_EXCEPTION_TYPE *ExceptionType,
|
||||||
IN OUT EFI_SYSTEM_CONTEXT SystemContext
|
IN OUT EFI_SYSTEM_CONTEXT SystemContext
|
||||||
);
|
);
|
||||||
@ -168,7 +168,7 @@ VmgExitHandleVc (
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
VmTdExitHandleVe (
|
CcExitHandleVe (
|
||||||
IN OUT EFI_EXCEPTION_TYPE *ExceptionType,
|
IN OUT EFI_EXCEPTION_TYPE *ExceptionType,
|
||||||
IN OUT EFI_SYSTEM_CONTEXT SystemContext
|
IN OUT EFI_SYSTEM_CONTEXT SystemContext
|
||||||
);
|
);
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
**/
|
**/
|
||||||
UINT64
|
UINT64
|
||||||
EFIAPI
|
EFIAPI
|
||||||
VmgExit (
|
CcExitVmgExit (
|
||||||
IN OUT GHCB *Ghcb,
|
IN OUT GHCB *Ghcb,
|
||||||
IN UINT64 ExitCode,
|
IN UINT64 ExitCode,
|
||||||
IN UINT64 ExitInfo1,
|
IN UINT64 ExitInfo1,
|
||||||
@ -60,12 +60,12 @@ VmgExit (
|
|||||||
|
|
||||||
@param[in, out] Ghcb A pointer to the GHCB
|
@param[in, out] Ghcb A pointer to the GHCB
|
||||||
@param[in, out] InterruptState A pointer to hold the current interrupt
|
@param[in, out] InterruptState A pointer to hold the current interrupt
|
||||||
state, used for restoring in VmgDone ()
|
state, used for restoring in CcExitVmgDone ()
|
||||||
|
|
||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
VmgInit (
|
CcExitVmgInit (
|
||||||
IN OUT GHCB *Ghcb,
|
IN OUT GHCB *Ghcb,
|
||||||
IN OUT BOOLEAN *InterruptState
|
IN OUT BOOLEAN *InterruptState
|
||||||
)
|
)
|
||||||
@ -85,7 +85,7 @@ VmgInit (
|
|||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
VmgDone (
|
CcExitVmgDone (
|
||||||
IN OUT GHCB *Ghcb,
|
IN OUT GHCB *Ghcb,
|
||||||
IN BOOLEAN InterruptState
|
IN BOOLEAN InterruptState
|
||||||
)
|
)
|
||||||
@ -104,7 +104,7 @@ VmgDone (
|
|||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
VmgSetOffsetValid (
|
CcExitVmgSetOffsetValid (
|
||||||
IN OUT GHCB *Ghcb,
|
IN OUT GHCB *Ghcb,
|
||||||
IN GHCB_REGISTER Offset
|
IN GHCB_REGISTER Offset
|
||||||
)
|
)
|
||||||
@ -126,7 +126,7 @@ VmgSetOffsetValid (
|
|||||||
**/
|
**/
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
VmgIsOffsetValid (
|
CcExitVmgIsOffsetValid (
|
||||||
IN GHCB *Ghcb,
|
IN GHCB *Ghcb,
|
||||||
IN GHCB_REGISTER Offset
|
IN GHCB_REGISTER Offset
|
||||||
)
|
)
|
||||||
@ -155,7 +155,7 @@ VmgIsOffsetValid (
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
VmgExitHandleVc (
|
CcExitHandleVc (
|
||||||
IN OUT EFI_EXCEPTION_TYPE *ExceptionType,
|
IN OUT EFI_EXCEPTION_TYPE *ExceptionType,
|
||||||
IN OUT EFI_SYSTEM_CONTEXT SystemContext
|
IN OUT EFI_SYSTEM_CONTEXT SystemContext
|
||||||
)
|
)
|
||||||
@ -183,7 +183,7 @@ VmgExitHandleVc (
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
VmTdExitHandleVe (
|
CcExitHandleVe (
|
||||||
IN OUT EFI_EXCEPTION_TYPE *ExceptionType,
|
IN OUT EFI_EXCEPTION_TYPE *ExceptionType,
|
||||||
IN OUT EFI_SYSTEM_CONTEXT SystemContext
|
IN OUT EFI_SYSTEM_CONTEXT SystemContext
|
||||||
)
|
)
|
||||||
|
@ -40,7 +40,7 @@ CommonExceptionHandlerWorker (
|
|||||||
// On other - ExceptionType contains (possibly new) exception
|
// On other - ExceptionType contains (possibly new) exception
|
||||||
// value
|
// value
|
||||||
//
|
//
|
||||||
Status = VmgExitHandleVc (&ExceptionType, SystemContext);
|
Status = CcExitHandleVc (&ExceptionType, SystemContext);
|
||||||
if (!EFI_ERROR (Status)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -57,7 +57,7 @@ CommonExceptionHandlerWorker (
|
|||||||
// On other - ExceptionType contains (possibly new) exception
|
// On other - ExceptionType contains (possibly new) exception
|
||||||
// value
|
// value
|
||||||
//
|
//
|
||||||
Status = VmTdExitHandleVe (&ExceptionType, SystemContext);
|
Status = CcExitHandleVe (&ExceptionType, SystemContext);
|
||||||
if (!EFI_ERROR (Status)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -39,7 +39,7 @@ CommonExceptionHandler (
|
|||||||
// On other - ExceptionType contains (possibly new) exception
|
// On other - ExceptionType contains (possibly new) exception
|
||||||
// value
|
// value
|
||||||
//
|
//
|
||||||
Status = VmgExitHandleVc (&ExceptionType, SystemContext);
|
Status = CcExitHandleVc (&ExceptionType, SystemContext);
|
||||||
if (!EFI_ERROR (Status)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -57,7 +57,7 @@ CommonExceptionHandler (
|
|||||||
// On other - ExceptionType contains (possibly new) exception
|
// On other - ExceptionType contains (possibly new) exception
|
||||||
// value
|
// value
|
||||||
//
|
//
|
||||||
Status = VmTdExitHandleVe (&ExceptionType, SystemContext);
|
Status = CcExitHandleVe (&ExceptionType, SystemContext);
|
||||||
if (!EFI_ERROR (Status)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -209,7 +209,7 @@ SevEsPlaceApHlt (
|
|||||||
Msr.GhcbPhysicalAddress = AsmReadMsr64 (MSR_SEV_ES_GHCB);
|
Msr.GhcbPhysicalAddress = AsmReadMsr64 (MSR_SEV_ES_GHCB);
|
||||||
Ghcb = Msr.Ghcb;
|
Ghcb = Msr.Ghcb;
|
||||||
|
|
||||||
VmgInit (Ghcb, &InterruptState);
|
CcExitVmgInit (Ghcb, &InterruptState);
|
||||||
|
|
||||||
if (DoDecrement) {
|
if (DoDecrement) {
|
||||||
DoDecrement = FALSE;
|
DoDecrement = FALSE;
|
||||||
@ -221,13 +221,13 @@ SevEsPlaceApHlt (
|
|||||||
InterlockedDecrement ((UINT32 *)&CpuMpData->MpCpuExchangeInfo->NumApsExecuting);
|
InterlockedDecrement ((UINT32 *)&CpuMpData->MpCpuExchangeInfo->NumApsExecuting);
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = VmgExit (Ghcb, SVM_EXIT_AP_RESET_HOLD, 0, 0);
|
Status = CcExitVmgExit (Ghcb, SVM_EXIT_AP_RESET_HOLD, 0, 0);
|
||||||
if ((Status == 0) && (Ghcb->SaveArea.SwExitInfo2 != 0)) {
|
if ((Status == 0) && (Ghcb->SaveArea.SwExitInfo2 != 0)) {
|
||||||
VmgDone (Ghcb, InterruptState);
|
CcExitVmgDone (Ghcb, InterruptState);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
VmgDone (Ghcb, InterruptState);
|
CcExitVmgDone (Ghcb, InterruptState);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -222,9 +222,9 @@ GetSevEsAPMemory (
|
|||||||
Msr.GhcbPhysicalAddress = AsmReadMsr64 (MSR_SEV_ES_GHCB);
|
Msr.GhcbPhysicalAddress = AsmReadMsr64 (MSR_SEV_ES_GHCB);
|
||||||
Ghcb = Msr.Ghcb;
|
Ghcb = Msr.Ghcb;
|
||||||
|
|
||||||
VmgInit (Ghcb, &InterruptState);
|
CcExitVmgInit (Ghcb, &InterruptState);
|
||||||
VmgExit (Ghcb, SVM_EXIT_AP_JUMP_TABLE, 0, (UINT64)(UINTN)StartAddress);
|
CcExitVmgExit (Ghcb, SVM_EXIT_AP_JUMP_TABLE, 0, (UINT64)(UINTN)StartAddress);
|
||||||
VmgDone (Ghcb, InterruptState);
|
CcExitVmgDone (Ghcb, InterruptState);
|
||||||
|
|
||||||
return (UINTN)StartAddress;
|
return (UINTN)StartAddress;
|
||||||
}
|
}
|
||||||
|
@ -150,16 +150,16 @@ SevSnpCreateSaveArea (
|
|||||||
Msr.GhcbPhysicalAddress = AsmReadMsr64 (MSR_SEV_ES_GHCB);
|
Msr.GhcbPhysicalAddress = AsmReadMsr64 (MSR_SEV_ES_GHCB);
|
||||||
Ghcb = Msr.Ghcb;
|
Ghcb = Msr.Ghcb;
|
||||||
|
|
||||||
VmgInit (Ghcb, &InterruptState);
|
CcExitVmgInit (Ghcb, &InterruptState);
|
||||||
Ghcb->SaveArea.Rax = SaveArea->SevFeatures;
|
Ghcb->SaveArea.Rax = SaveArea->SevFeatures;
|
||||||
VmgSetOffsetValid (Ghcb, GhcbRax);
|
CcExitVmgSetOffsetValid (Ghcb, GhcbRax);
|
||||||
VmgExitStatus = VmgExit (
|
VmgExitStatus = CcExitVmgExit (
|
||||||
Ghcb,
|
Ghcb,
|
||||||
SVM_EXIT_SNP_AP_CREATION,
|
SVM_EXIT_SNP_AP_CREATION,
|
||||||
ExitInfo1,
|
ExitInfo1,
|
||||||
ExitInfo2
|
ExitInfo2
|
||||||
);
|
);
|
||||||
VmgDone (Ghcb, InterruptState);
|
CcExitVmgDone (Ghcb, InterruptState);
|
||||||
|
|
||||||
ASSERT (VmgExitStatus == 0);
|
ASSERT (VmgExitStatus == 0);
|
||||||
if (VmgExitStatus != 0) {
|
if (VmgExitStatus != 0) {
|
||||||
|
Reference in New Issue
Block a user