xref: /netbsd-src/sys/external/bsd/acpica/dist/tools/acpibin/abmain.c (revision af56d1fe9956bd7c616e18c1b7f025f464618471)
1 
2 /******************************************************************************
3  *
4  * Module Name: abmain - Main module for the acpi binary utility
5  *
6  *****************************************************************************/
7 
8 /*
9  * Copyright (C) 2000 - 2011, Intel Corp.
10  * All rights reserved.
11  *
12  * Redistribution and use in source and binary forms, with or without
13  * modification, are permitted provided that the following conditions
14  * are met:
15  * 1. Redistributions of source code must retain the above copyright
16  *    notice, this list of conditions, and the following disclaimer,
17  *    without modification.
18  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
19  *    substantially similar to the "NO WARRANTY" disclaimer below
20  *    ("Disclaimer") and any redistribution must be conditioned upon
21  *    including a substantially similar Disclaimer requirement for further
22  *    binary redistribution.
23  * 3. Neither the names of the above-listed copyright holders nor the names
24  *    of any contributors may be used to endorse or promote products derived
25  *    from this software without specific prior written permission.
26  *
27  * Alternatively, this software may be distributed under the terms of the
28  * GNU General Public License ("GPL") version 2 as published by the Free
29  * Software Foundation.
30  *
31  * NO WARRANTY
32  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
33  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
34  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
35  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
36  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
37  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
38  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
40  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
41  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
42  * POSSIBILITY OF SUCH DAMAGES.
43  */
44 
45 
46 #define _DECLARE_GLOBALS
47 #include "acpibin.h"
48 #include "acapps.h"
49 
50 /* Local prototypes */
51 
52 static void
53 AbDisplayUsage (
54     UINT8                   OptionCount);
55 
56 
57 /******************************************************************************
58  *
59  * FUNCTION:    AbDisplayUsage
60  *
61  * DESCRIPTION: Usage message
62  *
63  ******************************************************************************/
64 
65 static void
66 AbDisplayUsage (
67     UINT8                   OptionCount)
68 {
69 
70     if (OptionCount)
71     {
72         printf ("Option requires %u arguments\n\n", OptionCount);
73     }
74 
75     printf ("Usage: acpibin [options]\n\n");
76     printf ("Options:\n\n");
77     printf (" -c <File1> <File2>           Compare two AML files\n");
78     printf (" -d <InFile> <OutFile>        Dump AML binary to text file\n");
79     printf (" -e <Sig> <InFile> <OutFile>  Extract binary AML table from AcpiDmp file\n\n");
80 
81     printf (" -h <File>                    Display table header for binary AML file\n");
82     printf (" -s <File>                    Update checksum for binary AML file\n");
83     printf (" -t                           Terse mode\n");
84 
85     printf ("\n");
86     return;
87 }
88 
89 
90 /******************************************************************************
91  *
92  * FUNCTION:    main
93  *
94  * DESCRIPTION: C main function
95  *
96  ******************************************************************************/
97 
98 int ACPI_SYSTEM_XFACE
99 main (
100     int                     argc,
101     char                    *argv[])
102 {
103     int                     j;
104     int                     Status = AE_OK;
105 
106 
107     AcpiGbl_DebugFile = NULL;
108     AcpiGbl_DbOutputFlags = DB_CONSOLE_OUTPUT ;
109 
110     AcpiOsInitialize ();
111     printf (ACPI_COMMON_SIGNON ("ACPI Binary AML File Utility"));
112 
113     if (argc < 2)
114     {
115         AbDisplayUsage (0);
116         return 0;
117     }
118 
119     /* Command line options */
120 
121     while ((j = AcpiGetopt (argc, argv, "c:d:e:h:s:t")) != EOF) switch(j)
122     {
123     case 'c':   /* Compare Files */
124 
125         if (argc < 4)
126         {
127             AbDisplayUsage (2);
128             return -1;
129         }
130 
131         Status = AbCompareAmlFiles (AcpiGbl_Optarg, argv[AcpiGbl_Optind]);
132         break;
133 
134     case 'd':   /* Dump AML file */
135 
136         if (argc < 4)
137         {
138             AbDisplayUsage (2);
139             return -1;
140         }
141 
142         Status = AbDumpAmlFile (AcpiGbl_Optarg, argv[AcpiGbl_Optind]);
143         break;
144 
145     case 'e':   /* Extract AML text file */
146 
147         if (argc < 5)
148         {
149             AbDisplayUsage (3);
150             return -1;
151         }
152 
153         Status = AbExtractAmlFile (AcpiGbl_Optarg, argv[AcpiGbl_Optind],
154                     argv[AcpiGbl_Optind+1]);
155         break;
156 
157     case 'h':   /* Display ACPI table header */
158 
159         if (argc < 3)
160         {
161             AbDisplayUsage (1);
162             return -1;
163         }
164 
165         AbDisplayHeader (AcpiGbl_Optarg);
166         return (0);
167 
168     case 's':   /* Compute/update checksum */
169 
170         if (argc < 3)
171         {
172             AbDisplayUsage (1);
173             return -1;
174         }
175 
176         AbComputeChecksum (AcpiGbl_Optarg);
177         return (0);
178 
179     case 't':   /* Enable terse mode */
180 
181         Gbl_TerseMode = TRUE;
182         break;
183 
184     default:
185         AbDisplayUsage (0);
186         return -1;
187     }
188 
189     return Status;
190 }
191