1/******************************************************************************
2 *
3 * Name: acdebug.h - ACPI/AML debugger
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2013, Intel Corp.
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 *    notice, this list of conditions, and the following disclaimer,
16 *    without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 *    substantially similar to the "NO WARRANTY" disclaimer below
19 *    ("Disclaimer") and any redistribution must be conditioned upon
20 *    including a substantially similar Disclaimer requirement for further
21 *    binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 *    of any contributors may be used to endorse or promote products derived
24 *    from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#ifndef __ACDEBUG_H__
45#define __ACDEBUG_H__
46
47
48#define ACPI_DEBUG_BUFFER_SIZE  0x4000      /* 16K buffer for return objects */
49
50typedef struct acpi_db_command_info
51{
52    char                    *Name;          /* Command Name */
53    UINT8                   MinArgs;        /* Minimum arguments required */
54
55} ACPI_DB_COMMAND_INFO;
56
57typedef struct acpi_db_command_help
58{
59    UINT8                   LineCount;      /* Number of help lines */
60    char                    *Invocation;    /* Command Invocation */
61    char                    *Description;   /* Command Description */
62
63} ACPI_DB_COMMAND_HELP;
64
65typedef struct acpi_db_argument_info
66{
67    char                    *Name;          /* Argument Name */
68
69} ACPI_DB_ARGUMENT_INFO;
70
71typedef struct acpi_db_execute_walk
72{
73    UINT32                  Count;
74    UINT32                  MaxCount;
75
76} ACPI_DB_EXECUTE_WALK;
77
78
79#define PARAM_LIST(pl)                  pl
80#define DBTEST_OUTPUT_LEVEL(lvl)        if (AcpiGbl_DbOpt_verbose)
81#define VERBOSE_PRINT(fp)               DBTEST_OUTPUT_LEVEL(lvl) {\
82                                            AcpiOsPrintf PARAM_LIST(fp);}
83
84#define EX_NO_SINGLE_STEP               1
85#define EX_SINGLE_STEP                  2
86
87
88/*
89 * dbxface - external debugger interfaces
90 */
91ACPI_STATUS
92AcpiDbInitialize (
93    void);
94
95void
96AcpiDbTerminate (
97    void);
98
99ACPI_STATUS
100AcpiDbSingleStep (
101    ACPI_WALK_STATE         *WalkState,
102    ACPI_PARSE_OBJECT       *Op,
103    UINT32                  OpType);
104
105
106/*
107 * dbcmds - debug commands and output routines
108 */
109ACPI_NAMESPACE_NODE *
110AcpiDbConvertToNode (
111    char                    *InString);
112
113void
114AcpiDbDisplayTableInfo (
115    char                    *TableArg);
116
117void
118AcpiDbDisplayTemplate (
119    char                    *BufferArg);
120
121void
122AcpiDbUnloadAcpiTable (
123    char                    *Name);
124
125void
126AcpiDbSendNotify (
127    char                    *Name,
128    UINT32                  Value);
129
130void
131AcpiDbDisplayInterfaces (
132    char                    *ActionArg,
133    char                    *InterfaceNameArg);
134
135ACPI_STATUS
136AcpiDbSleep (
137    char                    *ObjectArg);
138
139void
140AcpiDbDisplayLocks (
141    void);
142
143void
144AcpiDbDisplayResources (
145    char                    *ObjectArg);
146
147ACPI_HW_DEPENDENT_RETURN_VOID (
148void
149AcpiDbDisplayGpes (
150    void))
151
152void
153AcpiDbDisplayHandlers (
154    void);
155
156ACPI_HW_DEPENDENT_RETURN_VOID (
157void
158AcpiDbGenerateGpe (
159    char                    *GpeArg,
160    char                    *BlockArg))
161
162ACPI_HW_DEPENDENT_RETURN_VOID (
163void
164AcpiDbGenerateSci (
165    void))
166
167/*
168 * dbconvert - miscellaneous conversion routines
169 */
170ACPI_STATUS
171AcpiDbHexCharToValue (
172    int                     HexChar,
173    UINT8                   *ReturnValue);
174
175ACPI_STATUS
176AcpiDbConvertToPackage (
177    char                    *String,
178    ACPI_OBJECT             *Object);
179
180ACPI_STATUS
181AcpiDbConvertToObject (
182    ACPI_OBJECT_TYPE        Type,
183    char                    *String,
184    ACPI_OBJECT             *Object);
185
186UINT8 *
187AcpiDbEncodePldBuffer (
188    ACPI_PLD_INFO           *PldInfo);
189
190void
191AcpiDbDumpPldBuffer (
192    ACPI_OBJECT             *ObjDesc);
193
194
195/*
196 * dbmethod - control method commands
197 */
198void
199AcpiDbSetMethodBreakpoint (
200    char                    *Location,
201    ACPI_WALK_STATE         *WalkState,
202    ACPI_PARSE_OBJECT       *Op);
203
204void
205AcpiDbSetMethodCallBreakpoint (
206    ACPI_PARSE_OBJECT       *Op);
207
208void
209AcpiDbSetMethodData (
210    char                    *TypeArg,
211    char                    *IndexArg,
212    char                    *ValueArg);
213
214ACPI_STATUS
215AcpiDbDisassembleMethod (
216    char                    *Name);
217
218void
219AcpiDbDisassembleAml (
220    char                    *Statements,
221    ACPI_PARSE_OBJECT       *Op);
222
223void
224AcpiDbBatchExecute (
225    char                    *CountArg);
226
227
228/*
229 * dbnames - namespace commands
230 */
231void
232AcpiDbSetScope (
233    char                    *Name);
234
235void
236AcpiDbDumpNamespace (
237    char                    *StartArg,
238    char                    *DepthArg);
239
240void
241AcpiDbDumpNamespacePaths (
242    void);
243
244void
245AcpiDbDumpNamespaceByOwner (
246    char                    *OwnerArg,
247    char                    *DepthArg);
248
249ACPI_STATUS
250AcpiDbFindNameInNamespace (
251    char                    *NameArg);
252
253void
254AcpiDbCheckPredefinedNames (
255    void);
256
257ACPI_STATUS
258AcpiDbDisplayObjects (
259    char                    *ObjTypeArg,
260    char                    *DisplayCountArg);
261
262void
263AcpiDbCheckIntegrity (
264    void);
265
266void
267AcpiDbFindReferences (
268    char                    *ObjectArg);
269
270void
271AcpiDbGetBusInfo (
272    void);
273
274
275/*
276 * dbdisply - debug display commands
277 */
278void
279AcpiDbDisplayMethodInfo (
280    ACPI_PARSE_OBJECT       *Op);
281
282void
283AcpiDbDecodeAndDisplayObject (
284    char                    *Target,
285    char                    *OutputType);
286
287void
288AcpiDbDisplayResultObject (
289    ACPI_OPERAND_OBJECT     *ObjDesc,
290    ACPI_WALK_STATE         *WalkState);
291
292ACPI_STATUS
293AcpiDbDisplayAllMethods (
294    char                    *DisplayCountArg);
295
296void
297AcpiDbDisplayArguments (
298    void);
299
300void
301AcpiDbDisplayLocals (
302    void);
303
304void
305AcpiDbDisplayResults (
306    void);
307
308void
309AcpiDbDisplayCallingTree (
310    void);
311
312void
313AcpiDbDisplayObjectType (
314    char                    *ObjectArg);
315
316void
317AcpiDbDisplayArgumentObject (
318    ACPI_OPERAND_OBJECT     *ObjDesc,
319    ACPI_WALK_STATE         *WalkState);
320
321
322/*
323 * dbexec - debugger control method execution
324 */
325void
326AcpiDbExecute (
327    char                    *Name,
328    char                    **Args,
329    ACPI_OBJECT_TYPE        *Types,
330    UINT32                  Flags);
331
332void
333AcpiDbCreateExecutionThreads (
334    char                    *NumThreadsArg,
335    char                    *NumLoopsArg,
336    char                    *MethodNameArg);
337
338void
339AcpiDbDeleteObjects (
340    UINT32                  Count,
341    ACPI_OBJECT             *Objects);
342
343#ifdef ACPI_DBG_TRACK_ALLOCATIONS
344UINT32
345AcpiDbGetCacheInfo (
346    ACPI_MEMORY_LIST        *Cache);
347#endif
348
349
350/*
351 * dbfileio - Debugger file I/O commands
352 */
353ACPI_OBJECT_TYPE
354AcpiDbMatchArgument (
355    char                    *UserArgument,
356    ACPI_DB_ARGUMENT_INFO   *Arguments);
357
358void
359AcpiDbCloseDebugFile (
360    void);
361
362void
363AcpiDbOpenDebugFile (
364    char                    *Name);
365
366ACPI_STATUS
367AcpiDbLoadAcpiTable (
368    char                    *Filename);
369
370ACPI_STATUS
371AcpiDbGetTableFromFile (
372    char                    *Filename,
373    ACPI_TABLE_HEADER       **Table);
374
375ACPI_STATUS
376AcpiDbReadTableFromFile (
377    char                    *Filename,
378    ACPI_TABLE_HEADER       **Table);
379
380
381/*
382 * dbhistry - debugger HISTORY command
383 */
384void
385AcpiDbAddToHistory (
386    char                    *CommandLine);
387
388void
389AcpiDbDisplayHistory (
390    void);
391
392char *
393AcpiDbGetFromHistory (
394    char                    *CommandNumArg);
395
396
397/*
398 * dbinput - user front-end to the AML debugger
399 */
400ACPI_STATUS
401AcpiDbCommandDispatch (
402    char                    *InputBuffer,
403    ACPI_WALK_STATE         *WalkState,
404    ACPI_PARSE_OBJECT       *Op);
405
406void ACPI_SYSTEM_XFACE
407AcpiDbExecuteThread (
408    void                    *Context);
409
410ACPI_STATUS
411AcpiDbUserCommands (
412    char                    Prompt,
413    ACPI_PARSE_OBJECT       *Op);
414
415char *
416AcpiDbGetNextToken (
417    char                    *String,
418    char                    **Next,
419    ACPI_OBJECT_TYPE        *ReturnType);
420
421
422/*
423 * dbstats - Generation and display of ACPI table statistics
424 */
425void
426AcpiDbGenerateStatistics (
427    ACPI_PARSE_OBJECT       *Root,
428    BOOLEAN                 IsMethod);
429
430ACPI_STATUS
431AcpiDbDisplayStatistics (
432    char                    *TypeArg);
433
434
435/*
436 * dbutils - AML debugger utilities
437 */
438void
439AcpiDbSetOutputDestination (
440    UINT32                  Where);
441
442void
443AcpiDbDumpExternalObject (
444    ACPI_OBJECT             *ObjDesc,
445    UINT32                  Level);
446
447void
448AcpiDbPrepNamestring (
449    char                    *Name);
450
451ACPI_NAMESPACE_NODE *
452AcpiDbLocalNsLookup (
453    char                    *Name);
454
455void
456AcpiDbUint32ToHexString (
457    UINT32                  Value,
458    char                    *Buffer);
459
460#endif  /* __ACDEBUG_H__ */
461