Home | History | Annotate | Line # | Download | only in acpixtract
acpixtract.h revision 1.1.1.8
      1      1.1  christos /******************************************************************************
      2      1.1  christos  *
      3      1.1  christos  * Module Name: acpixtract.h - Include for acpixtract utility
      4      1.1  christos  *
      5      1.1  christos  *****************************************************************************/
      6      1.1  christos 
      7      1.1  christos /*
      8  1.1.1.8  christos  * Copyright (C) 2000 - 2020, Intel Corp.
      9      1.1  christos  * All rights reserved.
     10      1.1  christos  *
     11      1.1  christos  * Redistribution and use in source and binary forms, with or without
     12      1.1  christos  * modification, are permitted provided that the following conditions
     13      1.1  christos  * are met:
     14      1.1  christos  * 1. Redistributions of source code must retain the above copyright
     15      1.1  christos  *    notice, this list of conditions, and the following disclaimer,
     16      1.1  christos  *    without modification.
     17      1.1  christos  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
     18      1.1  christos  *    substantially similar to the "NO WARRANTY" disclaimer below
     19      1.1  christos  *    ("Disclaimer") and any redistribution must be conditioned upon
     20      1.1  christos  *    including a substantially similar Disclaimer requirement for further
     21      1.1  christos  *    binary redistribution.
     22      1.1  christos  * 3. Neither the names of the above-listed copyright holders nor the names
     23      1.1  christos  *    of any contributors may be used to endorse or promote products derived
     24      1.1  christos  *    from this software without specific prior written permission.
     25      1.1  christos  *
     26      1.1  christos  * Alternatively, this software may be distributed under the terms of the
     27      1.1  christos  * GNU General Public License ("GPL") version 2 as published by the Free
     28      1.1  christos  * Software Foundation.
     29      1.1  christos  *
     30      1.1  christos  * NO WARRANTY
     31      1.1  christos  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     32      1.1  christos  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     33      1.1  christos  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
     34      1.1  christos  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     35      1.1  christos  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     36      1.1  christos  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     37      1.1  christos  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     38      1.1  christos  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     39      1.1  christos  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
     40      1.1  christos  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     41      1.1  christos  * POSSIBILITY OF SUCH DAMAGES.
     42      1.1  christos  */
     43      1.1  christos 
     44      1.1  christos #include "acpi.h"
     45      1.1  christos #include "accommon.h"
     46      1.1  christos #include "acapps.h"
     47      1.1  christos #include <stdio.h>
     48      1.1  christos 
     49      1.1  christos 
     50      1.1  christos #undef ACPI_GLOBAL
     51      1.1  christos 
     52      1.1  christos #ifdef DEFINE_ACPIXTRACT_GLOBALS
     53      1.1  christos #define ACPI_GLOBAL(type,name) \
     54      1.1  christos     extern type name; \
     55      1.1  christos     type name
     56      1.1  christos 
     57      1.1  christos #else
     58      1.1  christos #define ACPI_GLOBAL(type,name) \
     59      1.1  christos     extern type name
     60      1.1  christos #endif
     61      1.1  christos 
     62      1.1  christos 
     63      1.1  christos /* Options */
     64      1.1  christos 
     65      1.1  christos #define AX_EXTRACT_ALL              0
     66      1.1  christos #define AX_LIST_ALL                 1
     67      1.1  christos #define AX_EXTRACT_SIGNATURE        2
     68      1.1  christos #define AX_EXTRACT_AML_TABLES       3
     69      1.1  christos #define AX_EXTRACT_MULTI_TABLE      4
     70      1.1  christos 
     71      1.1  christos #define AX_OPTIONAL_TABLES          0
     72      1.1  christos #define AX_REQUIRED_TABLE           1
     73      1.1  christos 
     74      1.1  christos #define AX_UTILITY_NAME             "ACPI Binary Table Extraction Utility"
     75  1.1.1.3  christos #define AX_SUPPORTED_OPTIONS        "afhlms:v^"
     76      1.1  christos #define AX_MULTI_TABLE_FILENAME     "amltables.dat"
     77  1.1.1.3  christos #define AX_TABLE_INFO_FORMAT        "  %4.4s - %7u bytes written (0x%8.8X) - %s\n"
     78      1.1  christos 
     79      1.1  christos /* Extraction states */
     80      1.1  christos 
     81      1.1  christos #define AX_STATE_FIND_HEADER        0
     82      1.1  christos #define AX_STATE_EXTRACT_DATA       1
     83      1.1  christos 
     84      1.1  christos /* Miscellaneous constants */
     85      1.1  christos 
     86      1.1  christos #define AX_LINE_BUFFER_SIZE         256
     87      1.1  christos #define AX_MIN_BLOCK_HEADER_LENGTH  6   /* strlen ("DSDT @") */
     88  1.1.1.5  christos #define AX_HEX_DATA_LENGTH          49  /*  (3 * 16) + 1 for the colon delimiter */
     89  1.1.1.8  christos #define AX_IS_TABLE_BLOCK_HEADER    (strlen (Gbl_LineBuffer) < AX_HEX_DATA_LENGTH && \
     90  1.1.1.8  christos                                     strstr (Gbl_LineBuffer, " @ "))
     91      1.1  christos 
     92      1.1  christos 
     93      1.1  christos typedef struct AxTableInfo
     94      1.1  christos {
     95      1.1  christos     UINT32                  Signature;
     96      1.1  christos     unsigned int            Instances;
     97      1.1  christos     unsigned int            NextInstance;
     98      1.1  christos     struct AxTableInfo      *Next;
     99      1.1  christos 
    100      1.1  christos } AX_TABLE_INFO;
    101      1.1  christos 
    102      1.1  christos 
    103      1.1  christos /* Globals */
    104      1.1  christos 
    105      1.1  christos ACPI_GLOBAL (char,           Gbl_LineBuffer[AX_LINE_BUFFER_SIZE]);
    106      1.1  christos ACPI_GLOBAL (char,           Gbl_HeaderBuffer[AX_LINE_BUFFER_SIZE]);
    107      1.1  christos ACPI_GLOBAL (char,           Gbl_InstanceBuffer[AX_LINE_BUFFER_SIZE]);
    108      1.1  christos ACPI_GLOBAL (AX_TABLE_INFO, *Gbl_TableListHead);
    109      1.1  christos ACPI_GLOBAL (char,           Gbl_OutputFilename[32]);
    110      1.1  christos ACPI_GLOBAL (unsigned char,  Gbl_BinaryData[16]);
    111      1.1  christos ACPI_GLOBAL (unsigned int,   Gbl_TableCount);
    112  1.1.1.3  christos ACPI_GLOBAL (BOOLEAN,        Gbl_ForceExtraction);
    113  1.1.1.3  christos 
    114      1.1  christos 
    115      1.1  christos /*
    116      1.1  christos  * acpixtract.c
    117      1.1  christos  */
    118      1.1  christos int
    119      1.1  christos AxExtractTables (
    120      1.1  christos     char                    *InputPathname,
    121      1.1  christos     char                    *Signature,
    122      1.1  christos     unsigned int            MinimumInstances);
    123      1.1  christos 
    124      1.1  christos int
    125      1.1  christos AxExtractToMultiAmlFile (
    126      1.1  christos     char                    *InputPathname);
    127      1.1  christos 
    128      1.1  christos int
    129  1.1.1.3  christos AxListAllTables (
    130      1.1  christos     char                    *InputPathname);
    131      1.1  christos 
    132      1.1  christos 
    133      1.1  christos /*
    134      1.1  christos  * axutils.c
    135      1.1  christos  */
    136      1.1  christos unsigned int
    137      1.1  christos AxCountTableInstances (
    138      1.1  christos     char                    *InputPathname,
    139      1.1  christos     char                    *Signature);
    140      1.1  christos 
    141      1.1  christos unsigned int
    142      1.1  christos AxGetNextInstance (
    143      1.1  christos     char                    *InputPathname,
    144      1.1  christos     char                    *Signature);
    145      1.1  christos 
    146      1.1  christos void
    147      1.1  christos AxNormalizeSignature (
    148      1.1  christos     char                    *Signature);
    149      1.1  christos 
    150      1.1  christos void
    151      1.1  christos AxCheckAscii (
    152      1.1  christos     char                    *Name,
    153      1.1  christos     int                     Count);
    154      1.1  christos 
    155  1.1.1.3  christos BOOLEAN
    156  1.1.1.3  christos AxIsFileAscii (
    157  1.1.1.3  christos     FILE                    *Handle);
    158  1.1.1.3  christos 
    159  1.1.1.3  christos BOOLEAN
    160  1.1.1.3  christos AxIsHexDataLine (
    161  1.1.1.3  christos     void);
    162  1.1.1.3  christos 
    163  1.1.1.3  christos BOOLEAN
    164      1.1  christos AxIsEmptyLine (
    165      1.1  christos     char                    *Buffer);
    166      1.1  christos 
    167  1.1.1.3  christos BOOLEAN
    168      1.1  christos AxIsDataBlockHeader (
    169      1.1  christos     void);
    170      1.1  christos 
    171  1.1.1.6  christos int
    172  1.1.1.3  christos AxConvertAndWrite (
    173      1.1  christos     FILE                    *OutputFile,
    174  1.1.1.6  christos     char                    *ThisSignature);
    175      1.1  christos 
    176  1.1.1.6  christos int
    177  1.1.1.3  christos AxConvertToBinary (
    178      1.1  christos     char                    *InputLine,
    179      1.1  christos     unsigned char           *OutputData);
    180  1.1.1.3  christos 
    181  1.1.1.3  christos void
    182  1.1.1.3  christos AxDumpTableHeader (
    183  1.1.1.3  christos     unsigned char           *Header);
    184