OpenCore  1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
PlatformInfo.c
Go to the documentation of this file.
1
16#include <Library/OcMiscLib.h>
17
18#include <Guid/AppleHob.h>
19#include <Pi/PiBootMode.h>
20#include <Pi/PiHob.h>
21#include <Library/HobLib.h>
22#include <Library/DebugLib.h>
23#include <Library/MemoryAllocationLib.h>
24
25EFI_STATUS
28 IN EFI_GUID *DataGuid,
29 IN OUT UINT32 *Size,
30 OUT VOID *Data
31 )
32{
33 EFI_STATUS Status;
34 UINT32 DataSize;
35
36 ASSERT (Size != NULL);
37 ASSERT (Data != NULL);
38 ASSERT (DataGuid != NULL);
39
40 Status = PlatformInfo->GetFirstDataSize (
41 PlatformInfo,
42 DataGuid,
43 &DataSize
44 );
45 if (EFI_ERROR (Status)) {
46 DEBUG ((
47 DEBUG_INFO,
48 "OCCPU: No first platform data size for %g up to %u - %r\n",
49 DataGuid,
50 *Size,
51 Status
52 ));
53 return Status;
54 }
55
56 if (DataSize > *Size) {
57 DEBUG ((
58 DEBUG_INFO,
59 "OCCPU: Invalid first platform data size %u for %g up to %u - %r\n",
60 DataSize,
61 DataGuid,
62 *Size,
63 Status
64 ));
65 return EFI_INVALID_PARAMETER;
66 }
67
68 Status = PlatformInfo->GetFirstData (
69 PlatformInfo,
70 DataGuid,
71 Data,
72 &DataSize
73 );
74 if (EFI_ERROR (Status)) {
75 DEBUG ((
76 DEBUG_INFO,
77 "OCCPU: No first platform data for %g up to %u - %r\n",
78 DataGuid,
79 *Size,
80 Status
81 ));
82 return Status;
83 }
84
85 *Size = DataSize;
86
87 return Status;
88}
89
90EFI_STATUS
93 IN EFI_GUID *DataGuid,
94 OUT UINT32 *Size,
95 OUT VOID **Data
96 )
97{
98 EFI_STATUS Status;
99 UINT32 DataSize;
100
101 ASSERT (Size != NULL);
102 ASSERT (Data != NULL);
103 ASSERT (DataGuid != NULL);
104
105 Status = PlatformInfo->GetFirstDataSize (
106 PlatformInfo,
107 DataGuid,
108 &DataSize
109 );
110 if (EFI_ERROR (Status)) {
111 DEBUG ((
112 DEBUG_INFO,
113 "OCCPU: No first platform data size for %g - %r\n",
114 DataGuid,
115 Status
116 ));
117 return Status;
118 }
119
120 *Data = AllocatePool (DataSize);
121 if (*Data == NULL) {
122 DEBUG ((
123 DEBUG_INFO,
124 "OCCPU: Cannot alloc %u for first platform data %g\n",
125 DataSize,
126 DataGuid
127 ));
128 return EFI_OUT_OF_RESOURCES;
129 }
130
131 Status = PlatformInfo->GetFirstData (
132 PlatformInfo,
133 DataGuid,
134 *Data,
135 &DataSize
136 );
137 if (EFI_ERROR (Status)) {
138 DEBUG ((
139 DEBUG_INFO,
140 "OCCPU: No first platform data for %g with %u - %r\n",
141 DataGuid,
142 DataSize,
143 Status
144 ));
145 FreePool (*Data);
146 return Status;
147 }
148
149 *Size = DataSize;
150
151 return Status;
152}
153
154EFI_STATUS
157 IN EFI_GUID *DataGuid,
158 IN EFI_GUID *HobGuid,
159 IN OUT UINT32 *Size,
160 OUT VOID *Data
161 )
162{
163 EFI_STATUS Status;
164 VOID *FsbHob;
165 UINT32 DataSize;
166
167 ASSERT (Size != NULL);
168 ASSERT (Data != NULL);
169 ASSERT (DataGuid != NULL);
170 ASSERT (HobGuid != NULL);
171
172 FsbHob = GetFirstGuidHob (HobGuid);
173 if (FsbHob == NULL) {
174 return EFI_UNSUPPORTED;
175 }
176
177 Status = PlatformInfo->GetDataSize (
178 PlatformInfo,
179 DataGuid,
180 *(UINT8 *)GET_GUID_HOB_DATA (FsbHob),
181 &DataSize
182 );
183 if (EFI_ERROR (Status)) {
184 DEBUG ((
185 DEBUG_INFO,
186 "OCCPU: No platform data size for %g up to %u - %r\n",
187 DataGuid,
188 *Size,
189 Status
190 ));
191 return Status;
192 }
193
194 if (DataSize > *Size) {
195 DEBUG ((
196 DEBUG_INFO,
197 "OCCPU: Invalid platform data size %u for %g up to %u - %r\n",
198 DataSize,
199 DataGuid,
200 *Size,
201 Status
202 ));
203 return EFI_INVALID_PARAMETER;
204 }
205
206 Status = PlatformInfo->GetData (
207 PlatformInfo,
208 DataGuid,
209 *(UINT8 *)GET_GUID_HOB_DATA (FsbHob),
210 Data,
211 &DataSize
212 );
213 if (EFI_ERROR (Status)) {
214 DEBUG ((
215 DEBUG_INFO,
216 "OCCPU: No platform data for %g up to %u - %r\n",
217 DataGuid,
218 *Size,
219 Status
220 ));
221 return Status;
222 }
223
224 *Size = DataSize;
225
226 return Status;
227}
DMG_SIZE_DEVICE_PATH Size
EFI_STATUS OcReadApplePlatformFirstDataAlloc(IN APPLE_PLATFORM_INFO_DATABASE_PROTOCOL *PlatformInfo, IN EFI_GUID *DataGuid, OUT UINT32 *Size, OUT VOID **Data)
EFI_STATUS OcReadApplePlatformFirstData(IN APPLE_PLATFORM_INFO_DATABASE_PROTOCOL *PlatformInfo, IN EFI_GUID *DataGuid, IN OUT UINT32 *Size, OUT VOID *Data)
EFI_STATUS OcReadApplePlatformData(IN APPLE_PLATFORM_INFO_DATABASE_PROTOCOL *PlatformInfo, IN EFI_GUID *DataGuid, IN EFI_GUID *HobGuid, IN OUT UINT32 *Size, OUT VOID *Data)
VOID *EFIAPI GetFirstGuidHob(IN CONST EFI_GUID *Guid)
Definition UserMisc.c:671
#define ASSERT(x)
Definition coder.h:55