Blame source/tools/acpibin/abmain.c

Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * Module Name: abmain - Main module for the acpi binary utility
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
/*
Packit Service 1fb00e
 * Copyright (C) 2000 - 2018, Intel Corp.
Packit Service 1fb00e
 * All rights reserved.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * Redistribution and use in source and binary forms, with or without
Packit Service 1fb00e
 * modification, are permitted provided that the following conditions
Packit Service 1fb00e
 * are met:
Packit Service 1fb00e
 * 1. Redistributions of source code must retain the above copyright
Packit Service 1fb00e
 *    notice, this list of conditions, and the following disclaimer,
Packit Service 1fb00e
 *    without modification.
Packit Service 1fb00e
 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
Packit Service 1fb00e
 *    substantially similar to the "NO WARRANTY" disclaimer below
Packit Service 1fb00e
 *    ("Disclaimer") and any redistribution must be conditioned upon
Packit Service 1fb00e
 *    including a substantially similar Disclaimer requirement for further
Packit Service 1fb00e
 *    binary redistribution.
Packit Service 1fb00e
 * 3. Neither the names of the above-listed copyright holders nor the names
Packit Service 1fb00e
 *    of any contributors may be used to endorse or promote products derived
Packit Service 1fb00e
 *    from this software without specific prior written permission.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * Alternatively, this software may be distributed under the terms of the
Packit Service 1fb00e
 * GNU General Public License ("GPL") version 2 as published by the Free
Packit Service 1fb00e
 * Software Foundation.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * NO WARRANTY
Packit Service 1fb00e
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
Packit Service 1fb00e
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
Packit Service 1fb00e
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
Packit Service 1fb00e
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
Packit Service 1fb00e
 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Packit Service 1fb00e
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
Packit Service 1fb00e
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
Packit Service 1fb00e
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
Packit Service 1fb00e
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
Packit Service 1fb00e
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
Packit Service 1fb00e
 * POSSIBILITY OF SUCH DAMAGES.
Packit Service 1fb00e
 */
Packit Service 1fb00e
Packit Service 1fb00e
#define _DECLARE_GLOBALS
Packit Service 1fb00e
#include "acpibin.h"
Packit Service 1fb00e
Packit Service 1fb00e
/* Local prototypes */
Packit Service 1fb00e
Packit Service 1fb00e
static void
Packit Service 1fb00e
AbDisplayUsage (
Packit Service 1fb00e
    UINT8                   OptionCount);
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
#define AB_UTILITY_NAME             "ACPI Binary Table Dump Utility"
Packit Service 1fb00e
#define AB_SUPPORTED_OPTIONS        "a:c:d:h:o:s:tv^"
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    AbDisplayUsage
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Usage message
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
static void
Packit Service 1fb00e
AbDisplayUsage (
Packit Service 1fb00e
    UINT8                   OptionCount)
Packit Service 1fb00e
{
Packit Service 1fb00e
Packit Service 1fb00e
    if (OptionCount)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        printf ("Option requires %u arguments\n\n", OptionCount);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    ACPI_USAGE_HEADER ("acpibin [options]");
Packit Service 1fb00e
Packit Service 1fb00e
    ACPI_OPTION ("-a <File1> <File2>",      "Compare two binary AML files, dump all mismatches");
Packit Service 1fb00e
    ACPI_OPTION ("-c <File1> <File2>",      "Compare two binary AML files, dump first 100 mismatches");
Packit Service 1fb00e
    ACPI_OPTION ("-d <In> <Out>",           "Dump AML binary to text file");
Packit Service 1fb00e
    ACPI_OPTION ("-o <Value>",              "Start comparison at this offset into second file");
Packit Service 1fb00e
    ACPI_OPTION ("-h <File>",               "Display table header for binary AML file");
Packit Service 1fb00e
    ACPI_OPTION ("-s <File>",               "Update checksum for binary AML file");
Packit Service 1fb00e
    ACPI_OPTION ("-t",                      "Terse mode");
Packit Service 1fb00e
    ACPI_OPTION ("-v",                      "Display version information");
Packit Service 1fb00e
    ACPI_OPTION ("-vd",                     "Display build date and time");
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    main
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: C main function
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
int ACPI_SYSTEM_XFACE
Packit Service 1fb00e
main (
Packit Service 1fb00e
    int                     argc,
Packit Service 1fb00e
    char                    *argv[])
Packit Service 1fb00e
{
Packit Service 1fb00e
    int                     j;
Packit Service 1fb00e
    int                     Status = AE_OK;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    ACPI_DEBUG_INITIALIZE (); /* For debug version only */
Packit Service 1fb00e
Packit Service 1fb00e
    AcpiGbl_DebugFile = NULL;
Packit Service 1fb00e
    AcpiGbl_DbOutputFlags = DB_CONSOLE_OUTPUT;
Packit Service 1fb00e
Packit Service 1fb00e
    AcpiOsInitialize ();
Packit Service 1fb00e
    printf (ACPI_COMMON_SIGNON (AB_UTILITY_NAME));
Packit Service 1fb00e
Packit Service 1fb00e
    if (argc < 2)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        AbDisplayUsage (0);
Packit Service 1fb00e
        return (0);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    /* Command line options */
Packit Service 1fb00e
Packit Service 1fb00e
    while ((j = AcpiGetopt (argc, argv, AB_SUPPORTED_OPTIONS)) != ACPI_OPT_END) switch(j)
Packit Service 1fb00e
    {
Packit Service 1fb00e
    case 'a':   /* Compare Files, display all differences */
Packit Service 1fb00e
Packit Service 1fb00e
        AbGbl_DisplayAllMiscompares = TRUE;
Packit Service 1fb00e
Packit Service 1fb00e
        /* Fallthrough */
Packit Service 1fb00e
Packit Service 1fb00e
    case 'c':   /* Compare Files */
Packit Service 1fb00e
Packit Service 1fb00e
        if (argc < 4)
Packit Service 1fb00e
        {
Packit Service 1fb00e
            AbDisplayUsage (2);
Packit Service 1fb00e
            return (-1);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        Status = AbCompareAmlFiles (AcpiGbl_Optarg, argv[AcpiGbl_Optind]);
Packit Service 1fb00e
        break;
Packit Service 1fb00e
Packit Service 1fb00e
    case 'd':   /* Dump AML file */
Packit Service 1fb00e
Packit Service 1fb00e
        if (argc < 4)
Packit Service 1fb00e
        {
Packit Service 1fb00e
            AbDisplayUsage (2);
Packit Service 1fb00e
            return (-1);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        Status = AbDumpAmlFile (AcpiGbl_Optarg, argv[AcpiGbl_Optind]);
Packit Service 1fb00e
        break;
Packit Service 1fb00e
Packit Service 1fb00e
    case 'h':   /* Display ACPI table header */
Packit Service 1fb00e
Packit Service 1fb00e
        if (argc < 3)
Packit Service 1fb00e
        {
Packit Service 1fb00e
            AbDisplayUsage (1);
Packit Service 1fb00e
            return (-1);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        AbDisplayHeader (AcpiGbl_Optarg);
Packit Service 1fb00e
        return (0);
Packit Service 1fb00e
Packit Service 1fb00e
    case 'o':
Packit Service 1fb00e
Packit Service 1fb00e
        AbGbl_CompareOffset = atoi (AcpiGbl_Optarg);
Packit Service 1fb00e
        continue;
Packit Service 1fb00e
Packit Service 1fb00e
    case 's':   /* Compute/update checksum */
Packit Service 1fb00e
Packit Service 1fb00e
        if (argc < 3)
Packit Service 1fb00e
        {
Packit Service 1fb00e
            AbDisplayUsage (1);
Packit Service 1fb00e
            return (-1);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        AbComputeChecksum (AcpiGbl_Optarg);
Packit Service 1fb00e
        return (0);
Packit Service 1fb00e
Packit Service 1fb00e
    case 't':   /* Enable terse mode */
Packit Service 1fb00e
Packit Service 1fb00e
        Gbl_TerseMode = TRUE;
Packit Service 1fb00e
        break;
Packit Service 1fb00e
Packit Service 1fb00e
    case 'v': /* -v: (Version): signon already emitted, just exit */
Packit Service 1fb00e
Packit Service 1fb00e
        switch (AcpiGbl_Optarg[0])
Packit Service 1fb00e
        {
Packit Service 1fb00e
        case '^':  /* -v: (Version): signon already emitted, just exit */
Packit Service 1fb00e
Packit Service 1fb00e
            return (1);
Packit Service 1fb00e
Packit Service 1fb00e
        case 'd':
Packit Service 1fb00e
Packit Service 1fb00e
            printf (ACPI_COMMON_BUILD_TIME);
Packit Service 1fb00e
            return (1);
Packit Service 1fb00e
Packit Service 1fb00e
        default:
Packit Service 1fb00e
Packit Service 1fb00e
            printf ("Unknown option: -v%s\n", AcpiGbl_Optarg);
Packit Service 1fb00e
            return (-1);
Packit Service 1fb00e
        }
Packit Service 1fb00e
        break;
Packit Service 1fb00e
Packit Service 1fb00e
    default:
Packit Service 1fb00e
Packit Service 1fb00e
        AbDisplayUsage (0);
Packit Service 1fb00e
        return (-1);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    return (Status);
Packit Service 1fb00e
}