mirror of https://github.com/acidanthera/audk.git
OvmfPkg/QemuFwCfgLib: Implement SEV internal functions for PEI phase
Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Brijesh Singh <brijesh.singh@amd.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:
parent
6264abc29e
commit
5feae25392
|
@ -4,6 +4,7 @@
|
|||
|
||||
Copyright (C) 2013, Red Hat, Inc.
|
||||
Copyright (c) 2011 - 2013, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2017, Advanced Micro Devices. All rights reserved.<BR>
|
||||
|
||||
This program and the accompanying materials are licensed and made available
|
||||
under the terms and conditions of the BSD License which accompanies this
|
||||
|
@ -14,8 +15,10 @@
|
|||
WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
**/
|
||||
|
||||
#include <Library/BaseLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/QemuFwCfgLib.h>
|
||||
#include <Library/MemEncryptSevLib.h>
|
||||
|
||||
#include "QemuFwCfgLibInternal.h"
|
||||
|
||||
|
@ -76,8 +79,18 @@ QemuFwCfgInitialize (
|
|||
if ((Revision & FW_CFG_F_DMA) == 0) {
|
||||
DEBUG ((DEBUG_INFO, "QemuFwCfg interface (IO Port) is supported.\n"));
|
||||
} else {
|
||||
mQemuFwCfgDmaSupported = TRUE;
|
||||
DEBUG ((DEBUG_INFO, "QemuFwCfg interface (DMA) is supported.\n"));
|
||||
//
|
||||
// If SEV is enabled then we do not support DMA operations in PEI phase.
|
||||
// This is mainly because DMA in SEV guest requires using bounce buffer
|
||||
// (which need to allocate dynamic memory and allocating a PAGE size'd
|
||||
// buffer can be challenge in PEI phase)
|
||||
//
|
||||
if (InternalQemuFwCfgSevIsEnabled ()) {
|
||||
DEBUG ((DEBUG_INFO, "SEV: QemuFwCfg fallback to IO Port interface.\n"));
|
||||
} else {
|
||||
mQemuFwCfgDmaSupported = TRUE;
|
||||
DEBUG ((DEBUG_INFO, "QemuFwCfg interface (DMA) is supported.\n"));
|
||||
}
|
||||
}
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
|
@ -114,3 +127,58 @@ InternalQemuFwCfgDmaIsAvailable (
|
|||
{
|
||||
return mQemuFwCfgDmaSupported;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Returns a boolean indicating whether SEV is enabled
|
||||
|
||||
@retval TRUE SEV is enabled
|
||||
@retval FALSE SEV is disabled
|
||||
**/
|
||||
BOOLEAN
|
||||
InternalQemuFwCfgSevIsEnabled (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
return MemEncryptSevIsEnabled ();
|
||||
}
|
||||
|
||||
/**
|
||||
Allocate a bounce buffer for SEV DMA.
|
||||
|
||||
@param[in] NumPage Number of pages.
|
||||
@param[out] Buffer Allocated DMA Buffer pointer
|
||||
|
||||
**/
|
||||
VOID
|
||||
InternalQemuFwCfgSevDmaAllocateBuffer (
|
||||
OUT VOID **Buffer,
|
||||
IN UINT32 NumPages
|
||||
)
|
||||
{
|
||||
//
|
||||
// We should never reach here
|
||||
//
|
||||
ASSERT (FALSE);
|
||||
CpuDeadLoop ();
|
||||
}
|
||||
|
||||
/**
|
||||
Free the DMA buffer allocated using InternalQemuFwCfgSevDmaAllocateBuffer
|
||||
|
||||
@param[in] NumPage Number of pages.
|
||||
@param[in] Buffer DMA Buffer pointer
|
||||
|
||||
**/
|
||||
VOID
|
||||
InternalQemuFwCfgSevDmaFreeBuffer (
|
||||
IN VOID *Buffer,
|
||||
IN UINT32 NumPages
|
||||
)
|
||||
{
|
||||
//
|
||||
// We should never reach here
|
||||
//
|
||||
ASSERT (FALSE);
|
||||
CpuDeadLoop ();
|
||||
}
|
||||
|
|
|
@ -47,4 +47,5 @@
|
|||
DebugLib
|
||||
IoLib
|
||||
MemoryAllocationLib
|
||||
MemEncryptSevLib
|
||||
|
||||
|
|
Loading…
Reference in New Issue