1 /****************************************************************************** 2 * 3 * Module Name: aslpredef - support for ACPI predefined names 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 #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 /* Check parent method for a match against the predefined name list */ 255 256 Index = ApCheckForPredefinedName (MethodInfo->Op, 257 MethodInfo->Op->Asl.NameSeg); 258 259 switch (Index) 260 { 261 case ACPI_EVENT_RESERVED_NAME: /* _Lxx/_Exx/_Wxx/_Qxx methods */ 262 263 /* No return value expected, warn if there is one */ 264 265 ApCheckForUnexpectedReturnValue (Op, MethodInfo); 266 return; 267 268 case ACPI_NOT_RESERVED_NAME: /* No underscore or _Txx or _xxx name not matched */ 269 case ACPI_PREDEFINED_NAME: /* Resource Name or reserved scope name */ 270 case ACPI_COMPILER_RESERVED_NAME: /* A _Txx that was not emitted by compiler */ 271 272 /* Just return, nothing to do */ 273 return; 274 275 default: /* A standard predefined ACPI name */ 276 277 ThisName = &AcpiGbl_PredefinedMethods[Index]; 278 if (!ThisName->Info.ExpectedBtypes) 279 { 280 /* No return value expected, warn if there is one */ 281 282 ApCheckForUnexpectedReturnValue (Op, MethodInfo); 283 return; 284 } 285 286 /* Get the object returned, it is the next argument */ 287 288 ReturnValueOp = Op->Asl.Child; 289 switch (ReturnValueOp->Asl.ParseOpcode) 290 { 291 case PARSEOP_ZERO: 292 case PARSEOP_ONE: 293 case PARSEOP_ONES: 294 case PARSEOP_INTEGER: 295 case PARSEOP_STRING_LITERAL: 296 case PARSEOP_BUFFER: 297 case PARSEOP_PACKAGE: 298 299 /* Static data return object - check against expected type */ 300 301 ApCheckObjectType (ThisName->Info.Name, ReturnValueOp, 302 ThisName->Info.ExpectedBtypes, ACPI_NOT_PACKAGE_ELEMENT); 303 304 /* For packages, check the individual package elements */ 305 306 if (ReturnValueOp->Asl.ParseOpcode == PARSEOP_PACKAGE) 307 { 308 ApCheckPackage (ReturnValueOp, ThisName); 309 } 310 break; 311 312 default: 313 /* 314 * All other ops are very difficult or impossible to typecheck at 315 * compile time. These include all Localx, Argx, and method 316 * invocations. Also, NAMESEG and NAMESTRING because the type of 317 * any named object can be changed at runtime (for example, 318 * CopyObject will change the type of the target object.) 319 */ 320 break; 321 } 322 } 323 } 324 325 326 /******************************************************************************* 327 * 328 * FUNCTION: ApCheckForPredefinedObject 329 * 330 * PARAMETERS: Op - A parse node 331 * Name - The ACPI name to be checked 332 * 333 * RETURN: None 334 * 335 * DESCRIPTION: Check for a predefined name for a static object (created via 336 * the ASL Name operator). If it is a predefined ACPI name, ensure 337 * that the name does not require any arguments (which would 338 * require a control method implemenation of the name), and that 339 * the type of the object is one of the expected types for the 340 * predefined name. 341 * 342 ******************************************************************************/ 343 344 void 345 ApCheckForPredefinedObject ( 346 ACPI_PARSE_OBJECT *Op, 347 char *Name) 348 { 349 UINT32 Index; 350 ACPI_PARSE_OBJECT *ObjectOp; 351 const ACPI_PREDEFINED_INFO *ThisName; 352 353 354 /* 355 * Check for a real predefined name -- not a resource descriptor name 356 * or a predefined scope name 357 */ 358 Index = ApCheckForPredefinedName (Op, Name); 359 360 switch (Index) 361 { 362 case ACPI_NOT_RESERVED_NAME: /* No underscore or _Txx or _xxx name not matched */ 363 case ACPI_PREDEFINED_NAME: /* Resource Name or reserved scope name */ 364 case ACPI_COMPILER_RESERVED_NAME: /* A _Txx that was not emitted by compiler */ 365 366 /* Nothing to do */ 367 return; 368 369 case ACPI_EVENT_RESERVED_NAME: /* _Lxx/_Exx/_Wxx/_Qxx methods */ 370 371 /* 372 * These names must be control methods, by definition in ACPI spec. 373 * Also because they are defined to return no value. None of them 374 * require any arguments. 375 */ 376 AslError (ASL_ERROR, ASL_MSG_RESERVED_METHOD, Op, 377 "with zero arguments"); 378 return; 379 380 default: 381 382 break; 383 } 384 385 /* A standard predefined ACPI name */ 386 387 /* 388 * If this predefined name requires input arguments, then 389 * it must be implemented as a control method 390 */ 391 ThisName = &AcpiGbl_PredefinedMethods[Index]; 392 if (METHOD_GET_ARG_COUNT (ThisName->Info.ArgumentList) > 0) 393 { 394 AslError (ASL_ERROR, ASL_MSG_RESERVED_METHOD, Op, 395 "with arguments"); 396 return; 397 } 398 399 /* 400 * If no return value is expected from this predefined name, then 401 * it follows that it must be implemented as a control method 402 * (with zero args, because the args > 0 case was handled above) 403 * Examples are: _DIS, _INI, _IRC, _OFF, _ON, _PSx 404 */ 405 if (!ThisName->Info.ExpectedBtypes) 406 { 407 AslError (ASL_ERROR, ASL_MSG_RESERVED_METHOD, Op, 408 "with zero arguments"); 409 return; 410 } 411 412 /* Typecheck the actual object, it is the next argument */ 413 414 ObjectOp = Op->Asl.Child->Asl.Next; 415 ApCheckObjectType (ThisName->Info.Name, Op->Asl.Child->Asl.Next, 416 ThisName->Info.ExpectedBtypes, ACPI_NOT_PACKAGE_ELEMENT); 417 418 /* For packages, check the individual package elements */ 419 420 if (ObjectOp->Asl.ParseOpcode == PARSEOP_PACKAGE) 421 { 422 ApCheckPackage (ObjectOp, ThisName); 423 } 424 } 425 426 427 /******************************************************************************* 428 * 429 * FUNCTION: ApCheckForPredefinedName 430 * 431 * PARAMETERS: Op - A parse node 432 * Name - NameSeg to check 433 * 434 * RETURN: None 435 * 436 * DESCRIPTION: Check a NameSeg against the reserved list. 437 * 438 ******************************************************************************/ 439 440 UINT32 441 ApCheckForPredefinedName ( 442 ACPI_PARSE_OBJECT *Op, 443 char *Name) 444 { 445 UINT32 i; 446 const ACPI_PREDEFINED_INFO *ThisName; 447 448 449 if (Name[0] == 0) 450 { 451 AcpiOsPrintf ("Found a null name, external = %s\n", 452 Op->Asl.ExternalName); 453 } 454 455 /* All reserved names are prefixed with a single underscore */ 456 457 if (Name[0] != '_') 458 { 459 return (ACPI_NOT_RESERVED_NAME); 460 } 461 462 /* Check for a standard predefined method name */ 463 464 ThisName = AcpiGbl_PredefinedMethods; 465 for (i = 0; ThisName->Info.Name[0]; i++) 466 { 467 if (ACPI_COMPARE_NAME (Name, ThisName->Info.Name)) 468 { 469 /* Return index into predefined array */ 470 return (i); 471 } 472 473 ThisName++; /* Does not account for extra package data, but is OK */ 474 } 475 476 /* Check for resource names and predefined scope names */ 477 478 ThisName = AcpiGbl_ResourceNames; 479 while (ThisName->Info.Name[0]) 480 { 481 if (ACPI_COMPARE_NAME (Name, ThisName->Info.Name)) 482 { 483 return (ACPI_PREDEFINED_NAME); 484 } 485 486 ThisName++; 487 } 488 489 ThisName = AcpiGbl_ScopeNames; 490 while (ThisName->Info.Name[0]) 491 { 492 if (ACPI_COMPARE_NAME (Name, ThisName->Info.Name)) 493 { 494 return (ACPI_PREDEFINED_NAME); 495 } 496 497 ThisName++; 498 } 499 500 /* Check for _Lxx/_Exx/_Wxx/_Qxx/_T_x. Warning if unknown predefined name */ 501 502 return (ApCheckForSpecialName (Op, Name)); 503 } 504 505 506 /******************************************************************************* 507 * 508 * FUNCTION: ApCheckForSpecialName 509 * 510 * PARAMETERS: Op - A parse node 511 * Name - NameSeg to check 512 * 513 * RETURN: None 514 * 515 * DESCRIPTION: Check for the "special" predefined names - 516 * _Lxx, _Exx, _Qxx, _Wxx, and _T_x 517 * 518 ******************************************************************************/ 519 520 static UINT32 521 ApCheckForSpecialName ( 522 ACPI_PARSE_OBJECT *Op, 523 char *Name) 524 { 525 526 /* 527 * Check for the "special" predefined names. We already know that the 528 * first character is an underscore. 529 * GPE: _Lxx 530 * GPE: _Exx 531 * GPE: _Wxx 532 * EC: _Qxx 533 */ 534 if ((Name[1] == 'L') || 535 (Name[1] == 'E') || 536 (Name[1] == 'W') || 537 (Name[1] == 'Q')) 538 { 539 /* The next two characters must be hex digits */ 540 541 if ((isxdigit ((int) Name[2])) && 542 (isxdigit ((int) Name[3]))) 543 { 544 return (ACPI_EVENT_RESERVED_NAME); 545 } 546 } 547 548 /* Check for the names reserved for the compiler itself: _T_x */ 549 550 else if ((Op->Asl.ExternalName[1] == 'T') && 551 (Op->Asl.ExternalName[2] == '_')) 552 { 553 /* Ignore if actually emitted by the compiler */ 554 555 if (Op->Asl.CompileFlags & NODE_COMPILER_EMITTED) 556 { 557 return (ACPI_NOT_RESERVED_NAME); 558 } 559 560 /* 561 * Was not actually emitted by the compiler. This is a special case, 562 * however. If the ASL code being compiled was the result of a 563 * dissasembly, it may possibly contain valid compiler-emitted names 564 * of the form "_T_x". We don't want to issue an error or even a 565 * warning and force the user to manually change the names. So, we 566 * will issue a remark instead. 567 */ 568 AslError (ASL_REMARK, ASL_MSG_COMPILER_RESERVED, Op, Op->Asl.ExternalName); 569 return (ACPI_COMPILER_RESERVED_NAME); 570 } 571 572 /* 573 * The name didn't match any of the known predefined names. Flag it as a 574 * warning, since the entire namespace starting with an underscore is 575 * reserved by the ACPI spec. 576 */ 577 AslError (ASL_WARNING, ASL_MSG_UNKNOWN_RESERVED_NAME, Op, 578 Op->Asl.ExternalName); 579 580 return (ACPI_NOT_RESERVED_NAME); 581 } 582 583 584 /******************************************************************************* 585 * 586 * FUNCTION: ApCheckObjectType 587 * 588 * PARAMETERS: PredefinedName - Name of the predefined object we are checking 589 * Op - Current parse node 590 * ExpectedBtypes - Bitmap of expected return type(s) 591 * PackageIndex - Index of object within parent package (if 592 * applicable - ACPI_NOT_PACKAGE_ELEMENT 593 * otherwise) 594 * 595 * RETURN: None 596 * 597 * DESCRIPTION: Check if the object type is one of the types that is expected 598 * by the predefined name. Only a limited number of object types 599 * can be returned by the predefined names. 600 * 601 ******************************************************************************/ 602 603 ACPI_STATUS 604 ApCheckObjectType ( 605 const char *PredefinedName, 606 ACPI_PARSE_OBJECT *Op, 607 UINT32 ExpectedBtypes, 608 UINT32 PackageIndex) 609 { 610 UINT32 ReturnBtype; 611 char *TypeName; 612 613 614 if (!Op) 615 { 616 return (AE_TYPE); 617 } 618 619 /* Map the parse opcode to a bitmapped return type (RTYPE) */ 620 621 switch (Op->Asl.ParseOpcode) 622 { 623 case PARSEOP_ZERO: 624 case PARSEOP_ONE: 625 case PARSEOP_ONES: 626 case PARSEOP_INTEGER: 627 628 ReturnBtype = ACPI_RTYPE_INTEGER; 629 TypeName = "Integer"; 630 break; 631 632 case PARSEOP_STRING_LITERAL: 633 634 ReturnBtype = ACPI_RTYPE_STRING; 635 TypeName = "String"; 636 break; 637 638 case PARSEOP_BUFFER: 639 640 ReturnBtype = ACPI_RTYPE_BUFFER; 641 TypeName = "Buffer"; 642 break; 643 644 case PARSEOP_PACKAGE: 645 case PARSEOP_VAR_PACKAGE: 646 647 ReturnBtype = ACPI_RTYPE_PACKAGE; 648 TypeName = "Package"; 649 break; 650 651 case PARSEOP_NAMESEG: 652 case PARSEOP_NAMESTRING: 653 /* 654 * Ignore any named references within a package object. 655 * 656 * For Package objects, references are allowed instead of any of the 657 * standard data types (Integer/String/Buffer/Package). These 658 * references are resolved at runtime. NAMESEG and NAMESTRING are 659 * impossible to typecheck at compile time because the type of 660 * any named object can be changed at runtime (for example, 661 * CopyObject will change the type of the target object). 662 */ 663 if (PackageIndex != ACPI_NOT_PACKAGE_ELEMENT) 664 { 665 return (AE_OK); 666 } 667 668 ReturnBtype = ACPI_RTYPE_REFERENCE; 669 TypeName = "Reference"; 670 break; 671 672 default: 673 674 /* Not one of the supported object types */ 675 676 TypeName = UtGetOpName (Op->Asl.ParseOpcode); 677 goto TypeErrorExit; 678 } 679 680 /* Exit if the object is one of the expected types */ 681 682 if (ReturnBtype & ExpectedBtypes) 683 { 684 return (AE_OK); 685 } 686 687 688 TypeErrorExit: 689 690 /* Format the expected types and emit an error message */ 691 692 AcpiUtGetExpectedReturnTypes (StringBuffer, ExpectedBtypes); 693 694 if (PackageIndex == ACPI_NOT_PACKAGE_ELEMENT) 695 { 696 sprintf (MsgBuffer, "%4.4s: found %s, %s required", 697 PredefinedName, TypeName, StringBuffer); 698 } 699 else 700 { 701 sprintf (MsgBuffer, "%4.4s: found %s at index %u, %s required", 702 PredefinedName, TypeName, PackageIndex, StringBuffer); 703 } 704 705 AslError (ASL_ERROR, ASL_MSG_RESERVED_OPERAND_TYPE, Op, MsgBuffer); 706 return (AE_TYPE); 707 } 708 709 710 /******************************************************************************* 711 * 712 * FUNCTION: ApDisplayReservedNames 713 * 714 * PARAMETERS: None 715 * 716 * RETURN: None 717 * 718 * DESCRIPTION: Dump information about the ACPI predefined names and predefined 719 * resource descriptor names. 720 * 721 ******************************************************************************/ 722 723 void 724 ApDisplayReservedNames ( 725 void) 726 { 727 const ACPI_PREDEFINED_INFO *ThisName; 728 UINT32 Count; 729 UINT32 NumTypes; 730 731 732 /* 733 * Predefined names/methods 734 */ 735 printf ("\nPredefined Name Information\n\n"); 736 737 Count = 0; 738 ThisName = AcpiGbl_PredefinedMethods; 739 while (ThisName->Info.Name[0]) 740 { 741 AcpiUtDisplayPredefinedMethod (MsgBuffer, ThisName, FALSE); 742 Count++; 743 ThisName = AcpiUtGetNextPredefinedMethod (ThisName); 744 } 745 746 printf ("%u Predefined Names are recognized\n", Count); 747 748 /* 749 * Resource Descriptor names 750 */ 751 printf ("\nPredefined Names for Resource Descriptor Fields\n\n"); 752 753 Count = 0; 754 ThisName = AcpiGbl_ResourceNames; 755 while (ThisName->Info.Name[0]) 756 { 757 NumTypes = AcpiUtGetResourceBitWidth (MsgBuffer, 758 ThisName->Info.ArgumentList); 759 760 printf ("%4.4s Field is %s bits wide%s\n", 761 ThisName->Info.Name, MsgBuffer, 762 (NumTypes > 1) ? " (depending on descriptor type)" : ""); 763 764 Count++; 765 ThisName++; 766 } 767 768 printf ("%u Resource Descriptor Field Names are recognized\n", Count); 769 770 /* 771 * Predefined scope names 772 */ 773 printf ("\nPredefined Scope/Device Names (automatically created at root)\n\n"); 774 775 ThisName = AcpiGbl_ScopeNames; 776 while (ThisName->Info.Name[0]) 777 { 778 printf ("%4.4s Scope/Device\n", ThisName->Info.Name); 779 ThisName++; 780 } 781 } 782