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) 2013, Red Hat, Inc.
|
||||||
Copyright (c) 2011 - 2013, Intel Corporation. All rights reserved.<BR>
|
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
|
This program and the accompanying materials are licensed and made available
|
||||||
under the terms and conditions of the BSD License which accompanies this
|
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.
|
WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||||
**/
|
**/
|
||||||
|
|
||||||
|
#include <Library/BaseLib.h>
|
||||||
#include <Library/DebugLib.h>
|
#include <Library/DebugLib.h>
|
||||||
#include <Library/QemuFwCfgLib.h>
|
#include <Library/QemuFwCfgLib.h>
|
||||||
|
#include <Library/MemEncryptSevLib.h>
|
||||||
|
|
||||||
#include "QemuFwCfgLibInternal.h"
|
#include "QemuFwCfgLibInternal.h"
|
||||||
|
|
||||||
@ -75,10 +78,20 @@ QemuFwCfgInitialize (
|
|||||||
|
|
||||||
if ((Revision & FW_CFG_F_DMA) == 0) {
|
if ((Revision & FW_CFG_F_DMA) == 0) {
|
||||||
DEBUG ((DEBUG_INFO, "QemuFwCfg interface (IO Port) is supported.\n"));
|
DEBUG ((DEBUG_INFO, "QemuFwCfg interface (IO Port) is supported.\n"));
|
||||||
|
} else {
|
||||||
|
//
|
||||||
|
// 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 {
|
} else {
|
||||||
mQemuFwCfgDmaSupported = TRUE;
|
mQemuFwCfgDmaSupported = TRUE;
|
||||||
DEBUG ((DEBUG_INFO, "QemuFwCfg interface (DMA) is supported.\n"));
|
DEBUG ((DEBUG_INFO, "QemuFwCfg interface (DMA) is supported.\n"));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return RETURN_SUCCESS;
|
return RETURN_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -114,3 +127,58 @@ InternalQemuFwCfgDmaIsAvailable (
|
|||||||
{
|
{
|
||||||
return mQemuFwCfgDmaSupported;
|
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
|
DebugLib
|
||||||
IoLib
|
IoLib
|
||||||
MemoryAllocationLib
|
MemoryAllocationLib
|
||||||
|
MemEncryptSevLib
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user