Upload BSD-licensed Vlv2TbltDevicePkg and Vlv2DeviceRefCodePkg to
https://svn.code.sf.net/p/edk2/code/trunk/edk2/, which are for MinnowBoard MAX open source project. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: David Wei <david.wei@intel.com> Reviewed-by: Mike Wu <mike.wu@intel.com> Reviewed-by: Hot Tian <hot.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16599 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
199
Vlv2TbltDevicePkg/Include/Protocol/I2cSlave.h
Normal file
199
Vlv2TbltDevicePkg/Include/Protocol/I2cSlave.h
Normal file
@@ -0,0 +1,199 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
|
||||
|
||||
|
||||
This program and the accompanying materials are licensed and made available under
|
||||
|
||||
the terms and conditions of the BSD License that accompanies this distribution.
|
||||
|
||||
The full text of the license may be found at
|
||||
|
||||
http://opensource.org/licenses/bsd-license.php.
|
||||
|
||||
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
**/
|
||||
|
||||
#ifndef __I2C_SLAVE_H__
|
||||
#define __I2C_SLAVE_H__
|
||||
|
||||
#include <Protocol/I2cHostMcg.h>
|
||||
|
||||
/**
|
||||
Declare the forward references
|
||||
|
||||
**/
|
||||
typedef struct _EFI_I2C_SLAVE_PROTOCOL EFI_I2C_SLAVE_PROTOCOL; ///< I2C slave protocol
|
||||
|
||||
/**
|
||||
The I2C controller received a data byte from the
|
||||
I2C msster.
|
||||
|
||||
@param[in] Context The value passed to the slave enable routine.
|
||||
@param[in] NumberOfBytes Number of data bytes received
|
||||
@param[in] Data Buffer containing the received data bytes
|
||||
|
||||
@retval EFI_SUCCESS ACK the data byte
|
||||
@retval EFI_UNSUPPORTED NACK the data byte
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_I2C_SLAVE_RECEIVE_DATA) (
|
||||
IN VOID *Context,
|
||||
IN UINTN NumberOfBytes,
|
||||
IN CONST UINT8 *Data
|
||||
);
|
||||
|
||||
/**
|
||||
The I2C controller received the start bit from the
|
||||
I2C master.
|
||||
|
||||
@param[in] Context The value passed to the slave enable routine.
|
||||
|
||||
**/
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *EFI_I2C_SLAVE_RECEIVE_START) (
|
||||
IN VOID *Context,
|
||||
IN UINTN BytesSent,
|
||||
IN EFI_STATUS Status
|
||||
);
|
||||
|
||||
/**
|
||||
The I2C controller received the stop bit from the
|
||||
I2C master.
|
||||
|
||||
@param[in] Context The value passed to the slave enable routine.
|
||||
@param[in] BytesSent Number of bytes successfully ACKed by the
|
||||
I2C master. This is a hint, not all I2C
|
||||
controllers support the ability to return
|
||||
the number of bytes sent. When it is not
|
||||
possible, the port driver returns zero.
|
||||
@param[in] Status <ul>
|
||||
<li>EFI_SUCCESS - All of the data was successfully sent</li>
|
||||
<li>EFI_ABORTED - The controller was reset</li>
|
||||
<li>EFI_DEVICE_ERROR - A NACK was received when sending the data.</li>
|
||||
<li>EFI_END_OF_FILE - The stop bit was received before all of
|
||||
the data was sent.</li>
|
||||
</ul>
|
||||
|
||||
**/
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *EFI_I2C_SLAVE_RECEIVE_STOP) (
|
||||
IN VOID *Context,
|
||||
IN UINTN BytesSent,
|
||||
IN EFI_STATUS Status
|
||||
);
|
||||
|
||||
/**
|
||||
Enable or disable I2C slave operation.
|
||||
|
||||
The ReceiveData callback allows the port driver to return data
|
||||
to the driver or application handling slave mode operations. This
|
||||
is data that a remote master has sent to the local I2C controller.
|
||||
The data may be returned one byte at a time if the controller supports
|
||||
the ability to ACK/NACK on each receive byte. If not, a block of
|
||||
data may be returned by the I2C port driver and the ACK/NACK status
|
||||
is used only as a hint for the port driver.
|
||||
|
||||
The slave mode driver or application should buffer the data until
|
||||
either ReceiveStart or ReceiveStop is called. At that time all of
|
||||
the data is received and the command may be processed.
|
||||
|
||||
ReceiveStart is called when the I2C master is expecting a response.
|
||||
After processing the command, but before sending the response the
|
||||
slave driver or application should mark the command as processed to
|
||||
avoid processing it a second time when ReceiveStop is called. The
|
||||
slave driver or application then calls SendData to send to queue the
|
||||
response data for transmission. The data must remain valid in the
|
||||
WriteBuffer until ReceiveStop is called.
|
||||
|
||||
ReceiveStop is called when the stop bit is received on the I2C bus.
|
||||
The slave driver or application starts processing the command if an
|
||||
command data is pending in the slave driver's or application's buffer.
|
||||
The BytesSent value is a hint to the slave driver or application as
|
||||
to how much data was returned to the I2C master. If the controller
|
||||
does not provide this level of support then this value is set to zero.
|
||||
|
||||
@param[in] This Address of an EFI_I2C_SLAVE_PROTOCOL
|
||||
structure
|
||||
@param[in] SlaveAddress Slave address for the I2C controller
|
||||
@param[in] Context Address of a context structure for use when
|
||||
calling ReceiveData or ReceiveStop
|
||||
@param[in] ReceiveData Called by the I2C port driver as data bytes
|
||||
are received from the master. Response status
|
||||
indicates if the byte is ACKed or NACKed. When
|
||||
data is passed back a byte at a time, the port
|
||||
driver must hold the clock until this callback
|
||||
returns.
|
||||
@param[in] ReceiveStart Called when the I2C controller receives a start bit.
|
||||
@param[in] ReceiveStop Called after all of the data bytes are
|
||||
received.
|
||||
|
||||
@retval EFI_SUCCESS Slave operation is enabled on the controller.
|
||||
@retval EFI_UNSUPPORTED The controller does not support this frequency.
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_I2C_SLAVE_ENABLE) (
|
||||
IN CONST EFI_I2C_SLAVE_PROTOCOL *This,
|
||||
IN UINT32 SlaveAddress,
|
||||
IN VOID *Context,
|
||||
IN EFI_I2C_SLAVE_RECEIVE_DATA ReceiveData,
|
||||
IN EFI_I2C_SLAVE_RECEIVE_START ReceiveStart,
|
||||
IN EFI_I2C_SLAVE_RECEIVE_STOP ReceiveStop
|
||||
);
|
||||
|
||||
/**
|
||||
Send data to the I2C master.
|
||||
|
||||
Port drivers may implement this as a blocking or non-blocking call.
|
||||
The data in the write buffer must remain valid until ReceiveStop or
|
||||
ReceiveStart is called indicating that the I2C master has terminated
|
||||
the transfer.
|
||||
|
||||
@param[in] This Address of an EFI_I2C_SLAVE_PROTOCOL
|
||||
structure
|
||||
@param[in] WriteBytes Number of bytes to write
|
||||
@param[in] WriteBuffer Buffer containing the data to send
|
||||
|
||||
@retval EFI_SUCCESS Data waiting for master access.
|
||||
@retval EFI_INVALID_PARAMETER WriteBuffer is NULL or WriteBytes
|
||||
is zero.
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_I2C_SLAVE_SEND) (
|
||||
IN CONST EFI_I2C_SLAVE_PROTOCOL *This,
|
||||
IN UINTN WriteBytes,
|
||||
IN CONST UINT8 *WriteBuffer
|
||||
);
|
||||
|
||||
///
|
||||
/// I2C slave protocol
|
||||
///
|
||||
/// The port driver publishes this protocol when slave mode is
|
||||
/// supported by the controller.
|
||||
///
|
||||
struct _EFI_I2C_SLAVE_PROTOCOL {
|
||||
///
|
||||
/// Enable or disable I2C slave operation
|
||||
///
|
||||
EFI_I2C_SLAVE_ENABLE SlaveEnable;
|
||||
|
||||
///
|
||||
/// Send data to the I2C master
|
||||
///
|
Reference in New Issue
Block a user