xref: /dflybsd-src/sys/contrib/dev/acpica/source/tools/acpixtract/acpixtract.h (revision 820c5b08a73294c6424e31653739d096e5720e9f)
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