/** @file
Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include
#include
#include
#include
#include
/**
This board service detects the board type.
@retval EFI_SUCCESS The board was detected successfully.
@retval EFI_NOT_FOUND The board could not be detected.
**/
EFI_STATUS
EFIAPI
BoardDetect (
VOID
)
{
BOARD_DETECT_FUNC *BoardDetectFunc;
UINTN Index;
EFI_STATUS Status;
for (Index = 0; ; Index++) {
Status = PeiServicesLocatePpi(
&gBoardDetectGuid,
Index,
NULL,
(VOID **)&BoardDetectFunc
);
if (EFI_ERROR(Status)) {
break;
}
if (BoardDetectFunc->BoardDetect != NULL) {
BoardDetectFunc->BoardDetect ();
}
}
return EFI_SUCCESS;
}
/**
This board service initializes board-specific debug devices.
@retval EFI_SUCCESS Board-specific debug initialization was successful.
@retval EFI_NOT_READY The board has not been detected yet.
**/
EFI_STATUS
EFIAPI
BoardDebugInit (
VOID
)
{
BOARD_PRE_MEM_INIT_FUNC *BoardPreMemInit;
EFI_STATUS Status;
Status = PeiServicesLocatePpi(
&gBoardPreMemInitGuid,
0,
NULL,
(VOID **)&BoardPreMemInit
);
if (!EFI_ERROR(Status)) {
if (BoardPreMemInit->BoardDebugInit != NULL) {
return BoardPreMemInit->BoardDebugInit ();
}
}
return EFI_SUCCESS;
}
/**
This board service detects the boot mode.
@retval EFI_BOOT_MODE The boot mode.
@retval EFI_NOT_READY The board has not been detected yet.
**/
EFI_BOOT_MODE
EFIAPI
BoardBootModeDetect (
VOID
)
{
BOARD_PRE_MEM_INIT_FUNC *BoardPreMemInit;
EFI_STATUS Status;
Status = PeiServicesLocatePpi(
&gBoardPreMemInitGuid,
0,
NULL,
(VOID **)&BoardPreMemInit
);
if (!EFI_ERROR(Status)) {
if (BoardPreMemInit->BoardBootModeDetect != NULL) {
return BoardPreMemInit->BoardBootModeDetect ();
}
}
return BOOT_WITH_FULL_CONFIGURATION;
}
/**
A hook for board-specific initialization prior to memory initialization.
@retval EFI_SUCCESS The board initialization was successful.
@retval EFI_NOT_READY The board has not been detected yet.
**/
EFI_STATUS
EFIAPI
BoardInitBeforeMemoryInit (
VOID
)
{
BOARD_PRE_MEM_INIT_FUNC *BoardPreMemInit;
EFI_STATUS Status;
Status = PeiServicesLocatePpi(
&gBoardPreMemInitGuid,
0,
NULL,
(VOID **)&BoardPreMemInit
);
if (!EFI_ERROR(Status)) {
if (BoardPreMemInit->BoardInitBeforeMemoryInit != NULL) {
return BoardPreMemInit->BoardInitBeforeMemoryInit ();
}
}
return EFI_SUCCESS;
}
/**
A hook for board-specific initialization after memory initialization.
@retval EFI_SUCCESS The board initialization was successful.
@retval EFI_NOT_READY The board has not been detected yet.
**/
EFI_STATUS
EFIAPI
BoardInitAfterMemoryInit (
VOID
)
{
BOARD_PRE_MEM_INIT_FUNC *BoardPreMemInit;
EFI_STATUS Status;
Status = PeiServicesLocatePpi(
&gBoardPreMemInitGuid,
0,
NULL,
(VOID **)&BoardPreMemInit
);
if (!EFI_ERROR(Status)) {
if (BoardPreMemInit->BoardInitAfterMemoryInit != NULL) {
return BoardPreMemInit->BoardInitAfterMemoryInit ();
}
}
return EFI_SUCCESS;
}
/**
A hook for board-specific initialization prior to disabling temporary RAM.
@retval EFI_SUCCESS The board initialization was successful.
@retval EFI_NOT_READY The board has not been detected yet.
**/
EFI_STATUS
EFIAPI
BoardInitBeforeTempRamExit (
VOID
)
{
BOARD_PRE_MEM_INIT_FUNC *BoardPreMemInit;
EFI_STATUS Status;
Status = PeiServicesLocatePpi(
&gBoardPreMemInitGuid,
0,
NULL,
(VOID **)&BoardPreMemInit
);
if (!EFI_ERROR(Status)) {
if (BoardPreMemInit->BoardInitBeforeTempRamExit != NULL) {
return BoardPreMemInit->BoardInitBeforeTempRamExit ();
}
}
return EFI_SUCCESS;
}
/**
A hook for board-specific initialization after disabling temporary RAM.
@retval EFI_SUCCESS The board initialization was successful.
@retval EFI_NOT_READY The board has not been detected yet.
**/
EFI_STATUS
EFIAPI
BoardInitAfterTempRamExit (
VOID
)
{
BOARD_PRE_MEM_INIT_FUNC *BoardPreMemInit;
EFI_STATUS Status;
Status = PeiServicesLocatePpi(
&gBoardPreMemInitGuid,
0,
NULL,
(VOID **)&BoardPreMemInit
);
if (!EFI_ERROR(Status)) {
if (BoardPreMemInit->BoardInitAfterTempRamExit != NULL) {
return BoardPreMemInit->BoardInitAfterTempRamExit ();
}
}
return EFI_SUCCESS;
}
/**
A hook for board-specific initialization prior to silicon initialization.
@retval EFI_SUCCESS The board initialization was successful.
@retval EFI_NOT_READY The board has not been detected yet.
**/
EFI_STATUS
EFIAPI
BoardInitBeforeSiliconInit (
VOID
)
{
BOARD_POST_MEM_INIT_FUNC *BoardPostMemInit;
EFI_STATUS Status;
Status = PeiServicesLocatePpi(
&gBoardPostMemInitGuid,
0,
NULL,
(VOID **)&BoardPostMemInit
);
if (!EFI_ERROR(Status)) {
if (BoardPostMemInit->BoardInitBeforeSiliconInit != NULL) {
return BoardPostMemInit->BoardInitBeforeSiliconInit ();
}
}
return EFI_SUCCESS;
}
/**
A hook for board-specific initialization after silicon initialization.
@retval EFI_SUCCESS The board initialization was successful.
@retval EFI_NOT_READY The board has not been detected yet.
**/
EFI_STATUS
EFIAPI
BoardInitAfterSiliconInit (
VOID
)
{
BOARD_POST_MEM_INIT_FUNC *BoardPostMemInit;
EFI_STATUS Status;
Status = PeiServicesLocatePpi(
&gBoardPostMemInitGuid,
0,
NULL,
(VOID **)&BoardPostMemInit
);
if (!EFI_ERROR(Status)) {
if (BoardPostMemInit->BoardInitAfterSiliconInit != NULL) {
return BoardPostMemInit->BoardInitAfterSiliconInit ();
}
}
return EFI_SUCCESS;
}