From dabbd33c3dd316dfe28d1a4c63d356fb47add66f Mon Sep 17 00:00:00 2001 From: Guo Mang Date: Fri, 23 Dec 2016 14:12:47 +0800 Subject: BroxtonPlatformPkg: Add PlatformGopPolicyDxe Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Guo Mang --- .../PlatformGopPolicyDxe/PlatformGopPolicy.c | 206 +++++++++++++++++++++ .../PlatformGopPolicyDxe/PlatformGopPolicyDxe.inf | 66 +++++++ 2 files changed, 272 insertions(+) create mode 100644 Platform/BroxtonPlatformPkg/Common/Console/PlatformGopPolicyDxe/PlatformGopPolicy.c create mode 100644 Platform/BroxtonPlatformPkg/Common/Console/PlatformGopPolicyDxe/PlatformGopPolicyDxe.inf diff --git a/Platform/BroxtonPlatformPkg/Common/Console/PlatformGopPolicyDxe/PlatformGopPolicy.c b/Platform/BroxtonPlatformPkg/Common/Console/PlatformGopPolicyDxe/PlatformGopPolicy.c new file mode 100644 index 0000000000..26dc95c77b --- /dev/null +++ b/Platform/BroxtonPlatformPkg/Common/Console/PlatformGopPolicyDxe/PlatformGopPolicy.c @@ -0,0 +1,206 @@ +/** @file + Platform GOP Driver Policy. + + Copyright (c) 1999 - 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 + +EFI_BOOT_SERVICES *gBS; + +PLATFORM_GOP_POLICY_PROTOCOL mPlatformGOPPolicy; + +extern EFI_GUID gPeiDefaultVbtGuid; +extern EFI_GUID gVbtMipiAuoGuid; +extern EFI_GUID gVbtMipiSharpGuid; +extern EFI_GUID gVbtMipiJdiGuid; +extern EFI_GUID gVbtEdpTypeCGuid; + +// +// Function implementations +// + +/** + The function will excute with as the platform policy, and gives the + Platform Lid Status. IBV/OEM can customize this code for their specific policy action. + + @param[out] CurrentLidStatus Gives the current LID Status + + @retval EFI_SUCCESS. + +**/ +EFI_STATUS +EFIAPI +GetPlatformLidStatus ( + OUT LID_STATUS *CurrentLidStatus + ) +{ + if (CurrentLidStatus == NULL) { + return EFI_INVALID_PARAMETER; + } + + *CurrentLidStatus = LidOpen; + + return EFI_SUCCESS; +} + + +/** + The function will excute and gives the Video Bios Table Size and Address. + + @param[in] VbtAddress Gives the Physical Address of Video BIOS Table + @param[in] VbtSize Gives the Size of Video BIOS Table + + @retval EFI_STATUS + +**/ + +EFI_STATUS +EFIAPI +GetVbtData ( + OUT EFI_PHYSICAL_ADDRESS *VbtAddress, + OUT UINT32 *VbtSize +) +{ + SYSTEM_CONFIGURATION SystemConfiguration; + UINTN VarSize; + EFI_STATUS Status; + EFI_GUID BmpImageGuid = { 0xE08CA6D5, 0x8D02, 0x43ae, 0xAB, 0xB1, 0x95, 0x2C, 0xC7, 0x87, 0xC9, 0x33 }; + UINTN FvProtocolCount; + EFI_HANDLE *FvHandles; + EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv; + UINTN Index; + UINT32 AuthenticationStatus; + UINT8 *Buffer; + UINTN VbtBufferSize; + + if (VbtAddress == NULL || VbtSize == NULL){ + return EFI_INVALID_PARAMETER; + } + + VarSize = sizeof (SYSTEM_CONFIGURATION); + Status = gRT->GetVariable ( + L"Setup", + &gEfiSetupVariableGuid, + NULL, + &VarSize, + &SystemConfiguration + ); + ASSERT_EFI_ERROR (Status); + + BmpImageGuid = gPeiDefaultVbtGuid; + + Fv = NULL; + Buffer = 0; + FvHandles = NULL; + Status = gBS->LocateHandleBuffer( + ByProtocol, + &gEfiFirmwareVolume2ProtocolGuid, + NULL, + &FvProtocolCount, + &FvHandles + ); + if (!EFI_ERROR (Status)) { + for (Index = 0; Index < FvProtocolCount; Index++) { + Status = gBS->HandleProtocol( + FvHandles[Index], + &gEfiFirmwareVolume2ProtocolGuid, + (VOID **) &Fv + ); + VbtBufferSize = 0; + Status = Fv->ReadSection ( + Fv, + &BmpImageGuid, + EFI_SECTION_RAW, + 0, + &Buffer, + &VbtBufferSize, + &AuthenticationStatus + ); + if (!EFI_ERROR (Status)) { + *VbtAddress = (EFI_PHYSICAL_ADDRESS) Buffer; + *VbtSize = (UINT32) VbtBufferSize; + Status = EFI_SUCCESS; + break; + } + } + } else { + Status = EFI_NOT_FOUND; + } + + return Status; +} + + +/** + Entry point for the Platform GOP Policy Driver. + + @param[in] ImageHandle Image handle of this driver. + @param[in] SystemTable Global system service table. + + @retval EFI_SUCCESS Initialization complete. + @retval EFI_OUT_OF_RESOURCES Do not have enough resources to initialize the driver. + +**/ + +EFI_STATUS +EFIAPI +PlatformGOPPolicyEntryPoint ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status = EFI_SUCCESS; + SYSTEM_CONFIGURATION SystemConfiguration; + UINTN VarSize; + + gBS = SystemTable->BootServices; + + gBS->SetMem (&mPlatformGOPPolicy, sizeof (PLATFORM_GOP_POLICY_PROTOCOL), 0); + + mPlatformGOPPolicy.Revision = PLATFORM_GOP_POLICY_PROTOCOL_REVISION_01; + mPlatformGOPPolicy.GetPlatformLidStatus = GetPlatformLidStatus; + mPlatformGOPPolicy.GetVbtData = GetVbtData; + + // + // Install protocol to allow access to this Policy. + // + VarSize = sizeof (SYSTEM_CONFIGURATION); + Status = gRT->GetVariable ( + L"Setup", + &gEfiSetupVariableGuid, + NULL, + &VarSize, + &SystemConfiguration + ); + ASSERT_EFI_ERROR (Status); + + if (SystemConfiguration.GOPEnable == 1) { + Status = gBS->InstallMultipleProtocolInterfaces ( + &ImageHandle, + &gPlatformGOPPolicyGuid, + &mPlatformGOPPolicy, + NULL + ); + } + + return Status; +} + diff --git a/Platform/BroxtonPlatformPkg/Common/Console/PlatformGopPolicyDxe/PlatformGopPolicyDxe.inf b/Platform/BroxtonPlatformPkg/Common/Console/PlatformGopPolicyDxe/PlatformGopPolicyDxe.inf new file mode 100644 index 0000000000..ae7fd1c2ae --- /dev/null +++ b/Platform/BroxtonPlatformPkg/Common/Console/PlatformGopPolicyDxe/PlatformGopPolicyDxe.inf @@ -0,0 +1,66 @@ +## @file +# Platform GOP Driver Policy Module. +# +# Copyright (c) 1999 - 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 = 0x00010005 + BASE_NAME = PlatformGOPPolicy + FILE_GUID = 9737D7CA-D869-45e5-A5EF-75D9438688DE + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + ENTRY_POINT = PlatformGOPPolicyEntryPoint + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 +# + +[Sources.common] + PlatformGopPolicy.c + +[Packages] + MdePkg/MdePkg.dec + IntelFrameworkPkg/IntelFrameworkPkg.dec + BroxtonPlatformPkg/PlatformPkg.dec + BroxtonSiPkg/BroxtonSiPkg.dec + +[LibraryClasses] + BaseLib + DebugLib + UefiDriverEntryPoint + UefiRuntimeServicesTableLib + IoLib + HobLib + +[Guids] + gEfiSetupVariableGuid + gVbtInfoGuid + gPeiDefaultVbtGuid + gVbtMipiAuoGuid + gVbtMipiSharpGuid + gVbtMipiJdiGuid + gVbtEdpTypeCGuid + gEfiPlatformInfoGuid + +[Protocols] + gEfiCpuIo2ProtocolGuid + gEfiFirmwareVolume2ProtocolGuid + gPlatformGOPPolicyGuid + +[Pcd] + +[Depex] + gEfiCpuIo2ProtocolGuid AND + gEfiVariableArchProtocolGuid -- cgit v1.2.3