xref: /netbsd-src/sys/external/bsd/acpica/dist/tools/acpihelp/ahmain.c (revision 046a29855e04359424fd074e8313af6b6be8cfb6)
1 /******************************************************************************
2  *
3  * Module Name: ahmain - Main module for the acpi help 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 #define DEFINE_AHELP_GLOBALS
45 #include "acpihelp.h"
46 
47 
48 /* Local prototypes */
49 
50 static void
51 AhDisplayUsage (
52     void);
53 
54 #define AH_UTILITY_NAME             "ACPI Help Utility"
55 #define AH_SUPPORTED_OPTIONS        "adeghikmopstuv^x"
56 
57 
58 #if defined ACPI_OPTION
59 #undef ACPI_OPTION
60 #endif
61 
62 #define ACPI_OPTION(Name, Description) \
63     AcpiOsPrintf ("  %-24s%s\n", Name, Description);
64 
65 
66 /******************************************************************************
67  *
68  * FUNCTION:    AhDisplayUsage
69  *
70  * DESCRIPTION: Usage message
71  *
72  ******************************************************************************/
73 
74 static void
AhDisplayUsage(void)75 AhDisplayUsage (
76     void)
77 {
78 
79     ACPI_USAGE_HEADER ("acpihelp <options> [Name/Prefix | HexValue]");
80     ACPI_OPTION ("-h",                      "Display help");
81     ACPI_OPTION ("-v",                      "Display version information");
82     ACPI_OPTION ("-vd",                     "Display build date and time");
83 
84     ACPI_USAGE_TEXT ("\nAML Names and Encodings (ACPI Machine Language):\n");
85     ACPI_OPTION ("-a [Name/Prefix | *]",    "Display both ASL operator and AML opcode name(s)");
86     ACPI_OPTION ("-g [Name/Prefix | *]",    "Display AML grammar elements(s)");
87     ACPI_OPTION ("-m [Name/Prefix | *]",    "Display AML opcode name(s)");
88 
89     ACPI_USAGE_TEXT ("\nACPI Values:\n");
90     ACPI_OPTION ("-e [HexValue]",           "Decode ACPICA exception code");
91     ACPI_OPTION ("-o [HexValue]",           "Decode hex AML opcode");
92     ACPI_OPTION ("-x [HexValue]",           "Decode iASL exception code");
93 
94     ACPI_USAGE_TEXT ("\nASL Names and Symbols (ACPI Source Language):\n");
95     ACPI_OPTION ("-k [Name/Prefix | *]",    "Display ASL non-operator keyword(s)");
96     ACPI_OPTION ("-p [Name/Prefix | *]",    "Display ASL predefined method name(s)");
97     ACPI_OPTION ("-s [Name/Prefix | *]",    "Display ASL operator name(s)");
98 
99     ACPI_USAGE_TEXT ("\nOther miscellaneous ACPI Names:\n");
100     ACPI_OPTION ("-i [Name/Prefix | *]",    "Display ACPI/PNP Hardware ID(s)");
101     ACPI_OPTION ("-d",                      "Display iASL Preprocessor directives");
102     ACPI_OPTION ("-t",                      "Display supported ACPI tables");
103     ACPI_OPTION ("-u",                      "Display ACPI-related UUIDs");
104 
105     ACPI_USAGE_TEXT ("\nName/Prefix or HexValue not specified means \"Display All\"\n");
106     ACPI_USAGE_TEXT ("\nDefault search with valid Name/Prefix and no options:\n");
107     ACPI_USAGE_TEXT ("    Find ASL/AML operator names - if NamePrefix does not start with underscore\n");
108     ACPI_USAGE_TEXT ("    Find ASL predefined method names - if NamePrefix starts with underscore\n");
109 }
110 
111 
112 /******************************************************************************
113  *
114  * FUNCTION:    main
115  *
116  * DESCRIPTION: C main function for AcpiHelp utility.
117  *
118  ******************************************************************************/
119 
120 int ACPI_SYSTEM_XFACE
main(int argc,char * argv[])121 main (
122     int                     argc,
123     char                    *argv[])
124 {
125     char                    *Name;
126     UINT32                  DecodeType;
127     int                     j;
128 
129 
130     AcpiOsInitialize ();
131     ACPI_DEBUG_INITIALIZE (); /* For debug version only */
132     printf (ACPI_COMMON_SIGNON (AH_UTILITY_NAME));
133     DecodeType = AH_DECODE_DEFAULT;
134 
135     if (argc < 2)
136     {
137         AhDisplayUsage ();
138         return (0);
139     }
140 
141     /* Command line options */
142 
143     while ((j = AcpiGetopt (argc, argv, AH_SUPPORTED_OPTIONS)) != ACPI_OPT_END) switch (j)
144     {
145     case 'a':
146 
147         DecodeType = AH_DECODE_ASL_AML;
148         break;
149 
150     case 'd':
151 
152         DecodeType = AH_DISPLAY_DIRECTIVES;
153         break;
154 
155     case 'e':
156 
157         DecodeType = AH_DECODE_EXCEPTION;
158         break;
159 
160     case 'g':
161 
162         DecodeType = AH_DECODE_AML_TYPE;
163         break;
164 
165     case 'i':
166 
167         DecodeType = AH_DISPLAY_DEVICE_IDS;
168         break;
169 
170     case 'k':
171 
172         DecodeType = AH_DECODE_ASL_KEYWORD;
173         break;
174 
175     case 'm':
176 
177         DecodeType = AH_DECODE_AML;
178         break;
179 
180     case 'o':
181 
182         DecodeType = AH_DECODE_AML_OPCODE;
183         break;
184 
185     case 'p':
186 
187         DecodeType = AH_DECODE_PREDEFINED_NAME;
188         break;
189 
190     case 's':
191 
192         DecodeType = AH_DECODE_ASL;
193         break;
194 
195     case 't':
196 
197         DecodeType = AH_DISPLAY_TABLES;
198         break;
199 
200     case 'u':
201 
202         DecodeType = AH_DISPLAY_UUIDS;
203         break;
204 
205     case 'x':
206 
207         DecodeType = AH_DECODE_ASL_EXCEPTION;
208         break;
209 
210     case 'v': /* -v: (Version): signon already emitted, just exit */
211 
212         switch (AcpiGbl_Optarg[0])
213         {
214         case '^':  /* -v: (Version) */
215 
216             return (1);
217 
218         case 'd':
219 
220             printf (ACPI_COMMON_BUILD_TIME);
221             return (1);
222 
223         default:
224 
225             printf ("Unknown option: -v%s\n", AcpiGbl_Optarg);
226             return (-1);
227         }
228         break;
229 
230     case 'h':
231     default:
232 
233         AhDisplayUsage ();
234         return (-1);
235     }
236 
237     /* Missing (null) name means "display all" */
238 
239     Name = argv[AcpiGbl_Optind];
240 
241     switch (DecodeType)
242     {
243     case AH_DECODE_ASL_AML:
244 
245         AhFindAslAndAmlOperators (Name);
246         break;
247 
248     case AH_DECODE_AML:
249 
250         AhFindAmlOpcode (Name);
251         break;
252 
253     case AH_DECODE_AML_OPCODE:
254 
255         AhDecodeAmlOpcode (Name);
256         break;
257 
258     case AH_DECODE_AML_TYPE:
259 
260         AhFindAmlTypes (Name);
261         break;
262 
263     case AH_DECODE_PREDEFINED_NAME:
264 
265         AhFindPredefinedNames (Name);
266         break;
267 
268     case AH_DECODE_ASL:
269 
270         AhFindAslOperators (Name);
271         break;
272 
273     case AH_DECODE_ASL_KEYWORD:
274 
275         AhFindAslKeywords (Name);
276         break;
277 
278     case AH_DISPLAY_DEVICE_IDS:
279 
280         AhDisplayDeviceIds (Name);
281         break;
282 
283     case AH_DECODE_EXCEPTION:
284 
285         AhDecodeException (Name);
286         break;
287 
288     case AH_DISPLAY_UUIDS:
289 
290         AhDisplayUuids ();
291         break;
292 
293     case AH_DISPLAY_TABLES:
294 
295         AhDisplayTables ();
296         break;
297 
298     case AH_DISPLAY_DIRECTIVES:
299 
300         AhDisplayDirectives ();
301         break;
302 
303     case AH_DECODE_ASL_EXCEPTION:
304 
305         AhDecodeAslException (Name);
306         break;
307 
308    default:
309 
310         if (!Name)
311         {
312             AhFindAslOperators (Name);
313             break;
314         }
315 
316         if (*Name == '_')
317         {
318             AhFindPredefinedNames (Name);
319         }
320         else
321         {
322             AhFindAslAndAmlOperators (Name);
323         }
324         break;
325     }
326 
327     return (0);
328 }
329