/** @file
|
This file contains routines for GPIO native and chipset specific usage
|
|
Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
|
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);
|
}
|