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