Home | History | Annotate | Line # | Download | only in disassembler
dmresrcs.c revision 1.1.1.3
      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
    358