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