Initial import.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
bbahnsen
2006-04-21 22:54:32 +00:00
commit 878ddf1fc3
2651 changed files with 624620 additions and 0 deletions

View File

@@ -0,0 +1,112 @@
/** @file
Internal header file for Smbus library.
Copyright (c) 2006, Intel Corporation<BR>
All rights reserved. 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.
Module Name: SmbusLib.c
**/
#ifndef __INTERNAL_SMBUS_LIB_H
#define __INTERNAL_SMBUS_LIB_H
#define SMBUS_LIB_PEC(SmBusAddress) ((BOOLEAN) ((SmBusAddress) & 0x01))
#define SMBUS_LIB_SLAVE_ADDRESS(SmBusAddress) (((SmBusAddress) >> 1) & 0x7f)
#define SMBUS_LIB_COMMAND(SmBusAddress) (((SmBusAddress) >> 8) & 0xff)
#define SMBUS_LIB_LENGTH(SmBusAddress) (((SmBusAddress) >> 16) & 0x1f)
#define SMBUS_LIB_RESEARVED(SmBusAddress) (((SmBusAddress) >> 21))
//
// Declaration for internal functions
//
/**
Executes an SMBus operation to an SMBus controller.
This function provides a standard way to execute Smbus script
as defined in the SmBus Specification. The data can either be of
the Length byte, word, or a block of data.
@param SmbusOperation Signifies which particular SMBus hardware protocol instance that it will use to
execute the SMBus transactions.
@param SmBusAddress Address that encodes the SMBUS Slave Address,
SMBUS Command, SMBUS Data Length, and PEC.
@param Length Signifies the number of bytes that this operation will do. The maximum number of
bytes can be revision specific and operation specific.
@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.
@param Status Return status for the executed command.
This is an optional parameter and may be NULL.
@return The actual number of bytes that are executed for this operation..
**/
UINTN
InternalSmBusExec (
IN EFI_SMBUS_OPERATION SmbusOperation,
IN UINTN SmBusAddress,
IN UINTN Length,
IN VOID *Buffer,
OUT RETURN_STATUS *Status OPTIONAL
);
/**
Assigns an SMBUS slave addresses.
Assigns the SMBUS device specified by Uuid the slave address specified by SmBusAddress.
The status of the executed command is returned.
If Command in SmBusAddress is not zero, then ASSERT().
If Length in SmBusAddress is not zero, then ASSERT().
If PEC in SmBusAddress is set, then ASSERT().
If any reserved bits of SmBusAddress are set, then ASSERT().
@param SmBusAddress Address that encodes the SMBUS Slave Address,
SMBUS Command, SMBUS Data Length, and PEC.
@param Uuid Pointer to the UUID of the device to assign a slave address.
It will assign to all SMBUS slave devices if it is NULL.
@retval RETURN_SUCCESS The SMBUS command was executed.
@retval RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
@retval RETURN_DEVICE_ERROR The request was not completed because a failure 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).
**/
RETURN_STATUS
InternalSmBusArpDevice (
IN UINTN SmBusAddress,
IN CONST GUID *Uuid OPTIONAL
);
/**
Retrieves the mapping of all the SMBus devices.
The GetArpMap() function returns the mapping of all the SMBus devices
that are enumerated by the SMBus host driver.
@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 RETURN_SUCCESS The SMBUS command was executed.
@retval RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
@retval RETURN_DEVICE_ERROR The request was not completed because a failure 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).
**/
RETURN_STATUS
InternalGetArpMap (
OUT UINTN *Length,
OUT EFI_SMBUS_DEVICE_MAP **SmbusDeviceMap
);
#endif

View File

@@ -0,0 +1,177 @@
/** @file
Implementation of SmBusLib class library for PEI phase.
Copyright (c) 2006, Intel Corporation<BR>
All rights reserved. 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.
Module Name: PeiSmbusLib.c
**/
#include "InternalSmbusLib.h"
/**
Gets Smbus PPIs.
This internal function retrieves Smbus PPI from PPI database.
@param PeiServices An indirect pointer to the EFI_PEI_SERVICES published by the PEI Foundation.
@return The pointer to Smbus PPI.
**/
EFI_PEI_SMBUS_PPI *
InternalGetSmbusPpi (
EFI_PEI_SERVICES **PeiServices
)
{
EFI_STATUS Status;
EFI_PEI_SMBUS_PPI *SmbusPpi;
Status = (*PeiServices)->LocatePpi (PeiServices, &gEfiPeiSmbusPpiGuid, 0, NULL, (VOID **) &SmbusPpi);
ASSERT_EFI_ERROR (Status);
ASSERT (SmbusPpi != NULL);
return SmbusPpi;
}
/**
Executes an SMBus operation to an SMBus controller.
This function provides a standard way to execute Smbus script
as defined in the SmBus Specification. The data can either be of
the Length byte, word, or a block of data.
@param SmbusOperation Signifies which particular SMBus hardware protocol instance that it will use to
execute the SMBus transactions.
@param SmBusAddress Address that encodes the SMBUS Slave Address,
SMBUS Command, SMBUS Data Length, and PEC.
@param Length Signifies the number of bytes that this operation will do. The maximum number of
bytes can be revision specific and operation specific.
@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.
@param Status Return status for the executed command.
This is an optional parameter and may be NULL.
@return The actual number of bytes that are executed for this operation..
**/
UINTN
InternalSmBusExec (
IN EFI_SMBUS_OPERATION SmbusOperation,
IN UINTN SmBusAddress,
IN UINTN Length,
IN VOID *Buffer,
OUT RETURN_STATUS *Status OPTIONAL
)
{
EFI_PEI_SMBUS_PPI *SmbusPpi;
EFI_PEI_SERVICES **PeiServices;
RETURN_STATUS ReturnStatus;
EFI_SMBUS_DEVICE_ADDRESS SmbusDeviceAddress;
PeiServices = GetPeiServicesTablePointer ();
SmbusPpi = InternalGetSmbusPpi (PeiServices);
SmbusDeviceAddress.SmbusDeviceAddress = SMBUS_LIB_SLAVE_ADDRESS (SmBusAddress);
ReturnStatus = SmbusPpi->Execute (
PeiServices,
SmbusPpi,
SmbusDeviceAddress,
SMBUS_LIB_COMMAND (SmBusAddress),
SmbusOperation,
SMBUS_LIB_PEC (SmBusAddress),
&Length,
Buffer
);
if (Status != NULL) {
*Status = ReturnStatus;
}
return Length;
}
/**
Assigns an SMBUS slave addresses.
Assigns the SMBUS device specified by Uuid the slave address specified by SmBusAddress.
The status of the executed command is returned.
If Command in SmBusAddress is not zero, then ASSERT().
If Length in SmBusAddress is not zero, then ASSERT().
If PEC in SmBusAddress is set, then ASSERT().
If any reserved bits of SmBusAddress are set, then ASSERT().
@param SmBusAddress Address that encodes the SMBUS Slave Address,
SMBUS Command, SMBUS Data Length, and PEC.
@param Uuid Pointer to the UUID of the device to assign a slave address.
It will assign to all SMBUS slave devices if it is NULL.
@retval RETURN_SUCCESS The SMBUS command was executed.
@retval RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
@retval RETURN_DEVICE_ERROR The request was not completed because a failure 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).
**/
RETURN_STATUS
InternalSmBusArpDevice (
IN UINTN SmBusAddress,
IN CONST GUID *Uuid OPTIONAL
)
{
EFI_PEI_SMBUS_PPI *SmbusPpi;
EFI_PEI_SERVICES **PeiServices;
EFI_SMBUS_DEVICE_ADDRESS SmbusDeviceAddress;
PeiServices = GetPeiServicesTablePointer ();
SmbusPpi = InternalGetSmbusPpi (PeiServices);
SmbusDeviceAddress.SmbusDeviceAddress = SMBUS_LIB_SLAVE_ADDRESS (SmBusAddress);
return (RETURN_STATUS) SmbusPpi->ArpDevice (
PeiServices,
SmbusPpi,
(BOOLEAN) (Uuid == NULL),
(EFI_SMBUS_UDID *) Uuid,
&SmbusDeviceAddress
);
}
/**
Retrieves the mapping of all the SMBus devices.
The GetArpMap() function returns the mapping of all the SMBus devices
that are enumerated by the SMBus host driver.
@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 RETURN_SUCCESS The SMBUS command was executed.
@retval RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
@retval RETURN_DEVICE_ERROR The request was not completed because a failure 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).
**/
RETURN_STATUS
InternalGetArpMap (
OUT UINTN *Length,
OUT EFI_SMBUS_DEVICE_MAP **SmbusDeviceMap
)
{
EFI_PEI_SMBUS_PPI *SmbusPpi;
EFI_PEI_SERVICES **PeiServices;
PeiServices = GetPeiServicesTablePointer ();
SmbusPpi = InternalGetSmbusPpi (PeiServices);
return (RETURN_STATUS) SmbusPpi->GetArpMap (PeiServices, SmbusPpi, Length, SmbusDeviceMap);
}

View File

@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 2006, Intel Corporation
All rights reserved. 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.
-->
<LibraryModuleBuildDescription xmlns="http://www.TianoCore.org/2006/Edk2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.TianoCore.org/2006/Edk2.0 http://www.TianoCore.org/2006/Edk2.0/SurfaceArea.xsd">
<MbdLibHeader>
<BaseName>PeiSmbusLib</BaseName>
<Guid>56E800D9-7603-4e01-9581-1FFB9E98F5BE</Guid>
<Version>0</Version>
<Description>FIX ME!</Description>
<Copyright>Copyright (c) 2006, Intel Corporation</Copyright>
<License>
All rights reserved. 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.
</License>
<Created>2006-04-17 22:30</Created>
<Modified>2006-04-17 22:30</Modified>
</MbdLibHeader>
</LibraryModuleBuildDescription>

View File

@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 2006, Intel Corporation
All rights reserved. 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.
-->
<LibraryModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.TianoCore.org/2006/Edk2.0 http://www.TianoCore.org/2006/Edk2.0/SurfaceArea.xsd">
<MsaLibHeader>
<BaseName>PeiSmbusLib</BaseName>
<ModuleType>PEIM</ModuleType>
<ComponentType>LIBRARY</ComponentType>
<Guid>51C4C059-67F0-4e3c-9A55-FF42A8291C8C</Guid>
<Version>0</Version>
<Abstract>SmBus Library Instance implemented with SmBus PPI.</Abstract>
<Description>FIX ME!</Description>
<Copyright>Copyright (c) 2006, Intel Corporation</Copyright>
<License>
All rights reserved. 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.
</License>
<Specification>EFI_SPECIFICATION_VERSION 0x00000000</Specification>
<Created>2006-04-17 22:30</Created>
<Updated>2006-04-17 22:30</Updated>
</MsaLibHeader>
<LibraryClassDefinitions>
<LibraryClass Usage="ALWAYS_PRODUCED">SmbusLib</LibraryClass>
<LibraryClass Usage="ALWAYS_CONSUMED">PeimEntryPoint</LibraryClass>
<LibraryClass Usage="ALWAYS_CONSUMED">DebugLib</LibraryClass>
<LibraryClass Usage="ALWAYS_CONSUMED">PeiServicesTablePointerLib</LibraryClass>
<LibraryClass Usage="ALWAYS_CONSUMED">BaseMemoryLib</LibraryClass>
</LibraryClassDefinitions>
<SourceFiles>
<Filename>PeiSmbusLib.c</Filename>
<Filename>SmbusLib.c</Filename>
</SourceFiles>
<Includes>
<PackageName>MdePkg</PackageName>
</Includes>
<PPIs>
<Ppi Usage="ALWAYS_CONSUMED">Smbus</Ppi>
</PPIs>
</LibraryModuleSurfaceArea>

View File

@@ -0,0 +1,597 @@
/** @file
Implementation of SmBusLib class library for PEI phase.
Copyright (c) 2006, Intel Corporation<BR>
All rights reserved. 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.
Module Name: SmbusLib.c
**/
#include "InternalSmbusLib.h"
/**
Executes an SMBUS quick read command.
Executes an SMBUS quick read command on the SMBUS device specified by SmBusAddress.
Only the SMBUS slave address field of SmBusAddress is required.
If Status is not NULL, then the status of the executed command is returned in Status.
If PEC is set in SmBusAddress, then ASSERT().
If Command in SmBusAddress is not zero, then ASSERT().
If Length in SmBusAddress is not zero, then ASSERT().
If any reserved bits of SmBusAddress are set, then ASSERT().
@param SmBusAddress Address that encodes the SMBUS Slave Address,
SMBUS Command, SMBUS Data Length, and PEC.
@param Status Return status for the executed command.
This is an optional parameter and may be NULL.
**/
VOID
EFIAPI
SmBusQuickRead (
IN UINTN SmBusAddress,
OUT RETURN_STATUS *Status OPTIONAL
)
{
ASSERT (!SMBUS_LIB_PEC (SmBusAddress));
ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
InternalSmBusExec (EfiSmbusQuickRead, SmBusAddress, 0, NULL, Status);
}
/**
Executes an SMBUS quick write command.
Executes an SMBUS quick write command on the SMBUS device specified by SmBusAddress.
Only the SMBUS slave address field of SmBusAddress is required.
If Status is not NULL, then the status of the executed command is returned in Status.
If PEC is set in SmBusAddress, then ASSERT().
If Command in SmBusAddress is not zero, then ASSERT().
If Length in SmBusAddress is not zero, then ASSERT().
If any reserved bits of SmBusAddress are set, then ASSERT().
@param SmBusAddress Address that encodes the SMBUS Slave Address,
SMBUS Command, SMBUS Data Length, and PEC.
@param Status Return status for the executed command.
This is an optional parameter and may be NULL.
**/
BOOLEAN
EFIAPI
SmBusQuickWrite (
IN UINTN SmBusAddress,
OUT RETURN_STATUS *Status OPTIONAL
)
{
ASSERT (!SMBUS_LIB_PEC (SmBusAddress));
ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
InternalSmBusExec (EfiSmbusQuickWrite, SmBusAddress, 0, NULL, Status);
//
// Bugbug: Undefined return value in spec
//
return TRUE;
}
/**
Executes an SMBUS receive byte command.
Executes an SMBUS receive byte command on the SMBUS device specified by SmBusAddress.
Only the SMBUS slave address field of SmBusAddress is required.
The byte received from the SMBUS is returned.
If Status is not NULL, then the status of the executed command is returned in Status.
If Command in SmBusAddress is not zero, then ASSERT().
If Length in SmBusAddress is not zero, then ASSERT().
If any reserved bits of SmBusAddress are set, then ASSERT().
@param SmBusAddress Address that encodes the SMBUS Slave Address,
SMBUS Command, SMBUS Data Length, and PEC.
@param Status Return status for the executed command.
This is an optional parameter and may be NULL.
@return The byte received from the SMBUS.
**/
UINT8
EFIAPI
SmBusReceiveByte (
IN UINTN SmBusAddress,
OUT RETURN_STATUS *Status OPTIONAL
)
{
UINT8 Byte;
ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
InternalSmBusExec (EfiSmbusReceiveByte, SmBusAddress, 1, &Byte, Status);
return Byte;
}
/**
Executes an SMBUS send byte command.
Executes an SMBUS send byte command on the SMBUS device specified by SmBusAddress.
The byte specified by Value is sent.
Only the SMBUS slave address field of SmBusAddress is required. Value is returned.
If Status is not NULL, then the status of the executed command is returned in Status.
If Command in SmBusAddress is not zero, then ASSERT().
If Length in SmBusAddress is not zero, then ASSERT().
If any reserved bits of SmBusAddress are set, then ASSERT().
@param SmBusAddress Address that encodes the SMBUS Slave Address,
SMBUS Command, SMBUS Data Length, and PEC.
@param Value The 8-bit value to send.
@param Status Return status for the executed command.
This is an optional parameter and may be NULL.
@return The parameter of Value.
**/
UINT8
EFIAPI
SmBusSendByte (
IN UINTN SmBusAddress,
IN UINT8 Value,
OUT RETURN_STATUS *Status OPTIONAL
)
{
UINT8 Byte;
ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
Byte = Value;
InternalSmBusExec (EfiSmbusSendByte, SmBusAddress, 1, &Byte, Status);
return Value;
}
/**
Executes an SMBUS read data byte command.
Executes an SMBUS read data byte command on the SMBUS device specified by SmBusAddress.
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
The 8-bit value read from the SMBUS is returned.
If Status is not NULL, then the status of the executed command is returned in Status.
If Length in SmBusAddress is not zero, then ASSERT().
If any reserved bits of SmBusAddress are set, then ASSERT().
@param SmBusAddress Address that encodes the SMBUS Slave Address,
SMBUS Command, SMBUS Data Length, and PEC.
@param Status Return status for the executed command.
This is an optional parameter and may be NULL.
@return The byte read from the SMBUS.
**/
UINT8
EFIAPI
SmBusReadDataByte (
IN UINTN SmBusAddress,
OUT RETURN_STATUS *Status OPTIONAL
)
{
UINT8 Byte;
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
InternalSmBusExec (EfiSmbusReadByte, SmBusAddress, 1, &Byte, Status);
return Byte;
}
/**
Executes an SMBUS write data byte command.
Executes an SMBUS write data byte command on the SMBUS device specified by SmBusAddress.
The 8-bit value specified by Value is written.
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
Value is returned.
If Status is not NULL, then the status of the executed command is returned in Status.
If Length in SmBusAddress is not zero, then ASSERT().
If any reserved bits of SmBusAddress are set, then ASSERT().
@param SmBusAddress Address that encodes the SMBUS Slave Address,
SMBUS Command, SMBUS Data Length, and PEC.
@param Value The 8-bit value to write.
@param Status Return status for the executed command.
This is an optional parameter and may be NULL.
@return The parameter of Value.
**/
UINT8
EFIAPI
SmBusWriteDataByte (
IN UINTN SmBusAddress,
IN UINT8 Value,
OUT RETURN_STATUS *Status OPTIONAL
)
{
UINT8 Byte;
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
Byte = Value;
InternalSmBusExec (EfiSmbusWriteByte, SmBusAddress, 1, &Byte, Status);
return Value;
}
/**
Executes an SMBUS read data word command.
Executes an SMBUS read data word command on the SMBUS device specified by SmBusAddress.
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
The 16-bit value read from the SMBUS is returned.
If Status is not NULL, then the status of the executed command is returned in Status.
If Length in SmBusAddress is not zero, then ASSERT().
If any reserved bits of SmBusAddress are set, then ASSERT().
@param SmBusAddress Address that encodes the SMBUS Slave Address,
SMBUS Command, SMBUS Data Length, and PEC.
@param Status Return status for the executed command.
This is an optional parameter and may be NULL.
@return The byte read from the SMBUS.
**/
UINT16
EFIAPI
SmBusReadDataWord (
IN UINTN SmBusAddress,
OUT RETURN_STATUS *Status OPTIONAL
)
{
UINT16 Word;
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
InternalSmBusExec (EfiSmbusReadWord, SmBusAddress, 2, &Word, Status);
return Word;
}
/**
Executes an SMBUS write data word command.
Executes an SMBUS write data word command on the SMBUS device specified by SmBusAddress.
The 16-bit value specified by Value is written.
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
Value is returned.
If Status is not NULL, then the status of the executed command is returned in Status.
If Length in SmBusAddress is not zero, then ASSERT().
If any reserved bits of SmBusAddress are set, then ASSERT().
@param SmBusAddress Address that encodes the SMBUS Slave Address,
SMBUS Command, SMBUS Data Length, and PEC.
@param Value The 16-bit value to write.
@param Status Return status for the executed command.
This is an optional parameter and may be NULL.
@return The parameter of Value.
**/
UINT16
EFIAPI
SmBusWriteDataWord (
IN UINTN SmBusAddress,
IN UINT16 Value,
OUT RETURN_STATUS *Status OPTIONAL
)
{
UINT16 Word;
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
Word = Value;
InternalSmBusExec (EfiSmbusWriteWord, SmBusAddress, 2, &Word, Status);
return Value;
}
/**
Executes an SMBUS process call command.
Executes an SMBUS process call command on the SMBUS device specified by SmBusAddress.
The 16-bit value specified by Value is written.
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
The 16-bit value returned by the process call command is returned.
If Status is not NULL, then the status of the executed command is returned in Status.
If Length in SmBusAddress is not zero, then ASSERT().
If any reserved bits of SmBusAddress are set, then ASSERT().
@param SmBusAddress Address that encodes the SMBUS Slave Address,
SMBUS Command, SMBUS Data Length, and PEC.
@param Value The 16-bit value to write.
@param Status Return status for the executed command.
This is an optional parameter and may be NULL.
@return The 16-bit value returned by the process call command.
**/
UINT16
EFIAPI
SmBusProcessCall (
IN UINTN SmBusAddress,
IN UINT16 Value,
OUT RETURN_STATUS *Status OPTIONAL
)
{
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
InternalSmBusExec (EfiSmbusProcessCall, SmBusAddress, 2, &Value, Status);
return Value;
}
/**
Executes an SMBUS read block command.
Executes an SMBUS read block command on the SMBUS device specified by SmBusAddress.
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
Bytes are read from the SMBUS and stored in Buffer.
The number of bytes read is returned, and will never return a value larger than 32-bytes.
If Status is not NULL, then the status of the executed command is returned in Status.
It is the caller<65><72>s responsibility to make sure Buffer is large enough for the total number of bytes read.
SMBUS supports a maximum transfer size of 32 bytes, so Buffer does not need to be any larger than 32 bytes.
If Length in SmBusAddress is not zero, then ASSERT().
If Buffer is NULL, then ASSERT().
If any reserved bits of SmBusAddress are set, then ASSERT().
@param SmBusAddress Address that encodes the SMBUS Slave Address,
SMBUS Command, SMBUS Data Length, and PEC.
@param Buffer Pointer to the buffer to store the bytes read from the SMBUS.
@param Status Return status for the executed command.
This is an optional parameter and may be NULL.
@return The number of bytes read.
**/
UINTN
EFIAPI
SmBusReadBlock (
IN UINTN SmBusAddress,
OUT VOID *Buffer,
OUT RETURN_STATUS *Status OPTIONAL
)
{
ASSERT (Buffer != NULL);
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
return InternalSmBusExec (EfiSmbusReadBlock, SmBusAddress, 0x1f, Buffer, Status);
}
/**
Executes an SMBUS write block command.
Executes an SMBUS write block command on the SMBUS device specified by SmBusAddress.
The SMBUS slave address, SMBUS command, and SMBUS length fields of SmBusAddress are required.
Bytes are written to the SMBUS from Buffer.
The number of bytes written is returned, and will never return a value larger than 32-bytes.
If Status is not NULL, then the status of the executed command is returned in Status.
If Length in SmBusAddress is zero or greater than 32, then ASSERT().
If Buffer is NULL, then ASSERT().
If any reserved bits of SmBusAddress are set, then ASSERT().
@param SmBusAddress Address that encodes the SMBUS Slave Address,
SMBUS Command, SMBUS Data Length, and PEC.
@param Buffer Pointer to the buffer to store the bytes read from the SMBUS.
@param Status Return status for the executed command.
This is an optional parameter and may be NULL.
@return The number of bytes written.
**/
UINTN
EFIAPI
SmBusWriteBlock (
IN UINTN SmBusAddress,
OUT VOID *Buffer,
OUT RETURN_STATUS *Status OPTIONAL
)
{
ASSERT (Buffer != NULL);
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
return InternalSmBusExec (EfiSmbusWriteBlock, SmBusAddress, SMBUS_LIB_LENGTH (SmBusAddress), Buffer, Status);
}
/**
Executes an SMBUS block process call command.
Executes an SMBUS block process call command on the SMBUS device specified by SmBusAddress.
The SMBUS slave address, SMBUS command, and SMBUS length fields of SmBusAddress are required.
Bytes are written to the SMBUS from OutBuffer. Bytes are then read from the SMBUS into InBuffer.
If Status is not NULL, then the status of the executed command is returned in Status.
It is the caller<65><72>s responsibility to make sure InBuffer is large enough for the total number of bytes read.
SMBUS supports a maximum transfer size of 32 bytes, so Buffer does not need to be any larger than 32 bytes.
If OutBuffer is NULL, then ASSERT().
If InBuffer is NULL, then ASSERT().
If any reserved bits of SmBusAddress are set, then ASSERT().
@param SmBusAddress Address that encodes the SMBUS Slave Address,
SMBUS Command, SMBUS Data Length, and PEC.
@param OutBuffer Pointer to the buffer of bytes to write to the SMBUS.
@param InBuffer Pointer to the buffer of bytes to read from the SMBUS.
@param Status Return status for the executed command.
This is an optional parameter and may be NULL.
@return The number of bytes written.
**/
UINTN
EFIAPI
SmBusBlockProcessCall (
IN UINTN SmBusAddress,
OUT VOID *OutBuffer,
OUT VOID *InBuffer,
OUT RETURN_STATUS *Status OPTIONAL
)
{
ASSERT (InBuffer != NULL);
ASSERT (OutBuffer != NULL);
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
//
// BugBug: Not sure whether it's all right.
//
InternalSmBusExec (EfiSmbusWriteBlock, SmBusAddress, SMBUS_LIB_LENGTH (SmBusAddress), OutBuffer, Status);
return InternalSmBusExec (EfiSmbusReadBlock, SmBusAddress, 1, InBuffer, Status);
}
/**
Enumerates the SMBUS and assigns slave addresses.
Executes the SMBUS enumeration algorithm and assigns a valid address to all SMBUS slave devices.
The total number of SMBUS slave devices detected is returned.
The status of the executed command is returned.
If Slave Address in SmBusAddress is not zero, then ASSERT().
If Command in SmBusAddress is not zero, then ASSERT().
If Length in SmBusAddress is not zero, then ASSERT().
If PEC in SmBusAddress is set, then ASSERT().
If any reserved bits of SmBusAddress are set, then ASSERT().
@param SmBusAddress Address that encodes the SMBUS Slave Address,
SMBUS Command, SMBUS Data Length, and PEC.
@retval RETURN_SUCCESS The SMBUS command was executed.
@retval RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
@retval RETURN_DEVICE_ERROR The request was not completed because a failure 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).
**/
RETURN_STATUS
EFIAPI
SmBusArpAll (
IN UINTN SmBusAddress
)
{
ASSERT (!SMBUS_LIB_PEC (SmBusAddress));
ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
ASSERT (SMBUS_LIB_SLAVE_ADDRESS (SmBusAddress) == 0);
return InternalSmBusArpDevice (SmBusAddress, NULL);
}
/**
Assigns an SMBUS slave addresses.
Assigns the SMBUS device specified by Uuid the slave address specified by SmBusAddress.
The status of the executed command is returned.
If Command in SmBusAddress is not zero, then ASSERT().
If Length in SmBusAddress is not zero, then ASSERT().
If PEC in SmBusAddress is set, then ASSERT().
If any reserved bits of SmBusAddress are set, then ASSERT().
@param SmBusAddress Address that encodes the SMBUS Slave Address,
SMBUS Command, SMBUS Data Length, and PEC.
@param Uuid Pointer to the UUID of the device to assign a slave address.
@retval RETURN_SUCCESS The SMBUS command was executed.
@retval RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
@retval RETURN_DEVICE_ERROR The request was not completed because a failure 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).
**/
RETURN_STATUS
EFIAPI
SmBusArpDevice (
IN UINTN SmBusAddress,
IN CONST GUID *Uuid
)
{
ASSERT (!SMBUS_LIB_PEC (SmBusAddress));
ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
return InternalSmBusArpDevice (SmBusAddress, Uuid);
}
/**
Retrieves the UUID associated with an SMBUS slave device.
Retrieves the UUID associated with the slave address specified
by SmBusAddress and returns the UUID in Uuid.
The status of the executed command is returned.
If Command in SmBusAddress is not zero, then ASSERT().
If Length in SmBusAddress is not zero, then ASSERT().
If PEC in SmBusAddress is set, then ASSERT().
If Uuid is NULL, then ASSERT().
If any reserved bits of SmBusAddress are set, then ASSERT().
@param SmBusAddress Address that encodes the SMBUS Slave Address,
SMBUS Command, SMBUS Data Length, and PEC.
@param Uuid Pointer to the UUID retrieved from the SMBUS slave device.
@retval RETURN_SUCCESS The SMBUS command was executed.
@retval RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.
@retval RETURN_DEVICE_ERROR The request was not completed because a failure 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).
**/
RETURN_STATUS
EFIAPI
SmBusGetUuid (
IN UINTN SmBusAddress,
OUT GUID *Uuid
)
{
UINTN Length;
EFI_SMBUS_DEVICE_MAP *SmBusDeviceMap;
RETURN_STATUS ReturnStatus;
UINTN SmbusDeviceAddress;
UINTN Index;
ASSERT (Uuid != NULL);
ASSERT (!SMBUS_LIB_PEC (SmBusAddress));
ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
ReturnStatus = InternalGetArpMap (&Length, &SmBusDeviceMap);
if (!RETURN_ERROR (ReturnStatus)) {
SmbusDeviceAddress = SMBUS_LIB_SLAVE_ADDRESS (SmBusAddress);
for (Index = 0; Index < Length; Index++) {
if (SmBusDeviceMap[Index].SmbusDeviceAddress.SmbusDeviceAddress == SmbusDeviceAddress) {
CopyMem (Uuid, &SmBusDeviceMap[Index].SmbusDeviceUdid, sizeof (EFI_SMBUS_UDID));
break;
}
}
}
return ReturnStatus;
}

View File

@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?><!-- Copyright (c) 2006, Intel Corporation
All rights reserved. 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.-->
<project basedir="." default="PeiSmbusLib"><!--Apply external ANT tasks-->
<taskdef resource="GenBuild.tasks"/>
<taskdef resource="net/sf/antcontrib/antlib.xml"/>
<property environment="env"/>
<property name="WORKSPACE_DIR" value="${env.WORKSPACE}"/>
<import file="${WORKSPACE_DIR}\Tools\Conf\BuildMacro.xml"/><!--MODULE_RELATIVE PATH is relative to PACKAGE_DIR-->
<property name="MODULE_RELATIVE_PATH" value="Library\PeiSmbusLib"/>
<property name="MODULE_DIR" value="${PACKAGE_DIR}\${MODULE_RELATIVE_PATH}"/>
<property name="COMMON_FILE" value="${WORKSPACE_DIR}\Tools\Conf\Common.xml"/>
<target name="PeiSmbusLib">
<GenBuild baseName="PeiSmbusLib" mbdFilename="${MODULE_DIR}\PeiSmbusLib.mbd" msaFilename="${MODULE_DIR}\PeiSmbusLib.msa"/>
</target>
<target depends="PeiSmbusLib_clean" name="clean"/>
<target depends="PeiSmbusLib_cleanall" name="cleanall"/>
<target name="PeiSmbusLib_clean">
<OutputDirSetup baseName="PeiSmbusLib" mbdFilename="${MODULE_DIR}\PeiSmbusLib.mbd" msaFilename="${MODULE_DIR}\PeiSmbusLib.msa"/>
<if>
<available file="${DEST_DIR_OUTPUT}\PeiSmbusLib_build.xml"/>
<then>
<ant antfile="${DEST_DIR_OUTPUT}\PeiSmbusLib_build.xml" target="clean"/>
</then>
</if>
<delete dir="${DEST_DIR_OUTPUT}" excludes="*.xml"/>
</target>
<target name="PeiSmbusLib_cleanall">
<OutputDirSetup baseName="PeiSmbusLib" mbdFilename="${MODULE_DIR}\PeiSmbusLib.mbd" msaFilename="${MODULE_DIR}\PeiSmbusLib.msa"/>
<if>
<available file="${DEST_DIR_OUTPUT}\PeiSmbusLib_build.xml"/>
<then>
<ant antfile="${DEST_DIR_OUTPUT}\PeiSmbusLib_build.xml" target="cleanall"/>
</then>
</if>
<delete dir="${DEST_DIR_OUTPUT}"/>
<delete dir="${DEST_DIR_DEBUG}"/>
<delete>
<fileset dir="${BIN_DIR}" includes="**PeiSmbusLib*"/>
</delete>
</target>
</project>