+++ /dev/null
-/** @file\r
-\r
- Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
-\r
- SPDX-License-Identifier: BSD-2-Clause-Patent\r
-\r
-**/\r
-\r
-#include <Uefi.h>\r
-\r
-#include <TPS65950.h>\r
-\r
-#include <Library/BaseMemoryLib.h>\r
-#include <Library/DebugLib.h>\r
-#include <Library/MemoryAllocationLib.h>\r
-#include <Library/UefiBootServicesTableLib.h>\r
-\r
-#include <Protocol/EmbeddedExternalDevice.h>\r
-#include <Protocol/SmbusHc.h>\r
-\r
-EFI_SMBUS_HC_PROTOCOL *Smbus;\r
-\r
-EFI_STATUS\r
-Read (\r
- IN EMBEDDED_EXTERNAL_DEVICE *This,\r
- IN UINTN Register,\r
- IN UINTN Length,\r
- OUT VOID *Buffer\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_SMBUS_DEVICE_ADDRESS SlaveAddress;\r
- UINT8 DeviceRegister;\r
- UINTN DeviceRegisterLength = 1;\r
-\r
- SlaveAddress.SmbusDeviceAddress = EXTERNAL_DEVICE_REGISTER_TO_SLAVE_ADDRESS(Register);\r
- DeviceRegister = (UINT8)EXTERNAL_DEVICE_REGISTER_TO_REGISTER(Register);\r
-\r
- //Write DeviceRegister.\r
- Status = Smbus->Execute(Smbus, SlaveAddress, 0, EfiSmbusWriteBlock, FALSE, &DeviceRegisterLength, &DeviceRegister);\r
- if (EFI_ERROR(Status)) {\r
- return Status;\r
- }\r
-\r
- //Read Data\r
- Status = Smbus->Execute(Smbus, SlaveAddress, 0, EfiSmbusReadBlock, FALSE, &Length, Buffer);\r
- return Status;\r
-}\r
-\r
-EFI_STATUS\r
-Write (\r
- IN EMBEDDED_EXTERNAL_DEVICE *This,\r
- IN UINTN Register,\r
- IN UINTN Length,\r
- IN VOID *Buffer\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_SMBUS_DEVICE_ADDRESS SlaveAddress;\r
- UINT8 DeviceRegister;\r
- UINTN DeviceBufferLength = Length + 1;\r
- UINT8 *DeviceBuffer;\r
-\r
- SlaveAddress.SmbusDeviceAddress = EXTERNAL_DEVICE_REGISTER_TO_SLAVE_ADDRESS(Register);\r
- DeviceRegister = (UINT8)EXTERNAL_DEVICE_REGISTER_TO_REGISTER(Register);\r
-\r
- //Prepare buffer for writing\r
- DeviceBuffer = (UINT8 *)AllocatePool(DeviceBufferLength);\r
- if (DeviceBuffer == NULL) {\r
- Status = EFI_OUT_OF_RESOURCES;\r
- goto exit;\r
- }\r
-\r
- //Set Device register followed by data to write.\r
- DeviceBuffer[0] = DeviceRegister;\r
- CopyMem(&DeviceBuffer[1], Buffer, Length);\r
-\r
- //Write Data\r
- Status = Smbus->Execute(Smbus, SlaveAddress, 0, EfiSmbusWriteBlock, FALSE, &DeviceBufferLength, DeviceBuffer);\r
- if (EFI_ERROR(Status)) {\r
- goto exit;\r
- }\r
-\r
-exit:\r
- if (DeviceBuffer) {\r
- FreePool(DeviceBuffer);\r
- }\r
-\r
- return Status;\r
-}\r
-\r
-EMBEDDED_EXTERNAL_DEVICE ExternalDevice = {\r
- Read,\r
- Write\r
-};\r
-\r
-EFI_STATUS\r
-TPS65950Initialize (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
- )\r
-{\r
- EFI_STATUS Status;\r
-\r
- Status = gBS->LocateProtocol(&gEfiSmbusHcProtocolGuid, NULL, (VOID **)&Smbus);\r
- ASSERT_EFI_ERROR(Status);\r
-\r
- Status = gBS->InstallMultipleProtocolInterfaces(&ImageHandle, &gEmbeddedExternalDeviceProtocolGuid, &ExternalDevice, NULL);\r
- return Status;\r
-}\r