mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2025-01-23 21:11:32 +01:00
141 lines
2.8 KiB
C
141 lines
2.8 KiB
C
|
/** @file
|
||
|
|
||
|
Copyright (c) 2011-2012, ARM Limited. All rights reserved.
|
||
|
|
||
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||
|
|
||
|
**/
|
||
|
|
||
|
#include <Library/ArmLib.h>
|
||
|
#include <Library/ArmPlatformLib.h>
|
||
|
|
||
|
#include <Ppi/ArmMpCoreInfo.h>
|
||
|
|
||
|
ARM_CORE_INFO mArmPlatformNullMpCoreInfoTable[] = {
|
||
|
{
|
||
|
// Cluster 0, Core 0
|
||
|
0x0,
|
||
|
|
||
|
// MP Core MailBox Set/Get/Clear Addresses and Clear Value
|
||
|
(EFI_PHYSICAL_ADDRESS)0,
|
||
|
(EFI_PHYSICAL_ADDRESS)0,
|
||
|
(EFI_PHYSICAL_ADDRESS)0,
|
||
|
(UINT64)0xFFFFFFFF
|
||
|
},
|
||
|
{
|
||
|
// Cluster 0, Core 1
|
||
|
0x1,
|
||
|
|
||
|
// MP Core MailBox Set/Get/Clear Addresses and Clear Value
|
||
|
(EFI_PHYSICAL_ADDRESS)0,
|
||
|
(EFI_PHYSICAL_ADDRESS)0,
|
||
|
(EFI_PHYSICAL_ADDRESS)0,
|
||
|
(UINT64)0xFFFFFFFF
|
||
|
},
|
||
|
{
|
||
|
// Cluster 0, Core 2
|
||
|
0x2,
|
||
|
|
||
|
// MP Core MailBox Set/Get/Clear Addresses and Clear Value
|
||
|
(EFI_PHYSICAL_ADDRESS)0,
|
||
|
(EFI_PHYSICAL_ADDRESS)0,
|
||
|
(EFI_PHYSICAL_ADDRESS)0,
|
||
|
(UINT64)0xFFFFFFFF
|
||
|
},
|
||
|
{
|
||
|
// Cluster 0, Core 3
|
||
|
0x3,
|
||
|
|
||
|
// MP Core MailBox Set/Get/Clear Addresses and Clear Value
|
||
|
(EFI_PHYSICAL_ADDRESS)0,
|
||
|
(EFI_PHYSICAL_ADDRESS)0,
|
||
|
(EFI_PHYSICAL_ADDRESS)0,
|
||
|
(UINT64)0xFFFFFFFF
|
||
|
}
|
||
|
};
|
||
|
|
||
|
// This function should be better located into TimerLib implementation
|
||
|
RETURN_STATUS
|
||
|
EFIAPI
|
||
|
TimerConstructor (
|
||
|
VOID
|
||
|
)
|
||
|
{
|
||
|
return EFI_SUCCESS;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
Return the current Boot Mode
|
||
|
|
||
|
This function returns the boot reason on the platform
|
||
|
|
||
|
**/
|
||
|
EFI_BOOT_MODE
|
||
|
ArmPlatformGetBootMode (
|
||
|
VOID
|
||
|
)
|
||
|
{
|
||
|
return BOOT_WITH_FULL_CONFIGURATION;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
Initialize controllers that must setup in the normal world
|
||
|
|
||
|
This function is called by the ArmPlatformPkg/PrePi or ArmPlatformPkg/PlatformPei
|
||
|
in the PEI phase.
|
||
|
|
||
|
**/
|
||
|
RETURN_STATUS
|
||
|
ArmPlatformInitialize (
|
||
|
IN UINTN MpId
|
||
|
)
|
||
|
{
|
||
|
if (!ArmPlatformIsPrimaryCore (MpId)) {
|
||
|
return RETURN_SUCCESS;
|
||
|
}
|
||
|
|
||
|
// TODO: Implement me
|
||
|
|
||
|
return RETURN_SUCCESS;
|
||
|
}
|
||
|
|
||
|
EFI_STATUS
|
||
|
PrePeiCoreGetMpCoreInfo (
|
||
|
OUT UINTN *CoreCount,
|
||
|
OUT ARM_CORE_INFO **ArmCoreTable
|
||
|
)
|
||
|
{
|
||
|
if (ArmIsMpCore ()) {
|
||
|
*CoreCount = sizeof (mArmPlatformNullMpCoreInfoTable) / sizeof (ARM_CORE_INFO);
|
||
|
*ArmCoreTable = mArmPlatformNullMpCoreInfoTable;
|
||
|
return EFI_SUCCESS;
|
||
|
} else {
|
||
|
return EFI_UNSUPPORTED;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
ARM_MP_CORE_INFO_PPI mMpCoreInfoPpi = { PrePeiCoreGetMpCoreInfo };
|
||
|
|
||
|
EFI_PEI_PPI_DESCRIPTOR gPlatformPpiTable[] = {
|
||
|
{
|
||
|
EFI_PEI_PPI_DESCRIPTOR_PPI,
|
||
|
&gArmMpCoreInfoPpiGuid,
|
||
|
&mMpCoreInfoPpi
|
||
|
}
|
||
|
};
|
||
|
|
||
|
VOID
|
||
|
ArmPlatformGetPlatformPpiList (
|
||
|
OUT UINTN *PpiListSize,
|
||
|
OUT EFI_PEI_PPI_DESCRIPTOR **PpiList
|
||
|
)
|
||
|
{
|
||
|
if (ArmIsMpCore ()) {
|
||
|
*PpiListSize = sizeof (gPlatformPpiTable);
|
||
|
*PpiList = gPlatformPpiTable;
|
||
|
} else {
|
||
|
*PpiListSize = 0;
|
||
|
*PpiList = NULL;
|
||
|
}
|
||
|
}
|