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

📄 aslrestype2.c

📁 acpi tools for linux include acpiexec and acpixtract
💻 C
📖 第 1 页 / 共 5 页
字号:
            AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);            break;        }        InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);    }    Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS32) +                            OptionIndex + StringLength;    return (Rnode);}/******************************************************************************* * * FUNCTION:    RsDoDwordMemoryDescriptor * * 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 long "DwordMemory" descriptor * ******************************************************************************/ASL_RESOURCE_NODE *RsDoDwordMemoryDescriptor (    ACPI_PARSE_OBJECT       *Op,    UINT32                  CurrentByteOffset){    AML_RESOURCE            *Descriptor;    ACPI_PARSE_OBJECT       *InitializerOp;    ASL_RESOURCE_NODE       *Rnode;    UINT8                   *OptionalFields;    UINT16                  StringLength = 0;    UINT32                  OptionIndex = 0;    UINT32                  i;    BOOLEAN                 ResSourceIndex = FALSE;    InitializerOp = Op->Asl.Child;    StringLength = RsGetStringDataLength (InitializerOp);    Rnode = RsAllocateResourceNode (                sizeof (AML_RESOURCE_ADDRESS32) + 1 + StringLength);    Descriptor = Rnode->Buffer;    Descriptor->Address32.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS32;    Descriptor->Address32.ResourceType   = ACPI_ADDRESS_TYPE_MEMORY_RANGE;    /*     * Initial descriptor length -- may be enlarged if there are     * optional fields present     */    OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS32);    Descriptor->Address32.ResourceLength = (UINT16)        (sizeof (AML_RESOURCE_ADDRESS32) -         sizeof (AML_RESOURCE_LARGE_HEADER));    /* Process all child initialization nodes */    for (i = 0; InitializerOp; i++)    {        switch (i)        {        case 0: /* Resource Usage */            RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 0, 1);            break;        case 1: /* DecodeType */            RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 1, 0);            RsCreateBitField (InitializerOp, ACPI_RESTAG_DECODE,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 1);            break;        case 2: /* MinType */            RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 2, 0);            RsCreateBitField (InitializerOp, ACPI_RESTAG_MINTYPE,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 2);            break;        case 3: /* MaxType */            RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 3, 0);            RsCreateBitField (InitializerOp, ACPI_RESTAG_MAXTYPE,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 3);            break;        case 4: /* Memory Type */            RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 1, 0);            RsCreateBitField (InitializerOp, ACPI_RESTAG_MEMTYPE,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 1);            break;        case 5: /* Read/Write Type */            RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 0, 1);            RsCreateBitField (InitializerOp, ACPI_RESTAG_READWRITETYPE,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 0);            break;        case 6: /* Address Granularity */            Descriptor->Address32.Granularity =                (UINT32) InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_GRANULARITY,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity));            break;        case 7: /* Min Address */            Descriptor->Address32.Minimum =                (UINT32) InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_MINADDR,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum));            break;        case 8: /* Max Address */            Descriptor->Address32.Maximum =                (UINT32) InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_MAXADDR,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum));            break;        case 9: /* Translation Offset */            Descriptor->Address32.TranslationOffset =                (UINT32) InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_TRANSLATION,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset));            break;        case 10: /* Address Length */            Descriptor->Address32.AddressLength =                (UINT32) InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength));            break;        case 11: /* ResSourceIndex [Optional Field - BYTE] */            if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)            {                OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;                OptionIndex++;                Descriptor->Address32.ResourceLength++;                ResSourceIndex = TRUE;            }            break;        case 12: /* ResSource [Optional Field - STRING] */            if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) &&                (InitializerOp->Asl.Value.String))            {                if (StringLength)                {                    Descriptor->Address32.ResourceLength = (UINT16)                        (Descriptor->Address32.ResourceLength + StringLength);                    strcpy ((char *)                        &OptionalFields[OptionIndex],                        InitializerOp->Asl.Value.String);                    /* ResourceSourceIndex must also be valid */                    if (!ResSourceIndex)                    {                        AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX,                            InitializerOp, NULL);                    }                }            }#if 0            /*             * Not a valid ResourceSource, ResourceSourceIndex must also             * be invalid             */            else if (ResSourceIndex)            {                AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE,                    InitializerOp, NULL);            }#endif            break;        case 13: /* ResourceTag */            UtAttachNamepathToOwner (Op, InitializerOp);            break;        case 14: /* Address Range */            RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 3, 0);            RsCreateBitField (InitializerOp, ACPI_RESTAG_MEMATTRIBUTES,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 3);            break;        case 15: /* Type */            RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 5, 0);            RsCreateBitField (InitializerOp, ACPI_RESTAG_TYPE,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 5);            break;        default:            AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);            break;        }        InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);    }    Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS32) +                            OptionIndex + StringLength;    return (Rnode);}/******************************************************************************* * * FUNCTION:    RsDoDwordSpaceDescriptor * * 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 long "DwordSpace" descriptor * ******************************************************************************/ASL_RESOURCE_NODE *RsDoDwordSpaceDescriptor (    ACPI_PARSE_OBJECT       *Op,    UINT32                  CurrentByteOffset){    AML_RESOURCE            *Descriptor;    ACPI_PARSE_OBJECT       *InitializerOp;    ASL_RESOURCE_NODE       *Rnode;    UINT8                   *OptionalFields;    UINT16                  StringLength = 0;    UINT32                  OptionIndex = 0;    UINT32                  i;    BOOLEAN                 ResSourceIndex = FALSE;    InitializerOp = Op->Asl.Child;    StringLength = RsGetStringDataLength (InitializerOp);    Rnode = RsAllocateResourceNode (                sizeof (AML_RESOURCE_ADDRESS32) + 1 + StringLength);    Descriptor = Rnode->Buffer;    Descriptor->Address32.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS32;    /*     * Initial descriptor length -- may be enlarged if there are     * optional fields present     */    OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS32);    Descriptor->Address32.ResourceLength = (UINT16)        (sizeof (AML_RESOURCE_ADDRESS32) -         sizeof (AML_RESOURCE_LARGE_HEADER));    /* Process all child initialization nodes */    for (i = 0; InitializerOp; i++)    {        switch (i)        {        case 0: /* Resource Type */            Descriptor->Address32.ResourceType =                (UINT8) InitializerOp->Asl.Value.Integer;            break;        case 1: /* Resource Usage */            RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 0, 1);            break;        case 2: /* DecodeType */            RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 1, 0);            RsCreateBitField (InitializerOp, ACPI_RESTAG_DECODE,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 1);            break;        case 3: /* MinType */            RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 2, 0);            RsCreateBitField (InitializerOp, ACPI_RESTAG_MINTYPE,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 2);            break;        case 4: /* MaxType */            RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 3, 0);            RsCreateBitField (InitializerOp, ACPI_RESTAG_MAXTYPE,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 3);            break;        case 5: /* Type-Specific flags */            Descriptor->Address32.SpecificFlags =                (UINT8) InitializerOp->Asl.Value.Integer;            break;        case 6: /* Address Granularity */            Descriptor->Address32.Granularity =                (UINT32) InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_GRANULARITY,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity));            break;        case 7: /* Min Address */            Descriptor->Address32.Minimum =                (UINT32) InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_MINADDR,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum));            break;        case 8: /* Max Address */            Descriptor->Address32.Maximum =                (UINT32) InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_MAXADDR,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum));            break;        case 9: /* Translation Offset */            Descriptor->Address32.TranslationOffset =                (UINT32) InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_TRANSLATION,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset));            break;        case 10: /* Address Length */            Descriptor->Address32.AddressLength =                (UINT32) InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength));

⌨️ 快捷键说明

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