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

📄 exoparg6.c

📁 acpi tools for linux include acpiexec and acpixtract
💻 C
📖 第 1 页 / 共 2 页
字号:
        /*         * True if less than or equal: (P[i] <= M) (P[i] NotGreater than M)         * Change to:                  (M >= P[i]) (M NotLess than P[i])         */        Status = AcpiExDoLogicalOp (AML_LLESS_OP, MatchObj, PackageObj,                    &LogicalResult);        if (ACPI_FAILURE (Status))        {            return (FALSE);        }        LogicalResult = (BOOLEAN) !LogicalResult;        break;    case MATCH_MLT:        /*         * True if less than: (P[i] < M)         * Change to:         (M > P[i])         */        Status = AcpiExDoLogicalOp (AML_LGREATER_OP, MatchObj, PackageObj,                    &LogicalResult);        if (ACPI_FAILURE (Status))        {            return (FALSE);        }        break;    case MATCH_MGE:        /*         * True if greater than or equal: (P[i] >= M) (P[i] NotLess than M)         * Change to:                     (M <= P[i]) (M NotGreater than P[i])         */        Status = AcpiExDoLogicalOp (AML_LGREATER_OP, MatchObj, PackageObj,                    &LogicalResult);        if (ACPI_FAILURE (Status))        {            return (FALSE);        }        LogicalResult = (BOOLEAN)!LogicalResult;        break;    case MATCH_MGT:        /*         * True if greater than: (P[i] > M)         * Change to:            (M < P[i])         */        Status = AcpiExDoLogicalOp (AML_LLESS_OP, MatchObj, PackageObj,                    &LogicalResult);        if (ACPI_FAILURE (Status))        {            return (FALSE);        }        break;    default:        /* Undefined */        return (FALSE);    }    return LogicalResult;}/******************************************************************************* * * FUNCTION:    AcpiExOpcode_6A_0T_1R * * PARAMETERS:  WalkState           - Current walk state * * RETURN:      Status * * DESCRIPTION: Execute opcode with 6 arguments, no target, and a return value * ******************************************************************************/ACPI_STATUSAcpiExOpcode_6A_0T_1R (    ACPI_WALK_STATE         *WalkState){    ACPI_OPERAND_OBJECT     **Operand = &WalkState->Operands[0];    ACPI_OPERAND_OBJECT     *ReturnDesc = NULL;    ACPI_STATUS             Status = AE_OK;    ACPI_INTEGER            Index;    ACPI_OPERAND_OBJECT     *ThisElement;    ACPI_FUNCTION_TRACE_STR (ExOpcode_6A_0T_1R,        AcpiPsGetOpcodeName (WalkState->Opcode));    switch (WalkState->Opcode)    {    case AML_MATCH_OP:        /*         * Match (SearchPkg[0], MatchOp1[1], MatchObj1[2],         *                      MatchOp2[3], MatchObj2[4], StartIndex[5])         */        /* Validate both Match Term Operators (MTR, MEQ, etc.) */        if ((Operand[1]->Integer.Value > MAX_MATCH_OPERATOR) ||            (Operand[3]->Integer.Value > MAX_MATCH_OPERATOR))        {            ACPI_ERROR ((AE_INFO, "Match operator out of range"));            Status = AE_AML_OPERAND_VALUE;            goto Cleanup;        }        /* Get the package StartIndex, validate against the package length */        Index = Operand[5]->Integer.Value;        if (Index >= Operand[0]->Package.Count)        {            ACPI_ERROR ((AE_INFO,                "Index (%X%8.8X) beyond package end (%X)",                ACPI_FORMAT_UINT64 (Index), Operand[0]->Package.Count));            Status = AE_AML_PACKAGE_LIMIT;            goto Cleanup;        }        /* Create an integer for the return value */        ReturnDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER);        if (!ReturnDesc)        {            Status = AE_NO_MEMORY;            goto Cleanup;        }        /* Default return value if no match found */        ReturnDesc->Integer.Value = ACPI_INTEGER_MAX;        /*         * Examine each element until a match is found. Both match conditions         * must be satisfied for a match to occur. Within the loop,         * "continue" signifies that the current element does not match         * and the next should be examined.         *         * Upon finding a match, the loop will terminate via "break" at         * the bottom.  If it terminates "normally", MatchValue will be         * ACPI_INTEGER_MAX (Ones) (its initial value) indicating that no         * match was found.         */        for ( ; Index < Operand[0]->Package.Count; Index++)        {            /* Get the current package element */            ThisElement = Operand[0]->Package.Elements[Index];            /* Treat any uninitialized (NULL) elements as non-matching */            if (!ThisElement)            {                continue;            }            /*             * Both match conditions must be satisfied. Execution of a continue             * (proceed to next iteration of enclosing for loop) signifies a             * non-match.             */            if (!AcpiExDoMatch ((UINT32) Operand[1]->Integer.Value,                                ThisElement, Operand[2]))            {                continue;            }            if (!AcpiExDoMatch ((UINT32) Operand[3]->Integer.Value,                                ThisElement, Operand[4]))            {                continue;            }            /* Match found: Index is the return value */            ReturnDesc->Integer.Value = Index;            break;        }        break;    case AML_LOAD_TABLE_OP:        Status = AcpiExLoadTableOp (WalkState, &ReturnDesc);        break;    default:        ACPI_ERROR ((AE_INFO, "Unknown AML opcode %X",            WalkState->Opcode));        Status = AE_AML_BAD_OPCODE;        goto Cleanup;    }Cleanup:    /* Delete return object on error */    if (ACPI_FAILURE (Status))    {        AcpiUtRemoveReference (ReturnDesc);    }    /* Save return object on success */    else    {        WalkState->ResultObj = ReturnDesc;    }    return_ACPI_STATUS (Status);}

⌨️ 快捷键说明

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