Changes for V4 ============== 1) Remove Unicode character from C source file 2) Move delete of QuarkSocPkg\QuarkNorthCluster\Binary\QuarkMicrocode from QuarkPlatformPkg commit to QuarkSocPkg commit Changes for V2 ============== 1) Sync with new APIs in SmmCpuFeaturesLib class 2) Use new generic PCI serial driver PciSioSerialDxe in MdeModulePkg 3) Remove PCI serial driver from QuarkSocPkg 4) Apply optimizations to MtrrLib from MtrrLib in UefiCpuPkg 5) Convert all UNI files to utf-8 6) Replace tabs with spaces and remove trailing spaces 7) Add License.txt Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Michael Kinney <michael.d.kinney@intel.com> Acked-by: Jordan Justen <jordan.l.justen@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19286 6f19259b-4bc3-4df7-8a09-765794883524
221 lines
6.2 KiB
C
221 lines
6.2 KiB
C
/** @file
|
|
Provides definition of entry point to the common I2C module that produces
|
|
common I2C Controller functions used by I2C library services.
|
|
|
|
|
|
Copyright (c) 2013-2015 Intel Corporation.
|
|
|
|
This program and the accompanying materials
|
|
are licensed and made available under the terms and conditions of the BSD License
|
|
which 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 _I2CCOMMON_H_
|
|
#define _I2CCOMMON_H_
|
|
|
|
#include <Uefi.h>
|
|
#include <Base.h>
|
|
|
|
#include <Library/DebugLib.h>
|
|
#include <Library/TimerLib.h>
|
|
#include <Library/I2cLib.h>
|
|
#include <IohAccess.h>
|
|
#include <IohCommonDefinitions.h>
|
|
#include "I2cRegs.h"
|
|
|
|
//
|
|
// Constants that define I2C Controller timeout and max. polling time.
|
|
//
|
|
#define MAX_T_POLL_COUNT 100
|
|
#define TI2C_POLL 25 // microseconds
|
|
#define MAX_STOP_DET_POLL_COUNT ((1000 * 1000) / TI2C_POLL) // Extreme for expected Stop detect.
|
|
|
|
/**
|
|
The GetI2CIoPortBaseAddress() function gets IO port base address of I2C Controller.
|
|
|
|
Always reads PCI configuration space to get MMIO base address of I2C Controller.
|
|
|
|
@return The IO port base address of I2C controller.
|
|
|
|
**/
|
|
UINTN
|
|
GetI2CIoPortBaseAddress (
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
The EnableI2CMmioSpace() function enables access to I2C MMIO space.
|
|
|
|
**/
|
|
VOID
|
|
EnableI2CMmioSpace (
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
The DisableI2CController() functions disables I2C Controller.
|
|
|
|
**/
|
|
VOID
|
|
DisableI2CController (
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
The EnableI2CController() function enables the I2C Controller.
|
|
|
|
**/
|
|
VOID
|
|
EnableI2CController (
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
The WaitForStopDet() function waits until I2C STOP Condition occurs,
|
|
indicating transfer completion.
|
|
|
|
@retval EFI_SUCCESS Stop detected.
|
|
@retval EFI_TIMEOUT Timeout while waiting for stop condition.
|
|
@retval EFI_ABORTED Tx abort signaled in HW status register.
|
|
@retval EFI_DEVICE_ERROR Tx or Rx overflow detected.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
WaitForStopDet (
|
|
VOID
|
|
);
|
|
|
|
/**
|
|
|
|
The InitializeInternal() function initialises internal I2C Controller
|
|
register values that are commonly required for I2C Write and Read transfers.
|
|
|
|
@param AddrMode I2C Addressing Mode: 7-bit or 10-bit address.
|
|
|
|
@retval EFI_SUCCESS I2C Operation completed successfully.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
InitializeInternal (
|
|
IN EFI_I2C_ADDR_MODE AddrMode
|
|
);
|
|
|
|
/**
|
|
|
|
The WriteByte() function provides a standard way to execute a
|
|
standard single byte write to an IC2 device (without accessing
|
|
sub-addresses), as defined in the I2C Specification.
|
|
|
|
@param I2CAddress I2C Slave device address
|
|
@param Value The 8-bit value to write.
|
|
|
|
@retval EFI_SUCCESS Transfer success.
|
|
@retval EFI_UNSUPPORTED Unsupported input param.
|
|
@retval EFI_TIMEOUT Timeout while waiting xfer.
|
|
@retval EFI_ABORTED Controller aborted xfer.
|
|
@retval EFI_DEVICE_ERROR Device error detected by controller.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
WriteByte (
|
|
IN UINTN I2CAddress,
|
|
IN UINT8 Value
|
|
);
|
|
|
|
/**
|
|
|
|
The ReadByte() function provides a standard way to execute a
|
|
standard single byte read to an IC2 device (without accessing
|
|
sub-addresses), as defined in the I2C Specification.
|
|
|
|
@param I2CAddress I2C Slave device address
|
|
@param ReturnDataPtr Pointer to location to receive read byte.
|
|
|
|
@retval EFI_SUCCESS Transfer success.
|
|
@retval EFI_UNSUPPORTED Unsupported input param.
|
|
@retval EFI_TIMEOUT Timeout while waiting xfer.
|
|
@retval EFI_ABORTED Controller aborted xfer.
|
|
@retval EFI_DEVICE_ERROR Device error detected by controller.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
ReadByte (
|
|
IN UINTN I2CAddress,
|
|
OUT UINT8 *ReturnDataPtr
|
|
);
|
|
|
|
/**
|
|
|
|
The WriteMultipleByte() function provides a standard way to execute
|
|
multiple byte writes to an IC2 device (e.g. when accessing sub-addresses or
|
|
when writing block of data), as defined in the I2C Specification.
|
|
|
|
@param I2CAddress The I2C slave address of the device
|
|
with which to communicate.
|
|
|
|
@param WriteBuffer Contains the value of byte to be written to the
|
|
I2C slave device.
|
|
|
|
@param Length No. of bytes to be written.
|
|
|
|
@retval EFI_SUCCESS Transfer success.
|
|
@retval EFI_UNSUPPORTED Unsupported input param.
|
|
@retval EFI_TIMEOUT Timeout while waiting xfer.
|
|
@retval EFI_ABORTED Tx abort signaled in HW status register.
|
|
@retval EFI_DEVICE_ERROR Tx overflow detected.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
WriteMultipleByte (
|
|
IN UINTN I2CAddress,
|
|
IN UINT8 *WriteBuffer,
|
|
IN UINTN Length
|
|
);
|
|
|
|
/**
|
|
|
|
The ReadMultipleByte() function provides a standard way to execute
|
|
multiple byte writes to an IC2 device (e.g. when accessing sub-addresses or
|
|
when reading block of data), as defined in the I2C Specification (I2C combined
|
|
write/read protocol).
|
|
|
|
@param I2CAddress The I2C slave address of the device
|
|
with which to communicate.
|
|
|
|
@param Buffer Contains the value of byte data written or read from the
|
|
I2C slave device.
|
|
|
|
@param WriteLength No. of bytes to be written. In this case data
|
|
written typically contains sub-address or sub-addresses
|
|
in Hi-Lo format, that need to be read (I2C combined
|
|
write/read protocol).
|
|
|
|
@param ReadLength No. of bytes to be read from I2C slave device.
|
|
|
|
@retval EFI_SUCCESS Transfer success.
|
|
@retval EFI_UNSUPPORTED Unsupported input param.
|
|
@retval EFI_TIMEOUT Timeout while waiting xfer.
|
|
@retval EFI_ABORTED Tx abort signaled in HW status register.
|
|
@retval EFI_DEVICE_ERROR Rx underflow or Rx/Tx overflow detected.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
ReadMultipleByte (
|
|
IN UINTN I2CAddress,
|
|
IN OUT UINT8 *Buffer,
|
|
IN UINTN WriteLength,
|
|
IN UINTN ReadLength
|
|
);
|
|
|
|
#endif
|