/** @file
Header file for GPIO Lib implementation.
Copyright (c) 2019 Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _GPIO_LIBRARY_H_
#define _GPIO_LIBRARY_H_
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
// BIT15-0 - pad number
// BIT31-16 - group info
// BIT23- 16 - group index
// BIT31- 24 - chipset ID
#define PAD_INFO_MASK 0x0000FFFF
#define GROUP_INFO_POSITION 16
#define GROUP_INFO_MASK 0xFFFF0000
#define GROUP_INDEX_MASK 0x00FF0000
#define UNIQUE_ID_MASK 0xFF000000
#define UNIQUE_ID_POSITION 24
#define GPIO_PAD_DEF(Group,Pad) (UINT32)(((Group) << 16) + (Pad))
#define GPIO_GROUP_DEF(Index,ChipsetId) ((Index) | ((ChipsetId) << 8))
#define GPIO_GET_GROUP_INDEX(Group) ((Group) & 0xFF)
#define GPIO_GET_GROUP_FROM_PAD(Pad) ((Pad) >> 16)
#define GPIO_GET_GROUP_INDEX_FROM_PAD(Pad) GPIO_GET_GROUP_INDEX (((Pad) >> 16))
#define GPIO_GET_PAD_NUMBER(Pad) ((Pad) & 0xFFFF)
#define GPIO_GET_CHIPSET_ID(Pad) ((Pad) >> 24)
#define GPIO_GET_PAD_POSITION(PadNumber) ((PadNumber) % 32)
#define GPIO_GET_DW_NUM(PadNumber) ((PadNumber) / 32u)
//
// Number of PADCFG_DW registers
//
#define GPIO_PADCFG_DW_REG_NUMBER 4
/**
This internal procedure will calculate GPIO_RESET_CONFIG value (new type)
based on provided PadRstCfg for a specific GPIO Pad.
@param[in] GpioPad GPIO Pad
@param[in] PadRstCfg GPIO PadRstCfg value
@retval GpioResetConfig GPIO Reset configuration (new type)
**/
GPIO_RESET_CONFIG
GpioResetConfigFromPadRstCfg (
IN GPIO_PAD GpioPad,
IN UINT32 PadRstCfg
);
/**
This internal procedure will calculate PadRstCfg register value based
on provided GPIO Reset configuration for a certain pad.
@param[in] GpioPad GPIO Pad
@param[in] GpioResetConfig GPIO Reset configuration
@param[out] PadRstCfg GPIO PadRstCfg value
@retval EFI_SUCCESS The function completed successfully
@retval EFI_INVALID_PARAMETER Invalid configuration
**/
EFI_STATUS
GpioPadRstCfgFromResetConfig (
IN GPIO_PAD GpioPad,
IN GPIO_RESET_CONFIG GpioResetConfig,
OUT UINT32 *PadRstCfg
);
/**
This procedure will calculate PADCFG register value based on GpioConfig data
@param[in] GpioPad GPIO Pad
@param[in] GpioConfig GPIO Configuration data
@param[out] PadCfgDwReg PADCFG DWx register value
@param[out] PadCfgDwRegMask Mask with PADCFG DWx register bits to be modified
**/
VOID
GpioPadCfgRegValueFromGpioConfig (
IN GPIO_PAD GpioPad,
IN CONST GPIO_CONFIG *GpioConfig,
OUT UINT32 *PadCfgDwReg,
OUT UINT32 *PadCfgDwRegMask
);
/**
Generates GPIO group name from GroupIndex
@param[in] GroupIndex Gpio GroupIndex
@retval CHAR8* Pointer to the GPIO group name
**/
CONST
CHAR8*
GpioGetGroupName (
IN UINT32 GroupIndex
);
#endif // _GPIO_LIBRARY_H_