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