text: /** @file
  
  Copyright (c) 2018, Intel Corporation. All rights reserved.<BR>
  SPDX-License-Identifier: BSD-2-Clause-Patent
  
  **/
  
  #ifndef _GPIO_NATIVE_LIB_H_
  #define _GPIO_NATIVE_LIB_H_
  
  #include <GpioConfig.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
    );
  
  /**
    This procedure will get number of groups
  
    @param[in] none
  
    @retval Value               Group number
  **/
  UINT8
  GpioGetNumberOfGroups (
    VOID
    );
  /**
    This procedure will get lowest group
  
    @param[in] none
  
    @retval Value               Lowest Group
  **/
  GPIO_GROUP
  GpioGetLowestGroup (
    VOID
    );
  
  /**
    This procedure will get highest group
  
    @param[in] none
  
    @retval Value               Highest Group
  **/
  GPIO_GROUP
  GpioGetHighestGroup (
    VOID
    );
  
  /**
    This procedure will get group
  
    @param[in] GpioPad          Gpio Pad
  
    @retval Value               Group
  **/
  GPIO_GROUP
  GpioGetGroupFromGpioPad (
    IN GPIO_PAD        GpioPad
    );
  
  /**
    This procedure will get group index (0 based) from GpioPad
  
    @param[in] GpioPad          Gpio Pad
  
    @retval Value               Group Index
  **/
  UINT32
  GpioGetGroupIndexFromGpioPad (
    IN GPIO_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
    );
  
  /**
    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
    );
  
  /**
    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
    );
  
  /**
    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
    );
  
  /**
    This function sets SerialIo I2C controller pins into native mode
  
    @param[in]  SerialIoI2cControllerNumber   I2C controller
  
    @retval Status
  **/
  EFI_STATUS
  GpioSetSerialIoI2cPinsIntoNativeMode (
    IN  UINT32            SerialIoI2cControllerNumber
    );
  
  /**
    This function sets SerialIo I2C controller pins tolerance
  
    @param[in]  SerialIoI2CControllerNumber   I2C controller
    @param[in]  Pad1v8Tolerance               TRUE:  Enable  1v8 Pad tolerance
                                              FALSE: Disable 1v8 Pad tolerance
  
    @retval Status
  **/
  EFI_STATUS
  GpioSetSerialIoI2CPinsTolerance (
    IN  UINT32            SerialIoI2CControllerNumber,
    IN  BOOLEAN           Pad1v8Tolerance
    );
  
  /**
    This function sets SerialIo UART controller pins into native mode
  
    @param[in]  SerialIoI2CControllerNumber   UART controller
    @param[in]  HardwareFlowControl           Hardware Flow control
  
    @retval Status
  **/
  EFI_STATUS
  GpioSetSerialIoUartPinsIntoNativeMode (
    IN  UINT32            SerialIoUartControllerNumber,
    IN  BOOLEAN           HardwareFlowControl
    );
  
  /**
    This function sets SerialIo SPI controller pins into native mode
  
    @param[in]  SerialIoI2CControllerNumber   SPI controller
  
    @retval Status
  **/
  EFI_STATUS
  GpioSetSerialIoSpiPinsIntoNativeMode (
    IN  UINT32            SerialIoUartControllerNumber
    );
  
  /**
    This function checks if GPIO pin for SATA reset port is in GPIO MODE
  
    @param[in]  SataPort            SATA port number
  
    @retval TRUE                    Pin is in GPIO mode
            FALSE                   Pin is in native mode
  **/
  BOOLEAN
  GpioIsSataResetPortInGpioMode (
    IN  UINTN            SataPort
    );
  
  /**
    This function checks if SataDevSlp pin is in native mode
  
    @param[in]  SataPort            SATA port
    @param[out] DevSlpPad           DevSlpPad
  
    @retval TRUE                    DevSlp is in native mode
            FALSE                   DevSlp is not in native mode
  **/
  BOOLEAN
  GpioIsSataDevSlpPinEnabled (
    IN  UINTN           SataPort,
    OUT GPIO_PAD        *DevSlpPad
    );
  
  #endif // _GPIO_NATIVE_LIB_H_
  