1 /******************************************************************************
2  *
3  * Module Name: abmain - Main module for the acpi binary utility
4  *
5  *****************************************************************************/
6 
7 /*
8  * Copyright (C) 2000 - 2015, 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 _DECLARE_GLOBALS
45 #include "acpibin.h"
46 #include "acapps.h"
47 
48 /* Local prototypes */
49 
50 static void
51 AbDisplayUsage (
52     UINT8                   OptionCount);
53 
54 
55 #define AB_UTILITY_NAME             "ACPI Binary Table Dump Utility"
56 #define AB_SUPPORTED_OPTIONS        "c:d:h:s:tv"
57 
58 
59 /******************************************************************************
60  *
61  * FUNCTION:    AbDisplayUsage
62  *
63  * DESCRIPTION: Usage message
64  *
65  ******************************************************************************/
66 
67 static void
68 AbDisplayUsage (
69     UINT8                   OptionCount)
70 {
71 
72     if (OptionCount)
73     {
74         printf ("Option requires %u arguments\n\n", OptionCount);
75     }
76 
77     ACPI_USAGE_HEADER ("acpibin [options]");
78 
79     ACPI_OPTION ("-c <File1><File2>",       "Compare two binary AML files");
80     ACPI_OPTION ("-d <In><Out>",            "Dump AML binary to text file");
81     ACPI_OPTION ("-h <File>",               "Display table header for binary AML file");
82     ACPI_OPTION ("-s <File>",               "Update checksum for binary AML file");
83     ACPI_OPTION ("-t",                      "Terse mode");
84     ACPI_OPTION ("-v",                      "Display version information");
85 }
86 
87 
88 /******************************************************************************
89  *
90  * FUNCTION:    main
91  *
92  * DESCRIPTION: C main function
93  *
94  ******************************************************************************/
95 
96 int ACPI_SYSTEM_XFACE
97 main (
98     int                     argc,
99     char                    *argv[])
100 {
101     int                     j;
102     int                     Status = AE_OK;
103 
104 
105     ACPI_DEBUG_INITIALIZE (); /* For debug version only */
106 
107     AcpiGbl_DebugFile = NULL;
108     AcpiGbl_DbOutputFlags = DB_CONSOLE_OUTPUT;
109 
110     AcpiOsInitialize ();
111     printf (ACPI_COMMON_SIGNON (AB_UTILITY_NAME));
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, AB_SUPPORTED_OPTIONS)) != ACPI_OPT_END) 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 'h':   /* Display ACPI table header */
146 
147         if (argc < 3)
148         {
149             AbDisplayUsage (1);
150             return (-1);
151         }
152 
153         AbDisplayHeader (AcpiGbl_Optarg);
154         return (0);
155 
156     case 's':   /* Compute/update checksum */
157 
158         if (argc < 3)
159         {
160             AbDisplayUsage (1);
161             return (-1);
162         }
163 
164         AbComputeChecksum (AcpiGbl_Optarg);
165         return (0);
166 
167     case 't':   /* Enable terse mode */
168 
169         Gbl_TerseMode = TRUE;
170         break;
171 
172     case 'v': /* -v: (Version): signon already emitted, just exit */
173 
174         return (0);
175 
176     default:
177 
178         AbDisplayUsage (0);
179         return (-1);
180     }
181 
182     return (Status);
183 }
184