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