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