1 /*******************************************************************************
   2  *
   3  * Module Name: dmresrcs.c - "Small" Resource Descriptor disassembly
   4  *
   5  ******************************************************************************/
   6 
   7 /*
   8  * Copyright (C) 2000 - 2011, 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 [Length & 1]);
  80 
  81     /* Decode flags byte if present */
  82 
  83     if (Length & 1)
  84     {
  85         AcpiOsPrintf ("%s, %s, %s, ",
  86             AcpiGbl_HeDecode [Resource->Irq.Flags & 1],
  87             AcpiGbl_LlDecode [(Resource->Irq.Flags >> 3) & 1],
  88             AcpiGbl_ShrDecode [(Resource->Irq.Flags >> 4) & 1]);
  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 [(Resource->Dma.Flags >> 5) & 3],
 125             AcpiGbl_BmDecode  [(Resource->Dma.Flags >> 2) & 1],
 126             AcpiGbl_SizDecode [(Resource->Dma.Flags >> 0) & 3]);
 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:    AcpiDmIoDescriptor
 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 an IO descriptor
 149  *
 150  ******************************************************************************/
 151 
 152 void
 153 AcpiDmIoDescriptor (
 154     AML_RESOURCE            *Resource,
 155     UINT32                  Length,
 156     UINT32                  Level)
 157 {
 158 
 159     AcpiDmIndent (Level);
 160     AcpiOsPrintf ("IO (%s,\n",
 161         AcpiGbl_IoDecode [(Resource->Io.Flags & 1)]);
 162 
 163     AcpiDmIndent (Level + 1);
 164     AcpiDmDumpInteger16 (Resource->Io.Minimum, "Range Minimum");
 165 
 166     AcpiDmIndent (Level + 1);
 167     AcpiDmDumpInteger16 (Resource->Io.Maximum, "Range Maximum");
 168 
 169     AcpiDmIndent (Level + 1);
 170     AcpiDmDumpInteger8 (Resource->Io.Alignment, "Alignment");
 171 
 172     AcpiDmIndent (Level + 1);
 173     AcpiDmDumpInteger8 (Resource->Io.AddressLength, "Length");
 174 
 175     /* Insert a descriptor name */
 176 
 177     AcpiDmIndent (Level + 1);
 178     AcpiDmDescriptorName ();
 179     AcpiOsPrintf (")\n");
 180 }
 181 
 182 
 183 /*******************************************************************************
 184  *
 185  * FUNCTION:    AcpiDmFixedIoDescriptor
 186  *
 187  * PARAMETERS:  Resource            - Pointer to the resource descriptor
 188  *              Length              - Length of the descriptor in bytes
 189  *              Level               - Current source code indentation level
 190  *
 191  * RETURN:      None
 192  *
 193  * DESCRIPTION: Decode a Fixed IO descriptor
 194  *
 195  ******************************************************************************/
 196 
 197 void
 198 AcpiDmFixedIoDescriptor (
 199     AML_RESOURCE            *Resource,
 200     UINT32                  Length,
 201     UINT32                  Level)
 202 {
 203 
 204     AcpiDmIndent (Level);
 205     AcpiOsPrintf ("FixedIO (\n");
 206 
 207     AcpiDmIndent (Level + 1);
 208     AcpiDmDumpInteger16 (Resource->FixedIo.Address, "Address");
 209 
 210     AcpiDmIndent (Level + 1);
 211     AcpiDmDumpInteger8 (Resource->FixedIo.AddressLength, "Length");
 212 
 213     /* Insert a descriptor name */
 214 
 215     AcpiDmIndent (Level + 1);
 216     AcpiDmDescriptorName ();
 217     AcpiOsPrintf (")\n");
 218 }
 219 
 220 
 221 /*******************************************************************************
 222  *
 223  * FUNCTION:    AcpiDmStartDependentDescriptor
 224  *
 225  * PARAMETERS:  Resource            - Pointer to the resource descriptor
 226  *              Length              - Length of the descriptor in bytes
 227  *              Level               - Current source code indentation level
 228  *
 229  * RETURN:      None
 230  *
 231  * DESCRIPTION: Decode a Start Dependendent functions descriptor
 232  *
 233  ******************************************************************************/
 234 
 235 void
 236 AcpiDmStartDependentDescriptor (
 237     AML_RESOURCE            *Resource,
 238     UINT32                  Length,
 239     UINT32                  Level)
 240 {
 241 
 242     AcpiDmIndent (Level);
 243 
 244     if (Length & 1)
 245     {
 246         AcpiOsPrintf ("StartDependentFn (0x%2.2X, 0x%2.2X)\n",
 247             (UINT32) Resource->StartDpf.Flags & 3,
 248             (UINT32) (Resource->StartDpf.Flags >> 2) & 3);
 249     }
 250     else
 251     {
 252         AcpiOsPrintf ("StartDependentFnNoPri ()\n");
 253     }
 254 
 255     AcpiDmIndent (Level);
 256     AcpiOsPrintf ("{\n");
 257 }
 258 
 259 
 260 /*******************************************************************************
 261  *
 262  * FUNCTION:    AcpiDmEndDependentDescriptor
 263  *
 264  * PARAMETERS:  Resource            - Pointer to the resource descriptor
 265  *              Length              - Length of the descriptor in bytes
 266  *              Level               - Current source code indentation level
 267  *
 268  * RETURN:      None
 269  *
 270  * DESCRIPTION: Decode an End Dependent functions descriptor
 271  *
 272  ******************************************************************************/
 273 
 274 void
 275 AcpiDmEndDependentDescriptor (
 276     AML_RESOURCE            *Resource,
 277     UINT32                  Length,
 278     UINT32                  Level)
 279 {
 280 
 281     AcpiDmIndent (Level);
 282     AcpiOsPrintf ("}\n");
 283     AcpiDmIndent (Level);
 284     AcpiOsPrintf ("EndDependentFn ()\n");
 285 }
 286 
 287 
 288 /*******************************************************************************
 289  *
 290  * FUNCTION:    AcpiDmVendorSmallDescriptor
 291  *
 292  * PARAMETERS:  Resource            - Pointer to the resource descriptor
 293  *              Length              - Length of the descriptor in bytes
 294  *              Level               - Current source code indentation level
 295  *
 296  * RETURN:      None
 297  *
 298  * DESCRIPTION: Decode a Vendor Small Descriptor
 299  *
 300  ******************************************************************************/
 301 
 302 void
 303 AcpiDmVendorSmallDescriptor (
 304     AML_RESOURCE            *Resource,
 305     UINT32                  Length,
 306     UINT32                  Level)
 307 {
 308 
 309     AcpiDmVendorCommon ("Short",
 310         ACPI_ADD_PTR (UINT8, Resource, sizeof (AML_RESOURCE_SMALL_HEADER)),
 311         Length, Level);
 312 }
 313 
 314 #endif
 315