Import BaseMemoryLibMmx;
Import PeiMemoryLib;
Import BasePeCoffLib;
Import PeiSmbusLibSmbus2;
Import DxeMemoryLib;
Import HiiLib;
Update UefiLib to support multiple language codes;


git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2886 6f19259b-4bc3-4df7-8a09-765794883524
diff --git a/MdePkg/Library/DxeSmbusLib/DxeSmbusLib.c b/MdePkg/Library/DxeSmbusLib/DxeSmbusLib.c
new file mode 100644
index 0000000..18a7973
--- /dev/null
+++ b/MdePkg/Library/DxeSmbusLib/DxeSmbusLib.c
@@ -0,0 +1,104 @@
+/** @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: DxeSmbusLib.c

+

+**/

+

+#include "InternalSmbusLib.h"

+

+#include <Protocol/SmbusHc.h>

+

+//

+// Globle varible to cache pointer to Smbus protocol.

+//

+STATIC EFI_SMBUS_HC_PROTOCOL      *mSmbus = NULL; 

+

+/**

+  The constructor function caches the pointer to Smbus protocol.

+  

+  The constructor function locates Smbus protocol from protocol database.

+  It will ASSERT() if that operation fails and it will always return EFI_SUCCESS. 

+

+  @param  ImageHandle   The firmware allocated handle for the EFI image.

+  @param  SystemTable   A pointer to the EFI System Table.

+  

+  @retval EFI_SUCCESS   The constructor always returns EFI_SUCCESS.

+

+**/

+EFI_STATUS

+EFIAPI

+SmbusLibConstructor (

+  IN EFI_HANDLE                ImageHandle,

+  IN EFI_SYSTEM_TABLE          *SystemTable

+  )

+{

+  EFI_STATUS  Status;

+  

+  Status = gBS->LocateProtocol (&gEfiSmbusHcProtocolGuid, NULL, (VOID**) &mSmbus);

+  ASSERT_EFI_ERROR (Status);

+  ASSERT (mSmbus != NULL);

+

+  return Status;

+}

+

+/**

+  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 OUT VOID                       *Buffer,

+     OUT RETURN_STATUS              *Status        OPTIONAL

+  )

+{

+  RETURN_STATUS             ReturnStatus;

+  EFI_SMBUS_DEVICE_ADDRESS  SmbusDeviceAddress;

+

+  SmbusDeviceAddress.SmbusDeviceAddress = SMBUS_LIB_SLAVE_ADDRESS (SmBusAddress);

+

+  ReturnStatus = mSmbus->Execute (

+                           mSmbus,

+                           SmbusDeviceAddress,

+                           SMBUS_LIB_COMMAND (SmBusAddress),

+                           SmbusOperation,

+                           SMBUS_LIB_PEC (SmBusAddress),  

+                           &Length,

+                           Buffer

+                           );

+  if (Status != NULL) {

+    *Status = ReturnStatus;

+  }

+

+  return Length;

+}