+++ /dev/null
-/** @file\r
- Implementation of SmBusLib class library for PEI phase.\r
-\r
-Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
-SPDX-License-Identifier: BSD-2-Clause-Patent\r
-\r
-**/\r
-\r
-#include "InternalSmbusLib.h"\r
-\r
-/**\r
- Gets Smbus PPIs.\r
-\r
- This internal function retrieves Smbus PPI from PPI database.\r
- If gEfiPeiSmbusPpiGuid can not be located, then ASSERT()\r
-\r
- @return The pointer to Smbus PPI.\r
-\r
-**/\r
-EFI_PEI_SMBUS_PPI *\r
-InternalGetSmbusPpi (\r
- VOID\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_PEI_SMBUS_PPI *SmbusPpi;\r
-\r
- Status = PeiServicesLocatePpi (&gEfiPeiSmbusPpiGuid, 0, NULL, (VOID **) &SmbusPpi);\r
- ASSERT_EFI_ERROR (Status);\r
- ASSERT (SmbusPpi != NULL);\r
-\r
- return SmbusPpi;\r
-}\r
-\r
-/**\r
- Executes an SMBus operation to an SMBus controller.\r
-\r
- This function provides a standard way to execute Smbus script\r
- as defined in the SmBus Specification. The data can either be of\r
- the Length byte, word, or a block of data.\r
-\r
- @param SmbusOperation Signifies which particular SMBus hardware protocol instance that it will use to\r
- execute the SMBus transactions.\r
- @param SmBusAddress Address that encodes the SMBUS Slave Address,\r
- SMBUS Command, SMBUS Data Length, and PEC.\r
- @param Length Signifies the number of bytes that this operation will do. The maximum number of\r
- bytes can be revision specific and operation specific.\r
- @param Buffer Contains the value of data to execute to the SMBus slave device. Not all operations\r
- require this argument. The length of this buffer is identified by Length.\r
- @param Status Return status for the executed command.\r
- This is an optional parameter and may be NULL.\r
-\r
- @return The actual number of bytes that are executed for this operation..\r
-\r
-**/\r
-UINTN\r
-InternalSmBusExec (\r
- IN EFI_SMBUS_OPERATION SmbusOperation,\r
- IN UINTN SmBusAddress,\r
- IN UINTN Length,\r
- IN OUT VOID *Buffer,\r
- OUT RETURN_STATUS *Status OPTIONAL\r
- )\r
-{\r
- EFI_PEI_SMBUS_PPI *SmbusPpi;\r
- CONST EFI_PEI_SERVICES **PeiServices;\r
- RETURN_STATUS ReturnStatus;\r
- EFI_SMBUS_DEVICE_ADDRESS SmbusDeviceAddress;\r
-\r
- PeiServices = GetPeiServicesTablePointer ();\r
- SmbusPpi = InternalGetSmbusPpi ();\r
- SmbusDeviceAddress.SmbusDeviceAddress = SMBUS_LIB_SLAVE_ADDRESS (SmBusAddress);\r
-\r
- ReturnStatus = SmbusPpi->Execute (\r
- (EFI_PEI_SERVICES **) PeiServices,\r
- SmbusPpi,\r
- SmbusDeviceAddress,\r
- SMBUS_LIB_COMMAND (SmBusAddress),\r
- SmbusOperation,\r
- SMBUS_LIB_PEC (SmBusAddress),\r
- &Length,\r
- Buffer\r
- );\r
- if (Status != NULL) {\r
- *Status = ReturnStatus;\r
- }\r
-\r
- return Length;\r
-}\r