xref: /netbsd-src/sys/external/bsd/acpica/dist/tools/acpisrc/acpisrc.h (revision 046a29855e04359424fd074e8313af6b6be8cfb6)
1 /******************************************************************************
2  *
3  * Module Name: acpisrc.h - Include file for AcpiSrc utility
4  *
5  *****************************************************************************/
6 
7 /*
8  * Copyright (C) 2000 - 2023, Intel Corp.
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions, and the following disclaimer,
16  *    without modification.
17  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18  *    substantially similar to the "NO WARRANTY" disclaimer below
19  *    ("Disclaimer") and any redistribution must be conditioned upon
20  *    including a substantially similar Disclaimer requirement for further
21  *    binary redistribution.
22  * 3. Neither the names of the above-listed copyright holders nor the names
23  *    of any contributors may be used to endorse or promote products derived
24  *    from this software without specific prior written permission.
25  *
26  * Alternatively, this software may be distributed under the terms of the
27  * GNU General Public License ("GPL") version 2 as published by the Free
28  * Software Foundation.
29  *
30  * NO WARRANTY
31  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
34  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41  * POSSIBILITY OF SUCH DAMAGES.
42  */
43 
44 #include "acpi.h"
45 #include "accommon.h"
46 #include "acapps.h"
47 
48 /* mkdir support */
49 
50 #ifdef WIN32
51 #include <direct.h>
52 #else
53 #define mkdir(x) mkdir(x, 0770)
54 #endif
55 
56 
57 /* Constants */
58 
59 #define LINES_IN_LEGAL_HEADER               115+36 /* intel+dual license. See legal header above at module start */
60 #define LEGAL_HEADER_SIGNATURE              " * 2.1. This is your license from Intel Corp. under its intellectual property"
61 #define LINES_IN_LINUX_HEADER               2 /* SPDX header is 1 line Intel copyright is another line */
62 #define LINUX_HEADER_SIGNATURE              " * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS"
63 #define LINES_IN_ASL_HEADER                 29 /* Header as output from disassembler */
64 
65 #define ASRC_MAX_FILE_SIZE                  (1024 * 100)
66 
67 #define FILE_TYPE_SOURCE                    1
68 #define FILE_TYPE_HEADER                    2
69 #define FILE_TYPE_DIRECTORY                 3
70 #define FILE_TYPE_PATCH                     4
71 
72 #define CVT_COUNT_TABS                      0x00000001
73 #define CVT_COUNT_NON_ANSI_COMMENTS         0x00000002
74 #define CVT_TRIM_LINES                      0x00000004
75 #define CVT_CHECK_BRACES                    0x00000008
76 #define CVT_COUNT_LINES                     0x00000010
77 #define CVT_BRACES_ON_SAME_LINE             0x00000020
78 #define CVT_MIXED_CASE_TO_UNDERSCORES       0x00000040
79 #define CVT_LOWER_CASE_IDENTIFIERS          0x00000080
80 #define CVT_REMOVE_DEBUG_MACROS             0x00000100
81 #define CVT_TRIM_WHITESPACE                 0x00000200  /* Should be after all line removal */
82 #define CVT_REMOVE_EMPTY_BLOCKS             0x00000400  /* Should be after trimming lines */
83 #define CVT_REDUCE_TYPEDEFS                 0x00000800
84 #define CVT_COUNT_SHORTMULTILINE_COMMENTS   0x00001000
85 #define CVT_SPACES_TO_TABS4                 0x40000000  /* Tab conversion should be last */
86 #define CVT_SPACES_TO_TABS8                 0x80000000  /* Tab conversion should be last */
87 
88 #define FLG_DEFAULT_FLAGS                   0x00000000
89 #define FLG_NO_CARRIAGE_RETURNS             0x00000001
90 #define FLG_NO_FILE_OUTPUT                  0x00000002
91 #define FLG_LOWERCASE_DIRNAMES              0x00000004
92 
93 #define AS_START_IGNORE                     "/*!"
94 #define AS_STOP_IGNORE                      "!*/"
95 
96 
97 /* Globals */
98 
99 extern UINT32                   Gbl_Files;
100 extern UINT32                   Gbl_MissingBraces;
101 extern UINT32                   Gbl_Tabs;
102 extern UINT32                   Gbl_NonAnsiComments;
103 extern UINT32                   Gbl_SourceLines;
104 extern UINT32                   Gbl_WhiteLines;
105 extern UINT32                   Gbl_CommentLines;
106 extern UINT32                   Gbl_LongLines;
107 extern UINT32                   Gbl_TotalLines;
108 extern UINT32                   Gbl_HeaderSize;
109 extern UINT32                   Gbl_HeaderLines;
110 extern struct stat              Gbl_StatBuf;
111 extern char                     *Gbl_FileBuffer;
112 extern UINT32                   Gbl_TotalSize;
113 extern UINT32                   Gbl_FileSize;
114 extern UINT32                   Gbl_FileType;
115 extern BOOLEAN                  Gbl_VerboseMode;
116 extern BOOLEAN                  Gbl_QuietMode;
117 extern BOOLEAN                  Gbl_BatchMode;
118 extern BOOLEAN                  Gbl_MadeChanges;
119 extern BOOLEAN                  Gbl_Overwrite;
120 extern BOOLEAN                  Gbl_WidenDeclarations;
121 extern BOOLEAN                  Gbl_IgnoreLoneLineFeeds;
122 extern BOOLEAN                  Gbl_HasLoneLineFeeds;
123 extern BOOLEAN                  Gbl_Cleanup;
124 extern BOOLEAN                  Gbl_IgnoreTranslationEscapes;
125 extern BOOLEAN                  Gbl_CheckAscii;
126 extern void                     *Gbl_StructDefs;
127 
128 #define PARAM_LIST(pl)          pl
129 #define TERSE_PRINT(a)          if (!Gbl_VerboseMode) printf PARAM_LIST(a)
130 #define VERBOSE_PRINT(a)        if (Gbl_VerboseMode) printf PARAM_LIST(a)
131 
132 #define REPLACE_WHOLE_WORD      0x00
133 #define REPLACE_SUBSTRINGS      0x01
134 #define REPLACE_MASK            0x01
135 
136 #define EXTRA_INDENT_C          0x02
137 
138 
139 /* Conversion table structs */
140 
141 typedef struct acpi_string_table
142 {
143     char                        *Target;
144     char                        *Replacement;
145     UINT8                       Type;
146 
147 } ACPI_STRING_TABLE;
148 
149 
150 typedef struct acpi_typed_identifier_table
151 {
152     char                        *Identifier;
153     UINT8                       Type;
154 
155 } ACPI_TYPED_IDENTIFIER_TABLE;
156 
157 #define SRC_TYPE_SIMPLE         0
158 #define SRC_TYPE_STRUCT         1
159 #define SRC_TYPE_UNION          2
160 
161 
162 typedef struct acpi_identifier_table
163 {
164     char                        *Identifier;
165 
166 } ACPI_IDENTIFIER_TABLE;
167 
168 typedef struct acpi_conversion_table
169 {
170     char                        *NewHeader;
171     UINT32                      Flags;
172 
173     ACPI_TYPED_IDENTIFIER_TABLE *LowerCaseTable;
174 
175     char                        *SourceSpdxHeader;
176     ACPI_STRING_TABLE           *SourceStringTable;
177     ACPI_IDENTIFIER_TABLE       *SourceLineTable;
178     ACPI_IDENTIFIER_TABLE       *SourceConditionalTable;
179     ACPI_IDENTIFIER_TABLE       *SourceMacroTable;
180     ACPI_TYPED_IDENTIFIER_TABLE *SourceStructTable;
181     ACPI_IDENTIFIER_TABLE       *SourceSpecialMacroTable;
182     UINT32                      SourceFunctions;
183 
184     char                        *HeaderSpdxHeader;
185     ACPI_STRING_TABLE           *HeaderStringTable;
186     ACPI_IDENTIFIER_TABLE       *HeaderLineTable;
187     ACPI_IDENTIFIER_TABLE       *HeaderConditionalTable;
188     ACPI_IDENTIFIER_TABLE       *HeaderMacroTable;
189     ACPI_TYPED_IDENTIFIER_TABLE *HeaderStructTable;
190     ACPI_IDENTIFIER_TABLE       *HeaderSpecialMacroTable;
191     UINT32                      HeaderFunctions;
192 
193     /* SPDX header conversion for patches is not supported */
194     ACPI_STRING_TABLE           *PatchStringTable;
195     ACPI_IDENTIFIER_TABLE       *PatchLineTable;
196     ACPI_IDENTIFIER_TABLE       *PatchConditionalTable;
197     ACPI_IDENTIFIER_TABLE       *PatchMacroTable;
198     ACPI_TYPED_IDENTIFIER_TABLE *PatchStructTable;
199     ACPI_IDENTIFIER_TABLE       *PatchSpecialMacroTable;
200     UINT32                      PatchFunctions;
201 
202 } ACPI_CONVERSION_TABLE;
203 
204 
205 /* Conversion tables */
206 
207 extern ACPI_CONVERSION_TABLE       LinuxConversionTable;
208 extern ACPI_CONVERSION_TABLE       CleanupConversionTable;
209 extern ACPI_CONVERSION_TABLE       StatsConversionTable;
210 extern ACPI_CONVERSION_TABLE       CustomConversionTable;
211 extern ACPI_CONVERSION_TABLE       LicenseConversionTable;
212 extern ACPI_CONVERSION_TABLE       IndentConversionTable;
213 
214 typedef
215 char * (*AS_SCAN_CALLBACK) (
216     char                    *Buffer,
217     char                    *Filename,
218     UINT32                  LineNumber);
219 
220 typedef struct as_brace_info
221 {
222     char                    *Operator;
223     UINT32                  Length;
224 
225 } AS_BRACE_INFO;
226 
227 
228 /* Prototypes */
229 
230 char *
231 AsSkipUntilChar (
232     char                    *Buffer,
233     char                    Target);
234 
235 char *
236 AsSkipPastChar (
237     char                    *Buffer,
238     char                    Target);
239 
240 char *
241 AsReplaceData (
242     char                    *Buffer,
243     UINT32                  LengthToRemove,
244     char                    *BufferToAdd,
245     UINT32                  LengthToAdd);
246 
247 int
248 AsReplaceString (
249     char                    *Target,
250     char                    *Replacement,
251     UINT8                   Type,
252     char                    *Buffer);
253 
254 int
255 AsLowerCaseString (
256     char                    *Target,
257     char                    *Buffer);
258 
259 void
260 AsRemoveLine (
261     char                    *Buffer,
262     char                    *Keyword);
263 
264 void
265 AsCheckForBraces (
266     char                    *Buffer,
267     char                    *Filename);
268 
269 void
270 AsTrimLines (
271     char                    *Buffer,
272     char                    *Filename);
273 
274 void
275 AsMixedCaseToUnderscores (
276     char                    *Buffer,
277     char                    *Filename);
278 
279 void
280 AsCountTabs (
281     char                    *Buffer,
282     char                    *Filename);
283 
284 void
285 AsBracesOnSameLine (
286     char                    *Buffer);
287 
288 void
289 AsLowerCaseIdentifiers (
290     char                    *Buffer);
291 
292 void
293 AsReduceTypedefs (
294     char                    *Buffer,
295     char                    *Keyword);
296 
297 void
298 AsRemoveDebugMacros (
299     char                    *Buffer);
300 
301 void
302 AsRemoveEmptyBlocks (
303     char                    *Buffer,
304     char                    *Filename);
305 
306 void
307 AsCleanupSpecialMacro (
308     char                    *Buffer,
309     char                    *Keyword);
310 
311 void
312 AsCountSourceLines (
313     char                    *Buffer,
314     char                    *Filename);
315 
316 void
317 AsCountNonAnsiComments (
318     char                    *Buffer,
319     char                    *Filename);
320 
321 void
322 AsTrimWhitespace (
323     char                    *Buffer);
324 
325 void
326 AsTabify4 (
327     char                    *Buffer);
328 
329 void
330 AsTabify8 (
331     char                    *Buffer);
332 
333 void
334 AsRemoveConditionalCompile (
335     char                    *Buffer,
336     char                    *Keyword);
337 
338 ACPI_NATIVE_INT
339 AsProcessTree (
340     ACPI_CONVERSION_TABLE   *ConversionTable,
341     char                    *SourcePath,
342     char                    *TargetPath);
343 
344 int
345 AsGetFile (
346     char                    *FileName,
347     char                    **FileBuffer,
348     UINT32                  *FileSize);
349 
350 int
351 AsPutFile (
352     char                    *Pathname,
353     char                    *FileBuffer,
354     UINT32                  SystemFlags);
355 
356 void
357 AsReplaceHeader (
358     char                    *Buffer,
359     char                    *NewHeader);
360 
361 void
362 AsDoSpdxHeader (
363     char                    *Buffer,
364     char                    *SpdxHeader);
365 
366 void
367 AsConvertFile (
368     ACPI_CONVERSION_TABLE   *ConversionTable,
369     char                    *FileBuffer,
370     char                    *Filename,
371     ACPI_NATIVE_INT         FileType);
372 
373 ACPI_NATIVE_INT
374 AsProcessOneFile (
375     ACPI_CONVERSION_TABLE   *ConversionTable,
376     char                    *SourcePath,
377     char                    *TargetPath,
378     int                     MaxPathLength,
379     char                    *Filename,
380     ACPI_NATIVE_INT         FileType);
381 
382 ACPI_NATIVE_INT
383 AsCheckForDirectory (
384     char                    *SourceDirPath,
385     char                    *TargetDirPath,
386     char                    *Filename,
387     char                    **SourcePath,
388     char                    **TargetPath);
389 
390 void
391 AsRemoveExtraLines (
392     char                    *FileBuffer,
393     char                    *Filename);
394 
395 void
396 AsRemoveSpacesAfterPeriod (
397     char                    *FileBuffer,
398     char                    *Filename);
399 
400 BOOLEAN
401 AsMatchExactWord (
402     char                    *Word,
403     UINT32                  WordLength);
404 
405 void
406 AsPrint (
407     char                    *Message,
408     UINT32                  Count,
409     char                    *Filename);
410 
411 void
412 AsInsertPrefix (
413     char                    *Buffer,
414     char                    *Keyword,
415     UINT8                   Type);
416 
417 char *
418 AsInsertData (
419     char                    *Buffer,
420     char                    *BufferToAdd,
421     UINT32                  LengthToAdd);
422 
423 char *
424 AsRemoveData (
425     char                    *StartPointer,
426     char                    *EndPointer);
427 
428 void
429 AsInsertCarriageReturns (
430     char                    *Buffer);
431 
432 void
433 AsConvertToLineFeeds (
434     char                    *Buffer);
435