]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/C/Common/CommonLib.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / BaseTools / Source / C / Common / CommonLib.h
CommitLineData
30fdf114 1/** @file\r
97fa0ee9 2Common library assistance routines.\r
30fdf114 3\r
e4fb8f1d 4Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>\r
2e351cbe 5SPDX-License-Identifier: BSD-2-Clause-Patent\r
30fdf114 6\r
30fdf114
LG
7**/\r
8\r
9#ifndef _EFI_COMMON_LIB_H\r
10#define _EFI_COMMON_LIB_H\r
11\r
12#include <Common/UefiBaseTypes.h>\r
b36d134f 13#include <Common/BuildVersion.h>\r
7dbc50bd 14#include <assert.h>\r
020ec963
EZ
15#ifndef _WIN32\r
16#include <limits.h>\r
17#endif\r
18\r
30fdf114 19#define PRINTED_GUID_BUFFER_SIZE 37 // including null-termination\r
1be2ed90 20\r
020ec963
EZ
21#ifdef PATH_MAX\r
22#define MAX_LONG_FILE_PATH PATH_MAX\r
23#else\r
1be2ed90 24#define MAX_LONG_FILE_PATH 500\r
020ec963 25#endif\r
1be2ed90 26\r
7dbc50bd 27#define MAX_UINT64 ((UINT64)0xFFFFFFFFFFFFFFFFULL)\r
4d393eb8 28#define MAX_UINT32 ((UINT32)0xFFFFFFFF)\r
7dbc50bd
YZ
29#define MAX_UINT16 ((UINT16)0xFFFF)\r
30#define MAX_UINT8 ((UINT8)0xFF)\r
31#define ARRAY_SIZE(Array) (sizeof (Array) / sizeof ((Array)[0]))\r
32#define ASCII_RSIZE_MAX 1000000\r
e4fb8f1d 33#undef RSIZE_MAX\r
7dbc50bd 34#define RSIZE_MAX 1000000\r
7dbc50bd
YZ
35\r
36#define IS_COMMA(a) ((a) == L',')\r
37#define IS_HYPHEN(a) ((a) == L'-')\r
38#define IS_DOT(a) ((a) == L'.')\r
39#define IS_LEFT_PARENTH(a) ((a) == L'(')\r
40#define IS_RIGHT_PARENTH(a) ((a) == L')')\r
41#define IS_SLASH(a) ((a) == L'/')\r
42#define IS_NULL(a) ((a) == L'\0')\r
43\r
44#define ASSERT(x) assert(x)\r
45\r
1be2ed90
HC
46#ifdef __cplusplus\r
47extern "C" {\r
48#endif\r
97fa0ee9 49\r
30fdf114
LG
50//\r
51// Function declarations\r
52//\r
53VOID\r
54PeiZeroMem (\r
55 IN VOID *Buffer,\r
56 IN UINTN Size\r
57 )\r
58;\r
59\r
60VOID\r
61PeiCopyMem (\r
62 IN VOID *Destination,\r
63 IN VOID *Source,\r
64 IN UINTN Length\r
65 )\r
66;\r
67\r
68VOID\r
69ZeroMem (\r
70 IN VOID *Buffer,\r
71 IN UINTN Size\r
72 )\r
73;\r
74\r
75VOID\r
76CopyMem (\r
77 IN VOID *Destination,\r
78 IN VOID *Source,\r
79 IN UINTN Length\r
80 )\r
81;\r
82\r
83INTN\r
84CompareGuid (\r
85 IN EFI_GUID *Guid1,\r
86 IN EFI_GUID *Guid2\r
87 )\r
88;\r
89\r
90EFI_STATUS\r
91GetFileImage (\r
92 IN CHAR8 *InputFileName,\r
93 OUT CHAR8 **InputFileImage,\r
94 OUT UINT32 *BytesRead\r
95 )\r
96;\r
97\r
98EFI_STATUS\r
99PutFileImage (\r
100 IN CHAR8 *OutputFileName,\r
101 IN CHAR8 *OutputFileImage,\r
102 IN UINT32 BytesToWrite\r
103 )\r
104;\r
105/*++\r
106\r
107Routine Description:\r
108\r
109 This function opens a file and writes OutputFileImage into the file.\r
110\r
111Arguments:\r
112\r
113 OutputFileName The name of the file to write.\r
114 OutputFileImage A pointer to the memory buffer.\r
115 BytesToWrite The size of the memory buffer.\r
116\r
117Returns:\r
118\r
119 EFI_SUCCESS The function completed successfully.\r
120 EFI_INVALID_PARAMETER One of the input parameters was invalid.\r
121 EFI_ABORTED An error occurred.\r
122 EFI_OUT_OF_RESOURCES No resource to complete operations.\r
123\r
124**/\r
125\r
126UINT8\r
127CalculateChecksum8 (\r
128 IN UINT8 *Buffer,\r
129 IN UINTN Size\r
130 )\r
131;\r
132\r
133UINT8\r
134CalculateSum8 (\r
135 IN UINT8 *Buffer,\r
136 IN UINTN Size\r
137 )\r
138;\r
139\r
140UINT16\r
141CalculateChecksum16 (\r
142 IN UINT16 *Buffer,\r
143 IN UINTN Size\r
144 )\r
145;\r
146\r
147UINT16\r
148CalculateSum16 (\r
149 IN UINT16 *Buffer,\r
150 IN UINTN Size\r
151 )\r
152;\r
153\r
154EFI_STATUS\r
155PrintGuid (\r
156 IN EFI_GUID *Guid\r
157 )\r
158;\r
159\r
160#define PRINTED_GUID_BUFFER_SIZE 37 // including null-termination\r
161EFI_STATUS\r
162PrintGuidToBuffer (\r
163 IN EFI_GUID *Guid,\r
164 IN OUT UINT8 *Buffer,\r
165 IN UINT32 BufferLen,\r
166 IN BOOLEAN Uppercase\r
167 )\r
168;\r
169\r
1be2ed90
HC
170CHAR8 *\r
171LongFilePath (\r
172 IN CHAR8 *FileName\r
173);\r
7dbc50bd
YZ
174\r
175UINTN\r
176StrLen (\r
177 CONST CHAR16 *String\r
178 );\r
179\r
180VOID *\r
181AllocateCopyPool (\r
182 UINTN AllocationSize,\r
183 CONST VOID *Buffer\r
184 );\r
185\r
186INTN\r
187StrnCmp (\r
188 CONST CHAR16 *FirstString,\r
189 CONST CHAR16 *SecondString,\r
190 UINTN Length\r
191 );\r
192\r
193RETURN_STATUS\r
194StrToGuid (\r
195 CONST CHAR16 *String,\r
196 EFI_GUID *Guid\r
197 );\r
198\r
199RETURN_STATUS\r
200StrHexToBytes (\r
201 CONST CHAR16 *String,\r
202 UINTN Length,\r
203 UINT8 *Buffer,\r
204 UINTN MaxBufferSize\r
205 );\r
206\r
207UINTN\r
208InternalHexCharToUintn (\r
209 CHAR16 Char\r
210 );\r
211\r
212VOID *\r
213InternalAllocateCopyPool (\r
214 UINTN AllocationSize,\r
215 CONST VOID *Buffer\r
216 );\r
217\r
218BOOLEAN\r
219InternalIsDecimalDigitCharacter (\r
220 CHAR16 Char\r
221 );\r
222\r
223UINT32\r
224SwapBytes32 (\r
225 UINT32 Value\r
226 );\r
227\r
228UINT16\r
229SwapBytes16 (\r
230 UINT16 Value\r
231 );\r
232\r
233EFI_GUID *\r
234CopyGuid (\r
235 EFI_GUID *DestinationGuid,\r
236 CONST EFI_GUID *SourceGuid\r
237 );\r
238\r
239UINT64\r
240WriteUnaligned64 (\r
241 UINT64 *Buffer,\r
242 UINT64 Value\r
243 );\r
244\r
245UINT64\r
246ReadUnaligned64 (\r
247 CONST UINT64 *Buffer\r
248 );\r
249\r
250UINTN\r
251StrSize (\r
252 CONST CHAR16 *String\r
253 );\r
254\r
7dbc50bd
YZ
255UINT64\r
256StrHexToUint64 (\r
257 CONST CHAR16 *String\r
258 );\r
259\r
260UINT64\r
261StrDecimalToUint64 (\r
262 CONST CHAR16 *String\r
263 );\r
264\r
265RETURN_STATUS\r
266StrHexToUint64S (\r
267 CONST CHAR16 *String,\r
268 CHAR16 **EndPointer,\r
269 UINT64 *Data\r
270 );\r
271\r
7dbc50bd
YZ
272RETURN_STATUS\r
273StrDecimalToUint64S (\r
274 CONST CHAR16 *String,\r
275 CHAR16 **EndPointer, OPTIONAL\r
276 UINT64 *Data\r
277 );\r
278\r
7dbc50bd
YZ
279VOID *\r
280ReallocatePool (\r
281 UINTN OldSize,\r
282 UINTN NewSize,\r
283 VOID *OldBuffer OPTIONAL\r
284 );\r
285\r
286VOID *\r
287InternalReallocatePool (\r
288 UINTN OldSize,\r
289 UINTN NewSize,\r
290 VOID *OldBuffer OPTIONAL\r
291 );\r
292\r
293VOID *\r
294InternalAllocateZeroPool (\r
295 UINTN AllocationSize\r
296 ) ;\r
297\r
298VOID *\r
299InternalAllocatePool (\r
300 UINTN AllocationSize\r
301 );\r
302\r
303UINTN\r
304StrnLenS (\r
305 CONST CHAR16 *String,\r
306 UINTN MaxSize\r
307 );\r
308\r
309CHAR16\r
310InternalCharToUpper (\r
311 CHAR16 Char\r
312 );\r
313\r
314INTN\r
315StrCmp (\r
316 CONST CHAR16 *FirstString,\r
317 CONST CHAR16 *SecondString\r
318 );\r
319\r
320UINT64\r
321SwapBytes64 (\r
322 UINT64 Value\r
323 );\r
324\r
325UINT64\r
326InternalMathSwapBytes64 (\r
327 UINT64 Operand\r
328 );\r
329\r
330RETURN_STATUS\r
331StrToIpv4Address (\r
332 CONST CHAR16 *String,\r
333 CHAR16 **EndPointer,\r
334 EFI_IPv4_ADDRESS *Address,\r
335 UINT8 *PrefixLength\r
336 );\r
337\r
338RETURN_STATUS\r
339StrToIpv6Address (\r
340 CONST CHAR16 *String,\r
341 CHAR16 **EndPointer,\r
342 EFI_IPv6_ADDRESS *Address,\r
343 UINT8 *PrefixLength\r
344 );\r
345\r
346RETURN_STATUS\r
347StrCpyS (\r
348 CHAR16 *Destination,\r
349 UINTN DestMax,\r
350 CONST CHAR16 *Source\r
351 );\r
352\r
353RETURN_STATUS\r
354UnicodeStrToAsciiStrS (\r
355 CONST CHAR16 *Source,\r
356 CHAR8 *Destination,\r
357 UINTN DestMax\r
358 );\r
359VOID *\r
360AllocatePool (\r
361 UINTN AllocationSize\r
362 );\r
363\r
364UINT16\r
365WriteUnaligned16 (\r
366 UINT16 *Buffer,\r
367 UINT16 Value\r
368 );\r
369\r
370UINT16\r
371ReadUnaligned16 (\r
372 CONST UINT16 *Buffer\r
373 );\r
374\r
375VOID *\r
376AllocateZeroPool (\r
377 UINTN AllocationSize\r
378 );\r
379\r
380BOOLEAN\r
381InternalIsHexaDecimalDigitCharacter (\r
382 CHAR16 Char\r
383 );\r
384\r
385BOOLEAN\r
386InternalSafeStringIsOverlap (\r
387 IN VOID *Base1,\r
388 IN UINTN Size1,\r
389 IN VOID *Base2,\r
390 IN UINTN Size2\r
391 );\r
392\r
393BOOLEAN\r
394InternalSafeStringNoStrOverlap (\r
395 IN CHAR16 *Str1,\r
396 IN UINTN Size1,\r
397 IN CHAR16 *Str2,\r
398 IN UINTN Size2\r
399 );\r
400\r
401BOOLEAN\r
402IsHexStr (\r
403 CHAR16 *Str\r
404 );\r
405\r
406UINTN\r
407Strtoi (\r
408 CHAR16 *Str\r
409 );\r
410\r
411VOID\r
412Strtoi64 (\r
413 CHAR16 *Str,\r
414 UINT64 *Data\r
415 );\r
416\r
417VOID\r
418StrToAscii (\r
419 CHAR16 *Str,\r
420 CHAR8 **AsciiStr\r
421 );\r
422\r
423CHAR16 *\r
424SplitStr (\r
425 CHAR16 **List,\r
426 CHAR16 Separator\r
427 );\r
428\r
1be2ed90
HC
429/*++\r
430\r
431Routine Description:\r
f7496d71 432 Convert FileName to the long file path, which can support larger than 260 length.\r
1be2ed90
HC
433\r
434Arguments:\r
f7496d71 435 FileName - FileName.\r
1be2ed90
HC
436\r
437Returns:\r
438 LongFilePath A pointer to the converted long file path.\r
f7496d71 439\r
1be2ed90
HC
440--*/\r
441\r
442#ifdef __cplusplus\r
443}\r
444#endif\r
445\r
30fdf114
LG
446#ifdef __GNUC__\r
447#include <stdio.h>\r
448#include <sys/stat.h>\r
449#define stricmp strcasecmp\r
450#define _stricmp strcasecmp\r
451#define strnicmp strncasecmp\r
452#define strcmpi strcasecmp\r
453size_t _filelength(int fd);\r
454#ifndef __CYGWIN__\r
455char *strlwr(char *s);\r
456#endif\r
457#endif\r
458\r
459//\r
460// On windows, mkdir only has one parameter.\r
461// On unix, it has two parameters\r
462//\r
463#if defined(__GNUC__)\r
464#define mkdir(dir, perm) mkdir(dir, perm)\r
465#else\r
466#define mkdir(dir, perm) mkdir(dir)\r
467#endif\r
468\r
469#endif\r