1 /****************************************************************************** 2 * 3 * Module Name: abmain - Main module for the acpi binary utility 4 * 5 *****************************************************************************/ 6 7 /* 8 * Copyright (C) 2000 - 2016, 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 47 /* Local prototypes */ 48 49 static void 50 AbDisplayUsage ( 51 UINT8 OptionCount); 52 53 54 #define AB_UTILITY_NAME "ACPI Binary Table Dump Utility" 55 #define AB_SUPPORTED_OPTIONS "a:c:d:h:o:s:tv" 56 57 58 /****************************************************************************** 59 * 60 * FUNCTION: AbDisplayUsage 61 * 62 * DESCRIPTION: Usage message 63 * 64 ******************************************************************************/ 65 66 static void 67 AbDisplayUsage ( 68 UINT8 OptionCount) 69 { 70 71 if (OptionCount) 72 { 73 printf ("Option requires %u arguments\n\n", OptionCount); 74 } 75 76 ACPI_USAGE_HEADER ("acpibin [options]"); 77 78 ACPI_OPTION ("-a <File1> <File2>", "Compare two binary AML files, dump all mismatches"); 79 ACPI_OPTION ("-c <File1> <File2>", "Compare two binary AML files, dump first 100 mismatches"); 80 ACPI_OPTION ("-d <In> <Out>", "Dump AML binary to text file"); 81 ACPI_OPTION ("-e <Sig> <In> <Out>", "Extract binary AML table from acpidump file"); 82 ACPI_OPTION ("-o <Value>", "Start comparison at this offset into second file"); 83 ACPI_OPTION ("-h <File>", "Display table header for binary AML file"); 84 ACPI_OPTION ("-s <File>", "Update checksum for binary AML file"); 85 ACPI_OPTION ("-t", "Terse mode"); 86 ACPI_OPTION ("-v", "Display version information"); 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 ACPI_DEBUG_INITIALIZE (); /* For debug version only */ 108 109 AcpiGbl_DebugFile = NULL; 110 AcpiGbl_DbOutputFlags = DB_CONSOLE_OUTPUT; 111 112 AcpiOsInitialize (); 113 printf (ACPI_COMMON_SIGNON (AB_UTILITY_NAME)); 114 115 if (argc < 2) 116 { 117 AbDisplayUsage (0); 118 return (0); 119 } 120 121 /* Command line options */ 122 123 while ((j = AcpiGetopt (argc, argv, AB_SUPPORTED_OPTIONS)) != ACPI_OPT_END) switch(j) 124 { 125 case 'a': /* Compare Files, display all differences */ 126 127 AbGbl_DisplayAllMiscompares = TRUE; 128 129 /* Fallthrough */ 130 131 case 'c': /* Compare Files */ 132 133 if (argc < 4) 134 { 135 AbDisplayUsage (2); 136 return (-1); 137 } 138 139 Status = AbCompareAmlFiles (AcpiGbl_Optarg, argv[AcpiGbl_Optind]); 140 break; 141 142 case 'd': /* Dump AML file */ 143 144 if (argc < 4) 145 { 146 AbDisplayUsage (2); 147 return (-1); 148 } 149 150 Status = AbDumpAmlFile (AcpiGbl_Optarg, argv[AcpiGbl_Optind]); 151 break; 152 153 case 'h': /* Display ACPI table header */ 154 155 if (argc < 3) 156 { 157 AbDisplayUsage (1); 158 return (-1); 159 } 160 161 AbDisplayHeader (AcpiGbl_Optarg); 162 return (0); 163 164 case 'o': 165 166 AbGbl_CompareOffset = atoi (AcpiGbl_Optarg); 167 continue; 168 169 case 's': /* Compute/update checksum */ 170 171 if (argc < 3) 172 { 173 AbDisplayUsage (1); 174 return (-1); 175 } 176 177 AbComputeChecksum (AcpiGbl_Optarg); 178 return (0); 179 180 case 't': /* Enable terse mode */ 181 182 Gbl_TerseMode = TRUE; 183 break; 184 185 case 'v': /* -v: (Version): signon already emitted, just exit */ 186 187 return (0); 188 189 default: 190 191 AbDisplayUsage (0); 192 return (-1); 193 } 194 195 return (Status); 196 } 197