ahmain.c revision 1.1.1.11 1 /******************************************************************************
2 *
3 * Module Name: ahmain - Main module for the acpi help utility
4 *
5 *****************************************************************************/
6
7 /*
8 * Copyright (C) 2000 - 2019, 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 MERCHANTIBILITY 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^"
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
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
93 ACPI_USAGE_TEXT ("\nASL Names and Symbols (ACPI Source Language):\n");
94 ACPI_OPTION ("-k [Name/Prefix | *]", "Display ASL non-operator keyword(s)");
95 ACPI_OPTION ("-p [Name/Prefix | *]", "Display ASL predefined method name(s)");
96 ACPI_OPTION ("-s [Name/Prefix | *]", "Display ASL operator name(s)");
97
98 ACPI_USAGE_TEXT ("\nOther miscellaneous ACPI Names:\n");
99 ACPI_OPTION ("-i [Name/Prefix | *]", "Display ACPI/PNP Hardware ID(s)");
100 ACPI_OPTION ("-d", "Display iASL Preprocessor directives");
101 ACPI_OPTION ("-t", "Display supported ACPI tables");
102 ACPI_OPTION ("-u", "Display ACPI-related UUIDs");
103
104 ACPI_USAGE_TEXT ("\nName/Prefix or HexValue not specified means \"Display All\"\n");
105 ACPI_USAGE_TEXT ("\nDefault search with valid Name/Prefix and no options:\n");
106 ACPI_USAGE_TEXT (" Find ASL/AML operator names - if NamePrefix does not start with underscore\n");
107 ACPI_USAGE_TEXT (" Find ASL predefined method names - if NamePrefix starts with underscore\n");
108 }
109
110
111 /******************************************************************************
112 *
113 * FUNCTION: main
114 *
115 * DESCRIPTION: C main function for AcpiHelp utility.
116 *
117 ******************************************************************************/
118
119 int ACPI_SYSTEM_XFACE
120 main (
121 int argc,
122 char *argv[])
123 {
124 char *Name;
125 UINT32 DecodeType;
126 int j;
127
128
129 AcpiOsInitialize ();
130 ACPI_DEBUG_INITIALIZE (); /* For debug version only */
131 printf (ACPI_COMMON_SIGNON (AH_UTILITY_NAME));
132 DecodeType = AH_DECODE_DEFAULT;
133
134 if (argc < 2)
135 {
136 AhDisplayUsage ();
137 return (0);
138 }
139
140 /* Command line options */
141
142 while ((j = AcpiGetopt (argc, argv, AH_SUPPORTED_OPTIONS)) != ACPI_OPT_END) switch (j)
143 {
144 case 'a':
145
146 DecodeType = AH_DECODE_ASL_AML;
147 break;
148
149 case 'd':
150
151 DecodeType = AH_DISPLAY_DIRECTIVES;
152 break;
153
154 case 'e':
155
156 DecodeType = AH_DECODE_EXCEPTION;
157 break;
158
159 case 'g':
160
161 DecodeType = AH_DECODE_AML_TYPE;
162 break;
163
164 case 'i':
165
166 DecodeType = AH_DISPLAY_DEVICE_IDS;
167 break;
168
169 case 'k':
170
171 DecodeType = AH_DECODE_ASL_KEYWORD;
172 break;
173
174 case 'm':
175
176 DecodeType = AH_DECODE_AML;
177 break;
178
179 case 'o':
180
181 DecodeType = AH_DECODE_AML_OPCODE;
182 break;
183
184 case 'p':
185
186 DecodeType = AH_DECODE_PREDEFINED_NAME;
187 break;
188
189 case 's':
190
191 DecodeType = AH_DECODE_ASL;
192 break;
193
194 case 't':
195
196 DecodeType = AH_DISPLAY_TABLES;
197 break;
198
199 case 'u':
200
201 DecodeType = AH_DISPLAY_UUIDS;
202 break;
203
204 case 'v': /* -v: (Version): signon already emitted, just exit */
205
206 switch (AcpiGbl_Optarg[0])
207 {
208 case '^': /* -v: (Version) */
209
210 return (1);
211
212 case 'd':
213
214 printf (ACPI_COMMON_BUILD_TIME);
215 return (1);
216
217 default:
218
219 printf ("Unknown option: -v%s\n", AcpiGbl_Optarg);
220 return (-1);
221 }
222 break;
223
224 case 'h':
225 default:
226
227 AhDisplayUsage ();
228 return (-1);
229 }
230
231 /* Missing (null) name means "display all" */
232
233 Name = argv[AcpiGbl_Optind];
234
235 switch (DecodeType)
236 {
237 case AH_DECODE_ASL_AML:
238
239 AhFindAslAndAmlOperators (Name);
240 break;
241
242 case AH_DECODE_AML:
243
244 AhFindAmlOpcode (Name);
245 break;
246
247 case AH_DECODE_AML_OPCODE:
248
249 AhDecodeAmlOpcode (Name);
250 break;
251
252 case AH_DECODE_AML_TYPE:
253
254 AhFindAmlTypes (Name);
255 break;
256
257 case AH_DECODE_PREDEFINED_NAME:
258
259 AhFindPredefinedNames (Name);
260 break;
261
262 case AH_DECODE_ASL:
263
264 AhFindAslOperators (Name);
265 break;
266
267 case AH_DECODE_ASL_KEYWORD:
268
269 AhFindAslKeywords (Name);
270 break;
271
272 case AH_DISPLAY_DEVICE_IDS:
273
274 AhDisplayDeviceIds (Name);
275 break;
276
277 case AH_DECODE_EXCEPTION:
278
279 AhDecodeException (Name);
280 break;
281
282 case AH_DISPLAY_UUIDS:
283
284 AhDisplayUuids ();
285 break;
286
287 case AH_DISPLAY_TABLES:
288
289 AhDisplayTables ();
290 break;
291
292 case AH_DISPLAY_DIRECTIVES:
293
294 AhDisplayDirectives ();
295 break;
296
297 default:
298
299 if (!Name)
300 {
301 AhFindAslOperators (Name);
302 break;
303 }
304
305 if (*Name == '_')
306 {
307 AhFindPredefinedNames (Name);
308 }
309 else
310 {
311 AhFindAslAndAmlOperators (Name);
312 }
313 break;
314 }
315
316 return (0);
317 }
318