Blame source/compiler/dttable2.c

Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * Module Name: dttable2.c - handling for specific ACPI tables
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
/* Compile all complex data tables, signatures starting with L-Z */
Packit Service 1fb00e
Packit Service 1fb00e
#include "aslcompiler.h"
Packit Service 1fb00e
Packit Service 1fb00e
#define _COMPONENT          DT_COMPILER
Packit Service 1fb00e
        ACPI_MODULE_NAME    ("dttable2")
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtCompileLpit
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  List                - Current field list pointer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Status
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Compile LPIT.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
DtCompileLpit (
Packit Service 1fb00e
    void                    **List)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    DT_SUBTABLE             *Subtable;
Packit Service 1fb00e
    DT_SUBTABLE             *ParentTable;
Packit Service 1fb00e
    DT_FIELD                **PFieldList = (DT_FIELD **) List;
Packit Service 1fb00e
    DT_FIELD                *SubtableStart;
Packit Service 1fb00e
    ACPI_DMTABLE_INFO       *InfoTable;
Packit Service 1fb00e
    ACPI_LPIT_HEADER        *LpitHeader;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* Note: Main table consists only of the standard ACPI table header */
Packit Service 1fb00e
Packit Service 1fb00e
    while (*PFieldList)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        SubtableStart = *PFieldList;
Packit Service 1fb00e
Packit Service 1fb00e
        /* LPIT Subtable header */
Packit Service 1fb00e
Packit Service 1fb00e
        Status = DtCompileTable (PFieldList, AcpiDmTableInfoLpitHdr,
Packit Service 1fb00e
            &Subtable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return (Status);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
        DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
        DtPushSubtable (Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
        LpitHeader = ACPI_CAST_PTR (ACPI_LPIT_HEADER, Subtable->Buffer);
Packit Service 1fb00e
Packit Service 1fb00e
        switch (LpitHeader->Type)
Packit Service 1fb00e
        {
Packit Service 1fb00e
        case ACPI_LPIT_TYPE_NATIVE_CSTATE:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoLpit0;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        default:
Packit Service 1fb00e
Packit Service 1fb00e
            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "LPIT");
Packit Service 1fb00e
            return (AE_ERROR);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        /* LPIT Subtable */
Packit Service 1fb00e
Packit Service 1fb00e
        Status = DtCompileTable (PFieldList, InfoTable, &Subtable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return (Status);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
        DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
        DtPopSubtable ();
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    return (AE_OK);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtCompileMadt
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  List                - Current field list pointer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Status
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Compile MADT.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
DtCompileMadt (
Packit Service 1fb00e
    void                    **List)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    DT_SUBTABLE             *Subtable;
Packit Service 1fb00e
    DT_SUBTABLE             *ParentTable;
Packit Service 1fb00e
    DT_FIELD                **PFieldList = (DT_FIELD **) List;
Packit Service 1fb00e
    DT_FIELD                *SubtableStart;
Packit Service 1fb00e
    ACPI_SUBTABLE_HEADER    *MadtHeader;
Packit Service 1fb00e
    ACPI_DMTABLE_INFO       *InfoTable;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    Status = DtCompileTable (PFieldList, AcpiDmTableInfoMadt,
Packit Service 1fb00e
        &Subtable);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return (Status);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
    DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
    while (*PFieldList)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        SubtableStart = *PFieldList;
Packit Service 1fb00e
        Status = DtCompileTable (PFieldList, AcpiDmTableInfoMadtHdr,
Packit Service 1fb00e
            &Subtable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return (Status);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
        DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
        DtPushSubtable (Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
        MadtHeader = ACPI_CAST_PTR (ACPI_SUBTABLE_HEADER, Subtable->Buffer);
Packit Service 1fb00e
Packit Service 1fb00e
        switch (MadtHeader->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
            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "MADT");
Packit Service 1fb00e
            return (AE_ERROR);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        Status = DtCompileTable (PFieldList, InfoTable, &Subtable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return (Status);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
        DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
        DtPopSubtable ();
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    return (AE_OK);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtCompileMcfg
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  List                - Current field list pointer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Status
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Compile MCFG.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
DtCompileMcfg (
Packit Service 1fb00e
    void                    **List)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    Status = DtCompileTwoSubtables (List,
Packit Service 1fb00e
        AcpiDmTableInfoMcfg, AcpiDmTableInfoMcfg0);
Packit Service 1fb00e
    return (Status);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtCompileMpst
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  List                - Current field list pointer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Status
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Compile MPST.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
DtCompileMpst (
Packit Service 1fb00e
    void                    **List)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    DT_SUBTABLE             *Subtable;
Packit Service 1fb00e
    DT_SUBTABLE             *ParentTable;
Packit Service 1fb00e
    DT_FIELD                **PFieldList = (DT_FIELD **) List;
Packit Service 1fb00e
    ACPI_MPST_CHANNEL       *MpstChannelInfo;
Packit Service 1fb00e
    ACPI_MPST_POWER_NODE    *MpstPowerNode;
Packit Service 1fb00e
    ACPI_MPST_DATA_HDR      *MpstDataHeader;
Packit Service 1fb00e
    UINT16                  SubtableCount;
Packit Service 1fb00e
    UINT32                  PowerStateCount;
Packit Service 1fb00e
    UINT32                  ComponentCount;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* Main table */
Packit Service 1fb00e
Packit Service 1fb00e
    Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst, &Subtable);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return (Status);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
    DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
    DtPushSubtable (Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
    MpstChannelInfo = ACPI_CAST_PTR (ACPI_MPST_CHANNEL, Subtable->Buffer);
Packit Service 0129ce
    ACPI_MOVE_16_TO_16(&SubtableCount, &MpstChannelInfo->PowerNodeCount);
Packit Service 1fb00e
Packit Service 1fb00e
    while (*PFieldList && SubtableCount)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        /* Subtable: Memory Power Node(s) */
Packit Service 1fb00e
Packit Service 1fb00e
        Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst0,
Packit Service 1fb00e
            &Subtable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return (Status);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
        DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
        DtPushSubtable (Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
        MpstPowerNode = ACPI_CAST_PTR (ACPI_MPST_POWER_NODE, Subtable->Buffer);
Packit Service 0129ce
        ACPI_MOVE_32_TO_32(&PowerStateCount, &MpstPowerNode->NumPowerStates);
Packit Service 0129ce
        ACPI_MOVE_32_TO_32(&ComponentCount, &MpstPowerNode->NumPhysicalComponents);
Packit Service 1fb00e
Packit Service 1fb00e
        ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
Packit Service 1fb00e
        /* Sub-subtables - Memory Power State Structure(s) */
Packit Service 1fb00e
Packit Service 1fb00e
        while (*PFieldList && PowerStateCount)
Packit Service 1fb00e
        {
Packit Service 1fb00e
            Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst0A,
Packit Service 1fb00e
                &Subtable);
Packit Service 1fb00e
            if (ACPI_FAILURE (Status))
Packit Service 1fb00e
            {
Packit Service 1fb00e
                return (Status);
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 1fb00e
            DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
            PowerStateCount--;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        /* Sub-subtables - Physical Component ID Structure(s) */
Packit Service 1fb00e
Packit Service 1fb00e
        while (*PFieldList && ComponentCount)
Packit Service 1fb00e
        {
Packit Service 1fb00e
            Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst0B,
Packit Service 1fb00e
                &Subtable);
Packit Service 1fb00e
            if (ACPI_FAILURE (Status))
Packit Service 1fb00e
            {
Packit Service 1fb00e
                return (Status);
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 1fb00e
            DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
            ComponentCount--;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        SubtableCount--;
Packit Service 1fb00e
        DtPopSubtable ();
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    /* Subtable: Count of Memory Power State Characteristic structures */
Packit Service 1fb00e
Packit Service 1fb00e
    DtPopSubtable ();
Packit Service 1fb00e
Packit Service 1fb00e
    Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst1, &Subtable);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return (Status);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
    DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
    DtPushSubtable (Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
    MpstDataHeader = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, Subtable->Buffer);
Packit Service 1fb00e
    SubtableCount = MpstDataHeader->CharacteristicsCount;
Packit Service 1fb00e
Packit Service 1fb00e
    ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
Packit Service 1fb00e
    /* Subtable: Memory Power State Characteristics structure(s) */
Packit Service 1fb00e
Packit Service 1fb00e
    while (*PFieldList && SubtableCount)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        Status = DtCompileTable (PFieldList, AcpiDmTableInfoMpst2,
Packit Service 1fb00e
            &Subtable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return (Status);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
        SubtableCount--;
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    DtPopSubtable ();
Packit Service 1fb00e
    return (AE_OK);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtCompileMsct
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  List                - Current field list pointer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Status
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Compile MSCT.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
DtCompileMsct (
Packit Service 1fb00e
    void                    **List)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    Status = DtCompileTwoSubtables (List,
Packit Service 1fb00e
        AcpiDmTableInfoMsct, AcpiDmTableInfoMsct0);
Packit Service 1fb00e
    return (Status);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtCompileMtmr
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  List                - Current field list pointer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Status
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Compile MTMR.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
DtCompileMtmr (
Packit Service 1fb00e
    void                    **List)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    Status = DtCompileTwoSubtables (List,
Packit Service 1fb00e
        AcpiDmTableInfoMtmr, AcpiDmTableInfoMtmr0);
Packit Service 1fb00e
    return (Status);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtCompileNfit
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  List                - Current field list pointer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Status
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Compile NFIT.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
DtCompileNfit (
Packit Service 1fb00e
    void                    **List)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    DT_SUBTABLE             *Subtable;
Packit Service 1fb00e
    DT_SUBTABLE             *ParentTable;
Packit Service 1fb00e
    DT_FIELD                **PFieldList = (DT_FIELD **) List;
Packit Service 1fb00e
    DT_FIELD                *SubtableStart;
Packit Service 1fb00e
    ACPI_NFIT_HEADER        *NfitHeader;
Packit Service 1fb00e
    ACPI_DMTABLE_INFO       *InfoTable;
Packit Service 1fb00e
    UINT32                  Count;
Packit Service 1fb00e
    ACPI_NFIT_INTERLEAVE    *Interleave = NULL;
Packit Service 1fb00e
    ACPI_NFIT_FLUSH_ADDRESS *Hint = NULL;
Packit Service 0129ce
    UINT16		    SubType;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* Main table */
Packit Service 1fb00e
Packit Service 1fb00e
    Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfit,
Packit Service 1fb00e
        &Subtable);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return (Status);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
    DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
    DtPushSubtable (Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
    /* Subtables */
Packit Service 1fb00e
Packit Service 1fb00e
    while (*PFieldList)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        SubtableStart = *PFieldList;
Packit Service 1fb00e
        Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfitHdr,
Packit Service 1fb00e
            &Subtable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return (Status);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
        DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
        DtPushSubtable (Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
        NfitHeader = ACPI_CAST_PTR (ACPI_NFIT_HEADER, Subtable->Buffer);
Packit Service 1fb00e
Packit Service 0129ce
	ACPI_MOVE_16_TO_16(&SubType, &NfitHeader->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
            Interleave = ACPI_CAST_PTR (ACPI_NFIT_INTERLEAVE, Subtable->Buffer);
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoNfit2;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_NFIT_TYPE_SMBIOS:
Packit Service 1fb00e
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
            Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, Subtable->Buffer);
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoNfit6;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_NFIT_TYPE_CAPABILITIES:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoNfit7;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        default:
Packit Service 1fb00e
Packit Service 1fb00e
            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "NFIT");
Packit Service 1fb00e
            return (AE_ERROR);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        Status = DtCompileTable (PFieldList, InfoTable, &Subtable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return (Status);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
        DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
        DtPopSubtable ();
Packit Service 1fb00e
Packit Service 0129ce
        switch (SubType)
Packit Service 1fb00e
        {
Packit Service 1fb00e
        case ACPI_NFIT_TYPE_INTERLEAVE:
Packit Service 1fb00e
Packit Service 1fb00e
            Count = 0;
Packit Service 1fb00e
            DtPushSubtable (Subtable);
Packit Service 1fb00e
            while (*PFieldList)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfit2a,
Packit Service 1fb00e
                    &Subtable);
Packit Service 1fb00e
                if (ACPI_FAILURE (Status))
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    return (Status);
Packit Service 1fb00e
                }
Packit Service 1fb00e
Packit Service 1fb00e
                if (!Subtable)
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    DtPopSubtable ();
Packit Service 1fb00e
                    break;
Packit Service 1fb00e
                }
Packit Service 1fb00e
Packit Service 1fb00e
                ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
                DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
                Count++;
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 0129ce
            ACPI_MOVE_32_TO_32(&Interleave->LineCount, &Count);
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_NFIT_TYPE_SMBIOS:
Packit Service 1fb00e
Packit Service 1fb00e
            if (*PFieldList)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfit3a,
Packit Service 1fb00e
                    &Subtable);
Packit Service 1fb00e
                if (ACPI_FAILURE (Status))
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    return (Status);
Packit Service 1fb00e
                }
Packit Service 1fb00e
Packit Service 1fb00e
                if (Subtable)
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    DtInsertSubtable (ParentTable, Subtable);
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 1fb00e
            Count = 0;
Packit Service 1fb00e
            DtPushSubtable (Subtable);
Packit Service 1fb00e
            while (*PFieldList)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                Status = DtCompileTable (PFieldList, AcpiDmTableInfoNfit6a,
Packit Service 1fb00e
                    &Subtable);
Packit Service 1fb00e
                if (ACPI_FAILURE (Status))
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    return (Status);
Packit Service 1fb00e
                }
Packit Service 1fb00e
Packit Service 1fb00e
                if (!Subtable)
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    DtPopSubtable ();
Packit Service 1fb00e
                    break;
Packit Service 1fb00e
                }
Packit Service 1fb00e
Packit Service 1fb00e
                ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
                DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
                Count++;
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 0129ce
            ACPI_MOVE_32_TO_16(&Hint->HintCount, &Count);
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        default:
Packit Service 1fb00e
            break;
Packit Service 1fb00e
        }
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    return (AE_OK);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtCompilePcct
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  List                - Current field list pointer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Status
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Compile PCCT.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
DtCompilePcct (
Packit Service 1fb00e
    void                    **List)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    DT_SUBTABLE             *Subtable;
Packit Service 1fb00e
    DT_SUBTABLE             *ParentTable;
Packit Service 1fb00e
    DT_FIELD                **PFieldList = (DT_FIELD **) List;
Packit Service 1fb00e
    DT_FIELD                *SubtableStart;
Packit Service 1fb00e
    ACPI_SUBTABLE_HEADER    *PcctHeader;
Packit Service 1fb00e
    ACPI_DMTABLE_INFO       *InfoTable;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* Main table */
Packit Service 1fb00e
Packit Service 1fb00e
    Status = DtCompileTable (PFieldList, AcpiDmTableInfoPcct,
Packit Service 1fb00e
        &Subtable);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return (Status);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
    DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
    /* Subtables */
Packit Service 1fb00e
Packit Service 1fb00e
    while (*PFieldList)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        SubtableStart = *PFieldList;
Packit Service 1fb00e
        Status = DtCompileTable (PFieldList, AcpiDmTableInfoPcctHdr,
Packit Service 1fb00e
            &Subtable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return (Status);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
        DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
        DtPushSubtable (Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
        PcctHeader = ACPI_CAST_PTR (ACPI_SUBTABLE_HEADER, Subtable->Buffer);
Packit Service 1fb00e
Packit Service 1fb00e
        switch (PcctHeader->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
            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "PCCT");
Packit Service 1fb00e
            return (AE_ERROR);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        Status = DtCompileTable (PFieldList, InfoTable, &Subtable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return (Status);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
        DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
        DtPopSubtable ();
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    return (AE_OK);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtCompilePdtt
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  List                - Current field list pointer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Status
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Compile PDTT.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
DtCompilePdtt (
Packit Service 1fb00e
    void                    **List)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    DT_SUBTABLE             *Subtable;
Packit Service 1fb00e
    DT_SUBTABLE             *ParentTable;
Packit Service 1fb00e
    DT_FIELD                **PFieldList = (DT_FIELD **) List;
Packit Service 1fb00e
    ACPI_TABLE_PDTT         *PdttHeader;
Packit Service 1fb00e
    UINT32                  Count = 0;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* Main table */
Packit Service 1fb00e
Packit Service 1fb00e
    Status = DtCompileTable (PFieldList, AcpiDmTableInfoPdtt, &Subtable);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return (Status);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
    DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
    PdttHeader = ACPI_CAST_PTR (ACPI_TABLE_PDTT, ParentTable->Buffer);
Packit Service 1fb00e
    PdttHeader->ArrayOffset = sizeof (ACPI_TABLE_PDTT);
Packit Service 1fb00e
Packit Service 1fb00e
    /* There is only one type of subtable at this time, no need to decode */
Packit Service 1fb00e
Packit Service 1fb00e
    while (*PFieldList)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        /* List of subchannel IDs, each 2 bytes */
Packit Service 1fb00e
Packit Service 1fb00e
        Status = DtCompileTable (PFieldList, AcpiDmTableInfoPdtt0,
Packit Service 1fb00e
            &Subtable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return (Status);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
        Count++;
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    PdttHeader->TriggerCount = (UINT8) Count;
Packit Service 1fb00e
    return (AE_OK);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtCompilePmtt
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  List                - Current field list pointer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Status
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Compile PMTT.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
DtCompilePmtt (
Packit Service 1fb00e
    void                    **List)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    DT_SUBTABLE             *Subtable;
Packit Service 1fb00e
    DT_SUBTABLE             *ParentTable;
Packit Service 1fb00e
    DT_FIELD                **PFieldList = (DT_FIELD **) List;
Packit Service 1fb00e
    DT_FIELD                *SubtableStart;
Packit Service 1fb00e
    ACPI_PMTT_HEADER        *PmttHeader;
Packit Service 1fb00e
    ACPI_PMTT_CONTROLLER    *PmttController;
Packit Service 1fb00e
    UINT16                  DomainCount;
Packit Service 1fb00e
    UINT8                   PrevType = ACPI_PMTT_TYPE_SOCKET;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* Main table */
Packit Service 1fb00e
Packit Service 1fb00e
    Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt, &Subtable);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return (Status);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
    DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
    DtPushSubtable (Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
    while (*PFieldList)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        SubtableStart = *PFieldList;
Packit Service 1fb00e
        Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmttHdr,
Packit Service 1fb00e
            &Subtable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return (Status);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        PmttHeader = ACPI_CAST_PTR (ACPI_PMTT_HEADER, Subtable->Buffer);
Packit Service 1fb00e
        while (PrevType >= PmttHeader->Type)
Packit Service 1fb00e
        {
Packit Service 1fb00e
            DtPopSubtable ();
Packit Service 1fb00e
Packit Service 1fb00e
            if (PrevType == ACPI_PMTT_TYPE_SOCKET)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                break;
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 1fb00e
            PrevType--;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        PrevType = PmttHeader->Type;
Packit Service 1fb00e
Packit Service 1fb00e
        ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
        DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
        DtPushSubtable (Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
        switch (PmttHeader->Type)
Packit Service 1fb00e
        {
Packit Service 1fb00e
        case ACPI_PMTT_TYPE_SOCKET:
Packit Service 1fb00e
Packit Service 1fb00e
            /* Subtable: Socket Structure */
Packit Service 1fb00e
Packit Service 1fb00e
            Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt0,
Packit Service 1fb00e
                &Subtable);
Packit Service 1fb00e
            if (ACPI_FAILURE (Status))
Packit Service 1fb00e
            {
Packit Service 1fb00e
                return (Status);
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 1fb00e
            ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
            DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_PMTT_TYPE_CONTROLLER:
Packit Service 1fb00e
Packit Service 1fb00e
            /* Subtable: Memory Controller Structure */
Packit Service 1fb00e
Packit Service 1fb00e
            Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt1,
Packit Service 1fb00e
                &Subtable);
Packit Service 1fb00e
            if (ACPI_FAILURE (Status))
Packit Service 1fb00e
            {
Packit Service 1fb00e
                return (Status);
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 1fb00e
            ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
            DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
            PmttController = ACPI_CAST_PTR (ACPI_PMTT_CONTROLLER,
Packit Service 1fb00e
                (Subtable->Buffer - sizeof (ACPI_PMTT_HEADER)));
Packit Service 0129ce
            ACPI_MOVE_16_TO_16(&DomainCount, &PmttController->DomainCount);
Packit Service 1fb00e
Packit Service 1fb00e
            while (DomainCount)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt1a,
Packit Service 1fb00e
                    &Subtable);
Packit Service 1fb00e
                if (ACPI_FAILURE (Status))
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    return (Status);
Packit Service 1fb00e
                }
Packit Service 1fb00e
Packit Service 1fb00e
                DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
                DomainCount--;
Packit Service 1fb00e
            }
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_PMTT_TYPE_DIMM:
Packit Service 1fb00e
Packit Service 1fb00e
            /* Subtable: Physical Component Structure */
Packit Service 1fb00e
Packit Service 1fb00e
            Status = DtCompileTable (PFieldList, AcpiDmTableInfoPmtt2,
Packit Service 1fb00e
                &Subtable);
Packit Service 1fb00e
            if (ACPI_FAILURE (Status))
Packit Service 1fb00e
            {
Packit Service 1fb00e
                return (Status);
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 1fb00e
            ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
            DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        default:
Packit Service 1fb00e
Packit Service 1fb00e
            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "PMTT");
Packit Service 1fb00e
            return (AE_ERROR);
Packit Service 1fb00e
        }
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    return (Status);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtCompilePptt
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  List                - Current field list pointer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Status
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Compile PPTT.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
DtCompilePptt (
Packit Service 1fb00e
    void                    **List)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    ACPI_SUBTABLE_HEADER    *PpttHeader;
Packit Service 1fb00e
    ACPI_PPTT_PROCESSOR     *PpttProcessor = NULL;
Packit Service 1fb00e
    DT_SUBTABLE             *Subtable;
Packit Service 1fb00e
    DT_SUBTABLE             *ParentTable;
Packit Service 1fb00e
    ACPI_DMTABLE_INFO       *InfoTable;
Packit Service 1fb00e
    DT_FIELD                **PFieldList = (DT_FIELD **) List;
Packit Service 1fb00e
    DT_FIELD                *SubtableStart;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
    while (*PFieldList)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        SubtableStart = *PFieldList;
Packit Service 1fb00e
Packit Service 1fb00e
        /* Compile PPTT subtable header */
Packit Service 1fb00e
Packit Service 1fb00e
        Status = DtCompileTable (PFieldList, AcpiDmTableInfoPpttHdr,
Packit Service 1fb00e
            &Subtable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return (Status);
Packit Service 1fb00e
        }
Packit Service 1fb00e
        DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
        PpttHeader = ACPI_CAST_PTR (ACPI_SUBTABLE_HEADER, Subtable->Buffer);
Packit Service 1fb00e
        PpttHeader->Length = (UINT8)(Subtable->Length);
Packit Service 1fb00e
Packit Service 1fb00e
        switch (PpttHeader->Type)
Packit Service 1fb00e
        {
Packit Service 1fb00e
        case ACPI_PPTT_TYPE_PROCESSOR:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoPptt0;
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
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_PPTT_TYPE_ID:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoPptt2;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        default:
Packit Service 1fb00e
Packit Service 1fb00e
            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "PPTT");
Packit Service 1fb00e
            return (AE_ERROR);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        /* Compile PPTT subtable body */
Packit Service 1fb00e
Packit Service 1fb00e
        Status = DtCompileTable (PFieldList, InfoTable, &Subtable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return (Status);
Packit Service 1fb00e
        }
Packit Service 1fb00e
        DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
        PpttHeader->Length += (UINT8)(Subtable->Length);
Packit Service 1fb00e
Packit Service 1fb00e
        /* Compile PPTT subtable additionals */
Packit Service 1fb00e
Packit Service 1fb00e
        switch (PpttHeader->Type)
Packit Service 1fb00e
        {
Packit Service 1fb00e
        case ACPI_PPTT_TYPE_PROCESSOR:
Packit Service 1fb00e
Packit Service 1fb00e
            PpttProcessor = ACPI_SUB_PTR (ACPI_PPTT_PROCESSOR,
Packit Service 1fb00e
                Subtable->Buffer, sizeof (ACPI_SUBTABLE_HEADER));
Packit Service 1fb00e
            if (PpttProcessor)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                /* Compile initiator proximity domain list */
Packit Service 1fb00e
Packit Service 1fb00e
                PpttProcessor->NumberOfPrivResources = 0;
Packit Service 1fb00e
                while (*PFieldList)
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    Status = DtCompileTable (PFieldList,
Packit Service 1fb00e
                        AcpiDmTableInfoPptt0a, &Subtable);
Packit Service 1fb00e
                    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
                    {
Packit Service 1fb00e
                        return (Status);
Packit Service 1fb00e
                    }
Packit Service 1fb00e
                    if (!Subtable)
Packit Service 1fb00e
                    {
Packit Service 1fb00e
                        break;
Packit Service 1fb00e
                    }
Packit Service 1fb00e
Packit Service 1fb00e
                    DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
                    PpttHeader->Length += (UINT8)(Subtable->Length);
Packit Service 1fb00e
                    PpttProcessor->NumberOfPrivResources++;
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
Packit Service 1fb00e
    return (AE_OK);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtCompileRsdt
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  List                - Current field list pointer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Status
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Compile RSDT.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
DtCompileRsdt (
Packit Service 1fb00e
    void                    **List)
Packit Service 1fb00e
{
Packit Service 1fb00e
    DT_SUBTABLE             *Subtable;
Packit Service 1fb00e
    DT_SUBTABLE             *ParentTable;
Packit Service 1fb00e
    DT_FIELD                *FieldList = *(DT_FIELD **) List;
Packit Service 1fb00e
    UINT32                  Address;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
Packit Service 1fb00e
    while (FieldList)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        DtCompileInteger ((UINT8 *) &Address, FieldList, 4, DT_NON_ZERO);
Packit Service 1fb00e
Packit Service 1fb00e
        DtCreateSubtable ((UINT8 *) &Address, 4, &Subtable);
Packit Service 1fb00e
        DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
        FieldList = FieldList->Next;
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    return (AE_OK);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtCompileS3pt
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  PFieldList          - Current field list pointer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Status
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Compile S3PT (Pointed to by FPDT)
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
DtCompileS3pt (
Packit Service 1fb00e
    DT_FIELD                **PFieldList)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    ACPI_FPDT_HEADER        *S3ptHeader;
Packit Service 1fb00e
    DT_SUBTABLE             *Subtable;
Packit Service 1fb00e
    DT_SUBTABLE             *ParentTable;
Packit Service 1fb00e
    ACPI_DMTABLE_INFO       *InfoTable;
Packit Service 1fb00e
    DT_FIELD                *SubtableStart;
Packit Service 0129ce
    UINT16		    HdrType;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    Status = DtCompileTable (PFieldList, AcpiDmTableInfoS3pt,
Packit Service 1fb00e
        &Gbl_RootTable);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return (Status);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    DtPushSubtable (Gbl_RootTable);
Packit Service 1fb00e
Packit Service 1fb00e
    while (*PFieldList)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        SubtableStart = *PFieldList;
Packit Service 1fb00e
        Status = DtCompileTable (PFieldList, AcpiDmTableInfoS3ptHdr,
Packit Service 1fb00e
            &Subtable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return (Status);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
        DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
        DtPushSubtable (Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
        S3ptHeader = ACPI_CAST_PTR (ACPI_FPDT_HEADER, Subtable->Buffer);
Packit Service 1fb00e
Packit Service 0129ce
	ACPI_MOVE_16_TO_16(&HdrType, &S3ptHeader->Type);
Packit Service 0129ce
        switch (HdrType)
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
            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "S3PT");
Packit Service 1fb00e
            return (AE_ERROR);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        Status = DtCompileTable (PFieldList, InfoTable, &Subtable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return (Status);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
        DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
        DtPopSubtable ();
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    return (AE_OK);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtCompileSdev
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  List                - Current field list pointer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Status
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Compile SDEV.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
DtCompileSdev (
Packit Service 1fb00e
    void                    **List)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    ACPI_SDEV_HEADER        *SdevHeader;
Packit Service 1fb00e
    DT_SUBTABLE             *Subtable;
Packit Service 1fb00e
    DT_SUBTABLE             *ParentTable;
Packit Service 1fb00e
    ACPI_DMTABLE_INFO       *InfoTable;
Packit Service 1fb00e
    DT_FIELD                **PFieldList = (DT_FIELD **) List;
Packit Service 1fb00e
    DT_FIELD                *SubtableStart;
Packit Service 1fb00e
    ACPI_SDEV_PCIE          *Pcie = NULL;
Packit Service 1fb00e
    ACPI_SDEV_NAMESPACE     *Namesp = NULL;
Packit Service 1fb00e
    UINT32                  EntryCount;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* Subtables */
Packit Service 1fb00e
Packit Service 1fb00e
    while (*PFieldList)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        /* Compile common SDEV subtable header */
Packit Service 1fb00e
Packit Service 1fb00e
        SubtableStart = *PFieldList;
Packit Service 1fb00e
        Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdevHdr,
Packit Service 1fb00e
            &Subtable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return (Status);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
        DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
        DtPushSubtable (Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
        SdevHeader = ACPI_CAST_PTR (ACPI_SDEV_HEADER, Subtable->Buffer);
Packit Service 1fb00e
        SdevHeader->Length = (UINT8)(sizeof (ACPI_SDEV_HEADER));
Packit Service 1fb00e
Packit Service 1fb00e
        switch (SdevHeader->Type)
Packit Service 1fb00e
        {
Packit Service 1fb00e
        case ACPI_SDEV_TYPE_NAMESPACE_DEVICE:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoSdev0;
Packit Service 1fb00e
            Namesp = ACPI_CAST_PTR (ACPI_SDEV_NAMESPACE, Subtable->Buffer);
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
            Pcie = ACPI_CAST_PTR (ACPI_SDEV_PCIE, Subtable->Buffer);
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        default:
Packit Service 1fb00e
Packit Service 1fb00e
            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "SDEV");
Packit Service 1fb00e
            return (AE_ERROR);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        /* Compile SDEV subtable body */
Packit Service 1fb00e
Packit Service 1fb00e
        Status = DtCompileTable (PFieldList, InfoTable, &Subtable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return (Status);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
        DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
        /* Optional data fields are appended to the main subtable body */
Packit Service 1fb00e
Packit Service 1fb00e
        switch (SdevHeader->Type)
Packit Service 1fb00e
        {
Packit Service 1fb00e
        case ACPI_SDEV_TYPE_NAMESPACE_DEVICE:
Packit Service 1fb00e
Packit Service 1fb00e
            /* Append DeviceId namespace string */
Packit Service 1fb00e
Packit Service 1fb00e
            Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev0a,
Packit Service 1fb00e
                &Subtable);
Packit Service 1fb00e
            if (ACPI_FAILURE (Status))
Packit Service 1fb00e
            {
Packit Service 1fb00e
                return (Status);
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 1fb00e
            if (!Subtable)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                break;
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 1fb00e
            ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
            DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
            Namesp->DeviceIdOffset = sizeof (ACPI_SDEV_NAMESPACE);
Packit Service 1fb00e
            Namesp->DeviceIdLength = (UINT16) Subtable->Length;
Packit Service 1fb00e
Packit Service 1fb00e
            /* Append Vendor data */
Packit Service 1fb00e
Packit Service 1fb00e
            Namesp->VendorDataLength = 0;
Packit Service 1fb00e
            Namesp->VendorDataOffset = 0;
Packit Service 1fb00e
Packit Service 1fb00e
            if (*PFieldList)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev1b,
Packit Service 1fb00e
                    &Subtable);
Packit Service 1fb00e
                if (ACPI_FAILURE (Status))
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    return (Status);
Packit Service 1fb00e
                }
Packit Service 1fb00e
Packit Service 1fb00e
                if (Subtable)
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
                    DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
                    Namesp->VendorDataOffset =
Packit Service 1fb00e
                        Namesp->DeviceIdOffset + Namesp->DeviceIdLength;
Packit Service 1fb00e
                    Namesp->VendorDataLength =
Packit Service 1fb00e
                        (UINT16) Subtable->Length;
Packit Service 1fb00e
                }
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 1fb00e
            /* Final size of entire namespace structure */
Packit Service 1fb00e
Packit Service 1fb00e
            SdevHeader->Length = (UINT16) (sizeof (ACPI_SDEV_NAMESPACE) +
Packit Service 1fb00e
                Subtable->Length + Namesp->DeviceIdLength);
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE:
Packit Service 1fb00e
Packit Service 1fb00e
            /* Append the PCIe path info first */
Packit Service 1fb00e
Packit Service 1fb00e
            EntryCount = 0;
Packit Service 1fb00e
            while (*PFieldList && !strcmp ((*PFieldList)->Name, "Device"))
Packit Service 1fb00e
            {
Packit Service 1fb00e
                Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev1a,
Packit Service 1fb00e
                    &Subtable);
Packit Service 1fb00e
                if (ACPI_FAILURE (Status))
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    return (Status);
Packit Service 1fb00e
                }
Packit Service 1fb00e
Packit Service 1fb00e
                if (!Subtable)
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    DtPopSubtable ();
Packit Service 1fb00e
                    break;
Packit Service 1fb00e
                }
Packit Service 1fb00e
Packit Service 1fb00e
                ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
                DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
                EntryCount++;
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 1fb00e
            /* Path offset will point immediately after the main subtable */
Packit Service 1fb00e
Packit Service 1fb00e
            Pcie->PathOffset = sizeof (ACPI_SDEV_PCIE);
Packit Service 1fb00e
            Pcie->PathLength = (UINT16)
Packit Service 1fb00e
                (EntryCount * sizeof (ACPI_SDEV_PCIE_PATH));
Packit Service 1fb00e
Packit Service 1fb00e
            /* Append the Vendor Data last */
Packit Service 1fb00e
Packit Service 1fb00e
            Pcie->VendorDataLength = 0;
Packit Service 1fb00e
            Pcie->VendorDataOffset = 0;
Packit Service 1fb00e
Packit Service 1fb00e
            if (*PFieldList)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                Status = DtCompileTable (PFieldList, AcpiDmTableInfoSdev1b,
Packit Service 1fb00e
                    &Subtable);
Packit Service 1fb00e
                if (ACPI_FAILURE (Status))
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    return (Status);
Packit Service 1fb00e
                }
Packit Service 1fb00e
Packit Service 1fb00e
                if (Subtable)
Packit Service 1fb00e
                {
Packit Service 1fb00e
                    ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
                    DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
                    Pcie->VendorDataOffset =
Packit Service 1fb00e
                        Pcie->PathOffset + Pcie->PathLength;
Packit Service 1fb00e
                    Pcie->VendorDataLength = (UINT16)
Packit Service 1fb00e
                        Subtable->Length;
Packit Service 1fb00e
                }
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 1fb00e
            SdevHeader->Length =
Packit Service 1fb00e
                sizeof (ACPI_SDEV_PCIE) +
Packit Service 1fb00e
                Pcie->PathLength + Pcie->VendorDataLength;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        default:
Packit Service 1fb00e
Packit Service 1fb00e
            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "SDEV");
Packit Service 1fb00e
            return (AE_ERROR);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        DtPopSubtable ();
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    return (AE_OK);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtCompileSlic
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  List                - Current field list pointer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Status
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Compile SLIC.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
DtCompileSlic (
Packit Service 1fb00e
    void                    **List)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    DT_SUBTABLE             *Subtable;
Packit Service 1fb00e
    DT_SUBTABLE             *ParentTable;
Packit Service 1fb00e
    DT_FIELD                **PFieldList = (DT_FIELD **) List;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    while (*PFieldList)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        Status = DtCompileTable (PFieldList, AcpiDmTableInfoSlic,
Packit Service 1fb00e
            &Subtable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return (Status);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
        DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
        DtPushSubtable (Subtable);
Packit Service 1fb00e
        DtPopSubtable ();
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    return (AE_OK);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtCompileSlit
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  List                - Current field list pointer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Status
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Compile SLIT.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
DtCompileSlit (
Packit Service 1fb00e
    void                    **List)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    DT_SUBTABLE             *Subtable;
Packit Service 1fb00e
    DT_SUBTABLE             *ParentTable;
Packit Service 1fb00e
    DT_FIELD                **PFieldList = (DT_FIELD **) List;
Packit Service 1fb00e
    DT_FIELD                *FieldList;
Packit Service 1fb00e
    UINT32                  Localities;
Packit Service 1fb00e
    UINT8                   *LocalityBuffer;
Packit Service 0129ce
    UINT32		    Tmp;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    Status = DtCompileTable (PFieldList, AcpiDmTableInfoSlit,
Packit Service 1fb00e
        &Subtable);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return (Status);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
    DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
Packit Service 0129ce
    Tmp = *ACPI_CAST_PTR (UINT32, Subtable->Buffer);
Packit Service 0129ce
    ACPI_MOVE_32_TO_32(&Localities, &Tmp);
Packit Service 1fb00e
    LocalityBuffer = UtLocalCalloc (Localities);
Packit Service 1fb00e
Packit Service 1fb00e
    /* Compile each locality buffer */
Packit Service 1fb00e
Packit Service 1fb00e
    FieldList = *PFieldList;
Packit Service 1fb00e
    while (FieldList)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        DtCompileBuffer (LocalityBuffer,
Packit Service 1fb00e
            FieldList->Value, FieldList, Localities);
Packit Service 1fb00e
Packit Service 1fb00e
        DtCreateSubtable (LocalityBuffer, Localities, &Subtable);
Packit Service 1fb00e
        DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
        FieldList = FieldList->Next;
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    ACPI_FREE (LocalityBuffer);
Packit Service 1fb00e
    return (AE_OK);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtCompileSrat
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  List                - Current field list pointer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Status
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Compile SRAT.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
DtCompileSrat (
Packit Service 1fb00e
    void                    **List)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    DT_SUBTABLE             *Subtable;
Packit Service 1fb00e
    DT_SUBTABLE             *ParentTable;
Packit Service 1fb00e
    DT_FIELD                **PFieldList = (DT_FIELD **) List;
Packit Service 1fb00e
    DT_FIELD                *SubtableStart;
Packit Service 1fb00e
    ACPI_SUBTABLE_HEADER    *SratHeader;
Packit Service 1fb00e
    ACPI_DMTABLE_INFO       *InfoTable;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    Status = DtCompileTable (PFieldList, AcpiDmTableInfoSrat,
Packit Service 1fb00e
        &Subtable);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return (Status);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
    DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
    while (*PFieldList)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        SubtableStart = *PFieldList;
Packit Service 1fb00e
        Status = DtCompileTable (PFieldList, AcpiDmTableInfoSratHdr,
Packit Service 1fb00e
            &Subtable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return (Status);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
        DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
        DtPushSubtable (Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
        SratHeader = ACPI_CAST_PTR (ACPI_SUBTABLE_HEADER, Subtable->Buffer);
Packit Service 1fb00e
Packit Service 1fb00e
        switch (SratHeader->Type)
Packit Service 1fb00e
        {
Packit Service 1fb00e
        case ACPI_SRAT_TYPE_CPU_AFFINITY:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoSrat0;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_SRAT_TYPE_MEMORY_AFFINITY:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoSrat1;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoSrat2;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_SRAT_TYPE_GICC_AFFINITY:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoSrat3;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case ACPI_SRAT_TYPE_GIC_ITS_AFFINITY:
Packit Service 1fb00e
Packit Service 1fb00e
            InfoTable = AcpiDmTableInfoSrat4;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        default:
Packit Service 1fb00e
Packit Service 1fb00e
            DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "SRAT");
Packit Service 1fb00e
            return (AE_ERROR);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        Status = DtCompileTable (PFieldList, InfoTable, &Subtable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return (Status);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
        DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
        DtPopSubtable ();
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    return (AE_OK);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtCompileStao
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  PFieldList          - Current field list pointer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Status
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Compile STAO.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
DtCompileStao (
Packit Service 1fb00e
    void                    **List)
Packit Service 1fb00e
{
Packit Service 1fb00e
    DT_FIELD                **PFieldList = (DT_FIELD **) List;
Packit Service 1fb00e
    DT_SUBTABLE             *Subtable;
Packit Service 1fb00e
    DT_SUBTABLE             *ParentTable;
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* Compile the main table */
Packit Service 1fb00e
Packit Service 1fb00e
    Status = DtCompileTable (PFieldList, AcpiDmTableInfoStao,
Packit Service 1fb00e
        &Subtable);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return (Status);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
    DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
    /* Compile each ASCII namestring as a subtable */
Packit Service 1fb00e
Packit Service 1fb00e
    while (*PFieldList)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        Status = DtCompileTable (PFieldList, AcpiDmTableInfoStaoStr,
Packit Service 1fb00e
            &Subtable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return (Status);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
        DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    return (AE_OK);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtCompileTcpa
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  PFieldList          - Current field list pointer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Status
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Compile TCPA.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
DtCompileTcpa (
Packit Service 1fb00e
    void                    **List)
Packit Service 1fb00e
{
Packit Service 1fb00e
    DT_FIELD                **PFieldList = (DT_FIELD **) List;
Packit Service 1fb00e
    DT_SUBTABLE             *Subtable;
Packit Service 1fb00e
    ACPI_TABLE_TCPA_HDR     *TcpaHeader;
Packit Service 1fb00e
    DT_SUBTABLE             *ParentTable;
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 0129ce
    UINT16		    PlatClass;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* Compile the main table */
Packit Service 1fb00e
Packit Service 1fb00e
    Status = DtCompileTable (PFieldList, AcpiDmTableInfoTcpaHdr,
Packit Service 1fb00e
        &Subtable);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return (Status);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
    DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
    /*
Packit Service 1fb00e
     * Examine the PlatformClass field to determine the table type.
Packit Service 1fb00e
     * Either a client or server table. Only one.
Packit Service 1fb00e
     */
Packit Service 1fb00e
    TcpaHeader = ACPI_CAST_PTR (ACPI_TABLE_TCPA_HDR, ParentTable->Buffer);
Packit Service 1fb00e
Packit Service 0129ce
    ACPI_MOVE_16_TO_16(&PlatClass, &TcpaHeader->PlatformClass);
Packit Service 0129ce
    switch (PlatClass)
Packit Service 1fb00e
    {
Packit Service 1fb00e
    case ACPI_TCPA_CLIENT_TABLE:
Packit Service 1fb00e
Packit Service 1fb00e
        Status = DtCompileTable (PFieldList, AcpiDmTableInfoTcpaClient,
Packit Service 1fb00e
            &Subtable);
Packit Service 1fb00e
        break;
Packit Service 1fb00e
Packit Service 1fb00e
    case ACPI_TCPA_SERVER_TABLE:
Packit Service 1fb00e
Packit Service 1fb00e
        Status = DtCompileTable (PFieldList, AcpiDmTableInfoTcpaServer,
Packit Service 1fb00e
            &Subtable);
Packit Service 1fb00e
        break;
Packit Service 1fb00e
Packit Service 1fb00e
    default:
Packit Service 1fb00e
Packit Service 1fb00e
        AcpiOsPrintf ("\n**** Unknown TCPA Platform Class 0x%X\n",
Packit Service 1fb00e
            TcpaHeader->PlatformClass);
Packit Service 1fb00e
        Status = AE_ERROR;
Packit Service 1fb00e
        break;
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
    DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
    return (Status);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtCompileTpm2
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  PFieldList          - Current field list pointer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Status
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Compile TPM2.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
DtCompileTpm2 (
Packit Service 1fb00e
    void                    **List)
Packit Service 1fb00e
{
Packit Service 1fb00e
    DT_FIELD                **PFieldList = (DT_FIELD **) List;
Packit Service 1fb00e
    DT_SUBTABLE             *Subtable;
Packit Service 1fb00e
    ACPI_TABLE_TPM2         *Tpm2Header;
Packit Service 1fb00e
    DT_SUBTABLE             *ParentTable;
Packit Service 1fb00e
    ACPI_STATUS             Status = AE_OK;
Packit Service e72c50
    UINT32		    Tmp32;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* Compile the main table */
Packit Service 1fb00e
Packit Service 1fb00e
    Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm2,
Packit Service 1fb00e
        &Subtable);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return (Status);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
    DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
    Tpm2Header = ACPI_CAST_PTR (ACPI_TABLE_TPM2, ParentTable->Buffer);
Packit Service 1fb00e
Packit Service 1fb00e
    /* Method parameters */
Packit Service 1fb00e
    /* Optional: Log area minimum length */
Packit Service 1fb00e
    /* Optional: Log area start address */
Packit Service 1fb00e
    /* TBD: Optional fields above not fully implemented (not optional at this time) */
Packit Service 1fb00e
Packit Service 1fb00e
    Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm2a,
Packit Service 1fb00e
        &Subtable);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return (Status);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
    DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* Subtable type depends on the StartMethod */
Packit Service 1fb00e
Packit Service e72c50
    ACPI_MOVE_32_TO_32(&Tmp32, &Tpm2Header->StartMethod);
Packit Service e72c50
    switch (Tmp32)
Packit Service 1fb00e
    {
Packit Service 1fb00e
    case ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC:
Packit Service 1fb00e
Packit Service 1fb00e
        /* Subtable specific to to ARM_SMC */
Packit Service 1fb00e
Packit Service 1fb00e
        Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm211,
Packit Service 1fb00e
            &Subtable);
Packit Service 1fb00e
        if (ACPI_FAILURE (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            return (Status);
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
        DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
        break;
Packit Service 1fb00e
Packit Service 1fb00e
    case ACPI_TPM2_START_METHOD:
Packit Service 1fb00e
    case ACPI_TPM2_MEMORY_MAPPED:
Packit Service 1fb00e
    case ACPI_TPM2_COMMAND_BUFFER:
Packit Service 1fb00e
    case ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD:
Packit Service 1fb00e
        break;
Packit Service 1fb00e
Packit Service 1fb00e
    case ACPI_TPM2_RESERVED1:
Packit Service 1fb00e
    case ACPI_TPM2_RESERVED3:
Packit Service 1fb00e
    case ACPI_TPM2_RESERVED4:
Packit Service 1fb00e
    case ACPI_TPM2_RESERVED5:
Packit Service 1fb00e
    case ACPI_TPM2_RESERVED9:
Packit Service 1fb00e
    case ACPI_TPM2_RESERVED10:
Packit Service 1fb00e
Packit Service e72c50
        AcpiOsPrintf ("\n**** Reserved TPM2 Start Method type 0x%X\n", Tmp32);
Packit Service 1fb00e
        Status = AE_ERROR;
Packit Service 1fb00e
        break;
Packit Service 1fb00e
Packit Service 1fb00e
    case ACPI_TPM2_NOT_ALLOWED:
Packit Service 1fb00e
    default:
Packit Service 1fb00e
Packit Service e72c50
        AcpiOsPrintf ("\n**** Unknown TPM2 Start Method type 0x%X\n", Tmp32);
Packit Service 1fb00e
        Status = AE_ERROR;
Packit Service 1fb00e
        break;
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    return (Status);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtGetGenericTableInfo
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  Name                - Generic type name
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Info entry
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Obtain table info for a generic name entry
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_DMTABLE_INFO *
Packit Service 1fb00e
DtGetGenericTableInfo (
Packit Service 1fb00e
    char                    *Name)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_DMTABLE_INFO       *Info;
Packit Service 1fb00e
    UINT32                  i;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    if (!Name)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return (NULL);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    /* Search info table for name match */
Packit Service 1fb00e
Packit Service 1fb00e
    for (i = 0; ; i++)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        Info = AcpiDmTableInfoGeneric[i];
Packit Service 1fb00e
        if (Info->Opcode == ACPI_DMT_EXIT)
Packit Service 1fb00e
        {
Packit Service 1fb00e
            Info = NULL;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        /* Use caseless compare for generic keywords */
Packit Service 1fb00e
Packit Service 1fb00e
        if (!AcpiUtStricmp (Name, Info->Name))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            break;
Packit Service 1fb00e
        }
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    return (Info);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtCompileUefi
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  List                - Current field list pointer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Status
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Compile UEFI.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
DtCompileUefi (
Packit Service 1fb00e
    void                    **List)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    DT_SUBTABLE             *Subtable;
Packit Service 1fb00e
    DT_SUBTABLE             *ParentTable;
Packit Service 1fb00e
    DT_FIELD                **PFieldList = (DT_FIELD **) List;
Packit Service 1fb00e
    UINT16                  *DataOffset;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* Compile the predefined portion of the UEFI table */
Packit Service 1fb00e
Packit Service 1fb00e
    Status = DtCompileTable (PFieldList, AcpiDmTableInfoUefi,
Packit Service 1fb00e
        &Subtable);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return (Status);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    DataOffset = (UINT16 *) (Subtable->Buffer + 16);
Packit Service 1fb00e
    *DataOffset = sizeof (ACPI_TABLE_UEFI);
Packit Service 1fb00e
Packit Service 1fb00e
    ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
    DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
    /*
Packit Service 1fb00e
     * Compile the "generic" portion of the UEFI table. This
Packit Service 1fb00e
     * part of the table is not predefined and any of the generic
Packit Service 1fb00e
     * operators may be used.
Packit Service 1fb00e
     */
Packit Service 1fb00e
    DtCompileGeneric ((void **) PFieldList, NULL, NULL);
Packit Service 1fb00e
    return (AE_OK);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtCompileVrtc
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  List                - Current field list pointer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Status
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Compile VRTC.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
DtCompileVrtc (
Packit Service 1fb00e
    void                    **List)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    Status = DtCompileTwoSubtables (List,
Packit Service 1fb00e
        AcpiDmTableInfoVrtc, AcpiDmTableInfoVrtc0);
Packit Service 1fb00e
    return (Status);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtCompileWdat
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  List                - Current field list pointer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Status
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Compile WDAT.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
DtCompileWdat (
Packit Service 1fb00e
    void                    **List)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    Status = DtCompileTwoSubtables (List,
Packit Service 1fb00e
        AcpiDmTableInfoWdat, AcpiDmTableInfoWdat0);
Packit Service 1fb00e
    return (Status);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtCompileWpbt
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  List                - Current field list pointer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Status
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Compile WPBT.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
DtCompileWpbt (
Packit Service 1fb00e
    void                    **List)
Packit Service 1fb00e
{
Packit Service 1fb00e
    DT_FIELD                **PFieldList = (DT_FIELD **) List;
Packit Service 1fb00e
    DT_SUBTABLE             *Subtable;
Packit Service 1fb00e
    DT_SUBTABLE             *ParentTable;
Packit Service 1fb00e
    ACPI_TABLE_WPBT         *Table;
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    UINT16                  Length;
Packit Service 0129ce
    UINT16                  Tmp16;
Packit Service 0129ce
    UINT16		    *Ptr16;
Packit Service 0129ce
    UINT32		    ii;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    /* Compile the main table */
Packit Service 1fb00e
Packit Service 1fb00e
    Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt,
Packit Service 1fb00e
        &Subtable);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return (Status);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
    DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
Packit Service 1fb00e
    /* Compile the argument list subtable */
Packit Service 1fb00e
Packit Service 1fb00e
    Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt0,
Packit Service 1fb00e
        &Subtable);
Packit Service 1fb00e
    if (ACPI_FAILURE (Status))
Packit Service 1fb00e
    {
Packit Service 1fb00e
        return (Status);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    /* Extract the length of the Arguments buffer, insert into main table */
Packit Service 1fb00e
Packit Service 1fb00e
    Length = (UINT16) Subtable->TotalLength;
Packit Service 1fb00e
    Table = ACPI_CAST_PTR (ACPI_TABLE_WPBT, ParentTable->Buffer);
Packit Service 0129ce
    ACPI_MOVE_16_TO_16(&Table->ArgumentsLength, &Length);
Packit Service 0129ce
Packit Service 0129ce
    /* The arguments are in Unicode, so make sure the byte order is correct */
Packit Service 0129ce
    Ptr16 = (UINT16 *)Subtable->Buffer;
Packit Service 0129ce
    for (ii = 0; ii < Length; ii++)
Packit Service 0129ce
    {
Packit Service 0129ce
	ACPI_MOVE_16_TO_16(&Tmp16, Ptr16);
Packit Service 0129ce
	*Ptr16 = Tmp16;
Packit Service 0129ce
        Ptr16++;
Packit Service 0129ce
    }
Packit Service 1fb00e
Packit Service 1fb00e
    ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
    DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
    return (AE_OK);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtCompileXsdt
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  List                - Current field list pointer
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Status
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Compile XSDT.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
DtCompileXsdt (
Packit Service 1fb00e
    void                    **List)
Packit Service 1fb00e
{
Packit Service 1fb00e
    DT_SUBTABLE             *Subtable;
Packit Service 1fb00e
    DT_SUBTABLE             *ParentTable;
Packit Service 1fb00e
    DT_FIELD                *FieldList = *(DT_FIELD **) List;
Packit Service 1fb00e
    UINT64                  Address;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
Packit Service 1fb00e
    while (FieldList)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        DtCompileInteger ((UINT8 *) &Address, FieldList, 8, DT_NON_ZERO);
Packit Service 1fb00e
Packit Service 1fb00e
        DtCreateSubtable ((UINT8 *) &Address, 8, &Subtable);
Packit Service 1fb00e
        DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
        FieldList = FieldList->Next;
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    return (AE_OK);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    DtCompileGeneric
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  List                - Current field list pointer
Packit Service 1fb00e
 *              Name                - Field name to end generic compiling
Packit Service 1fb00e
 *              Length              - Compiled table length to return
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Status
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Compile generic unknown table.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ACPI_STATUS
Packit Service 1fb00e
DtCompileGeneric (
Packit Service 1fb00e
    void                    **List,
Packit Service 1fb00e
    char                    *Name,
Packit Service 1fb00e
    UINT32                  *Length)
Packit Service 1fb00e
{
Packit Service 1fb00e
    ACPI_STATUS             Status;
Packit Service 1fb00e
    DT_SUBTABLE             *Subtable;
Packit Service 1fb00e
    DT_SUBTABLE             *ParentTable;
Packit Service 1fb00e
    DT_FIELD                **PFieldList = (DT_FIELD **) List;
Packit Service 1fb00e
    ACPI_DMTABLE_INFO       *Info;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    ParentTable = DtPeekSubtable ();
Packit Service 1fb00e
Packit Service 1fb00e
    /*
Packit Service 1fb00e
     * Compile the "generic" portion of the table. This
Packit Service 1fb00e
     * part of the table is not predefined and any of the generic
Packit Service 1fb00e
     * operators may be used.
Packit Service 1fb00e
     */
Packit Service 1fb00e
Packit Service 1fb00e
    /* Find any and all labels in the entire generic portion */
Packit Service 1fb00e
Packit Service 1fb00e
    DtDetectAllLabels (*PFieldList);
Packit Service 1fb00e
Packit Service 1fb00e
    /* Now we can actually compile the parse tree */
Packit Service 1fb00e
Packit Service 1fb00e
    if (Length && *Length)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        *Length = 0;
Packit Service 1fb00e
    }
Packit Service 1fb00e
    while (*PFieldList)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        if (Name && !strcmp ((*PFieldList)->Name, Name))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            break;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        Info = DtGetGenericTableInfo ((*PFieldList)->Name);
Packit Service 1fb00e
        if (!Info)
Packit Service 1fb00e
        {
Packit Service 1fb00e
            sprintf (MsgBuffer, "Generic data type \"%s\" not found",
Packit Service 1fb00e
                (*PFieldList)->Name);
Packit Service 1fb00e
            DtNameError (ASL_ERROR, ASL_MSG_INVALID_FIELD_NAME,
Packit Service 1fb00e
                (*PFieldList), MsgBuffer);
Packit Service 1fb00e
Packit Service 1fb00e
            *PFieldList = (*PFieldList)->Next;
Packit Service 1fb00e
            continue;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        Status = DtCompileTable (PFieldList, Info,
Packit Service 1fb00e
            &Subtable);
Packit Service 1fb00e
        if (ACPI_SUCCESS (Status))
Packit Service 1fb00e
        {
Packit Service 1fb00e
            DtInsertSubtable (ParentTable, Subtable);
Packit Service 1fb00e
            if (Length)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                *Length += Subtable->Length;
Packit Service 1fb00e
            }
Packit Service 1fb00e
        }
Packit Service 1fb00e
        else
Packit Service 1fb00e
        {
Packit Service 1fb00e
            *PFieldList = (*PFieldList)->Next;
Packit Service 1fb00e
Packit Service 1fb00e
            if (Status == AE_NOT_FOUND)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                sprintf (MsgBuffer, "Generic data type \"%s\" not found",
Packit Service 1fb00e
                    (*PFieldList)->Name);
Packit Service 1fb00e
                DtNameError (ASL_ERROR, ASL_MSG_INVALID_FIELD_NAME,
Packit Service 1fb00e
                    (*PFieldList), MsgBuffer);
Packit Service 1fb00e
            }
Packit Service 1fb00e
        }
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    return (AE_OK);
Packit Service 1fb00e
}