1 /****************************************************************************** 2 * 3 * Module Name: aslpredef - support for ACPI predefined names 4 * 5 *****************************************************************************/ 6 7 /* 8 * Copyright (C) 2000 - 2015, 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 #define ACPI_CREATE_PREDEFINED_TABLE 45 #define ACPI_CREATE_RESOURCE_TABLE 46 47 #include <contrib/dev/acpica/compiler/aslcompiler.h> 48 #include "aslcompiler.y.h" 49 #include <contrib/dev/acpica/include/acpredef.h> 50 #include <contrib/dev/acpica/include/acnamesp.h> 51 52 53 #define _COMPONENT ACPI_COMPILER 54 ACPI_MODULE_NAME ("aslpredef") 55 56 57 /* Local prototypes */ 58 59 static void 60 ApCheckForUnexpectedReturnValue ( 61 ACPI_PARSE_OBJECT *Op, 62 ASL_METHOD_INFO *MethodInfo); 63 64 static UINT32 65 ApCheckForSpecialName ( 66 ACPI_PARSE_OBJECT *Op, 67 char *Name); 68 69 70 /******************************************************************************* 71 * 72 * FUNCTION: ApCheckForPredefinedMethod 73 * 74 * PARAMETERS: Op - A parse node of type "METHOD". 75 * MethodInfo - Saved info about this method 76 * 77 * RETURN: None 78 * 79 * DESCRIPTION: If method is a predefined name, check that the number of 80 * arguments and the return type (returns a value or not) 81 * is correct. 82 * 83 ******************************************************************************/ 84 85 BOOLEAN 86 ApCheckForPredefinedMethod ( 87 ACPI_PARSE_OBJECT *Op, 88 ASL_METHOD_INFO *MethodInfo) 89 { 90 UINT32 Index; 91 UINT32 RequiredArgCount; 92 const ACPI_PREDEFINED_INFO *ThisName; 93 94 95 /* Check for a match against the predefined name list */ 96 97 Index = ApCheckForPredefinedName (Op, Op->Asl.NameSeg); 98 99 switch (Index) 100 { 101 case ACPI_NOT_RESERVED_NAME: /* No underscore or _Txx or _xxx name not matched */ 102 case ACPI_PREDEFINED_NAME: /* Resource Name or reserved scope name */ 103 case ACPI_COMPILER_RESERVED_NAME: /* A _Txx that was not emitted by compiler */ 104 105 /* Just return, nothing to do */ 106 return (FALSE); 107 108 109 case ACPI_EVENT_RESERVED_NAME: /* _Lxx/_Exx/_Wxx/_Qxx methods */ 110 111 Gbl_ReservedMethods++; 112 113 /* NumArguments must be zero for all _Lxx/_Exx/_Wxx/_Qxx methods */ 114 115 if (MethodInfo->NumArguments != 0) 116 { 117 sprintf (MsgBuffer, "%s requires %u", Op->Asl.ExternalName, 0); 118 119 AslError (ASL_WARNING, ASL_MSG_RESERVED_ARG_COUNT_HI, Op, 120 MsgBuffer); 121 } 122 break; 123 124 125 default: 126 /* 127 * Matched a predefined method name - validate the ASL-defined 128 * argument count against the ACPI specification. 129 * 130 * Some methods are allowed to have a "minimum" number of args 131 * (_SCP) because their definition in ACPI has changed over time. 132 */ 133 Gbl_ReservedMethods++; 134 ThisName = &AcpiGbl_PredefinedMethods[Index]; 135 RequiredArgCount = METHOD_GET_ARG_COUNT (ThisName->Info.ArgumentList); 136 137 if (MethodInfo->NumArguments != RequiredArgCount) 138 { 139 sprintf (MsgBuffer, "%4.4s requires %u", 140 ThisName->Info.Name, RequiredArgCount); 141 142 if (MethodInfo->NumArguments < RequiredArgCount) 143 { 144 AslError (ASL_WARNING, ASL_MSG_RESERVED_ARG_COUNT_LO, Op, 145 MsgBuffer); 146 } 147 else if ((MethodInfo->NumArguments > RequiredArgCount) && 148 !(ThisName->Info.ArgumentList & ARG_COUNT_IS_MINIMUM)) 149 { 150 AslError (ASL_WARNING, ASL_MSG_RESERVED_ARG_COUNT_HI, Op, 151 MsgBuffer); 152 } 153 } 154 155 /* 156 * Check if method returns no value, but the predefined name is 157 * required to return a value 158 */ 159 if (MethodInfo->NumReturnNoValue && 160 ThisName->Info.ExpectedBtypes) 161 { 162 AcpiUtGetExpectedReturnTypes (StringBuffer, 163 ThisName->Info.ExpectedBtypes); 164 165 sprintf (MsgBuffer, "%s required for %4.4s", 166 StringBuffer, ThisName->Info.Name); 167 168 AslError (ASL_WARNING, ASL_MSG_RESERVED_RETURN_VALUE, Op, 169 MsgBuffer); 170 } 171 break; 172 } 173 174 return (TRUE); 175 } 176 177 178 /******************************************************************************* 179 * 180 * FUNCTION: ApCheckForUnexpectedReturnValue 181 * 182 * PARAMETERS: Op - A parse node of type "RETURN". 183 * MethodInfo - Saved info about this method 184 * 185 * RETURN: None 186 * 187 * DESCRIPTION: Check for an unexpected return value from a predefined method. 188 * Invoked for predefined methods that are defined to not return 189 * any value. If there is a return value, issue a remark, since 190 * the ASL writer may be confused as to the method definition 191 * and/or functionality. 192 * 193 * Note: We ignore all return values of "Zero", since this is what a standalone 194 * Return() statement will always generate -- so we ignore it here -- 195 * i.e., there is no difference between Return() and Return(Zero). 196 * Also, a null Return() will be disassembled to return(Zero) -- so, we 197 * don't want to generate extraneous remarks/warnings for a disassembled 198 * ASL file. 199 * 200 ******************************************************************************/ 201 202 static void 203 ApCheckForUnexpectedReturnValue ( 204 ACPI_PARSE_OBJECT *Op, 205 ASL_METHOD_INFO *MethodInfo) 206 { 207 ACPI_PARSE_OBJECT *ReturnValueOp; 208 209 210 /* Ignore Return() and Return(Zero) (they are the same) */ 211 212 ReturnValueOp = Op->Asl.Child; 213 if (ReturnValueOp->Asl.ParseOpcode == PARSEOP_ZERO) 214 { 215 return; 216 } 217 218 /* We have a valid return value, but the reserved name did not expect it */ 219 220 AslError (ASL_WARNING, ASL_MSG_RESERVED_NO_RETURN_VAL, 221 Op, MethodInfo->Op->Asl.ExternalName); 222 } 223 224 225 /******************************************************************************* 226 * 227 * FUNCTION: ApCheckPredefinedReturnValue 228 * 229 * PARAMETERS: Op - A parse node of type "RETURN". 230 * MethodInfo - Saved info about this method 231 * 232 * RETURN: None 233 * 234 * DESCRIPTION: If method is a predefined name, attempt to validate the return 235 * value. Only "static" types can be validated - a simple return 236 * of an integer/string/buffer/package or a named reference to 237 * a static object. Values such as a Localx or Argx or a control 238 * method invocation are not checked. Issue a warning if there is 239 * a valid return value, but the reserved method defines no 240 * return value. 241 * 242 ******************************************************************************/ 243 244 void 245 ApCheckPredefinedReturnValue ( 246 ACPI_PARSE_OBJECT *Op, 247 ASL_METHOD_INFO *MethodInfo) 248 { 249 UINT32 Index; 250 ACPI_PARSE_OBJECT *ReturnValueOp; 251 const ACPI_PREDEFINED_INFO *ThisName; 252 253 254 /* 255 * Check parent method for a match against the predefined name list. 256 * 257 * Note: Disable compiler errors/warnings because any errors will be 258 * caught when analyzing the parent method. Eliminates duplicate errors. 259 */ 260 Gbl_AllExceptionsDisabled = TRUE; 261 Index = ApCheckForPredefinedName (MethodInfo->Op, 262 MethodInfo->Op->Asl.NameSeg); 263 Gbl_AllExceptionsDisabled = FALSE; 264 265 switch (Index) 266 { 267 case ACPI_EVENT_RESERVED_NAME: /* _Lxx/_Exx/_Wxx/_Qxx methods */ 268 269 /* No return value expected, warn if there is one */ 270 271 ApCheckForUnexpectedReturnValue (Op, MethodInfo); 272 return; 273 274 case ACPI_NOT_RESERVED_NAME: /* No underscore or _Txx or _xxx name not matched */ 275 case ACPI_PREDEFINED_NAME: /* Resource Name or reserved scope name */ 276 case ACPI_COMPILER_RESERVED_NAME: /* A _Txx that was not emitted by compiler */ 277 278 /* Just return, nothing to do */ 279 return; 280 281 default: /* A standard predefined ACPI name */ 282 283 ThisName = &AcpiGbl_PredefinedMethods[Index]; 284 if (!ThisName->Info.ExpectedBtypes) 285 { 286 /* No return value expected, warn if there is one */ 287 288 ApCheckForUnexpectedReturnValue (Op, MethodInfo); 289 return; 290 } 291 292 /* Get the object returned, it is the next argument */ 293 294 ReturnValueOp = Op->Asl.Child; 295 switch (ReturnValueOp->Asl.ParseOpcode) 296 { 297 case PARSEOP_ZERO: 298 case PARSEOP_ONE: 299 case PARSEOP_ONES: 300 case PARSEOP_INTEGER: 301 case PARSEOP_STRING_LITERAL: 302 case PARSEOP_BUFFER: 303 case PARSEOP_PACKAGE: 304 305 /* Static data return object - check against expected type */ 306 307 ApCheckObjectType (ThisName->Info.Name, ReturnValueOp, 308 ThisName->Info.ExpectedBtypes, ACPI_NOT_PACKAGE_ELEMENT); 309 310 /* For packages, check the individual package elements */ 311 312 if (ReturnValueOp->Asl.ParseOpcode == PARSEOP_PACKAGE) 313 { 314 ApCheckPackage (ReturnValueOp, ThisName); 315 } 316 break; 317 318 default: 319 /* 320 * All other ops are very difficult or impossible to typecheck at 321 * compile time. These include all Localx, Argx, and method 322 * invocations. Also, NAMESEG and NAMESTRING because the type of 323 * any named object can be changed at runtime (for example, 324 * CopyObject will change the type of the target object.) 325 */ 326 break; 327 } 328 } 329 } 330 331 332 /******************************************************************************* 333 * 334 * FUNCTION: ApCheckForPredefinedObject 335 * 336 * PARAMETERS: Op - A parse node 337 * Name - The ACPI name to be checked 338 * 339 * RETURN: None 340 * 341 * DESCRIPTION: Check for a predefined name for a static object (created via 342 * the ASL Name operator). If it is a predefined ACPI name, ensure 343 * that the name does not require any arguments (which would 344 * require a control method implemenation of the name), and that 345 * the type of the object is one of the expected types for the 346 * predefined name. 347 * 348 ******************************************************************************/ 349 350 void 351 ApCheckForPredefinedObject ( 352 ACPI_PARSE_OBJECT *Op, 353 char *Name) 354 { 355 UINT32 Index; 356 ACPI_PARSE_OBJECT *ObjectOp; 357 const ACPI_PREDEFINED_INFO *ThisName; 358 359 360 /* 361 * Check for a real predefined name -- not a resource descriptor name 362 * or a predefined scope name 363 */ 364 Index = ApCheckForPredefinedName (Op, Name); 365 366 switch (Index) 367 { 368 case ACPI_NOT_RESERVED_NAME: /* No underscore or _Txx or _xxx name not matched */ 369 case ACPI_PREDEFINED_NAME: /* Resource Name or reserved scope name */ 370 case ACPI_COMPILER_RESERVED_NAME: /* A _Txx that was not emitted by compiler */ 371 372 /* Nothing to do */ 373 return; 374 375 case ACPI_EVENT_RESERVED_NAME: /* _Lxx/_Exx/_Wxx/_Qxx methods */ 376 377 /* 378 * These names must be control methods, by definition in ACPI spec. 379 * Also because they are defined to return no value. None of them 380 * require any arguments. 381 */ 382 AslError (ASL_ERROR, ASL_MSG_RESERVED_METHOD, Op, 383 "with zero arguments"); 384 return; 385 386 default: 387 388 break; 389 } 390 391 /* A standard predefined ACPI name */ 392 393 /* 394 * If this predefined name requires input arguments, then 395 * it must be implemented as a control method 396 */ 397 ThisName = &AcpiGbl_PredefinedMethods[Index]; 398 if (METHOD_GET_ARG_COUNT (ThisName->Info.ArgumentList) > 0) 399 { 400 AslError (ASL_ERROR, ASL_MSG_RESERVED_METHOD, Op, 401 "with arguments"); 402 return; 403 } 404 405 /* 406 * If no return value is expected from this predefined name, then 407 * it follows that it must be implemented as a control method 408 * (with zero args, because the args > 0 case was handled above) 409 * Examples are: _DIS, _INI, _IRC, _OFF, _ON, _PSx 410 */ 411 if (!ThisName->Info.ExpectedBtypes) 412 { 413 AslError (ASL_ERROR, ASL_MSG_RESERVED_METHOD, Op, 414 "with zero arguments"); 415 return; 416 } 417 418 /* Typecheck the actual object, it is the next argument */ 419 420 ObjectOp = Op->Asl.Child->Asl.Next; 421 ApCheckObjectType (ThisName->Info.Name, Op->Asl.Child->Asl.Next, 422 ThisName->Info.ExpectedBtypes, ACPI_NOT_PACKAGE_ELEMENT); 423 424 /* For packages, check the individual package elements */ 425 426 if (ObjectOp->Asl.ParseOpcode == PARSEOP_PACKAGE) 427 { 428 ApCheckPackage (ObjectOp, ThisName); 429 } 430 } 431 432 433 /******************************************************************************* 434 * 435 * FUNCTION: ApCheckForPredefinedName 436 * 437 * PARAMETERS: Op - A parse node 438 * Name - NameSeg to check 439 * 440 * RETURN: None 441 * 442 * DESCRIPTION: Check a NameSeg against the reserved list. 443 * 444 ******************************************************************************/ 445 446 UINT32 447 ApCheckForPredefinedName ( 448 ACPI_PARSE_OBJECT *Op, 449 char *Name) 450 { 451 UINT32 i; 452 const ACPI_PREDEFINED_INFO *ThisName; 453 454 455 if (Name[0] == 0) 456 { 457 AcpiOsPrintf ("Found a null name, external = %s\n", 458 Op->Asl.ExternalName); 459 } 460 461 /* All reserved names are prefixed with a single underscore */ 462 463 if (Name[0] != '_') 464 { 465 return (ACPI_NOT_RESERVED_NAME); 466 } 467 468 /* Check for a standard predefined method name */ 469 470 ThisName = AcpiGbl_PredefinedMethods; 471 for (i = 0; ThisName->Info.Name[0]; i++) 472 { 473 if (ACPI_COMPARE_NAME (Name, ThisName->Info.Name)) 474 { 475 /* Return index into predefined array */ 476 return (i); 477 } 478 479 ThisName++; /* Does not account for extra package data, but is OK */ 480 } 481 482 /* Check for resource names and predefined scope names */ 483 484 ThisName = AcpiGbl_ResourceNames; 485 while (ThisName->Info.Name[0]) 486 { 487 if (ACPI_COMPARE_NAME (Name, ThisName->Info.Name)) 488 { 489 return (ACPI_PREDEFINED_NAME); 490 } 491 492 ThisName++; 493 } 494 495 ThisName = AcpiGbl_ScopeNames; 496 while (ThisName->Info.Name[0]) 497 { 498 if (ACPI_COMPARE_NAME (Name, ThisName->Info.Name)) 499 { 500 return (ACPI_PREDEFINED_NAME); 501 } 502 503 ThisName++; 504 } 505 506 /* Check for _Lxx/_Exx/_Wxx/_Qxx/_T_x. Warning if unknown predefined name */ 507 508 return (ApCheckForSpecialName (Op, Name)); 509 } 510 511 512 /******************************************************************************* 513 * 514 * FUNCTION: ApCheckForSpecialName 515 * 516 * PARAMETERS: Op - A parse node 517 * Name - NameSeg to check 518 * 519 * RETURN: None 520 * 521 * DESCRIPTION: Check for the "special" predefined names - 522 * _Lxx, _Exx, _Qxx, _Wxx, and _T_x 523 * 524 ******************************************************************************/ 525 526 static UINT32 527 ApCheckForSpecialName ( 528 ACPI_PARSE_OBJECT *Op, 529 char *Name) 530 { 531 532 /* 533 * Check for the "special" predefined names. We already know that the 534 * first character is an underscore. 535 * GPE: _Lxx 536 * GPE: _Exx 537 * GPE: _Wxx 538 * EC: _Qxx 539 */ 540 if ((Name[1] == 'L') || 541 (Name[1] == 'E') || 542 (Name[1] == 'W') || 543 (Name[1] == 'Q')) 544 { 545 /* The next two characters must be hex digits */ 546 547 if ((isxdigit ((int) Name[2])) && 548 (isxdigit ((int) Name[3]))) 549 { 550 return (ACPI_EVENT_RESERVED_NAME); 551 } 552 } 553 554 /* Check for the names reserved for the compiler itself: _T_x */ 555 556 else if ((Op->Asl.ExternalName[1] == 'T') && 557 (Op->Asl.ExternalName[2] == '_')) 558 { 559 /* Ignore if actually emitted by the compiler */ 560 561 if (Op->Asl.CompileFlags & NODE_COMPILER_EMITTED) 562 { 563 return (ACPI_NOT_RESERVED_NAME); 564 } 565 566 /* 567 * Was not actually emitted by the compiler. This is a special case, 568 * however. If the ASL code being compiled was the result of a 569 * dissasembly, it may possibly contain valid compiler-emitted names 570 * of the form "_T_x". We don't want to issue an error or even a 571 * warning and force the user to manually change the names. So, we 572 * will issue a remark instead. 573 */ 574 AslError (ASL_REMARK, ASL_MSG_COMPILER_RESERVED, Op, Op->Asl.ExternalName); 575 return (ACPI_COMPILER_RESERVED_NAME); 576 } 577 578 /* 579 * The name didn't match any of the known predefined names. Flag it as a 580 * warning, since the entire namespace starting with an underscore is 581 * reserved by the ACPI spec. 582 */ 583 AslError (ASL_WARNING, ASL_MSG_UNKNOWN_RESERVED_NAME, Op, 584 Op->Asl.ExternalName); 585 586 return (ACPI_NOT_RESERVED_NAME); 587 } 588 589 590 /******************************************************************************* 591 * 592 * FUNCTION: ApCheckObjectType 593 * 594 * PARAMETERS: PredefinedName - Name of the predefined object we are checking 595 * Op - Current parse node 596 * ExpectedBtypes - Bitmap of expected return type(s) 597 * PackageIndex - Index of object within parent package (if 598 * applicable - ACPI_NOT_PACKAGE_ELEMENT 599 * otherwise) 600 * 601 * RETURN: None 602 * 603 * DESCRIPTION: Check if the object type is one of the types that is expected 604 * by the predefined name. Only a limited number of object types 605 * can be returned by the predefined names. 606 * 607 ******************************************************************************/ 608 609 ACPI_STATUS 610 ApCheckObjectType ( 611 const char *PredefinedName, 612 ACPI_PARSE_OBJECT *Op, 613 UINT32 ExpectedBtypes, 614 UINT32 PackageIndex) 615 { 616 UINT32 ReturnBtype; 617 char *TypeName; 618 619 620 if (!Op) 621 { 622 return (AE_TYPE); 623 } 624 625 /* Map the parse opcode to a bitmapped return type (RTYPE) */ 626 627 switch (Op->Asl.ParseOpcode) 628 { 629 case PARSEOP_ZERO: 630 case PARSEOP_ONE: 631 case PARSEOP_ONES: 632 case PARSEOP_INTEGER: 633 634 ReturnBtype = ACPI_RTYPE_INTEGER; 635 TypeName = "Integer"; 636 break; 637 638 case PARSEOP_STRING_LITERAL: 639 640 ReturnBtype = ACPI_RTYPE_STRING; 641 TypeName = "String"; 642 break; 643 644 case PARSEOP_BUFFER: 645 646 ReturnBtype = ACPI_RTYPE_BUFFER; 647 TypeName = "Buffer"; 648 break; 649 650 case PARSEOP_PACKAGE: 651 case PARSEOP_VAR_PACKAGE: 652 653 ReturnBtype = ACPI_RTYPE_PACKAGE; 654 TypeName = "Package"; 655 break; 656 657 case PARSEOP_NAMESEG: 658 case PARSEOP_NAMESTRING: 659 /* 660 * Ignore any named references within a package object. 661 * 662 * For Package objects, references are allowed instead of any of the 663 * standard data types (Integer/String/Buffer/Package). These 664 * references are resolved at runtime. NAMESEG and NAMESTRING are 665 * impossible to typecheck at compile time because the type of 666 * any named object can be changed at runtime (for example, 667 * CopyObject will change the type of the target object). 668 */ 669 if (PackageIndex != ACPI_NOT_PACKAGE_ELEMENT) 670 { 671 return (AE_OK); 672 } 673 674 ReturnBtype = ACPI_RTYPE_REFERENCE; 675 TypeName = "Reference"; 676 break; 677 678 default: 679 680 /* Not one of the supported object types */ 681 682 TypeName = UtGetOpName (Op->Asl.ParseOpcode); 683 goto TypeErrorExit; 684 } 685 686 /* Exit if the object is one of the expected types */ 687 688 if (ReturnBtype & ExpectedBtypes) 689 { 690 return (AE_OK); 691 } 692 693 694 TypeErrorExit: 695 696 /* Format the expected types and emit an error message */ 697 698 AcpiUtGetExpectedReturnTypes (StringBuffer, ExpectedBtypes); 699 700 if (PackageIndex == ACPI_NOT_PACKAGE_ELEMENT) 701 { 702 sprintf (MsgBuffer, "%4.4s: found %s, %s required", 703 PredefinedName, TypeName, StringBuffer); 704 } 705 else 706 { 707 sprintf (MsgBuffer, "%4.4s: found %s at index %u, %s required", 708 PredefinedName, TypeName, PackageIndex, StringBuffer); 709 } 710 711 AslError (ASL_ERROR, ASL_MSG_RESERVED_OPERAND_TYPE, Op, MsgBuffer); 712 return (AE_TYPE); 713 } 714 715 716 /******************************************************************************* 717 * 718 * FUNCTION: ApDisplayReservedNames 719 * 720 * PARAMETERS: None 721 * 722 * RETURN: None 723 * 724 * DESCRIPTION: Dump information about the ACPI predefined names and predefined 725 * resource descriptor names. 726 * 727 ******************************************************************************/ 728 729 void 730 ApDisplayReservedNames ( 731 void) 732 { 733 const ACPI_PREDEFINED_INFO *ThisName; 734 UINT32 Count; 735 UINT32 NumTypes; 736 737 738 /* 739 * Predefined names/methods 740 */ 741 printf ("\nPredefined Name Information\n\n"); 742 743 Count = 0; 744 ThisName = AcpiGbl_PredefinedMethods; 745 while (ThisName->Info.Name[0]) 746 { 747 AcpiUtDisplayPredefinedMethod (MsgBuffer, ThisName, FALSE); 748 Count++; 749 ThisName = AcpiUtGetNextPredefinedMethod (ThisName); 750 } 751 752 printf ("%u Predefined Names are recognized\n", Count); 753 754 /* 755 * Resource Descriptor names 756 */ 757 printf ("\nPredefined Names for Resource Descriptor Fields\n\n"); 758 759 Count = 0; 760 ThisName = AcpiGbl_ResourceNames; 761 while (ThisName->Info.Name[0]) 762 { 763 NumTypes = AcpiUtGetResourceBitWidth (MsgBuffer, 764 ThisName->Info.ArgumentList); 765 766 printf ("%4.4s Field is %s bits wide%s\n", 767 ThisName->Info.Name, MsgBuffer, 768 (NumTypes > 1) ? " (depending on descriptor type)" : ""); 769 770 Count++; 771 ThisName++; 772 } 773 774 printf ("%u Resource Descriptor Field Names are recognized\n", Count); 775 776 /* 777 * Predefined scope names 778 */ 779 printf ("\nPredefined Scope/Device Names (automatically created at root)\n\n"); 780 781 ThisName = AcpiGbl_ScopeNames; 782 while (ThisName->Info.Name[0]) 783 { 784 printf ("%4.4s Scope/Device\n", ThisName->Info.Name); 785 ThisName++; 786 } 787 } 788