Print this page
acpica-unix2-20130823
PANKOVs restructure

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/intel/io/acpica/disassembler/dmresrc.c
          +++ new/usr/src/common/acpica/components/disassembler/dmresrc.c
   1    1  /*******************************************************************************
   2    2   *
   3    3   * Module Name: dmresrc.c - Resource Descriptor disassembly
   4    4   *
   5    5   ******************************************************************************/
   6    6  
   7    7  /*
   8      - * Copyright (C) 2000 - 2011, Intel Corp.
        8 + * Copyright (C) 2000 - 2013, Intel Corp.
   9    9   * All rights reserved.
  10   10   *
  11   11   * Redistribution and use in source and binary forms, with or without
  12   12   * modification, are permitted provided that the following conditions
  13   13   * are met:
  14   14   * 1. Redistributions of source code must retain the above copyright
  15   15   *    notice, this list of conditions, and the following disclaimer,
  16   16   *    without modification.
  17   17   * 2. Redistributions in binary form must reproduce at minimum a disclaimer
  18   18   *    substantially similar to the "NO WARRANTY" disclaimer below
↓ open down ↓ 29 lines elided ↑ open up ↑
  48   48  #include "acdisasm.h"
  49   49  
  50   50  #ifdef ACPI_DISASSEMBLER
  51   51  
  52   52  #define _COMPONENT          ACPI_CA_DEBUGGER
  53   53          ACPI_MODULE_NAME    ("dbresrc")
  54   54  
  55   55  
  56   56  /* Dispatch tables for Resource disassembly functions */
  57   57  
  58      -typedef
  59      -void (*ACPI_RESOURCE_HANDLER) (
  60      -    AML_RESOURCE            *Resource,
  61      -    UINT32                  Length,
  62      -    UINT32                  Level);
  63      -
  64   58  static ACPI_RESOURCE_HANDLER    AcpiGbl_DmResourceDispatch [] =
  65   59  {
  66   60      /* Small descriptors */
  67   61  
  68   62      NULL,                           /* 0x00, Reserved */
  69   63      NULL,                           /* 0x01, Reserved */
  70   64      NULL,                           /* 0x02, Reserved */
  71   65      NULL,                           /* 0x03, Reserved */
  72   66      AcpiDmIrqDescriptor,            /* 0x04, ACPI_RESOURCE_NAME_IRQ_FORMAT */
  73   67      AcpiDmDmaDescriptor,            /* 0x05, ACPI_RESOURCE_NAME_DMA_FORMAT */
  74   68      AcpiDmStartDependentDescriptor, /* 0x06, ACPI_RESOURCE_NAME_START_DEPENDENT */
  75   69      AcpiDmEndDependentDescriptor,   /* 0x07, ACPI_RESOURCE_NAME_END_DEPENDENT */
  76   70      AcpiDmIoDescriptor,             /* 0x08, ACPI_RESOURCE_NAME_IO_PORT */
  77   71      AcpiDmFixedIoDescriptor,        /* 0x09, ACPI_RESOURCE_NAME_FIXED_IO_PORT */
  78      -    NULL,                           /* 0x0A, Reserved */
       72 +    AcpiDmFixedDmaDescriptor,       /* 0x0A, ACPI_RESOURCE_NAME_FIXED_DMA */
  79   73      NULL,                           /* 0x0B, Reserved */
  80   74      NULL,                           /* 0x0C, Reserved */
  81   75      NULL,                           /* 0x0D, Reserved */
  82   76      AcpiDmVendorSmallDescriptor,    /* 0x0E, ACPI_RESOURCE_NAME_SMALL_VENDOR */
  83   77      NULL,                           /* 0x0F, ACPI_RESOURCE_NAME_END_TAG (not used) */
  84   78  
  85   79      /* Large descriptors */
  86   80  
  87   81      NULL,                           /* 0x00, Reserved */
  88   82      AcpiDmMemory24Descriptor,       /* 0x01, ACPI_RESOURCE_NAME_MEMORY_24 */
  89   83      AcpiDmGenericRegisterDescriptor,/* 0x02, ACPI_RESOURCE_NAME_GENERIC_REGISTER */
  90   84      NULL,                           /* 0x03, Reserved */
  91   85      AcpiDmVendorLargeDescriptor,    /* 0x04, ACPI_RESOURCE_NAME_LARGE_VENDOR */
  92   86      AcpiDmMemory32Descriptor,       /* 0x05, ACPI_RESOURCE_NAME_MEMORY_32 */
  93   87      AcpiDmFixedMemory32Descriptor,  /* 0x06, ACPI_RESOURCE_NAME_FIXED_MEMORY_32 */
  94   88      AcpiDmDwordDescriptor,          /* 0x07, ACPI_RESOURCE_NAME_DWORD_ADDRESS_SPACE */
  95   89      AcpiDmWordDescriptor,           /* 0x08, ACPI_RESOURCE_NAME_WORD_ADDRESS_SPACE */
  96   90      AcpiDmInterruptDescriptor,      /* 0x09, ACPI_RESOURCE_NAME_EXTENDED_XRUPT */
  97   91      AcpiDmQwordDescriptor,          /* 0x0A, ACPI_RESOURCE_NAME_QWORD_ADDRESS_SPACE */
  98      -    AcpiDmExtendedDescriptor        /* 0x0B, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS_SPACE */
       92 +    AcpiDmExtendedDescriptor,       /* 0x0B, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS_SPACE */
       93 +    AcpiDmGpioDescriptor,           /* 0x0C, ACPI_RESOURCE_NAME_GPIO */
       94 +    NULL,                           /* 0x0D, Reserved */
       95 +    AcpiDmSerialBusDescriptor       /* 0x0E, ACPI_RESOURCE_NAME_SERIAL_BUS */
  99   96  };
 100   97  
 101   98  
 102   99  /* Only used for single-threaded applications */
 103  100  /* TBD: remove when name is passed as parameter to the dump functions */
 104  101  
 105  102  static UINT32               ResourceName;
 106  103  
 107  104  
 108  105  /*******************************************************************************
↓ open down ↓ 166 lines elided ↑ open up ↑
 275  272      {
 276  273          Aml = &ByteData[CurrentByteOffset];
 277  274  
 278  275          /* Get the descriptor type and length */
 279  276  
 280  277          ResourceType = AcpiUtGetResourceType (Aml);
 281  278          ResourceLength = AcpiUtGetResourceLength (Aml);
 282  279  
 283  280          /* Validate the Resource Type and Resource Length */
 284  281  
 285      -        Status = AcpiUtValidateResource (Aml, &ResourceIndex);
      282 +        Status = AcpiUtValidateResource (NULL, Aml, &ResourceIndex);
 286  283          if (ACPI_FAILURE (Status))
 287  284          {
 288  285              AcpiOsPrintf ("/*** Could not validate Resource, type (%X) %s***/\n",
 289  286                  ResourceType, AcpiFormatException (Status));
 290  287              return;
 291  288          }
 292  289  
 293  290          /* Point to next descriptor */
 294  291  
 295  292          CurrentByteOffset += AcpiUtGetDescriptorLength (Aml);
↓ open down ↓ 37 lines elided ↑ open up ↑
 333  330  
 334  331                  AcpiDmEndDependentDescriptor (Aml, ResourceLength, Level);
 335  332  
 336  333                  AcpiDmIndent (Level);
 337  334                  AcpiOsPrintf (
 338  335                      "/*** Disassembler: inserted missing EndDependentFn () ***/\n");
 339  336              }
 340  337              return;
 341  338  
 342  339          default:
      340 +
 343  341              break;
 344  342          }
 345  343  
 346  344          /* Disassemble the resource structure */
 347  345  
 348  346          if (Node)
 349  347          {
 350  348              ResourceName = Node->Name.Integer;
 351  349              Node = Node->Peer;
 352  350          }
↓ open down ↓ 9 lines elided ↑ open up ↑
 362  360              Level++;
 363  361          }
 364  362      }
 365  363  }
 366  364  
 367  365  
 368  366  /*******************************************************************************
 369  367   *
 370  368   * FUNCTION:    AcpiDmIsResourceTemplate
 371  369   *
 372      - * PARAMETERS:  Op          - Buffer Op to be examined
      370 + * PARAMETERS:  WalkState           - Current walk info
      371 + *              Op                  - Buffer Op to be examined
 373  372   *
 374  373   * RETURN:      Status. AE_OK if valid template
 375  374   *
 376  375   * DESCRIPTION: Walk a byte list to determine if it consists of a valid set
 377      - *              of resource descriptors.  Nothing is output.
      376 + *              of resource descriptors. Nothing is output.
 378  377   *
 379  378   ******************************************************************************/
 380  379  
 381  380  ACPI_STATUS
 382  381  AcpiDmIsResourceTemplate (
      382 +    ACPI_WALK_STATE         *WalkState,
 383  383      ACPI_PARSE_OBJECT       *Op)
 384  384  {
 385  385      ACPI_STATUS             Status;
 386  386      ACPI_PARSE_OBJECT       *NextOp;
 387  387      UINT8                   *Aml;
 388  388      UINT8                   *EndAml;
 389  389      ACPI_SIZE               Length;
 390  390  
 391  391  
 392  392      /* This op must be a buffer */
 393  393  
 394  394      if (Op->Common.AmlOpcode != AML_BUFFER_OP)
 395  395      {
 396  396          return (AE_TYPE);
 397  397      }
 398  398  
 399  399      /* Get the ByteData list and length */
 400  400  
 401  401      NextOp = Op->Common.Value.Arg;
      402 +    if (!NextOp)
      403 +    {
      404 +        AcpiOsPrintf ("NULL byte list in buffer\n");
      405 +        return (AE_TYPE);
      406 +    }
      407 +
 402  408      NextOp = NextOp->Common.Next;
 403  409      if (!NextOp)
 404  410      {
 405  411          return (AE_TYPE);
 406  412      }
 407  413  
 408  414      Aml = NextOp->Named.Data;
 409  415      Length = (ACPI_SIZE) NextOp->Common.Value.Integer;
 410  416  
 411  417      /* Walk the byte list, abort on any invalid descriptor type or length */
 412  418  
 413      -    Status = AcpiUtWalkAmlResources (Aml, Length, NULL, &EndAml);
      419 +    Status = AcpiUtWalkAmlResources (WalkState, Aml, Length,
      420 +        NULL, ACPI_CAST_INDIRECT_PTR (void, &EndAml));
 414  421      if (ACPI_FAILURE (Status))
 415  422      {
 416  423          return (AE_TYPE);
 417  424      }
 418  425  
 419  426      /*
 420  427       * For the resource template to be valid, one EndTag must appear
 421  428       * at the very end of the ByteList, not before. (For proper disassembly
 422  429       * of a ResourceTemplate, the buffer must not have any extra data after
 423  430       * the EndTag.)
↓ open down ↓ 14 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX