/** @file
  This file declares Smbus2 PPI.
  This PPI provides the basic I/O interfaces that a PEIM uses to access its
  SMBus controller and the slave devices attached to it.

  Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
  SPDX-License-Identifier: BSD-2-Clause-Patent

  @par Revision Reference:
  This PPI is introduced in PI Version 1.0.

**/

#ifndef __PEI_SMBUS2_PPI_H__
#define __PEI_SMBUS2_PPI_H__

#include <IndustryStandard/SmBus.h>

#define EFI_PEI_SMBUS2_PPI_GUID \
  { 0x9ca93627, 0xb65b, 0x4324, { 0xa2, 0x2, 0xc0, 0xb4, 0x61, 0x76, 0x45, 0x43 } }

typedef struct _EFI_PEI_SMBUS2_PPI EFI_PEI_SMBUS2_PPI;

/**
  Executes an SMBus operation to an SMBus controller. Returns when either
  the command has been executed or an error is encountered in doing the operation.

  @param  This            A pointer to the EFI_PEI_SMBUS2_PPI instance.
  @param  SlaveAddress    The SMBUS hardware address to which the SMBUS device is preassigned or
                          allocated.
  @param  Command         This command is transmitted by the SMBus host controller to the SMBus slave
                          device and the interpretation is SMBus slave device specific.
                          It can mean the offset to a list of functions inside
                          an SMBus slave device. Not all operations or slave devices support
                          this command's registers.
  @param  Operation       Signifies which particular SMBus hardware protocol instance that it
                          will use to execute the SMBus transactions.
                          This SMBus hardware protocol is defined by the System Management Bus (SMBus)
                          Specification and is not related to UEFI.
  @param  PecCheck        Defines if Packet Error Code (PEC) checking is required for this operation.
  @param  Length          Signifies the number of bytes that this operation will do.
                          The maximum number of bytes can be revision specific and operation specific.
                          This parameter will contain the actual number of bytes that are executed
                          for this operation. Not all operations require this argument.
  @param  Buffer          Contains the value of data to execute to the SMBus slave device.
                          Not all operations require this argument.
                          The length of this buffer is identified by Length.


  @retval EFI_SUCCESS           The last data that was returned from the access
                                matched the poll exit criteria.
  @retval EFI_CRC_ERROR         The checksum is not correct (PEC is incorrect)
  @retval EFI_TIMEOUT           Timeout expired before the operation was completed.
                                Timeout is determined by the SMBus host controller device.
  @retval EFI_OUT_OF_RESOURCES  The request could not be completed
                                due to a lack of resources.
  @retval EFI_DEVICE_ERROR      The request was not completed because
                                a failure reflected in the Host Status Register bit.
  @retval EFI_INVALID_PARAMETER Operation is not defined in EFI_SMBUS_OPERATION.
                                Or Length/Buffer is NULL for operations except for EfiSmbusQuickRead and
                                EfiSmbusQuickWrite. Or Length is outside the range of valid values.
  @retval EFI_UNSUPPORTED       The SMBus operation or PEC is not supported.
  @retval EFI_BUFFER_TOO_SMALL  Buffer is not sufficient for this operation.

**/
typedef
EFI_STATUS
(EFIAPI *EFI_PEI_SMBUS2_PPI_EXECUTE_OPERATION)(
  IN CONST  EFI_PEI_SMBUS2_PPI        *This,
  IN        EFI_SMBUS_DEVICE_ADDRESS  SlaveAddress,
  IN        EFI_SMBUS_DEVICE_COMMAND  Command,
  IN        EFI_SMBUS_OPERATION       Operation,
  IN        BOOLEAN                   PecCheck,
  IN OUT    UINTN                     *Length,
  IN OUT    VOID                      *Buffer
  );

/**
  The ArpDevice() function enumerates the entire bus or enumerates a specific
  device that is identified by SmbusUdid.

  @param  This           A pointer to the EFI_PEI_SMBUS2_PPI instance.
  @param  ArpAll         A Boolean expression that indicates if the host drivers need
                         to enumerate all the devices or enumerate only the device that is identified
                         by SmbusUdid. If ArpAll is TRUE, SmbusUdid and SlaveAddress are optional.
                         If ArpAll is FALSE, ArpDevice will enumerate SmbusUdid and the address
                         will be at SlaveAddress.
  @param  SmbusUdid      The targeted SMBus Unique Device Identifier (UDID).
                         The UDID may not exist for SMBus devices with fixed addresses.
  @param  SlaveAddress   The new SMBus address for the slave device for
                         which the operation is targeted.

  @retval EFI_SUCCESS           The SMBus slave device address was set.
  @retval EFI_INVALID_PARAMETER SlaveAddress is NULL.
  @retval EFI_OUT_OF_RESOURCES  The request could not be completed
                                due to a lack of resources.
  @retval EFI_TIMEOUT           The SMBus slave device did not respond.
  @retval EFI_DEVICE_ERROR      The request was not completed because the transaction failed.
  @retval EFI_UNSUPPORTED       ArpDevice, GetArpMap, and Notify are not implemented by this PEIM.

**/
typedef
EFI_STATUS
(EFIAPI *EFI_PEI_SMBUS2_PPI_ARP_DEVICE)(
  IN CONST  EFI_PEI_SMBUS2_PPI        *This,
  IN        BOOLEAN                   ArpAll,
  IN        EFI_SMBUS_UDID            *SmbusUdid    OPTIONAL,
  IN OUT    EFI_SMBUS_DEVICE_ADDRESS  *SlaveAddress OPTIONAL
  );

/**
  The GetArpMap() function returns the mapping of all the SMBus devices
  that are enumerated by the SMBus host driver.

  @param  This           A pointer to the EFI_PEI_SMBUS2_PPI instance.
  @param  Length         Size of the buffer that contains the SMBus device map.
  @param  SmbusDeviceMap The pointer to the device map as enumerated
                         by the SMBus controller driver.

  @retval EFI_SUCCESS           The device map was returned correctly in the buffer.
  @retval EFI_UNSUPPORTED       ArpDevice, GetArpMap, and Notify are not implemented by this PEIM.

**/
typedef
EFI_STATUS
(EFIAPI *EFI_PEI_SMBUS2_PPI_GET_ARP_MAP)(
  IN CONST  EFI_PEI_SMBUS2_PPI    *This,
  IN OUT    UINTN                 *Length,
  IN OUT    EFI_SMBUS_DEVICE_MAP  **SmbusDeviceMap
  );

/**
  CallBack function can be registered in EFI_PEI_SMBUS2_PPI_NOTIFY.

  @param  This           A pointer to the EFI_PEI_SMBUS2_PPI instance.
  @param  SlaveAddress   The SMBUS hardware address to which the SMBUS
                         device is preassigned or allocated.
  @param  Data           Data of the SMBus host notify command that
                         the caller wants to be called.

  @retval EFI_SUCCESS           NotifyFunction has been registered.
  @retval EFI_UNSUPPORTED       ArpDevice, GetArpMap, and Notify are not
                                implemented by this PEIM.

**/
typedef
EFI_STATUS
(EFIAPI *EFI_PEI_SMBUS_NOTIFY2_FUNCTION)(
  IN CONST  EFI_PEI_SMBUS2_PPI        *SmbusPpi,
  IN        EFI_SMBUS_DEVICE_ADDRESS  SlaveAddress,
  IN        UINTN                     Data
  );

/**
  The Notify() function registers all the callback functions to allow the
  bus driver to call these functions when the SlaveAddress/Data pair happens.

  @param  This           A pointer to the EFI_PEI_SMBUS2_PPI instance.
  @param  SlaveAddress   Address that the host controller detects as
                         sending a message and calls all the registered functions.
  @param  Data           Data that the host controller detects as sending a message
                         and calls all the registered functions.
  @param  NotifyFunction The function to call when the bus driver
                         detects the SlaveAddress and Data pair.

  @retval EFI_SUCCESS     NotifyFunction has been registered.
  @retval EFI_UNSUPPORTED ArpDevice, GetArpMap, and Notify are not
                          implemented by this PEIM.
**/
typedef
EFI_STATUS
(EFIAPI *EFI_PEI_SMBUS2_PPI_NOTIFY)(
  IN CONST EFI_PEI_SMBUS2_PPI              *This,
  IN       EFI_SMBUS_DEVICE_ADDRESS        SlaveAddress,
  IN       UINTN                           Data,
  IN       EFI_PEI_SMBUS_NOTIFY2_FUNCTION  NotifyFunction
  );

///
///  Provides the basic I/O interfaces that a PEIM uses to access
///  its SMBus controller and the slave devices attached to it.
///
struct _EFI_PEI_SMBUS2_PPI {
  EFI_PEI_SMBUS2_PPI_EXECUTE_OPERATION    Execute;
  EFI_PEI_SMBUS2_PPI_ARP_DEVICE           ArpDevice;
  EFI_PEI_SMBUS2_PPI_GET_ARP_MAP          GetArpMap;
  EFI_PEI_SMBUS2_PPI_NOTIFY               Notify;
  ///
  /// Identifier which uniquely identifies this SMBus controller in a system.
  ///
  EFI_GUID                                Identifier;
};

extern EFI_GUID  gEfiPeiSmbus2PpiGuid;

#endif
