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