/** @file
This file contains GpioMemLib implementation for PEI phase
Copyright (c) 2019 Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include
#include
#include
#include
STATIC CONST EFI_GUID mGpioNamesPrivateHobGuid = {0x9AE3138D, 0x4EBF, 0x4E90, {0x87, 0x96, 0x11, 0xD3, 0x10, 0x04, 0x60, 0x0A}};
STATIC volatile BOOLEAN mGlobalMemoryWorking = FALSE;
STATIC CHAR8 mGpioNameBuffer[GPIO_NAME_LENGTH_MAX];
/**
Returns pointer to the buffer taken from GpioLib private HOB
@retval CHAR8* Pointer to the buffer
**/
STATIC
CHAR8*
GetBufferFromHob (
VOID
)
{
VOID *Hob;
CHAR8 *GpioNameBuffer;
Hob = NULL;
GpioNameBuffer = NULL;
Hob = GetFirstGuidHob (&mGpioNamesPrivateHobGuid);
if (Hob != NULL){
GpioNameBuffer = (CHAR8*) GET_GUID_HOB_DATA (Hob);
} else {
GpioNameBuffer = (CHAR8*) BuildGuidHob (&mGpioNamesPrivateHobGuid, GPIO_NAME_LENGTH_MAX);
if (GpioNameBuffer == NULL){
DEBUG ((DEBUG_ERROR, "Failed to setup HOB for GPIO names lib\n"));
ASSERT (FALSE);
}
}
return GpioNameBuffer;
}
/**
Returns pointer to the global buffer to be used by GpioNamesLib
@retval CHAR8* Pointer to the buffer
**/
CHAR8*
GpioGetStaticNameBuffer (
VOID
)
{
mGlobalMemoryWorking = TRUE;
if (mGlobalMemoryWorking) {
return mGpioNameBuffer;
} else {
return GetBufferFromHob ();
}
}