Blame source/common/dmtbdump2.c

Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * Module Name: dmtbdump2 - Dump ACPI data tables that contain no AML code
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
/*
Packit Service 1fb00e
 * Copyright (C) 2000 - 2018, Intel Corp.
Packit Service 1fb00e
 * All rights reserved.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * Redistribution and use in source and binary forms, with or without
Packit Service 1fb00e
 * modification, are permitted provided that the following conditions
Packit Service 1fb00e
 * are met:
Packit Service 1fb00e
 * 1. Redistributions of source code must retain the above copyright
Packit Service 1fb00e
 *    notice, this list of conditions, and the following disclaimer,
Packit Service 1fb00e
 *    without modification.
Packit Service 1fb00e
 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
Packit Service 1fb00e
 *    substantially similar to the "NO WARRANTY" disclaimer below
Packit Service 1fb00e
 *    ("Disclaimer") and any redistribution must be conditioned upon
Packit Service 1fb00e
 *    including a substantially similar Disclaimer requirement for further
Packit Service 1fb00e
 *    binary redistribution.
Packit Service 1fb00e
 * 3. Neither the names of the above-listed copyright holders nor the names
Packit Service 1fb00e
 *    of any contributors may be used to endorse or promote products derived
Packit Service 1fb00e
 *    from this software without specific prior written permission.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * Alternatively, this software may be distributed under the terms of the
Packit Service 1fb00e
 * GNU General Public License ("GPL") version 2 as published by the Free
Packit Service 1fb00e
 * Software Foundation.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * NO WARRANTY
Packit Service 1fb00e
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
Packit Service 1fb00e
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
Packit Service 1fb00e
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
Packit Service 1fb00e
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
Packit Service 1fb00e
 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Packit Service 1fb00e
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
Packit Service 1fb00e
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
Packit Service 1fb00e
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
Packit Service 1fb00e
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
Packit Service 1fb00e
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
Packit Service 1fb00e
 * POSSIBILITY OF SUCH DAMAGES.
Packit Service 1fb00e
 */
Packit Service 1fb00e
Packit Service 1fb00e
#include "acpi.h"
Packit Service 1fb00e
#include "accommon.h"
Packit Service 1fb00e
#include "acdisasm.h"
Packit Service 1fb00e
#include "actables.h"
Packit Service 1fb00e
Packit Service 1fb00e
/* This module used for application-level code only */
Packit Service 1fb00e
Packit Service 1fb00e
#define _COMPONENT          ACPI_CA_DISASSEMBLER
Packit Service 1fb00e
        ACPI_MODULE_NAME    ("dmtbdump2")
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    AcpiDmDumpIort
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  Table               - A IORT table
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      None
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Format the contents of a IORT
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
void
Packit Service 1fb00e
AcpiDmDumpIort (
Packit Service 1fb00e
    ACPI_TABLE_HEADER       *Table)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    ACPI_TABLE_IORT         *Iort;
Packit Service 1fb00e
    ACPI_IORT_NODE          *IortNode;
Packit Service 1fb00e
    ACPI_IORT_ITS_GROUP     *IortItsGroup = NULL;
Packit Service 1fb00e
    ACPI_IORT_SMMU          *IortSmmu = NULL;
Packit Service 1fb00e
    UINT32                  Offset;
Packit Service 1fb00e
    UINT32                  NodeOffset;
Packit Service 0129ce
    UINT16		    NodeLength;
Packit Service 1fb00e
    UINT32                  Length;
Packit Service 1fb00e
    ACPI_DMTABLE_INFO       *InfoTable;
Packit Service 1fb00e
    char                    *String;
Packit Service 1fb00e
    UINT32                  i;
Packit Service 0129ce
    UINT32		    TableLen;
Packit Service 0129ce
    UINT32		    ItsCount;
Packit Service 0129ce
    UINT32		    MappingCount;
Packit Service 0129ce
    UINT32		    CtxIntCount;
Packit Service 0129ce
    UINT32		    PmuIntCount;
Packit Service 1fb00e
Packit Service 1fb00e
    /* Main table */
Packit Service 1fb00e
Packit Service 0129ce
    ACPI_MOVE_32_TO_32(&TableLen, &Table->Length);
Packit Service 0129ce
    Status = AcpiDmDumpTable (TableLen, 0, Table, 0, AcpiDmTableInfoIort);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return;
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    Iort = ACPI_CAST_PTR (ACPI_TABLE_IORT, Table);
Packit Service 1fb00e
    Offset = sizeof (ACPI_TABLE_IORT);
Packit Service 1fb00e
Packit Service 1fb00e
    /* Dump the OptionalPadding (optional) */
Packit Service 1fb00e
Packit Service 0129ce
    ACPI_MOVE_32_TO_32(&NodeOffset, &Iort->NodeOffset);
Packit Service 0129ce
    if (NodeOffset > Offset)
Packit Service 1fb00e
    {
Packit Service 0129ce
        Status = AcpiDmDumpTable (TableLen, Offset, Table,
Packit Service 0129ce
            NodeOffset - Offset, AcpiDmTableInfoIortPad);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 0129ce
    ACPI_MOVE_32_TO_32(&Offset, &Iort->NodeOffset);
Packit Service 0129ce
    while (Offset < TableLen)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        /* Common subtable header */
Packit Service 1fb00e
Packit Service 1fb00e
        IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, Table, Offset);
Packit Service 1fb00e
        AcpiOsPrintf ("\n");
Packit Service 1fb00e
        Length = ACPI_OFFSET (ACPI_IORT_NODE, NodeData);
Packit Service 1fb00e
        Status = AcpiDmDumpTable (Table->Length, Offset,
Packit Service 1fb00e
            IortNode, Length, AcpiDmTableInfoIortHdr);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        NodeOffset = Length;
Packit Service 1fb00e
Packit Service 1fb00e
        switch (IortNode->Type)
Packit Service 1fb00e
        {
Packit Service 1fb00e
        case ACPI_IORT_NODE_ITS_GROUP:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoIort0;
Packit Service 1fb00e
            Length = ACPI_OFFSET (ACPI_IORT_ITS_GROUP, Identifiers);
Packit Service 1fb00e
            IortItsGroup = ACPI_ADD_PTR (ACPI_IORT_ITS_GROUP, IortNode, NodeOffset);
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_IORT_NODE_NAMED_COMPONENT:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoIort1;
Packit Service 1fb00e
            Length = ACPI_OFFSET (ACPI_IORT_NAMED_COMPONENT, DeviceName);
Packit Service 1fb00e
            String = ACPI_ADD_PTR (char, IortNode, NodeOffset + Length);
Packit Service 1fb00e
            Length += strlen (String) + 1;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_IORT_NODE_PCI_ROOT_COMPLEX:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoIort2;
Packit Service 0129ce
	    ACPI_MOVE_16_TO_16(&NodeLength, &IortNode->Length);
Packit Service 0129ce
            Length = NodeLength - NodeOffset;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_IORT_NODE_SMMU:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoIort3;
Packit Service 1fb00e
            Length = ACPI_OFFSET (ACPI_IORT_SMMU, Interrupts);
Packit Service 1fb00e
            IortSmmu = ACPI_ADD_PTR (ACPI_IORT_SMMU, IortNode, NodeOffset);
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_IORT_NODE_SMMU_V3:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoIort4;
Packit Service 0129ce
	    ACPI_MOVE_16_TO_16(&NodeLength, &IortNode->Length);
Packit Service 0129ce
            Length = NodeLength - NodeOffset;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_IORT_NODE_PMCG:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoIort5;
Packit Service 1fb00e
            Length = IortNode->Length - NodeOffset;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        default:
Packit Service 1fb00e
Packit Service 1fb00e
            AcpiOsPrintf ("\n**** Unknown IORT node type 0x%X\n",
Packit Service 1fb00e
                IortNode->Type);
Packit Service 1fb00e
Packit Service 1fb00e
            /* Attempt to continue */
Packit Service 1fb00e
Packit Service 0129ce
	    ACPI_MOVE_16_TO_16(&NodeLength, &IortNode->Length);
Packit Service 0129ce
            if (!NodeLength)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                AcpiOsPrintf ("Invalid zero length IORT node\n");
Packit Service 1fb00e
                return;
Packit Service 1fb00e
            }
Packit Service 1fb00e
            goto NextSubtable;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        /* Dump the node subtable header */
Packit Service 1fb00e
Packit Service 1fb00e
        AcpiOsPrintf ("\n");
Packit Service 0129ce
        Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
Packit Service 1fb00e
            ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
Packit Service 1fb00e
            Length, InfoTable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        NodeOffset += Length;
Packit Service 1fb00e
Packit Service 1fb00e
        /* Dump the node specific data */
Packit Service 1fb00e
Packit Service 1fb00e
        switch (IortNode->Type)
Packit Service 1fb00e
        {
Packit Service 1fb00e
        case ACPI_IORT_NODE_ITS_GROUP:
Packit Service 1fb00e
Packit Service 1fb00e
            /* Validate IortItsGroup to avoid compiler warnings */
Packit Service 1fb00e
Packit Service 1fb00e
            if (IortItsGroup)
Packit Service 1fb00e
            {
Packit Service 0129ce
	        ACPI_MOVE_32_TO_32(&ItsCount, &IortItsGroup->ItsCount);
Packit Service 0129ce
                for (i = 0; i < ItsCount; i++)
Packit Service 1fb00e
                {
Packit Service 0129ce
                    Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
Packit Service 1fb00e
                        ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
Packit Service 1fb00e
                        4, AcpiDmTableInfoIort0a);
Packit Service 1fb00e
                    NodeOffset += 4;
Packit Service 1fb00e
                }
Packit Service 1fb00e
            }
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_IORT_NODE_NAMED_COMPONENT:
Packit Service 1fb00e
Packit Service 1fb00e
            /* Dump the Padding (optional) */
Packit Service 1fb00e
Packit Service 0129ce
	    ACPI_MOVE_16_TO_16(&NodeLength, &IortNode->Length);
Packit Service 0129ce
            if (NodeLength > NodeOffset)
Packit Service 1fb00e
            {
Packit Service 0129ce
                Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
Packit Service 0129ce
                    Table, NodeLength - NodeOffset, AcpiDmTableInfoIort1a);
Packit Service 1fb00e
                if (ACPI_FAILURE (Status))
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    return;
Packit Service 1fb00e
                }
Packit Service 1fb00e
            }
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_IORT_NODE_SMMU:
Packit Service 1fb00e
Packit Service 1fb00e
            AcpiOsPrintf ("\n");
Packit Service 1fb00e
Packit Service 1fb00e
            /* Validate IortSmmu to avoid compiler warnings */
Packit Service 1fb00e
Packit Service 1fb00e
            if (IortSmmu)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                Length = 2 * sizeof (UINT64);
Packit Service 0129ce
                ACPI_MOVE_32_TO_32(&NodeOffset, &IortSmmu->GlobalInterruptOffset);
Packit Service 0129ce
                Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
Packit Service 1fb00e
                    ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
Packit Service 1fb00e
                    Length, AcpiDmTableInfoIort3a);
Packit Service 1fb00e
                if (ACPI_FAILURE (Status))
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    return;
Packit Service 1fb00e
                }
Packit Service 1fb00e
Packit Service 0129ce
                ACPI_MOVE_32_TO_32(&NodeOffset, &IortSmmu->ContextInterruptOffset);
Packit Service 0129ce
                ACPI_MOVE_32_TO_32(&CtxIntCount, &IortSmmu->ContextInterruptCount);
Packit Service 0129ce
                for (i = 0; i < CtxIntCount; i++)
Packit Service 1fb00e
                {
Packit Service 0129ce
                    Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
Packit Service 1fb00e
                        ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
Packit Service 1fb00e
                        8, AcpiDmTableInfoIort3b);
Packit Service 1fb00e
                    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
                    {
Packit Service 1fb00e
                        return;
Packit Service 1fb00e
                    }
Packit Service 1fb00e
Packit Service 1fb00e
                    NodeOffset += 8;
Packit Service 1fb00e
                }
Packit Service 1fb00e
Packit Service 0129ce
                ACPI_MOVE_32_TO_32(&NodeOffset, &IortSmmu->PmuInterruptOffset);
Packit Service 0129ce
                ACPI_MOVE_32_TO_32(&PmuIntCount, &IortSmmu->PmuInterruptCount);
Packit Service 0129ce
                for (i = 0; i < PmuIntCount; i++)
Packit Service 1fb00e
                {
Packit Service 0129ce
                    Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
Packit Service 1fb00e
                        ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
Packit Service 1fb00e
                        8, AcpiDmTableInfoIort3c);
Packit Service 1fb00e
                    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
                    {
Packit Service 1fb00e
                        return;
Packit Service 1fb00e
                    }
Packit Service 1fb00e
Packit Service 1fb00e
                    NodeOffset += 8;
Packit Service 1fb00e
                }
Packit Service 1fb00e
            }
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        default:
Packit Service 1fb00e
Packit Service 1fb00e
            break;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        /* Dump the ID mappings */
Packit Service 1fb00e
Packit Service 0129ce
        ACPI_MOVE_32_TO_32(&NodeOffset, &IortNode->MappingOffset);
Packit Service 0129ce
        ACPI_MOVE_32_TO_32(&MappingCount, &IortNode->MappingCount);
Packit Service 0129ce
        for (i = 0; i < MappingCount; i++)
Packit Service 1fb00e
        {
Packit Service 1fb00e
            AcpiOsPrintf ("\n");
Packit Service 1fb00e
            Length = sizeof (ACPI_IORT_ID_MAPPING);
Packit Service 0129ce
            Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
Packit Service 1fb00e
                ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
Packit Service 1fb00e
                Length, AcpiDmTableInfoIortMap);
Packit Service 1fb00e
            if (ACPI_FAILURE (Status))
Packit Service 1fb00e
            {
Packit Service 1fb00e
                return;
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 1fb00e
            NodeOffset += Length;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
NextSubtable:
Packit Service 1fb00e
        /* Point to next node subtable */
Packit Service 1fb00e
Packit Service 0129ce
	ACPI_MOVE_16_TO_16(&NodeLength, &IortNode->Length);
Packit Service 0129ce
        Offset += NodeLength;
Packit Service 0129ce
        IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeLength);
Packit Service 1fb00e
    }
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    AcpiDmDumpIvrs
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  Table               - A IVRS table
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      None
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Format the contents of a IVRS
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
static UINT8 EntrySizes[] = {4,8,16,32};
Packit Service 1fb00e
Packit Service 1fb00e
void
Packit Service 1fb00e
AcpiDmDumpIvrs (
Packit Service 1fb00e
    ACPI_TABLE_HEADER       *Table)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    UINT32                  Offset = sizeof (ACPI_TABLE_IVRS);
Packit Service 1fb00e
    UINT32                  EntryOffset;
Packit Service 1fb00e
    UINT32                  EntryLength;
Packit Service 1fb00e
    UINT32                  EntryType;
Packit Service 1fb00e
    ACPI_IVRS_DE_HEADER     *DeviceEntry;
Packit Service 1fb00e
    ACPI_IVRS_HEADER        *Subtable;
Packit Service 1fb00e
    ACPI_DMTABLE_INFO       *InfoTable;
Packit Service 0129ce
    UINT32		    Length;
Packit Service 0129ce
    UINT16		    SubLength;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* Main table */
Packit Service 1fb00e
Packit Service 0129ce
    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
Packit Service 0129ce
    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoIvrs);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return;
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    /* Subtables */
Packit Service 1fb00e
Packit Service 1fb00e
    Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset);
Packit Service 0129ce
    while (Offset < Length)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        /* Common subtable header */
Packit Service 1fb00e
Packit Service 1fb00e
        AcpiOsPrintf ("\n");
Packit Service 0129ce
        ACPI_MOVE_16_TO_16(&SubLength, &Subtable->Length);
Packit Service 0129ce
        Status = AcpiDmDumpTable (Length, Offset, Subtable,
Packit Service 0129ce
            SubLength, AcpiDmTableInfoIvrsHdr);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        switch (Subtable->Type)
Packit Service 1fb00e
        {
Packit Service 1fb00e
        case ACPI_IVRS_TYPE_HARDWARE:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoIvrs0;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_IVRS_TYPE_MEMORY1:
Packit Service 1fb00e
        case ACPI_IVRS_TYPE_MEMORY2:
Packit Service 1fb00e
        case ACPI_IVRS_TYPE_MEMORY3:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoIvrs1;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        default:
Packit Service 1fb00e
Packit Service 1fb00e
            AcpiOsPrintf ("\n**** Unknown IVRS subtable type 0x%X\n",
Packit Service 1fb00e
                Subtable->Type);
Packit Service 1fb00e
Packit Service 1fb00e
            /* Attempt to continue */
Packit Service 1fb00e
Packit Service 0129ce
            if (!SubLength)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                AcpiOsPrintf ("Invalid zero length subtable\n");
Packit Service 1fb00e
                return;
Packit Service 1fb00e
            }
Packit Service 1fb00e
            goto NextSubtable;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        /* Dump the subtable */
Packit Service 1fb00e
Packit Service 1fb00e
        AcpiOsPrintf ("\n");
Packit Service 0129ce
        Status = AcpiDmDumpTable (Length, Offset, Subtable,
Packit Service 0129ce
            SubLength, InfoTable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        /* The hardware subtable can contain multiple device entries */
Packit Service 1fb00e
Packit Service 1fb00e
        if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE)
Packit Service 1fb00e
        {
Packit Service 1fb00e
            EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE);
Packit Service 1fb00e
            DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable,
Packit Service 1fb00e
                sizeof (ACPI_IVRS_HARDWARE));
Packit Service 1fb00e
Packit Service 0129ce
            while (EntryOffset < (Offset + SubLength))
Packit Service 1fb00e
            {
Packit Service 1fb00e
                AcpiOsPrintf ("\n");
Packit Service 1fb00e
                /*
Packit Service 1fb00e
                 * Upper 2 bits of Type encode the length of the device entry
Packit Service 1fb00e
                 *
Packit Service 1fb00e
                 * 00 = 4 byte
Packit Service 1fb00e
                 * 01 = 8 byte
Packit Service 1fb00e
                 * 10 = 16 byte - currently no entries defined
Packit Service 1fb00e
                 * 11 = 32 byte - currently no entries defined
Packit Service 1fb00e
                 */
Packit Service 1fb00e
                EntryType = DeviceEntry->Type;
Packit Service 1fb00e
                EntryLength = EntrySizes [EntryType >> 6];
Packit Service 1fb00e
Packit Service 1fb00e
                switch (EntryType)
Packit Service 1fb00e
                {
Packit Service 1fb00e
                /* 4-byte device entries */
Packit Service 1fb00e
Packit Service 1fb00e
                case ACPI_IVRS_TYPE_PAD4:
Packit Service 1fb00e
                case ACPI_IVRS_TYPE_ALL:
Packit Service 1fb00e
                case ACPI_IVRS_TYPE_SELECT:
Packit Service 1fb00e
                case ACPI_IVRS_TYPE_START:
Packit Service 1fb00e
                case ACPI_IVRS_TYPE_END:
Packit Service 1fb00e
Packit Service 1fb00e
                    InfoTable = AcpiDmTableInfoIvrs4;
Packit Service 1fb00e
                    break;
Packit Service 1fb00e
Packit Service 1fb00e
                /* 8-byte entries, type A */
Packit Service 1fb00e
Packit Service 1fb00e
                case ACPI_IVRS_TYPE_ALIAS_SELECT:
Packit Service 1fb00e
                case ACPI_IVRS_TYPE_ALIAS_START:
Packit Service 1fb00e
Packit Service 1fb00e
                    InfoTable = AcpiDmTableInfoIvrs8a;
Packit Service 1fb00e
                    break;
Packit Service 1fb00e
Packit Service 1fb00e
                /* 8-byte entries, type B */
Packit Service 1fb00e
Packit Service 1fb00e
                case ACPI_IVRS_TYPE_PAD8:
Packit Service 1fb00e
                case ACPI_IVRS_TYPE_EXT_SELECT:
Packit Service 1fb00e
                case ACPI_IVRS_TYPE_EXT_START:
Packit Service 1fb00e
Packit Service 1fb00e
                    InfoTable = AcpiDmTableInfoIvrs8b;
Packit Service 1fb00e
                    break;
Packit Service 1fb00e
Packit Service 1fb00e
                /* 8-byte entries, type C */
Packit Service 1fb00e
Packit Service 1fb00e
                case ACPI_IVRS_TYPE_SPECIAL:
Packit Service 1fb00e
Packit Service 1fb00e
                    InfoTable = AcpiDmTableInfoIvrs8c;
Packit Service 1fb00e
                    break;
Packit Service 1fb00e
Packit Service 1fb00e
                default:
Packit Service 1fb00e
                    InfoTable = AcpiDmTableInfoIvrs4;
Packit Service 1fb00e
                    AcpiOsPrintf (
Packit Service 1fb00e
                        "\n**** Unknown IVRS device entry type/length: "
Packit Service 1fb00e
                        "0x%.2X/0x%X at offset 0x%.4X: (header below)\n",
Packit Service 1fb00e
                        EntryType, EntryLength, EntryOffset);
Packit Service 1fb00e
                    break;
Packit Service 1fb00e
                }
Packit Service 1fb00e
Packit Service 1fb00e
                /* Dump the Device Entry */
Packit Service 1fb00e
Packit Service 0129ce
                Status = AcpiDmDumpTable (Length, EntryOffset,
Packit Service 1fb00e
                    DeviceEntry, EntryLength, InfoTable);
Packit Service 1fb00e
                if (ACPI_FAILURE (Status))
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    return;
Packit Service 1fb00e
                }
Packit Service 1fb00e
Packit Service 1fb00e
                EntryOffset += EntryLength;
Packit Service 1fb00e
                DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, DeviceEntry,
Packit Service 1fb00e
                    EntryLength);
Packit Service 1fb00e
            }
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
NextSubtable:
Packit Service 1fb00e
        /* Point to next subtable */
Packit Service 1fb00e
Packit Service 0129ce
        Offset += SubLength;
Packit Service 0129ce
        Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Subtable, SubLength);
Packit Service 1fb00e
    }
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    AcpiDmDumpLpit
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  Table               - A LPIT table
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      None
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Format the contents of a LPIT. This table type consists
Packit Service 1fb00e
 *              of an open-ended number of subtables. Note: There are no
Packit Service 1fb00e
 *              entries in the main table. An LPIT consists of the table
Packit Service 1fb00e
 *              header and then subtables only.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
void
Packit Service 1fb00e
AcpiDmDumpLpit (
Packit Service 1fb00e
    ACPI_TABLE_HEADER       *Table)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    ACPI_LPIT_HEADER        *Subtable;
Packit Service 0129ce
    UINT32                  Length;
Packit Service 1fb00e
    UINT32                  Offset = sizeof (ACPI_TABLE_LPIT);
Packit Service 1fb00e
    ACPI_DMTABLE_INFO       *InfoTable;
Packit Service 1fb00e
    UINT32                  SubtableLength;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* Subtables */
Packit Service 1fb00e
Packit Service 0129ce
    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
Packit Service 1fb00e
    Subtable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Table, Offset);
Packit Service 0129ce
    while (Offset < Length)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        /* Common subtable header */
Packit Service 1fb00e
Packit Service 1fb00e
        Status = AcpiDmDumpTable (Length, Offset, Subtable,
Packit Service 1fb00e
            sizeof (ACPI_LPIT_HEADER), AcpiDmTableInfoLpitHdr);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        switch (Subtable->Type)
Packit Service 1fb00e
        {
Packit Service 1fb00e
        case ACPI_LPIT_TYPE_NATIVE_CSTATE:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoLpit0;
Packit Service 1fb00e
            SubtableLength = sizeof (ACPI_LPIT_NATIVE);
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        default:
Packit Service 1fb00e
Packit Service 1fb00e
            /* Cannot continue on unknown type - no length */
Packit Service 1fb00e
Packit Service 1fb00e
            AcpiOsPrintf ("\n**** Unknown LPIT subtable type 0x%X\n",
Packit Service 1fb00e
                Subtable->Type);
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        Status = AcpiDmDumpTable (Length, Offset, Subtable,
Packit Service 1fb00e
            SubtableLength, InfoTable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        AcpiOsPrintf ("\n");
Packit Service 1fb00e
Packit Service 1fb00e
        /* Point to next subtable */
Packit Service 1fb00e
Packit Service 1fb00e
        Offset += SubtableLength;
Packit Service 1fb00e
        Subtable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Subtable, SubtableLength);
Packit Service 1fb00e
    }
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    AcpiDmDumpMadt
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  Table               - A MADT table
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      None
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Format the contents of a MADT. This table type consists
Packit Service 1fb00e
 *              of an open-ended number of subtables.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
void
Packit Service 1fb00e
AcpiDmDumpMadt (
Packit Service 1fb00e
    ACPI_TABLE_HEADER       *Table)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    ACPI_SUBTABLE_HEADER    *Subtable;
Packit Service 0129ce
    UINT32                  Length;
Packit Service 1fb00e
    UINT32                  Offset = sizeof (ACPI_TABLE_MADT);
Packit Service 1fb00e
    ACPI_DMTABLE_INFO       *InfoTable;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* Main table */
Packit Service 1fb00e
Packit Service 0129ce
    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
Packit Service 1fb00e
    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMadt);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return;
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    /* Subtables */
Packit Service 1fb00e
Packit Service 1fb00e
    Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
Packit Service 0129ce
    while (Offset < Length)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        /* Common subtable header */
Packit Service 1fb00e
Packit Service 1fb00e
        AcpiOsPrintf ("\n");
Packit Service 1fb00e
        Status = AcpiDmDumpTable (Length, Offset, Subtable,
Packit Service 1fb00e
            Subtable->Length, AcpiDmTableInfoMadtHdr);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        switch (Subtable->Type)
Packit Service 1fb00e
        {
Packit Service 1fb00e
        case ACPI_MADT_TYPE_LOCAL_APIC:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoMadt0;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_MADT_TYPE_IO_APIC:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoMadt1;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_MADT_TYPE_INTERRUPT_OVERRIDE:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoMadt2;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_MADT_TYPE_NMI_SOURCE:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoMadt3;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_MADT_TYPE_LOCAL_APIC_NMI:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoMadt4;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoMadt5;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_MADT_TYPE_IO_SAPIC:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoMadt6;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_MADT_TYPE_LOCAL_SAPIC:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoMadt7;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_MADT_TYPE_INTERRUPT_SOURCE:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoMadt8;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_MADT_TYPE_LOCAL_X2APIC:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoMadt9;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_MADT_TYPE_LOCAL_X2APIC_NMI:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoMadt10;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_MADT_TYPE_GENERIC_INTERRUPT:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoMadt11;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoMadt12;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_MADT_TYPE_GENERIC_MSI_FRAME:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoMadt13;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoMadt14;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_MADT_TYPE_GENERIC_TRANSLATOR:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoMadt15;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        default:
Packit Service 1fb00e
Packit Service 1fb00e
            AcpiOsPrintf ("\n**** Unknown MADT subtable type 0x%X\n\n",
Packit Service 1fb00e
                Subtable->Type);
Packit Service 1fb00e
Packit Service 1fb00e
            /* Attempt to continue */
Packit Service 1fb00e
Packit Service 1fb00e
            if (!Subtable->Length)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                AcpiOsPrintf ("Invalid zero length subtable\n");
Packit Service 1fb00e
                return;
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 1fb00e
            goto NextSubtable;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        Status = AcpiDmDumpTable (Length, Offset, Subtable,
Packit Service 1fb00e
            Subtable->Length, InfoTable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
NextSubtable:
Packit Service 1fb00e
        /* Point to next subtable */
Packit Service 1fb00e
Packit Service 1fb00e
        Offset += Subtable->Length;
Packit Service 1fb00e
        Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable,
Packit Service 1fb00e
            Subtable->Length);
Packit Service 1fb00e
    }
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    AcpiDmDumpMcfg
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  Table               - A MCFG Table
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      None
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Format the contents of a MCFG table
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
void
Packit Service 1fb00e
AcpiDmDumpMcfg (
Packit Service 1fb00e
    ACPI_TABLE_HEADER       *Table)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    UINT32                  Offset = sizeof (ACPI_TABLE_MCFG);
Packit Service 1fb00e
    ACPI_MCFG_ALLOCATION    *Subtable;
Packit Service 0129ce
    UINT32		    Len;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* Main table */
Packit Service 1fb00e
Packit Service 0129ce
    ACPI_MOVE_32_TO_32(&Len, &Table->Length);
Packit Service 0129ce
    Status = AcpiDmDumpTable (Len, 0, Table, 0, AcpiDmTableInfoMcfg);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return;
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    /* Subtables */
Packit Service 1fb00e
Packit Service 1fb00e
    Subtable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Table, Offset);
Packit Service 0129ce
    while (Offset < Len)
Packit Service 1fb00e
    {
Packit Service 0129ce
        if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Len)
Packit Service 1fb00e
        {
Packit Service 1fb00e
            AcpiOsPrintf ("Warning: there are %u invalid trailing bytes\n",
Packit Service 0129ce
                sizeof (ACPI_MCFG_ALLOCATION) - (Offset - Len));
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        AcpiOsPrintf ("\n");
Packit Service 0129ce
        Status = AcpiDmDumpTable (Len, Offset, Subtable,
Packit Service 1fb00e
            sizeof (ACPI_MCFG_ALLOCATION), AcpiDmTableInfoMcfg0);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        /* Point to next subtable (each subtable is of fixed length) */
Packit Service 1fb00e
Packit Service 1fb00e
        Offset += sizeof (ACPI_MCFG_ALLOCATION);
Packit Service 1fb00e
        Subtable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Subtable,
Packit Service 1fb00e
            sizeof (ACPI_MCFG_ALLOCATION));
Packit Service 1fb00e
    }
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    AcpiDmDumpMpst
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  Table               - A MPST Table
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      None
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Format the contents of a MPST table
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
void
Packit Service 1fb00e
AcpiDmDumpMpst (
Packit Service 1fb00e
    ACPI_TABLE_HEADER       *Table)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    UINT32                  Offset = sizeof (ACPI_TABLE_MPST);
Packit Service 0129ce
    ACPI_TABLE_MPST	    *Mpst;
Packit Service 1fb00e
    ACPI_MPST_POWER_NODE    *Subtable0;
Packit Service 1fb00e
    ACPI_MPST_POWER_STATE   *Subtable0A;
Packit Service 1fb00e
    ACPI_MPST_COMPONENT     *Subtable0B;
Packit Service 1fb00e
    ACPI_MPST_DATA_HDR      *Subtable1;
Packit Service 1fb00e
    ACPI_MPST_POWER_DATA    *Subtable2;
Packit Service 1fb00e
    UINT16                  SubtableCount;
Packit Service 1fb00e
    UINT32                  PowerStateCount;
Packit Service 1fb00e
    UINT32                  ComponentCount;
Packit Service 0129ce
    UINT32		    Length;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* Main table */
Packit Service 1fb00e
Packit Service 0129ce
    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
Packit Service 0129ce
    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMpst);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return;
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    /* Subtable: Memory Power Node(s) */
Packit Service 1fb00e
Packit Service 0129ce
    Mpst = ACPI_CAST_PTR (ACPI_TABLE_MPST, Table);
Packit Service 0129ce
    ACPI_MOVE_16_TO_16(&SubtableCount, &Mpst->PowerNodeCount);
Packit Service 1fb00e
    Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Table, Offset);
Packit Service 1fb00e
Packit Service 0129ce
    while ((Offset < Length) && SubtableCount)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        AcpiOsPrintf ("\n");
Packit Service 0129ce
        Status = AcpiDmDumpTable (Length, Offset, Subtable0,
Packit Service 1fb00e
            sizeof (ACPI_MPST_POWER_NODE), AcpiDmTableInfoMpst0);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        /* Extract the sub-subtable counts */
Packit Service 1fb00e
Packit Service 0129ce
        ACPI_MOVE_32_TO_32(&PowerStateCount, &Subtable0->NumPowerStates);
Packit Service 0129ce
        ACPI_MOVE_32_TO_32(&ComponentCount, &Subtable0->NumPhysicalComponents);
Packit Service 1fb00e
        Offset += sizeof (ACPI_MPST_POWER_NODE);
Packit Service 1fb00e
Packit Service 1fb00e
        /* Sub-subtables - Memory Power State Structure(s) */
Packit Service 1fb00e
Packit Service 1fb00e
        Subtable0A = ACPI_ADD_PTR (ACPI_MPST_POWER_STATE, Subtable0,
Packit Service 1fb00e
            sizeof (ACPI_MPST_POWER_NODE));
Packit Service 1fb00e
Packit Service 1fb00e
        while (PowerStateCount)
Packit Service 1fb00e
        {
Packit Service 1fb00e
            AcpiOsPrintf ("\n");
Packit Service 0129ce
            Status = AcpiDmDumpTable (Length, Offset, Subtable0A,
Packit Service 1fb00e
                sizeof (ACPI_MPST_POWER_STATE), AcpiDmTableInfoMpst0A);
Packit Service 1fb00e
            if (ACPI_FAILURE (Status))
Packit Service 1fb00e
            {
Packit Service 1fb00e
                return;
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 1fb00e
            Subtable0A++;
Packit Service 1fb00e
            PowerStateCount--;
Packit Service 1fb00e
            Offset += sizeof (ACPI_MPST_POWER_STATE);
Packit Service 0129ce
        }
Packit Service 1fb00e
Packit Service 1fb00e
        /* Sub-subtables - Physical Component ID Structure(s) */
Packit Service 1fb00e
Packit Service 1fb00e
        Subtable0B = ACPI_CAST_PTR (ACPI_MPST_COMPONENT, Subtable0A);
Packit Service 1fb00e
Packit Service 1fb00e
        if (ComponentCount)
Packit Service 1fb00e
        {
Packit Service 1fb00e
            AcpiOsPrintf ("\n");
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        while (ComponentCount)
Packit Service 1fb00e
        {
Packit Service 0129ce
            Status = AcpiDmDumpTable (Length, Offset, Subtable0B,
Packit Service 1fb00e
                sizeof (ACPI_MPST_COMPONENT), AcpiDmTableInfoMpst0B);
Packit Service 1fb00e
            if (ACPI_FAILURE (Status))
Packit Service 1fb00e
            {
Packit Service 1fb00e
                return;
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 1fb00e
            Subtable0B++;
Packit Service 1fb00e
            ComponentCount--;
Packit Service 1fb00e
            Offset += sizeof (ACPI_MPST_COMPONENT);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        /* Point to next Memory Power Node subtable */
Packit Service 1fb00e
Packit Service 1fb00e
        SubtableCount--;
Packit Service 0129ce
        ACPI_MOVE_32_TO_32(&PowerStateCount, &Subtable0->NumPowerStates);
Packit Service 0129ce
        ACPI_MOVE_32_TO_32(&ComponentCount, &Subtable0->NumPhysicalComponents);
Packit Service 1fb00e
        Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Subtable0,
Packit Service 1fb00e
            sizeof (ACPI_MPST_POWER_NODE) +
Packit Service 0129ce
            (sizeof (ACPI_MPST_POWER_STATE) * PowerStateCount) +
Packit Service 0129ce
            (sizeof (ACPI_MPST_COMPONENT) * ComponentCount));
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    /* Subtable: Count of Memory Power State Characteristic structures */
Packit Service 1fb00e
Packit Service 1fb00e
    AcpiOsPrintf ("\n");
Packit Service 1fb00e
    Subtable1 = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, Subtable0);
Packit Service 0129ce
    Status = AcpiDmDumpTable (Length, Offset, Subtable1,
Packit Service 1fb00e
        sizeof (ACPI_MPST_DATA_HDR), AcpiDmTableInfoMpst1);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return;
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    SubtableCount = Subtable1->CharacteristicsCount;
Packit Service 1fb00e
    Offset += sizeof (ACPI_MPST_DATA_HDR);
Packit Service 1fb00e
Packit Service 1fb00e
    /* Subtable: Memory Power State Characteristics structure(s) */
Packit Service 1fb00e
Packit Service 1fb00e
    Subtable2 = ACPI_ADD_PTR (ACPI_MPST_POWER_DATA, Subtable1,
Packit Service 1fb00e
        sizeof (ACPI_MPST_DATA_HDR));
Packit Service 1fb00e
Packit Service 0129ce
    while ((Offset < Length) && SubtableCount)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        AcpiOsPrintf ("\n");
Packit Service 0129ce
        Status = AcpiDmDumpTable (Length, Offset, Subtable2,
Packit Service 1fb00e
            sizeof (ACPI_MPST_POWER_DATA), AcpiDmTableInfoMpst2);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        Subtable2++;
Packit Service 1fb00e
        SubtableCount--;
Packit Service 1fb00e
        Offset += sizeof (ACPI_MPST_POWER_DATA);
Packit Service 1fb00e
    }
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    AcpiDmDumpMsct
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  Table               - A MSCT table
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      None
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Format the contents of a MSCT
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
void
Packit Service 1fb00e
AcpiDmDumpMsct (
Packit Service 1fb00e
    ACPI_TABLE_HEADER       *Table)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    UINT32                  Offset = sizeof (ACPI_TABLE_MSCT);
Packit Service 1fb00e
    ACPI_MSCT_PROXIMITY     *Subtable;
Packit Service 0129ce
    UINT32		    Length;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* Main table */
Packit Service 1fb00e
Packit Service 0129ce
    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
Packit Service 0129ce
    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMsct);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return;
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    /* Subtables */
Packit Service 1fb00e
Packit Service 1fb00e
    Subtable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Table, Offset);
Packit Service 0129ce
    while (Offset < Length)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        /* Common subtable header */
Packit Service 1fb00e
Packit Service 1fb00e
        AcpiOsPrintf ("\n");
Packit Service 0129ce
        Status = AcpiDmDumpTable (Length, Offset, Subtable,
Packit Service 1fb00e
            sizeof (ACPI_MSCT_PROXIMITY), AcpiDmTableInfoMsct0);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        /* Point to next subtable */
Packit Service 1fb00e
Packit Service 1fb00e
        Offset += sizeof (ACPI_MSCT_PROXIMITY);
Packit Service 1fb00e
        Subtable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Subtable,
Packit Service 1fb00e
            sizeof (ACPI_MSCT_PROXIMITY));
Packit Service 1fb00e
    }
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    AcpiDmDumpMtmr
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  Table               - A MTMR table
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      None
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Format the contents of a MTMR
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
void
Packit Service 1fb00e
AcpiDmDumpMtmr (
Packit Service 1fb00e
    ACPI_TABLE_HEADER       *Table)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    UINT32                  Offset = sizeof (ACPI_TABLE_MTMR);
Packit Service 1fb00e
    ACPI_MTMR_ENTRY         *Subtable;
Packit Service 0129ce
    UINT32		    Length;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* Main table */
Packit Service 1fb00e
Packit Service 0129ce
    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
Packit Service 0129ce
    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMtmr);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return;
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    /* Subtables */
Packit Service 1fb00e
Packit Service 1fb00e
    Subtable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Table, Offset);
Packit Service 0129ce
    while (Offset < Length)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        /* Common subtable header */
Packit Service 1fb00e
Packit Service 1fb00e
        AcpiOsPrintf ("\n");
Packit Service 0129ce
        Status = AcpiDmDumpTable (Length, Offset, Subtable,
Packit Service 1fb00e
            sizeof (ACPI_MTMR_ENTRY), AcpiDmTableInfoMtmr0);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        /* Point to next subtable */
Packit Service 1fb00e
Packit Service 1fb00e
        Offset += sizeof (ACPI_MTMR_ENTRY);
Packit Service 1fb00e
        Subtable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Subtable,
Packit Service 1fb00e
            sizeof (ACPI_MTMR_ENTRY));
Packit Service 1fb00e
    }
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    AcpiDmDumpNfit
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  Table               - A NFIT table
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      None
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Format the contents of an NFIT.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
void
Packit Service 1fb00e
AcpiDmDumpNfit (
Packit Service 1fb00e
    ACPI_TABLE_HEADER       *Table)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    UINT32                  Offset = sizeof (ACPI_TABLE_NFIT);
Packit Service 1fb00e
    UINT32                  FieldOffset = 0;
Packit Service 1fb00e
    UINT32                  Length;
Packit Service 1fb00e
    ACPI_NFIT_HEADER        *Subtable;
Packit Service 1fb00e
    ACPI_DMTABLE_INFO       *InfoTable;
Packit Service 1fb00e
    ACPI_NFIT_INTERLEAVE    *Interleave = NULL;
Packit Service 1fb00e
    ACPI_NFIT_SMBIOS        *SmbiosInfo = NULL;
Packit Service 1fb00e
    ACPI_NFIT_FLUSH_ADDRESS *Hint = NULL;
Packit Service 1fb00e
    UINT32                  i;
Packit Service 0129ce
    UINT32                  TableLength;
Packit Service 0129ce
    UINT16                  SubLength;
Packit Service 0129ce
    UINT16                  SubType;
Packit Service 0129ce
    UINT32                  Count;
Packit Service 0129ce
    UINT16                  Count16;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* Main table */
Packit Service 1fb00e
Packit Service 0129ce
    ACPI_MOVE_32_TO_32(&TableLength, &Table->Length);
Packit Service 0129ce
    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoNfit);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return;
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    /* Subtables */
Packit Service 1fb00e
Packit Service 1fb00e
    Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Table, Offset);
Packit Service 0129ce
    while (Offset < TableLength)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        /* NFIT subtable header */
Packit Service 1fb00e
Packit Service 1fb00e
        AcpiOsPrintf ("\n");
Packit Service 0129ce
	ACPI_MOVE_16_TO_16(&SubLength, &Subtable->Length);
Packit Service 0129ce
        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
Packit Service 0129ce
            SubLength, AcpiDmTableInfoNfitHdr);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 0129ce
	ACPI_MOVE_16_TO_16(&SubType, &Subtable->Type);
Packit Service 0129ce
        switch (SubType)
Packit Service 1fb00e
        {
Packit Service 1fb00e
        case ACPI_NFIT_TYPE_SYSTEM_ADDRESS:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoNfit0;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_NFIT_TYPE_MEMORY_MAP:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoNfit1;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_NFIT_TYPE_INTERLEAVE:
Packit Service 1fb00e
Packit Service 1fb00e
            /* Has a variable number of 32-bit values at the end */
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoNfit2;
Packit Service 1fb00e
            Interleave = ACPI_CAST_PTR (ACPI_NFIT_INTERLEAVE, Subtable);
Packit Service 1fb00e
            FieldOffset = sizeof (ACPI_NFIT_INTERLEAVE);
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_NFIT_TYPE_SMBIOS:
Packit Service 1fb00e
Packit Service 1fb00e
            SmbiosInfo = ACPI_CAST_PTR (ACPI_NFIT_SMBIOS, Subtable);
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoNfit3;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_NFIT_TYPE_CONTROL_REGION:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoNfit4;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_NFIT_TYPE_DATA_REGION:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoNfit5;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_NFIT_TYPE_FLUSH_ADDRESS:
Packit Service 1fb00e
Packit Service 1fb00e
            /* Has a variable number of 64-bit addresses at the end */
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoNfit6;
Packit Service 1fb00e
            Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, Subtable);
Packit Service 1fb00e
            FieldOffset = sizeof (ACPI_NFIT_FLUSH_ADDRESS) - sizeof (UINT64);
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_NFIT_TYPE_CAPABILITIES:    /* ACPI 6.0A */
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoNfit7;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        default:
Packit Service 1fb00e
            AcpiOsPrintf ("\n**** Unknown NFIT subtable type 0x%X\n",
Packit Service 1fb00e
                Subtable->Type);
Packit Service 1fb00e
Packit Service 1fb00e
            /* Attempt to continue */
Packit Service 1fb00e
Packit Service 0129ce
            if (!SubLength)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                AcpiOsPrintf ("Invalid zero length subtable\n");
Packit Service 1fb00e
                return;
Packit Service 1fb00e
            }
Packit Service 1fb00e
            goto NextSubtable;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        AcpiOsPrintf ("\n");
Packit Service 0129ce
        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
Packit Service 0129ce
            SubLength, InfoTable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        /* Per-subtable variable-length fields */
Packit Service 1fb00e
Packit Service 0129ce
        switch (SubType)
Packit Service 1fb00e
        {
Packit Service 1fb00e
        case ACPI_NFIT_TYPE_INTERLEAVE:
Packit Service 1fb00e
Packit Service 0129ce
	    ACPI_MOVE_32_TO_32(&Count, &Interleave->LineCount);
Packit Service 0129ce
            for (i = 0; i < Count; i++)
Packit Service 1fb00e
            {
Packit Service 0129ce
                Status = AcpiDmDumpTable (TableLength, Offset + FieldOffset,
Packit Service 1fb00e
                    &Interleave->LineOffset[i],
Packit Service 1fb00e
                    sizeof (UINT32), AcpiDmTableInfoNfit2a);
Packit Service 1fb00e
                if (ACPI_FAILURE (Status))
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    return;
Packit Service 1fb00e
                }
Packit Service 1fb00e
Packit Service 1fb00e
                FieldOffset += sizeof (UINT32);
Packit Service 1fb00e
            }
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_NFIT_TYPE_SMBIOS:
Packit Service 1fb00e
Packit Service 0129ce
            Length = SubLength - sizeof (ACPI_NFIT_SMBIOS) + sizeof (UINT8);
Packit Service 1fb00e
Packit Service 1fb00e
            if (Length)
Packit Service 1fb00e
            {
Packit Service 0129ce
                Status = AcpiDmDumpTable (TableLength,
Packit Service 1fb00e
                    sizeof (ACPI_NFIT_SMBIOS) - sizeof (UINT8),
Packit Service 1fb00e
                    SmbiosInfo,
Packit Service 1fb00e
                    Length, AcpiDmTableInfoNfit3a);
Packit Service 1fb00e
                if (ACPI_FAILURE (Status))
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    return;
Packit Service 1fb00e
                }
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_NFIT_TYPE_FLUSH_ADDRESS:
Packit Service 1fb00e
Packit Service 0129ce
	    ACPI_MOVE_16_TO_16(&Count16, &Hint->HintCount);
Packit Service 0129ce
            for (i = 0; i < Count16; i++)
Packit Service 1fb00e
            {
Packit Service 0129ce
                Status = AcpiDmDumpTable (TableLength, Offset + FieldOffset,
Packit Service 1fb00e
                    &Hint->HintAddress[i],
Packit Service 1fb00e
                    sizeof (UINT64), AcpiDmTableInfoNfit6a);
Packit Service 1fb00e
                if (ACPI_FAILURE (Status))
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    return;
Packit Service 1fb00e
                }
Packit Service 1fb00e
Packit Service 1fb00e
                FieldOffset += sizeof (UINT64);
Packit Service 1fb00e
            }
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        default:
Packit Service 1fb00e
            break;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
NextSubtable:
Packit Service 1fb00e
        /* Point to next subtable */
Packit Service 1fb00e
Packit Service 0129ce
        Offset += SubLength;
Packit Service 0129ce
        Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Subtable, SubLength);
Packit Service 1fb00e
    }
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    AcpiDmDumpPcct
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  Table               - A PCCT table
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      None
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Format the contents of a PCCT. This table type consists
Packit Service 1fb00e
 *              of an open-ended number of subtables.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
void
Packit Service 1fb00e
AcpiDmDumpPcct (
Packit Service 1fb00e
    ACPI_TABLE_HEADER       *Table)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    ACPI_PCCT_SUBSPACE      *Subtable;
Packit Service 1fb00e
    ACPI_DMTABLE_INFO       *InfoTable;
Packit Service 0129ce
    UINT32                  Length;
Packit Service 1fb00e
    UINT32                  Offset = sizeof (ACPI_TABLE_PCCT);
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* Main table */
Packit Service 1fb00e
Packit Service 0129ce
    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
Packit Service 1fb00e
    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPcct);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return;
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    /* Subtables */
Packit Service 1fb00e
Packit Service 1fb00e
    Subtable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Table, Offset);
Packit Service 0129ce
    while (Offset < Length)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        /* Common subtable header */
Packit Service 1fb00e
Packit Service 1fb00e
        AcpiOsPrintf ("\n");
Packit Service 1fb00e
        Status = AcpiDmDumpTable (Length, Offset, Subtable,
Packit Service 1fb00e
            Subtable->Header.Length, AcpiDmTableInfoPcctHdr);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        switch (Subtable->Header.Type)
Packit Service 1fb00e
        {
Packit Service 1fb00e
        case ACPI_PCCT_TYPE_GENERIC_SUBSPACE:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoPcct0;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoPcct1;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoPcct2;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoPcct3;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoPcct4;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        default:
Packit Service 1fb00e
Packit Service 1fb00e
            AcpiOsPrintf (
Packit Service 1fb00e
                "\n**** Unexpected or unknown PCCT subtable type 0x%X\n\n",
Packit Service 1fb00e
                Subtable->Header.Type);
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        AcpiOsPrintf ("\n");
Packit Service 1fb00e
        Status = AcpiDmDumpTable (Length, Offset, Subtable,
Packit Service 1fb00e
            Subtable->Header.Length, InfoTable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        /* Point to next subtable */
Packit Service 1fb00e
Packit Service 1fb00e
        Offset += Subtable->Header.Length;
Packit Service 1fb00e
        Subtable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Subtable,
Packit Service 1fb00e
            Subtable->Header.Length);
Packit Service 1fb00e
    }
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    AcpiDmDumpPdtt
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  Table               - A PDTT table
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      None
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Format the contents of a Pdtt. This is a variable-length
Packit Service 1fb00e
 *              table that contains an open-ended number of IDs
Packit Service 1fb00e
 *              at the end of the table.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
void
Packit Service 1fb00e
AcpiDmDumpPdtt (
Packit Service 1fb00e
    ACPI_TABLE_HEADER       *Table)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    ACPI_PDTT_CHANNEL       *Subtable;
Packit Service 1fb00e
    UINT32                  Length = Table->Length;
Packit Service 1fb00e
    UINT32                  Offset = sizeof (ACPI_TABLE_PDTT);
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* Main table */
Packit Service 1fb00e
Packit Service 1fb00e
    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPdtt);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return;
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    /* Subtables. Currently there is only one type, but can be multiples */
Packit Service 1fb00e
Packit Service 1fb00e
    Subtable = ACPI_ADD_PTR (ACPI_PDTT_CHANNEL, Table, Offset);
Packit Service 1fb00e
    while (Offset < Table->Length)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        AcpiOsPrintf ("\n");
Packit Service 1fb00e
        Status = AcpiDmDumpTable (Length, Offset, Subtable,
Packit Service 1fb00e
            sizeof (ACPI_PDTT_CHANNEL), AcpiDmTableInfoPdtt0);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        /* Point to next subtable */
Packit Service 1fb00e
Packit Service 1fb00e
        Offset += sizeof (ACPI_PDTT_CHANNEL);
Packit Service 1fb00e
        Subtable = ACPI_ADD_PTR (ACPI_PDTT_CHANNEL, Subtable,
Packit Service 1fb00e
            sizeof (ACPI_PDTT_CHANNEL));
Packit Service 1fb00e
    }
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    AcpiDmDumpPmtt
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  Table               - A PMTT table
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      None
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Format the contents of a PMTT. This table type consists
Packit Service 1fb00e
 *              of an open-ended number of subtables.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
void
Packit Service 1fb00e
AcpiDmDumpPmtt (
Packit Service 1fb00e
    ACPI_TABLE_HEADER       *Table)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    ACPI_PMTT_HEADER        *Subtable;
Packit Service 1fb00e
    ACPI_PMTT_HEADER        *MemSubtable;
Packit Service 1fb00e
    ACPI_PMTT_HEADER        *DimmSubtable;
Packit Service 1fb00e
    ACPI_PMTT_DOMAIN        *DomainArray;
Packit Service 0129ce
    UINT32                  Length;
Packit Service 1fb00e
    UINT32                  Offset = sizeof (ACPI_TABLE_PMTT);
Packit Service 1fb00e
    UINT32                  MemOffset;
Packit Service 1fb00e
    UINT32                  DimmOffset;
Packit Service 1fb00e
    UINT32                  DomainOffset;
Packit Service 0129ce
    UINT16                  DomainCount;
Packit Service 0129ce
    UINT16		    SubLength;
Packit Service 0129ce
    UINT16		    Tmp16;
Packit Service 0129ce
    UINT16		    MemLength;
Packit Service 0129ce
    UINT16		    DimmLength;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* Main table */
Packit Service 1fb00e
Packit Service 0129ce
    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
Packit Service 1fb00e
    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPmtt);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return;
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    /* Subtables */
Packit Service 1fb00e
Packit Service 1fb00e
    Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Table, Offset);
Packit Service 0129ce
    while (Offset < Length)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        /* Common subtable header */
Packit Service 1fb00e
Packit Service 1fb00e
        AcpiOsPrintf ("\n");
Packit Service 0129ce
        ACPI_MOVE_16_TO_16(&SubLength, &Subtable->Length);
Packit Service 1fb00e
        Status = AcpiDmDumpTable (Length, Offset, Subtable,
Packit Service 0129ce
            SubLength, AcpiDmTableInfoPmttHdr);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        /* Only Socket subtables are expected at this level */
Packit Service 1fb00e
Packit Service 1fb00e
        if (Subtable->Type != ACPI_PMTT_TYPE_SOCKET)
Packit Service 1fb00e
        {
Packit Service 1fb00e
            AcpiOsPrintf (
Packit Service 1fb00e
                "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n",
Packit Service 1fb00e
                Subtable->Type);
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        /* Dump the fixed-length portion of the subtable */
Packit Service 1fb00e
Packit Service 1fb00e
        Status = AcpiDmDumpTable (Length, Offset, Subtable,
Packit Service 0129ce
            SubLength, AcpiDmTableInfoPmtt0);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        /* Walk the memory controller subtables */
Packit Service 1fb00e
Packit Service 1fb00e
        MemOffset = sizeof (ACPI_PMTT_SOCKET);
Packit Service 1fb00e
        MemSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Subtable,
Packit Service 1fb00e
            sizeof (ACPI_PMTT_SOCKET));
Packit Service 1fb00e
Packit Service 0129ce
        while (((Offset + MemOffset) < Length) &&
Packit Service 0129ce
            (MemOffset < SubLength))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            /* Common subtable header */
Packit Service 1fb00e
Packit Service 1fb00e
            AcpiOsPrintf ("\n");
Packit Service 0129ce
	    ACPI_MOVE_16_TO_16(&MemLength, &MemSubtable->Length);
Packit Service 1fb00e
            Status = AcpiDmDumpTable (Length,
Packit Service 1fb00e
                Offset + MemOffset, MemSubtable,
Packit Service 0129ce
                MemLength, AcpiDmTableInfoPmttHdr);
Packit Service 1fb00e
            if (ACPI_FAILURE (Status))
Packit Service 1fb00e
            {
Packit Service 1fb00e
                return;
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 1fb00e
            /* Only memory controller subtables are expected at this level */
Packit Service 1fb00e
Packit Service 1fb00e
            if (MemSubtable->Type != ACPI_PMTT_TYPE_CONTROLLER)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                AcpiOsPrintf (
Packit Service 1fb00e
                    "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n",
Packit Service 1fb00e
                    MemSubtable->Type);
Packit Service 1fb00e
                return;
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 1fb00e
            /* Dump the fixed-length portion of the controller subtable */
Packit Service 1fb00e
Packit Service 1fb00e
            Status = AcpiDmDumpTable (Length,
Packit Service 1fb00e
                Offset + MemOffset, MemSubtable,
Packit Service 0129ce
                MemLength, AcpiDmTableInfoPmtt1);
Packit Service 1fb00e
            if (ACPI_FAILURE (Status))
Packit Service 1fb00e
            {
Packit Service 1fb00e
                return;
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 1fb00e
            /* Walk the variable count of proximity domains */
Packit Service 1fb00e
Packit Service 0129ce
	    Tmp16 = ((ACPI_PMTT_CONTROLLER *) MemSubtable)->DomainCount;
Packit Service 0129ce
            ACPI_MOVE_16_TO_16(&DomainCount, &Tmp16);
Packit Service 1fb00e
            DomainOffset = sizeof (ACPI_PMTT_CONTROLLER);
Packit Service 1fb00e
            DomainArray = ACPI_ADD_PTR (ACPI_PMTT_DOMAIN, MemSubtable,
Packit Service 1fb00e
                sizeof (ACPI_PMTT_CONTROLLER));
Packit Service 1fb00e
Packit Service 0129ce
            while (((Offset + MemOffset + DomainOffset) < Length) &&
Packit Service 0129ce
                ((MemOffset + DomainOffset) < SubLength) &&
Packit Service 1fb00e
                DomainCount)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                Status = AcpiDmDumpTable (Length,
Packit Service 1fb00e
                    Offset + MemOffset + DomainOffset, DomainArray,
Packit Service 1fb00e
                    sizeof (ACPI_PMTT_DOMAIN), AcpiDmTableInfoPmtt1a);
Packit Service 1fb00e
                if (ACPI_FAILURE (Status))
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    return;
Packit Service 1fb00e
                }
Packit Service 1fb00e
Packit Service 1fb00e
                DomainOffset += sizeof (ACPI_PMTT_DOMAIN);
Packit Service 1fb00e
                DomainArray++;
Packit Service 1fb00e
                DomainCount--;
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 1fb00e
            if (DomainCount)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                AcpiOsPrintf (
Packit Service 1fb00e
                    "\n**** DomainCount exceeds subtable length\n\n");
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 1fb00e
            /* Walk the physical component (DIMM) subtables */
Packit Service 1fb00e
Packit Service 1fb00e
            DimmOffset = DomainOffset;
Packit Service 1fb00e
            DimmSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, MemSubtable,
Packit Service 1fb00e
                DomainOffset);
Packit Service 1fb00e
Packit Service 0129ce
            while (((Offset + MemOffset + DimmOffset) < Length) &&
Packit Service 0129ce
                (DimmOffset < MemLength))
Packit Service 1fb00e
            {
Packit Service 1fb00e
                /* Common subtable header */
Packit Service 1fb00e
Packit Service 1fb00e
                AcpiOsPrintf ("\n");
Packit Service 0129ce
		ACPI_MOVE_16_TO_16(&DimmLength, &DimmSubtable->Length);
Packit Service 1fb00e
                Status = AcpiDmDumpTable (Length,
Packit Service 1fb00e
                    Offset + MemOffset + DimmOffset, DimmSubtable,
Packit Service 0129ce
                    DimmLength, AcpiDmTableInfoPmttHdr);
Packit Service 1fb00e
                if (ACPI_FAILURE (Status))
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    return;
Packit Service 1fb00e
                }
Packit Service 1fb00e
Packit Service 1fb00e
                /* Only DIMM subtables are expected at this level */
Packit Service 1fb00e
Packit Service 1fb00e
                if (DimmSubtable->Type != ACPI_PMTT_TYPE_DIMM)
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    AcpiOsPrintf (
Packit Service 1fb00e
                        "\n**** Unexpected or unknown PMTT subtable type 0x%X\n\n",
Packit Service 1fb00e
                        DimmSubtable->Type);
Packit Service 1fb00e
                    return;
Packit Service 1fb00e
                }
Packit Service 1fb00e
Packit Service 1fb00e
                /* Dump the fixed-length DIMM subtable */
Packit Service 1fb00e
Packit Service 1fb00e
                Status = AcpiDmDumpTable (Length,
Packit Service 1fb00e
                    Offset + MemOffset + DimmOffset, DimmSubtable,
Packit Service 0129ce
                    DimmLength, AcpiDmTableInfoPmtt2);
Packit Service 1fb00e
                if (ACPI_FAILURE (Status))
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    return;
Packit Service 1fb00e
                }
Packit Service 1fb00e
Packit Service 1fb00e
                /* Point to next DIMM subtable */
Packit Service 1fb00e
Packit Service 0129ce
                DimmOffset += DimmLength;
Packit Service 1fb00e
                DimmSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
Packit Service 0129ce
                    DimmSubtable, DimmLength);
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 1fb00e
            /* Point to next Controller subtable */
Packit Service 1fb00e
Packit Service 0129ce
            MemOffset += MemLength;
Packit Service 1fb00e
            MemSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
Packit Service 0129ce
                MemSubtable, MemLength);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        /* Point to next Socket subtable */
Packit Service 1fb00e
Packit Service 0129ce
        Offset += SubLength;
Packit Service 0129ce
        Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Subtable, SubLength);
Packit Service 1fb00e
    }
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    AcpiDmDumpPptt
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  Table               - A PMTT table
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      None
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Format the contents of a PPTT. This table type consists
Packit Service 1fb00e
 *              of an open-ended number of subtables.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
void
Packit Service 1fb00e
AcpiDmDumpPptt (
Packit Service 1fb00e
    ACPI_TABLE_HEADER       *Table)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    ACPI_SUBTABLE_HEADER    *Subtable;
Packit Service 1fb00e
    ACPI_PPTT_PROCESSOR     *PpttProcessor;
Packit Service 1fb00e
    UINT8                   Length;
Packit Service 1fb00e
    UINT8                   SubtableOffset;
Packit Service 1fb00e
    UINT32                  Offset = sizeof (ACPI_TABLE_FPDT);
Packit Service 1fb00e
    ACPI_DMTABLE_INFO       *InfoTable;
Packit Service 1fb00e
    UINT32                  i;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* There is no main table (other than the standard ACPI header) */
Packit Service 1fb00e
Packit Service 1fb00e
    /* Subtables */
Packit Service 1fb00e
Packit Service 1fb00e
    Offset = sizeof (ACPI_TABLE_HEADER);
Packit Service 1fb00e
    while (Offset < Table->Length)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        AcpiOsPrintf ("\n");
Packit Service 1fb00e
Packit Service 1fb00e
        /* Common subtable header */
Packit Service 1fb00e
Packit Service 1fb00e
        Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
Packit Service 1fb00e
        if (Subtable->Length < sizeof (ACPI_SUBTABLE_HEADER))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            AcpiOsPrintf ("Invalid subtable length\n");
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
Packit Service 1fb00e
            Subtable->Length, AcpiDmTableInfoPpttHdr);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        switch (Subtable->Type)
Packit Service 1fb00e
        {
Packit Service 1fb00e
        case ACPI_PPTT_TYPE_PROCESSOR:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoPptt0;
Packit Service 1fb00e
            Length = sizeof (ACPI_PPTT_PROCESSOR);
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_PPTT_TYPE_CACHE:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoPptt1;
Packit Service 1fb00e
            Length = sizeof (ACPI_PPTT_CACHE);
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_PPTT_TYPE_ID:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoPptt2;
Packit Service 1fb00e
            Length = sizeof (ACPI_PPTT_ID);
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        default:
Packit Service 1fb00e
Packit Service 1fb00e
            AcpiOsPrintf ("\n**** Unknown PPTT subtable type 0x%X\n\n",
Packit Service 1fb00e
                Subtable->Type);
Packit Service 1fb00e
Packit Service 1fb00e
            /* Attempt to continue */
Packit Service 1fb00e
Packit Service 1fb00e
            goto NextSubtable;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        if (Subtable->Length < Length)
Packit Service 1fb00e
        {
Packit Service 1fb00e
            AcpiOsPrintf ("Invalid subtable length\n");
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
Packit Service 1fb00e
            Subtable->Length, InfoTable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
        SubtableOffset = Length;
Packit Service 1fb00e
Packit Service 1fb00e
        switch (Subtable->Type)
Packit Service 1fb00e
        {
Packit Service 1fb00e
        case ACPI_PPTT_TYPE_PROCESSOR:
Packit Service 1fb00e
Packit Service 1fb00e
            PpttProcessor = ACPI_CAST_PTR (ACPI_PPTT_PROCESSOR, Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
            /* Dump SMBIOS handles */
Packit Service 1fb00e
Packit Service 1fb00e
            if ((UINT8)(Subtable->Length - SubtableOffset) <
Packit Service 1fb00e
                (UINT8)(PpttProcessor->NumberOfPrivResources * 4))
Packit Service 1fb00e
            {
Packit Service 1fb00e
                AcpiOsPrintf ("Invalid private resource number\n");
Packit Service 1fb00e
                return;
Packit Service 1fb00e
            }
Packit Service 1fb00e
            for (i = 0; i < PpttProcessor->NumberOfPrivResources; i++)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
Packit Service 1fb00e
                    ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, SubtableOffset),
Packit Service 1fb00e
                    4, AcpiDmTableInfoPptt0a);
Packit Service 1fb00e
                SubtableOffset += 4;
Packit Service 1fb00e
            }
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        default:
Packit Service 1fb00e
Packit Service 1fb00e
            break;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
NextSubtable:
Packit Service 1fb00e
        /* Point to next subtable */
Packit Service 1fb00e
Packit Service 1fb00e
        Offset += Subtable->Length;
Packit Service 1fb00e
    }
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    AcpiDmDumpS3pt
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  Table               - A S3PT table
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Length of the table
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Format the contents of a S3PT
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
UINT32
Packit Service 1fb00e
AcpiDmDumpS3pt (
Packit Service 1fb00e
    ACPI_TABLE_HEADER       *Tables)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    UINT32                  Offset = sizeof (ACPI_TABLE_S3PT);
Packit Service 1fb00e
    ACPI_FPDT_HEADER        *Subtable;
Packit Service 1fb00e
    ACPI_DMTABLE_INFO       *InfoTable;
Packit Service 1fb00e
    ACPI_TABLE_S3PT         *S3ptTable = ACPI_CAST_PTR (ACPI_TABLE_S3PT, Tables);
Packit Service 0129ce
    UINT32		    Length;
Packit Service 0129ce
    UINT16                  SubType;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* Main table */
Packit Service 1fb00e
Packit Service 1fb00e
    Status = AcpiDmDumpTable (Offset, 0, S3ptTable, 0, AcpiDmTableInfoS3pt);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return 0;
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 0129ce
    ACPI_MOVE_32_TO_32(&Length, &S3ptTable->Length);
Packit Service 1fb00e
    Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, S3ptTable, Offset);
Packit Service 0129ce
    while (Offset < Length)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        /* Common subtable header */
Packit Service 1fb00e
Packit Service 1fb00e
        AcpiOsPrintf ("\n");
Packit Service 0129ce
        Status = AcpiDmDumpTable (Length, Offset, Subtable,
Packit Service 1fb00e
            Subtable->Length, AcpiDmTableInfoS3ptHdr);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return 0;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 0129ce
        ACPI_MOVE_16_TO_16(&SubType, &Subtable->Type);
Packit Service 0129ce
        switch (SubType)
Packit Service 1fb00e
        {
Packit Service 1fb00e
        case ACPI_S3PT_TYPE_RESUME:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoS3pt0;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_S3PT_TYPE_SUSPEND:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoS3pt1;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        default:
Packit Service 1fb00e
Packit Service 1fb00e
            AcpiOsPrintf ("\n**** Unknown S3PT subtable type 0x%X\n",
Packit Service 0129ce
                SubType);
Packit Service 1fb00e
Packit Service 1fb00e
            /* Attempt to continue */
Packit Service 1fb00e
Packit Service 1fb00e
            if (!Subtable->Length)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                AcpiOsPrintf ("Invalid zero length subtable\n");
Packit Service 1fb00e
                return 0;
Packit Service 1fb00e
            }
Packit Service 1fb00e
            goto NextSubtable;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        AcpiOsPrintf ("\n");
Packit Service 0129ce
        Status = AcpiDmDumpTable (Length, Offset, Subtable,
Packit Service 1fb00e
            Subtable->Length, InfoTable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return 0;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
NextSubtable:
Packit Service 1fb00e
        /* Point to next subtable */
Packit Service 1fb00e
Packit Service 1fb00e
        Offset += Subtable->Length;
Packit Service 1fb00e
        Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Subtable, Subtable->Length);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    return (S3ptTable->Length);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    AcpiDmDumpSdev
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  Table               - A SDEV table
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      None
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Format the contents of a SDEV. This is a variable-length
Packit Service 1fb00e
 *              table that contains variable strings and vendor data.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
void
Packit Service 1fb00e
AcpiDmDumpSdev (
Packit Service 1fb00e
    ACPI_TABLE_HEADER       *Table)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    ACPI_SDEV_HEADER        *Subtable;
Packit Service 1fb00e
    ACPI_SDEV_PCIE          *Pcie;
Packit Service 1fb00e
    ACPI_SDEV_NAMESPACE     *Namesp;
Packit Service 1fb00e
    ACPI_DMTABLE_INFO       *InfoTable;
Packit Service 1fb00e
    UINT32                  Length = Table->Length;
Packit Service 1fb00e
    UINT32                  Offset = sizeof (ACPI_TABLE_SDEV);
Packit Service 1fb00e
    UINT16                  PathOffset;
Packit Service 1fb00e
    UINT16                  PathLength;
Packit Service 1fb00e
    UINT16                  VendorDataOffset;
Packit Service 1fb00e
    UINT16                  VendorDataLength;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* Main table */
Packit Service 1fb00e
Packit Service 1fb00e
    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSdev);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return;
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    /* Subtables */
Packit Service 1fb00e
Packit Service 1fb00e
    Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Table, Offset);
Packit Service 1fb00e
    while (Offset < Table->Length)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        /* Common subtable header */
Packit Service 1fb00e
Packit Service 1fb00e
        AcpiOsPrintf ("\n");
Packit Service 1fb00e
        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
Packit Service 1fb00e
            Subtable->Length, AcpiDmTableInfoSdevHdr);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        switch (Subtable->Type)
Packit Service 1fb00e
        {
Packit Service 1fb00e
        case ACPI_SDEV_TYPE_NAMESPACE_DEVICE:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoSdev0;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoSdev1;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        default:
Packit Service 1fb00e
            goto NextSubtable;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        AcpiOsPrintf ("\n");
Packit Service 1fb00e
        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
Packit Service 1fb00e
            Subtable->Length, InfoTable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        switch (Subtable->Type)
Packit Service 1fb00e
        {
Packit Service 1fb00e
        case ACPI_SDEV_TYPE_NAMESPACE_DEVICE:
Packit Service 1fb00e
Packit Service 1fb00e
            /* Dump the PCIe device ID(s) */
Packit Service 1fb00e
Packit Service 1fb00e
            Namesp = ACPI_CAST_PTR (ACPI_SDEV_NAMESPACE, Subtable);
Packit Service 1fb00e
            PathOffset = Namesp->DeviceIdOffset;
Packit Service 1fb00e
            PathLength = Namesp->DeviceIdLength;
Packit Service 1fb00e
Packit Service 1fb00e
            if (PathLength)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                Status = AcpiDmDumpTable (Table->Length, 0,
Packit Service 1fb00e
                    ACPI_ADD_PTR (UINT8, Namesp, PathOffset),
Packit Service 1fb00e
                    PathLength, AcpiDmTableInfoSdev0a);
Packit Service 1fb00e
                if (ACPI_FAILURE (Status))
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    return;
Packit Service 1fb00e
                }
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 1fb00e
            /* Dump the vendor-specific data */
Packit Service 1fb00e
Packit Service 1fb00e
            VendorDataLength =
Packit Service 1fb00e
                Namesp->VendorDataLength;
Packit Service 1fb00e
            VendorDataOffset =
Packit Service 1fb00e
                Namesp->DeviceIdOffset + Namesp->DeviceIdLength;
Packit Service 1fb00e
Packit Service 1fb00e
            if (VendorDataLength)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                Status = AcpiDmDumpTable (Table->Length, 0,
Packit Service 1fb00e
                    ACPI_ADD_PTR (UINT8, Namesp, VendorDataOffset),
Packit Service 1fb00e
                    VendorDataLength, AcpiDmTableInfoSdev1b);
Packit Service 1fb00e
                if (ACPI_FAILURE (Status))
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    return;
Packit Service 1fb00e
                }
Packit Service 1fb00e
            }
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE:
Packit Service 1fb00e
Packit Service 1fb00e
            /* PCI path substructures */
Packit Service 1fb00e
Packit Service 1fb00e
            Pcie = ACPI_CAST_PTR (ACPI_SDEV_PCIE, Subtable);
Packit Service 1fb00e
            PathOffset = Pcie->PathOffset;
Packit Service 1fb00e
            PathLength = Pcie->PathLength;
Packit Service 1fb00e
Packit Service 1fb00e
            while (PathLength)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                Status = AcpiDmDumpTable (Table->Length,
Packit Service 1fb00e
                    PathOffset + Offset,
Packit Service 1fb00e
                    ACPI_ADD_PTR (UINT8, Pcie, PathOffset),
Packit Service 1fb00e
                    sizeof (ACPI_SDEV_PCIE_PATH), AcpiDmTableInfoSdev1a);
Packit Service 1fb00e
                if (ACPI_FAILURE (Status))
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    return;
Packit Service 1fb00e
                }
Packit Service 1fb00e
Packit Service 1fb00e
                PathOffset += sizeof (ACPI_SDEV_PCIE_PATH);
Packit Service 1fb00e
                PathLength -= sizeof (ACPI_SDEV_PCIE_PATH);
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 1fb00e
            /* VendorData */
Packit Service 1fb00e
Packit Service 1fb00e
            VendorDataLength = Pcie->VendorDataLength;
Packit Service 1fb00e
            VendorDataOffset = Pcie->PathOffset + Pcie->PathLength;
Packit Service 1fb00e
Packit Service 1fb00e
            if (VendorDataLength)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                Status = AcpiDmDumpTable (Table->Length, 0,
Packit Service 1fb00e
                    ACPI_ADD_PTR (UINT8, Pcie, VendorDataOffset),
Packit Service 1fb00e
                    VendorDataLength, AcpiDmTableInfoSdev1b);
Packit Service 1fb00e
            }
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        default:
Packit Service 1fb00e
            goto NextSubtable;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
NextSubtable:
Packit Service 1fb00e
        /* Point to next subtable */
Packit Service 1fb00e
Packit Service 1fb00e
        Offset += Subtable->Length;
Packit Service 1fb00e
        Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Subtable,
Packit Service 1fb00e
            Subtable->Length);
Packit Service 1fb00e
    }
Packit Service 1fb00e
}