/** @file
|
*
|
* Copyright (c) 2017, Linaro, Ltd. All rights reserved.
|
*
|
* SPDX-License-Identifier: BSD-2-Clause-Patent
|
*
|
**/
|
|
#include <PiDxe.h>
|
|
#include <Library/BaseLib.h>
|
#include <Library/DxeServicesLib.h>
|
#include <Library/MemoryAllocationLib.h>
|
|
/**
|
Return a pool allocated copy of the DTB image that is appropriate for
|
booting the current platform via DT.
|
|
@param[out] Dtb Pointer to the DTB copy
|
@param[out] DtbSize Size of the DTB copy
|
|
@retval EFI_SUCCESS Operation completed successfully
|
@retval EFI_NOT_FOUND No suitable DTB image could be located
|
@retval EFI_OUT_OF_RESOURCES No pool memory available
|
|
**/
|
EFI_STATUS
|
EFIAPI
|
DtPlatformLoadDtb (
|
OUT VOID **Dtb,
|
OUT UINTN *DtbSize
|
)
|
{
|
EFI_STATUS Status;
|
VOID *OrigDtb;
|
VOID *CopyDtb;
|
UINTN OrigDtbSize;
|
|
Status = GetSectionFromAnyFv (&gDtPlatformDefaultDtbFileGuid,
|
EFI_SECTION_RAW, 0, &OrigDtb, &OrigDtbSize);
|
if (EFI_ERROR (Status)) {
|
return EFI_NOT_FOUND;
|
}
|
|
CopyDtb = AllocateCopyPool (OrigDtbSize, OrigDtb);
|
if (CopyDtb == NULL) {
|
return EFI_OUT_OF_RESOURCES;
|
}
|
|
*Dtb = CopyDtb;
|
*DtbSize = OrigDtbSize;
|
|
return EFI_SUCCESS;
|
}
|