Blame source/compiler/aslrestype1.c

Packit Service 1fb00e
/******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * Module Name: aslrestype1 - Miscellaneous small resource descriptors
Packit Service 1fb00e
 *
Packit Service 1fb00e
 *****************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
/*
Packit Service 1fb00e
 * Copyright (C) 2000 - 2018, Intel Corp.
Packit Service 1fb00e
 * All rights reserved.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * Redistribution and use in source and binary forms, with or without
Packit Service 1fb00e
 * modification, are permitted provided that the following conditions
Packit Service 1fb00e
 * are met:
Packit Service 1fb00e
 * 1. Redistributions of source code must retain the above copyright
Packit Service 1fb00e
 *    notice, this list of conditions, and the following disclaimer,
Packit Service 1fb00e
 *    without modification.
Packit Service 1fb00e
 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
Packit Service 1fb00e
 *    substantially similar to the "NO WARRANTY" disclaimer below
Packit Service 1fb00e
 *    ("Disclaimer") and any redistribution must be conditioned upon
Packit Service 1fb00e
 *    including a substantially similar Disclaimer requirement for further
Packit Service 1fb00e
 *    binary redistribution.
Packit Service 1fb00e
 * 3. Neither the names of the above-listed copyright holders nor the names
Packit Service 1fb00e
 *    of any contributors may be used to endorse or promote products derived
Packit Service 1fb00e
 *    from this software without specific prior written permission.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * Alternatively, this software may be distributed under the terms of the
Packit Service 1fb00e
 * GNU General Public License ("GPL") version 2 as published by the Free
Packit Service 1fb00e
 * Software Foundation.
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * NO WARRANTY
Packit Service 1fb00e
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
Packit Service 1fb00e
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
Packit Service 1fb00e
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
Packit Service 1fb00e
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
Packit Service 1fb00e
 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Packit Service 1fb00e
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
Packit Service 1fb00e
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
Packit Service 1fb00e
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
Packit Service 1fb00e
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
Packit Service 1fb00e
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
Packit Service 1fb00e
 * POSSIBILITY OF SUCH DAMAGES.
Packit Service 1fb00e
 */
Packit Service 1fb00e
Packit Service 1fb00e
#include "aslcompiler.h"
Packit Service 1fb00e
#include "aslcompiler.y.h"
Packit Service 1fb00e
Packit Service 1fb00e
#define _COMPONENT          ACPI_COMPILER
Packit Service 1fb00e
        ACPI_MODULE_NAME    ("aslrestype1")
Packit Service 1fb00e
Packit Service 1fb00e
/*
Packit Service 1fb00e
 * This module contains miscellaneous small resource descriptors:
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * EndTag
Packit Service 1fb00e
 * EndDependentFn
Packit Service 1fb00e
 * Memory24
Packit Service 1fb00e
 * Memory32
Packit Service 1fb00e
 * Memory32Fixed
Packit Service 1fb00e
 * StartDependentFn
Packit Service 1fb00e
 * StartDependentFnNoPri
Packit Service 1fb00e
 * VendorShort
Packit Service 1fb00e
 */
Packit Service 1fb00e
Packit Service 1fb00e
/*******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    RsDoEndTagDescriptor
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  Info                - Parse Op and resource template offset
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Completed resource node
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Construct a short "EndDependentFn" descriptor
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ASL_RESOURCE_NODE *
Packit Service 1fb00e
RsDoEndTagDescriptor (
Packit Service 1fb00e
    ASL_RESOURCE_INFO       *Info)
Packit Service 1fb00e
{
Packit Service 1fb00e
    AML_RESOURCE            *Descriptor;
Packit Service 1fb00e
    ASL_RESOURCE_NODE       *Rnode;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_END_TAG));
Packit Service 1fb00e
Packit Service 1fb00e
    Descriptor = Rnode->Buffer;
Packit Service 1fb00e
    Descriptor->EndTag.DescriptorType = ACPI_RESOURCE_NAME_END_TAG |
Packit Service 1fb00e
                                        ASL_RDESC_END_TAG_SIZE;
Packit Service 1fb00e
    Descriptor->EndTag.Checksum = 0;
Packit Service 1fb00e
    return (Rnode);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    RsDoEndDependentDescriptor
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  Info                - Parse Op and resource template offset
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Completed resource node
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Construct a short "EndDependentFn" descriptor
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ASL_RESOURCE_NODE *
Packit Service 1fb00e
RsDoEndDependentDescriptor (
Packit Service 1fb00e
    ASL_RESOURCE_INFO       *Info)
Packit Service 1fb00e
{
Packit Service 1fb00e
    AML_RESOURCE            *Descriptor;
Packit Service 1fb00e
    ASL_RESOURCE_NODE       *Rnode;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_END_DEPENDENT));
Packit Service 1fb00e
Packit Service 1fb00e
    Descriptor = Rnode->Buffer;
Packit Service 1fb00e
    Descriptor->EndDpf.DescriptorType =
Packit Service 1fb00e
        ACPI_RESOURCE_NAME_END_DEPENDENT | ASL_RDESC_END_DEPEND_SIZE;
Packit Service 1fb00e
    return (Rnode);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    RsDoMemory24Descriptor
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  Info                - Parse Op and resource template offset
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Completed resource node
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Construct a short "Memory24" descriptor
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ASL_RESOURCE_NODE *
Packit Service 1fb00e
RsDoMemory24Descriptor (
Packit Service 1fb00e
    ASL_RESOURCE_INFO       *Info)
Packit Service 1fb00e
{
Packit Service 1fb00e
    AML_RESOURCE            *Descriptor;
Packit Service 1fb00e
    ACPI_PARSE_OBJECT       *InitializerOp;
Packit Service 1fb00e
    ACPI_PARSE_OBJECT       *MinOp = NULL;
Packit Service 1fb00e
    ACPI_PARSE_OBJECT       *MaxOp = NULL;
Packit Service 1fb00e
    ACPI_PARSE_OBJECT       *LengthOp = NULL;
Packit Service 1fb00e
    ASL_RESOURCE_NODE       *Rnode;
Packit Service 1fb00e
    UINT32                  CurrentByteOffset;
Packit Service 0129ce
    UINT16                  Minimum = 0;
Packit Service 0129ce
    UINT16                  Maximum = 0;
Packit Service 0129ce
    UINT16                  AddressLength = 0;
Packit Service 0129ce
    UINT16                  Alignment = 0;
Packit Service 0129ce
    UINT16                  ResourceLength;
Packit Service 1fb00e
    UINT32                  i;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    InitializerOp = Info->DescriptorTypeOp->Asl.Child;
Packit Service 1fb00e
    CurrentByteOffset = Info->CurrentByteOffset;
Packit Service 1fb00e
    Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_MEMORY24));
Packit Service 1fb00e
Packit Service 1fb00e
    Descriptor = Rnode->Buffer;
Packit Service 1fb00e
    Descriptor->Memory24.DescriptorType = ACPI_RESOURCE_NAME_MEMORY24;
Packit Service 0129ce
    ResourceLength = 9;
Packit Service 0129ce
    ACPI_MOVE_16_TO_16(&Descriptor->Memory24.ResourceLength, &ResourceLength);
Packit Service 1fb00e
Packit Service 1fb00e
    /* Process all child initialization nodes */
Packit Service 1fb00e
Packit Service 1fb00e
    for (i = 0; InitializerOp; i++)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        switch (i)
Packit Service 1fb00e
        {
Packit Service 1fb00e
        case 0: /* Read/Write type */
Packit Service 1fb00e
Packit Service 1fb00e
            RsSetFlagBits (&Descriptor->Memory24.Flags, InitializerOp, 0, 1);
Packit Service 1fb00e
            RsCreateBitField (InitializerOp, ACPI_RESTAG_READWRITETYPE,
Packit Service 1fb00e
                CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Flags), 0);
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case 1: /* Min Address */
Packit Service 1fb00e
Packit Service 0129ce
            Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
Packit Service 1fb00e
            RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
Packit Service 1fb00e
                CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Minimum));
Packit Service 1fb00e
            MinOp = InitializerOp;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case 2: /* Max Address */
Packit Service 1fb00e
Packit Service 0129ce
            Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
Packit Service 1fb00e
            RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
Packit Service 1fb00e
                CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Maximum));
Packit Service 1fb00e
            MaxOp = InitializerOp;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case 3: /* Alignment */
Packit Service 1fb00e
Packit Service 0129ce
            Alignment = (UINT16) InitializerOp->Asl.Value.Integer;
Packit Service 1fb00e
            RsCreateWordField (InitializerOp, ACPI_RESTAG_ALIGNMENT,
Packit Service 1fb00e
                CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Alignment));
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case 4: /* Length */
Packit Service 1fb00e
Packit Service 0129ce
            AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
Packit Service 1fb00e
            RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH,
Packit Service 1fb00e
                CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.AddressLength));
Packit Service 1fb00e
            LengthOp = InitializerOp;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case 5: /* Name */
Packit Service 1fb00e
Packit Service 1fb00e
            UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp);
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        default:
Packit Service 1fb00e
Packit Service 1fb00e
            AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);
Packit Service 1fb00e
            break;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    /* Validate the Min/Max/Len/Align values (Alignment==0 means 64K) */
Packit Service 1fb00e
Packit Service 1fb00e
    RsSmallAddressCheck (ACPI_RESOURCE_NAME_MEMORY24,
Packit Service 0129ce
        Minimum,
Packit Service 0129ce
        Maximum,
Packit Service 0129ce
        AddressLength,
Packit Service 0129ce
        Alignment,
Packit Service 1fb00e
        MinOp, MaxOp, LengthOp, NULL, Info->DescriptorTypeOp);
Packit Service 1fb00e
Packit Service 0129ce
    ACPI_MOVE_16_TO_16(&Descriptor->Memory24.Minimum, &Minimum);
Packit Service 0129ce
    ACPI_MOVE_16_TO_16(&Descriptor->Memory24.Maximum, &Maximum);
Packit Service 0129ce
    ACPI_MOVE_16_TO_16(&Descriptor->Memory24.AddressLength, &AddressLength);
Packit Service 0129ce
    ACPI_MOVE_16_TO_16(&Descriptor->Memory24.Alignment, &Alignment);
Packit Service 0129ce
Packit Service 1fb00e
    return (Rnode);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    RsDoMemory32Descriptor
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  Info                - Parse Op and resource template offset
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Completed resource node
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Construct a short "Memory32" descriptor
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ASL_RESOURCE_NODE *
Packit Service 1fb00e
RsDoMemory32Descriptor (
Packit Service 1fb00e
    ASL_RESOURCE_INFO       *Info)
Packit Service 1fb00e
{
Packit Service 1fb00e
    AML_RESOURCE            *Descriptor;
Packit Service 1fb00e
    ACPI_PARSE_OBJECT       *InitializerOp;
Packit Service 1fb00e
    ACPI_PARSE_OBJECT       *MinOp = NULL;
Packit Service 1fb00e
    ACPI_PARSE_OBJECT       *MaxOp = NULL;
Packit Service 1fb00e
    ACPI_PARSE_OBJECT       *LengthOp = NULL;
Packit Service 1fb00e
    ACPI_PARSE_OBJECT       *AlignOp = NULL;
Packit Service 1fb00e
    ASL_RESOURCE_NODE       *Rnode;
Packit Service 1fb00e
    UINT32                  CurrentByteOffset;
Packit Service 0129ce
    UINT32                  Minimum = 0;
Packit Service 0129ce
    UINT32                  Maximum = 0;
Packit Service 0129ce
    UINT32                  AddressLength = 0;
Packit Service 0129ce
    UINT32                  Alignment = 0;
Packit Service 0129ce
    UINT16                  ResourceLength;
Packit Service 1fb00e
    UINT32                  i;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    InitializerOp = Info->DescriptorTypeOp->Asl.Child;
Packit Service 1fb00e
    CurrentByteOffset = Info->CurrentByteOffset;
Packit Service 1fb00e
    Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_MEMORY32));
Packit Service 1fb00e
Packit Service 1fb00e
    Descriptor = Rnode->Buffer;
Packit Service 1fb00e
    Descriptor->Memory32.DescriptorType = ACPI_RESOURCE_NAME_MEMORY32;
Packit Service 0129ce
    ResourceLength = 17;
Packit Service 0129ce
    ACPI_MOVE_16_TO_16(&Descriptor->Memory32.ResourceLength, &ResourceLength);
Packit Service 1fb00e
Packit Service 1fb00e
    /* Process all child initialization nodes */
Packit Service 1fb00e
Packit Service 1fb00e
    for (i = 0; InitializerOp; i++)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        switch (i)
Packit Service 1fb00e
        {
Packit Service 1fb00e
        case 0: /* Read/Write type */
Packit Service 1fb00e
Packit Service 1fb00e
            RsSetFlagBits (&Descriptor->Memory32.Flags, InitializerOp, 0, 1);
Packit Service 1fb00e
            RsCreateBitField (InitializerOp, ACPI_RESTAG_READWRITETYPE,
Packit Service 1fb00e
                CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Flags), 0);
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case 1:  /* Min Address */
Packit Service 1fb00e
Packit Service 0129ce
            Minimum = (UINT32) InitializerOp->Asl.Value.Integer;
Packit Service 1fb00e
            RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
Packit Service 1fb00e
                CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Minimum));
Packit Service 1fb00e
            MinOp = InitializerOp;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case 2: /* Max Address */
Packit Service 1fb00e
Packit Service 0129ce
            Maximum = (UINT32) InitializerOp->Asl.Value.Integer;
Packit Service 1fb00e
            RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
Packit Service 1fb00e
                CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Maximum));
Packit Service 1fb00e
            MaxOp = InitializerOp;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case 3: /* Alignment */
Packit Service 1fb00e
Packit Service 0129ce
            Alignment = (UINT32) InitializerOp->Asl.Value.Integer;
Packit Service 1fb00e
            RsCreateDwordField (InitializerOp, ACPI_RESTAG_ALIGNMENT,
Packit Service 1fb00e
                CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Alignment));
Packit Service 1fb00e
            AlignOp = InitializerOp;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case 4: /* Length */
Packit Service 1fb00e
Packit Service 0129ce
            AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
Packit Service 1fb00e
            RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
Packit Service 1fb00e
                CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.AddressLength));
Packit Service 1fb00e
            LengthOp = InitializerOp;
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case 5: /* Name */
Packit Service 1fb00e
Packit Service 1fb00e
            UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp);
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        default:
Packit Service 1fb00e
Packit Service 1fb00e
            AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);
Packit Service 1fb00e
            break;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    /* Validate the Min/Max/Len/Align values */
Packit Service 1fb00e
Packit Service 1fb00e
    RsSmallAddressCheck (ACPI_RESOURCE_NAME_MEMORY32,
Packit Service 0129ce
        Minimum,
Packit Service 0129ce
        Maximum,
Packit Service 0129ce
        AddressLength,
Packit Service 0129ce
        Alignment,
Packit Service 1fb00e
        MinOp, MaxOp, LengthOp, AlignOp, Info->DescriptorTypeOp);
Packit Service 1fb00e
Packit Service 0129ce
    ACPI_MOVE_32_TO_32(&Descriptor->Memory32.Minimum, &Minimum);
Packit Service 0129ce
    ACPI_MOVE_32_TO_32(&Descriptor->Memory32.Maximum, &Maximum);
Packit Service 0129ce
    ACPI_MOVE_32_TO_32(&Descriptor->Memory32.AddressLength, &AddressLength);
Packit Service 0129ce
    ACPI_MOVE_32_TO_32(&Descriptor->Memory32.Alignment, &Alignment);
Packit Service 0129ce
Packit Service 1fb00e
    return (Rnode);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    RsDoMemory32FixedDescriptor
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  Info                - Parse Op and resource template offset
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Completed resource node
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Construct a short "Memory32Fixed" descriptor
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ASL_RESOURCE_NODE *
Packit Service 1fb00e
RsDoMemory32FixedDescriptor (
Packit Service 1fb00e
    ASL_RESOURCE_INFO       *Info)
Packit Service 1fb00e
{
Packit Service 1fb00e
    AML_RESOURCE            *Descriptor;
Packit Service 1fb00e
    ACPI_PARSE_OBJECT       *InitializerOp;
Packit Service 1fb00e
    ASL_RESOURCE_NODE       *Rnode;
Packit Service 1fb00e
    UINT32                  CurrentByteOffset;
Packit Service 0129ce
    UINT16                  ResourceLength;
Packit Service 1fb00e
    UINT32                  i;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    InitializerOp = Info->DescriptorTypeOp->Asl.Child;
Packit Service 1fb00e
    CurrentByteOffset = Info->CurrentByteOffset;
Packit Service 1fb00e
    Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_FIXED_MEMORY32));
Packit Service 1fb00e
Packit Service 1fb00e
    Descriptor = Rnode->Buffer;
Packit Service 1fb00e
    Descriptor->FixedMemory32.DescriptorType = ACPI_RESOURCE_NAME_FIXED_MEMORY32;
Packit Service 0129ce
    ResourceLength = 9;
Packit Service 0129ce
    ACPI_MOVE_16_TO_16(&Descriptor->FixedMemory32.ResourceLength, &ResourceLength);
Packit Service 1fb00e
Packit Service 1fb00e
    /* Process all child initialization nodes */
Packit Service 1fb00e
Packit Service 1fb00e
    for (i = 0; InitializerOp; i++)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        switch (i)
Packit Service 1fb00e
        {
Packit Service 1fb00e
        case 0: /* Read/Write type */
Packit Service 1fb00e
Packit Service 1fb00e
            RsSetFlagBits (&Descriptor->FixedMemory32.Flags, InitializerOp, 0, 1);
Packit Service 1fb00e
            RsCreateBitField (InitializerOp, ACPI_RESTAG_READWRITETYPE,
Packit Service 1fb00e
                CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.Flags), 0);
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case 1: /* Address */
Packit Service 1fb00e
Packit Service 0129ce
            ACPI_MOVE_64_TO_32(&Descriptor->FixedMemory32.Address,
Packit Service 0129ce
                &InitializerOp->Asl.Value.Integer);
Packit Service 1fb00e
            RsCreateDwordField (InitializerOp, ACPI_RESTAG_BASEADDRESS,
Packit Service 1fb00e
                CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.Address));
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case 2: /* Length */
Packit Service 1fb00e
Packit Service 0129ce
            ACPI_MOVE_64_TO_32(&Descriptor->FixedMemory32.AddressLength,
Packit Service 0129ce
                &InitializerOp->Asl.Value.Integer);
Packit Service 1fb00e
            RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
Packit Service 1fb00e
                CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.AddressLength));
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case 3: /* Name */
Packit Service 1fb00e
Packit Service 1fb00e
            UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp);
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        default:
Packit Service 1fb00e
Packit Service 1fb00e
            AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);
Packit Service 1fb00e
            break;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    return (Rnode);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    RsDoStartDependentDescriptor
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  Info                - Parse Op and resource template offset
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Completed resource node
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Construct a short "StartDependentFn" descriptor
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ASL_RESOURCE_NODE *
Packit Service 1fb00e
RsDoStartDependentDescriptor (
Packit Service 1fb00e
    ASL_RESOURCE_INFO       *Info)
Packit Service 1fb00e
{
Packit Service 1fb00e
    AML_RESOURCE            *Descriptor;
Packit Service 1fb00e
    ACPI_PARSE_OBJECT       *InitializerOp;
Packit Service 1fb00e
    ASL_RESOURCE_NODE       *Rnode;
Packit Service 1fb00e
    ASL_RESOURCE_NODE       *PreviousRnode;
Packit Service 1fb00e
    ASL_RESOURCE_NODE       *NextRnode;
Packit Service 1fb00e
    ASL_RESOURCE_INFO       NextInfo;
Packit Service 1fb00e
    UINT32                  CurrentByteOffset;
Packit Service 1fb00e
    UINT32                  i;
Packit Service 1fb00e
    UINT8                   State;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    InitializerOp = Info->DescriptorTypeOp->Asl.Child;
Packit Service 1fb00e
    CurrentByteOffset = Info->CurrentByteOffset;
Packit Service 1fb00e
    Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_START_DEPENDENT));
Packit Service 1fb00e
Packit Service 1fb00e
    PreviousRnode = Rnode;
Packit Service 1fb00e
    Descriptor = Rnode->Buffer;
Packit Service 1fb00e
Packit Service 1fb00e
    /* Increment offset past StartDependent descriptor */
Packit Service 1fb00e
Packit Service 1fb00e
    CurrentByteOffset += sizeof (AML_RESOURCE_START_DEPENDENT);
Packit Service 1fb00e
Packit Service 1fb00e
    /* Descriptor has priority byte */
Packit Service 1fb00e
Packit Service 1fb00e
    Descriptor->StartDpf.DescriptorType =
Packit Service 1fb00e
        ACPI_RESOURCE_NAME_START_DEPENDENT | (ASL_RDESC_ST_DEPEND_SIZE + 0x01);
Packit Service 1fb00e
Packit Service 1fb00e
    /* Process all child initialization nodes */
Packit Service 1fb00e
Packit Service 1fb00e
    State = ACPI_RSTATE_START_DEPENDENT;
Packit Service 1fb00e
    for (i = 0; InitializerOp; i++)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        switch (i)
Packit Service 1fb00e
        {
Packit Service 1fb00e
        case 0: /* Compatibility Priority */
Packit Service 1fb00e
Packit Service 1fb00e
            if ((UINT8) InitializerOp->Asl.Value.Integer > 2)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                AslError (ASL_ERROR, ASL_MSG_INVALID_PRIORITY,
Packit Service 1fb00e
                    InitializerOp, NULL);
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 1fb00e
            RsSetFlagBits (&Descriptor->StartDpf.Flags, InitializerOp, 0, 0);
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        case 1: /* Performance/Robustness Priority */
Packit Service 1fb00e
Packit Service 1fb00e
            if ((UINT8) InitializerOp->Asl.Value.Integer > 2)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                AslError (ASL_ERROR, ASL_MSG_INVALID_PERFORMANCE,
Packit Service 1fb00e
                    InitializerOp, NULL);
Packit Service 1fb00e
            }
Packit Service 1fb00e
Packit Service 1fb00e
            RsSetFlagBits (&Descriptor->StartDpf.Flags, InitializerOp, 2, 0);
Packit Service 1fb00e
            break;
Packit Service 1fb00e
Packit Service 1fb00e
        default:
Packit Service 1fb00e
Packit Service 1fb00e
            NextInfo.CurrentByteOffset = CurrentByteOffset;
Packit Service 1fb00e
            NextInfo.DescriptorTypeOp = InitializerOp;
Packit Service 1fb00e
Packit Service 1fb00e
            NextRnode = RsDoOneResourceDescriptor (&NextInfo, &State);
Packit Service 1fb00e
Packit Service 1fb00e
            /*
Packit Service 1fb00e
             * Update current byte offset to indicate the number of bytes from the
Packit Service 1fb00e
             * start of the buffer. Buffer can include multiple descriptors, we
Packit Service 1fb00e
             * must keep track of the offset of not only each descriptor, but each
Packit Service 1fb00e
             * element (field) within each descriptor as well.
Packit Service 1fb00e
             */
Packit Service 1fb00e
            CurrentByteOffset += RsLinkDescriptorChain (
Packit Service 1fb00e
                &PreviousRnode, NextRnode);
Packit Service 1fb00e
            break;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    return (Rnode);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    RsDoStartDependentNoPriDescriptor
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  Info                - Parse Op and resource template offset
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Completed resource node
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Construct a short "StartDependentNoPri" descriptor
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ASL_RESOURCE_NODE *
Packit Service 1fb00e
RsDoStartDependentNoPriDescriptor (
Packit Service 1fb00e
    ASL_RESOURCE_INFO       *Info)
Packit Service 1fb00e
{
Packit Service 1fb00e
    AML_RESOURCE            *Descriptor;
Packit Service 1fb00e
    ACPI_PARSE_OBJECT       *InitializerOp;
Packit Service 1fb00e
    ASL_RESOURCE_NODE       *Rnode;
Packit Service 1fb00e
    ASL_RESOURCE_NODE       *PreviousRnode;
Packit Service 1fb00e
    ASL_RESOURCE_NODE       *NextRnode;
Packit Service 1fb00e
    ASL_RESOURCE_INFO       NextInfo;
Packit Service 1fb00e
    UINT32                  CurrentByteOffset;
Packit Service 1fb00e
    UINT8                   State;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    InitializerOp = Info->DescriptorTypeOp->Asl.Child;
Packit Service 1fb00e
    CurrentByteOffset = Info->CurrentByteOffset;
Packit Service 1fb00e
    Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_START_DEPENDENT_NOPRIO));
Packit Service 1fb00e
Packit Service 1fb00e
    Descriptor = Rnode->Buffer;
Packit Service 1fb00e
    Descriptor->StartDpf.DescriptorType =
Packit Service 1fb00e
        ACPI_RESOURCE_NAME_START_DEPENDENT | ASL_RDESC_ST_DEPEND_SIZE;
Packit Service 1fb00e
    PreviousRnode = Rnode;
Packit Service 1fb00e
Packit Service 1fb00e
    /* Increment offset past StartDependentNoPri descriptor */
Packit Service 1fb00e
Packit Service 1fb00e
    CurrentByteOffset += sizeof (AML_RESOURCE_START_DEPENDENT_NOPRIO);
Packit Service 1fb00e
Packit Service 1fb00e
    /* Process all child initialization nodes */
Packit Service 1fb00e
Packit Service 1fb00e
    State = ACPI_RSTATE_START_DEPENDENT;
Packit Service 1fb00e
    while (InitializerOp)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        NextInfo.CurrentByteOffset = CurrentByteOffset;
Packit Service 1fb00e
        NextInfo.DescriptorTypeOp = InitializerOp;
Packit Service 1fb00e
Packit Service 1fb00e
        NextRnode = RsDoOneResourceDescriptor (&NextInfo, &State);
Packit Service 1fb00e
Packit Service 1fb00e
        /*
Packit Service 1fb00e
         * Update current byte offset to indicate the number of bytes from the
Packit Service 1fb00e
         * start of the buffer. Buffer can include multiple descriptors, we
Packit Service 1fb00e
         * must keep track of the offset of not only each descriptor, but each
Packit Service 1fb00e
         * element (field) within each descriptor as well.
Packit Service 1fb00e
         */
Packit Service 1fb00e
        CurrentByteOffset += RsLinkDescriptorChain (&PreviousRnode, NextRnode);
Packit Service 1fb00e
Packit Service 1fb00e
        InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    return (Rnode);
Packit Service 1fb00e
}
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
/*******************************************************************************
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * FUNCTION:    RsDoVendorSmallDescriptor
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * PARAMETERS:  Info                - Parse Op and resource template offset
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * RETURN:      Completed resource node
Packit Service 1fb00e
 *
Packit Service 1fb00e
 * DESCRIPTION: Construct a short "VendorShort" descriptor
Packit Service 1fb00e
 *
Packit Service 1fb00e
 ******************************************************************************/
Packit Service 1fb00e
Packit Service 1fb00e
ASL_RESOURCE_NODE *
Packit Service 1fb00e
RsDoVendorSmallDescriptor (
Packit Service 1fb00e
    ASL_RESOURCE_INFO       *Info)
Packit Service 1fb00e
{
Packit Service 1fb00e
    AML_RESOURCE            *Descriptor;
Packit Service 1fb00e
    ACPI_PARSE_OBJECT       *InitializerOp;
Packit Service 1fb00e
    ASL_RESOURCE_NODE       *Rnode;
Packit Service 1fb00e
    UINT8                   *VendorData;
Packit Service 1fb00e
    UINT32                  i;
Packit Service 1fb00e
Packit Service 1fb00e
Packit Service 1fb00e
    InitializerOp = Info->DescriptorTypeOp->Asl.Child;
Packit Service 1fb00e
Packit Service 1fb00e
    /* Allocate worst case - 7 vendor bytes */
Packit Service 1fb00e
Packit Service 1fb00e
    Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_VENDOR_SMALL) + 7);
Packit Service 1fb00e
Packit Service 1fb00e
    Descriptor = Rnode->Buffer;
Packit Service 1fb00e
    Descriptor->VendorSmall.DescriptorType = ACPI_RESOURCE_NAME_VENDOR_SMALL;
Packit Service 1fb00e
    VendorData = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_SMALL_HEADER);
Packit Service 1fb00e
Packit Service 1fb00e
    /* Process all child initialization nodes */
Packit Service 1fb00e
Packit Service 1fb00e
    InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
Packit Service 1fb00e
    for (i = 0; InitializerOp; i++)
Packit Service 1fb00e
    {
Packit Service 1fb00e
        if (InitializerOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG)
Packit Service 1fb00e
        {
Packit Service 1fb00e
            break;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        /* Maximum 7 vendor data bytes allowed (0-6) */
Packit Service 1fb00e
Packit Service 1fb00e
        if (i >= 7)
Packit Service 1fb00e
        {
Packit Service 1fb00e
            AslError (ASL_ERROR, ASL_MSG_VENDOR_LIST, InitializerOp, NULL);
Packit Service 1fb00e
Packit Service 1fb00e
            /* Eat the excess initializers */
Packit Service 1fb00e
Packit Service 1fb00e
            while (InitializerOp)
Packit Service 1fb00e
            {
Packit Service 1fb00e
                InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
Packit Service 1fb00e
            }
Packit Service 1fb00e
            break;
Packit Service 1fb00e
        }
Packit Service 1fb00e
Packit Service 1fb00e
        VendorData[i] = (UINT8) InitializerOp->Asl.Value.Integer;
Packit Service 1fb00e
        InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
Packit Service 1fb00e
    }
Packit Service 1fb00e
Packit Service 1fb00e
    /* Adjust the Rnode buffer size, so correct number of bytes are emitted */
Packit Service 1fb00e
Packit Service 1fb00e
    Rnode->BufferLength -= (7 - i);
Packit Service 1fb00e
Packit Service 1fb00e
    /* Set the length in the Type Tag */
Packit Service 1fb00e
Packit Service 1fb00e
    Descriptor->VendorSmall.DescriptorType |= (UINT8) i;
Packit Service 1fb00e
    return (Rnode);
Packit Service 1fb00e
}