xref: /illumos-gate/usr/src/uts/intel/sys/acpi/acdebug.h (revision 26f3cdf0)
1 /******************************************************************************
2  *
3  * Name: acdebug.h - ACPI/AML debugger
4  *
5  *****************************************************************************/
6 
7 /*
8  * Copyright (C) 2000 - 2011, 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 
50 typedef struct CommandInfo
51 {
52     char                    *Name;          /* Command Name */
53     UINT8                   MinArgs;        /* Minimum arguments required */
54 
55 } COMMAND_INFO;
56 
57 typedef struct ArgumentInfo
58 {
59     char                    *Name;          /* Argument Name */
60 
61 } ARGUMENT_INFO;
62 
63 typedef struct acpi_execute_walk
64 {
65     UINT32                  Count;
66     UINT32                  MaxCount;
67 
68 } ACPI_EXECUTE_WALK;
69 
70 
71 #define PARAM_LIST(pl)                  pl
72 #define DBTEST_OUTPUT_LEVEL(lvl)        if (AcpiGbl_DbOpt_verbose)
73 #define VERBOSE_PRINT(fp)               DBTEST_OUTPUT_LEVEL(lvl) {\
74                                             AcpiOsPrintf PARAM_LIST(fp);}
75 
76 #define EX_NO_SINGLE_STEP               1
77 #define EX_SINGLE_STEP                  2
78 
79 
80 /*
81  * dbxface - external debugger interfaces
82  */
83 ACPI_STATUS
84 AcpiDbInitialize (
85     void);
86 
87 void
88 AcpiDbTerminate (
89     void);
90 
91 ACPI_STATUS
92 AcpiDbSingleStep (
93     ACPI_WALK_STATE         *WalkState,
94     ACPI_PARSE_OBJECT       *Op,
95     UINT32                  OpType);
96 
97 
98 /*
99  * dbcmds - debug commands and output routines
100  */
101 ACPI_NAMESPACE_NODE *
102 AcpiDbConvertToNode (
103     char                    *InString);
104 
105 void
106 AcpiDbDisplayTableInfo (
107     char                    *TableArg);
108 
109 void
110 AcpiDbUnloadAcpiTable (
111     char                    *TableArg,
112     char                    *InstanceArg);
113 
114 void
115 AcpiDbSendNotify (
116     char                    *Name,
117     UINT32                  Value);
118 
119 void
120 AcpiDbDisplayInterfaces (
121     char                    *ActionArg,
122     char                    *InterfaceNameArg);
123 
124 ACPI_STATUS
125 AcpiDbSleep (
126     char                    *ObjectArg);
127 
128 void
129 AcpiDbDisplayLocks (
130     void);
131 
132 void
133 AcpiDbDisplayResources (
134     char                    *ObjectArg);
135 
136 void
137 AcpiDbDisplayGpes (
138     void);
139 
140 void
141 AcpiDbDisplayHandlers (
142     void);
143 
144 void
145 AcpiDbGenerateGpe (
146     char                    *GpeArg,
147     char                    *BlockArg);
148 
149 
150 /*
151  * dbmethod - control method commands
152  */
153 void
154 AcpiDbSetMethodBreakpoint (
155     char                    *Location,
156     ACPI_WALK_STATE         *WalkState,
157     ACPI_PARSE_OBJECT       *Op);
158 
159 void
160 AcpiDbSetMethodCallBreakpoint (
161     ACPI_PARSE_OBJECT       *Op);
162 
163 void
164 AcpiDbSetMethodData (
165     char                    *TypeArg,
166     char                    *IndexArg,
167     char                    *ValueArg);
168 
169 ACPI_STATUS
170 AcpiDbDisassembleMethod (
171     char                    *Name);
172 
173 void
174 AcpiDbDisassembleAml (
175     char                    *Statements,
176     ACPI_PARSE_OBJECT       *Op);
177 
178 void
179 AcpiDbBatchExecute (
180     char                    *CountArg);
181 
182 
183 /*
184  * dbnames - namespace commands
185  */
186 void
187 AcpiDbSetScope (
188     char                    *Name);
189 
190 void
191 AcpiDbDumpNamespace (
192     char                    *StartArg,
193     char                    *DepthArg);
194 
195 void
196 AcpiDbDumpNamespaceByOwner (
197     char                    *OwnerArg,
198     char                    *DepthArg);
199 
200 ACPI_STATUS
201 AcpiDbFindNameInNamespace (
202     char                    *NameArg);
203 
204 void
205 AcpiDbCheckPredefinedNames (
206     void);
207 
208 ACPI_STATUS
209 AcpiDbDisplayObjects (
210     char                    *ObjTypeArg,
211     char                    *DisplayCountArg);
212 
213 void
214 AcpiDbCheckIntegrity (
215     void);
216 
217 void
218 AcpiDbFindReferences (
219     char                    *ObjectArg);
220 
221 void
222 AcpiDbGetBusInfo (
223     void);
224 
225 
226 /*
227  * dbdisply - debug display commands
228  */
229 void
230 AcpiDbDisplayMethodInfo (
231     ACPI_PARSE_OBJECT       *Op);
232 
233 void
234 AcpiDbDecodeAndDisplayObject (
235     char                    *Target,
236     char                    *OutputType);
237 
238 void
239 AcpiDbDisplayResultObject (
240     ACPI_OPERAND_OBJECT     *ObjDesc,
241     ACPI_WALK_STATE         *WalkState);
242 
243 ACPI_STATUS
244 AcpiDbDisplayAllMethods (
245     char                    *DisplayCountArg);
246 
247 void
248 AcpiDbDisplayArguments (
249     void);
250 
251 void
252 AcpiDbDisplayLocals (
253     void);
254 
255 void
256 AcpiDbDisplayResults (
257     void);
258 
259 void
260 AcpiDbDisplayCallingTree (
261     void);
262 
263 void
264 AcpiDbDisplayObjectType (
265     char                    *ObjectArg);
266 
267 void
268 AcpiDbDisplayArgumentObject (
269     ACPI_OPERAND_OBJECT     *ObjDesc,
270     ACPI_WALK_STATE         *WalkState);
271 
272 
273 /*
274  * dbexec - debugger control method execution
275  */
276 void
277 AcpiDbExecute (
278     char                    *Name,
279     char                    **Args,
280     ACPI_OBJECT_TYPE        *Types,
281     UINT32                  Flags);
282 
283 void
284 AcpiDbCreateExecutionThreads (
285     char                    *NumThreadsArg,
286     char                    *NumLoopsArg,
287     char                    *MethodNameArg);
288 
289 #ifdef ACPI_DBG_TRACK_ALLOCATIONS
290 UINT32
291 AcpiDbGetCacheInfo (
292     ACPI_MEMORY_LIST        *Cache);
293 #endif
294 
295 
296 /*
297  * dbfileio - Debugger file I/O commands
298  */
299 ACPI_OBJECT_TYPE
300 AcpiDbMatchArgument (
301     char                    *UserArgument,
302     ARGUMENT_INFO           *Arguments);
303 
304 void
305 AcpiDbCloseDebugFile (
306     void);
307 
308 void
309 AcpiDbOpenDebugFile (
310     char                    *Name);
311 
312 ACPI_STATUS
313 AcpiDbLoadAcpiTable (
314     char                    *Filename);
315 
316 ACPI_STATUS
317 AcpiDbGetTableFromFile (
318     char                    *Filename,
319     ACPI_TABLE_HEADER       **Table);
320 
321 ACPI_STATUS
322 AcpiDbReadTableFromFile (
323     char                    *Filename,
324     ACPI_TABLE_HEADER       **Table);
325 
326 
327 /*
328  * dbhistry - debugger HISTORY command
329  */
330 void
331 AcpiDbAddToHistory (
332     char                    *CommandLine);
333 
334 void
335 AcpiDbDisplayHistory (
336     void);
337 
338 char *
339 AcpiDbGetFromHistory (
340     char                    *CommandNumArg);
341 
342 
343 /*
344  * dbinput - user front-end to the AML debugger
345  */
346 ACPI_STATUS
347 AcpiDbCommandDispatch (
348     char                    *InputBuffer,
349     ACPI_WALK_STATE         *WalkState,
350     ACPI_PARSE_OBJECT       *Op);
351 
352 void ACPI_SYSTEM_XFACE
353 AcpiDbExecuteThread (
354     void                    *Context);
355 
356 ACPI_STATUS
357 AcpiDbUserCommands (
358     char                    Prompt,
359     ACPI_PARSE_OBJECT       *Op);
360 
361 char *
362 AcpiDbGetNextToken (
363     char                    *String,
364     char                    **Next,
365     ACPI_OBJECT_TYPE        *ReturnType);
366 
367 
368 /*
369  * dbstats - Generation and display of ACPI table statistics
370  */
371 void
372 AcpiDbGenerateStatistics (
373     ACPI_PARSE_OBJECT       *Root,
374     BOOLEAN                 IsMethod);
375 
376 ACPI_STATUS
377 AcpiDbDisplayStatistics (
378     char                    *TypeArg);
379 
380 
381 /*
382  * dbutils - AML debugger utilities
383  */
384 void
385 AcpiDbSetOutputDestination (
386     UINT32                  Where);
387 
388 void
389 AcpiDbDumpExternalObject (
390     ACPI_OBJECT             *ObjDesc,
391     UINT32                  Level);
392 
393 void
394 AcpiDbPrepNamestring (
395     char                    *Name);
396 
397 ACPI_NAMESPACE_NODE *
398 AcpiDbLocalNsLookup (
399     char                    *Name);
400 
401 void
402 AcpiDbUInt32ToHexString (
403     UINT32                  Value,
404     char                    *Buffer);
405 
406 #endif  /* __ACDEBUG_H__ */
407