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