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