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:e: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 ("-e <Sig><In><Out>", "Extract binary AML table from AcpiDump 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)) != EOF) switch(j) 124 { 125 case 'c': /* Compare Files */ 126 127 if (argc < 4) 128 { 129 AbDisplayUsage (2); 130 return (-1); 131 } 132 133 Status = AbCompareAmlFiles (AcpiGbl_Optarg, argv[AcpiGbl_Optind]); 134 break; 135 136 case 'd': /* Dump AML file */ 137 138 if (argc < 4) 139 { 140 AbDisplayUsage (2); 141 return (-1); 142 } 143 144 Status = AbDumpAmlFile (AcpiGbl_Optarg, argv[AcpiGbl_Optind]); 145 break; 146 147 case 'e': /* Extract AML text file */ 148 149 if (argc < 5) 150 { 151 AbDisplayUsage (3); 152 return (-1); 153 } 154 155 Status = AbExtractAmlFile (AcpiGbl_Optarg, argv[AcpiGbl_Optind], 156 argv[AcpiGbl_Optind+1]); 157 break; 158 159 case 'h': /* Display ACPI table header */ 160 161 if (argc < 3) 162 { 163 AbDisplayUsage (1); 164 return (-1); 165 } 166 167 AbDisplayHeader (AcpiGbl_Optarg); 168 return (0); 169 170 case 's': /* Compute/update checksum */ 171 172 if (argc < 3) 173 { 174 AbDisplayUsage (1); 175 return (-1); 176 } 177 178 AbComputeChecksum (AcpiGbl_Optarg); 179 return (0); 180 181 case 't': /* Enable terse mode */ 182 183 Gbl_TerseMode = TRUE; 184 break; 185 186 case 'v': /* -v: (Version): signon already emitted, just exit */ 187 188 return (0); 189 190 default: 191 192 AbDisplayUsage (0); 193 return (-1); 194 } 195 196 return (Status); 197 }