+++ /dev/null
-/** @file\r
-\r
- Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>\r
- \r\r
- SPDX-License-Identifier: BSD-2-Clause-Patent\r
-\r
- \r\r
-\r
-Module Name:\r
-\r
- PlatformInfoDxe.c\r
-\r
-Abstract:\r
- Platform Info driver to public platform related HOB data\r
-\r
---*/\r
-\r
-#include "PlatformInfoDxe.h"\r
-\r
-/**\r
- Entry point for the driver.\r
-\r
- This routine get the platform HOB data from PEI and publish\r
- as Platform Info variable that can be accessed during boot service and\r
- runtime.\r
-\r
- @param ImageHandle Image Handle.\r
- @param SystemTable EFI System Table.\r
-\r
- @retval Status Function execution status.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-PlatformInfoInit (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_PLATFORM_INFO_HOB *PlatformInfoHobPtr;\r
- EFI_PEI_HOB_POINTERS GuidHob;\r
- EFI_PLATFORM_INFO_HOB TmpHob;\r
- UINTN VarSize;\r
- EFI_OS_SELECTION_HOB *OsSlectionHobPtr;\r
- UINT8 Selection;\r
- SYSTEM_CONFIGURATION SystemConfiguration;\r
- UINT8 *LpssDataHobPtr;\r
- UINT8 *LpssDataVarPtr;\r
- UINTN i;\r
-\r
- VarSize = sizeof(SYSTEM_CONFIGURATION);\r
- Status = gRT->GetVariable(\r
- NORMAL_SETUP_NAME,\r
- &gEfiNormalSetupGuid,\r
- NULL,\r
- &VarSize,\r
- &SystemConfiguration\r
- );\r
- \r
- if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {\r
- //The setup variable is corrupted\r
- VarSize = sizeof(SYSTEM_CONFIGURATION);\r
- Status = gRT->GetVariable(\r
- L"SetupRecovery",\r
- &gEfiNormalSetupGuid,\r
- NULL,\r
- &VarSize,\r
- &SystemConfiguration\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
- } \r
-\r
- VarSize = sizeof(Selection);\r
- Status = gRT->GetVariable(\r
- L"OsSelection",\r
- &gOsSelectionVariableGuid,\r
- NULL,\r
- &VarSize,\r
- &Selection\r
- );\r
-\r
- if (EFI_ERROR(Status)) {\r
- Selection = SystemConfiguration.ReservedO;\r
- Status = gRT->SetVariable (\r
- L"OsSelection",\r
- &gOsSelectionVariableGuid,\r
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
- sizeof(Selection),\r
- &Selection\r
- );\r
- }\r
-\r
- GuidHob.Raw = GetHobList ();\r
- if (GuidHob.Raw != NULL) {\r
- if ((GuidHob.Raw = GetNextGuidHob (&gOsSelectionVariableGuid, GuidHob.Raw)) != NULL) {\r
- OsSlectionHobPtr = GET_GUID_HOB_DATA (GuidHob.Guid);\r
-\r
- if (OsSlectionHobPtr->OsSelectionChanged) {\r
- SystemConfiguration.ReservedO = OsSlectionHobPtr->OsSelection;\r
-\r
- //\r
- // Load Audio default configuration\r
- //\r
- SystemConfiguration.Lpe = OsSlectionHobPtr->Lpe;\r
- SystemConfiguration.PchAzalia = OsSlectionHobPtr->PchAzalia;\r
-\r
- //\r
- // Load LPSS and SCC default configurations\r
- //\r
- LpssDataHobPtr = &OsSlectionHobPtr->LpssData.LpssPciModeEnabled;\r
- LpssDataVarPtr = &SystemConfiguration.LpssPciModeEnabled;\r
- for (i = 0; i < sizeof(EFI_PLATFORM_LPSS_DATA); i++) {\r
- *LpssDataVarPtr = *LpssDataHobPtr;\r
- LpssDataVarPtr++;\r
- LpssDataHobPtr++;\r
- }\r
-\r
- SystemConfiguration.GOPEnable = TRUE;\r
-\r
- Status = gRT->SetVariable (\r
- NORMAL_SETUP_NAME,\r
- &gEfiNormalSetupGuid,\r
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
- sizeof(SYSTEM_CONFIGURATION),\r
- &SystemConfiguration\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
- }\r
- }\r
- }\r
-\r
- GuidHob.Raw = GetHobList ();\r
- if (GuidHob.Raw == NULL) {\r
- return EFI_NOT_FOUND;\r
- }\r
-\r
- if ((GuidHob.Raw = GetNextGuidHob (&gEfiPlatformInfoGuid, GuidHob.Raw)) != NULL) {\r
- PlatformInfoHobPtr = GET_GUID_HOB_DATA (GuidHob.Guid);\r
- VarSize = sizeof(EFI_PLATFORM_INFO_HOB);\r
- Status = gRT->GetVariable(\r
- L"PlatformInfo",\r
- &gEfiVlv2VariableGuid,\r
- NULL,\r
- &VarSize,\r
- &TmpHob\r
- );\r
-\r
- if (EFI_ERROR(Status) || CompareMem (&TmpHob, PlatformInfoHobPtr, VarSize)) {\r
-\r
- //\r
- // Write the Platform Info to volatile memory\r
- //\r
- Status = gRT->SetVariable(\r
- L"PlatformInfo",\r
- &gEfiVlv2VariableGuid,\r
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
- sizeof(EFI_PLATFORM_INFO_HOB),\r
- PlatformInfoHobPtr\r
- );\r
- if (EFI_ERROR(Status)) {\r
- return Status;\r
- }\r
- }\r
- }\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r