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