mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-12-01 12:53:27 +01:00
282 lines
6.4 KiB
C
282 lines
6.4 KiB
C
/** @file
|
|
PlatformInitLib header file.
|
|
|
|
Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
**/
|
|
|
|
#ifndef PLATFORM_INIT_LIB_H_
|
|
#define PLATFORM_INIT_LIB_H_
|
|
|
|
#include <PiPei.h>
|
|
|
|
#pragma pack(1)
|
|
typedef struct {
|
|
EFI_HOB_GUID_TYPE GuidHeader;
|
|
UINT16 HostBridgeDevId;
|
|
|
|
UINT64 PcdConfidentialComputingGuestAttr;
|
|
BOOLEAN SevEsIsEnabled;
|
|
|
|
UINT32 BootMode;
|
|
BOOLEAN S3Supported;
|
|
|
|
BOOLEAN SmmSmramRequire;
|
|
BOOLEAN Q35SmramAtDefaultSmbase;
|
|
UINT16 Q35TsegMbytes;
|
|
|
|
UINT32 LowMemory;
|
|
UINT64 FirstNonAddress;
|
|
UINT8 PhysMemAddressWidth;
|
|
UINT32 Uc32Base;
|
|
UINT32 Uc32Size;
|
|
|
|
BOOLEAN PcdSetNxForStack;
|
|
UINT64 PcdTdxSharedBitMask;
|
|
|
|
UINT64 PcdPciMmio64Base;
|
|
UINT64 PcdPciMmio64Size;
|
|
UINT32 PcdPciMmio32Base;
|
|
UINT32 PcdPciMmio32Size;
|
|
UINT64 PcdPciIoBase;
|
|
UINT64 PcdPciIoSize;
|
|
|
|
UINT64 PcdEmuVariableNvStoreReserved;
|
|
UINT32 PcdCpuBootLogicalProcessorNumber;
|
|
UINT32 PcdCpuMaxLogicalProcessorNumber;
|
|
UINT32 DefaultMaxCpuNumber;
|
|
|
|
UINT32 S3AcpiReservedMemoryBase;
|
|
UINT32 S3AcpiReservedMemorySize;
|
|
|
|
UINT64 FeatureControlValue;
|
|
|
|
BOOLEAN QemuFwCfgChecked;
|
|
BOOLEAN QemuFwCfgSupported;
|
|
BOOLEAN QemuFwCfgDmaSupported;
|
|
|
|
UINT64 PteMemoryEncryptionAddressOrMask;
|
|
UINT64 GhcbBase;
|
|
} EFI_HOB_PLATFORM_INFO;
|
|
#pragma pack()
|
|
|
|
/**
|
|
Reads 8-bits of CMOS data.
|
|
|
|
Reads the 8-bits of CMOS data at the location specified by Index.
|
|
The 8-bit read value is returned.
|
|
|
|
@param Index The CMOS location to read.
|
|
|
|
@return The value read.
|
|
|
|
**/
|
|
UINT8
|
|
EFIAPI
|
|
PlatformCmosRead8 (
|
|
IN UINTN Index
|
|
);
|
|
|
|
/**
|
|
Writes 8-bits of CMOS data.
|
|
|
|
Writes 8-bits of CMOS data to the location specified by Index
|
|
with the value specified by Value and returns Value.
|
|
|
|
@param Index The CMOS location to write.
|
|
@param Value The value to write to CMOS.
|
|
|
|
@return The value written to CMOS.
|
|
|
|
**/
|
|
UINT8
|
|
EFIAPI
|
|
PlatformCmosWrite8 (
|
|
IN UINTN Index,
|
|
IN UINT8 Value
|
|
);
|
|
|
|
/**
|
|
Dump the CMOS content
|
|
*/
|
|
VOID
|
|
EFIAPI
|
|
PlatformDebugDumpCmos (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
EFIAPI
|
|
PlatformAddIoMemoryBaseSizeHob (
|
|
IN EFI_PHYSICAL_ADDRESS MemoryBase,
|
|
IN UINT64 MemorySize
|
|
);
|
|
|
|
VOID
|
|
EFIAPI
|
|
PlatformAddIoMemoryRangeHob (
|
|
IN EFI_PHYSICAL_ADDRESS MemoryBase,
|
|
IN EFI_PHYSICAL_ADDRESS MemoryLimit
|
|
);
|
|
|
|
VOID
|
|
EFIAPI
|
|
PlatformAddMemoryBaseSizeHob (
|
|
IN EFI_PHYSICAL_ADDRESS MemoryBase,
|
|
IN UINT64 MemorySize
|
|
);
|
|
|
|
VOID
|
|
EFIAPI
|
|
PlatformAddMemoryRangeHob (
|
|
IN EFI_PHYSICAL_ADDRESS MemoryBase,
|
|
IN EFI_PHYSICAL_ADDRESS MemoryLimit
|
|
);
|
|
|
|
VOID
|
|
EFIAPI
|
|
PlatformAddReservedMemoryBaseSizeHob (
|
|
IN EFI_PHYSICAL_ADDRESS MemoryBase,
|
|
IN UINT64 MemorySize,
|
|
IN BOOLEAN Cacheable
|
|
);
|
|
|
|
VOID
|
|
EFIAPI
|
|
PlatformQemuUc32BaseInitialization (
|
|
IN OUT EFI_HOB_PLATFORM_INFO *PlatformInfoHob
|
|
);
|
|
|
|
VOID
|
|
EFIAPI
|
|
PlatformGetSystemMemorySizeBelow4gb (
|
|
IN EFI_HOB_PLATFORM_INFO *PlatformInfoHob
|
|
);
|
|
|
|
/**
|
|
Initialize the PhysMemAddressWidth field in PlatformInfoHob based on guest RAM size.
|
|
**/
|
|
VOID
|
|
EFIAPI
|
|
PlatformAddressWidthInitialization (
|
|
IN OUT EFI_HOB_PLATFORM_INFO *PlatformInfoHob
|
|
);
|
|
|
|
/**
|
|
Peform Memory Detection for QEMU / KVM
|
|
|
|
**/
|
|
VOID
|
|
EFIAPI
|
|
PlatformQemuInitializeRam (
|
|
IN EFI_HOB_PLATFORM_INFO *PlatformInfoHob
|
|
);
|
|
|
|
VOID
|
|
EFIAPI
|
|
PlatformQemuInitializeRamForS3 (
|
|
IN EFI_HOB_PLATFORM_INFO *PlatformInfoHob
|
|
);
|
|
|
|
VOID
|
|
EFIAPI
|
|
PlatformMemMapInitialization (
|
|
IN OUT EFI_HOB_PLATFORM_INFO *PlatformInfoHob
|
|
);
|
|
|
|
/**
|
|
* Fetch "opt/ovmf/PcdSetNxForStack" from QEMU
|
|
*
|
|
* @param Setting The pointer to the setting of "/opt/ovmf/PcdSetNxForStack".
|
|
* @return EFI_SUCCESS Successfully fetch the settings.
|
|
*/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
PlatformNoexecDxeInitialization (
|
|
IN OUT EFI_HOB_PLATFORM_INFO *PlatformInfoHob
|
|
);
|
|
|
|
VOID
|
|
EFIAPI
|
|
PlatformMiscInitialization (
|
|
IN EFI_HOB_PLATFORM_INFO *PlatformInfoHob
|
|
);
|
|
|
|
/**
|
|
Fetch the boot CPU count and the possible CPU count from QEMU, and expose
|
|
them to UefiCpuPkg modules.
|
|
**/
|
|
VOID
|
|
EFIAPI
|
|
PlatformMaxCpuCountInitialization (
|
|
IN OUT EFI_HOB_PLATFORM_INFO *PlatformInfoHob
|
|
);
|
|
|
|
/**
|
|
In Tdx guest, the system memory is passed in TdHob by host VMM. So
|
|
the major task of PlatformTdxPublishRamRegions is to walk thru the
|
|
TdHob list and transfer the ResourceDescriptorHob and MemoryAllocationHob
|
|
to the hobs in DXE phase.
|
|
|
|
MemoryAllocationHob should also be created for Mailbox and Ovmf work area.
|
|
**/
|
|
VOID
|
|
EFIAPI
|
|
PlatformTdxPublishRamRegions (
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
Check the integrity of NvVarStore.
|
|
|
|
@param[in] NvVarStoreBase - A pointer to NvVarStore header
|
|
@param[in] NvVarStoreSize - NvVarStore size
|
|
|
|
@retval TRUE - The NvVarStore is valid.
|
|
@retval FALSE - The NvVarStore is invalid.
|
|
|
|
**/
|
|
BOOLEAN
|
|
EFIAPI
|
|
PlatformValidateNvVarStore (
|
|
IN UINT8 *NvVarStoreBase,
|
|
IN UINT32 NvVarStoreSize
|
|
);
|
|
|
|
/**
|
|
Allocate storage for NV variables early on so it will be
|
|
at a consistent address. Since VM memory is preserved
|
|
across reboots, this allows the NV variable storage to survive
|
|
a VM reboot.
|
|
|
|
*
|
|
* @retval VOID* The pointer to the storage for NV Variables
|
|
*/
|
|
VOID *
|
|
EFIAPI
|
|
PlatformReserveEmuVariableNvStore (
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
When OVMF is lauched with -bios parameter, UEFI variables will be
|
|
partially emulated, and non-volatile variables may lose their contents
|
|
after a reboot. This makes the secure boot feature not working.
|
|
|
|
This function is used to initialize the EmuVariableNvStore
|
|
with the conent in PcdOvmfFlashNvStorageVariableBase.
|
|
|
|
@param[in] EmuVariableNvStore - A pointer to EmuVariableNvStore
|
|
|
|
@retval EFI_SUCCESS - Successfully init the EmuVariableNvStore
|
|
@retval Others - As the error code indicates
|
|
*/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
PlatformInitEmuVariableNvStore (
|
|
IN VOID *EmuVariableNvStore
|
|
);
|
|
|
|
#endif // PLATFORM_INIT_LIB_H_
|