/** @file This file contains GPIO name library implementation Copyright (c) 2019 Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include "GpioLibrary.h" #include /** Generates GPIO group name from GpioPad @param[in] GpioPad GpioPad @retval CHAR8* Pointer to the GPIO group name **/ CONST CHAR8* GpioGetGroupName ( IN UINT32 GroupIndex ) { CONST GPIO_GROUP_NAME_INFO* GroupNameInfo; GroupNameInfo = GpioGetGroupNameInfo (GroupIndex); if (GroupNameInfo == NULL) { return NULL; } else { return GroupNameInfo->GpioGroupPrefix; } } /** Generates GPIO name from GpioPad @param[in] GpioPad GpioPad @param[out] GpioNameBuffer Caller allocated buffer of GPIO_NAME_LENGTH_MAX size @param[in] GpioNameBufferSize Size of the buffer @retval CHAR8* Pointer to the GPIO name **/ CHAR8* GpioGetPadName ( IN GPIO_PAD GpioPad, OUT CHAR8* GpioNameBuffer, IN UINT32 GpioNameBufferSize ) { UINT32 GroupIndex; UINT32 PadNumber; UINT32 FirstUniquePadNumber; CONST GPIO_GROUP_NAME_INFO* GroupNameInfo; if (GpioNameBuffer == NULL) { ASSERT (FALSE); return NULL; } if ((GpioNameBufferSize < GPIO_NAME_LENGTH_MAX) || !GpioIsPadValid (GpioPad)) { ASSERT (FALSE); *GpioNameBuffer = 0; return NULL; } GroupIndex = GpioGetGroupIndexFromGpioPad (GpioPad); PadNumber = GpioGetPadNumberFromGpioPad (GpioPad); GroupNameInfo = GpioGetGroupNameInfo (GroupIndex); if (GroupNameInfo == NULL) { return NULL; } FirstUniquePadNumber = GpioGetPadNumberFromGpioPad (GroupNameInfo->FirstUniqueGpio); if ((PadNumber < FirstUniquePadNumber) || (GroupNameInfo->GroupUniqueNames == NULL)) { AsciiSPrint (GpioNameBuffer, GPIO_NAME_LENGTH_MAX, "GPIO_%a%d", GpioGetGroupName (GroupIndex), PadNumber); } else { if (PadNumber - FirstUniquePadNumber < GroupNameInfo->UniqueNamesTableSize) { AsciiSPrint (GpioNameBuffer, GPIO_NAME_LENGTH_MAX, "GPIO_%a", GroupNameInfo->GroupUniqueNames[PadNumber - FirstUniquePadNumber]); } else { AsciiSPrint (GpioNameBuffer, GPIO_NAME_LENGTH_MAX, "GPIO_%08X", GpioPad); ASSERT (FALSE); } } return GpioNameBuffer; }