|
@@ -0,0 +1,76 @@
|
|
|
+/** @file
|
|
|
+ Common EC commands.
|
|
|
+
|
|
|
+Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
|
|
|
+SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
+
|
|
|
+**/
|
|
|
+
|
|
|
+#include <Base.h>
|
|
|
+#include <Uefi.h>
|
|
|
+#include <Library/EcLib.h>
|
|
|
+
|
|
|
+/**
|
|
|
+ Read a byte of EC RAM.
|
|
|
+
|
|
|
+ @param[in] Address Address to read
|
|
|
+ @param[out] Data Data received
|
|
|
+
|
|
|
+ @retval EFI_SUCCESS Command success
|
|
|
+ @retval EFI_DEVICE_ERROR Command error
|
|
|
+ @retval EFI_TIMEOUT Command timeout
|
|
|
+**/
|
|
|
+EFI_STATUS
|
|
|
+EcRead (
|
|
|
+ IN UINT8 Address,
|
|
|
+ OUT UINT8 *Data
|
|
|
+ )
|
|
|
+{
|
|
|
+ UINT8 DataSize;
|
|
|
+ UINT8 DataBuffer[1];
|
|
|
+ EFI_STATUS Status;
|
|
|
+
|
|
|
+ if (Data == NULL) {
|
|
|
+ return EFI_INVALID_PARAMETER;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Prepare arguments for LpcEcInterface()
|
|
|
+ DataSize = 1;
|
|
|
+ DataBuffer[0] = Address;
|
|
|
+
|
|
|
+ Status = LpcEcInterface (EC_C_ACPI_READ, &DataSize, DataBuffer);
|
|
|
+ if (EFI_ERROR(Status)) {
|
|
|
+ return Status;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Write caller's pointer from returned data and return success
|
|
|
+ *Data = DataBuffer[0];
|
|
|
+ return EFI_SUCCESS;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ Write a byte of EC RAM.
|
|
|
+
|
|
|
+ @param[in] Address Address to write
|
|
|
+ @param[in] Data Data to write
|
|
|
+
|
|
|
+ @retval EFI_SUCCESS Command success
|
|
|
+ @retval EFI_DEVICE_ERROR Command error
|
|
|
+ @retval EFI_TIMEOUT Command timeout
|
|
|
+**/
|
|
|
+EFI_STATUS
|
|
|
+EcWrite (
|
|
|
+ IN UINT8 Address,
|
|
|
+ IN UINT8 Data
|
|
|
+ )
|
|
|
+{
|
|
|
+ UINT8 DataSize;
|
|
|
+ UINT8 DataBuffer[2];
|
|
|
+
|
|
|
+ // Prepare arguments for LpcEcInterface()
|
|
|
+ DataSize = 2;
|
|
|
+ DataBuffer[0] = Address;
|
|
|
+ DataBuffer[1] = Data;
|
|
|
+
|
|
|
+ return LpcEcInterface (EC_C_ACPI_WRITE, &DataSize, DataBuffer);
|
|
|
+}
|