mirror of https://github.com/acidanthera/audk.git
55 lines
1.3 KiB
C
55 lines
1.3 KiB
C
/** @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;
|
|
}
|