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

📄 aslrestype2.c

📁 acpi tools for linux include acpiexec and acpixtract
💻 C
📖 第 1 页 / 共 5 页
字号:
        case 13: /* Address Range */            RsSetFlagBits (&Descriptor->ExtAddress64.SpecificFlags, InitializerOp, 3, 0);            RsCreateBitField (InitializerOp, ACPI_RESTAG_MEMATTRIBUTES,                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 3);            break;        case 14: /* Type */            RsSetFlagBits (&Descriptor->ExtAddress64.SpecificFlags, InitializerOp, 5, 0);            RsCreateBitField (InitializerOp, ACPI_RESTAG_TYPE,                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 5);            break;        default:            AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);            break;        }        InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);    }    Rnode->BufferLength = sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) + StringLength;    return (Rnode);}/******************************************************************************* * * FUNCTION:    RsDoExtendedSpaceDescriptor * * 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 "ExtendedSpace" descriptor * ******************************************************************************/ASL_RESOURCE_NODE *RsDoExtendedSpaceDescriptor (    ACPI_PARSE_OBJECT       *Op,    UINT32                  CurrentByteOffset){    AML_RESOURCE            *Descriptor;    ACPI_PARSE_OBJECT       *InitializerOp;    ASL_RESOURCE_NODE       *Rnode;    UINT16                  StringLength = 0;    UINT32                  i;    InitializerOp = Op->Asl.Child;    StringLength = RsGetStringDataLength (InitializerOp);    Rnode = RsAllocateResourceNode (                sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) + 1 + StringLength);    Descriptor = Rnode->Buffer;    Descriptor->ExtAddress64.DescriptorType  = ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64;    Descriptor->ExtAddress64.RevisionID      = AML_RESOURCE_EXTENDED_ADDRESS_REVISION;    Descriptor->ExtAddress64.ResourceLength  = (UINT16)        (sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) -         sizeof (AML_RESOURCE_LARGE_HEADER));    /* Process all child initialization nodes */    for (i = 0; InitializerOp; i++)    {        switch (i)        {        case 0: /* Resource Type */            Descriptor->ExtAddress64.ResourceType =                (UINT8) InitializerOp->Asl.Value.Integer;            break;        case 1: /* Resource Usage */            RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 0, 1);            break;        case 2: /* DecodeType */            RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 1, 0);            RsCreateBitField (InitializerOp, ACPI_RESTAG_DECODE,                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 1);            break;        case 3: /* MinType */            RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 2, 0);            RsCreateBitField (InitializerOp, ACPI_RESTAG_MINTYPE,                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 2);            break;        case 4: /* MaxType */            RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 3, 0);            RsCreateBitField (InitializerOp, ACPI_RESTAG_MAXTYPE,                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 3);            break;        case 5: /* Type-Specific flags */            Descriptor->ExtAddress64.SpecificFlags =                (UINT8) InitializerOp->Asl.Value.Integer;            break;        case 6: /* Address Granularity */            Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_GRANULARITY,                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity));            break;        case 7: /* Min Address */            Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_MINADDR,                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum));            break;        case 8: /* Max Address */            Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_MAXADDR,                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum));            break;        case 9: /* Translation Offset */            Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_TRANSLATION,                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset));            break;        case 10: /* Address Length */            Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH,                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength));            break;        case 11: /* Type-Specific Attributes */            Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES,                CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific));            break;        case 12: /* ResourceTag */            UtAttachNamepathToOwner (Op, InitializerOp);            break;        default:            AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);            break;        }        InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);    }    Rnode->BufferLength = sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) + StringLength;    return (Rnode);}/******************************************************************************* * * FUNCTION:    RsDoQwordIoDescriptor * * 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 "QwordIO" descriptor * ******************************************************************************/ASL_RESOURCE_NODE *RsDoQwordIoDescriptor (    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_ADDRESS64) + 1 + StringLength);    Descriptor = Rnode->Buffer;    Descriptor->Address64.DescriptorType  = ACPI_RESOURCE_NAME_ADDRESS64;    Descriptor->Address64.ResourceType    = ACPI_ADDRESS_TYPE_IO_RANGE;    /*     * Initial descriptor length -- may be enlarged if there are     * optional fields present     */    OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS64);    Descriptor->Address64.ResourceLength = (UINT16)        (sizeof (AML_RESOURCE_ADDRESS64) -         sizeof (AML_RESOURCE_LARGE_HEADER));    /* Process all child initialization nodes */    for (i = 0; InitializerOp; i++)    {        switch (i)        {        case 0: /* Resource Usage */            RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 0, 1);            break;        case 1: /* MinType */            RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 2, 0);            RsCreateBitField (InitializerOp, ACPI_RESTAG_MINTYPE,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 2);            break;        case 2: /* MaxType */            RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 3, 0);            RsCreateBitField (InitializerOp, ACPI_RESTAG_MAXTYPE,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 3);            break;        case 3: /* DecodeType */            RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 1, 0);            RsCreateBitField (InitializerOp, ACPI_RESTAG_DECODE,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 1);            break;        case 4: /* Range Type */            RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 0, 3);            RsCreateBitField (InitializerOp, ACPI_RESTAG_RANGETYPE,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 0);            break;        case 5: /* Address Granularity */            Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_GRANULARITY,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity));           break;        case 6: /* Address Min */            Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_MINADDR,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum));            break;        case 7: /* Address Max */            Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_MAXADDR,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum));            break;        case 8: /* Translation Offset */            Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_TRANSLATION,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset));            break;        case 9: /* Address Length */            Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer;            RsCreateByteField (InitializerOp, ACPI_RESTAG_LENGTH,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength));            break;        case 10: /* ResSourceIndex [Optional Field - BYTE] */            if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)            {                OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;                OptionIndex++;                Descriptor->Address64.ResourceLength++;                ResSourceIndex = TRUE;            }            break;        case 11: /* ResSource [Optional Field - STRING] */            if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) &&                (InitializerOp->Asl.Value.String))            {                if (StringLength)                {                    Descriptor->Address64.ResourceLength = (UINT16)                        (Descriptor->Address64.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 12: /* ResourceTag */            UtAttachNamepathToOwner (Op, InitializerOp);            break;        case 13: /* Type */            RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 4, 0);            RsCreateBitField (InitializerOp, ACPI_RESTAG_TYPE,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 4);            break;        case 14: /* Translation Type */            RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 5, 0);            RsCreateBitField (InitializerOp, ACPI_RESTAG_TRANSTYPE,                CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 5);            break;

⌨️ 快捷键说明

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