1a88e22b7SJung-uk Kim /******************************************************************************
2a88e22b7SJung-uk Kim *
3a88e22b7SJung-uk Kim * Module Name: dtutils.c - Utility routines for the data table compiler
4a88e22b7SJung-uk Kim *
5a88e22b7SJung-uk Kim *****************************************************************************/
6a88e22b7SJung-uk Kim
70d84335fSJung-uk Kim /******************************************************************************
80d84335fSJung-uk Kim *
90d84335fSJung-uk Kim * 1. Copyright Notice
100d84335fSJung-uk Kim *
11*58308fadSJung-uk Kim * Some or all of this work - Copyright (c) 1999 - 2025, Intel Corp.
12a88e22b7SJung-uk Kim * All rights reserved.
13a88e22b7SJung-uk Kim *
140d84335fSJung-uk Kim * 2. License
150d84335fSJung-uk Kim *
160d84335fSJung-uk Kim * 2.1. This is your license from Intel Corp. under its intellectual property
170d84335fSJung-uk Kim * rights. You may have additional license terms from the party that provided
180d84335fSJung-uk Kim * you this software, covering your right to use that party's intellectual
190d84335fSJung-uk Kim * property rights.
200d84335fSJung-uk Kim *
210d84335fSJung-uk Kim * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
220d84335fSJung-uk Kim * copy of the source code appearing in this file ("Covered Code") an
230d84335fSJung-uk Kim * irrevocable, perpetual, worldwide license under Intel's copyrights in the
240d84335fSJung-uk Kim * base code distributed originally by Intel ("Original Intel Code") to copy,
250d84335fSJung-uk Kim * make derivatives, distribute, use and display any portion of the Covered
260d84335fSJung-uk Kim * Code in any form, with the right to sublicense such rights; and
270d84335fSJung-uk Kim *
280d84335fSJung-uk Kim * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
290d84335fSJung-uk Kim * license (with the right to sublicense), under only those claims of Intel
300d84335fSJung-uk Kim * patents that are infringed by the Original Intel Code, to make, use, sell,
310d84335fSJung-uk Kim * offer to sell, and import the Covered Code and derivative works thereof
320d84335fSJung-uk Kim * solely to the minimum extent necessary to exercise the above copyright
330d84335fSJung-uk Kim * license, and in no event shall the patent license extend to any additions
340d84335fSJung-uk Kim * to or modifications of the Original Intel Code. No other license or right
350d84335fSJung-uk Kim * is granted directly or by implication, estoppel or otherwise;
360d84335fSJung-uk Kim *
370d84335fSJung-uk Kim * The above copyright and patent license is granted only if the following
380d84335fSJung-uk Kim * conditions are met:
390d84335fSJung-uk Kim *
400d84335fSJung-uk Kim * 3. Conditions
410d84335fSJung-uk Kim *
420d84335fSJung-uk Kim * 3.1. Redistribution of Source with Rights to Further Distribute Source.
430d84335fSJung-uk Kim * Redistribution of source code of any substantial portion of the Covered
440d84335fSJung-uk Kim * Code or modification with rights to further distribute source must include
450d84335fSJung-uk Kim * the above Copyright Notice, the above License, this list of Conditions,
460d84335fSJung-uk Kim * and the following Disclaimer and Export Compliance provision. In addition,
470d84335fSJung-uk Kim * Licensee must cause all Covered Code to which Licensee contributes to
480d84335fSJung-uk Kim * contain a file documenting the changes Licensee made to create that Covered
490d84335fSJung-uk Kim * Code and the date of any change. Licensee must include in that file the
500d84335fSJung-uk Kim * documentation of any changes made by any predecessor Licensee. Licensee
510d84335fSJung-uk Kim * must include a prominent statement that the modification is derived,
520d84335fSJung-uk Kim * directly or indirectly, from Original Intel Code.
530d84335fSJung-uk Kim *
540d84335fSJung-uk Kim * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
550d84335fSJung-uk Kim * Redistribution of source code of any substantial portion of the Covered
560d84335fSJung-uk Kim * Code or modification without rights to further distribute source must
570d84335fSJung-uk Kim * include the following Disclaimer and Export Compliance provision in the
580d84335fSJung-uk Kim * documentation and/or other materials provided with distribution. In
590d84335fSJung-uk Kim * addition, Licensee may not authorize further sublicense of source of any
600d84335fSJung-uk Kim * portion of the Covered Code, and must include terms to the effect that the
610d84335fSJung-uk Kim * license from Licensee to its licensee is limited to the intellectual
620d84335fSJung-uk Kim * property embodied in the software Licensee provides to its licensee, and
630d84335fSJung-uk Kim * not to intellectual property embodied in modifications its licensee may
640d84335fSJung-uk Kim * make.
650d84335fSJung-uk Kim *
660d84335fSJung-uk Kim * 3.3. Redistribution of Executable. Redistribution in executable form of any
670d84335fSJung-uk Kim * substantial portion of the Covered Code or modification must reproduce the
680d84335fSJung-uk Kim * above Copyright Notice, and the following Disclaimer and Export Compliance
690d84335fSJung-uk Kim * provision in the documentation and/or other materials provided with the
700d84335fSJung-uk Kim * distribution.
710d84335fSJung-uk Kim *
720d84335fSJung-uk Kim * 3.4. Intel retains all right, title, and interest in and to the Original
730d84335fSJung-uk Kim * Intel Code.
740d84335fSJung-uk Kim *
750d84335fSJung-uk Kim * 3.5. Neither the name Intel nor any other trademark owned or controlled by
760d84335fSJung-uk Kim * Intel shall be used in advertising or otherwise to promote the sale, use or
770d84335fSJung-uk Kim * other dealings in products derived from or relating to the Covered Code
780d84335fSJung-uk Kim * without prior written authorization from Intel.
790d84335fSJung-uk Kim *
800d84335fSJung-uk Kim * 4. Disclaimer and Export Compliance
810d84335fSJung-uk Kim *
820d84335fSJung-uk Kim * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
830d84335fSJung-uk Kim * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
840d84335fSJung-uk Kim * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
850d84335fSJung-uk Kim * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
860d84335fSJung-uk Kim * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
870d84335fSJung-uk Kim * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
880d84335fSJung-uk Kim * PARTICULAR PURPOSE.
890d84335fSJung-uk Kim *
900d84335fSJung-uk Kim * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
910d84335fSJung-uk Kim * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
920d84335fSJung-uk Kim * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
930d84335fSJung-uk Kim * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
940d84335fSJung-uk Kim * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
950d84335fSJung-uk Kim * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
960d84335fSJung-uk Kim * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
970d84335fSJung-uk Kim * LIMITED REMEDY.
980d84335fSJung-uk Kim *
990d84335fSJung-uk Kim * 4.3. Licensee shall not export, either directly or indirectly, any of this
1000d84335fSJung-uk Kim * software or system incorporating such software without first obtaining any
1010d84335fSJung-uk Kim * required license or other approval from the U. S. Department of Commerce or
1020d84335fSJung-uk Kim * any other agency or department of the United States Government. In the
1030d84335fSJung-uk Kim * event Licensee exports any such software from the United States or
1040d84335fSJung-uk Kim * re-exports any such software from a foreign destination, Licensee shall
1050d84335fSJung-uk Kim * ensure that the distribution and export/re-export of the software is in
1060d84335fSJung-uk Kim * compliance with all laws, regulations, orders, or other restrictions of the
1070d84335fSJung-uk Kim * U.S. Export Administration Regulations. Licensee agrees that neither it nor
1080d84335fSJung-uk Kim * any of its subsidiaries will export/re-export any technical data, process,
1090d84335fSJung-uk Kim * software, or service, directly or indirectly, to any country for which the
1100d84335fSJung-uk Kim * United States government or any agency thereof requires an export license,
1110d84335fSJung-uk Kim * other governmental approval, or letter of assurance, without first obtaining
1120d84335fSJung-uk Kim * such license, approval or letter.
1130d84335fSJung-uk Kim *
1140d84335fSJung-uk Kim *****************************************************************************
1150d84335fSJung-uk Kim *
1160d84335fSJung-uk Kim * Alternatively, you may choose to be licensed under the terms of the
1170d84335fSJung-uk Kim * following license:
1180d84335fSJung-uk Kim *
119d244b227SJung-uk Kim * Redistribution and use in source and binary forms, with or without
120d244b227SJung-uk Kim * modification, are permitted provided that the following conditions
121d244b227SJung-uk Kim * are met:
122d244b227SJung-uk Kim * 1. Redistributions of source code must retain the above copyright
123d244b227SJung-uk Kim * notice, this list of conditions, and the following disclaimer,
124d244b227SJung-uk Kim * without modification.
125d244b227SJung-uk Kim * 2. Redistributions in binary form must reproduce at minimum a disclaimer
126d244b227SJung-uk Kim * substantially similar to the "NO WARRANTY" disclaimer below
127d244b227SJung-uk Kim * ("Disclaimer") and any redistribution must be conditioned upon
128d244b227SJung-uk Kim * including a substantially similar Disclaimer requirement for further
129d244b227SJung-uk Kim * binary redistribution.
130d244b227SJung-uk Kim * 3. Neither the names of the above-listed copyright holders nor the names
131d244b227SJung-uk Kim * of any contributors may be used to endorse or promote products derived
132d244b227SJung-uk Kim * from this software without specific prior written permission.
133a88e22b7SJung-uk Kim *
1340d84335fSJung-uk Kim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1350d84335fSJung-uk Kim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1360d84335fSJung-uk Kim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1370d84335fSJung-uk Kim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
1380d84335fSJung-uk Kim * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
1390d84335fSJung-uk Kim * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
1400d84335fSJung-uk Kim * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
1410d84335fSJung-uk Kim * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
1420d84335fSJung-uk Kim * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
1430d84335fSJung-uk Kim * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
1440d84335fSJung-uk Kim * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1450d84335fSJung-uk Kim *
1460d84335fSJung-uk Kim * Alternatively, you may choose to be licensed under the terms of the
147d244b227SJung-uk Kim * GNU General Public License ("GPL") version 2 as published by the Free
148d244b227SJung-uk Kim * Software Foundation.
149a88e22b7SJung-uk Kim *
1500d84335fSJung-uk Kim *****************************************************************************/
151a88e22b7SJung-uk Kim
152a88e22b7SJung-uk Kim #include <contrib/dev/acpica/compiler/aslcompiler.h>
153a88e22b7SJung-uk Kim #include <contrib/dev/acpica/include/actables.h>
154a88e22b7SJung-uk Kim
155a88e22b7SJung-uk Kim #define _COMPONENT DT_COMPILER
156a88e22b7SJung-uk Kim ACPI_MODULE_NAME ("dtutils")
157a88e22b7SJung-uk Kim
158a88e22b7SJung-uk Kim /* Local prototypes */
159a88e22b7SJung-uk Kim
160a88e22b7SJung-uk Kim static void
161a88e22b7SJung-uk Kim DtSum (
162a88e22b7SJung-uk Kim DT_SUBTABLE *Subtable,
163a88e22b7SJung-uk Kim void *Context,
164a88e22b7SJung-uk Kim void *ReturnValue);
165a88e22b7SJung-uk Kim
166a88e22b7SJung-uk Kim
167a88e22b7SJung-uk Kim /******************************************************************************
168a88e22b7SJung-uk Kim *
169a88e22b7SJung-uk Kim * FUNCTION: DtError
170a88e22b7SJung-uk Kim *
171a88e22b7SJung-uk Kim * PARAMETERS: Level - Seriousness (Warning/error, etc.)
172a88e22b7SJung-uk Kim * MessageId - Index into global message buffer
173a88e22b7SJung-uk Kim * Op - Parse node where error happened
174a88e22b7SJung-uk Kim * ExtraMessage - additional error message
175a88e22b7SJung-uk Kim *
176a88e22b7SJung-uk Kim * RETURN: None
177a88e22b7SJung-uk Kim *
178a88e22b7SJung-uk Kim * DESCRIPTION: Common error interface for data table compiler
179a88e22b7SJung-uk Kim *
180a88e22b7SJung-uk Kim *****************************************************************************/
181a88e22b7SJung-uk Kim
182a88e22b7SJung-uk Kim void
DtError(UINT8 Level,UINT16 MessageId,DT_FIELD * FieldObject,char * ExtraMessage)183a88e22b7SJung-uk Kim DtError (
184a88e22b7SJung-uk Kim UINT8 Level,
185313a0c13SJung-uk Kim UINT16 MessageId,
186a88e22b7SJung-uk Kim DT_FIELD *FieldObject,
187a88e22b7SJung-uk Kim char *ExtraMessage)
188a88e22b7SJung-uk Kim {
18908ddfe86SJung-uk Kim UINT32 Line = 0;
19008ddfe86SJung-uk Kim
19108ddfe86SJung-uk Kim
19208ddfe86SJung-uk Kim /* Field object could be NULL */
19308ddfe86SJung-uk Kim
19408ddfe86SJung-uk Kim if (FieldObject)
19508ddfe86SJung-uk Kim {
19608ddfe86SJung-uk Kim Line = FieldObject->Line;
19708ddfe86SJung-uk Kim }
198a88e22b7SJung-uk Kim
199a9d8d09cSJung-uk Kim /* Check if user wants to ignore this exception */
200a9d8d09cSJung-uk Kim
2013ee58df5SJung-uk Kim if (AslIsExceptionIgnored (AslGbl_Files[ASL_FILE_INPUT].Filename,
20208ddfe86SJung-uk Kim Line, Level, MessageId))
203a88e22b7SJung-uk Kim {
204a88e22b7SJung-uk Kim return;
205a88e22b7SJung-uk Kim }
206a88e22b7SJung-uk Kim
207a88e22b7SJung-uk Kim if (FieldObject)
208a88e22b7SJung-uk Kim {
209a88e22b7SJung-uk Kim AslCommonError (Level, MessageId,
210a88e22b7SJung-uk Kim FieldObject->Line,
211a88e22b7SJung-uk Kim FieldObject->Line,
212a88e22b7SJung-uk Kim FieldObject->ByteOffset,
213a88e22b7SJung-uk Kim FieldObject->Column,
2146f1f1a63SJung-uk Kim AslGbl_Files[ASL_FILE_INPUT].Filename, ExtraMessage);
215a88e22b7SJung-uk Kim }
216a88e22b7SJung-uk Kim else
217a88e22b7SJung-uk Kim {
218a88e22b7SJung-uk Kim AslCommonError (Level, MessageId, 0,
219a88e22b7SJung-uk Kim 0, 0, 0, 0, ExtraMessage);
220a88e22b7SJung-uk Kim }
221a88e22b7SJung-uk Kim }
222a88e22b7SJung-uk Kim
223a88e22b7SJung-uk Kim
224a88e22b7SJung-uk Kim /******************************************************************************
225a88e22b7SJung-uk Kim *
226a88e22b7SJung-uk Kim * FUNCTION: DtNameError
227a88e22b7SJung-uk Kim *
228a88e22b7SJung-uk Kim * PARAMETERS: Level - Seriousness (Warning/error, etc.)
229a88e22b7SJung-uk Kim * MessageId - Index into global message buffer
230a88e22b7SJung-uk Kim * Op - Parse node where error happened
231a88e22b7SJung-uk Kim * ExtraMessage - additional error message
232a88e22b7SJung-uk Kim *
233a88e22b7SJung-uk Kim * RETURN: None
234a88e22b7SJung-uk Kim *
235a88e22b7SJung-uk Kim * DESCRIPTION: Error interface for named objects
236a88e22b7SJung-uk Kim *
237a88e22b7SJung-uk Kim *****************************************************************************/
238a88e22b7SJung-uk Kim
239a88e22b7SJung-uk Kim void
DtNameError(UINT8 Level,UINT16 MessageId,DT_FIELD * FieldObject,char * ExtraMessage)240a88e22b7SJung-uk Kim DtNameError (
241a88e22b7SJung-uk Kim UINT8 Level,
242313a0c13SJung-uk Kim UINT16 MessageId,
243a88e22b7SJung-uk Kim DT_FIELD *FieldObject,
244a88e22b7SJung-uk Kim char *ExtraMessage)
245a88e22b7SJung-uk Kim {
246a88e22b7SJung-uk Kim
247a88e22b7SJung-uk Kim switch (Level)
248a88e22b7SJung-uk Kim {
249a88e22b7SJung-uk Kim case ASL_WARNING2:
250a88e22b7SJung-uk Kim case ASL_WARNING3:
251a9d8d09cSJung-uk Kim
2526f1f1a63SJung-uk Kim if (AslGbl_WarningLevel < Level)
253a88e22b7SJung-uk Kim {
254a88e22b7SJung-uk Kim return;
255a88e22b7SJung-uk Kim }
256a88e22b7SJung-uk Kim break;
257a88e22b7SJung-uk Kim
258a88e22b7SJung-uk Kim default:
259a9d8d09cSJung-uk Kim
260a88e22b7SJung-uk Kim break;
261a88e22b7SJung-uk Kim }
262a88e22b7SJung-uk Kim
263a88e22b7SJung-uk Kim if (FieldObject)
264a88e22b7SJung-uk Kim {
265a88e22b7SJung-uk Kim AslCommonError (Level, MessageId,
266a88e22b7SJung-uk Kim FieldObject->Line,
267a88e22b7SJung-uk Kim FieldObject->Line,
268a88e22b7SJung-uk Kim FieldObject->ByteOffset,
269a88e22b7SJung-uk Kim FieldObject->NameColumn,
2706f1f1a63SJung-uk Kim AslGbl_Files[ASL_FILE_INPUT].Filename, ExtraMessage);
271a88e22b7SJung-uk Kim }
272a88e22b7SJung-uk Kim else
273a88e22b7SJung-uk Kim {
274a88e22b7SJung-uk Kim AslCommonError (Level, MessageId, 0,
275a88e22b7SJung-uk Kim 0, 0, 0, 0, ExtraMessage);
276a88e22b7SJung-uk Kim }
277a88e22b7SJung-uk Kim }
278a88e22b7SJung-uk Kim
279a88e22b7SJung-uk Kim
280a88e22b7SJung-uk Kim /*******************************************************************************
281a88e22b7SJung-uk Kim *
282a88e22b7SJung-uk Kim * FUNCTION: DtFatal
283a88e22b7SJung-uk Kim *
284a88e22b7SJung-uk Kim * PARAMETERS: None
285a88e22b7SJung-uk Kim *
286a88e22b7SJung-uk Kim * RETURN: None
287a88e22b7SJung-uk Kim *
288a88e22b7SJung-uk Kim * DESCRIPTION: Dump the error log and abort the compiler. Used for serious
289a88e22b7SJung-uk Kim * compile or I/O errors
290a88e22b7SJung-uk Kim *
291a88e22b7SJung-uk Kim ******************************************************************************/
292a88e22b7SJung-uk Kim
293a88e22b7SJung-uk Kim void
DtFatal(UINT16 MessageId,DT_FIELD * FieldObject,char * ExtraMessage)294a88e22b7SJung-uk Kim DtFatal (
295313a0c13SJung-uk Kim UINT16 MessageId,
296a88e22b7SJung-uk Kim DT_FIELD *FieldObject,
297a88e22b7SJung-uk Kim char *ExtraMessage)
298a88e22b7SJung-uk Kim {
299a88e22b7SJung-uk Kim
300a88e22b7SJung-uk Kim DtError (ASL_ERROR, MessageId, FieldObject, ExtraMessage);
301a88e22b7SJung-uk Kim
302d052a1ccSJung-uk Kim /*
303d052a1ccSJung-uk Kim * TBD: remove this entire function, DtFatal
304d052a1ccSJung-uk Kim *
305d052a1ccSJung-uk Kim * We cannot abort the compiler on error, because we may be compiling a
306d052a1ccSJung-uk Kim * list of files. We must move on to the next file.
307d052a1ccSJung-uk Kim */
308d052a1ccSJung-uk Kim #ifdef __OBSOLETE
309a88e22b7SJung-uk Kim CmCleanupAndExit ();
310a88e22b7SJung-uk Kim exit (1);
311d052a1ccSJung-uk Kim #endif
312a88e22b7SJung-uk Kim }
313a88e22b7SJung-uk Kim
314a88e22b7SJung-uk Kim
3152f6a1a81SJung-uk Kim /*******************************************************************************
3162f6a1a81SJung-uk Kim *
3172f6a1a81SJung-uk Kim * FUNCTION: DtDoConstant
3182f6a1a81SJung-uk Kim *
3192f6a1a81SJung-uk Kim * PARAMETERS: String - Only hex constants are supported,
3202f6a1a81SJung-uk Kim * regardless of whether the 0x prefix
3212f6a1a81SJung-uk Kim * is used
3222f6a1a81SJung-uk Kim *
3232f6a1a81SJung-uk Kim * RETURN: Converted Integer
3242f6a1a81SJung-uk Kim *
3252f6a1a81SJung-uk Kim * DESCRIPTION: Convert a string to an integer, with overflow/error checking.
3262f6a1a81SJung-uk Kim *
3272f6a1a81SJung-uk Kim ******************************************************************************/
3282f6a1a81SJung-uk Kim
3292f6a1a81SJung-uk Kim UINT64
DtDoConstant(char * String)3302f6a1a81SJung-uk Kim DtDoConstant (
3312f6a1a81SJung-uk Kim char *String)
3322f6a1a81SJung-uk Kim {
3332f6a1a81SJung-uk Kim UINT64 ConvertedInteger;
3342f6a1a81SJung-uk Kim
3352f6a1a81SJung-uk Kim
3362f6a1a81SJung-uk Kim /*
3372f6a1a81SJung-uk Kim * TBD: The ImplicitStrtoul64 function does not report overflow
3382f6a1a81SJung-uk Kim * conditions. The input string is simply truncated. If it is
3392f6a1a81SJung-uk Kim * desired to report overflow to the table compiler, this should
3402f6a1a81SJung-uk Kim * somehow be added here. Note: integers that are prefixed with 0x
3412f6a1a81SJung-uk Kim * or not are both hex integers.
3422f6a1a81SJung-uk Kim */
3432f6a1a81SJung-uk Kim ConvertedInteger = AcpiUtImplicitStrtoul64 (String);
3442f6a1a81SJung-uk Kim return (ConvertedInteger);
3452f6a1a81SJung-uk Kim }
3462f6a1a81SJung-uk Kim
347a88e22b7SJung-uk Kim /******************************************************************************
348a88e22b7SJung-uk Kim *
349a88e22b7SJung-uk Kim * FUNCTION: DtGetFieldValue
350a88e22b7SJung-uk Kim *
351a88e22b7SJung-uk Kim * PARAMETERS: Field - Current field list pointer
352a88e22b7SJung-uk Kim *
353a88e22b7SJung-uk Kim * RETURN: Field value
354a88e22b7SJung-uk Kim *
355a88e22b7SJung-uk Kim * DESCRIPTION: Get field value
356a88e22b7SJung-uk Kim *
357a88e22b7SJung-uk Kim *****************************************************************************/
358a88e22b7SJung-uk Kim
359a88e22b7SJung-uk Kim char *
DtGetFieldValue(DT_FIELD * Field)360a88e22b7SJung-uk Kim DtGetFieldValue (
361d052a1ccSJung-uk Kim DT_FIELD *Field)
362a88e22b7SJung-uk Kim {
363d052a1ccSJung-uk Kim if (!Field)
364a88e22b7SJung-uk Kim {
365a88e22b7SJung-uk Kim return (NULL);
366a88e22b7SJung-uk Kim }
367a88e22b7SJung-uk Kim
368d052a1ccSJung-uk Kim return (Field->Value);
369d052a1ccSJung-uk Kim }
370d052a1ccSJung-uk Kim
371a88e22b7SJung-uk Kim
372a88e22b7SJung-uk Kim /******************************************************************************
373a88e22b7SJung-uk Kim *
374a88e22b7SJung-uk Kim * FUNCTION: DtGetFieldType
375a88e22b7SJung-uk Kim *
376a88e22b7SJung-uk Kim * PARAMETERS: Info - Data table info
377a88e22b7SJung-uk Kim *
378a88e22b7SJung-uk Kim * RETURN: Field type
379a88e22b7SJung-uk Kim *
380a88e22b7SJung-uk Kim * DESCRIPTION: Get field type
381a88e22b7SJung-uk Kim *
382a88e22b7SJung-uk Kim *****************************************************************************/
383a88e22b7SJung-uk Kim
384a88e22b7SJung-uk Kim UINT8
DtGetFieldType(ACPI_DMTABLE_INFO * Info)385a88e22b7SJung-uk Kim DtGetFieldType (
386a88e22b7SJung-uk Kim ACPI_DMTABLE_INFO *Info)
387a88e22b7SJung-uk Kim {
388a88e22b7SJung-uk Kim UINT8 Type;
389a88e22b7SJung-uk Kim
390a88e22b7SJung-uk Kim
391a88e22b7SJung-uk Kim /* DT_FLAG means that this is the start of a block of flag bits */
392a88e22b7SJung-uk Kim /* TBD - we can make these a separate opcode later */
393a88e22b7SJung-uk Kim
394a88e22b7SJung-uk Kim if (Info->Flags & DT_FLAG)
395a88e22b7SJung-uk Kim {
396a88e22b7SJung-uk Kim return (DT_FIELD_TYPE_FLAGS_INTEGER);
397a88e22b7SJung-uk Kim }
398a88e22b7SJung-uk Kim
399a88e22b7SJung-uk Kim /* Type is based upon the opcode for this field in the info table */
400a88e22b7SJung-uk Kim
401a88e22b7SJung-uk Kim switch (Info->Opcode)
402a88e22b7SJung-uk Kim {
403a88e22b7SJung-uk Kim case ACPI_DMT_FLAG0:
404a88e22b7SJung-uk Kim case ACPI_DMT_FLAG1:
405a88e22b7SJung-uk Kim case ACPI_DMT_FLAG2:
406a88e22b7SJung-uk Kim case ACPI_DMT_FLAG3:
407a88e22b7SJung-uk Kim case ACPI_DMT_FLAG4:
408a88e22b7SJung-uk Kim case ACPI_DMT_FLAG5:
409a88e22b7SJung-uk Kim case ACPI_DMT_FLAG6:
410a88e22b7SJung-uk Kim case ACPI_DMT_FLAG7:
411a88e22b7SJung-uk Kim case ACPI_DMT_FLAGS0:
4123f0275a0SJung-uk Kim case ACPI_DMT_FLAGS1:
413a88e22b7SJung-uk Kim case ACPI_DMT_FLAGS2:
414ab71bbb7SJung-uk Kim case ACPI_DMT_FLAGS8_2:
4153f0275a0SJung-uk Kim case ACPI_DMT_FLAGS4:
416af051161SJung-uk Kim case ACPI_DMT_FLAGS4_0:
417af051161SJung-uk Kim case ACPI_DMT_FLAGS4_4:
418af051161SJung-uk Kim case ACPI_DMT_FLAGS4_8:
419af051161SJung-uk Kim case ACPI_DMT_FLAGS4_12:
420af051161SJung-uk Kim case ACPI_DMT_FLAGS16_16:
421a9d8d09cSJung-uk Kim
422a88e22b7SJung-uk Kim Type = DT_FIELD_TYPE_FLAG;
423a88e22b7SJung-uk Kim break;
424a88e22b7SJung-uk Kim
425a88e22b7SJung-uk Kim case ACPI_DMT_NAME4:
426a88e22b7SJung-uk Kim case ACPI_DMT_SIG:
427a88e22b7SJung-uk Kim case ACPI_DMT_NAME6:
428a88e22b7SJung-uk Kim case ACPI_DMT_NAME8:
429a88e22b7SJung-uk Kim case ACPI_DMT_STRING:
4301970d693SJung-uk Kim case ACPI_DMT_IVRS_UNTERMINATED_STRING:
431a9d8d09cSJung-uk Kim
432a88e22b7SJung-uk Kim Type = DT_FIELD_TYPE_STRING;
433a88e22b7SJung-uk Kim break;
434a88e22b7SJung-uk Kim
435a88e22b7SJung-uk Kim case ACPI_DMT_BUFFER:
4367cf3e94aSJung-uk Kim case ACPI_DMT_RAW_BUFFER:
4370b94ba42SJung-uk Kim case ACPI_DMT_BUF7:
4388d744e47SJung-uk Kim case ACPI_DMT_BUF10:
439*58308fadSJung-uk Kim case ACPI_DMT_BUF11:
440493deb39SJung-uk Kim case ACPI_DMT_BUF12:
441a88e22b7SJung-uk Kim case ACPI_DMT_BUF16:
442ab71bbb7SJung-uk Kim case ACPI_DMT_BUF18:
443*58308fadSJung-uk Kim case ACPI_DMT_BUF24:
444*58308fadSJung-uk Kim case ACPI_DMT_BUF26:
44592f570c3SJung-uk Kim case ACPI_DMT_BUF32:
44692f570c3SJung-uk Kim case ACPI_DMT_BUF112:
447dcbce41eSJung-uk Kim case ACPI_DMT_BUF128:
448a88e22b7SJung-uk Kim case ACPI_DMT_PCI_PATH:
449cfd1ed46SJung-uk Kim case ACPI_DMT_PMTT_VENDOR:
450a9d8d09cSJung-uk Kim
451a88e22b7SJung-uk Kim Type = DT_FIELD_TYPE_BUFFER;
452a88e22b7SJung-uk Kim break;
453a88e22b7SJung-uk Kim
454a88e22b7SJung-uk Kim case ACPI_DMT_GAS:
455a88e22b7SJung-uk Kim case ACPI_DMT_HESTNTFY:
456a371a5fdSJung-uk Kim case ACPI_DMT_IORTMEM:
457a9d8d09cSJung-uk Kim
458a88e22b7SJung-uk Kim Type = DT_FIELD_TYPE_INLINE_SUBTABLE;
459a88e22b7SJung-uk Kim break;
460a88e22b7SJung-uk Kim
461d244b227SJung-uk Kim case ACPI_DMT_UNICODE:
46297c0b5abSJung-uk Kim case ACPI_DMT_WPBT_UNICODE:
463a9d8d09cSJung-uk Kim
464d244b227SJung-uk Kim Type = DT_FIELD_TYPE_UNICODE;
465d244b227SJung-uk Kim break;
466d244b227SJung-uk Kim
467d244b227SJung-uk Kim case ACPI_DMT_UUID:
468a9d8d09cSJung-uk Kim
469d244b227SJung-uk Kim Type = DT_FIELD_TYPE_UUID;
470d244b227SJung-uk Kim break;
471d244b227SJung-uk Kim
472d244b227SJung-uk Kim case ACPI_DMT_DEVICE_PATH:
473a9d8d09cSJung-uk Kim
474d244b227SJung-uk Kim Type = DT_FIELD_TYPE_DEVICE_PATH;
475d244b227SJung-uk Kim break;
476d244b227SJung-uk Kim
4770b94ba42SJung-uk Kim case ACPI_DMT_LABEL:
478a9d8d09cSJung-uk Kim
4790b94ba42SJung-uk Kim Type = DT_FIELD_TYPE_LABEL;
4800b94ba42SJung-uk Kim break;
4810b94ba42SJung-uk Kim
482a88e22b7SJung-uk Kim default:
483a9d8d09cSJung-uk Kim
484a88e22b7SJung-uk Kim Type = DT_FIELD_TYPE_INTEGER;
485a88e22b7SJung-uk Kim break;
486a88e22b7SJung-uk Kim }
487a88e22b7SJung-uk Kim
488a88e22b7SJung-uk Kim return (Type);
489a88e22b7SJung-uk Kim }
490a88e22b7SJung-uk Kim
491a88e22b7SJung-uk Kim
492a88e22b7SJung-uk Kim /******************************************************************************
493a88e22b7SJung-uk Kim *
494a88e22b7SJung-uk Kim * FUNCTION: DtGetBufferLength
495a88e22b7SJung-uk Kim *
496a88e22b7SJung-uk Kim * PARAMETERS: Buffer - List of integers,
497a88e22b7SJung-uk Kim * for example "10 3A 4F 2E"
498a88e22b7SJung-uk Kim *
499a88e22b7SJung-uk Kim * RETURN: Count of integer
500a88e22b7SJung-uk Kim *
501a88e22b7SJung-uk Kim * DESCRIPTION: Get length of bytes needed to store the integers
502a88e22b7SJung-uk Kim *
503a88e22b7SJung-uk Kim *****************************************************************************/
504a88e22b7SJung-uk Kim
505a88e22b7SJung-uk Kim UINT32
DtGetBufferLength(char * Buffer)506a88e22b7SJung-uk Kim DtGetBufferLength (
507a88e22b7SJung-uk Kim char *Buffer)
508a88e22b7SJung-uk Kim {
509a88e22b7SJung-uk Kim UINT32 ByteLength = 0;
510a88e22b7SJung-uk Kim
511a88e22b7SJung-uk Kim
512a88e22b7SJung-uk Kim while (*Buffer)
513a88e22b7SJung-uk Kim {
514a88e22b7SJung-uk Kim if (*Buffer == ' ')
515a88e22b7SJung-uk Kim {
516a88e22b7SJung-uk Kim ByteLength++;
517a88e22b7SJung-uk Kim
518a88e22b7SJung-uk Kim while (*Buffer == ' ')
519a88e22b7SJung-uk Kim {
520a88e22b7SJung-uk Kim Buffer++;
521a88e22b7SJung-uk Kim }
522a88e22b7SJung-uk Kim }
523a88e22b7SJung-uk Kim
524a88e22b7SJung-uk Kim Buffer++;
525a88e22b7SJung-uk Kim }
526a88e22b7SJung-uk Kim
527a88e22b7SJung-uk Kim return (++ByteLength);
528a88e22b7SJung-uk Kim }
529a88e22b7SJung-uk Kim
530a88e22b7SJung-uk Kim
531a88e22b7SJung-uk Kim /******************************************************************************
532a88e22b7SJung-uk Kim *
533a88e22b7SJung-uk Kim * FUNCTION: DtGetFieldLength
534a88e22b7SJung-uk Kim *
535d052a1ccSJung-uk Kim * PARAMETERS: Field - Current field
536a88e22b7SJung-uk Kim * Info - Data table info
537a88e22b7SJung-uk Kim *
538a88e22b7SJung-uk Kim * RETURN: Field length
539a88e22b7SJung-uk Kim *
540a88e22b7SJung-uk Kim * DESCRIPTION: Get length of bytes needed to compile the field
541a88e22b7SJung-uk Kim *
542a88e22b7SJung-uk Kim * Note: This function must remain in sync with AcpiDmDumpTable.
543a88e22b7SJung-uk Kim *
544a88e22b7SJung-uk Kim *****************************************************************************/
545a88e22b7SJung-uk Kim
546a88e22b7SJung-uk Kim UINT32
DtGetFieldLength(DT_FIELD * Field,ACPI_DMTABLE_INFO * Info)547a88e22b7SJung-uk Kim DtGetFieldLength (
548a88e22b7SJung-uk Kim DT_FIELD *Field,
549a88e22b7SJung-uk Kim ACPI_DMTABLE_INFO *Info)
550a88e22b7SJung-uk Kim {
551a88e22b7SJung-uk Kim UINT32 ByteLength = 0;
552a88e22b7SJung-uk Kim char *Value;
553a88e22b7SJung-uk Kim
554a88e22b7SJung-uk Kim
555a88e22b7SJung-uk Kim /* Length is based upon the opcode for this field in the info table */
556a88e22b7SJung-uk Kim
557a88e22b7SJung-uk Kim switch (Info->Opcode)
558a88e22b7SJung-uk Kim {
559a88e22b7SJung-uk Kim case ACPI_DMT_FLAG0:
560a88e22b7SJung-uk Kim case ACPI_DMT_FLAG1:
561a88e22b7SJung-uk Kim case ACPI_DMT_FLAG2:
562a88e22b7SJung-uk Kim case ACPI_DMT_FLAG3:
563a88e22b7SJung-uk Kim case ACPI_DMT_FLAG4:
564a88e22b7SJung-uk Kim case ACPI_DMT_FLAG5:
565a88e22b7SJung-uk Kim case ACPI_DMT_FLAG6:
566a88e22b7SJung-uk Kim case ACPI_DMT_FLAG7:
567a88e22b7SJung-uk Kim case ACPI_DMT_FLAGS0:
5683f0275a0SJung-uk Kim case ACPI_DMT_FLAGS1:
569a88e22b7SJung-uk Kim case ACPI_DMT_FLAGS2:
570ab71bbb7SJung-uk Kim case ACPI_DMT_FLAGS8_2:
5713f0275a0SJung-uk Kim case ACPI_DMT_FLAGS4:
572af051161SJung-uk Kim case ACPI_DMT_FLAGS4_0:
573af051161SJung-uk Kim case ACPI_DMT_FLAGS4_4:
574af051161SJung-uk Kim case ACPI_DMT_FLAGS4_8:
575af051161SJung-uk Kim case ACPI_DMT_FLAGS4_12:
576af051161SJung-uk Kim case ACPI_DMT_FLAGS16_16:
5770b94ba42SJung-uk Kim case ACPI_DMT_LABEL:
5783f0275a0SJung-uk Kim case ACPI_DMT_EXTRA_TEXT:
579a9d8d09cSJung-uk Kim
580a88e22b7SJung-uk Kim ByteLength = 0;
581a88e22b7SJung-uk Kim break;
582a88e22b7SJung-uk Kim
583a88e22b7SJung-uk Kim case ACPI_DMT_UINT8:
584a88e22b7SJung-uk Kim case ACPI_DMT_CHKSUM:
585a88e22b7SJung-uk Kim case ACPI_DMT_SPACEID:
5865a77b11bSJung-uk Kim case ACPI_DMT_ACCWIDTH:
587cfd1ed46SJung-uk Kim case ACPI_DMT_CEDT:
588a88e22b7SJung-uk Kim case ACPI_DMT_IVRS:
5891970d693SJung-uk Kim case ACPI_DMT_IVRS_DE:
590313a0c13SJung-uk Kim case ACPI_DMT_GTDT:
591a88e22b7SJung-uk Kim case ACPI_DMT_MADT:
592722b1667SJung-uk Kim case ACPI_DMT_MPAM_LOCATOR:
593313a0c13SJung-uk Kim case ACPI_DMT_PCCT:
5943f0275a0SJung-uk Kim case ACPI_DMT_PMTT:
595af051161SJung-uk Kim case ACPI_DMT_PPTT:
5961970d693SJung-uk Kim case ACPI_DMT_RGRT:
59767d9aa44SJung-uk Kim case ACPI_DMT_SDEV:
598a88e22b7SJung-uk Kim case ACPI_DMT_SRAT:
59997c0b5abSJung-uk Kim case ACPI_DMT_AEST:
60097c0b5abSJung-uk Kim case ACPI_DMT_AEST_RES:
60197c0b5abSJung-uk Kim case ACPI_DMT_AEST_XFACE:
60297c0b5abSJung-uk Kim case ACPI_DMT_AEST_XRUPT:
603a88e22b7SJung-uk Kim case ACPI_DMT_ASF:
6049a4bc520SJung-uk Kim case ACPI_DMT_CDAT:
605a88e22b7SJung-uk Kim case ACPI_DMT_HESTNTYP:
606a88e22b7SJung-uk Kim case ACPI_DMT_FADTPM:
607a88e22b7SJung-uk Kim case ACPI_DMT_EINJACT:
608a88e22b7SJung-uk Kim case ACPI_DMT_EINJINST:
609a88e22b7SJung-uk Kim case ACPI_DMT_ERSTACT:
610a88e22b7SJung-uk Kim case ACPI_DMT_ERSTINST:
611313a0c13SJung-uk Kim case ACPI_DMT_DMAR_SCOPE:
612cfd1ed46SJung-uk Kim case ACPI_DMT_VIOT:
613a9d8d09cSJung-uk Kim
614a88e22b7SJung-uk Kim ByteLength = 1;
615a88e22b7SJung-uk Kim break;
616a88e22b7SJung-uk Kim
617722b1667SJung-uk Kim case ACPI_DMT_ASPT:
618a88e22b7SJung-uk Kim case ACPI_DMT_UINT16:
619a88e22b7SJung-uk Kim case ACPI_DMT_DMAR:
620*58308fadSJung-uk Kim case ACPI_DMT_ERDT:
621a88e22b7SJung-uk Kim case ACPI_DMT_HEST:
622af051161SJung-uk Kim case ACPI_DMT_HMAT:
623a371a5fdSJung-uk Kim case ACPI_DMT_NFIT:
624a88e22b7SJung-uk Kim case ACPI_DMT_PCI_PATH:
625cfd1ed46SJung-uk Kim case ACPI_DMT_PHAT:
626a9d8d09cSJung-uk Kim
627a88e22b7SJung-uk Kim ByteLength = 2;
628a88e22b7SJung-uk Kim break;
629a88e22b7SJung-uk Kim
630a88e22b7SJung-uk Kim case ACPI_DMT_UINT24:
631a9d8d09cSJung-uk Kim
632a88e22b7SJung-uk Kim ByteLength = 3;
633a88e22b7SJung-uk Kim break;
634a88e22b7SJung-uk Kim
635a88e22b7SJung-uk Kim case ACPI_DMT_UINT32:
63697c0b5abSJung-uk Kim case ACPI_DMT_AEST_CACHE:
63797c0b5abSJung-uk Kim case ACPI_DMT_AEST_GIC:
638a88e22b7SJung-uk Kim case ACPI_DMT_NAME4:
639a88e22b7SJung-uk Kim case ACPI_DMT_SIG:
640313a0c13SJung-uk Kim case ACPI_DMT_LPIT:
64167d9aa44SJung-uk Kim case ACPI_DMT_TPM2:
642a9d8d09cSJung-uk Kim
643a88e22b7SJung-uk Kim ByteLength = 4;
644a88e22b7SJung-uk Kim break;
645a88e22b7SJung-uk Kim
6463f0275a0SJung-uk Kim case ACPI_DMT_UINT40:
647a9d8d09cSJung-uk Kim
6483f0275a0SJung-uk Kim ByteLength = 5;
6493f0275a0SJung-uk Kim break;
6503f0275a0SJung-uk Kim
6513f0275a0SJung-uk Kim case ACPI_DMT_UINT48:
652a88e22b7SJung-uk Kim case ACPI_DMT_NAME6:
653a9d8d09cSJung-uk Kim
654a88e22b7SJung-uk Kim ByteLength = 6;
655a88e22b7SJung-uk Kim break;
656a88e22b7SJung-uk Kim
657a88e22b7SJung-uk Kim case ACPI_DMT_UINT56:
6580b94ba42SJung-uk Kim case ACPI_DMT_BUF7:
659a9d8d09cSJung-uk Kim
660a88e22b7SJung-uk Kim ByteLength = 7;
661a88e22b7SJung-uk Kim break;
662a88e22b7SJung-uk Kim
663a88e22b7SJung-uk Kim case ACPI_DMT_UINT64:
664a88e22b7SJung-uk Kim case ACPI_DMT_NAME8:
665a9d8d09cSJung-uk Kim
666a88e22b7SJung-uk Kim ByteLength = 8;
667a88e22b7SJung-uk Kim break;
668a88e22b7SJung-uk Kim
669a88e22b7SJung-uk Kim case ACPI_DMT_STRING:
670a9d8d09cSJung-uk Kim
671d052a1ccSJung-uk Kim Value = DtGetFieldValue (Field);
672d244b227SJung-uk Kim if (Value)
673d244b227SJung-uk Kim {
6745ef50723SJung-uk Kim ByteLength = strlen (Value) + 1;
675d244b227SJung-uk Kim }
676d244b227SJung-uk Kim else
677d244b227SJung-uk Kim { /* At this point, this is a fatal error */
678d244b227SJung-uk Kim
6796f1f1a63SJung-uk Kim sprintf (AslGbl_MsgBuffer, "Expected \"%s\"", Info->Name);
6806f1f1a63SJung-uk Kim DtFatal (ASL_MSG_COMPILER_INTERNAL, NULL, AslGbl_MsgBuffer);
681d052a1ccSJung-uk Kim return (0);
682d244b227SJung-uk Kim }
683a88e22b7SJung-uk Kim break;
684a88e22b7SJung-uk Kim
6851970d693SJung-uk Kim case ACPI_DMT_IVRS_UNTERMINATED_STRING:
6861970d693SJung-uk Kim
6871970d693SJung-uk Kim Value = DtGetFieldValue (Field);
6881970d693SJung-uk Kim if (Value)
6891970d693SJung-uk Kim {
6901970d693SJung-uk Kim ByteLength = strlen (Value);
6911970d693SJung-uk Kim }
6921970d693SJung-uk Kim else
6931970d693SJung-uk Kim { /* At this point, this is a fatal error */
6941970d693SJung-uk Kim
6951970d693SJung-uk Kim sprintf (AslGbl_MsgBuffer, "Expected \"%s\"", Info->Name);
6961970d693SJung-uk Kim DtFatal (ASL_MSG_COMPILER_INTERNAL, NULL, AslGbl_MsgBuffer);
6971970d693SJung-uk Kim return (0);
6981970d693SJung-uk Kim }
6991970d693SJung-uk Kim break;
7001970d693SJung-uk Kim
701a88e22b7SJung-uk Kim case ACPI_DMT_GAS:
702a9d8d09cSJung-uk Kim
703a88e22b7SJung-uk Kim ByteLength = sizeof (ACPI_GENERIC_ADDRESS);
704a88e22b7SJung-uk Kim break;
705a88e22b7SJung-uk Kim
706a88e22b7SJung-uk Kim case ACPI_DMT_HESTNTFY:
707a9d8d09cSJung-uk Kim
708a88e22b7SJung-uk Kim ByteLength = sizeof (ACPI_HEST_NOTIFY);
709a88e22b7SJung-uk Kim break;
710a88e22b7SJung-uk Kim
711a371a5fdSJung-uk Kim case ACPI_DMT_IORTMEM:
712a371a5fdSJung-uk Kim
713a371a5fdSJung-uk Kim ByteLength = sizeof (ACPI_IORT_MEMORY_ACCESS);
714a371a5fdSJung-uk Kim break;
715a371a5fdSJung-uk Kim
716a88e22b7SJung-uk Kim case ACPI_DMT_BUFFER:
7177cf3e94aSJung-uk Kim case ACPI_DMT_RAW_BUFFER:
718cfd1ed46SJung-uk Kim case ACPI_DMT_PMTT_VENDOR:
719a9d8d09cSJung-uk Kim
720d052a1ccSJung-uk Kim Value = DtGetFieldValue (Field);
721a88e22b7SJung-uk Kim if (Value)
722a88e22b7SJung-uk Kim {
723a88e22b7SJung-uk Kim ByteLength = DtGetBufferLength (Value);
724a88e22b7SJung-uk Kim }
725a88e22b7SJung-uk Kim else
726a88e22b7SJung-uk Kim { /* At this point, this is a fatal error */
727a88e22b7SJung-uk Kim
7286f1f1a63SJung-uk Kim sprintf (AslGbl_MsgBuffer, "Expected \"%s\"", Info->Name);
7296f1f1a63SJung-uk Kim DtFatal (ASL_MSG_COMPILER_INTERNAL, NULL, AslGbl_MsgBuffer);
730d052a1ccSJung-uk Kim return (0);
731a88e22b7SJung-uk Kim }
732a88e22b7SJung-uk Kim break;
733a88e22b7SJung-uk Kim
7348d744e47SJung-uk Kim case ACPI_DMT_BUF10:
7358d744e47SJung-uk Kim
7368d744e47SJung-uk Kim ByteLength = 10;
7378d744e47SJung-uk Kim break;
7388d744e47SJung-uk Kim
739*58308fadSJung-uk Kim case ACPI_DMT_BUF11:
740*58308fadSJung-uk Kim
741*58308fadSJung-uk Kim ByteLength = 11;
742*58308fadSJung-uk Kim break;
743*58308fadSJung-uk Kim
744493deb39SJung-uk Kim case ACPI_DMT_BUF12:
745493deb39SJung-uk Kim
746493deb39SJung-uk Kim ByteLength = 12;
747493deb39SJung-uk Kim break;
748493deb39SJung-uk Kim
749a88e22b7SJung-uk Kim case ACPI_DMT_BUF16:
750d244b227SJung-uk Kim case ACPI_DMT_UUID:
751a9d8d09cSJung-uk Kim
752a88e22b7SJung-uk Kim ByteLength = 16;
753a88e22b7SJung-uk Kim break;
754a88e22b7SJung-uk Kim
755ab71bbb7SJung-uk Kim case ACPI_DMT_BUF18:
756ab71bbb7SJung-uk Kim
757ab71bbb7SJung-uk Kim ByteLength = 18;
758ab71bbb7SJung-uk Kim break;
759ab71bbb7SJung-uk Kim
760*58308fadSJung-uk Kim case ACPI_DMT_BUF24:
761*58308fadSJung-uk Kim
762*58308fadSJung-uk Kim ByteLength = 24;
763*58308fadSJung-uk Kim break;
764*58308fadSJung-uk Kim
765*58308fadSJung-uk Kim case ACPI_DMT_BUF26:
766*58308fadSJung-uk Kim
767*58308fadSJung-uk Kim ByteLength = 26;
768*58308fadSJung-uk Kim break;
769*58308fadSJung-uk Kim
77092f570c3SJung-uk Kim case ACPI_DMT_BUF32:
77192f570c3SJung-uk Kim
77292f570c3SJung-uk Kim ByteLength = 32;
77392f570c3SJung-uk Kim break;
77492f570c3SJung-uk Kim
77592f570c3SJung-uk Kim case ACPI_DMT_BUF112:
77692f570c3SJung-uk Kim
77792f570c3SJung-uk Kim ByteLength = 112;
77892f570c3SJung-uk Kim break;
77992f570c3SJung-uk Kim
780dcbce41eSJung-uk Kim case ACPI_DMT_BUF128:
781a9d8d09cSJung-uk Kim
782dcbce41eSJung-uk Kim ByteLength = 128;
783dcbce41eSJung-uk Kim break;
784dcbce41eSJung-uk Kim
785d244b227SJung-uk Kim case ACPI_DMT_UNICODE:
78697c0b5abSJung-uk Kim case ACPI_DMT_WPBT_UNICODE:
787a9d8d09cSJung-uk Kim
788d052a1ccSJung-uk Kim Value = DtGetFieldValue (Field);
789d244b227SJung-uk Kim
790d244b227SJung-uk Kim /* TBD: error if Value is NULL? (as below?) */
791d244b227SJung-uk Kim
7925ef50723SJung-uk Kim ByteLength = (strlen (Value) + 1) * sizeof (UINT16);
793d244b227SJung-uk Kim break;
794d244b227SJung-uk Kim
795a88e22b7SJung-uk Kim default:
796a9d8d09cSJung-uk Kim
797a88e22b7SJung-uk Kim DtFatal (ASL_MSG_COMPILER_INTERNAL, Field, "Invalid table opcode");
798d052a1ccSJung-uk Kim return (0);
799a88e22b7SJung-uk Kim }
800a88e22b7SJung-uk Kim
801a88e22b7SJung-uk Kim return (ByteLength);
802a88e22b7SJung-uk Kim }
803a88e22b7SJung-uk Kim
804a88e22b7SJung-uk Kim
805a88e22b7SJung-uk Kim /******************************************************************************
806a88e22b7SJung-uk Kim *
807a88e22b7SJung-uk Kim * FUNCTION: DtSum
808a88e22b7SJung-uk Kim *
809a88e22b7SJung-uk Kim * PARAMETERS: DT_WALK_CALLBACK:
810a88e22b7SJung-uk Kim * Subtable - Subtable
811a88e22b7SJung-uk Kim * Context - Unused
812a88e22b7SJung-uk Kim * ReturnValue - Store the checksum of subtable
813a88e22b7SJung-uk Kim *
814a88e22b7SJung-uk Kim * RETURN: Status
815a88e22b7SJung-uk Kim *
816a88e22b7SJung-uk Kim * DESCRIPTION: Get the checksum of subtable
817a88e22b7SJung-uk Kim *
818a88e22b7SJung-uk Kim *****************************************************************************/
819a88e22b7SJung-uk Kim
820a88e22b7SJung-uk Kim static void
DtSum(DT_SUBTABLE * Subtable,void * Context,void * ReturnValue)821a88e22b7SJung-uk Kim DtSum (
822a88e22b7SJung-uk Kim DT_SUBTABLE *Subtable,
823a88e22b7SJung-uk Kim void *Context,
824a88e22b7SJung-uk Kim void *ReturnValue)
825a88e22b7SJung-uk Kim {
826a88e22b7SJung-uk Kim UINT8 Checksum;
827a88e22b7SJung-uk Kim UINT8 *Sum = ReturnValue;
828a88e22b7SJung-uk Kim
829a88e22b7SJung-uk Kim
8309a4bc520SJung-uk Kim Checksum = AcpiUtChecksum (Subtable->Buffer, Subtable->Length);
831a88e22b7SJung-uk Kim *Sum = (UINT8) (*Sum + Checksum);
832a88e22b7SJung-uk Kim }
833a88e22b7SJung-uk Kim
834a88e22b7SJung-uk Kim
835a88e22b7SJung-uk Kim /******************************************************************************
836a88e22b7SJung-uk Kim *
837a88e22b7SJung-uk Kim * FUNCTION: DtSetTableChecksum
838a88e22b7SJung-uk Kim *
839a88e22b7SJung-uk Kim * PARAMETERS: ChecksumPointer - Where to return the checksum
840a88e22b7SJung-uk Kim *
841a88e22b7SJung-uk Kim * RETURN: None
842a88e22b7SJung-uk Kim *
843a88e22b7SJung-uk Kim * DESCRIPTION: Set checksum of the whole data table into the checksum field
844a88e22b7SJung-uk Kim *
845a88e22b7SJung-uk Kim *****************************************************************************/
846a88e22b7SJung-uk Kim
847a88e22b7SJung-uk Kim void
DtSetTableChecksum(UINT8 * ChecksumPointer)848a88e22b7SJung-uk Kim DtSetTableChecksum (
849a88e22b7SJung-uk Kim UINT8 *ChecksumPointer)
850a88e22b7SJung-uk Kim {
851a88e22b7SJung-uk Kim UINT8 Checksum = 0;
852a88e22b7SJung-uk Kim UINT8 OldSum;
853a88e22b7SJung-uk Kim
854a88e22b7SJung-uk Kim
8556f1f1a63SJung-uk Kim DtWalkTableTree (AslGbl_RootTable, DtSum, NULL, &Checksum);
856a88e22b7SJung-uk Kim
857a88e22b7SJung-uk Kim OldSum = *ChecksumPointer;
858a88e22b7SJung-uk Kim Checksum = (UINT8) (Checksum - OldSum);
859a88e22b7SJung-uk Kim
860a88e22b7SJung-uk Kim /* Compute the final checksum */
861a88e22b7SJung-uk Kim
862a88e22b7SJung-uk Kim Checksum = (UINT8) (0 - Checksum);
863a88e22b7SJung-uk Kim *ChecksumPointer = Checksum;
864a88e22b7SJung-uk Kim }
865a88e22b7SJung-uk Kim
866a88e22b7SJung-uk Kim
867a88e22b7SJung-uk Kim /******************************************************************************
868a88e22b7SJung-uk Kim *
869a88e22b7SJung-uk Kim * FUNCTION: DtSetTableLength
870a88e22b7SJung-uk Kim *
871a88e22b7SJung-uk Kim * PARAMETERS: None
872a88e22b7SJung-uk Kim *
873a88e22b7SJung-uk Kim * RETURN: None
874a88e22b7SJung-uk Kim *
875a88e22b7SJung-uk Kim * DESCRIPTION: Walk the subtables and set all the length fields
876a88e22b7SJung-uk Kim *
877a88e22b7SJung-uk Kim *****************************************************************************/
878a88e22b7SJung-uk Kim
879a88e22b7SJung-uk Kim void
DtSetTableLength(void)880a88e22b7SJung-uk Kim DtSetTableLength (
881a88e22b7SJung-uk Kim void)
882a88e22b7SJung-uk Kim {
883a88e22b7SJung-uk Kim DT_SUBTABLE *ParentTable;
884a88e22b7SJung-uk Kim DT_SUBTABLE *ChildTable;
885a88e22b7SJung-uk Kim
886a88e22b7SJung-uk Kim
8876f1f1a63SJung-uk Kim ParentTable = AslGbl_RootTable;
888a88e22b7SJung-uk Kim ChildTable = NULL;
889a88e22b7SJung-uk Kim
890a88e22b7SJung-uk Kim if (!ParentTable)
891a88e22b7SJung-uk Kim {
892a88e22b7SJung-uk Kim return;
893a88e22b7SJung-uk Kim }
894a88e22b7SJung-uk Kim
895a88e22b7SJung-uk Kim DtSetSubtableLength (ParentTable);
896a88e22b7SJung-uk Kim
897a88e22b7SJung-uk Kim while (1)
898a88e22b7SJung-uk Kim {
899a88e22b7SJung-uk Kim ChildTable = DtGetNextSubtable (ParentTable, ChildTable);
900a88e22b7SJung-uk Kim if (ChildTable)
901a88e22b7SJung-uk Kim {
902a88e22b7SJung-uk Kim if (ChildTable->LengthField)
903a88e22b7SJung-uk Kim {
904a88e22b7SJung-uk Kim DtSetSubtableLength (ChildTable);
905a88e22b7SJung-uk Kim }
906a88e22b7SJung-uk Kim
907a88e22b7SJung-uk Kim if (ChildTable->Child)
908a88e22b7SJung-uk Kim {
909a88e22b7SJung-uk Kim ParentTable = ChildTable;
910a88e22b7SJung-uk Kim ChildTable = NULL;
911a88e22b7SJung-uk Kim }
912a88e22b7SJung-uk Kim else
913a88e22b7SJung-uk Kim {
914a88e22b7SJung-uk Kim ParentTable->TotalLength += ChildTable->TotalLength;
915a88e22b7SJung-uk Kim if (ParentTable->LengthField)
916a88e22b7SJung-uk Kim {
917a88e22b7SJung-uk Kim DtSetSubtableLength (ParentTable);
918a88e22b7SJung-uk Kim }
919a88e22b7SJung-uk Kim }
920a88e22b7SJung-uk Kim }
921a88e22b7SJung-uk Kim else
922a88e22b7SJung-uk Kim {
923a88e22b7SJung-uk Kim ChildTable = ParentTable;
924a88e22b7SJung-uk Kim
9256f1f1a63SJung-uk Kim if (ChildTable == AslGbl_RootTable)
926a88e22b7SJung-uk Kim {
927a88e22b7SJung-uk Kim break;
928a88e22b7SJung-uk Kim }
929a88e22b7SJung-uk Kim
930a88e22b7SJung-uk Kim ParentTable = DtGetParentSubtable (ParentTable);
931a88e22b7SJung-uk Kim
932a88e22b7SJung-uk Kim ParentTable->TotalLength += ChildTable->TotalLength;
933a88e22b7SJung-uk Kim if (ParentTable->LengthField)
934a88e22b7SJung-uk Kim {
935a88e22b7SJung-uk Kim DtSetSubtableLength (ParentTable);
936a88e22b7SJung-uk Kim }
937a88e22b7SJung-uk Kim }
938a88e22b7SJung-uk Kim }
939a88e22b7SJung-uk Kim }
940a88e22b7SJung-uk Kim
941a88e22b7SJung-uk Kim
942a88e22b7SJung-uk Kim /******************************************************************************
943a88e22b7SJung-uk Kim *
944a88e22b7SJung-uk Kim * FUNCTION: DtWalkTableTree
945a88e22b7SJung-uk Kim *
946a88e22b7SJung-uk Kim * PARAMETERS: StartTable - Subtable in the tree where walking begins
947a88e22b7SJung-uk Kim * UserFunction - Called during the walk
948a88e22b7SJung-uk Kim * Context - Passed to user function
949a88e22b7SJung-uk Kim * ReturnValue - The return value of UserFunction
950a88e22b7SJung-uk Kim *
951a88e22b7SJung-uk Kim * RETURN: None
952a88e22b7SJung-uk Kim *
953a88e22b7SJung-uk Kim * DESCRIPTION: Performs a depth-first walk of the subtable tree
954a88e22b7SJung-uk Kim *
955a88e22b7SJung-uk Kim *****************************************************************************/
956a88e22b7SJung-uk Kim
957a88e22b7SJung-uk Kim void
DtWalkTableTree(DT_SUBTABLE * StartTable,DT_WALK_CALLBACK UserFunction,void * Context,void * ReturnValue)958a88e22b7SJung-uk Kim DtWalkTableTree (
959a88e22b7SJung-uk Kim DT_SUBTABLE *StartTable,
960a88e22b7SJung-uk Kim DT_WALK_CALLBACK UserFunction,
961a88e22b7SJung-uk Kim void *Context,
962a88e22b7SJung-uk Kim void *ReturnValue)
963a88e22b7SJung-uk Kim {
964a88e22b7SJung-uk Kim DT_SUBTABLE *ParentTable;
965a88e22b7SJung-uk Kim DT_SUBTABLE *ChildTable;
966a88e22b7SJung-uk Kim
967a88e22b7SJung-uk Kim
968a88e22b7SJung-uk Kim ParentTable = StartTable;
969a88e22b7SJung-uk Kim ChildTable = NULL;
970a88e22b7SJung-uk Kim
971a88e22b7SJung-uk Kim if (!ParentTable)
972a88e22b7SJung-uk Kim {
973a88e22b7SJung-uk Kim return;
974a88e22b7SJung-uk Kim }
975a88e22b7SJung-uk Kim
976a88e22b7SJung-uk Kim UserFunction (ParentTable, Context, ReturnValue);
977a88e22b7SJung-uk Kim
978a88e22b7SJung-uk Kim while (1)
979a88e22b7SJung-uk Kim {
980a88e22b7SJung-uk Kim ChildTable = DtGetNextSubtable (ParentTable, ChildTable);
981a88e22b7SJung-uk Kim if (ChildTable)
982a88e22b7SJung-uk Kim {
983a88e22b7SJung-uk Kim UserFunction (ChildTable, Context, ReturnValue);
984a88e22b7SJung-uk Kim
985a88e22b7SJung-uk Kim if (ChildTable->Child)
986a88e22b7SJung-uk Kim {
987a88e22b7SJung-uk Kim ParentTable = ChildTable;
988a88e22b7SJung-uk Kim ChildTable = NULL;
989a88e22b7SJung-uk Kim }
990a88e22b7SJung-uk Kim }
991a88e22b7SJung-uk Kim else
992a88e22b7SJung-uk Kim {
993a88e22b7SJung-uk Kim ChildTable = ParentTable;
9946f1f1a63SJung-uk Kim if (ChildTable == AslGbl_RootTable)
995a88e22b7SJung-uk Kim {
996a88e22b7SJung-uk Kim break;
997a88e22b7SJung-uk Kim }
998a88e22b7SJung-uk Kim
999a88e22b7SJung-uk Kim ParentTable = DtGetParentSubtable (ParentTable);
1000a88e22b7SJung-uk Kim
1001a88e22b7SJung-uk Kim if (ChildTable->Peer == StartTable)
1002a88e22b7SJung-uk Kim {
1003a88e22b7SJung-uk Kim break;
1004a88e22b7SJung-uk Kim }
1005a88e22b7SJung-uk Kim }
1006a88e22b7SJung-uk Kim }
1007a88e22b7SJung-uk Kim }
1008