mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-12-05 13:33:33 +01:00
290 lines
11 KiB
C
290 lines
11 KiB
C
|
/** @file
|
||
|
The file provides basic SMBus host controller management
|
||
|
and basic data transactions over the SMBus.
|
||
|
|
||
|
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
|
||
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||
|
|
||
|
@par Revision Reference: PI
|
||
|
Version 1.00.
|
||
|
|
||
|
**/
|
||
|
|
||
|
#ifndef __SMBUS_HC_H__
|
||
|
#define __SMBUS_HC_H__
|
||
|
|
||
|
#include <IndustryStandard/SmBus.h>
|
||
|
|
||
|
#define EFI_SMBUS_HC_PROTOCOL_GUID \
|
||
|
{0xe49d33ed, 0x513d, 0x4634, { 0xb6, 0x98, 0x6f, 0x55, 0xaa, 0x75, 0x1c, 0x1b} }
|
||
|
|
||
|
typedef struct _EFI_SMBUS_HC_PROTOCOL EFI_SMBUS_HC_PROTOCOL;
|
||
|
|
||
|
/**
|
||
|
|
||
|
The Execute() function provides a standard way to execute an
|
||
|
operation as defined in the System Management Bus (SMBus)
|
||
|
Specification. The resulting transaction will be either that
|
||
|
the SMBus slave devices accept this transaction or that this
|
||
|
function returns with error.
|
||
|
|
||
|
@param This A pointer to the EFI_SMBUS_HC_PROTOCOL instance.
|
||
|
SlaveAddress The SMBus slave address of the device
|
||
|
with which to communicate. Type
|
||
|
EFI_SMBUS_DEVICE_ADDRESS is defined in
|
||
|
EFI_PEI_SMBUS_PPI.Execute() in the Platform
|
||
|
Initialization SMBus PPI Specification.
|
||
|
|
||
|
@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. Type
|
||
|
EFI_SMBUS_DEVICE_COMMAND is defined in
|
||
|
EFI_PEI_SMBUS_PPI.Execute() in the Platform
|
||
|
Initialization SMBus PPI Specification.
|
||
|
|
||
|
@param Operation Signifies the particular SMBus
|
||
|
hardware protocol instance it will use to
|
||
|
execute the SMBus transactions. This SMBus
|
||
|
hardware protocol is defined by the SMBus
|
||
|
Specification and is not related to PI
|
||
|
Architecture. Type EFI_SMBUS_OPERATION is
|
||
|
defined in EFI_PEI_SMBUS_PPI.Execute() in the
|
||
|
Platform Initialization SMBus PPI
|
||
|
Specification.
|
||
|
|
||
|
@param PecCheck Defines if Packet Error Code (PEC) checking
|
||
|
is required for this operation. SMBus Host
|
||
|
Controller Code Definitions Version 1.0
|
||
|
August 21, 2006 13
|
||
|
|
||
|
@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 field
|
||
|
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 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 that was reflected
|
||
|
in the Host Status Register bit.
|
||
|
Device errors are a result of a
|
||
|
transaction collision, illegal
|
||
|
command field, unclaimed cycle (host
|
||
|
initiated), or bus errors
|
||
|
(collisions).
|
||
|
|
||
|
@retval EFI_INVALID_PARAMETER Operation is not defined in
|
||
|
EFI_SMBUS_OPERATION.
|
||
|
|
||
|
@retval EFI_INVALID_PARAMETER Length/Buffer is NULL for
|
||
|
operations except for
|
||
|
EfiSmbusQuickRead and
|
||
|
EfiSmbusQuickWrite. 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_SMBUS_HC_EXECUTE_OPERATION)(
|
||
|
IN CONST EFI_SMBUS_HC_PROTOCOL *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 provides a standard way for a device driver to
|
||
|
enumerate the entire SMBus or specific devices on the bus.
|
||
|
|
||
|
@param This A pointer to the EFI_SMBUS_HC_PROTOCOL 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 Unique Device Identifier (UDID) that is
|
||
|
associated with this device. Type
|
||
|
EFI_SMBUS_UDID is defined in
|
||
|
EFI_PEI_SMBUS_PPI.ArpDevice() in the
|
||
|
Platform Initialization SMBus PPI
|
||
|
Specification.
|
||
|
|
||
|
@param SlaveAddress The SMBus slave address that is
|
||
|
associated with an SMBus UDID.
|
||
|
|
||
|
@retval EFI_SUCCESS The last data that was returned from the
|
||
|
access matched the poll exit criteria.
|
||
|
|
||
|
@retval EFI_CRC_ERROR 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 was reflected in
|
||
|
the Host Status Register bit. Device
|
||
|
Errors are a result of a transaction
|
||
|
collision, illegal command field,
|
||
|
unclaimed cycle (host initiated), or
|
||
|
bus errors (collisions).
|
||
|
|
||
|
@retval EFI_UNSUPPORTED ArpDevice, GetArpMap, and Notify are
|
||
|
not implemented by this driver.
|
||
|
|
||
|
**/
|
||
|
typedef
|
||
|
EFI_STATUS
|
||
|
(EFIAPI *EFI_SMBUS_HC_PROTOCOL_ARP_DEVICE)(
|
||
|
IN CONST EFI_SMBUS_HC_PROTOCOL *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 were enumerated by the SMBus host driver.
|
||
|
|
||
|
@param This A pointer to the EFI_SMBUS_HC_PROTOCOL 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 SMBus returned the current device map.
|
||
|
|
||
|
@retval EFI_UNSUPPORTED ArpDevice, GetArpMap, and Notify are
|
||
|
not implemented by this driver.
|
||
|
|
||
|
**/
|
||
|
typedef
|
||
|
EFI_STATUS
|
||
|
(EFIAPI *EFI_SMBUS_HC_PROTOCOL_GET_ARP_MAP)(
|
||
|
IN CONST EFI_SMBUS_HC_PROTOCOL *This,
|
||
|
IN OUT UINTN *Length,
|
||
|
IN OUT EFI_SMBUS_DEVICE_MAP **SmbusDeviceMap
|
||
|
);
|
||
|
|
||
|
/**
|
||
|
The notify function does some actions.
|
||
|
|
||
|
@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.
|
||
|
|
||
|
@return EFI_STATUS
|
||
|
**/
|
||
|
typedef
|
||
|
EFI_STATUS
|
||
|
(EFIAPI *EFI_SMBUS_NOTIFY_FUNCTION)(
|
||
|
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_SMBUS_HC_PROTOCOL instance.
|
||
|
|
||
|
@param SlaveAddress Address that the host controller detects
|
||
|
as sending a message and calls all the registered function.
|
||
|
|
||
|
@param Data Data that the host controller detects as sending
|
||
|
message and calls all the registered function.
|
||
|
|
||
|
|
||
|
@param NotifyFunction The function to call when the bus
|
||
|
driver detects the SlaveAddress and
|
||
|
Data pair.
|
||
|
|
||
|
@retval EFI_SUCCESS NotifyFunction was registered.
|
||
|
|
||
|
@retval EFI_UNSUPPORTED ArpDevice, GetArpMap, and Notify are
|
||
|
not implemented by this driver.
|
||
|
|
||
|
**/
|
||
|
typedef
|
||
|
EFI_STATUS
|
||
|
(EFIAPI *EFI_SMBUS_HC_PROTOCOL_NOTIFY)(
|
||
|
IN CONST EFI_SMBUS_HC_PROTOCOL *This,
|
||
|
IN EFI_SMBUS_DEVICE_ADDRESS SlaveAddress,
|
||
|
IN UINTN Data,
|
||
|
IN EFI_SMBUS_NOTIFY_FUNCTION NotifyFunction
|
||
|
);
|
||
|
|
||
|
|
||
|
///
|
||
|
/// The EFI_SMBUS_HC_PROTOCOL provides SMBus host controller management and basic data
|
||
|
/// transactions over SMBus. There is one EFI_SMBUS_HC_PROTOCOL instance for each SMBus
|
||
|
/// host controller.
|
||
|
///
|
||
|
struct _EFI_SMBUS_HC_PROTOCOL {
|
||
|
EFI_SMBUS_HC_EXECUTE_OPERATION Execute;
|
||
|
EFI_SMBUS_HC_PROTOCOL_ARP_DEVICE ArpDevice;
|
||
|
EFI_SMBUS_HC_PROTOCOL_GET_ARP_MAP GetArpMap;
|
||
|
EFI_SMBUS_HC_PROTOCOL_NOTIFY Notify;
|
||
|
};
|
||
|
|
||
|
|
||
|
extern EFI_GUID gEfiSmbusHcProtocolGuid;
|
||
|
|
||
|
#endif
|
||
|
|