1 /*******************************************************************************
   2  *
   3  * Module Name: dmresrcs.c - "Small" Resource Descriptor disassembly
   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 
  45 #include "acpi.h"
  46 #include "accommon.h"
  47 #include "acdisasm.h"
  48 
  49 
  50 #ifdef ACPI_DISASSEMBLER
  51 
  52 #define _COMPONENT          ACPI_CA_DEBUGGER
  53         ACPI_MODULE_NAME    ("dbresrcs")
  54 
  55 
  56 /*******************************************************************************
  57  *
  58  * FUNCTION:    AcpiDmIrqDescriptor
  59  *
  60  * PARAMETERS:  Resource            - Pointer to the resource descriptor
  61  *              Length              - Length of the descriptor in bytes
  62  *              Level               - Current source code indentation level
  63  *
  64  * RETURN:      None
  65  *
  66  * DESCRIPTION: Decode a IRQ descriptor, either Irq() or IrqNoFlags()
  67  *
  68  ******************************************************************************/
  69 
  70 void
  71 AcpiDmIrqDescriptor (
  72     AML_RESOURCE            *Resource,
  73     UINT32                  Length,
  74     UINT32                  Level)
  75 {
  76 
  77     AcpiDmIndent (Level);
  78     AcpiOsPrintf ("%s (",
  79         AcpiGbl_IrqDecode [ACPI_GET_1BIT_FLAG (Length)]);
  80 
  81     /* Decode flags byte if present */
  82 
  83     if (Length & 1)
  84     {
  85         AcpiOsPrintf ("%s, %s, %s, ",
  86             AcpiGbl_HeDecode [ACPI_GET_1BIT_FLAG (Resource->Irq.Flags)],
  87             AcpiGbl_LlDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->Irq.Flags, 3)],
  88             AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Irq.Flags, 4)]);
  89     }
  90 
  91     /* Insert a descriptor name */
  92 
  93     AcpiDmDescriptorName ();
  94     AcpiOsPrintf (")\n");
  95 
  96     AcpiDmIndent (Level + 1);
  97     AcpiDmBitList (Resource->Irq.IrqMask);
  98 }
  99 
 100 
 101 /*******************************************************************************
 102  *
 103  * FUNCTION:    AcpiDmDmaDescriptor
 104  *
 105  * PARAMETERS:  Resource            - Pointer to the resource descriptor
 106  *              Length              - Length of the descriptor in bytes
 107  *              Level               - Current source code indentation level
 108  *
 109  * RETURN:      None
 110  *
 111  * DESCRIPTION: Decode a DMA descriptor
 112  *
 113  ******************************************************************************/
 114 
 115 void
 116 AcpiDmDmaDescriptor (
 117     AML_RESOURCE            *Resource,
 118     UINT32                  Length,
 119     UINT32                  Level)
 120 {
 121 
 122     AcpiDmIndent (Level);
 123     AcpiOsPrintf ("DMA (%s, %s, %s, ",
 124         AcpiGbl_TypDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Dma.Flags, 5)],
 125         AcpiGbl_BmDecode  [ACPI_EXTRACT_1BIT_FLAG (Resource->Dma.Flags, 2)],
 126         AcpiGbl_SizDecode [ACPI_GET_2BIT_FLAG (Resource->Dma.Flags)]);
 127 
 128     /* Insert a descriptor name */
 129 
 130     AcpiDmDescriptorName ();
 131     AcpiOsPrintf (")\n");
 132 
 133     AcpiDmIndent (Level + 1);
 134     AcpiDmBitList (Resource->Dma.DmaChannelMask);
 135 }
 136 
 137 
 138 /*******************************************************************************
 139  *
 140  * FUNCTION:    AcpiDmFixedDmaDescriptor
 141  *
 142  * PARAMETERS:  Resource            - Pointer to the resource descriptor
 143  *              Length              - Length of the descriptor in bytes
 144  *              Level               - Current source code indentation level
 145  *
 146  * RETURN:      None
 147  *
 148  * DESCRIPTION: Decode a FixedDMA descriptor
 149  *
 150  ******************************************************************************/
 151 
 152 void
 153 AcpiDmFixedDmaDescriptor (
 154     AML_RESOURCE            *Resource,
 155     UINT32                  Length,
 156     UINT32                  Level)
 157 {
 158 
 159     AcpiDmIndent (Level);
 160     AcpiOsPrintf ("FixedDMA (0x%4.4X, 0x%4.4X, ",
 161         Resource->FixedDma.RequestLines,
 162         Resource->FixedDma.Channels);
 163 
 164     if (Resource->FixedDma.Width <= 5)
 165     {
 166         AcpiOsPrintf ("%s, ",
 167             AcpiGbl_DtsDecode [Resource->FixedDma.Width]);
 168     }
 169     else
 170     {
 171         AcpiOsPrintf ("%X /* INVALID DMA WIDTH */, ", Resource->FixedDma.Width);
 172     }
 173 
 174     /* Insert a descriptor name */
 175 
 176     AcpiDmDescriptorName ();
 177     AcpiOsPrintf (")\n");
 178 }
 179 
 180 
 181 /*******************************************************************************
 182  *
 183  * FUNCTION:    AcpiDmIoDescriptor
 184  *
 185  * PARAMETERS:  Resource            - Pointer to the resource descriptor
 186  *              Length              - Length of the descriptor in bytes
 187  *              Level               - Current source code indentation level
 188  *
 189  * RETURN:      None
 190  *
 191  * DESCRIPTION: Decode an IO descriptor
 192  *
 193  ******************************************************************************/
 194 
 195 void
 196 AcpiDmIoDescriptor (
 197     AML_RESOURCE            *Resource,
 198     UINT32                  Length,
 199     UINT32                  Level)
 200 {
 201 
 202     AcpiDmIndent (Level);
 203     AcpiOsPrintf ("IO (%s,\n",
 204         AcpiGbl_IoDecode [ACPI_GET_1BIT_FLAG (Resource->Io.Flags)]);
 205 
 206     AcpiDmIndent (Level + 1);
 207     AcpiDmDumpInteger16 (Resource->Io.Minimum, "Range Minimum");
 208 
 209     AcpiDmIndent (Level + 1);
 210     AcpiDmDumpInteger16 (Resource->Io.Maximum, "Range Maximum");
 211 
 212     AcpiDmIndent (Level + 1);
 213     AcpiDmDumpInteger8 (Resource->Io.Alignment, "Alignment");
 214 
 215     AcpiDmIndent (Level + 1);
 216     AcpiDmDumpInteger8 (Resource->Io.AddressLength, "Length");
 217 
 218     /* Insert a descriptor name */
 219 
 220     AcpiDmIndent (Level + 1);
 221     AcpiDmDescriptorName ();
 222     AcpiOsPrintf (")\n");
 223 }
 224 
 225 
 226 /*******************************************************************************
 227  *
 228  * FUNCTION:    AcpiDmFixedIoDescriptor
 229  *
 230  * PARAMETERS:  Resource            - Pointer to the resource descriptor
 231  *              Length              - Length of the descriptor in bytes
 232  *              Level               - Current source code indentation level
 233  *
 234  * RETURN:      None
 235  *
 236  * DESCRIPTION: Decode a Fixed IO descriptor
 237  *
 238  ******************************************************************************/
 239 
 240 void
 241 AcpiDmFixedIoDescriptor (
 242     AML_RESOURCE            *Resource,
 243     UINT32                  Length,
 244     UINT32                  Level)
 245 {
 246 
 247     AcpiDmIndent (Level);
 248     AcpiOsPrintf ("FixedIO (\n");
 249 
 250     AcpiDmIndent (Level + 1);
 251     AcpiDmDumpInteger16 (Resource->FixedIo.Address, "Address");
 252 
 253     AcpiDmIndent (Level + 1);
 254     AcpiDmDumpInteger8 (Resource->FixedIo.AddressLength, "Length");
 255 
 256     /* Insert a descriptor name */
 257 
 258     AcpiDmIndent (Level + 1);
 259     AcpiDmDescriptorName ();
 260     AcpiOsPrintf (")\n");
 261 }
 262 
 263 
 264 /*******************************************************************************
 265  *
 266  * FUNCTION:    AcpiDmStartDependentDescriptor
 267  *
 268  * PARAMETERS:  Resource            - Pointer to the resource descriptor
 269  *              Length              - Length of the descriptor in bytes
 270  *              Level               - Current source code indentation level
 271  *
 272  * RETURN:      None
 273  *
 274  * DESCRIPTION: Decode a Start Dependendent functions descriptor
 275  *
 276  ******************************************************************************/
 277 
 278 void
 279 AcpiDmStartDependentDescriptor (
 280     AML_RESOURCE            *Resource,
 281     UINT32                  Length,
 282     UINT32                  Level)
 283 {
 284 
 285     AcpiDmIndent (Level);
 286 
 287     if (Length & 1)
 288     {
 289         AcpiOsPrintf ("StartDependentFn (0x%2.2X, 0x%2.2X)\n",
 290             (UINT32) ACPI_GET_2BIT_FLAG (Resource->StartDpf.Flags),
 291             (UINT32) ACPI_EXTRACT_2BIT_FLAG (Resource->StartDpf.Flags, 2));
 292     }
 293     else
 294     {
 295         AcpiOsPrintf ("StartDependentFnNoPri ()\n");
 296     }
 297 
 298     AcpiDmIndent (Level);
 299     AcpiOsPrintf ("{\n");
 300 }
 301 
 302 
 303 /*******************************************************************************
 304  *
 305  * FUNCTION:    AcpiDmEndDependentDescriptor
 306  *
 307  * PARAMETERS:  Resource            - Pointer to the resource descriptor
 308  *              Length              - Length of the descriptor in bytes
 309  *              Level               - Current source code indentation level
 310  *
 311  * RETURN:      None
 312  *
 313  * DESCRIPTION: Decode an End Dependent functions descriptor
 314  *
 315  ******************************************************************************/
 316 
 317 void
 318 AcpiDmEndDependentDescriptor (
 319     AML_RESOURCE            *Resource,
 320     UINT32                  Length,
 321     UINT32                  Level)
 322 {
 323 
 324     AcpiDmIndent (Level);
 325     AcpiOsPrintf ("}\n");
 326     AcpiDmIndent (Level);
 327     AcpiOsPrintf ("EndDependentFn ()\n");
 328 }
 329 
 330 
 331 /*******************************************************************************
 332  *
 333  * FUNCTION:    AcpiDmVendorSmallDescriptor
 334  *
 335  * PARAMETERS:  Resource            - Pointer to the resource descriptor
 336  *              Length              - Length of the descriptor in bytes
 337  *              Level               - Current source code indentation level
 338  *
 339  * RETURN:      None
 340  *
 341  * DESCRIPTION: Decode a Vendor Small Descriptor
 342  *
 343  ******************************************************************************/
 344 
 345 void
 346 AcpiDmVendorSmallDescriptor (
 347     AML_RESOURCE            *Resource,
 348     UINT32                  Length,
 349     UINT32                  Level)
 350 {
 351 
 352     AcpiDmVendorCommon ("Short",
 353         ACPI_ADD_PTR (UINT8, Resource, sizeof (AML_RESOURCE_SMALL_HEADER)),
 354         Length, Level);
 355 }
 356 
 357 #endif