From ed9a54ad2a14c0a6122b23ad915e99cd680a949b Mon Sep 17 00:00:00 2001 From: Guo Mang Date: Fri, 23 Dec 2016 13:38:18 +0800 Subject: BroxtonPlatformPkg: Add UsbTypeCDxe Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Guo Mang --- .../Common/Acpi/UsbTypeCDxe/UsbTypeC.c | 132 +++++++++++++++++++++ .../Common/Acpi/UsbTypeCDxe/UsbTypeC.h | 41 +++++++ .../Common/Acpi/UsbTypeCDxe/UsbTypeCDxe.inf | 49 ++++++++ 3 files changed, 222 insertions(+) create mode 100644 Platform/BroxtonPlatformPkg/Common/Acpi/UsbTypeCDxe/UsbTypeC.c create mode 100644 Platform/BroxtonPlatformPkg/Common/Acpi/UsbTypeCDxe/UsbTypeC.h create mode 100644 Platform/BroxtonPlatformPkg/Common/Acpi/UsbTypeCDxe/UsbTypeCDxe.inf (limited to 'Platform/BroxtonPlatformPkg') 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.
+ + 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 +#include +#include +#include +#include +#include +#include +#include +#include + +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.
+ + 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 + +#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.
+# +# 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 -- cgit v1.2.3