]> git.proxmox.com Git - mirror_edk2.git/blob - Vlv2TbltDevicePkg/PlatformInfoDxe/PlatformInfoDxe.c
fc784034cd7b6787113207045e281e1a462d0270
[mirror_edk2.git] / Vlv2TbltDevicePkg / PlatformInfoDxe / PlatformInfoDxe.c
1 /** @file
2
3 Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
4
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6
7
8
9 Module Name:
10
11 PlatformInfoDxe.c
12
13 Abstract:
14 Platform Info driver to public platform related HOB data
15
16 --*/
17
18 #include "PlatformInfoDxe.h"
19
20 /**
21 Entry point for the driver.
22
23 This routine get the platform HOB data from PEI and publish
24 as Platform Info variable that can be accessed during boot service and
25 runtime.
26
27 @param ImageHandle Image Handle.
28 @param SystemTable EFI System Table.
29
30 @retval Status Function execution status.
31
32 **/
33 EFI_STATUS
34 EFIAPI
35 PlatformInfoInit (
36 IN EFI_HANDLE ImageHandle,
37 IN EFI_SYSTEM_TABLE *SystemTable
38 )
39 {
40 EFI_STATUS Status;
41 EFI_PLATFORM_INFO_HOB *PlatformInfoHobPtr;
42 EFI_PEI_HOB_POINTERS GuidHob;
43 EFI_PLATFORM_INFO_HOB TmpHob;
44 UINTN VarSize;
45 EFI_OS_SELECTION_HOB *OsSlectionHobPtr;
46 UINT8 Selection;
47 SYSTEM_CONFIGURATION SystemConfiguration;
48 UINT8 *LpssDataHobPtr;
49 UINT8 *LpssDataVarPtr;
50 UINTN i;
51
52 VarSize = sizeof(SYSTEM_CONFIGURATION);
53 Status = gRT->GetVariable(
54 NORMAL_SETUP_NAME,
55 &gEfiNormalSetupGuid,
56 NULL,
57 &VarSize,
58 &SystemConfiguration
59 );
60
61 if (EFI_ERROR (Status) || VarSize != sizeof(SYSTEM_CONFIGURATION)) {
62 //The setup variable is corrupted
63 VarSize = sizeof(SYSTEM_CONFIGURATION);
64 Status = gRT->GetVariable(
65 L"SetupRecovery",
66 &gEfiNormalSetupGuid,
67 NULL,
68 &VarSize,
69 &SystemConfiguration
70 );
71 ASSERT_EFI_ERROR (Status);
72 }
73
74 VarSize = sizeof(Selection);
75 Status = gRT->GetVariable(
76 L"OsSelection",
77 &gOsSelectionVariableGuid,
78 NULL,
79 &VarSize,
80 &Selection
81 );
82
83 if (EFI_ERROR(Status)) {
84 Selection = SystemConfiguration.ReservedO;
85 Status = gRT->SetVariable (
86 L"OsSelection",
87 &gOsSelectionVariableGuid,
88 EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
89 sizeof(Selection),
90 &Selection
91 );
92 }
93
94 GuidHob.Raw = GetHobList ();
95 if (GuidHob.Raw != NULL) {
96 if ((GuidHob.Raw = GetNextGuidHob (&gOsSelectionVariableGuid, GuidHob.Raw)) != NULL) {
97 OsSlectionHobPtr = GET_GUID_HOB_DATA (GuidHob.Guid);
98
99 if (OsSlectionHobPtr->OsSelectionChanged) {
100 SystemConfiguration.ReservedO = OsSlectionHobPtr->OsSelection;
101
102 //
103 // Load Audio default configuration
104 //
105 SystemConfiguration.Lpe = OsSlectionHobPtr->Lpe;
106 SystemConfiguration.PchAzalia = OsSlectionHobPtr->PchAzalia;
107
108 //
109 // Load LPSS and SCC default configurations
110 //
111 LpssDataHobPtr = &OsSlectionHobPtr->LpssData.LpssPciModeEnabled;
112 LpssDataVarPtr = &SystemConfiguration.LpssPciModeEnabled;
113 for (i = 0; i < sizeof(EFI_PLATFORM_LPSS_DATA); i++) {
114 *LpssDataVarPtr = *LpssDataHobPtr;
115 LpssDataVarPtr++;
116 LpssDataHobPtr++;
117 }
118
119 SystemConfiguration.GOPEnable = TRUE;
120
121 Status = gRT->SetVariable (
122 NORMAL_SETUP_NAME,
123 &gEfiNormalSetupGuid,
124 EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,
125 sizeof(SYSTEM_CONFIGURATION),
126 &SystemConfiguration
127 );
128 ASSERT_EFI_ERROR (Status);
129 }
130 }
131 }
132
133 GuidHob.Raw = GetHobList ();
134 if (GuidHob.Raw == NULL) {
135 return EFI_NOT_FOUND;
136 }
137
138 if ((GuidHob.Raw = GetNextGuidHob (&gEfiPlatformInfoGuid, GuidHob.Raw)) != NULL) {
139 PlatformInfoHobPtr = GET_GUID_HOB_DATA (GuidHob.Guid);
140 VarSize = sizeof(EFI_PLATFORM_INFO_HOB);
141 Status = gRT->GetVariable(
142 L"PlatformInfo",
143 &gEfiVlv2VariableGuid,
144 NULL,
145 &VarSize,
146 &TmpHob
147 );
148
149 if (EFI_ERROR(Status) || CompareMem (&TmpHob, PlatformInfoHobPtr, VarSize)) {
150
151 //
152 // Write the Platform Info to volatile memory
153 //
154 Status = gRT->SetVariable(
155 L"PlatformInfo",
156 &gEfiVlv2VariableGuid,
157 EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,
158 sizeof(EFI_PLATFORM_INFO_HOB),
159 PlatformInfoHobPtr
160 );
161 if (EFI_ERROR(Status)) {
162 return Status;
163 }
164 }
165 }
166
167 return EFI_SUCCESS;
168 }
169