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

📄 rsmisc.c

📁 acpi tools for linux include acpiexec and acpixtract
💻 C
📖 第 1 页 / 共 2 页
字号:
            /*             * 16-bit encoded bitmask (IRQ macro)             */            ACPI_MOVE_16_TO_16 (&Temp16, Source);            ItemCount = AcpiRsDecodeBitmask (Temp16, Destination);            if (ItemCount)            {                Resource->Length += (ItemCount - 1);            }            Target = ACPI_ADD_PTR (char, Resource, Info->Value);            ACPI_SET8 (Target) = (UINT8) ItemCount;            break;        case ACPI_RSC_EXIT_NE:            /*             * Control - Exit conversion if not equal             */            switch (Info->ResourceOffset)            {            case ACPI_RSC_COMPARE_AML_LENGTH:                if (AmlResourceLength != Info->Value)                {                    goto Exit;                }                break;            case ACPI_RSC_COMPARE_VALUE:                if (ACPI_GET8 (Source) != Info->Value)                {                    goto Exit;                }                break;            default:                ACPI_ERROR ((AE_INFO, "Invalid conversion sub-opcode"));                return_ACPI_STATUS (AE_BAD_PARAMETER);            }            break;        default:            ACPI_ERROR ((AE_INFO, "Invalid conversion opcode"));            return_ACPI_STATUS (AE_BAD_PARAMETER);        }        Count--;        Info++;    }Exit:    if (!FlagsMode)    {        /* Round the resource struct length up to the next boundary (32 or 64) */        Resource->Length = (UINT32) ACPI_ROUND_UP_TO_NATIVE_WORD (Resource->Length);    }    return_ACPI_STATUS (AE_OK);}/******************************************************************************* * * FUNCTION:    AcpiRsConvertResourceToAml * * PARAMETERS:  Resource            - Pointer to the resource descriptor *              Aml                 - Where the AML descriptor is returned *              Info                - Pointer to appropriate conversion table * * RETURN:      Status * * DESCRIPTION: Convert an internal resource descriptor to the corresponding *              external AML resource descriptor. * ******************************************************************************/ACPI_STATUSAcpiRsConvertResourceToAml (    ACPI_RESOURCE           *Resource,    AML_RESOURCE            *Aml,    ACPI_RSCONVERT_INFO     *Info){    void                    *Source = NULL;    void                    *Destination;    ACPI_RSDESC_SIZE        AmlLength = 0;    UINT8                   Count;    UINT16                  Temp16 = 0;    UINT16                  ItemCount = 0;    ACPI_FUNCTION_TRACE (RsConvertResourceToAml);    /*     * First table entry must be ACPI_RSC_INITxxx and must contain the     * table length (# of table entries)     */    Count = INIT_TABLE_LENGTH (Info);    while (Count)    {        /*         * Source is the internal resource descriptor,         * destination is the external AML byte stream buffer         */        Source      = ACPI_ADD_PTR (void, Resource, Info->ResourceOffset);        Destination = ACPI_ADD_PTR (void, Aml, Info->AmlOffset);        switch (Info->Opcode)        {        case ACPI_RSC_INITSET:            ACPI_MEMSET (Aml, 0, INIT_RESOURCE_LENGTH (Info));            AmlLength = INIT_RESOURCE_LENGTH (Info);            AcpiRsSetResourceHeader (INIT_RESOURCE_TYPE (Info), AmlLength, Aml);            break;        case ACPI_RSC_INITGET:            break;        case ACPI_RSC_FLAGINIT:            /*             * Clear the flag byte             */            ACPI_SET8 (Destination) = 0;            break;        case ACPI_RSC_1BITFLAG:            /*             * Mask and shift the flag bit             */            ACPI_SET8 (Destination) |= (UINT8)                ((ACPI_GET8 (Source) & 0x01) << Info->Value);            break;        case ACPI_RSC_2BITFLAG:            /*             * Mask and shift the flag bits             */            ACPI_SET8 (Destination) |= (UINT8)                ((ACPI_GET8 (Source) & 0x03) << Info->Value);            break;        case ACPI_RSC_COUNT:            ItemCount = ACPI_GET8 (Source);            ACPI_SET8 (Destination) = (UINT8) ItemCount;            AmlLength = (UINT16) (AmlLength + (Info->Value * (ItemCount - 1)));            break;        case ACPI_RSC_COUNT16:            ItemCount = ACPI_GET16 (Source);            AmlLength = (UINT16) (AmlLength + ItemCount);            AcpiRsSetResourceLength (AmlLength, Aml);            break;        case ACPI_RSC_LENGTH:            AcpiRsSetResourceLength (Info->Value, Aml);            break;        case ACPI_RSC_MOVE8:        case ACPI_RSC_MOVE16:        case ACPI_RSC_MOVE32:        case ACPI_RSC_MOVE64:            if (Info->Value)            {                ItemCount = Info->Value;            }            AcpiRsMoveData (Destination, Source, ItemCount, Info->Opcode);            break;        case ACPI_RSC_ADDRESS:            /* Set the Resource Type, General Flags, and Type-Specific Flags */            AcpiRsSetAddressCommon (Aml, Resource);            break;        case ACPI_RSC_SOURCEX:            /*             * Optional ResourceSource (Index and String)             */            AmlLength = AcpiRsSetResourceSource (                            Aml, (ACPI_RS_LENGTH) AmlLength, Source);            AcpiRsSetResourceLength (AmlLength, Aml);            break;        case ACPI_RSC_SOURCE:            /*             * Optional ResourceSource (Index and String). This is the more             * complicated case used by the Interrupt() macro             */            AmlLength = AcpiRsSetResourceSource (Aml, Info->Value, Source);            AcpiRsSetResourceLength (AmlLength, Aml);            break;        case ACPI_RSC_BITMASK:            /*             * 8-bit encoded bitmask (DMA macro)             */            ACPI_SET8 (Destination) = (UINT8)                AcpiRsEncodeBitmask (Source,                    *ACPI_ADD_PTR (UINT8, Resource, Info->Value));            break;        case ACPI_RSC_BITMASK16:            /*             * 16-bit encoded bitmask (IRQ macro)             */            Temp16 = AcpiRsEncodeBitmask (Source,                        *ACPI_ADD_PTR (UINT8, Resource, Info->Value));            ACPI_MOVE_16_TO_16 (Destination, &Temp16);            break;        case ACPI_RSC_EXIT_LE:            /*             * Control - Exit conversion if less than or equal             */            if (ItemCount <= Info->Value)            {                goto Exit;            }            break;        case ACPI_RSC_EXIT_NE:            /*             * Control - Exit conversion if not equal             */            switch (COMPARE_OPCODE (Info))            {            case ACPI_RSC_COMPARE_VALUE:                if (*ACPI_ADD_PTR (UINT8, Resource,                        COMPARE_TARGET (Info)) != COMPARE_VALUE (Info))                {                    goto Exit;                }                break;            default:                ACPI_ERROR ((AE_INFO, "Invalid conversion sub-opcode"));                return_ACPI_STATUS (AE_BAD_PARAMETER);            }            break;        case ACPI_RSC_EXIT_EQ:            /*             * Control - Exit conversion if equal             */            if (*ACPI_ADD_PTR (UINT8, Resource,                    COMPARE_TARGET (Info)) == COMPARE_VALUE (Info))            {                goto Exit;            }            break;        default:            ACPI_ERROR ((AE_INFO, "Invalid conversion opcode"));            return_ACPI_STATUS (AE_BAD_PARAMETER);        }        Count--;        Info++;    }Exit:    return_ACPI_STATUS (AE_OK);}#if 0/* Previous resource validations */    if (Aml->ExtAddress64.RevisionID != AML_RESOURCE_EXTENDED_ADDRESS_REVISION)    {        return_ACPI_STATUS (AE_SUPPORT);    }    if (Resource->Data.StartDpf.PerformanceRobustness >= 3)    {        return_ACPI_STATUS (AE_AML_BAD_RESOURCE_VALUE);    }    if (((Aml->Irq.Flags & 0x09) == 0x00) ||        ((Aml->Irq.Flags & 0x09) == 0x09))    {        /*         * Only [ActiveHigh, EdgeSensitive] or [ActiveLow, LevelSensitive]         * polarity/trigger interrupts are allowed (ACPI spec, section         * "IRQ Format"), so 0x00 and 0x09 are illegal.         */        ACPI_ERROR ((AE_INFO,            "Invalid interrupt polarity/trigger in resource list, %X",            Aml->Irq.Flags));        return_ACPI_STATUS (AE_BAD_DATA);    }    Resource->Data.ExtendedIrq.InterruptCount = Temp8;    if (Temp8 < 1)    {        /* Must have at least one IRQ */        return_ACPI_STATUS (AE_AML_BAD_RESOURCE_LENGTH);    }    if (Resource->Data.Dma.Transfer == 0x03)    {        ACPI_ERROR ((AE_INFO,            "Invalid DMA.Transfer preference (3)"));        return_ACPI_STATUS (AE_BAD_DATA);    }#endif

⌨️ 快捷键说明

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