summaryrefslogtreecommitdiff
path: root/Platform/BroxtonPlatformPkg/Common/Acpi
diff options
context:
space:
mode:
authorGuo Mang <mang.guo@intel.com>2016-12-23 13:38:18 +0800
committerGuo Mang <mang.guo@intel.com>2016-12-26 19:15:14 +0800
commit897ba26bec481ce688a5b4887253a179047ce4ac (patch)
treecd74a7b4d19b58bf6c87ea15071ab2580e10cc66 /Platform/BroxtonPlatformPkg/Common/Acpi
parenta56cf5fd57d9853b8ee62c8a5dc6c1ca374d3c15 (diff)
downloadedk2-platforms-897ba26bec481ce688a5b4887253a179047ce4ac.tar.xz
BroxtonPlatformPkg: Add UsbTypeCDxe
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Guo Mang <mang.guo@intel.com>
Diffstat (limited to 'Platform/BroxtonPlatformPkg/Common/Acpi')
-rw-r--r--Platform/BroxtonPlatformPkg/Common/Acpi/UsbTypeCDxe/UsbTypeC.c132
-rw-r--r--Platform/BroxtonPlatformPkg/Common/Acpi/UsbTypeCDxe/UsbTypeC.h41
-rw-r--r--Platform/BroxtonPlatformPkg/Common/Acpi/UsbTypeCDxe/UsbTypeCDxe.inf49
3 files changed, 222 insertions, 0 deletions
diff --git a/Platform/BroxtonPlatformPkg/Common/Acpi/UsbTypeCDxe/UsbTypeC.c b/Platform/BroxtonPlatformPkg/Common/Acpi/UsbTypeCDxe/UsbTypeC.c
new file mode 100644
index 0000000000..e2a5ac6126
--- /dev/null
+++ b/Platform/BroxtonPlatformPkg/Common/Acpi/UsbTypeCDxe/UsbTypeC.c
@@ -0,0 +1,132 @@
+/** @file
+ Implements Overclocking Interface for OS Application ie Iron city.
+
+ Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
+
+ 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.
+
+**/
+
+#include <UsbTypeC.h>
+#include <Protocol/AcpiTable.h>
+#include <Library/DebugLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/UefiRuntimeServicesTableLib.h>
+#include <Library/UefiLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Protocol/GlobalNvsArea.h>
+
+GLOBAL_REMOVE_IF_UNREFERENCED EFI_GLOBAL_NVS_AREA_PROTOCOL *GlobalNvsAreaProtocol;
+GLOBAL_REMOVE_IF_UNREFERENCED EFI_GLOBAL_NVS_AREA *mGlobalNvsAreaPtr;
+
+
+#define USBTYPEC_DATA_VAR L"UsbTypeC"
+EFI_GUID UsbTypeCVarGuid = { 0xfc876842, 0xd8f0, 0x4844, {0xae, 0x32, 0x1f, 0xf8, 0x43, 0x79, 0x7b, 0x17} };
+
+
+/**
+ Allocate MemoryType below 4G memory address.
+
+ @param[in] Size Size of memory to allocate.
+ @param[in] Buffer Allocated address for output.
+
+ @retval EFI_SUCCESS Memory successfully allocated.
+ @retval Other Other errors occur.
+
+**/
+static EFI_STATUS
+AllocateMemoryBelow4G (
+ IN EFI_MEMORY_TYPE MemoryType,
+ IN UINTN Size,
+ OUT VOID **Buffer
+ )
+{
+ UINTN Pages;
+ EFI_PHYSICAL_ADDRESS Address;
+ EFI_STATUS Status;
+
+ Pages = EFI_SIZE_TO_PAGES (Size);
+ Address = 0xffffffff;
+
+ Status = gBS->AllocatePages (
+ AllocateMaxAddress,
+ MemoryType,
+ Pages,
+ &Address
+ );
+
+ *Buffer = (VOID *) (UINTN) Address;
+
+ return Status;
+};
+
+
+static UINT16 GetUcsiRev(VOID)
+{
+ return 0;
+}
+
+
+/**
+ This function is the entry point for this DXE driver.
+
+ @param[in] ImageHandle Image handle of this driver.
+ @param[in] SystemTable Global system service table.
+
+ @retval EFI_DEVICE_ERROR Initialization fails
+ @retval EFI_SUCCESS Initialization completes successfully.
+
+**/
+EFI_STATUS
+UsbTypeCEntryPoint (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ EFI_STATUS Status;
+ USBTYPEC_OPM_BUF *OpmBuffer;
+
+ DEBUG ((DEBUG_INFO, "UsbTypeC entrypoint.\n"));
+
+ Status = gBS->LocateProtocol (&gEfiGlobalNvsAreaProtocolGuid, NULL, &GlobalNvsAreaProtocol);
+ ASSERT_EFI_ERROR (Status);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ mGlobalNvsAreaPtr = GlobalNvsAreaProtocol->Area;
+
+ //
+ // Allocate memory in ACPI NVS
+ //
+ Status = AllocateMemoryBelow4G (EfiACPIMemoryNVS, 0x1000, &OpmBuffer);
+ ASSERT_EFI_ERROR (Status);
+
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ SetMem (OpmBuffer, sizeof (USBTYPEC_OPM_BUF), 0x0);
+ OpmBuffer->Version = GetUcsiRev();
+
+ mGlobalNvsAreaPtr->UsbTypeCOpBaseAddr = (UINT32) (UINTN) OpmBuffer;
+ DEBUG ((DEBUG_INFO, "UsbTypeC EntryPoint: mGlobalNvsAreaPtr->UsbTypeCOpBaseAddr = 0x%X\n", mGlobalNvsAreaPtr->UsbTypeCOpBaseAddr));
+
+ Status = gRT->SetVariable (
+ USBTYPEC_DATA_VAR,
+ &UsbTypeCVarGuid,
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
+ sizeof (UINT32),
+ &(mGlobalNvsAreaPtr->UsbTypeCOpBaseAddr)
+ );
+
+ return Status;
+}
+
diff --git a/Platform/BroxtonPlatformPkg/Common/Acpi/UsbTypeCDxe/UsbTypeC.h b/Platform/BroxtonPlatformPkg/Common/Acpi/UsbTypeCDxe/UsbTypeC.h
new file mode 100644
index 0000000000..a1318ef196
--- /dev/null
+++ b/Platform/BroxtonPlatformPkg/Common/Acpi/UsbTypeCDxe/UsbTypeC.h
@@ -0,0 +1,41 @@
+/** @file
+ Header file for implements Overclocking Interface for OS Application ie Iron city.
+
+ Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
+
+ 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.
+
+**/
+
+#ifndef __USBTYPEC__H__
+#define __USBTYPEC__H__
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <PiDxe.h>
+
+#pragma pack (1)
+typedef struct {
+ UINT16 Version; // PPM -> OPM, Version JJ.M.N (JJ - major version, M - minor version, N - sub-minor version). Version 2.1.3 is represented with value 0x0213
+ UINT16 Reserved; // Reversed
+ UINT8 CCI[4]; // PPM->OPM CCI indicator
+ UINT8 Control[8]; // OPM->PPM Control message
+ UINT8 MsgIn[16]; // PPM->OPM Message In, 128 bits, 16 bytes
+ UINT8 MsgOut[16]; // OPM->PPM Message Out
+} USBTYPEC_OPM_BUF ;
+
+#pragma pack ()
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+
diff --git a/Platform/BroxtonPlatformPkg/Common/Acpi/UsbTypeCDxe/UsbTypeCDxe.inf b/Platform/BroxtonPlatformPkg/Common/Acpi/UsbTypeCDxe/UsbTypeCDxe.inf
new file mode 100644
index 0000000000..71fab0f09a
--- /dev/null
+++ b/Platform/BroxtonPlatformPkg/Common/Acpi/UsbTypeCDxe/UsbTypeCDxe.inf
@@ -0,0 +1,49 @@
+## @file
+# Component description file for UsbTypeC module.
+#
+# Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.<BR>
+#
+# 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.
+#
+##
+
+[Defines]
+ INF_VERSION = 0x00010017
+ BASE_NAME = UsbTypeC
+ FILE_GUID = 15b985c5-7103-4f35-b59d-2235fc5f3ffe
+ VERSION_STRING = 1.0
+ MODULE_TYPE = DXE_DRIVER
+ ENTRY_POINT = UsbTypeCEntryPoint
+
+[LibraryClasses]
+ DebugLib
+ UefiDriverEntryPoint
+ UefiBootServicesTableLib
+ UefiRuntimeServicesTableLib
+
+[Packages]
+ MdePkg/MdePkg.dec
+ BroxtonPlatformPkg/PlatformPkg.dec
+ BroxtonSiPkg/BroxtonSiPkg.dec
+
+[Sources]
+ UsbTypeC.c
+ UsbTypeC.h
+
+[Protocols]
+ gEfiAcpiTableProtocolGuid
+ gEfiGlobalNvsAreaProtocolGuid
+
+[Guids]
+
+[Depex]
+ gEfiAcpiTableProtocolGuid AND
+ gEfiGlobalNvsAreaProtocolGuid AND
+ gEfiVariableArchProtocolGuid AND
+ gEfiVariableWriteArchProtocolGuid