/** @file This file contains routines for GPIO native and chipset specific usage Copyright (c) 2021, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include "GpioLibrary.h" /** This procedure will get number of pads for certain GPIO group @param[in] Group GPIO group number @retval Value Pad number for group If illegal group number then return 0 **/ UINT32 GpioGetPadPerGroup ( IN GPIO_GROUP Group ) { CONST GPIO_GROUP_INFO *GpioGroupInfo; UINT32 GpioGroupInfoLength; UINT32 GroupIndex; // // Check if group argument exceeds GPIO GROUP INFO array // GpioGroupInfo = GpioGetGroupInfoTable (&GpioGroupInfoLength); GroupIndex = GpioGetGroupIndexFromGroup (Group); if ((UINTN) GroupIndex >= GpioGroupInfoLength) { return 0; } else { return GpioGroupInfo[GroupIndex].PadPerGroup; } } /** This procedure will get number of groups @param[in] none @retval Value Group number **/ UINT32 GpioGetNumberOfGroups ( VOID ) { UINT32 GpioGroupInfoLength; GpioGetGroupInfoTable (&GpioGroupInfoLength); return GpioGroupInfoLength; } /** This procedure will get lowest group @param[in] none @retval Value Lowest Group **/ GPIO_GROUP GpioGetLowestGroup ( VOID ) { return GpioGetGroupFromGroupIndex (0); } /** This procedure will get highest group @param[in] none @retval Value Highest Group **/ GPIO_GROUP GpioGetHighestGroup ( VOID ) { return GpioGetGroupFromGroupIndex (GpioGetNumberOfGroups () - 1); } /** This procedure will get group number @param[in] GpioPad Gpio Pad @retval Value Group number **/ GPIO_GROUP GpioGetGroupFromGpioPad ( IN GPIO_PAD GpioPad ) { return GPIO_GET_GROUP_FROM_PAD (GpioPad); } /** This procedure will get group index (0 based) @param[in] GpioPad Gpio Pad @retval Value Group Index **/ UINT32 GpioGetGroupIndexFromGpioPad ( IN GPIO_PAD GpioPad ) { return (UINT32) GPIO_GET_GROUP_INDEX_FROM_PAD (GpioPad); } /** This procedure will get group index (0 based) from group @param[in] GpioGroup Gpio Group @retval Value Group Index **/ UINT32 GpioGetGroupIndexFromGroup ( IN GPIO_GROUP GpioGroup ) { return (UINT32) GPIO_GET_GROUP_INDEX (GpioGroup); } /** This procedure will get group from group index (0 based) @param[in] GroupIndex Group Index @retval GpioGroup Gpio Group **/ GPIO_GROUP GpioGetGroupFromGroupIndex ( IN UINT32 GroupIndex ) { return GPIO_GROUP_DEF (GroupIndex, GpioGetThisChipsetId ()); } /** This procedure will get pad number (0 based) from Gpio Pad @param[in] GpioPad Gpio Pad @retval Value Pad Number **/ UINT32 GpioGetPadNumberFromGpioPad ( IN GPIO_PAD GpioPad ) { return (UINT32) GPIO_GET_PAD_NUMBER (GpioPad); } /** This procedure will return GpioPad from Group and PadNumber @param[in] Group GPIO group @param[in] PadNumber GPIO PadNumber @retval GpioPad GpioPad **/ GPIO_PAD GpioGetGpioPadFromGroupAndPadNumber ( IN GPIO_GROUP Group, IN UINT32 PadNumber ) { return GPIO_PAD_DEF (Group,PadNumber); } /** This procedure will return GpioPad from GroupIndex and PadNumber @param[in] GroupIndex GPIO GroupIndex @param[in] PadNumber GPIO PadNumber @retval GpioPad GpioPad **/ GPIO_PAD GpioGetGpioPadFromGroupIndexAndPadNumber ( IN UINT32 GroupIndex, IN UINT32 PadNumber ) { GPIO_GROUP Group; Group = GPIO_GROUP_DEF (GroupIndex, GpioGetThisChipsetId ()); return GPIO_PAD_DEF (Group, PadNumber); }