⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aslrestype1.c

📁 acpi tools for linux include acpiexec and acpixtract
💻 C
📖 第 1 页 / 共 3 页
字号:
/******************************************************************************* * * FUNCTION:    RsDoMemory32Descriptor * * PARAMETERS:  Op                  - Parent resource descriptor parse node *              CurrentByteOffset   - Offset into the resource template AML *                                    buffer (to track references to the desc) * * RETURN:      Completed resource node * * DESCRIPTION: Construct a short "Memory32" descriptor * ******************************************************************************/ASL_RESOURCE_NODE *RsDoMemory32Descriptor (    ACPI_PARSE_OBJECT       *Op,    UINT32                  CurrentByteOffset){    AML_RESOURCE            *Descriptor;    ACPI_PARSE_OBJECT       *InitializerOp;    ASL_RESOURCE_NODE       *Rnode;    UINT32                  i;    InitializerOp = Op->Asl.Child;    Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_MEMORY32));    Descriptor = Rnode->Buffer;    Descriptor->Memory32.DescriptorType  = ACPI_RESOURCE_NAME_MEMORY32;    Descriptor->Memory32.ResourceLength = 17;    /* Process all child initialization nodes */    for (i = 0; InitializerOp; i++)    {        switch (i)        {        case 0: /* Read/Write type */            RsSetFlagBits (&Descriptor->Memory32.Flags, InitializerOp, 0, 1);            RsCreateBitField (InitializerOp, ACPI_RESTAG_READWRITETYPE,                CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Flags), 0);            break;        case 1:  /* Min Address */            Descriptor->Memory32.Minimum = (UINT32) InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_MINADDR,                CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Minimum));            break;        case 2: /* Max Address */            Descriptor->Memory32.Maximum = (UINT32) InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_MAXADDR,                CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Maximum));            break;        case 3: /* Alignment */            Descriptor->Memory32.Alignment = (UINT32) InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_ALIGNMENT,                CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Alignment));            break;        case 4: /* Length */            Descriptor->Memory32.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH,                CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.AddressLength));            break;        case 5: /* Name */            UtAttachNamepathToOwner (Op, InitializerOp);            break;        default:            AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);            break;        }        InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);    }    return (Rnode);}/******************************************************************************* * * FUNCTION:    RsDoMemory32FixedDescriptor * * PARAMETERS:  Op                  - Parent resource descriptor parse node *              CurrentByteOffset   - Offset into the resource template AML *                                    buffer (to track references to the desc) * * RETURN:      Completed resource node * * DESCRIPTION: Construct a short "Memory32Fixed" descriptor * ******************************************************************************/ASL_RESOURCE_NODE *RsDoMemory32FixedDescriptor (    ACPI_PARSE_OBJECT       *Op,    UINT32                  CurrentByteOffset){    AML_RESOURCE            *Descriptor;    ACPI_PARSE_OBJECT       *InitializerOp;    ASL_RESOURCE_NODE       *Rnode;    UINT32                  i;    InitializerOp = Op->Asl.Child;    Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_FIXED_MEMORY32));    Descriptor = Rnode->Buffer;    Descriptor->FixedMemory32.DescriptorType  = ACPI_RESOURCE_NAME_FIXED_MEMORY32;    Descriptor->FixedMemory32.ResourceLength = 9;    /* Process all child initialization nodes */    for (i = 0; InitializerOp; i++)    {        switch (i)        {        case 0: /* Read/Write type */            RsSetFlagBits (&Descriptor->FixedMemory32.Flags, InitializerOp, 0, 1);            RsCreateBitField (InitializerOp, ACPI_RESTAG_READWRITETYPE,                CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.Flags), 0);            break;        case 1: /* Address */            Descriptor->FixedMemory32.Address = (UINT32) InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_BASEADDRESS,                CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.Address));            break;        case 2: /* Length */            Descriptor->FixedMemory32.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH,                CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.AddressLength));            break;        case 3: /* Name */            UtAttachNamepathToOwner (Op, InitializerOp);            break;        default:            AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);            break;        }        InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);    }    return (Rnode);}/******************************************************************************* * * FUNCTION:    RsDoStartDependentDescriptor * * PARAMETERS:  Op                  - Parent resource descriptor parse node *              CurrentByteOffset   - Offset into the resource template AML *                                    buffer (to track references to the desc) * * RETURN:      Completed resource node * * DESCRIPTION: Construct a short "StartDependentFn" descriptor * ******************************************************************************/ASL_RESOURCE_NODE *RsDoStartDependentDescriptor (    ACPI_PARSE_OBJECT       *Op,    UINT32                  CurrentByteOffset){    AML_RESOURCE            *Descriptor;    ACPI_PARSE_OBJECT       *InitializerOp;    ASL_RESOURCE_NODE       *Rnode;    ASL_RESOURCE_NODE       *PreviousRnode;    ASL_RESOURCE_NODE       *NextRnode;    UINT32                  i;    UINT8                   State;    InitializerOp = Op->Asl.Child;    Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_START_DEPENDENT));    PreviousRnode = Rnode;    Descriptor = Rnode->Buffer;    /* Descriptor has priority byte */    Descriptor->StartDpf.DescriptorType  = ACPI_RESOURCE_NAME_START_DEPENDENT |                                      (ASL_RDESC_ST_DEPEND_SIZE + 0x01);    /* Process all child initialization nodes */    State = ACPI_RSTATE_START_DEPENDENT;    for (i = 0; InitializerOp; i++)    {        switch (i)        {        case 0: /* Compatibility Priority */            if ((UINT8) InitializerOp->Asl.Value.Integer > 2)            {                AslError (ASL_ERROR, ASL_MSG_INVALID_PRIORITY,                    InitializerOp, NULL);            }            RsSetFlagBits (&Descriptor->StartDpf.Flags, InitializerOp, 0, 0);            break;        case 1: /* Performance/Robustness Priority */            if ((UINT8) InitializerOp->Asl.Value.Integer > 2)            {                AslError (ASL_ERROR, ASL_MSG_INVALID_PERFORMANCE,                    InitializerOp, NULL);            }            RsSetFlagBits (&Descriptor->StartDpf.Flags, InitializerOp, 2, 0);            break;        default:            NextRnode = RsDoOneResourceDescriptor  (InitializerOp,                        CurrentByteOffset, &State);            /*             * Update current byte offset to indicate the number of bytes from the             * start of the buffer.  Buffer can include multiple descriptors, we             * must keep track of the offset of not only each descriptor, but each             * element (field) within each descriptor as well.             */            CurrentByteOffset += RsLinkDescriptorChain (&PreviousRnode,                                    NextRnode);            break;        }        InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);    }    return (Rnode);}/******************************************************************************* * * FUNCTION:    RsDoStartDependentNoPriDescriptor * * PARAMETERS:  Op                  - Parent resource descriptor parse node *              CurrentByteOffset   - Offset into the resource template AML *                                    buffer (to track references to the desc) * * RETURN:      Completed resource node * * DESCRIPTION: Construct a short "StartDependentNoPri" descriptor * ******************************************************************************/ASL_RESOURCE_NODE *RsDoStartDependentNoPriDescriptor (    ACPI_PARSE_OBJECT       *Op,    UINT32                  CurrentByteOffset){    AML_RESOURCE            *Descriptor;    ACPI_PARSE_OBJECT       *InitializerOp;    ASL_RESOURCE_NODE       *Rnode;    ASL_RESOURCE_NODE       *PreviousRnode;    ASL_RESOURCE_NODE       *NextRnode;    UINT8                   State;    InitializerOp = Op->Asl.Child;    Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_START_DEPENDENT_NOPRIO));    Descriptor = Rnode->Buffer;    Descriptor->StartDpf.DescriptorType  = ACPI_RESOURCE_NAME_START_DEPENDENT |                                      ASL_RDESC_ST_DEPEND_SIZE;    PreviousRnode = Rnode;    /* Process all child initialization nodes */    State = ACPI_RSTATE_START_DEPENDENT;    while (InitializerOp)    {        NextRnode = RsDoOneResourceDescriptor  (InitializerOp,                        CurrentByteOffset, &State);        /*         * Update current byte offset to indicate the number of bytes from the         * start of the buffer.  Buffer can include multiple descriptors, we         * must keep track of the offset of not only each descriptor, but each         * element (field) within each descriptor as well.         */        CurrentByteOffset += RsLinkDescriptorChain (&PreviousRnode, NextRnode);        InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);    }    return (Rnode);}/******************************************************************************* * * FUNCTION:    RsDoVendorSmallDescriptor * * PARAMETERS:  Op                  - Parent resource descriptor parse node *              CurrentByteOffset   - Offset into the resource template AML *                                    buffer (to track references to the desc) * * RETURN:      Completed resource node * * DESCRIPTION: Construct a short "VendorShort" descriptor * ******************************************************************************/ASL_RESOURCE_NODE *RsDoVendorSmallDescriptor (    ACPI_PARSE_OBJECT       *Op,    UINT32                  CurrentByteOffset){    AML_RESOURCE            *Descriptor;    ACPI_PARSE_OBJECT       *InitializerOp;    ASL_RESOURCE_NODE       *Rnode;    UINT8                   *VendorData;    UINT32                  i;    InitializerOp = Op->Asl.Child;    /* Allocate worst case - 7 vendor bytes */    Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_VENDOR_SMALL) + 7);    Descriptor = Rnode->Buffer;    Descriptor->VendorSmall.DescriptorType  = ACPI_RESOURCE_NAME_VENDOR_SMALL;    VendorData = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_SMALL_HEADER);    /* Process all child initialization nodes */    InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);    for (i = 0; InitializerOp; i++)    {        if (InitializerOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG)        {            break;        }        /* Maximum 7 vendor data bytes allowed (0-6) */        if (i >= 7)        {            AslError (ASL_ERROR, ASL_MSG_VENDOR_LIST, InitializerOp, NULL);            /* Eat the excess initializers */            while (InitializerOp)            {                InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);            }            break;        }        VendorData[i] = (UINT8) InitializerOp->Asl.Value.Integer;        InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);    }    /* Adjust the Rnode buffer size, so correct number of bytes are emitted */    Rnode->BufferLength -= (7 - i);    /* Set the length in the Type Tag */    Descriptor->VendorSmall.DescriptorType |= (UINT8) i;    return (Rnode);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -