1 /****************************************************************************** 2 * 3 * Name: acdebug.h - ACPI/AML debugger 4 * 5 *****************************************************************************/ 6 7 /* 8 * Copyright (C) 2000 - 2014, 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 #pragma pack(push) /* Set default struct packing */ 49 50 #define ACPI_DEBUG_BUFFER_SIZE 0x4000 /* 16K buffer for return objects */ 51 52 typedef struct acpi_db_command_info 53 { 54 char *Name; /* Command Name */ 55 UINT8 MinArgs; /* Minimum arguments required */ 56 57 } ACPI_DB_COMMAND_INFO; 58 59 typedef struct acpi_db_command_help 60 { 61 UINT8 LineCount; /* Number of help lines */ 62 char *Invocation; /* Command Invocation */ 63 char *Description; /* Command Description */ 64 65 } ACPI_DB_COMMAND_HELP; 66 67 typedef struct acpi_db_argument_info 68 { 69 char *Name; /* Argument Name */ 70 71 } ACPI_DB_ARGUMENT_INFO; 72 73 typedef struct acpi_db_execute_walk 74 { 75 UINT32 Count; 76 UINT32 MaxCount; 77 78 } ACPI_DB_EXECUTE_WALK; 79 80 81 #define PARAM_LIST(pl) pl 82 #define DBTEST_OUTPUT_LEVEL(lvl) if (AcpiGbl_DbOpt_verbose) 83 #define VERBOSE_PRINT(fp) DBTEST_OUTPUT_LEVEL(lvl) {\ 84 AcpiOsPrintf PARAM_LIST(fp);} 85 86 #define EX_NO_SINGLE_STEP 1 87 #define EX_SINGLE_STEP 2 88 89 90 /* 91 * dbxface - external debugger interfaces 92 */ 93 ACPI_STATUS 94 AcpiDbInitialize ( 95 void); 96 97 void 98 AcpiDbTerminate ( 99 void); 100 101 ACPI_STATUS 102 AcpiDbSingleStep ( 103 ACPI_WALK_STATE *WalkState, 104 ACPI_PARSE_OBJECT *Op, 105 UINT32 OpType); 106 107 108 /* 109 * dbcmds - debug commands and output routines 110 */ 111 ACPI_NAMESPACE_NODE * 112 AcpiDbConvertToNode ( 113 char *InString); 114 115 void 116 AcpiDbDisplayTableInfo ( 117 char *TableArg); 118 119 void 120 AcpiDbDisplayTemplate ( 121 char *BufferArg); 122 123 void 124 AcpiDbUnloadAcpiTable ( 125 char *Name); 126 127 void 128 AcpiDbSendNotify ( 129 char *Name, 130 UINT32 Value); 131 132 void 133 AcpiDbDisplayInterfaces ( 134 char *ActionArg, 135 char *InterfaceNameArg); 136 137 ACPI_STATUS 138 AcpiDbSleep ( 139 char *ObjectArg); 140 141 void 142 AcpiDbDisplayLocks ( 143 void); 144 145 void 146 AcpiDbDisplayResources ( 147 char *ObjectArg); 148 149 ACPI_HW_DEPENDENT_RETURN_VOID ( 150 void 151 AcpiDbDisplayGpes ( 152 void)) 153 154 void 155 AcpiDbDisplayHandlers ( 156 void); 157 158 ACPI_HW_DEPENDENT_RETURN_VOID ( 159 void 160 AcpiDbGenerateGpe ( 161 char *GpeArg, 162 char *BlockArg)) 163 164 ACPI_HW_DEPENDENT_RETURN_VOID ( 165 void 166 AcpiDbGenerateSci ( 167 void)) 168 169 void 170 AcpiDbExecuteTest ( 171 char *TypeArg); 172 173 174 /* 175 * dbconvert - miscellaneous conversion routines 176 */ 177 ACPI_STATUS 178 AcpiDbHexCharToValue ( 179 int HexChar, 180 UINT8 *ReturnValue); 181 182 ACPI_STATUS 183 AcpiDbConvertToPackage ( 184 char *String, 185 ACPI_OBJECT *Object); 186 187 ACPI_STATUS 188 AcpiDbConvertToObject ( 189 ACPI_OBJECT_TYPE Type, 190 char *String, 191 ACPI_OBJECT *Object); 192 193 UINT8 * 194 AcpiDbEncodePldBuffer ( 195 ACPI_PLD_INFO *PldInfo); 196 197 void 198 AcpiDbDumpPldBuffer ( 199 ACPI_OBJECT *ObjDesc); 200 201 202 /* 203 * dbmethod - control method commands 204 */ 205 void 206 AcpiDbSetMethodBreakpoint ( 207 char *Location, 208 ACPI_WALK_STATE *WalkState, 209 ACPI_PARSE_OBJECT *Op); 210 211 void 212 AcpiDbSetMethodCallBreakpoint ( 213 ACPI_PARSE_OBJECT *Op); 214 215 void 216 AcpiDbSetMethodData ( 217 char *TypeArg, 218 char *IndexArg, 219 char *ValueArg); 220 221 ACPI_STATUS 222 AcpiDbDisassembleMethod ( 223 char *Name); 224 225 void 226 AcpiDbDisassembleAml ( 227 char *Statements, 228 ACPI_PARSE_OBJECT *Op); 229 230 void 231 AcpiDbBatchExecute ( 232 char *CountArg); 233 234 235 /* 236 * dbnames - namespace commands 237 */ 238 void 239 AcpiDbSetScope ( 240 char *Name); 241 242 void 243 AcpiDbDumpNamespace ( 244 char *StartArg, 245 char *DepthArg); 246 247 void 248 AcpiDbDumpNamespacePaths ( 249 void); 250 251 void 252 AcpiDbDumpNamespaceByOwner ( 253 char *OwnerArg, 254 char *DepthArg); 255 256 ACPI_STATUS 257 AcpiDbFindNameInNamespace ( 258 char *NameArg); 259 260 void 261 AcpiDbCheckPredefinedNames ( 262 void); 263 264 ACPI_STATUS 265 AcpiDbDisplayObjects ( 266 char *ObjTypeArg, 267 char *DisplayCountArg); 268 269 void 270 AcpiDbCheckIntegrity ( 271 void); 272 273 void 274 AcpiDbFindReferences ( 275 char *ObjectArg); 276 277 void 278 AcpiDbGetBusInfo ( 279 void); 280 281 282 /* 283 * dbdisply - debug display commands 284 */ 285 void 286 AcpiDbDisplayMethodInfo ( 287 ACPI_PARSE_OBJECT *Op); 288 289 void 290 AcpiDbDecodeAndDisplayObject ( 291 char *Target, 292 char *OutputType); 293 294 void 295 AcpiDbDisplayResultObject ( 296 ACPI_OPERAND_OBJECT *ObjDesc, 297 ACPI_WALK_STATE *WalkState); 298 299 ACPI_STATUS 300 AcpiDbDisplayAllMethods ( 301 char *DisplayCountArg); 302 303 void 304 AcpiDbDisplayArguments ( 305 void); 306 307 void 308 AcpiDbDisplayLocals ( 309 void); 310 311 void 312 AcpiDbDisplayResults ( 313 void); 314 315 void 316 AcpiDbDisplayCallingTree ( 317 void); 318 319 void 320 AcpiDbDisplayObjectType ( 321 char *ObjectArg); 322 323 void 324 AcpiDbDisplayArgumentObject ( 325 ACPI_OPERAND_OBJECT *ObjDesc, 326 ACPI_WALK_STATE *WalkState); 327 328 329 /* 330 * dbexec - debugger control method execution 331 */ 332 void 333 AcpiDbExecute ( 334 char *Name, 335 char **Args, 336 ACPI_OBJECT_TYPE *Types, 337 UINT32 Flags); 338 339 void 340 AcpiDbCreateExecutionThreads ( 341 char *NumThreadsArg, 342 char *NumLoopsArg, 343 char *MethodNameArg); 344 345 void 346 AcpiDbDeleteObjects ( 347 UINT32 Count, 348 ACPI_OBJECT *Objects); 349 350 #ifdef ACPI_DBG_TRACK_ALLOCATIONS 351 UINT32 352 AcpiDbGetCacheInfo ( 353 ACPI_MEMORY_LIST *Cache); 354 #endif 355 356 357 /* 358 * dbfileio - Debugger file I/O commands 359 */ 360 ACPI_OBJECT_TYPE 361 AcpiDbMatchArgument ( 362 char *UserArgument, 363 ACPI_DB_ARGUMENT_INFO *Arguments); 364 365 void 366 AcpiDbCloseDebugFile ( 367 void); 368 369 void 370 AcpiDbOpenDebugFile ( 371 char *Name); 372 373 ACPI_STATUS 374 AcpiDbLoadAcpiTable ( 375 char *Filename); 376 377 ACPI_STATUS 378 AcpiDbGetTableFromFile ( 379 char *Filename, 380 ACPI_TABLE_HEADER **Table); 381 382 ACPI_STATUS 383 AcpiDbReadTableFromFile ( 384 char *Filename, 385 ACPI_TABLE_HEADER **Table); 386 387 388 /* 389 * dbhistry - debugger HISTORY command 390 */ 391 void 392 AcpiDbAddToHistory ( 393 char *CommandLine); 394 395 void 396 AcpiDbDisplayHistory ( 397 void); 398 399 char * 400 AcpiDbGetFromHistory ( 401 char *CommandNumArg); 402 403 char * 404 AcpiDbGetHistoryByIndex ( 405 UINT32 CommanddNum); 406 407 408 /* 409 * dbinput - user front-end to the AML debugger 410 */ 411 ACPI_STATUS 412 AcpiDbCommandDispatch ( 413 char *InputBuffer, 414 ACPI_WALK_STATE *WalkState, 415 ACPI_PARSE_OBJECT *Op); 416 417 void ACPI_SYSTEM_XFACE 418 AcpiDbExecuteThread ( 419 void *Context); 420 421 ACPI_STATUS 422 AcpiDbUserCommands ( 423 char Prompt, 424 ACPI_PARSE_OBJECT *Op); 425 426 char * 427 AcpiDbGetNextToken ( 428 char *String, 429 char **Next, 430 ACPI_OBJECT_TYPE *ReturnType); 431 432 433 /* 434 * dbstats - Generation and display of ACPI table statistics 435 */ 436 void 437 AcpiDbGenerateStatistics ( 438 ACPI_PARSE_OBJECT *Root, 439 BOOLEAN IsMethod); 440 441 ACPI_STATUS 442 AcpiDbDisplayStatistics ( 443 char *TypeArg); 444 445 446 /* 447 * dbutils - AML debugger utilities 448 */ 449 void 450 AcpiDbSetOutputDestination ( 451 UINT32 Where); 452 453 void 454 AcpiDbDumpExternalObject ( 455 ACPI_OBJECT *ObjDesc, 456 UINT32 Level); 457 458 void 459 AcpiDbPrepNamestring ( 460 char *Name); 461 462 ACPI_NAMESPACE_NODE * 463 AcpiDbLocalNsLookup ( 464 char *Name); 465 466 void 467 AcpiDbUint32ToHexString ( 468 UINT32 Value, 469 char *Buffer); 470 471 #pragma pack(pop) /* Restore original struct packing */ 472 473 #endif /* __ACDEBUG_H__ */ 474