/** @file\r
- SMBUS Functions\r
+ Provides library functions to access SMBUS devices. Libraries of this class\r
+ must be ported to a specific SMBUS controller.\r
\r
- Copyright (c) 2006, Intel Corporation\r
- All rights reserved. This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php\r
+Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution. The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
\r
**/\r
\r
#ifndef __SMBUS_LIB__\r
#define __SMBUS_LIB__\r
\r
-//\r
-// PEC BIT is bit 22 in SMBUS address\r
-//\r
-#define SMBUS_LIB_PEC_BIT (1 << 22)\r
-\r
/**\r
Macro that converts SMBUS slave address, SMBUS command, SMBUS data length,\r
and PEC to a value that can be passed to the SMBUS Library functions.\r
\r
**/\r
#define SMBUS_LIB_ADDRESS(SlaveAddress,Command,Length,Pec) \\r
- ( ((Pec) ? SMBUS_LIB_PEC_BIT: 0) | \\r
+ ( ((Pec) ? BIT22: 0) | \\r
(((SlaveAddress) & 0x7f) << 1) | \\r
(((Command) & 0xff) << 8) | \\r
(((Length) & 0x3f) << 16) \\r
)\r
\r
+/**\r
+ Macro that returns the SMBUS Slave Address value from an SmBusAddress Parameter value.\r
+ \r
+ @param SmBusAddress Address that encodes the SMBUS Slave Address, SMBUS Command, SMBUS Data Length, and PEC \r
+**/\r
+#define SMBUS_LIB_SLAVE_ADDRESS(SmBusAddress) (((SmBusAddress) >> 1) & 0x7f)\r
+\r
+/**\r
+ Macro that returns the SMBUS Command value from an SmBusAddress Parameter value.\r
+ \r
+ @param SmBusAddress Address that encodes the SMBUS Slave Address, SMBUS Command, SMBUS Data Length, and PEC\r
+**/\r
+#define SMBUS_LIB_COMMAND(SmBusAddress) (((SmBusAddress) >> 8) & 0xff)\r
+\r
+/**\r
+ Macro that returns the SMBUS Data Length value from an SmBusAddress Parameter value.\r
+ \r
+ @param SmBusAddress Address that encodes the SMBUS Slave Address, SMBUS Command, SMBUS Data Length, and PEC \r
+**/\r
+#define SMBUS_LIB_LENGTH(SmBusAddress) (((SmBusAddress) >> 16) & 0x3f)\r
+\r
+/**\r
+ Macro that returns the SMBUS PEC value from an SmBusAddress Parameter value.\r
+ \r
+ @param SmBusAddress Address that encodes the SMBUS Slave Address, SMBUS Command, SMBUS Data Length, and PEC \r
+**/\r
+#define SMBUS_LIB_PEC(SmBusAddress) ((BOOLEAN) (((SmBusAddress) & BIT22) != 0))\r
+\r
+/**\r
+ Macro that returns the set of reserved bits from an SmBusAddress Parameter value.\r
+ \r
+ @param SmBusAddress Address that encodes the SMBUS Slave Address, SMBUS Command, SMBUS Data Length, and PEC \r
+**/\r
+#define SMBUS_LIB_RESERVED(SmBusAddress) ((SmBusAddress) & ~(BIT23 - 2))\r
+\r
/**\r
Executes an SMBUS quick read command.\r
\r
If Length in SmBusAddress is not zero, then ASSERT().\r
If any reserved bits of SmBusAddress are set, then ASSERT().\r
\r
- @param SmBusAddress Address that encodes the SMBUS Slave Address,\r
- SMBUS Command, SMBUS Data Length, and PEC.\r
- @param Status Return status for the executed command.\r
- This is an optional parameter and may be NULL.\r
+ @param SmBusAddress Address that encodes the SMBUS Slave Address,\r
+ SMBUS Command, SMBUS Data Length, and PEC.\r
+ @param Status Return status for the executed command.\r
+ This is an optional parameter and may be NULL.\r
+ RETURN_SUCCESS The SMBUS command was executed.\r
+ RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.\r
+ RETURN_DEVICE_ERROR The request was not completed because a failure\r
+ reflected in the Host Status Register bit. Device errors are a result\r
+ of a transaction collision, illegal command field, unclaimed cycle\r
+ (host initiated), or bus errors (collisions).\r
+ RETURN_UNSUPPORTED The SMBus operation is not supported.\r
\r
**/\r
VOID\r
SmBusQuickRead (\r
IN UINTN SmBusAddress,\r
OUT RETURN_STATUS *Status OPTIONAL\r
- )\r
-;\r
+ );\r
\r
/**\r
Executes an SMBUS quick write command.\r
If Length in SmBusAddress is not zero, then ASSERT().\r
If any reserved bits of SmBusAddress are set, then ASSERT().\r
\r
- @param SmBusAddress Address that encodes the SMBUS Slave Address,\r
- SMBUS Command, SMBUS Data Length, and PEC.\r
- @param Status Return status for the executed command.\r
- This is an optional parameter and may be NULL.\r
+ @param SmBusAddress Address that encodes the SMBUS Slave Address,\r
+ SMBUS Command, SMBUS Data Length, and PEC.\r
+ @param Status Return status for the executed command.\r
+ This is an optional parameter and may be NULL.\r
+ RETURN_SUCCESS The SMBUS command was executed.\r
+ RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.\r
+ RETURN_DEVICE_ERROR The request was not completed because a failure\r
+ reflected in the Host Status Register bit. Device errors are a result\r
+ of a transaction collision, illegal command field, unclaimed cycle\r
+ (host initiated), or bus errors (collisions).\r
+ RETURN_UNSUPPORTED The SMBus operation is not supported.\r
\r
**/\r
VOID\r
SmBusQuickWrite (\r
IN UINTN SmBusAddress,\r
OUT RETURN_STATUS *Status OPTIONAL\r
- )\r
-;\r
+ );\r
\r
/**\r
Executes an SMBUS receive byte command.\r
If Length in SmBusAddress is not zero, then ASSERT().\r
If any reserved bits of SmBusAddress are set, then ASSERT().\r
\r
- @param SmBusAddress Address that encodes the SMBUS Slave Address,\r
- SMBUS Command, SMBUS Data Length, and PEC.\r
- @param Status Return status for the executed command.\r
- This is an optional parameter and may be NULL.\r
+ @param SmBusAddress Address that encodes the SMBUS Slave Address,\r
+ SMBUS Command, SMBUS Data Length, and PEC.\r
+ @param Status Return status for the executed command.\r
+ This is an optional parameter and may be NULL.\r
+ RETURN_SUCCESS The SMBUS command was executed.\r
+ RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.\r
+ RETURN_DEVICE_ERROR The request was not completed because a failure\r
+ reflected in the Host Status Register bit. Device errors are a result\r
+ of a transaction collision, illegal command field, unclaimed cycle\r
+ (host initiated), or bus errors (collisions).\r
+ RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect)\r
+ RETURN_UNSUPPORTED The SMBus operation is not supported.\r
\r
@return The byte received from the SMBUS.\r
\r
SmBusReceiveByte (\r
IN UINTN SmBusAddress,\r
OUT RETURN_STATUS *Status OPTIONAL\r
- )\r
-;\r
+ );\r
\r
/**\r
Executes an SMBUS send byte command.\r
If Length in SmBusAddress is not zero, then ASSERT().\r
If any reserved bits of SmBusAddress are set, then ASSERT().\r
\r
- @param SmBusAddress Address that encodes the SMBUS Slave Address,\r
- SMBUS Command, SMBUS Data Length, and PEC.\r
- @param Value The 8-bit value to send.\r
- @param Status Return status for the executed command.\r
- This is an optional parameter and may be NULL.\r
+ @param SmBusAddress Address that encodes the SMBUS Slave Address,\r
+ SMBUS Command, SMBUS Data Length, and PEC.\r
+ @param Value The 8-bit value to send.\r
+ @param Status Return status for the executed command.\r
+ This is an optional parameter and may be NULL.\r
+ RETURN_SUCCESS The SMBUS command was executed.\r
+ RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.\r
+ RETURN_DEVICE_ERROR The request was not completed because a failure\r
+ reflected in the Host Status Register bit. Device errors are a result\r
+ of a transaction collision, illegal command field, unclaimed cycle\r
+ (host initiated), or bus errors (collisions).\r
+ RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect)\r
+ RETURN_UNSUPPORTED The SMBus operation is not supported.\r
\r
@return The parameter of Value.\r
\r
IN UINTN SmBusAddress,\r
IN UINT8 Value,\r
OUT RETURN_STATUS *Status OPTIONAL\r
- )\r
-;\r
+ );\r
\r
/**\r
Executes an SMBUS read data byte command.\r
\r
@param SmBusAddress Address that encodes the SMBUS Slave Address,\r
SMBUS Command, SMBUS Data Length, and PEC.\r
- @param Status Return status for the executed command.\r
- This is an optional parameter and may be NULL.\r
+ @param Status Return status for the executed command.\r
+ This is an optional parameter and may be NULL.\r
+ RETURN_SUCCESS The SMBUS command was executed.\r
+ RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.\r
+ RETURN_DEVICE_ERROR The request was not completed because a failure\r
+ reflected in the Host Status Register bit. Device errors are a result\r
+ of a transaction collision, illegal command field, unclaimed cycle\r
+ (host initiated), or bus errors (collisions).\r
+ RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect)\r
+ RETURN_UNSUPPORTED The SMBus operation is not supported.\r
\r
@return The byte read from the SMBUS.\r
\r
SmBusReadDataByte (\r
IN UINTN SmBusAddress,\r
OUT RETURN_STATUS *Status OPTIONAL\r
- )\r
-;\r
+ );\r
\r
/**\r
Executes an SMBUS write data byte command.\r
If Length in SmBusAddress is not zero, then ASSERT().\r
If any reserved bits of SmBusAddress are set, then ASSERT().\r
\r
- @param SmBusAddress Address that encodes the SMBUS Slave Address,\r
- SMBUS Command, SMBUS Data Length, and PEC.\r
- @param Value The 8-bit value to write.\r
- @param Status Return status for the executed command.\r
- This is an optional parameter and may be NULL.\r
+ @param SmBusAddress Address that encodes the SMBUS Slave Address,\r
+ SMBUS Command, SMBUS Data Length, and PEC.\r
+ @param Value The 8-bit value to write.\r
+ @param Status Return status for the executed command.\r
+ This is an optional parameter and may be NULL.\r
+ RETURN_SUCCESS The SMBUS command was executed.\r
+ RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.\r
+ RETURN_DEVICE_ERROR The request was not completed because a failure\r
+ reflected in the Host Status Register bit. Device errors are a result\r
+ of a transaction collision, illegal command field, unclaimed cycle\r
+ (host initiated), or bus errors (collisions).\r
+ RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect)\r
+ RETURN_UNSUPPORTED The SMBus operation is not supported.\r
\r
@return The parameter of Value.\r
\r
IN UINTN SmBusAddress,\r
IN UINT8 Value,\r
OUT RETURN_STATUS *Status OPTIONAL\r
- )\r
-;\r
+ );\r
\r
/**\r
Executes an SMBUS read data word command.\r
If Length in SmBusAddress is not zero, then ASSERT().\r
If any reserved bits of SmBusAddress are set, then ASSERT().\r
\r
- @param SmBusAddress Address that encodes the SMBUS Slave Address,\r
- SMBUS Command, SMBUS Data Length, and PEC.\r
- @param Status Return status for the executed command.\r
- This is an optional parameter and may be NULL.\r
+ @param SmBusAddress Address that encodes the SMBUS Slave Address,\r
+ SMBUS Command, SMBUS Data Length, and PEC.\r
+ @param Status Return status for the executed command.\r
+ This is an optional parameter and may be NULL.\r
+ RETURN_SUCCESS The SMBUS command was executed.\r
+ RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.\r
+ RETURN_DEVICE_ERROR The request was not completed because a failure\r
+ reflected in the Host Status Register bit. Device errors are a result\r
+ of a transaction collision, illegal command field, unclaimed cycle\r
+ (host initiated), or bus errors (collisions).\r
+ RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect)\r
+ RETURN_UNSUPPORTED The SMBus operation is not supported.\r
\r
@return The byte read from the SMBUS.\r
\r
SmBusReadDataWord (\r
IN UINTN SmBusAddress,\r
OUT RETURN_STATUS *Status OPTIONAL\r
- )\r
-;\r
+ );\r
\r
/**\r
Executes an SMBUS write data word command.\r
If Length in SmBusAddress is not zero, then ASSERT().\r
If any reserved bits of SmBusAddress are set, then ASSERT().\r
\r
- @param SmBusAddress Address that encodes the SMBUS Slave Address,\r
- SMBUS Command, SMBUS Data Length, and PEC.\r
- @param Value The 16-bit value to write.\r
- @param Status Return status for the executed command.\r
- This is an optional parameter and may be NULL.\r
+ @param SmBusAddress Address that encodes the SMBUS Slave Address,\r
+ SMBUS Command, SMBUS Data Length, and PEC.\r
+ @param Value The 16-bit value to write.\r
+ @param Status Return status for the executed command.\r
+ This is an optional parameter and may be NULL.\r
+ RETURN_SUCCESS The SMBUS command was executed.\r
+ RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.\r
+ RETURN_DEVICE_ERROR The request was not completed because a failure\r
+ reflected in the Host Status Register bit. Device errors are a result\r
+ of a transaction collision, illegal command field, unclaimed cycle\r
+ (host initiated), or bus errors (collisions).\r
+ RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect)\r
+ RETURN_UNSUPPORTED The SMBus operation is not supported.\r
\r
@return The parameter of Value.\r
\r
IN UINTN SmBusAddress,\r
IN UINT16 Value,\r
OUT RETURN_STATUS *Status OPTIONAL\r
- )\r
-;\r
+ );\r
\r
/**\r
Executes an SMBUS process call command.\r
If Length in SmBusAddress is not zero, then ASSERT().\r
If any reserved bits of SmBusAddress are set, then ASSERT().\r
\r
- @param SmBusAddress Address that encodes the SMBUS Slave Address,\r
- SMBUS Command, SMBUS Data Length, and PEC.\r
- @param Value The 16-bit value to write.\r
- @param Status Return status for the executed command.\r
- This is an optional parameter and may be NULL.\r
+ @param SmBusAddress Address that encodes the SMBUS Slave Address,\r
+ SMBUS Command, SMBUS Data Length, and PEC.\r
+ @param Value The 16-bit value to write.\r
+ @param Status Return status for the executed command.\r
+ This is an optional parameter and may be NULL.\r
+ RETURN_SUCCESS The SMBUS command was executed.\r
+ RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.\r
+ RETURN_DEVICE_ERROR The request was not completed because a failure\r
+ reflected in the Host Status Register bit. Device errors are a result\r
+ of a transaction collision, illegal command field, unclaimed cycle\r
+ (host initiated), or bus errors (collisions).\r
+ RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect)\r
+ RETURN_UNSUPPORTED The SMBus operation is not supported.\r
\r
@return The 16-bit value returned by the process call command.\r
\r
IN UINTN SmBusAddress,\r
IN UINT16 Value,\r
OUT RETURN_STATUS *Status OPTIONAL\r
- )\r
-;\r
+ );\r
\r
/**\r
Executes an SMBUS read block command.\r
If Buffer is NULL, then ASSERT().\r
If any reserved bits of SmBusAddress are set, then ASSERT().\r
\r
- @param SmBusAddress Address that encodes the SMBUS Slave Address,\r
- SMBUS Command, SMBUS Data Length, and PEC.\r
- @param Buffer Pointer to the buffer to store the bytes read from the SMBUS.\r
- @param Status Return status for the executed command.\r
- This is an optional parameter and may be NULL.\r
+ @param SmBusAddress Address that encodes the SMBUS Slave Address,\r
+ SMBUS Command, SMBUS Data Length, and PEC.\r
+ @param Buffer Pointer to the buffer to store the bytes read from the SMBUS.\r
+ @param Status Return status for the executed command.\r
+ This is an optional parameter and may be NULL.\r
+ RETURN_SUCCESS The SMBUS command was executed.\r
+ RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.\r
+ RETURN_DEVICE_ERROR The request was not completed because a failure\r
+ reflected in the Host Status Register bit. Device errors are a result\r
+ of a transaction collision, illegal command field, unclaimed cycle\r
+ (host initiated), or bus errors (collisions).\r
+ RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect)\r
+ RETURN_UNSUPPORTED The SMBus operation is not supported.\r
\r
@return The number of bytes read.\r
\r
IN UINTN SmBusAddress,\r
OUT VOID *Buffer,\r
OUT RETURN_STATUS *Status OPTIONAL\r
- )\r
-;\r
+ );\r
\r
/**\r
Executes an SMBUS write block command.\r
If Buffer is NULL, then ASSERT().\r
If any reserved bits of SmBusAddress are set, then ASSERT().\r
\r
- @param SmBusAddress Address that encodes the SMBUS Slave Address,\r
- SMBUS Command, SMBUS Data Length, and PEC.\r
- @param Buffer Pointer to the buffer to store the bytes read from the SMBUS.\r
- @param Status Return status for the executed command.\r
- This is an optional parameter and may be NULL.\r
+ @param SmBusAddress Address that encodes the SMBUS Slave Address,\r
+ SMBUS Command, SMBUS Data Length, and PEC.\r
+ @param Buffer Pointer to the buffer to store the bytes read from the SMBUS.\r
+ @param Status Return status for the executed command.\r
+ This is an optional parameter and may be NULL.\r
+ RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.\r
+ RETURN_DEVICE_ERROR The request was not completed because a failure\r
+ reflected in the Host Status Register bit. Device errors are a result\r
+ of a transaction collision, illegal command field, unclaimed cycle\r
+ (host initiated), or bus errors (collisions).\r
+ RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect)\r
+ RETURN_UNSUPPORTED The SMBus operation is not supported.\r
\r
@return The number of bytes written.\r
\r
IN UINTN SmBusAddress,\r
OUT VOID *Buffer,\r
OUT RETURN_STATUS *Status OPTIONAL\r
- )\r
-;\r
+ );\r
\r
/**\r
Executes an SMBUS block process call command.\r
If ReadBuffer is NULL, then ASSERT().\r
If any reserved bits of SmBusAddress are set, then ASSERT().\r
\r
- @param SmBusAddress Address that encodes the SMBUS Slave Address,\r
- SMBUS Command, SMBUS Data Length, and PEC.\r
- @param WriteBuffer Pointer to the buffer of bytes to write to the SMBUS.\r
- @param ReadBuffer Pointer to the buffer of bytes to read from the SMBUS.\r
- @param Status Return status for the executed command.\r
- This is an optional parameter and may be NULL.\r
+ @param SmBusAddress Address that encodes the SMBUS Slave Address,\r
+ SMBUS Command, SMBUS Data Length, and PEC.\r
+ @param WriteBuffer Pointer to the buffer of bytes to write to the SMBUS.\r
+ @param ReadBuffer Pointer to the buffer of bytes to read from the SMBUS.\r
+ @param Status Return status for the executed command.\r
+ This is an optional parameter and may be NULL.\r
+ RETURN_TIMEOUT A timeout occurred while executing the SMBUS command.\r
+ RETURN_DEVICE_ERROR The request was not completed because a failure\r
+ reflected in the Host Status Register bit. Device errors are a result\r
+ of a transaction collision, illegal command field, unclaimed cycle\r
+ (host initiated), or bus errors (collisions).\r
+ RETURN_CRC_ERROR The checksum is not correct (PEC is incorrect)\r
+ RETURN_UNSUPPORTED The SMBus operation is not supported.\r
\r
@return The number of bytes written.\r
\r
IN VOID *WriteBuffer,\r
OUT VOID *ReadBuffer,\r
OUT RETURN_STATUS *Status OPTIONAL\r
- )\r
-;\r
+ );\r
\r
\r
#endif\r