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 }